Shader generator should use float3 for normals, not float4

This commit is contained in:
rdb 2014-07-18 14:34:24 +00:00
parent 4856804938
commit 67a289fe4a
2 changed files with 6 additions and 5 deletions

View File

@ -1014,6 +1014,8 @@ update_shader_vertex_arrays(ShaderContext *prev, bool force) {
name = name->append(texname->get_basename());
}
}
const GLint p = _glsl_parameter_map[_shader->_var_spec[i]._id._seqno];
if (_glgsg->_data_reader->get_array_info(name,
array_reader, num_values, numeric_type,
start, stride)) {
@ -1022,7 +1024,6 @@ update_shader_vertex_arrays(ShaderContext *prev, bool force) {
return false;
}
const GLint p = _glsl_parameter_map[_shader->_var_spec[i]._id._seqno];
_glgsg->_glEnableVertexAttribArray(p);
if (numeric_type == GeomEnums::NT_packed_dabc) {

View File

@ -718,7 +718,7 @@ synthesize_shader(const RenderState *rs) {
text << "\t out float4 l_eye_normal : " << eye_normal_freg << ",\n";
}
if (_map_index_height >= 0 || _need_world_normal || _need_eye_normal) {
text << "\t in float4 vtx_normal : NORMAL,\n";
text << "\t in float3 vtx_normal : NORMAL,\n";
}
if (_map_index_height >= 0) {
text << "\t uniform float4 mspos_view,\n";
@ -763,13 +763,13 @@ synthesize_shader(const RenderState *rs) {
text << "\t l_world_position = mul(trans_model_to_world, vtx_position);\n";
}
if (_need_world_normal) {
text << "\t l_world_normal = mul(trans_model_to_world, vtx_normal);\n";
text << "\t l_world_normal = mul(trans_model_to_world, float4(vtx_normal, 0));\n";
}
if (_need_eye_position) {
text << "\t l_eye_position = mul(trans_model_to_view, vtx_position);\n";
}
if (_need_eye_normal) {
text << "\t l_eye_normal.xyz = mul((float3x3)tpose_view_to_model, vtx_normal.xyz);\n";
text << "\t l_eye_normal.xyz = mul((float3x3)tpose_view_to_model, vtx_normal);\n";
text << "\t l_eye_normal.w = 0;\n";
}
pmap<const InternalName *, char *>::const_iterator it;
@ -804,7 +804,7 @@ synthesize_shader(const RenderState *rs) {
text << "\t float3 eyedir = mspos_view.xyz - vtx_position.xyz;\n";
text << "\t l_eyevec.x = dot(vtx_" << tangent_input << ".xyz, eyedir);\n";
text << "\t l_eyevec.y = dot(vtx_" << binormal_input << ".xyz, eyedir);\n";
text << "\t l_eyevec.z = dot(vtx_normal.xyz, eyedir);\n";
text << "\t l_eyevec.z = dot(vtx_normal, eyedir);\n";
text << "\t l_eyevec = normalize(l_eyevec);\n";
}
text << "}\n\n";