mirror of
https://github.com/Shpoike/Quakespasm.git
synced 2025-02-13 07:21:31 +00:00
Delete shader before generating new ones
This commit is contained in:
parent
9daba0e399
commit
f5700934ad
4 changed files with 57 additions and 40 deletions
|
@ -321,3 +321,56 @@ void R_TimeRefresh_f (void)
|
|||
void D_FlushCaches (void)
|
||||
{
|
||||
}
|
||||
|
||||
static GLuint gl_arb_programs[16];
|
||||
static int gl_num_arb_programs = 0;
|
||||
|
||||
// from RMQEngine
|
||||
GLuint GL_CreateProgram (const GLchar *source)
|
||||
{
|
||||
GLuint progid;
|
||||
GLint errPos;
|
||||
const GLubyte *errString;
|
||||
GLenum errGLErr;
|
||||
|
||||
GL_GenProgramsARBFunc (1, &progid);
|
||||
GL_BindProgramARBFunc (GL_VERTEX_PROGRAM_ARB, progid);
|
||||
|
||||
errGLErr = glGetError ();
|
||||
GL_ProgramStringARBFunc (GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, strlen (source), source);
|
||||
errGLErr = glGetError ();
|
||||
|
||||
// Find the error position
|
||||
glGetIntegerv (GL_PROGRAM_ERROR_POSITION_ARB, &errPos);
|
||||
errString = glGetString (GL_PROGRAM_ERROR_STRING_ARB);
|
||||
|
||||
if (errGLErr != GL_NO_ERROR) Con_Printf ("Generic OpenGL Error\n");
|
||||
if (errPos != -1) Con_Printf ("Program error at position: %d\n", errPos);
|
||||
if (errString && errString[0]) Con_Printf ("Program error: %s\n", errString);
|
||||
|
||||
if ((errPos != -1) || (errString && errString[0]) || (errGLErr != GL_NO_ERROR))
|
||||
{
|
||||
Con_Printf ("Program:\n%s\n", source);
|
||||
GL_DeleteProgramsARBFunc (1, &progid);
|
||||
GL_BindProgramARBFunc (GL_VERTEX_PROGRAM_ARB, 0);
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gl_num_arb_programs == (sizeof(gl_arb_programs)/sizeof(GLuint)))
|
||||
Host_Error("gl_arb_programs overflow");
|
||||
|
||||
gl_arb_programs[gl_num_arb_programs] = progid;
|
||||
gl_num_arb_programs++;
|
||||
|
||||
GL_BindProgramARBFunc (GL_VERTEX_PROGRAM_ARB, 0);
|
||||
return progid;
|
||||
}
|
||||
}
|
||||
|
||||
void R_DeleteShaders (void)
|
||||
{
|
||||
GL_DeleteProgramsARBFunc (sizeof(gl_arb_programs)/sizeof(GLuint), gl_arb_programs);
|
||||
memset (gl_arb_programs, 0, sizeof(gl_arb_programs));
|
||||
gl_num_arb_programs = 0;
|
||||
}
|
||||
|
|
|
@ -1122,6 +1122,7 @@ static void GL_Init (void)
|
|||
}
|
||||
//johnfitz
|
||||
|
||||
R_DeleteShaders ();
|
||||
GLAlias_CreateShaders ();
|
||||
}
|
||||
|
||||
|
|
|
@ -321,6 +321,9 @@ void R_DrawBrushModel_ShowTris (entity_t *e);
|
|||
void R_DrawAliasModel_ShowTris (entity_t *e);
|
||||
void R_DrawParticles_ShowTris (void);
|
||||
|
||||
GLuint GL_CreateProgram (const GLchar *source);
|
||||
void R_DeleteShaders (void);
|
||||
|
||||
qboolean GLAlias_SupportsShaders (void);
|
||||
void GLAlias_CreateShaders (void);
|
||||
void GL_DrawAliasShadow (entity_t *e);
|
||||
|
|
|
@ -86,46 +86,6 @@ void *GLARB_GetNormalOffset (aliashdr_t *hdr, int pose)
|
|||
return (void *)(currententity->model->vboxyzofs + (hdr->numverts_vbo * pose * sizeof (meshxyz_t)) + normaloffs);
|
||||
}
|
||||
|
||||
// from RMQEngine
|
||||
GLuint GL_CreateProgram (const GLchar *source)
|
||||
{
|
||||
GLuint progid;
|
||||
GLint errPos;
|
||||
const GLubyte *errString;
|
||||
GLenum errGLErr;
|
||||
|
||||
GL_GenProgramsARBFunc (1, &progid);
|
||||
GL_BindProgramARBFunc (GL_VERTEX_PROGRAM_ARB, progid);
|
||||
|
||||
errGLErr = glGetError ();
|
||||
GL_ProgramStringARBFunc (GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, strlen (source), source);
|
||||
errGLErr = glGetError ();
|
||||
|
||||
// Find the error position
|
||||
glGetIntegerv (GL_PROGRAM_ERROR_POSITION_ARB, &errPos);
|
||||
errString = glGetString (GL_PROGRAM_ERROR_STRING_ARB);
|
||||
|
||||
if (errGLErr != GL_NO_ERROR) Con_Printf ("Generic OpenGL Error\n");
|
||||
if (errPos != -1) Con_Printf ("Program error at position: %d\n", errPos);
|
||||
if (errString && errString[0]) Con_Printf ("Program error: %s\n", errString);
|
||||
|
||||
if ((errPos != -1) || (errString && errString[0]) || (errGLErr != GL_NO_ERROR))
|
||||
{
|
||||
Con_Printf ("Program:\n%s\n", source);
|
||||
GL_DeleteProgramsARBFunc (1, &progid);
|
||||
GL_BindProgramARBFunc (GL_VERTEX_PROGRAM_ARB, 0);
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
// gl_arb_programs[gl_num_arb_programs] = progid;
|
||||
// gl_num_arb_programs++;
|
||||
|
||||
GL_BindProgramARBFunc (GL_VERTEX_PROGRAM_ARB, 0);
|
||||
return progid;
|
||||
}
|
||||
}
|
||||
|
||||
qboolean GLAlias_SupportsShaders (void)
|
||||
{
|
||||
return gl_arb_vp_able && gl_vbo_able && gl_max_texture_units >= 3;
|
||||
|
|
Loading…
Reference in a new issue