#include "program.h"
#include "programbuilder.h"
#include "shader.h"
+#include "vertexformat.h"
using namespace std;
{ FRAGMENT, "tex_sample", "vec4", "texture2D(texture, texture_coord)", 0 },
{ VERTEX, "gl_Position", 0, "gl_ProjectionMatrix*eye_vertex", 0 },
- { VERTEX, "shd_vertex", "vec3", "eye_vertex*eye_shd_rmatrix", 0 },
+ { VERTEX, "shd_vertex", "vec3", "(eye_vertex*eye_shd_rmatrix).xyz", 0 },
{ VERTEX, "eye_shd_rmatrix", "mat4", "mat4(gl_EyePlaneS[shadow_unit], gl_EyePlaneT[shadow_unit], gl_EyePlaneR[shadow_unit], vec4(0.0, 0.0, 0.0, 1.0))", 0 },
{ VERTEX, "tbn_light_dir", "vec3", "eye_light_dir*eye_tbn_matrix", 0 },
{ VERTEX, "eye_light_dir", "vec3", "normalize(gl_LightSource[0].position.xyz-eye_vertex.xyz*gl_LightSource[0].position.w)", 0 },
prog.attach_shader_owned(new VertexShader(create_source(resolved_vars, VERTEX)));
prog.attach_shader_owned(new FragmentShader(create_source(resolved_vars, FRAGMENT)));
+
+ if(features.normalmap)
+ {
+ prog.bind_attribute(get_component_type(TANGENT3), "tangent");
+ prog.bind_attribute(get_component_type(BINORMAL3), "binormal");
+ }
}
string ProgramBuilder::create_source(const list<ShaderVariable *> &variables, VariableScope scope) const