1 #include "mof/MaterialBuilder.hpp"
2 #include "mof/Material.hpp"
3 #include "mof/private/GraphicsDeviceImpl.hpp"
4 #include "mof/Constant.hpp"
6 struct mof::MaterialBuilder::Impl{
9 const mof::Animation<mof::Color4f>::Handler& ambient_ ,
10 const mof::Animation<mof::Color4f>::Handler& diffuse_ ,
11 const mof::Animation<mof::Color4f>::Handler& specular_ ,
12 const mof::Animation<float>::Handler& specularPower_ ,
13 const mof::Animation<mof::Color4f>::Handler& emissive_)
14 : diffuse(diffuse_) , ambient(ambient_) , specular(specular_) ,
15 specularPower(specularPower_) , emissive(emissive_) , pMaterial(NULL) , frame(0) {
22 mof::Material* pMaterial;
24 mof::Animation<mof::Color4f>::Handler diffuse;
25 mof::Animation<mof::Color4f>::Handler ambient;
26 mof::Animation<mof::Color4f>::Handler specular;
27 mof::Animation<float>::Handler specularPower;
28 mof::Animation<mof::Color4f>::Handler emissive;
36 mof::MaterialBuilder::MaterialBuilder( )
38 mof::makeConstantHandler(mof::Color4f(0 , 0 , 0)) ,
39 mof::makeConstantHandler(mof::Color4f(0 , 0 , 0)) ,
40 mof::makeConstantHandler(mof::Color4f(0 , 0 , 0)) ,
41 mof::makeConstantHandler(0.0f) ,
42 mof::makeConstantHandler(mof::Color4f(0 , 0 , 0))
45 m_pImpl->pMaterial = new Material;
49 mof::MaterialBuilder::MaterialBuilder( mof::Color4f ambient )
51 mof::makeConstantHandler(ambient) ,
52 mof::makeConstantHandler(mof::Color4f(0 , 0 , 0)) ,
53 mof::makeConstantHandler(mof::Color4f(0 , 0 , 0)) ,
54 mof::makeConstantHandler(0.0f) ,
55 mof::makeConstantHandler(mof::Color4f(0 , 0 , 0)) ))
57 m_pImpl->pMaterial = new Material;
62 mof::MaterialBuilder::MaterialBuilder( mof::Color4f ambient , mof::Color4f diffuse ,
63 mof::Color4f specular , float power , mof::Color4f emissive )
65 mof::makeConstantHandler(ambient) ,
66 mof::makeConstantHandler(diffuse) ,
67 mof::makeConstantHandler(specular) ,
68 mof::makeConstantHandler(power) ,
69 mof::makeConstantHandler(emissive) ))
71 m_pImpl->pMaterial = new Material;
75 mof::MaterialBuilder::MaterialBuilder(
76 const mof::Animation<mof::Color4f>::Handler& ambient_ ,
77 const mof::Animation<mof::Color4f>::Handler& diffuse_ ,
78 const mof::Animation<mof::Color4f>::Handler& specular_ ,
79 const mof::Animation<float>::Handler& power_ ,
80 const mof::Animation<mof::Color4f>::Handler& emissive_ )
81 : m_pImpl(new Impl( ambient_ , diffuse_ , specular_ , power_ , emissive_ ))
83 m_pImpl->pMaterial = new Material;
87 mof::MaterialBuilder::~MaterialBuilder(){
90 void mof::MaterialBuilder::setFrameNumber(mof::FrameNumber frame){
91 m_pImpl->frame = frame;
94 void mof::MaterialBuilder::nextFrame(){
95 setFrameNumber(m_pImpl->frame + 1 );
98 void mof::MaterialBuilder::prevFrame(){
99 if(m_pImpl->frame > 0)setFrameNumber(m_pImpl->frame - 1);
104 mof::Color4f mof::MaterialBuilder::getDiffuseColor() const{
105 return m_pImpl->diffuse->getValue(m_pImpl->frame);
108 mof::Color4f mof::MaterialBuilder::getAmbientColor() const{
109 return m_pImpl->ambient->getValue(m_pImpl->frame);
112 mof::Color4f mof::MaterialBuilder::getSpecularColor() const{
113 return m_pImpl->specular->getValue(m_pImpl->frame);
116 mof::Color4f mof::MaterialBuilder::getEmissiveColor() const{
117 return m_pImpl->emissive->getValue(m_pImpl->frame);
120 float mof::MaterialBuilder::getSpecularPower() const{
121 return m_pImpl->specularPower->getValue(m_pImpl->frame);
125 const mof::Material& mof::MaterialBuilder::construct() const{
127 m_pImpl->pMaterial->diffuseColor = m_pImpl->diffuse->getValue(m_pImpl->frame);
128 m_pImpl->pMaterial->ambientColor = m_pImpl->ambient->getValue(m_pImpl->frame);
129 m_pImpl->pMaterial->specularColor = m_pImpl->specular->getValue(m_pImpl->frame);
130 m_pImpl->pMaterial->power = m_pImpl->specularPower->getValue(m_pImpl->frame);
131 m_pImpl->pMaterial->emissiveColor = m_pImpl->emissive->getValue(m_pImpl->frame);
133 return *(m_pImpl->pMaterial);