Added a hint to control whether the OpenGL driver uses shaders.
--- 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 */