mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-27 07:03:36 -04:00
dxgsg9: Fix issues setting some kinds of automatic shader inputs
This commit is contained in:
parent
709555577f
commit
67c413f089
@ -3139,6 +3139,7 @@ set_state_and_transform(const RenderState *target,
|
||||
}
|
||||
_target_rs = target;
|
||||
|
||||
int shader_deps = 0;
|
||||
determine_target_shader();
|
||||
|
||||
int alpha_test_slot = AlphaTestAttrib::get_class_slot();
|
||||
@ -3168,10 +3169,7 @@ set_state_and_transform(const RenderState *target,
|
||||
do_issue_color_scale();
|
||||
_state_mask.set_bit(color_slot);
|
||||
_state_mask.set_bit(color_scale_slot);
|
||||
if (_current_shader_context) {
|
||||
_current_shader_context->issue_parameters(this, Shader::SSD_color);
|
||||
_current_shader_context->issue_parameters(this, Shader::SSD_colorscale);
|
||||
}
|
||||
shader_deps |= Shader::SSD_color | Shader::SSD_colorscale;
|
||||
}
|
||||
|
||||
int cull_face_slot = CullFaceAttrib::get_class_slot();
|
||||
@ -3212,6 +3210,7 @@ set_state_and_transform(const RenderState *target,
|
||||
// PStatTimer timer(_draw_set_state_render_mode_pcollector);
|
||||
do_issue_render_mode();
|
||||
_state_mask.set_bit(render_mode_slot);
|
||||
shader_deps |= Shader::SSD_render_mode;
|
||||
}
|
||||
|
||||
int rescale_normal_slot = RescaleNormalAttrib::get_class_slot();
|
||||
@ -3272,6 +3271,7 @@ set_state_and_transform(const RenderState *target,
|
||||
_state_mask.set_bit(texture_slot);
|
||||
_state_mask.set_bit(tex_matrix_slot);
|
||||
_state_mask.set_bit(tex_gen_slot);
|
||||
shader_deps |= Shader::SSD_tex_matrix | Shader::SSD_tex_gen;
|
||||
}
|
||||
|
||||
int material_slot = MaterialAttrib::get_class_slot();
|
||||
@ -3280,9 +3280,7 @@ set_state_and_transform(const RenderState *target,
|
||||
// PStatTimer timer(_draw_set_state_material_pcollector);
|
||||
do_issue_material();
|
||||
_state_mask.set_bit(material_slot);
|
||||
if (_current_shader_context) {
|
||||
_current_shader_context->issue_parameters(this, Shader::SSD_material);
|
||||
}
|
||||
shader_deps |= Shader::SSD_material;
|
||||
}
|
||||
|
||||
int light_slot = LightAttrib::get_class_slot();
|
||||
@ -3307,9 +3305,7 @@ set_state_and_transform(const RenderState *target,
|
||||
// PStatTimer timer(_draw_set_state_fog_pcollector);
|
||||
do_issue_fog();
|
||||
_state_mask.set_bit(fog_slot);
|
||||
if (_current_shader_context) {
|
||||
_current_shader_context->issue_parameters(this, Shader::SSD_fog);
|
||||
}
|
||||
shader_deps |= Shader::SSD_fog;
|
||||
}
|
||||
|
||||
int scissor_slot = ScissorAttrib::get_class_slot();
|
||||
@ -3320,6 +3316,10 @@ set_state_and_transform(const RenderState *target,
|
||||
_state_mask.set_bit(scissor_slot);
|
||||
}
|
||||
|
||||
if (_current_shader_context != nullptr && shader_deps != 0) {
|
||||
_current_shader_context->issue_parameters(this, shader_deps);
|
||||
}
|
||||
|
||||
_state_rs = _target_rs;
|
||||
}
|
||||
|
||||
|
@ -245,6 +245,7 @@ issue_parameters(GSG *gsg, int altered) {
|
||||
HRESULT hr;
|
||||
PN_stdfloat v [4];
|
||||
LMatrix4f temp_matrix = LCAST(float, *val);
|
||||
LMatrix3f temp_matrix3;
|
||||
|
||||
hr = D3D_OK;
|
||||
|
||||
@ -306,6 +307,33 @@ issue_parameters(GSG *gsg, int altered) {
|
||||
hr = cgD3D9SetUniform(p, v);
|
||||
break;
|
||||
|
||||
case Shader::SMP_upper3x3:
|
||||
// TRANSPOSE REQUIRED
|
||||
temp_matrix3 = temp_matrix.get_upper_3();
|
||||
temp_matrix3.transpose_in_place();
|
||||
data = temp_matrix3.get_data();
|
||||
|
||||
hr = cgD3D9SetUniform(p, data);
|
||||
break;
|
||||
|
||||
case Shader::SMP_transpose3x3:
|
||||
// NO TRANSPOSE REQUIRED
|
||||
temp_matrix3 = temp_matrix.get_upper_3();
|
||||
data = temp_matrix3.get_data();
|
||||
|
||||
hr = cgD3D9SetUniform(p, data);
|
||||
break;
|
||||
|
||||
case Shader::SMP_cell15:
|
||||
hr = cgD3D9SetUniform(p, data + 15);
|
||||
continue;
|
||||
case Shader::SMP_cell14:
|
||||
hr = cgD3D9SetUniform(p, data + 14);
|
||||
continue;
|
||||
case Shader::SMP_cell13:
|
||||
hr = cgD3D9SetUniform(p, data + 13);
|
||||
continue;
|
||||
|
||||
default:
|
||||
dxgsg9_cat.error()
|
||||
<< "issue_parameters () SMP parameter type not implemented " << spec._piece << "\n";
|
||||
|
Loading…
x
Reference in New Issue
Block a user