SDL_sysrender.h 7.5 KB

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