summaryrefslogblamecommitdiff
path: root/hw6/src/reflectanceParameter.cpp
blob: 5b918fb5d179a0e88ee210c2d9d43c886e33deac (plain) (tree)











































































































































                                                                                                                                
/******************************************************************/
/* 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 "reflectanceParameter.h"

/******************************/
/* scalarReflectanceParameter */
/******************************/

/////////////////
// Constructor //
/////////////////
scalarReflectanceParameter::scalarReflectanceParameter(float value)
{
  _value = value;
  _texture = nullptr;
  _channel = 0.0f; 
}


scalarReflectanceParameter::scalarReflectanceParameter(const std::shared_ptr<const texture_base>& texture, unsigned int channel)
{
  _value = 0.0f;
  _texture = texture;
  _channel = channel;
}


scalarReflectanceParameter::scalarReflectanceParameter(const scalarReflectanceParameter& src)
{
  _value = src._value;
  _texture = src._texture;
  _channel = src._channel;
}


//////////////
// Operator //
//////////////
scalarReflectanceParameter& scalarReflectanceParameter::operator=(const scalarReflectanceParameter& src)
{
  _assign(src);
  return *this;
}


float scalarReflectanceParameter::operator()(const vec2d& textureCoord) const
{
  if(_texture) return (*_texture)(textureCoord)[_channel];
  else return _value;
}


/////////////////////
// Private Methods //
/////////////////////
void scalarReflectanceParameter::_assign(const scalarReflectanceParameter& src)
{
  _value = src._value;
  _texture = src._texture;
  _channel = src._channel;
}


void scalarReflectanceParameter::_swap(scalarReflectanceParameter& swp)
{
  std::swap(_value, swp._value);
  std::swap(_texture, swp._texture);
  std::swap(_channel, swp._channel);
}



/*****************************/
/* colorReflectanceParameter */
/*****************************/

/////////////////
// Constructor //
/////////////////
colorReflectanceParameter::colorReflectanceParameter(color value)
{
  _value = value;
  _texture = nullptr;
}


colorReflectanceParameter::colorReflectanceParameter(const std::shared_ptr<const texture_base>& texture)
{
  _value = color(0.0f);
  _texture = texture;
}


colorReflectanceParameter::colorReflectanceParameter(const colorReflectanceParameter& src)
{
  _value = src._value;
  _texture = src._texture;
}


//////////////
// Operator //
//////////////
colorReflectanceParameter& colorReflectanceParameter::operator=(const colorReflectanceParameter& src)
{
  _assign(src);
  return *this;
}


color colorReflectanceParameter::operator()(const vec2d& textureCoord) const
{
  if(_texture) return (*_texture)(textureCoord);
  else return _value;
}


/////////////////////
// Private Methods //
/////////////////////
void colorReflectanceParameter::_assign(const colorReflectanceParameter& src)
{
  _value = src._value;
  _texture = src._texture;
}


void colorReflectanceParameter::_swap(colorReflectanceParameter& swp)
{
  std::swap(_value, swp._value);
  std::swap(_texture, swp._texture);
}