Browse Source

glgsg: fix occasional WeakPointerTo dereference

rdb 7 years ago
parent
commit
d48695cb2e

+ 3 - 2
panda/src/glstuff/glShaderContext_src.cxx

@@ -1910,12 +1910,14 @@ set_state_and_transform(const RenderState *target_rs,
     // Reset all of the state.
     altered |= Shader::SSD_general;
     _state_rs = target_rs;
+    target_rs->get_attrib_def(_color_attrib);
 
   } else if (state_rs != target_rs) {
     // The state has changed since last time.
     if (state_rs->get_attrib(ColorAttrib::get_class_slot()) !=
         target_rs->get_attrib(ColorAttrib::get_class_slot())) {
       altered |= Shader::SSD_color;
+      target_rs->get_attrib_def(_color_attrib);
     }
     if (state_rs->get_attrib(ColorScaleAttrib::get_class_slot()) !=
         target_rs->get_attrib(ColorScaleAttrib::get_class_slot())) {
@@ -2227,8 +2229,7 @@ update_shader_vertex_arrays(ShaderContext *prev, bool force) {
 
   // Get the active ColorAttrib.  We'll need it to determine how to apply
   // vertex colors.
-  const ColorAttrib *color_attrib;
-  _state_rs->get_attrib_def(color_attrib);
+  const ColorAttrib *color_attrib = _color_attrib.p();
 
   const GeomVertexArrayDataHandle *array_reader;
 

+ 1 - 0
panda/src/glstuff/glShaderContext_src.h

@@ -75,6 +75,7 @@ private:
   CPT(TransformState) _modelview_transform;
   CPT(TransformState) _camera_transform;
   CPT(TransformState) _projection_transform;
+  CPT(ColorAttrib) _color_attrib;
 
 /*
  * struct ParamContext { CPT(InternalName) _name; GLint _location; GLsizei