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:
rdb 2009-09-19 09:55:05 +00:00
parent 9261a7baad
commit 30a2c57cb3
2 changed files with 16 additions and 19 deletions

View File

@ -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

View File

@ -58,7 +58,6 @@ private:
CGprogram _cg_gprogram;
pvector <CGparameter> _cg_parameter_map;
void cg_report_errors();
#endif
GLuint _glsl_program;