do proper error checking when testing if shaders are supported, so when the hardware won't accept the shader or the program (even though the opengl lib supports it), we don't get an upside down image any longer
This commit is contained in:
parent
8c314be70d
commit
15b6eaa48f
3 changed files with 36 additions and 4 deletions
src
|
@ -9,7 +9,7 @@ extern PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebuffer;
|
|||
#endif
|
||||
extern GLuint fullscreenFramebuffer;
|
||||
extern unsigned ShaderIndex;
|
||||
extern void LoadShaders();
|
||||
extern bool LoadShaders();
|
||||
extern bool LoadShaderExtensions();
|
||||
extern void SetupFramebuffer();
|
||||
extern void RenderFramebufferToScreen();
|
||||
|
|
|
@ -993,6 +993,7 @@ int HandleKeyModifiersDown(unsigned key, unsigned)
|
|||
return 1;
|
||||
case SDLK_SYSREQ:
|
||||
case SDLK_PRINT:
|
||||
case SDLK_F11:
|
||||
Screenshot();
|
||||
if (GameRunning) {
|
||||
SetMessage("%s", _("Screenshot made."));
|
||||
|
|
|
@ -394,27 +394,59 @@ void printProgramInfoLog(GLuint obj, const char* prefix)
|
|||
|
||||
unsigned ShaderIndex = 0;
|
||||
|
||||
extern void LoadShaders() {
|
||||
extern bool LoadShaders() {
|
||||
GLuint vs, fs;
|
||||
GLint params;
|
||||
fs = glCreateShader(GL_FRAGMENT_SHADER);
|
||||
if (fs == 0) {
|
||||
return false;
|
||||
}
|
||||
glShaderSource(fs, 1, (const char**)&(fragment_shaders[ShaderIndex]), NULL);
|
||||
glCompileShader(fs);
|
||||
glGetShaderiv(fs, GL_COMPILE_STATUS, ¶ms);
|
||||
if (params == GL_FALSE) {
|
||||
glDeleteShader(fs);
|
||||
return false;
|
||||
}
|
||||
//printShaderInfoLog(fs, "Fragment Shader");
|
||||
ShaderIndex = (ShaderIndex + 1) % MAX_SHADERS;
|
||||
vs = glCreateShader(GL_VERTEX_SHADER);
|
||||
if (fs == 0) {
|
||||
glDeleteShader(fs);
|
||||
return false;
|
||||
}
|
||||
glShaderSource(vs, 1, (const char**)&vertex_shader, NULL);
|
||||
glCompileShader(vs);
|
||||
glGetShaderiv(fs, GL_COMPILE_STATUS, ¶ms);
|
||||
if (params == GL_FALSE) {
|
||||
glDeleteShader(fs);
|
||||
glDeleteShader(vs);
|
||||
return false;
|
||||
}
|
||||
//printShaderInfoLog(vs, "Vertex Shader");
|
||||
if (glIsProgram(fullscreenShader)) {
|
||||
glDeleteProgram(fullscreenShader);
|
||||
}
|
||||
fullscreenShader = glCreateProgram();
|
||||
if (fullscreenShader == 0) {
|
||||
glDeleteShader(fs);
|
||||
glDeleteShader(vs);
|
||||
return false;
|
||||
}
|
||||
glAttachShader(fullscreenShader, vs);
|
||||
glAttachShader(fullscreenShader, fs);
|
||||
glLinkProgram(fullscreenShader);
|
||||
glGetProgramiv(fullscreenShader, GL_LINK_STATUS, ¶ms);
|
||||
if (params == GL_FALSE) {
|
||||
glDeleteShader(fs);
|
||||
glDeleteShader(vs);
|
||||
glDeleteProgram(fullscreenShader);
|
||||
return false;
|
||||
}
|
||||
glDeleteShader(fs);
|
||||
glDeleteShader(vs);
|
||||
//printProgramInfoLog(fullscreenShader, "Shader Program");
|
||||
return true;
|
||||
}
|
||||
|
||||
extern bool LoadShaderExtensions() {
|
||||
|
@ -449,8 +481,7 @@ extern bool LoadShaderExtensions() {
|
|||
glDrawBuffers = (PFNGLDRAWBUFFERSPROC)(uintptr_t)SDL_GL_GetProcAddress("glDrawBuffers");
|
||||
glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)(uintptr_t)SDL_GL_GetProcAddress("glCheckFramebufferStatus");
|
||||
if (glCreateShader && glGenFramebuffers && glGetUniformLocation && glActiveTextureProc) {
|
||||
LoadShaders();
|
||||
return true;
|
||||
return LoadShaders();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue