Added a hint to control whether the OpenGL driver uses shaders.
authorSam Lantinga <slouken@libsdl.org>
Tue, 08 Feb 2011 22:40:19 -0800
changeset 5233 ce4f91138031
parent 5232 74bc160186a8
child 5234 af8ca17f6b7c
Added a hint to control whether the OpenGL driver uses shaders.
include/SDL_hints.h
src/render/opengl/SDL_render_gl.c
--- a/include/SDL_hints.h	Tue Feb 08 22:11:16 2011 -0800
+++ b/include/SDL_hints.h	Tue Feb 08 22:40:19 2011 -0800
@@ -77,12 +77,27 @@
  *  This variable is case insensitive and can be set to the following values:
  *    "direct3d"
  *    "opengl"
+ *    "opengles2"
  *    "opengles"
  *    "software"
+ *
+ *  The default varies by platform, but it's the first one in the list that
+ *  is available on the current platform.
  */
 #define SDL_HINT_RENDER_DRIVER              "SDL_RENDER_DRIVER"
 
 /**
+ *  \brief  A variable controlling whether the OpenGL render driver uses shaders if they are available.
+ *
+ *  This variable can be set to the following values:
+ *    "0"       - Disable shaders
+ *    "1"       - Enable shaders
+ *
+ *  By default shaders are used if OpenGL supports them.
+ */
+#define SDL_HINT_RENDER_OPENGL_SHADERS      "SDL_RENDER_OPENGL_SHADERS"
+
+/**
  *  \brief  A variable controlling whether updates to the SDL 1.2 screen surface should be synchronized with the vertical refresh, to avoid tearing.
  *
  *  This variable can be set to the following values:
--- a/src/render/opengl/SDL_render_gl.c	Tue Feb 08 22:11:16 2011 -0800
+++ b/src/render/opengl/SDL_render_gl.c	Tue Feb 08 22:40:19 2011 -0800
@@ -23,6 +23,8 @@
 
 #if SDL_VIDEO_RENDER_OGL && !SDL_RENDER_DISABLED
 
+#include "SDL_hints.h"
+#include "SDL_log.h"
 #include "SDL_opengl.h"
 #include "../SDL_sysrender.h"
 #include "SDL_shaders_gl.h"
@@ -183,6 +185,7 @@
 {
     SDL_Renderer *renderer;
     GL_RenderData *data;
+    const char *hint;
     GLint value;
     Uint32 window_flags;
 
@@ -282,7 +285,12 @@
     }
 
     /* Check for shader support */
-    data->shaders = GL_CreateShaderContext();
+    hint = SDL_GetHint(SDL_HINT_RENDER_OPENGL_SHADERS);
+    if (!hint || *hint != '0') {
+        data->shaders = GL_CreateShaderContext();
+    }
+    SDL_LogInfo(SDL_LOG_CATEGORY_RENDER, "OpenGL shaders: %s",
+                data->shaders ? "ENABLED" : "DISABLED");
 
 #if 0
     /* We support YV12 textures using 3 textures and a shader */