SDL_sysrender.h 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. /*
  2. Simple DirectMedia Layer
  3. Copyright (C) 1997-2014 Sam Lantinga <[email protected]>
  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. int (*CreateTexture) (SDL_Renderer * renderer, SDL_Texture * texture);
  67. int (*SetTextureColorMod) (SDL_Renderer * renderer,
  68. SDL_Texture * texture);
  69. int (*SetTextureAlphaMod) (SDL_Renderer * renderer,
  70. SDL_Texture * texture);
  71. int (*SetTextureBlendMode) (SDL_Renderer * renderer,
  72. SDL_Texture * texture);
  73. int (*UpdateTexture) (SDL_Renderer * renderer, SDL_Texture * texture,
  74. const SDL_Rect * rect, const void *pixels,
  75. int pitch);
  76. int (*UpdateTextureYUV) (SDL_Renderer * renderer, SDL_Texture * texture,
  77. const SDL_Rect * rect,
  78. const Uint8 *Yplane, int Ypitch,
  79. const Uint8 *Uplane, int Upitch,
  80. const Uint8 *Vplane, int Vpitch);
  81. int (*LockTexture) (SDL_Renderer * renderer, SDL_Texture * texture,
  82. const SDL_Rect * rect, void **pixels, int *pitch);
  83. void (*UnlockTexture) (SDL_Renderer * renderer, SDL_Texture * texture);
  84. int (*SetRenderTarget) (SDL_Renderer * renderer, SDL_Texture * texture);
  85. int (*UpdateViewport) (SDL_Renderer * renderer);
  86. int (*UpdateClipRect) (SDL_Renderer * renderer);
  87. int (*RenderClear) (SDL_Renderer * renderer);
  88. int (*RenderDrawPoints) (SDL_Renderer * renderer, const SDL_FPoint * points,
  89. int count);
  90. int (*RenderDrawLines) (SDL_Renderer * renderer, const SDL_FPoint * points,
  91. int count);
  92. int (*RenderFillRects) (SDL_Renderer * renderer, const SDL_FRect * rects,
  93. int count);
  94. int (*RenderCopy) (SDL_Renderer * renderer, SDL_Texture * texture,
  95. const SDL_Rect * srcrect, const SDL_FRect * dstrect);
  96. int (*RenderCopyEx) (SDL_Renderer * renderer, SDL_Texture * texture,
  97. const SDL_Rect * srcquad, const SDL_FRect * dstrect,
  98. const double angle, const SDL_FPoint *center, const SDL_RendererFlip flip);
  99. int (*RenderReadPixels) (SDL_Renderer * renderer, const SDL_Rect * rect,
  100. Uint32 format, void * pixels, int pitch);
  101. void (*RenderPresent) (SDL_Renderer * renderer);
  102. void (*DestroyTexture) (SDL_Renderer * renderer, SDL_Texture * texture);
  103. void (*DestroyRenderer) (SDL_Renderer * renderer);
  104. int (*GL_BindTexture) (SDL_Renderer * renderer, SDL_Texture *texture, float *texw, float *texh);
  105. int (*GL_UnbindTexture) (SDL_Renderer * renderer, SDL_Texture *texture);
  106. /* The current renderer info */
  107. SDL_RendererInfo info;
  108. /* The window associated with the renderer */
  109. SDL_Window *window;
  110. SDL_bool hidden;
  111. /* The logical resolution for rendering */
  112. int logical_w;
  113. int logical_h;
  114. int logical_w_backup;
  115. int logical_h_backup;
  116. /* The drawable area within the window */
  117. SDL_Rect viewport;
  118. SDL_Rect viewport_backup;
  119. /* The clip rectangle within the window */
  120. SDL_Rect clip_rect;
  121. SDL_Rect clip_rect_backup;
  122. /* The render output coordinate scale */
  123. SDL_FPoint scale;
  124. SDL_FPoint scale_backup;
  125. /* The list of textures */
  126. SDL_Texture *textures;
  127. SDL_Texture *target;
  128. Uint8 r, g, b, a; /**< Color for drawing operations values */
  129. SDL_BlendMode blendMode; /**< The drawing blend mode */
  130. void *driverdata;
  131. };
  132. /* Define the SDL render driver structure */
  133. struct SDL_RenderDriver
  134. {
  135. SDL_Renderer *(*CreateRenderer) (SDL_Window * window, Uint32 flags);
  136. /* Info about the renderer capabilities */
  137. SDL_RendererInfo info;
  138. };
  139. #if !SDL_RENDER_DISABLED
  140. #if SDL_VIDEO_RENDER_D3D
  141. extern SDL_RenderDriver D3D_RenderDriver;
  142. #endif
  143. #if SDL_VIDEO_RENDER_D3D11
  144. extern SDL_RenderDriver D3D11_RenderDriver;
  145. #endif
  146. #if SDL_VIDEO_RENDER_OGL
  147. extern SDL_RenderDriver GL_RenderDriver;
  148. #endif
  149. #if SDL_VIDEO_RENDER_OGL_ES2
  150. extern SDL_RenderDriver GLES2_RenderDriver;
  151. #endif
  152. #if SDL_VIDEO_RENDER_OGL_ES
  153. extern SDL_RenderDriver GLES_RenderDriver;
  154. #endif
  155. #if SDL_VIDEO_RENDER_DIRECTFB
  156. extern SDL_RenderDriver DirectFB_RenderDriver;
  157. #endif
  158. #if SDL_VIDEO_RENDER_PSP
  159. extern SDL_RenderDriver PSP_RenderDriver;
  160. #endif
  161. extern SDL_RenderDriver SW_RenderDriver;
  162. #endif /* !SDL_RENDER_DISABLED */
  163. #endif /* _SDL_sysrender_h */
  164. /* vi: set ts=4 sw=4 expandtab: */