#include "DiffuseShader.hpp" #include #include "Globals.hpp" using namespace SH; DiffuseShader::DiffuseShader() { } DiffuseShader::~DiffuseShader() { } void DiffuseShader::init() { vsh = SH_BEGIN_VERTEX_PROGRAM { ShInputNormal3f normal; ShInputPosition4f p; ShOutputPoint4f ov; ShOutputNormal3f on; ShOutputVector3f lvv; ShOutputPosition4f opd; opd = Globals::mvp | p; on = normalize(Globals::mv | normal); ov = -normalize(Globals::mv | p); lvv = normalize(Globals::lightPos - (Globals::mv | p)(0,1,2)); } SH_END_PROGRAM; fsh = SH_BEGIN_FRAGMENT_PROGRAM { ShInputVector4f v; ShInputNormal3f n; ShInputVector3f lvv; ShInputPosition4f p; ShOutputColor3f out; out(0,1,2) = Globals::color * dot(normalize(n), normalize(lvv)); } SH_END_PROGRAM; } void DiffuseShader::apply() { shBindShader(vsh); shBindShader(fsh); } void DiffuseShader::vertex(const SH::ShPoint4f& n, // normal const SH::ShPoint4f& t, // tangents const SH::ShPoint4f& tex, // texture coordinates const SH::ShPoint4f& t2, // secondary tangent const SH::ShPoint4f& v // vertex ) { pushSmAttrib(n); pushSmVertex(v); } // Instantiate the shader DiffuseShader diffuse_shader;