Added the SDL_HINT_RENDER_DRIVER and SDL_HINT_RENDER_VSYNC hints.
This commit is contained in:
parent
37f40cdb19
commit
f8247546d6
3 changed files with 51 additions and 5 deletions
|
@ -67,6 +67,32 @@ extern "C" {
|
||||||
*/
|
*/
|
||||||
#define SDL_HINT_FRAMEBUFFER_ACCELERATION "SDL_FRAMEBUFFER_ACCELERATION"
|
#define SDL_HINT_FRAMEBUFFER_ACCELERATION "SDL_FRAMEBUFFER_ACCELERATION"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief A variable specifying which render driver to use.
|
||||||
|
*
|
||||||
|
* If the application doesn't pick a specific renderer to use, this variable
|
||||||
|
* specifies the name of the preferred renderer. If the preferred renderer
|
||||||
|
* can't be initialized, the normal default renderer is used.
|
||||||
|
*
|
||||||
|
* This variable is case insensitive and can be set to the following values:
|
||||||
|
* "direct3d"
|
||||||
|
* "opengl"
|
||||||
|
* "opengles"
|
||||||
|
* "software"
|
||||||
|
*/
|
||||||
|
#define SDL_HINT_RENDER_DRIVER "SDL_RENDER_DRIVER"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \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:
|
||||||
|
* "0" - Disable vsync
|
||||||
|
* "1" - Enable vsync
|
||||||
|
*
|
||||||
|
* By default SDL does not sync screen surface updates with vertical refresh.
|
||||||
|
*/
|
||||||
|
#define SDL_HINT_RENDER_VSYNC "SDL_RENDER_VSYNC"
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief An enumeration of hint priorities
|
* \brief An enumeration of hint priorities
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
/* The SDL 2D rendering system */
|
/* The SDL 2D rendering system */
|
||||||
|
|
||||||
|
#include "SDL_hints.h"
|
||||||
#include "SDL_render.h"
|
#include "SDL_render.h"
|
||||||
#include "SDL_sysrender.h"
|
#include "SDL_sysrender.h"
|
||||||
#include "../video/SDL_pixels_c.h"
|
#include "../video/SDL_pixels_c.h"
|
||||||
|
@ -94,21 +95,32 @@ SDL_CreateRenderer(SDL_Window * window, int index, Uint32 flags)
|
||||||
{
|
{
|
||||||
SDL_Renderer *renderer = NULL;
|
SDL_Renderer *renderer = NULL;
|
||||||
int n = SDL_GetNumRenderDrivers();
|
int n = SDL_GetNumRenderDrivers();
|
||||||
|
const char *hint;
|
||||||
|
|
||||||
|
hint = SDL_GetHint(SDL_HINT_RENDER_VSYNC);
|
||||||
|
if (hint) {
|
||||||
|
if (*hint == '0') {
|
||||||
|
flags &= ~SDL_RENDERER_PRESENTVSYNC;
|
||||||
|
} else {
|
||||||
|
flags |= SDL_RENDERER_PRESENTVSYNC;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (index < 0) {
|
if (index < 0) {
|
||||||
char *override = SDL_getenv("SDL_VIDEO_RENDERER");
|
hint = SDL_GetHint(SDL_HINT_RENDER_DRIVER);
|
||||||
|
if (hint) {
|
||||||
if (override) {
|
|
||||||
for (index = 0; index < n; ++index) {
|
for (index = 0; index < n; ++index) {
|
||||||
const SDL_RenderDriver *driver = render_drivers[index];
|
const SDL_RenderDriver *driver = render_drivers[index];
|
||||||
|
|
||||||
if (SDL_strcasecmp(override, driver->info.name) == 0) {
|
if (SDL_strcasecmp(hint, driver->info.name) == 0) {
|
||||||
/* Create a new renderer instance */
|
/* Create a new renderer instance */
|
||||||
renderer = driver->CreateRenderer(window, flags);
|
renderer = driver->CreateRenderer(window, flags);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
|
||||||
|
if (!renderer) {
|
||||||
for (index = 0; index < n; ++index) {
|
for (index = 0; index < n; ++index) {
|
||||||
const SDL_RenderDriver *driver = render_drivers[index];
|
const SDL_RenderDriver *driver = render_drivers[index];
|
||||||
|
|
||||||
|
|
|
@ -117,6 +117,14 @@ ShouldUseTextureFramebuffer()
|
||||||
return SDL_TRUE;
|
return SDL_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If the user has specified a software renderer we can't use a
|
||||||
|
texture framebuffer, or renderer creation will go recursive.
|
||||||
|
*/
|
||||||
|
hint = SDL_GetHint(SDL_HINT_RENDER_DRIVER);
|
||||||
|
if (hint && SDL_strcasecmp(hint, "software") == 0) {
|
||||||
|
return SDL_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/* See if the user or application wants a specific behavior */
|
/* See if the user or application wants a specific behavior */
|
||||||
hint = SDL_GetHint(SDL_HINT_FRAMEBUFFER_ACCELERATION);
|
hint = SDL_GetHint(SDL_HINT_FRAMEBUFFER_ACCELERATION);
|
||||||
if (hint) {
|
if (hint) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue