#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;