src/render/SDL_sysrender.h
author Sam Lantinga <slouken@libsdl.org>
Fri, 22 Sep 2017 11:25:52 -0700
changeset 11525 8df7a59b5528
parent 11282 180e8906dc3c
child 11729 d1ce8396c356
permissions -rw-r--r--
Fixed Mac OS X build
     1 /*
     2   Simple DirectMedia Layer
     3   Copyright (C) 1997-2017 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     SDL_bool (*SupportsBlendMode)(SDL_Renderer * renderer, SDL_BlendMode blendMode);
    83     int (*CreateTexture) (SDL_Renderer * renderer, SDL_Texture * texture);
    84     int (*SetTextureColorMod) (SDL_Renderer * renderer,
    85                                SDL_Texture * texture);
    86     int (*SetTextureAlphaMod) (SDL_Renderer * renderer,
    87                                SDL_Texture * texture);
    88     int (*SetTextureBlendMode) (SDL_Renderer * renderer,
    89                                 SDL_Texture * texture);
    90     int (*UpdateTexture) (SDL_Renderer * renderer, SDL_Texture * texture,
    91                           const SDL_Rect * rect, const void *pixels,
    92                           int pitch);
    93     int (*UpdateTextureYUV) (SDL_Renderer * renderer, SDL_Texture * texture,
    94                             const SDL_Rect * rect,
    95                             const Uint8 *Yplane, int Ypitch,
    96                             const Uint8 *Uplane, int Upitch,
    97                             const Uint8 *Vplane, int Vpitch);
    98     int (*LockTexture) (SDL_Renderer * renderer, SDL_Texture * texture,
    99                         const SDL_Rect * rect, void **pixels, int *pitch);
   100     void (*UnlockTexture) (SDL_Renderer * renderer, SDL_Texture * texture);
   101     int (*SetRenderTarget) (SDL_Renderer * renderer, SDL_Texture * texture);
   102     int (*UpdateViewport) (SDL_Renderer * renderer);
   103     int (*UpdateClipRect) (SDL_Renderer * renderer);
   104     int (*RenderClear) (SDL_Renderer * renderer);
   105     int (*RenderDrawPoints) (SDL_Renderer * renderer, const SDL_FPoint * points,
   106                              int count);
   107     int (*RenderDrawLines) (SDL_Renderer * renderer, const SDL_FPoint * points,
   108                             int count);
   109     int (*RenderFillRects) (SDL_Renderer * renderer, const SDL_FRect * rects,
   110                             int count);
   111     int (*RenderCopy) (SDL_Renderer * renderer, SDL_Texture * texture,
   112                        const SDL_Rect * srcrect, const SDL_FRect * dstrect);
   113     int (*RenderCopyEx) (SDL_Renderer * renderer, SDL_Texture * texture,
   114                        const SDL_Rect * srcquad, const SDL_FRect * dstrect,
   115                        const double angle, const SDL_FPoint *center, const SDL_RendererFlip flip);
   116     int (*RenderReadPixels) (SDL_Renderer * renderer, const SDL_Rect * rect,
   117                              Uint32 format, void * pixels, int pitch);
   118     void (*RenderPresent) (SDL_Renderer * renderer);
   119     void (*DestroyTexture) (SDL_Renderer * renderer, SDL_Texture * texture);
   120 
   121     void (*DestroyRenderer) (SDL_Renderer * renderer);
   122 
   123     int (*GL_BindTexture) (SDL_Renderer * renderer, SDL_Texture *texture, float *texw, float *texh);
   124     int (*GL_UnbindTexture) (SDL_Renderer * renderer, SDL_Texture *texture);
   125 
   126     /* The current renderer info */
   127     SDL_RendererInfo info;
   128 
   129     /* The window associated with the renderer */
   130     SDL_Window *window;
   131     SDL_bool hidden;
   132 
   133     /* The logical resolution for rendering */
   134     int logical_w;
   135     int logical_h;
   136     int logical_w_backup;
   137     int logical_h_backup;
   138 
   139     /* Whether or not to force the viewport to even integer intervals */
   140     SDL_bool integer_scale;
   141 
   142     /* The drawable area within the window */
   143     SDL_Rect viewport;
   144     SDL_Rect viewport_backup;
   145 
   146     /* The clip rectangle within the window */
   147     SDL_Rect clip_rect;
   148     SDL_Rect clip_rect_backup;
   149 
   150     /* Wether or not the clipping rectangle is used. */
   151     SDL_bool clipping_enabled;
   152     SDL_bool clipping_enabled_backup;
   153 
   154     /* The render output coordinate scale */
   155     SDL_FPoint scale;
   156     SDL_FPoint scale_backup;
   157 
   158     /* The pixel to point coordinate scale */
   159     SDL_FPoint dpi_scale;
   160 
   161     /* The list of textures */
   162     SDL_Texture *textures;
   163     SDL_Texture *target;
   164 
   165     Uint8 r, g, b, a;                   /**< Color for drawing operations values */
   166     SDL_BlendMode blendMode;            /**< The drawing blend mode */
   167 
   168     void *driverdata;
   169 };
   170 
   171 /* Define the SDL render driver structure */
   172 struct SDL_RenderDriver
   173 {
   174     SDL_Renderer *(*CreateRenderer) (SDL_Window * window, Uint32 flags);
   175 
   176     /* Info about the renderer capabilities */
   177     SDL_RendererInfo info;
   178 };
   179 
   180 /* Not all of these are available in a given build. Use #ifdefs, etc. */
   181 extern SDL_RenderDriver D3D_RenderDriver;
   182 extern SDL_RenderDriver D3D11_RenderDriver;
   183 extern SDL_RenderDriver GL_RenderDriver;
   184 extern SDL_RenderDriver GLES2_RenderDriver;
   185 extern SDL_RenderDriver GLES_RenderDriver;
   186 extern SDL_RenderDriver DirectFB_RenderDriver;
   187 extern SDL_RenderDriver PSP_RenderDriver;
   188 extern SDL_RenderDriver SW_RenderDriver;
   189 
   190 /* Blend mode functions */
   191 extern SDL_BlendFactor SDL_GetBlendModeSrcColorFactor(SDL_BlendMode blendMode);
   192 extern SDL_BlendFactor SDL_GetBlendModeDstColorFactor(SDL_BlendMode blendMode);
   193 extern SDL_BlendOperation SDL_GetBlendModeColorOperation(SDL_BlendMode blendMode);
   194 extern SDL_BlendFactor SDL_GetBlendModeSrcAlphaFactor(SDL_BlendMode blendMode);
   195 extern SDL_BlendFactor SDL_GetBlendModeDstAlphaFactor(SDL_BlendMode blendMode);
   196 extern SDL_BlendOperation SDL_GetBlendModeAlphaOperation(SDL_BlendMode blendMode);
   197 
   198 #endif /* SDL_sysrender_h_ */
   199 
   200 /* vi: set ts=4 sw=4 expandtab: */