|
|
@@ -269,10 +269,18 @@ CLP(ShaderContext)(CLP(GraphicsStateGuardian) *glgsg, Shader *s) : ShaderContext
|
|
|
Shader::ShaderMatSpec bind;
|
|
|
bind._id = arg_id;
|
|
|
bind._func = Shader::SMF_compose;
|
|
|
- if (transpose) {
|
|
|
- bind._piece = Shader::SMP_transpose;
|
|
|
+ if (param_type == GL_FLOAT_MAT3) {
|
|
|
+ if (transpose) {
|
|
|
+ bind._piece = Shader::SMP_upper3x3;
|
|
|
+ } else {
|
|
|
+ bind._piece = Shader::SMP_transpose3x3;
|
|
|
+ }
|
|
|
} else {
|
|
|
- bind._piece = Shader::SMP_whole;
|
|
|
+ if (transpose) {
|
|
|
+ bind._piece = Shader::SMP_transpose;
|
|
|
+ } else {
|
|
|
+ bind._piece = Shader::SMP_whole;
|
|
|
+ }
|
|
|
}
|
|
|
bind._arg[0] = NULL;
|
|
|
bind._arg[1] = NULL;
|
|
|
@@ -281,49 +289,34 @@ CLP(ShaderContext)(CLP(GraphicsStateGuardian) *glgsg, Shader *s) : ShaderContext
|
|
|
|
|
|
if (matrix_name == "ModelViewProjectionMatrix") {
|
|
|
if (inverse) {
|
|
|
- bind._part[0] = Shader::SMO_apiclip_to_view;
|
|
|
- bind._part[1] = Shader::SMO_view_to_model;
|
|
|
+ bind._part[0] = Shader::SMO_apiclip_to_apiview;
|
|
|
+ bind._part[1] = Shader::SMO_apiview_to_model;
|
|
|
} else {
|
|
|
- bind._part[0] = Shader::SMO_model_to_view;
|
|
|
- bind._part[1] = Shader::SMO_view_to_apiclip;
|
|
|
+ bind._part[0] = Shader::SMO_model_to_apiview;
|
|
|
+ bind._part[1] = Shader::SMO_apiview_to_apiclip;
|
|
|
}
|
|
|
|
|
|
} else if (matrix_name == "ModelViewMatrix") {
|
|
|
- if (inverse) {
|
|
|
- bind._part[0] = Shader::SMO_apiview_to_view;
|
|
|
- bind._part[1] = Shader::SMO_view_to_model;
|
|
|
- } else {
|
|
|
- bind._part[0] = Shader::SMO_model_to_view;
|
|
|
- bind._part[1] = Shader::SMO_view_to_apiview;
|
|
|
- }
|
|
|
+ bind._func = Shader::SMF_first;
|
|
|
+ bind._part[0] = inverse ? Shader::SMO_apiview_to_model
|
|
|
+ : Shader::SMO_model_to_apiview;
|
|
|
+ bind._part[1] = Shader::SMO_identity;
|
|
|
|
|
|
} else if (matrix_name == "ProjectionMatrix") {
|
|
|
- if (inverse) {
|
|
|
- bind._part[0] = Shader::SMO_apiclip_to_view;
|
|
|
- bind._part[1] = Shader::SMO_view_to_apiview;
|
|
|
- } else {
|
|
|
- bind._part[0] = Shader::SMO_apiview_to_view;
|
|
|
- bind._part[1] = Shader::SMO_view_to_apiclip;
|
|
|
- }
|
|
|
+ bind._func = Shader::SMF_first;
|
|
|
+ bind._part[0] = inverse ? Shader::SMO_apiclip_to_apiview
|
|
|
+ : Shader::SMO_apiview_to_apiclip;
|
|
|
+ bind._part[1] = Shader::SMO_identity;
|
|
|
|
|
|
} else if (matrix_name == "NormalMatrix") {
|
|
|
// This is really the upper 3x3 of the ModelViewMatrixInverseTranspose.
|
|
|
- if (inverse) {
|
|
|
- bind._part[0] = Shader::SMO_model_to_view;
|
|
|
- bind._part[1] = Shader::SMO_view_to_apiview;
|
|
|
- } else {
|
|
|
- bind._part[0] = Shader::SMO_apiview_to_view;
|
|
|
- bind._part[1] = Shader::SMO_view_to_model;
|
|
|
- }
|
|
|
+ bind._func = Shader::SMF_first;
|
|
|
+ bind._part[0] = inverse ? Shader::SMO_model_to_apiview
|
|
|
+ : Shader::SMO_apiview_to_model;
|
|
|
+ bind._part[1] = Shader::SMO_identity;
|
|
|
|
|
|
if (param_type != GL_FLOAT_MAT3) {
|
|
|
GLCAT.error() << "p3d_NormalMatrix input should be mat3, not mat4!\n";
|
|
|
- } else {
|
|
|
- if (transpose) {
|
|
|
- bind._piece = Shader::SMP_upper3x3;
|
|
|
- } else {
|
|
|
- bind._piece = Shader::SMP_transpose3x3;
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
} else if (matrix_name == "ModelMatrix") {
|