1 2 // Copyright Michael D. Parker 2018. 3 // Distributed under the Boost Software License, Version 1.0. 4 // (See accompanying file LICENSE_1_0.txt or copy at 5 // http://www.boost.org/LICENSE_1_0.txt) 6 7 module bindbc.sdl.bind.sdlrender; 8 9 import bindbc.sdl.config; 10 import bindbc.sdl.bind.sdlblendmode : SDL_BlendMode; 11 import bindbc.sdl.bind.sdlrect : SDL_Point, SDL_Rect; 12 import bindbc.sdl.bind.sdlstdinc : SDL_bool; 13 import bindbc.sdl.bind.sdlsurface : SDL_Surface; 14 import bindbc.sdl.bind.sdlvideo : SDL_Window; 15 16 enum SDL_RendererFlags : uint { 17 SDL_RENDERER_SOFTWARE = 0x00000001, 18 SDL_RENDERER_ACCELERATED = 0x00000002, 19 SDL_RENDERER_PRESENTVSYNC = 0x00000004, 20 SDL_RENDERER_TARGETTEXTURE = 0x00000008, 21 } 22 23 mixin(expandEnum!SDL_RendererFlags); 24 25 struct SDL_RendererInfo { 26 const(char)* name; 27 SDL_RendererFlags flags; 28 uint num_texture_formats; 29 uint[16] texture_formats; 30 int max_texture_width; 31 int max_texture_height; 32 } 33 34 enum SDL_TextureAccess { 35 SDL_TEXTUREACCESS_STATIC, 36 SDL_TEXTUREACCESS_STREAMING, 37 SDL_TEXTUREACCESS_TARGET, 38 } 39 mixin(expandEnum!SDL_TextureAccess); 40 41 enum SDL_TextureModulate { 42 SDL_TEXTUREMODULATE_NONE = 0x00000000, 43 SDL_TEXTUREMODULATE_COLOR = 0x00000001, 44 SDL_TEXTUREMODULATE_ALPHA = 0x00000002 45 } 46 mixin(expandEnum!SDL_TextureModulate); 47 48 enum SDL_RendererFlip { 49 SDL_FLIP_NONE = 0x00000000, 50 SDL_FLIP_HORIZONTAL = 0x00000001, 51 SDL_FLIP_VERTICAL = 0x00000002, 52 } 53 mixin(expandEnum!SDL_RendererFlip); 54 55 struct SDL_Renderer; 56 struct SDL_Texture; 57 58 version(BindSDL_Static) { 59 extern(C) @nogc nothrow { 60 int SDL_GetNumRenderDrivers(); 61 int SDL_GetRenderDriverInfo(int,SDL_RendererInfo*); 62 int SDL_CreateWindowAndRenderer(int,int,uint,SDL_Window**,SDL_Renderer**); 63 SDL_Renderer* SDL_CreateRenderer(SDL_Window*,int,SDL_RendererFlags); 64 SDL_Renderer* SDL_CreateSoftwareRenderer(SDL_Surface*); 65 SDL_Renderer* SDL_GetRenderer(SDL_Window*); 66 int SDL_GetRendererInfo(SDL_Renderer*,SDL_RendererInfo*); 67 int SDL_GetRendererOutputSize(SDL_Renderer*,int*,int*); 68 SDL_Texture* SDL_CreateTexture(SDL_Renderer*,uint,SDL_TextureAccess,int,int); 69 SDL_Texture* SDL_CreateTextureFromSurface(SDL_Renderer*,SDL_Surface*); 70 int SDL_QueryTexture(SDL_Texture*,uint*,int*,int*,int*); 71 int SDL_SetTextureColorMod(SDL_Texture*,ubyte,ubyte,ubyte); 72 int SDL_GetTextureColorMod(SDL_Texture*,ubyte*,ubyte*,ubyte*); 73 int SDL_SetTextureAlphaMod(SDL_Texture*,ubyte); 74 int SDL_GetTextureAlphaMod(SDL_Texture*,ubyte*); 75 int SDL_SetTextureBlendMode(SDL_Texture*,SDL_BlendMode); 76 int SDL_GetTextureBlendMode(SDL_Texture*,SDL_BlendMode*); 77 int SDL_UpdateTexture(SDL_Texture*,const(SDL_Rect)*,const(void)*,int); 78 int SDL_LockTexture(SDL_Texture*,const(SDL_Rect)*,void**,int*); 79 void SDL_UnlockTexture(SDL_Texture*); 80 SDL_bool SDL_RenderTargetSupported(SDL_Renderer*); 81 int SDL_SetRenderTarget(SDL_Renderer*,SDL_Texture*); 82 SDL_Texture* SDL_GetRenderTarget(SDL_Renderer*); 83 int SDL_RenderSetClipRect(SDL_Renderer*,const(SDL_Rect)*); 84 void SDL_RenderGetClipRect(SDL_Renderer* renderer,SDL_Rect*); 85 int SDL_RenderSetLogicalSize(SDL_Renderer*,int,int); 86 void SDL_RenderGetLogicalSize(SDL_Renderer*,int*,int*); 87 int SDL_RenderSetViewport(SDL_Renderer*,const(SDL_Rect)*); 88 void SDL_RenderGetViewport(SDL_Renderer*,SDL_Rect*); 89 int SDL_RenderSetScale(SDL_Renderer*,float,float); 90 int SDL_RenderGetScale(SDL_Renderer*,float*,float*); 91 int SDL_SetRenderDrawColor(SDL_Renderer*,ubyte,ubyte,ubyte,ubyte); 92 int SDL_GetRenderDrawColor(SDL_Renderer*,ubyte*,ubyte*,ubyte*,ubyte*); 93 int SDL_SetRenderDrawBlendMode(SDL_Renderer*,SDL_BlendMode); 94 int SDL_GetRenderDrawBlendMode(SDL_Renderer*,SDL_BlendMode*); 95 int SDL_RenderClear(SDL_Renderer*); 96 int SDL_RenderDrawPoint(SDL_Renderer*,int,int); 97 int SDL_RenderDrawPoints(SDL_Renderer*,const(SDL_Point)*,int); 98 int SDL_RenderDrawLine(SDL_Renderer*,int,int,int,int); 99 int SDL_RenderDrawLines(SDL_Renderer*,const(SDL_Point)*,int); 100 int SDL_RenderDrawRect(SDL_Renderer*,const(SDL_Rect)*); 101 int SDL_RenderDrawRects(SDL_Renderer*,const(SDL_Rect)*,int); 102 int SDL_RenderFillRect(SDL_Renderer*,const(SDL_Rect)*); 103 int SDL_RenderFillRects(SDL_Renderer*,const(SDL_Rect)*,int); 104 int SDL_RenderCopy(SDL_Renderer*,SDL_Texture*,const(SDL_Rect)*,const(SDL_Rect*)); 105 int SDL_RenderCopyEx(SDL_Renderer*,SDL_Texture*,const(SDL_Rect)*,const(SDL_Rect)*,const(double),const(SDL_Point)*,const(SDL_RendererFlip)); 106 int SDL_RenderReadPixels(SDL_Renderer*,const(SDL_Rect)*,uint,void*,int); 107 void SDL_RenderPresent(SDL_Renderer*); 108 void SDL_DestroyTexture(SDL_Texture*); 109 void SDL_DestroyRenderer(SDL_Renderer*); 110 int SDL_GL_BindTexture(SDL_Texture*,float*,float*); 111 int SDL_GL_UnbindTexture(SDL_Texture*); 112 113 static if(sdlSupport >= SDLSupport.sdl201) { 114 int SDL_UpdateYUVTexture(SDL_Texture*,const(SDL_Rect)*,const(ubyte)*,int,const(ubyte)*,int,const(ubyte)*,int); 115 } 116 117 static if(sdlSupport >= SDLSupport.sdl204) { 118 SDL_bool SDL_RenderIsClipEnabled(SDL_Renderer*); 119 } 120 121 static if(sdlSupport >= SDLSupport.sdl205) { 122 SDL_bool SDL_RenderGetIntegerScale(SDL_Renderer*); 123 int SDL_RenderSetIntegerScale(SDL_Renderer*,SDL_bool); 124 } 125 126 static if(sdlSupport >= SDLSupport.sdl208) { 127 void* SDL_RenderGetMetalLayer(SDL_Renderer*); 128 void* SDL_RenderGetMetalCommandEncoder(SDL_Renderer*); 129 } 130 } 131 } 132 else { 133 extern(C) @nogc nothrow { 134 alias pSDL_GetNumRenderDrivers = int function(); 135 alias pSDL_GetRenderDriverInfo = int function(int,SDL_RendererInfo*); 136 alias pSDL_CreateWindowAndRenderer = int function(int,int,uint,SDL_Window**,SDL_Renderer**); 137 alias pSDL_CreateRenderer = SDL_Renderer* function(SDL_Window*,int,SDL_RendererFlags); 138 alias pSDL_CreateSoftwareRenderer = SDL_Renderer* function(SDL_Surface*); 139 alias pSDL_GetRenderer = SDL_Renderer* function(SDL_Window*); 140 alias pSDL_GetRendererInfo = int function(SDL_Renderer*,SDL_RendererInfo*); 141 alias pSDL_GetRendererOutputSize = int function(SDL_Renderer*,int*,int*); 142 alias pSDL_CreateTexture = SDL_Texture* function(SDL_Renderer*,uint,SDL_TextureAccess,int,int); 143 alias pSDL_CreateTextureFromSurface = SDL_Texture* function(SDL_Renderer*,SDL_Surface*); 144 alias pSDL_QueryTexture = int function(SDL_Texture*,uint*,int*,int*,int*); 145 alias pSDL_SetTextureColorMod = int function(SDL_Texture*,ubyte,ubyte,ubyte); 146 alias pSDL_GetTextureColorMod = int function(SDL_Texture*,ubyte*,ubyte*,ubyte*); 147 alias pSDL_SetTextureAlphaMod = int function(SDL_Texture*,ubyte); 148 alias pSDL_GetTextureAlphaMod = int function(SDL_Texture*,ubyte*); 149 alias pSDL_SetTextureBlendMode = int function(SDL_Texture*,SDL_BlendMode); 150 alias pSDL_GetTextureBlendMode = int function(SDL_Texture*,SDL_BlendMode*); 151 alias pSDL_UpdateTexture = int function(SDL_Texture*,const(SDL_Rect)*,const(void)*,int); 152 alias pSDL_LockTexture = int function(SDL_Texture*,const(SDL_Rect)*,void**,int*); 153 alias pSDL_UnlockTexture = void function(SDL_Texture*); 154 alias pSDL_RenderTargetSupported = SDL_bool function(SDL_Renderer*); 155 alias pSDL_SetRenderTarget = int function(SDL_Renderer*,SDL_Texture*); 156 alias pSDL_GetRenderTarget = SDL_Texture* function(SDL_Renderer*); 157 alias pSDL_RenderSetClipRect = int function(SDL_Renderer*,const(SDL_Rect)*); 158 alias pSDL_RenderGetClipRect = void function(SDL_Renderer* renderer,SDL_Rect*); 159 alias pSDL_RenderSetLogicalSize = int function(SDL_Renderer*,int,int); 160 alias pSDL_RenderGetLogicalSize = void function(SDL_Renderer*,int*,int*); 161 alias pSDL_RenderSetViewport = int function(SDL_Renderer*,const(SDL_Rect)*); 162 alias pSDL_RenderGetViewport = void function(SDL_Renderer*,SDL_Rect*); 163 alias pSDL_RenderSetScale = int function(SDL_Renderer*,float,float); 164 alias pSDL_RenderGetScale = int function(SDL_Renderer*,float*,float*); 165 alias pSDL_SetRenderDrawColor = int function(SDL_Renderer*,ubyte,ubyte,ubyte,ubyte); 166 alias pSDL_GetRenderDrawColor = int function(SDL_Renderer*,ubyte*,ubyte*,ubyte*,ubyte*); 167 alias pSDL_SetRenderDrawBlendMode = int function(SDL_Renderer*,SDL_BlendMode); 168 alias pSDL_GetRenderDrawBlendMode = int function(SDL_Renderer*,SDL_BlendMode*); 169 alias pSDL_RenderClear = int function(SDL_Renderer*); 170 alias pSDL_RenderDrawPoint = int function(SDL_Renderer*,int,int); 171 alias pSDL_RenderDrawPoints = int function(SDL_Renderer*,const(SDL_Point)*,int); 172 alias pSDL_RenderDrawLine = int function(SDL_Renderer*,int,int,int,int); 173 alias pSDL_RenderDrawLines = int function(SDL_Renderer*,const(SDL_Point)*,int); 174 alias pSDL_RenderDrawRect = int function(SDL_Renderer*,const(SDL_Rect)*); 175 alias pSDL_RenderDrawRects = int function(SDL_Renderer*,const(SDL_Rect)*,int); 176 alias pSDL_RenderFillRect = int function(SDL_Renderer*,const(SDL_Rect)*); 177 alias pSDL_RenderFillRects = int function(SDL_Renderer*,const(SDL_Rect)*,int); 178 alias pSDL_RenderCopy = int function(SDL_Renderer*,SDL_Texture*,const(SDL_Rect)*,const(SDL_Rect*)); 179 alias pSDL_RenderCopyEx = int function(SDL_Renderer*,SDL_Texture*,const(SDL_Rect)*,const(SDL_Rect)*,const(double),const(SDL_Point)*,const(SDL_RendererFlip)); 180 alias pSDL_RenderReadPixels = int function(SDL_Renderer*,const(SDL_Rect)*,uint,void*,int); 181 alias pSDL_RenderPresent = void function(SDL_Renderer*); 182 alias pSDL_DestroyTexture = void function(SDL_Texture*); 183 alias pSDL_DestroyRenderer = void function(SDL_Renderer*); 184 alias pSDL_GL_BindTexture = int function(SDL_Texture*,float*,float*); 185 alias pSDL_GL_UnbindTexture = int function(SDL_Texture*); 186 } 187 188 __gshared { 189 pSDL_GetNumRenderDrivers SDL_GetNumRenderDrivers; 190 pSDL_GetRenderDriverInfo SDL_GetRenderDriverInfo; 191 pSDL_CreateWindowAndRenderer SDL_CreateWindowAndRenderer; 192 pSDL_CreateRenderer SDL_CreateRenderer; 193 pSDL_CreateSoftwareRenderer SDL_CreateSoftwareRenderer; 194 pSDL_GetRenderer SDL_GetRenderer; 195 pSDL_GetRendererInfo SDL_GetRendererInfo; 196 pSDL_GetRendererOutputSize SDL_GetRendererOutputSize; 197 pSDL_CreateTexture SDL_CreateTexture; 198 pSDL_CreateTextureFromSurface SDL_CreateTextureFromSurface; 199 pSDL_QueryTexture SDL_QueryTexture; 200 pSDL_SetTextureColorMod SDL_SetTextureColorMod; 201 pSDL_GetTextureColorMod SDL_GetTextureColorMod; 202 pSDL_SetTextureAlphaMod SDL_SetTextureAlphaMod; 203 pSDL_GetTextureAlphaMod SDL_GetTextureAlphaMod; 204 pSDL_SetTextureBlendMode SDL_SetTextureBlendMode; 205 pSDL_GetTextureBlendMode SDL_GetTextureBlendMode; 206 pSDL_UpdateTexture SDL_UpdateTexture; 207 pSDL_LockTexture SDL_LockTexture; 208 pSDL_UnlockTexture SDL_UnlockTexture; 209 pSDL_RenderTargetSupported SDL_RenderTargetSupported; 210 pSDL_SetRenderTarget SDL_SetRenderTarget; 211 pSDL_GetRenderTarget SDL_GetRenderTarget; 212 pSDL_RenderSetClipRect SDL_RenderSetClipRect; 213 pSDL_RenderGetClipRect SDL_RenderGetClipRect; 214 pSDL_RenderSetLogicalSize SDL_RenderSetLogicalSize; 215 pSDL_RenderGetLogicalSize SDL_RenderGetLogicalSize; 216 pSDL_RenderSetViewport SDL_RenderSetViewport; 217 pSDL_RenderGetViewport SDL_RenderGetViewport; 218 pSDL_RenderSetScale SDL_RenderSetScale; 219 pSDL_RenderGetScale SDL_RenderGetScale; 220 pSDL_SetRenderDrawColor SDL_SetRenderDrawColor; 221 pSDL_GetRenderDrawColor SDL_GetRenderDrawColor; 222 pSDL_SetRenderDrawBlendMode SDL_SetRenderDrawBlendMode; 223 pSDL_GetRenderDrawBlendMode SDL_GetRenderDrawBlendMode; 224 pSDL_RenderClear SDL_RenderClear; 225 pSDL_RenderDrawPoint SDL_RenderDrawPoint; 226 pSDL_RenderDrawPoints SDL_RenderDrawPoints; 227 pSDL_RenderDrawLine SDL_RenderDrawLine; 228 pSDL_RenderDrawLines SDL_RenderDrawLines; 229 pSDL_RenderDrawRect SDL_RenderDrawRect; 230 pSDL_RenderDrawRects SDL_RenderDrawRects; 231 pSDL_RenderFillRect SDL_RenderFillRect; 232 pSDL_RenderFillRects SDL_RenderFillRects; 233 pSDL_RenderCopy SDL_RenderCopy; 234 pSDL_RenderCopyEx SDL_RenderCopyEx; 235 pSDL_RenderReadPixels SDL_RenderReadPixels; 236 pSDL_RenderPresent SDL_RenderPresent; 237 pSDL_DestroyTexture SDL_DestroyTexture; 238 pSDL_DestroyRenderer SDL_DestroyRenderer; 239 pSDL_GL_BindTexture SDL_GL_BindTexture; 240 pSDL_GL_UnbindTexture SDL_GL_UnbindTexture; 241 } 242 243 static if(sdlSupport >= SDLSupport.sdl201) { 244 extern(C) @nogc nothrow { 245 alias pSDL_UpdateYUVTexture = int function(SDL_Texture*,const(SDL_Rect)*,const(ubyte)*,int,const(ubyte)*,int,const(ubyte)*,int); 246 } 247 248 __gshared { 249 pSDL_UpdateYUVTexture SDL_UpdateYUVTexture; 250 } 251 } 252 253 static if(sdlSupport >= SDLSupport.sdl204) { 254 extern(C) @nogc nothrow { 255 alias pSDL_RenderIsClipEnabled = SDL_bool function(SDL_Renderer*); 256 } 257 258 __gshared { 259 pSDL_RenderIsClipEnabled SDL_RenderIsClipEnabled; 260 } 261 } 262 263 static if(sdlSupport >= SDLSupport.sdl205) { 264 extern(C) @nogc nothrow { 265 alias pSDL_RenderGetIntegerScale = SDL_bool function(SDL_Renderer*); 266 alias pSDL_RenderSetIntegerScale = int function(SDL_Renderer*,SDL_bool); 267 } 268 269 __gshared { 270 pSDL_RenderGetIntegerScale SDL_RenderGetIntegerScale; 271 pSDL_RenderSetIntegerScale SDL_RenderSetIntegerScale; 272 } 273 } 274 275 static if(sdlSupport >= SDLSupport.sdl208) { 276 extern(C) @nogc nothrow { 277 alias pSDL_RenderGetMetalLayer = void* function(SDL_Renderer*); 278 alias pSDL_RenderGetMetalCommandEncoder = void* function(SDL_Renderer*); 279 } 280 281 __gshared { 282 pSDL_RenderGetMetalLayer SDL_RenderGetMetalLayer; 283 pSDL_RenderGetMetalCommandEncoder SDL_RenderGetMetalCommandEncoder; 284 } 285 } 286 }