Added SDL_GetRenderer()

This commit is contained in:
Sam Lantinga 2011-04-04 09:29:13 -07:00
parent b950cf4653
commit 126bbbaa50
2 changed files with 27 additions and 0 deletions

View file

@ -174,6 +174,11 @@ extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateRenderer(SDL_Window * window,
*/ */
extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateSoftwareRenderer(SDL_Surface * surface); extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateSoftwareRenderer(SDL_Surface * surface);
/**
* \brief Get the renderer associated with a window.
*/
extern DECLSPEC SDL_Renderer * SDLCALL SDL_GetRenderer(SDL_Window * window);
/** /**
* \brief Get information about a rendering context. * \brief Get information about a rendering context.
*/ */

View file

@ -30,6 +30,8 @@
#include "software/SDL_render_sw_c.h" #include "software/SDL_render_sw_c.h"
#define SDL_WINDOWRENDERDATA "_SDL_WindowRenderData"
#define CHECK_RENDERER_MAGIC(renderer, retval) \ #define CHECK_RENDERER_MAGIC(renderer, retval) \
if (!renderer || renderer->magic != &renderer_magic) { \ if (!renderer || renderer->magic != &renderer_magic) { \
SDL_SetError("Invalid renderer"); \ SDL_SetError("Invalid renderer"); \
@ -123,6 +125,16 @@ SDL_CreateRenderer(SDL_Window * window, int index, Uint32 flags)
int n = SDL_GetNumRenderDrivers(); int n = SDL_GetNumRenderDrivers();
const char *hint; const char *hint;
if (!window) {
SDL_SetError("Invalid window");
return NULL;
}
if (SDL_GetRenderer(window)) {
SDL_SetError("Renderer already associated with window");
return NULL;
}
hint = SDL_GetHint(SDL_HINT_RENDER_VSYNC); hint = SDL_GetHint(SDL_HINT_RENDER_VSYNC);
if (hint) { if (hint) {
if (*hint == '0') { if (*hint == '0') {
@ -178,6 +190,8 @@ SDL_CreateRenderer(SDL_Window * window, int index, Uint32 flags)
renderer->magic = &renderer_magic; renderer->magic = &renderer_magic;
renderer->window = window; renderer->window = window;
SDL_SetWindowData(window, SDL_WINDOWRENDERDATA, renderer);
SDL_RenderSetViewport(renderer, NULL); SDL_RenderSetViewport(renderer, NULL);
SDL_AddEventWatch(SDL_RendererEventWatch, renderer); SDL_AddEventWatch(SDL_RendererEventWatch, renderer);
@ -208,6 +222,12 @@ SDL_CreateSoftwareRenderer(SDL_Surface * surface)
#endif /* !SDL_RENDER_DISABLED */ #endif /* !SDL_RENDER_DISABLED */
} }
SDL_Renderer *
SDL_GetRenderer(SDL_Window * window)
{
return (SDL_Renderer *)SDL_GetWindowData(window, SDL_WINDOWRENDERDATA);
}
int int
SDL_GetRendererInfo(SDL_Renderer * renderer, SDL_RendererInfo * info) SDL_GetRendererInfo(SDL_Renderer * renderer, SDL_RendererInfo * info)
{ {
@ -1149,6 +1169,8 @@ SDL_DestroyRenderer(SDL_Renderer * renderer)
SDL_DestroyTexture(renderer->textures); SDL_DestroyTexture(renderer->textures);
} }
SDL_SetWindowData(renderer->window, SDL_WINDOWRENDERDATA, NULL);
/* It's no longer magical... */ /* It's no longer magical... */
renderer->magic = NULL; renderer->magic = NULL;