More shader fixes

This commit is contained in:
Josh Yelon 2005-09-04 22:56:04 +00:00
parent 844a822aea
commit c9c680a50f
3 changed files with 14 additions and 4 deletions

View File

@ -2588,6 +2588,15 @@ issue_shade_model(const ShadeModelAttrib *attrib) {
void CLP(GraphicsStateGuardian)::
issue_shader(const ShaderAttrib *attrib) {
ShaderMode *mode = attrib->get_shader_mode();
if (mode == 0) {
if (_shader_context != 0) {
_shader_context->unbind();
_shader_context = 0;
_shader_mode = 0;
}
return;
}
Shader *shader = mode->get_shader();
CLP(ShaderContext) *context = (CLP(ShaderContext) *)(shader->prepare_now(get_prepared_objects(), this));
@ -2602,9 +2611,11 @@ issue_shader(const ShaderAttrib *attrib) {
context->bind(mode);
_shader_context = context;
}
_shader_mode = mode;
} else {
// Use the same shader as before, but with new input arguments.
context->rebind(_shader_mode, mode);
_shader_mode = mode;
}
}

View File

@ -20,11 +20,10 @@
////////////////////////////////////////////////////////////////////
// Function: ShaderAttrib::Constructor
// Access: Private
// Description: Use ShaderAttrib::make() to construct a new
// ShaderAttrib object.
// Description: xyz
////////////////////////////////////////////////////////////////////
INLINE ShaderAttrib::
ShaderAttrib() {
ShaderAttrib(void) {
}
////////////////////////////////////////////////////////////////////

View File

@ -39,7 +39,7 @@
class EXPCL_PANDA ShaderAttrib: public RenderAttrib {
private:
INLINE ShaderAttrib();
INLINE ShaderAttrib(void);
PUBLISHED:
static CPT(RenderAttrib) make(ShaderMode *sm);