mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 02:15:43 -04:00
Fix an issue with programs being destroyed and then reused by different copies of the same shader. Also, added better error reporting system for Cg errors.
This commit is contained in:
parent
9261a7baad
commit
30a2c57cb3
@ -27,6 +27,18 @@ TypeHandle CLP(ShaderContext)::_type_handle;
|
||||
#define GL_GEOMETRY_SHADER 0x8DD9
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CG
|
||||
#ifndef NDEBUG
|
||||
#define cg_report_errors() { \
|
||||
CGerror err = cgGetError(); \
|
||||
if (err != CG_NO_ERROR) { \
|
||||
GLCAT.error() << __FILE__ ", line " << __LINE__ << ": " << cgGetErrorString(err) << "\n"; \
|
||||
} }
|
||||
#else
|
||||
#define cg_report_errors()
|
||||
#endif
|
||||
#endif
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: GLShaderContext::Constructor
|
||||
// Access: Public
|
||||
@ -354,9 +366,10 @@ release_resources(GSG *gsg) {
|
||||
if (_cg_context) {
|
||||
cgDestroyContext(_cg_context);
|
||||
_cg_context = 0;
|
||||
if (_cg_vprogram != 0) cgDestroyProgram(_cg_vprogram);
|
||||
if (_cg_fprogram != 0) cgDestroyProgram(_cg_fprogram);
|
||||
if (_cg_gprogram != 0) cgDestroyProgram(_cg_gprogram);
|
||||
// Do *NOT* destroy the programs here! It causes problems.
|
||||
// if (_cg_vprogram != 0) cgDestroyProgram(_cg_vprogram);
|
||||
// if (_cg_fprogram != 0) cgDestroyProgram(_cg_fprogram);
|
||||
// if (_cg_gprogram != 0) cgDestroyProgram(_cg_gprogram);
|
||||
_cg_vprogram = 0;
|
||||
_cg_fprogram = 0;
|
||||
_cg_gprogram = 0;
|
||||
@ -838,21 +851,6 @@ update_shader_texture_bindings(CLP(ShaderContext) *prev, GSG *gsg) {
|
||||
gsg->report_my_gl_errors();
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: GLShaderContext::cg_report_errors
|
||||
// Access: Public
|
||||
// Description: Report any Cg errors that were not previously caught.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
#ifdef HAVE_CG
|
||||
void CLP(ShaderContext)::
|
||||
cg_report_errors() {
|
||||
CGerror err = cgGetError();
|
||||
if (err != CG_NO_ERROR) {
|
||||
GLCAT.error() << cgGetErrorString(err) << "\n";
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: Shader::glsl_report_shader_errors
|
||||
// Access: Private
|
||||
|
@ -58,7 +58,6 @@ private:
|
||||
CGprogram _cg_gprogram;
|
||||
|
||||
pvector <CGparameter> _cg_parameter_map;
|
||||
void cg_report_errors();
|
||||
#endif
|
||||
|
||||
GLuint _glsl_program;
|
||||
|
Loading…
x
Reference in New Issue
Block a user