mirror of
https://github.com/Shpoike/Quakespasm.git
synced 2025-02-15 08:31:03 +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)
|
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
|
//johnfitz
|
||||||
|
|
||||||
|
R_DeleteShaders ();
|
||||||
GLAlias_CreateShaders ();
|
GLAlias_CreateShaders ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -321,6 +321,9 @@ void R_DrawBrushModel_ShowTris (entity_t *e);
|
||||||
void R_DrawAliasModel_ShowTris (entity_t *e);
|
void R_DrawAliasModel_ShowTris (entity_t *e);
|
||||||
void R_DrawParticles_ShowTris (void);
|
void R_DrawParticles_ShowTris (void);
|
||||||
|
|
||||||
|
GLuint GL_CreateProgram (const GLchar *source);
|
||||||
|
void R_DeleteShaders (void);
|
||||||
|
|
||||||
qboolean GLAlias_SupportsShaders (void);
|
qboolean GLAlias_SupportsShaders (void);
|
||||||
void GLAlias_CreateShaders (void);
|
void GLAlias_CreateShaders (void);
|
||||||
void GL_DrawAliasShadow (entity_t *e);
|
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);
|
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)
|
qboolean GLAlias_SupportsShaders (void)
|
||||||
{
|
{
|
||||||
return gl_arb_vp_able && gl_vbo_able && gl_max_texture_units >= 3;
|
return gl_arb_vp_able && gl_vbo_able && gl_max_texture_units >= 3;
|
||||||
|
|
Loading…
Reference in a new issue