Added sanity checks when killing shaders
git-svn-id: https://svn.code.sf.net/p/vbam/code/trunk@229 a31d4220-a93d-0410-bf67-fe4944624d44
This commit is contained in:
parent
41657bc9b4
commit
31e5d61273
|
@ -37,9 +37,9 @@
|
||||||
// OpenGL
|
// OpenGL
|
||||||
#include <gl/GL.h> // main include file
|
#include <gl/GL.h> // main include file
|
||||||
#include <GL/glu.h>
|
#include <GL/glu.h>
|
||||||
#ifdef HAS_GLEXT
|
|
||||||
#include <gl/glext.h>
|
#include <gl/glext.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef BOOL (APIENTRY *PFNWGLSWAPINTERVALFARPROC)( int );
|
typedef BOOL (APIENTRY *PFNWGLSWAPINTERVALFARPROC)( int );
|
||||||
PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB = NULL;
|
PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB = NULL;
|
||||||
|
@ -117,10 +117,7 @@ public:
|
||||||
virtual int selectFullScreenMode( GUID ** );
|
virtual int selectFullScreenMode( GUID ** );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include "gzglfont.h"
|
#include "gzglfont.h"
|
||||||
char *readShaderFile(char *FileName);
|
|
||||||
void OpenGLDisplay::initializeFont()
|
void OpenGLDisplay::initializeFont()
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -174,20 +171,6 @@ char *readShaderFile(char *FileName) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenGLDisplay::InitGLSLShader (void) {
|
void OpenGLDisplay::InitGLSLShader (void) {
|
||||||
glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC)wglGetProcAddress("glCreateProgramObjectARB");
|
|
||||||
glDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC)wglGetProcAddress("glDeleteObjectARB");
|
|
||||||
glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC)wglGetProcAddress("glUseProgramObjectARB");
|
|
||||||
glCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC)wglGetProcAddress("glCreateShaderObjectARB");
|
|
||||||
glShaderSourceARB = (PFNGLSHADERSOURCEARBPROC)wglGetProcAddress("glShaderSourceARB");
|
|
||||||
glCompileShaderARB = (PFNGLCOMPILESHADERARBPROC)wglGetProcAddress("glCompileShaderARB");
|
|
||||||
glGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC)wglGetProcAddress("glGetObjectParameterivARB");
|
|
||||||
glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC)wglGetProcAddress("glAttachObjectARB");
|
|
||||||
glGetInfoLogARB = (PFNGLGETINFOLOGARBPROC)wglGetProcAddress("glGetInfoLogARB");
|
|
||||||
glLinkProgramARB = (PFNGLLINKPROGRAMARBPROC)wglGetProcAddress("glLinkProgramARB");
|
|
||||||
glGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC)wglGetProcAddress("glGetUniformLocationARB");
|
|
||||||
glUniform4fARB = (PFNGLUNIFORM4FARBPROC)wglGetProcAddress("glUniform4fARB");
|
|
||||||
glUniform1iARB = (PFNGLUNIFORM1IARBPROC)wglGetProcAddress("glUniform1iARB");
|
|
||||||
|
|
||||||
VertexShader = glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB);
|
VertexShader = glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB);
|
||||||
FragmentShader = glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB);
|
FragmentShader = glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB);
|
||||||
|
|
||||||
|
@ -216,7 +199,7 @@ void OpenGLDisplay::InitGLSLShader (void) {
|
||||||
void OpenGLDisplay::SetGLSLShaderConstants()
|
void OpenGLDisplay::SetGLSLShaderConstants()
|
||||||
{
|
{
|
||||||
//get shader uniforms and shader weights
|
//get shader uniforms and shader weights
|
||||||
textureLocation = glGetUniformLocationARB( ShaderProgram, "testTexture" );
|
textureLocation = glGetUniformLocationARB( ShaderProgram, "OGL2Texture" );
|
||||||
g_location_grayScaleWeights = glGetUniformLocationARB( ShaderProgram, "grayScaleWeights" );
|
g_location_grayScaleWeights = glGetUniformLocationARB( ShaderProgram, "grayScaleWeights" );
|
||||||
glUniform1iARB( textureLocation, 1 );
|
glUniform1iARB( textureLocation, 1 );
|
||||||
|
|
||||||
|
@ -227,9 +210,16 @@ void OpenGLDisplay::SetGLSLShaderConstants()
|
||||||
|
|
||||||
}
|
}
|
||||||
void OpenGLDisplay::DeInitGLSLShader (void) {
|
void OpenGLDisplay::DeInitGLSLShader (void) {
|
||||||
glDeleteObjectARB(VertexShader);
|
if (VertexShader != 0){
|
||||||
glDeleteObjectARB(FragmentShader);
|
glDeleteObjectARB(VertexShader);
|
||||||
glDeleteObjectARB(ShaderProgram);
|
}
|
||||||
|
if (FragmentShader != 0){
|
||||||
|
glDeleteObjectARB(FragmentShader);
|
||||||
|
}
|
||||||
|
if (FragmentShader != 0){
|
||||||
|
glDeleteObjectARB(ShaderProgram);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
OpenGLDisplay::OpenGLDisplay()
|
OpenGLDisplay::OpenGLDisplay()
|
||||||
|
@ -247,7 +237,6 @@ OpenGLDisplay::OpenGLDisplay()
|
||||||
|
|
||||||
OpenGLDisplay::~OpenGLDisplay()
|
OpenGLDisplay::~OpenGLDisplay()
|
||||||
{
|
{
|
||||||
DeInitGLSLShader();
|
|
||||||
cleanup();
|
cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -279,6 +268,9 @@ void OpenGLDisplay::DisableOpenGL()
|
||||||
|
|
||||||
void OpenGLDisplay::cleanup()
|
void OpenGLDisplay::cleanup()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
DeInitGLSLShader();
|
||||||
|
|
||||||
if(texture != 0) {
|
if(texture != 0) {
|
||||||
glDeleteTextures(1, &texture);
|
glDeleteTextures(1, &texture);
|
||||||
texture = 0;
|
texture = 0;
|
||||||
|
@ -310,6 +302,23 @@ bool OpenGLDisplay::initialize()
|
||||||
glEnable( GL_TEXTURE_2D );
|
glEnable( GL_TEXTURE_2D );
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
|
if(theApp.GLSLShaders)
|
||||||
|
{
|
||||||
|
glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC)wglGetProcAddress("glCreateProgramObjectARB");
|
||||||
|
glDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC)wglGetProcAddress("glDeleteObjectARB");
|
||||||
|
glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC)wglGetProcAddress("glUseProgramObjectARB");
|
||||||
|
glCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC)wglGetProcAddress("glCreateShaderObjectARB");
|
||||||
|
glShaderSourceARB = (PFNGLSHADERSOURCEARBPROC)wglGetProcAddress("glShaderSourceARB");
|
||||||
|
glCompileShaderARB = (PFNGLCOMPILESHADERARBPROC)wglGetProcAddress("glCompileShaderARB");
|
||||||
|
glGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC)wglGetProcAddress("glGetObjectParameterivARB");
|
||||||
|
glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC)wglGetProcAddress("glAttachObjectARB");
|
||||||
|
glGetInfoLogARB = (PFNGLGETINFOLOGARBPROC)wglGetProcAddress("glGetInfoLogARB");
|
||||||
|
glLinkProgramARB = (PFNGLLINKPROGRAMARBPROC)wglGetProcAddress("glLinkProgramARB");
|
||||||
|
glGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC)wglGetProcAddress("glGetUniformLocationARB");
|
||||||
|
glUniform4fARB = (PFNGLUNIFORM4FARBPROC)wglGetProcAddress("glUniform4fARB");
|
||||||
|
glUniform1iARB = (PFNGLUNIFORM1IARBPROC)wglGetProcAddress("glUniform1iARB");
|
||||||
|
}
|
||||||
|
|
||||||
initializeMatrices( theApp.surfaceSizeX, theApp.surfaceSizeY );
|
initializeMatrices( theApp.surfaceSizeX, theApp.surfaceSizeY );
|
||||||
|
|
||||||
|
@ -355,11 +364,12 @@ void OpenGLDisplay::render()
|
||||||
glUseProgramObjectARB( ShaderProgram );
|
glUseProgramObjectARB( ShaderProgram );
|
||||||
SetGLSLShaderConstants();
|
SetGLSLShaderConstants();
|
||||||
}
|
}
|
||||||
else{
|
else
|
||||||
glUseProgramObjectARB(NULL);
|
{
|
||||||
DeInitGLSLShader();
|
DeInitGLSLShader();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int pitch = theApp.filterWidth * (systemColorDepth>>3) + 4;
|
int pitch = theApp.filterWidth * (systemColorDepth>>3) + 4;
|
||||||
u8 *data = pix + ( theApp.sizeX + 1 ) * 4;
|
u8 *data = pix + ( theApp.sizeX + 1 ) * 4;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue