/******************************************************************/ /* This file is part of the homework assignments for CSCI-427/527 */ /* at The College of William & Mary and authored by Pieter Peers. */ /* No part of this file, whether altered or in original form, can */ /* be distributed or used outside the context of CSCI-427/527 */ /* without consent of either the College of William & Mary or */ /* Pieter Peers. */ /******************************************************************/ #include #include "compoundShader.h" ////////////////// // Constructors // ////////////////// compoundShader::compoundShader(const std::vector>& shader_list) : shader_base() { _compound = shader_list; } ///////////// // Methods // ///////////// color compoundShader::shade(const intersectionPoint& ip, const vec3d& light_dir) const { color result(0.0f, 0.0f, 0.0f); for_each(_compound.begin(), _compound.end(), [&](const std::shared_ptr& shader) { result += shader->shade(ip, light_dir); }); // Done. return result; } shaderProperties compoundShader::properties(const intersectionPoint& ip) const { // if any component has a property set, then set it for the compound shaderProperties result(false, false); for(unsigned int i=0; i < _compound.size(); i++) result |= _compound[i]->properties(ip); // Done. return result; } void compoundShader::_print(std::ostream& s) const { s << "Compound Shader (" << _compound.size() << " components): {"; for(unsigned int i=0; i < _compound.size(); i++) { s << *_compound[i]; if(i != _compound.size()-1) s << ", "; } s << "}"; }