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; 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 mixin(expandEnum!SDL_RendererFlags); 23 24 struct SDL_RendererInfo { 25 const(char)* name; 26 SDL_RendererFlags flags; 27 uint num_texture_formats; 28 uint[16] texture_formats; 29 int max_texture_width; 30 int max_texture_height; 31 } 32 33 static if(sdlSupport >= SDLSupport.sdl2012) { 34 enum SDL_ScaleMode { 35 SDL_ScaleModeNearest, 36 SDL_ScaleModeLinear, 37 SDL_ScaleModeBest, 38 } 39 mixin(expandEnum!SDL_ScaleMode); 40 } 41 42 enum SDL_TextureAccess { 43 SDL_TEXTUREACCESS_STATIC, 44 SDL_TEXTUREACCESS_STREAMING, 45 SDL_TEXTUREACCESS_TARGET, 46 } 47 mixin(expandEnum!SDL_TextureAccess); 48 49 enum SDL_TextureModulate { 50 SDL_TEXTUREMODULATE_NONE = 0x00000000, 51 SDL_TEXTUREMODULATE_COLOR = 0x00000001, 52 SDL_TEXTUREMODULATE_ALPHA = 0x00000002 53 } 54 mixin(expandEnum!SDL_TextureModulate); 55 56 enum SDL_RendererFlip { 57 SDL_FLIP_NONE = 0x00000000, 58 SDL_FLIP_HORIZONTAL = 0x00000001, 59 SDL_FLIP_VERTICAL = 0x00000002, 60 } 61 mixin(expandEnum!SDL_RendererFlip); 62 63 struct SDL_Renderer; 64 struct SDL_Texture; 65 66 static if(staticBinding) { 67 extern(C) @nogc nothrow { 68 int SDL_GetNumRenderDrivers(); 69 int SDL_GetRenderDriverInfo(int,SDL_RendererInfo*); 70 int SDL_CreateWindowAndRenderer(int,int,uint,SDL_Window**,SDL_Renderer**); 71 SDL_Renderer* SDL_CreateRenderer(SDL_Window*,int,SDL_RendererFlags); 72 SDL_Renderer* SDL_CreateSoftwareRenderer(SDL_Surface*); 73 SDL_Renderer* SDL_GetRenderer(SDL_Window*); 74 int SDL_GetRendererInfo(SDL_Renderer*,SDL_RendererInfo*); 75 int SDL_GetRendererOutputSize(SDL_Renderer*,int*,int*); 76 SDL_Texture* SDL_CreateTexture(SDL_Renderer*,uint,SDL_TextureAccess,int,int); 77 SDL_Texture* SDL_CreateTextureFromSurface(SDL_Renderer*,SDL_Surface*); 78 int SDL_QueryTexture(SDL_Texture*,uint*,int*,int*,int*); 79 int SDL_SetTextureColorMod(SDL_Texture*,ubyte,ubyte,ubyte); 80 int SDL_GetTextureColorMod(SDL_Texture*,ubyte*,ubyte*,ubyte*); 81 int SDL_SetTextureAlphaMod(SDL_Texture*,ubyte); 82 int SDL_GetTextureAlphaMod(SDL_Texture*,ubyte*); 83 int SDL_SetTextureBlendMode(SDL_Texture*,SDL_BlendMode); 84 int SDL_GetTextureBlendMode(SDL_Texture*,SDL_BlendMode*); 85 int SDL_UpdateTexture(SDL_Texture*,const(SDL_Rect)*,const(void)*,int); 86 int SDL_LockTexture(SDL_Texture*,const(SDL_Rect)*,void**,int*); 87 void SDL_UnlockTexture(SDL_Texture*); 88 SDL_bool SDL_RenderTargetSupported(SDL_Renderer*); 89 int SDL_SetRenderTarget(SDL_Renderer*,SDL_Texture*); 90 SDL_Texture* SDL_GetRenderTarget(SDL_Renderer*); 91 int SDL_RenderSetClipRect(SDL_Renderer*,const(SDL_Rect)*); 92 void SDL_RenderGetClipRect(SDL_Renderer* renderer,SDL_Rect*); 93 int SDL_RenderSetLogicalSize(SDL_Renderer*,int,int); 94 void SDL_RenderGetLogicalSize(SDL_Renderer*,int*,int*); 95 int SDL_RenderSetViewport(SDL_Renderer*,const(SDL_Rect)*); 96 void SDL_RenderGetViewport(SDL_Renderer*,SDL_Rect*); 97 int SDL_RenderSetScale(SDL_Renderer*,float,float); 98 int SDL_RenderGetScale(SDL_Renderer*,float*,float*); 99 int SDL_SetRenderDrawColor(SDL_Renderer*,ubyte,ubyte,ubyte,ubyte); 100 int SDL_GetRenderDrawColor(SDL_Renderer*,ubyte*,ubyte*,ubyte*,ubyte*); 101 int SDL_SetRenderDrawBlendMode(SDL_Renderer*,SDL_BlendMode); 102 int SDL_GetRenderDrawBlendMode(SDL_Renderer*,SDL_BlendMode*); 103 int SDL_RenderClear(SDL_Renderer*); 104 int SDL_RenderDrawPoint(SDL_Renderer*,int,int); 105 int SDL_RenderDrawPoints(SDL_Renderer*,const(SDL_Point)*,int); 106 int SDL_RenderDrawLine(SDL_Renderer*,int,int,int,int); 107 int SDL_RenderDrawLines(SDL_Renderer*,const(SDL_Point)*,int); 108 int SDL_RenderDrawRect(SDL_Renderer*,const(SDL_Rect)*); 109 int SDL_RenderDrawRects(SDL_Renderer*,const(SDL_Rect)*,int); 110 int SDL_RenderFillRect(SDL_Renderer*,const(SDL_Rect)*); 111 int SDL_RenderFillRects(SDL_Renderer*,const(SDL_Rect)*,int); 112 int SDL_RenderCopy(SDL_Renderer*,SDL_Texture*,const(SDL_Rect)*,const(SDL_Rect*)); 113 int SDL_RenderCopyEx(SDL_Renderer*,SDL_Texture*,const(SDL_Rect)*,const(SDL_Rect)*,const(double),const(SDL_Point)*,const(SDL_RendererFlip)); 114 int SDL_RenderReadPixels(SDL_Renderer*,const(SDL_Rect)*,uint,void*,int); 115 void SDL_RenderPresent(SDL_Renderer*); 116 void SDL_DestroyTexture(SDL_Texture*); 117 void SDL_DestroyRenderer(SDL_Renderer*); 118 int SDL_GL_BindTexture(SDL_Texture*,float*,float*); 119 int SDL_GL_UnbindTexture(SDL_Texture*); 120 121 static if(sdlSupport >= SDLSupport.sdl201) { 122 int SDL_UpdateYUVTexture(SDL_Texture*,const(SDL_Rect)*,const(ubyte)*,int,const(ubyte)*,int,const(ubyte)*,int); 123 } 124 static if(sdlSupport >= SDLSupport.sdl204) { 125 SDL_bool SDL_RenderIsClipEnabled(SDL_Renderer*); 126 } 127 static if(sdlSupport >= SDLSupport.sdl205) { 128 SDL_bool SDL_RenderGetIntegerScale(SDL_Renderer*); 129 int SDL_RenderSetIntegerScale(SDL_Renderer*,SDL_bool); 130 } 131 static if(sdlSupport >= SDLSupport.sdl208) { 132 void* SDL_RenderGetMetalLayer(SDL_Renderer*); 133 void* SDL_RenderGetMetalCommandEncoder(SDL_Renderer*); 134 } 135 static if(sdlSupport >= SDLSupport.sdl2010) { 136 int SDL_RenderDrawPointF(SDL_Renderer*,float,float); 137 int SDL_RenderDrawPointsF(SDL_Renderer*,const(SDL_FPoint)*,int); 138 int SDL_RenderDrawLineF(SDL_Renderer*,float,float,float,float); 139 int SDL_RenderDrawLinesF(SDL_Renderer*,const(SDL_FPoint)*,int); 140 int SDL_RenderDrawRectF(SDL_Renderer*,const(SDL_FRect)*); 141 int SDL_RenderDrawRectsF(SDL_Renderer*,const(SDL_FRect)*,int); 142 int SDL_RenderFillRectF(SDL_Renderer*,const(SDL_FRect)*); 143 int SDL_RenderFillRectsF(SDL_Renderer*,const(SDL_FRect)*,int); 144 int SDL_RenderCopyF(SDL_Renderer*,SDL_Texture*,const(SDL_FRect)*,const(SDL_FRect)*); 145 int SDL_RenderCopyExF(SDL_Renderer*,SDL_Texture*,const(SDL_FRect)*,const(SDL_FRect)*,const(double),const(SDL_FPoint)*,const(SDL_RendererFlip)); 146 int SDL_RenderFlush(SDL_Renderer*); 147 } 148 static if(sdlSupport >= SDLSupport.sdl2012) { 149 int SDL_SetTextureScaleMode(SDL_Texture*,SDL_ScaleMode); 150 int SDL_GetTextureScaleMode(SDL_Texture*,SDL_ScaleMode*); 151 int SDL_LockTextureToSurface(SDL_Texture*,const(SDL_Rect)*,SDL_Surface**); 152 } 153 } 154 } 155 else { 156 extern(C) @nogc nothrow { 157 alias pSDL_GetNumRenderDrivers = int function(); 158 alias pSDL_GetRenderDriverInfo = int function(int,SDL_RendererInfo*); 159 alias pSDL_CreateWindowAndRenderer = int function(int,int,uint,SDL_Window**,SDL_Renderer**); 160 alias pSDL_CreateRenderer = SDL_Renderer* function(SDL_Window*,int,SDL_RendererFlags); 161 alias pSDL_CreateSoftwareRenderer = SDL_Renderer* function(SDL_Surface*); 162 alias pSDL_GetRenderer = SDL_Renderer* function(SDL_Window*); 163 alias pSDL_GetRendererInfo = int function(SDL_Renderer*,SDL_RendererInfo*); 164 alias pSDL_GetRendererOutputSize = int function(SDL_Renderer*,int*,int*); 165 alias pSDL_CreateTexture = SDL_Texture* function(SDL_Renderer*,uint,SDL_TextureAccess,int,int); 166 alias pSDL_CreateTextureFromSurface = SDL_Texture* function(SDL_Renderer*,SDL_Surface*); 167 alias pSDL_QueryTexture = int function(SDL_Texture*,uint*,int*,int*,int*); 168 alias pSDL_SetTextureColorMod = int function(SDL_Texture*,ubyte,ubyte,ubyte); 169 alias pSDL_GetTextureColorMod = int function(SDL_Texture*,ubyte*,ubyte*,ubyte*); 170 alias pSDL_SetTextureAlphaMod = int function(SDL_Texture*,ubyte); 171 alias pSDL_GetTextureAlphaMod = int function(SDL_Texture*,ubyte*); 172 alias pSDL_SetTextureBlendMode = int function(SDL_Texture*,SDL_BlendMode); 173 alias pSDL_GetTextureBlendMode = int function(SDL_Texture*,SDL_BlendMode*); 174 alias pSDL_UpdateTexture = int function(SDL_Texture*,const(SDL_Rect)*,const(void)*,int); 175 alias pSDL_LockTexture = int function(SDL_Texture*,const(SDL_Rect)*,void**,int*); 176 alias pSDL_UnlockTexture = void function(SDL_Texture*); 177 alias pSDL_RenderTargetSupported = SDL_bool function(SDL_Renderer*); 178 alias pSDL_SetRenderTarget = int function(SDL_Renderer*,SDL_Texture*); 179 alias pSDL_GetRenderTarget = SDL_Texture* function(SDL_Renderer*); 180 alias pSDL_RenderSetClipRect = int function(SDL_Renderer*,const(SDL_Rect)*); 181 alias pSDL_RenderGetClipRect = void function(SDL_Renderer* renderer,SDL_Rect*); 182 alias pSDL_RenderSetLogicalSize = int function(SDL_Renderer*,int,int); 183 alias pSDL_RenderGetLogicalSize = void function(SDL_Renderer*,int*,int*); 184 alias pSDL_RenderSetViewport = int function(SDL_Renderer*,const(SDL_Rect)*); 185 alias pSDL_RenderGetViewport = void function(SDL_Renderer*,SDL_Rect*); 186 alias pSDL_RenderSetScale = int function(SDL_Renderer*,float,float); 187 alias pSDL_RenderGetScale = int function(SDL_Renderer*,float*,float*); 188 alias pSDL_SetRenderDrawColor = int function(SDL_Renderer*,ubyte,ubyte,ubyte,ubyte); 189 alias pSDL_GetRenderDrawColor = int function(SDL_Renderer*,ubyte*,ubyte*,ubyte*,ubyte*); 190 alias pSDL_SetRenderDrawBlendMode = int function(SDL_Renderer*,SDL_BlendMode); 191 alias pSDL_GetRenderDrawBlendMode = int function(SDL_Renderer*,SDL_BlendMode*); 192 alias pSDL_RenderClear = int function(SDL_Renderer*); 193 alias pSDL_RenderDrawPoint = int function(SDL_Renderer*,int,int); 194 alias pSDL_RenderDrawPoints = int function(SDL_Renderer*,const(SDL_Point)*,int); 195 alias pSDL_RenderDrawLine = int function(SDL_Renderer*,int,int,int,int); 196 alias pSDL_RenderDrawLines = int function(SDL_Renderer*,const(SDL_Point)*,int); 197 alias pSDL_RenderDrawRect = int function(SDL_Renderer*,const(SDL_Rect)*); 198 alias pSDL_RenderDrawRects = int function(SDL_Renderer*,const(SDL_Rect)*,int); 199 alias pSDL_RenderFillRect = int function(SDL_Renderer*,const(SDL_Rect)*); 200 alias pSDL_RenderFillRects = int function(SDL_Renderer*,const(SDL_Rect)*,int); 201 alias pSDL_RenderCopy = int function(SDL_Renderer*,SDL_Texture*,const(SDL_Rect)*,const(SDL_Rect*)); 202 alias pSDL_RenderCopyEx = int function(SDL_Renderer*,SDL_Texture*,const(SDL_Rect)*,const(SDL_Rect)*,const(double),const(SDL_Point)*,const(SDL_RendererFlip)); 203 alias pSDL_RenderReadPixels = int function(SDL_Renderer*,const(SDL_Rect)*,uint,void*,int); 204 alias pSDL_RenderPresent = void function(SDL_Renderer*); 205 alias pSDL_DestroyTexture = void function(SDL_Texture*); 206 alias pSDL_DestroyRenderer = void function(SDL_Renderer*); 207 alias pSDL_GL_BindTexture = int function(SDL_Texture*,float*,float*); 208 alias pSDL_GL_UnbindTexture = int function(SDL_Texture*); 209 } 210 211 __gshared { 212 pSDL_GetNumRenderDrivers SDL_GetNumRenderDrivers; 213 pSDL_GetRenderDriverInfo SDL_GetRenderDriverInfo; 214 pSDL_CreateWindowAndRenderer SDL_CreateWindowAndRenderer; 215 pSDL_CreateRenderer SDL_CreateRenderer; 216 pSDL_CreateSoftwareRenderer SDL_CreateSoftwareRenderer; 217 pSDL_GetRenderer SDL_GetRenderer; 218 pSDL_GetRendererInfo SDL_GetRendererInfo; 219 pSDL_GetRendererOutputSize SDL_GetRendererOutputSize; 220 pSDL_CreateTexture SDL_CreateTexture; 221 pSDL_CreateTextureFromSurface SDL_CreateTextureFromSurface; 222 pSDL_QueryTexture SDL_QueryTexture; 223 pSDL_SetTextureColorMod SDL_SetTextureColorMod; 224 pSDL_GetTextureColorMod SDL_GetTextureColorMod; 225 pSDL_SetTextureAlphaMod SDL_SetTextureAlphaMod; 226 pSDL_GetTextureAlphaMod SDL_GetTextureAlphaMod; 227 pSDL_SetTextureBlendMode SDL_SetTextureBlendMode; 228 pSDL_GetTextureBlendMode SDL_GetTextureBlendMode; 229 pSDL_UpdateTexture SDL_UpdateTexture; 230 pSDL_LockTexture SDL_LockTexture; 231 pSDL_UnlockTexture SDL_UnlockTexture; 232 pSDL_RenderTargetSupported SDL_RenderTargetSupported; 233 pSDL_SetRenderTarget SDL_SetRenderTarget; 234 pSDL_GetRenderTarget SDL_GetRenderTarget; 235 pSDL_RenderSetClipRect SDL_RenderSetClipRect; 236 pSDL_RenderGetClipRect SDL_RenderGetClipRect; 237 pSDL_RenderSetLogicalSize SDL_RenderSetLogicalSize; 238 pSDL_RenderGetLogicalSize SDL_RenderGetLogicalSize; 239 pSDL_RenderSetViewport SDL_RenderSetViewport; 240 pSDL_RenderGetViewport SDL_RenderGetViewport; 241 pSDL_RenderSetScale SDL_RenderSetScale; 242 pSDL_RenderGetScale SDL_RenderGetScale; 243 pSDL_SetRenderDrawColor SDL_SetRenderDrawColor; 244 pSDL_GetRenderDrawColor SDL_GetRenderDrawColor; 245 pSDL_SetRenderDrawBlendMode SDL_SetRenderDrawBlendMode; 246 pSDL_GetRenderDrawBlendMode SDL_GetRenderDrawBlendMode; 247 pSDL_RenderClear SDL_RenderClear; 248 pSDL_RenderDrawPoint SDL_RenderDrawPoint; 249 pSDL_RenderDrawPoints SDL_RenderDrawPoints; 250 pSDL_RenderDrawLine SDL_RenderDrawLine; 251 pSDL_RenderDrawLines SDL_RenderDrawLines; 252 pSDL_RenderDrawRect SDL_RenderDrawRect; 253 pSDL_RenderDrawRects SDL_RenderDrawRects; 254 pSDL_RenderFillRect SDL_RenderFillRect; 255 pSDL_RenderFillRects SDL_RenderFillRects; 256 pSDL_RenderCopy SDL_RenderCopy; 257 pSDL_RenderCopyEx SDL_RenderCopyEx; 258 pSDL_RenderReadPixels SDL_RenderReadPixels; 259 pSDL_RenderPresent SDL_RenderPresent; 260 pSDL_DestroyTexture SDL_DestroyTexture; 261 pSDL_DestroyRenderer SDL_DestroyRenderer; 262 pSDL_GL_BindTexture SDL_GL_BindTexture; 263 pSDL_GL_UnbindTexture SDL_GL_UnbindTexture; 264 } 265 static if(sdlSupport >= SDLSupport.sdl201) { 266 extern(C) @nogc nothrow { 267 alias pSDL_UpdateYUVTexture = int function(SDL_Texture*,const(SDL_Rect)*,const(ubyte)*,int,const(ubyte)*,int,const(ubyte)*,int); 268 } 269 __gshared { 270 pSDL_UpdateYUVTexture SDL_UpdateYUVTexture; 271 } 272 } 273 static if(sdlSupport >= SDLSupport.sdl204) { 274 extern(C) @nogc nothrow { 275 alias pSDL_RenderIsClipEnabled = SDL_bool function(SDL_Renderer*); 276 } 277 __gshared { 278 pSDL_RenderIsClipEnabled SDL_RenderIsClipEnabled; 279 } 280 } 281 static if(sdlSupport >= SDLSupport.sdl205) { 282 extern(C) @nogc nothrow { 283 alias pSDL_RenderGetIntegerScale = SDL_bool function(SDL_Renderer*); 284 alias pSDL_RenderSetIntegerScale = int function(SDL_Renderer*,SDL_bool); 285 } 286 __gshared { 287 pSDL_RenderGetIntegerScale SDL_RenderGetIntegerScale; 288 pSDL_RenderSetIntegerScale SDL_RenderSetIntegerScale; 289 } 290 } 291 static if(sdlSupport >= SDLSupport.sdl208) { 292 extern(C) @nogc nothrow { 293 alias pSDL_RenderGetMetalLayer = void* function(SDL_Renderer*); 294 alias pSDL_RenderGetMetalCommandEncoder = void* function(SDL_Renderer*); 295 } 296 __gshared { 297 pSDL_RenderGetMetalLayer SDL_RenderGetMetalLayer; 298 pSDL_RenderGetMetalCommandEncoder SDL_RenderGetMetalCommandEncoder; 299 } 300 } 301 static if(sdlSupport >= SDLSupport.sdl2010) { 302 extern(C) @nogc nothrow { 303 alias pSDL_RenderDrawPointF = int function(SDL_Renderer*,float,float); 304 alias pSDL_RenderDrawPointsF = int function(SDL_Renderer*,const(SDL_FPoint)*,int); 305 alias pSDL_RenderDrawLineF = int function(SDL_Renderer*,float,float,float,float); 306 alias pSDL_RenderDrawLinesF = int function(SDL_Renderer*,const(SDL_FPoint)*,int); 307 alias pSDL_RenderDrawRectF = int function(SDL_Renderer*,const(SDL_FRect)*); 308 alias pSDL_RenderDrawRectsF = int function(SDL_Renderer*,const(SDL_FRect)*,int); 309 alias pSDL_RenderFillRectF = int function(SDL_Renderer*,const(SDL_FRect)*); 310 alias pSDL_RenderFillRectsF = int function(SDL_Renderer*,const(SDL_FRect)*,int); 311 alias pSDL_RenderCopyF = int function(SDL_Renderer*,SDL_Texture*,const(SDL_FRect)*,const(SDL_FRect)*); 312 alias pSDL_RenderCopyExF = int function(SDL_Renderer*,SDL_Texture*,const(SDL_FRect)*,const(SDL_FRect)*,const(double),const(SDL_FPoint)*,const(SDL_RendererFlip)); 313 alias pSDL_RenderFlush = int function(SDL_Renderer*); 314 } 315 __gshared { 316 pSDL_RenderDrawPointF SDL_RenderDrawPointF; 317 pSDL_RenderDrawPointsF SDL_RenderDrawPointsF; 318 pSDL_RenderDrawLineF SDL_RenderDrawLineF; 319 pSDL_RenderDrawLinesF SDL_RenderDrawLinesF; 320 pSDL_RenderDrawRectF SDL_RenderDrawRectF; 321 pSDL_RenderDrawRectsF SDL_RenderDrawRectsF; 322 pSDL_RenderFillRectF SDL_RenderFillRectF; 323 pSDL_RenderFillRectsF SDL_RenderFillRectsF; 324 pSDL_RenderCopyF SDL_RenderCopyF; 325 pSDL_RenderCopyExF SDL_RenderCopyExF; 326 pSDL_RenderFlush SDL_RenderFlush; 327 } 328 } 329 static if(sdlSupport >= SDLSupport.sdl2012) { 330 extern(C) @nogc nothrow { 331 alias pSDL_SetTextureScaleMode = int function(SDL_Texture*,SDL_ScaleMode); 332 alias pSDL_GetTextureScaleMode = int function(SDL_Texture*,SDL_ScaleMode*); 333 alias pSDL_LockTextureToSurface = int function(SDL_Texture*,const(SDL_Rect)*,SDL_Surface**); 334 } 335 __gshared { 336 pSDL_SetTextureScaleMode SDL_SetTextureScaleMode; 337 pSDL_GetTextureScaleMode SDL_GetTextureScaleMode; 338 pSDL_LockTextureToSurface SDL_LockTextureToSurface; 339 } 340 } 341 }