src/render/SDL_sysrender.h
author Sam Lantinga <slouken@libsdl.org>
Wed, 05 Jun 2013 22:33:10 -0700
changeset 7286 04087a99e3f4
parent 7240 39eb4958950a
child 7759 869583422e5a
child 8477 ad08f0d710f3
permissions -rw-r--r--
Added testautomation to the Visual Studio 2008 project.
     1 /*
     2   Simple DirectMedia Layer
     3   Copyright (C) 1997-2013 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_config.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 (*LockTexture) (SDL_Renderer * renderer, SDL_Texture * texture,
    93                         const SDL_Rect * rect, void **pixels, int *pitch);
    94     void (*UnlockTexture) (SDL_Renderer * renderer, SDL_Texture * texture);
    95     int (*SetRenderTarget) (SDL_Renderer * renderer, SDL_Texture * texture);
    96     int (*UpdateViewport) (SDL_Renderer * renderer);
    97     int (*UpdateClipRect) (SDL_Renderer * renderer);
    98     int (*RenderClear) (SDL_Renderer * renderer);
    99     int (*RenderDrawPoints) (SDL_Renderer * renderer, const SDL_FPoint * points,
   100                              int count);
   101     int (*RenderDrawLines) (SDL_Renderer * renderer, const SDL_FPoint * points,
   102                             int count);
   103     int (*RenderFillRects) (SDL_Renderer * renderer, const SDL_FRect * rects,
   104                             int count);
   105     int (*RenderCopy) (SDL_Renderer * renderer, SDL_Texture * texture,
   106                        const SDL_Rect * srcrect, const SDL_FRect * dstrect);
   107     int (*RenderCopyEx) (SDL_Renderer * renderer, SDL_Texture * texture,
   108                        const SDL_Rect * srcquad, const SDL_FRect * dstrect,
   109                        const double angle, const SDL_FPoint *center, const SDL_RendererFlip flip);
   110     int (*RenderReadPixels) (SDL_Renderer * renderer, const SDL_Rect * rect,
   111                              Uint32 format, void * pixels, int pitch);
   112     void (*RenderPresent) (SDL_Renderer * renderer);
   113     void (*DestroyTexture) (SDL_Renderer * renderer, SDL_Texture * texture);
   114 
   115     void (*DestroyRenderer) (SDL_Renderer * renderer);
   116 
   117     int (*GL_BindTexture) (SDL_Renderer * renderer, SDL_Texture *texture, float *texw, float *texh);
   118     int (*GL_UnbindTexture) (SDL_Renderer * renderer, SDL_Texture *texture);
   119 
   120     /* The current renderer info */
   121     SDL_RendererInfo info;
   122 
   123     /* The window associated with the renderer */
   124     SDL_Window *window;
   125     SDL_bool hidden;
   126 
   127     /* The logical resolution for rendering */
   128     int logical_w;
   129     int logical_h;
   130     int logical_w_backup;
   131     int logical_h_backup;
   132 
   133     /* The drawable area within the window */
   134     SDL_Rect viewport;
   135     SDL_Rect viewport_backup;
   136 
   137     /* The clip rectangle within the window */
   138     SDL_Rect clip_rect;
   139     SDL_Rect clip_rect_backup;
   140 
   141     /* The render output coordinate scale */
   142     SDL_FPoint scale;
   143     SDL_FPoint scale_backup;
   144 
   145     /* The list of textures */
   146     SDL_Texture *textures;
   147     SDL_Texture *target;
   148 
   149     Uint8 r, g, b, a;                   /**< Color for drawing operations values */
   150     SDL_BlendMode blendMode;            /**< The drawing blend mode */
   151 
   152     void *driverdata;
   153 };
   154 
   155 /* Define the SDL render driver structure */
   156 struct SDL_RenderDriver
   157 {
   158     SDL_Renderer *(*CreateRenderer) (SDL_Window * window, Uint32 flags);
   159 
   160     /* Info about the renderer capabilities */
   161     SDL_RendererInfo info;
   162 };
   163 
   164 #if !SDL_RENDER_DISABLED
   165 
   166 #if SDL_VIDEO_RENDER_D3D
   167 extern SDL_RenderDriver D3D_RenderDriver;
   168 #endif
   169 #if SDL_VIDEO_RENDER_OGL
   170 extern SDL_RenderDriver GL_RenderDriver;
   171 #endif
   172 #if SDL_VIDEO_RENDER_OGL_ES2
   173 extern SDL_RenderDriver GLES2_RenderDriver;
   174 #endif
   175 #if SDL_VIDEO_RENDER_OGL_ES
   176 extern SDL_RenderDriver GLES_RenderDriver;
   177 #endif
   178 #if SDL_VIDEO_RENDER_DIRECTFB
   179 extern SDL_RenderDriver DirectFB_RenderDriver;
   180 #endif
   181 #if SDL_VIDEO_RENDER_PSP
   182 extern SDL_RenderDriver PSP_RenderDriver;
   183 #endif
   184 extern SDL_RenderDriver SW_RenderDriver;
   185 
   186 #endif /* !SDL_RENDER_DISABLED */
   187 
   188 #endif /* _SDL_sysrender_h */
   189 
   190 /* vi: set ts=4 sw=4 expandtab: */