src/render/SDL_sysrender.h
author Philipp Wiesemann <philipp.wiesemann@arcor.de>
Wed, 29 Oct 2014 20:20:47 +0100
changeset 9201 21d9f9babb30
parent 8728 c7174f961388
child 9619 b94b6d0bff0f
permissions -rw-r--r--
Fixed bug 2647 - Memory leak in SDL_AddHintCallback function - SDL_hints.c

Nitz

Variable entry going out of scope leaks the storage it points to, at:

/* Need to add a hint entry for this watcher */
hint = (SDL_Hint *)SDL_malloc(sizeof(*hint));
if (!hint) {
return;
}

Patch is attached.
     1 /*
     2   Simple DirectMedia Layer
     3   Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
     4 
     5   This software is provided 'as-is', without any express or implied
     6   warranty.  In no event will the authors be held liable for any damages
     7   arising from the use of this software.
     8 
     9   Permission is granted to anyone to use this software for any purpose,
    10   including commercial applications, and to alter it and redistribute it
    11   freely, subject to the following restrictions:
    12 
    13   1. The origin of this software must not be misrepresented; you must not
    14      claim that you wrote the original software. If you use this software
    15      in a product, an acknowledgment in the product documentation would be
    16      appreciated but is not required.
    17   2. Altered source versions must be plainly marked as such, and must not be
    18      misrepresented as being the original software.
    19   3. This notice may not be removed or altered from any source distribution.
    20 */
    21 #include "../SDL_internal.h"
    22 
    23 #ifndef _SDL_sysrender_h
    24 #define _SDL_sysrender_h
    25 
    26 #include "SDL_render.h"
    27 #include "SDL_events.h"
    28 #include "SDL_yuv_sw_c.h"
    29 
    30 /* The SDL 2D rendering system */
    31 
    32 typedef struct SDL_RenderDriver SDL_RenderDriver;
    33 
    34 typedef struct
    35 {
    36     float x;
    37     float y;
    38 } SDL_FPoint;
    39 
    40 typedef struct
    41 {
    42     float x;
    43     float y;
    44     float w;
    45     float h;
    46 } SDL_FRect;
    47 
    48 /* Define the SDL texture structure */
    49 struct SDL_Texture
    50 {
    51     const void *magic;
    52     Uint32 format;              /**< The pixel format of the texture */
    53     int access;                 /**< SDL_TextureAccess */
    54     int w;                      /**< The width of the texture */
    55     int h;                      /**< The height of the texture */
    56     int modMode;                /**< The texture modulation mode */
    57     SDL_BlendMode blendMode;    /**< The texture blend mode */
    58     Uint8 r, g, b, a;           /**< Texture modulation values */
    59 
    60     SDL_Renderer *renderer;
    61 
    62     /* Support for formats not supported directly by the renderer */
    63     SDL_Texture *native;
    64     SDL_SW_YUVTexture *yuv;
    65     void *pixels;
    66     int pitch;
    67     SDL_Rect locked_rect;
    68 
    69     void *driverdata;           /**< Driver specific texture representation */
    70 
    71     SDL_Texture *prev;
    72     SDL_Texture *next;
    73 };
    74 
    75 /* Define the SDL renderer structure */
    76 struct SDL_Renderer
    77 {
    78     const void *magic;
    79 
    80     void (*WindowEvent) (SDL_Renderer * renderer, const SDL_WindowEvent *event);
    81     int (*GetOutputSize) (SDL_Renderer * renderer, int *w, int *h);
    82     int (*CreateTexture) (SDL_Renderer * renderer, SDL_Texture * texture);
    83     int (*SetTextureColorMod) (SDL_Renderer * renderer,
    84                                SDL_Texture * texture);
    85     int (*SetTextureAlphaMod) (SDL_Renderer * renderer,
    86                                SDL_Texture * texture);
    87     int (*SetTextureBlendMode) (SDL_Renderer * renderer,
    88                                 SDL_Texture * texture);
    89     int (*UpdateTexture) (SDL_Renderer * renderer, SDL_Texture * texture,
    90                           const SDL_Rect * rect, const void *pixels,
    91                           int pitch);
    92     int (*UpdateTextureYUV) (SDL_Renderer * renderer, SDL_Texture * texture,
    93                             const SDL_Rect * rect,
    94                             const Uint8 *Yplane, int Ypitch,
    95                             const Uint8 *Uplane, int Upitch,
    96                             const Uint8 *Vplane, int Vpitch);
    97     int (*LockTexture) (SDL_Renderer * renderer, SDL_Texture * texture,
    98                         const SDL_Rect * rect, void **pixels, int *pitch);
    99     void (*UnlockTexture) (SDL_Renderer * renderer, SDL_Texture * texture);
   100     int (*SetRenderTarget) (SDL_Renderer * renderer, SDL_Texture * texture);
   101     int (*UpdateViewport) (SDL_Renderer * renderer);
   102     int (*UpdateClipRect) (SDL_Renderer * renderer);
   103     int (*RenderClear) (SDL_Renderer * renderer);
   104     int (*RenderDrawPoints) (SDL_Renderer * renderer, const SDL_FPoint * points,
   105                              int count);
   106     int (*RenderDrawLines) (SDL_Renderer * renderer, const SDL_FPoint * points,
   107                             int count);
   108     int (*RenderFillRects) (SDL_Renderer * renderer, const SDL_FRect * rects,
   109                             int count);
   110     int (*RenderCopy) (SDL_Renderer * renderer, SDL_Texture * texture,
   111                        const SDL_Rect * srcrect, const SDL_FRect * dstrect);
   112     int (*RenderCopyEx) (SDL_Renderer * renderer, SDL_Texture * texture,
   113                        const SDL_Rect * srcquad, const SDL_FRect * dstrect,
   114                        const double angle, const SDL_FPoint *center, const SDL_RendererFlip flip);
   115     int (*RenderReadPixels) (SDL_Renderer * renderer, const SDL_Rect * rect,
   116                              Uint32 format, void * pixels, int pitch);
   117     void (*RenderPresent) (SDL_Renderer * renderer);
   118     void (*DestroyTexture) (SDL_Renderer * renderer, SDL_Texture * texture);
   119 
   120     void (*DestroyRenderer) (SDL_Renderer * renderer);
   121 
   122     int (*GL_BindTexture) (SDL_Renderer * renderer, SDL_Texture *texture, float *texw, float *texh);
   123     int (*GL_UnbindTexture) (SDL_Renderer * renderer, SDL_Texture *texture);
   124 
   125     /* The current renderer info */
   126     SDL_RendererInfo info;
   127 
   128     /* The window associated with the renderer */
   129     SDL_Window *window;
   130     SDL_bool hidden;
   131 
   132     /* The logical resolution for rendering */
   133     int logical_w;
   134     int logical_h;
   135     int logical_w_backup;
   136     int logical_h_backup;
   137 
   138     /* The drawable area within the window */
   139     SDL_Rect viewport;
   140     SDL_Rect viewport_backup;
   141 
   142     /* The clip rectangle within the window */
   143     SDL_Rect clip_rect;
   144     SDL_Rect clip_rect_backup;
   145 
   146     /* Wether or not the clipping rectangle is used. */
   147     SDL_bool clipping_enabled;
   148     SDL_bool clipping_enabled_backup;
   149 
   150     /* The render output coordinate scale */
   151     SDL_FPoint scale;
   152     SDL_FPoint scale_backup;
   153 
   154     /* The list of textures */
   155     SDL_Texture *textures;
   156     SDL_Texture *target;
   157 
   158     Uint8 r, g, b, a;                   /**< Color for drawing operations values */
   159     SDL_BlendMode blendMode;            /**< The drawing blend mode */
   160 
   161     void *driverdata;
   162 };
   163 
   164 /* Define the SDL render driver structure */
   165 struct SDL_RenderDriver
   166 {
   167     SDL_Renderer *(*CreateRenderer) (SDL_Window * window, Uint32 flags);
   168 
   169     /* Info about the renderer capabilities */
   170     SDL_RendererInfo info;
   171 };
   172 
   173 #if !SDL_RENDER_DISABLED
   174 
   175 #if SDL_VIDEO_RENDER_D3D
   176 extern SDL_RenderDriver D3D_RenderDriver;
   177 #endif
   178 #if SDL_VIDEO_RENDER_D3D11
   179 extern SDL_RenderDriver D3D11_RenderDriver;
   180 #endif
   181 #if SDL_VIDEO_RENDER_OGL
   182 extern SDL_RenderDriver GL_RenderDriver;
   183 #endif
   184 #if SDL_VIDEO_RENDER_OGL_ES2
   185 extern SDL_RenderDriver GLES2_RenderDriver;
   186 #endif
   187 #if SDL_VIDEO_RENDER_OGL_ES
   188 extern SDL_RenderDriver GLES_RenderDriver;
   189 #endif
   190 #if SDL_VIDEO_RENDER_DIRECTFB
   191 extern SDL_RenderDriver DirectFB_RenderDriver;
   192 #endif
   193 #if SDL_VIDEO_RENDER_PSP
   194 extern SDL_RenderDriver PSP_RenderDriver;
   195 #endif
   196 extern SDL_RenderDriver SW_RenderDriver;
   197 
   198 #endif /* !SDL_RENDER_DISABLED */
   199 
   200 #endif /* _SDL_sysrender_h */
   201 
   202 /* vi: set ts=4 sw=4 expandtab: */