From 180d6b2c70863427d7d8d5bf60337cfee7d9bd92 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 8 Feb 2011 22:40:19 -0800 Subject: [PATCH] Added a hint to control whether the OpenGL driver uses shaders. --- include/SDL_hints.h | 15 +++++++++++++++ src/render/opengl/SDL_render_gl.c | 10 +++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/include/SDL_hints.h b/include/SDL_hints.h index 4426f8efd..e3b693872 100644 --- a/include/SDL_hints.h +++ b/include/SDL_hints.h @@ -77,11 +77,26 @@ extern "C" { * 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. * diff --git a/src/render/opengl/SDL_render_gl.c b/src/render/opengl/SDL_render_gl.c index 3cd3df56a..9307bc665 100644 --- a/src/render/opengl/SDL_render_gl.c +++ b/src/render/opengl/SDL_render_gl.c @@ -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 @@ GL_CreateRenderer(SDL_Window * window, Uint32 flags) { SDL_Renderer *renderer; GL_RenderData *data; + const char *hint; GLint value; Uint32 window_flags; @@ -282,7 +285,12 @@ GL_CreateRenderer(SDL_Window * window, Uint32 flags) } /* 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 */