1 module bindbc.sdlgfx.dynload; 2 3 import bindbc.sdlgfx.defs; 4 5 version(BindSDLgfx_Static) {} 6 else version = BindSDLgfx_Dynamic; 7 8 version(BindSDLgfx_Dynamic): 9 10 import bindbc.loader; 11 12 private { 13 SharedLib lib; 14 SDLgfxSupport loadedVersion; 15 } 16 17 enum SDLgfxSupport { 18 noLibrary, 19 badLibrary, 20 SDLgfx 21 } 22 23 void unloadSDLgfx() 24 { 25 if(lib != invalidHandle) { 26 lib.unload(); 27 } 28 } 29 30 SDLgfxSupport loadedSDLgfxVersion() { return loadedVersion; } 31 32 bool isSDLgfxLoaded() { return lib != invalidHandle; } 33 34 SDLgfxSupport loadSDLgfx() 35 { 36 version(Windows) { 37 const(char)[][1] libNames = ["SDL2_gfx.dll"]; 38 } 39 else version(OSX) { 40 const(char)[][3] libNames = [ 41 "../Frameworks/SDL2_gfx.framework/SDL2_gfx", 42 "/Library/Frameworks/SDL2_gfx.framework/SDL2_gfx", 43 "/System/Library/Frameworks/SDL2_gfx.framework/SDL2_gfx" 44 ]; 45 } 46 else version(Posix) { 47 const(char)[][1] libNames = [ 48 "libSDL2_gfx.so" 49 ]; 50 } 51 else static assert(0, "bindbc-SDLgfx is not yet supported on this platform"); 52 53 SDLgfxSupport ret; 54 foreach(name; libNames) { 55 ret = loadSDLgfx(name.ptr); 56 if(ret != SDLgfxSupport.noLibrary) break; 57 } 58 return ret; 59 } 60 61 SDLgfxSupport loadSDLgfx(const(char)* libName) 62 { 63 // If the library isn't yet loaded, load it now. 64 if(lib == invalidHandle) { 65 lib = load(libName); 66 if(lib == invalidHandle) { 67 return SDLgfxSupport.noLibrary; 68 } 69 } 70 71 auto errCount = errorCount(); 72 73 lib.bindSymbol(cast(void**)&pixelColor, "pixelColor"); 74 lib.bindSymbol(cast(void**)&pixelRGBA, "pixelRGBA"); 75 lib.bindSymbol(cast(void**)&hlineColor, "hlineColor"); 76 lib.bindSymbol(cast(void**)&hlineRGBA, "hlineRGBA"); 77 lib.bindSymbol(cast(void**)&vlineColor, "vlineColor"); 78 lib.bindSymbol(cast(void**)&vlineRGBA, "vlineRGBA"); 79 lib.bindSymbol(cast(void**)&rectangleColor, "rectangleColor"); 80 lib.bindSymbol(cast(void**)&rectangleRGBA, "rectangleRGBA"); 81 lib.bindSymbol(cast(void**)&roundedRectangleColor, "roundedRectangleColor"); 82 lib.bindSymbol(cast(void**)&roundedRectangleRGBA, "roundedRectangleRGBA"); 83 lib.bindSymbol(cast(void**)&boxColor, "boxColor"); 84 lib.bindSymbol(cast(void**)&boxRGBA, "boxRGBA"); 85 lib.bindSymbol(cast(void**)&roundedBoxColor, "roundedBoxColor"); 86 lib.bindSymbol(cast(void**)&roundedBoxRGBA, "roundedBoxRGBA"); 87 lib.bindSymbol(cast(void**)&lineColor, "lineColor"); 88 lib.bindSymbol(cast(void**)&lineRGBA, "lineRGBA"); 89 lib.bindSymbol(cast(void**)&aalineColor, "aalineColor"); 90 lib.bindSymbol(cast(void**)&aalineRGBA, "aalineRGBA"); 91 lib.bindSymbol(cast(void**)&thickLineColor, "thickLineColor"); 92 lib.bindSymbol(cast(void**)&thickLineRGBA, "thickLineRGBA"); 93 lib.bindSymbol(cast(void**)&circleColor, "circleColor"); 94 lib.bindSymbol(cast(void**)&circleRGBA, "circleRGBA"); 95 lib.bindSymbol(cast(void**)&arcColor, "arcColor"); 96 lib.bindSymbol(cast(void**)&arcRGBA, "arcRGBA"); 97 lib.bindSymbol(cast(void**)&aacircleColor, "aacircleColor"); 98 lib.bindSymbol(cast(void**)&aacircleRGBA, "aacircleRGBA"); 99 lib.bindSymbol(cast(void**)&filledCircleColor, "filledCircleColor"); 100 lib.bindSymbol(cast(void**)&filledCircleRGBA, "filledCircleRGBA"); 101 lib.bindSymbol(cast(void**)&ellipseColor, "ellipseColor"); 102 lib.bindSymbol(cast(void**)&ellipseRGBA, "ellipseRGBA"); 103 lib.bindSymbol(cast(void**)&aaellipseColor, "aaellipseColor"); 104 lib.bindSymbol(cast(void**)&aaellipseRGBA, "aaellipseRGBA"); 105 lib.bindSymbol(cast(void**)&filledEllipseColor, "filledEllipseColor"); 106 lib.bindSymbol(cast(void**)&filledEllipseRGBA, "filledEllipseRGBA"); 107 lib.bindSymbol(cast(void**)&pieColor, "pieColor"); 108 lib.bindSymbol(cast(void**)&pieRGBA, "pieRGBA"); 109 lib.bindSymbol(cast(void**)&filledPieColor, "filledPieColor"); 110 lib.bindSymbol(cast(void**)&filledPieRGBA, "filledPieRGBA"); 111 lib.bindSymbol(cast(void**)&trigonColor, "trigonColor"); 112 lib.bindSymbol(cast(void**)&trigonRGBA, "trigonRGBA"); 113 lib.bindSymbol(cast(void**)&aatrigonColor, "aatrigonColor"); 114 lib.bindSymbol(cast(void**)&aatrigonRGBA, "aatrigonRGBA"); 115 lib.bindSymbol(cast(void**)&filledTrigonColor, "filledTrigonColor"); 116 lib.bindSymbol(cast(void**)&filledTrigonRGBA, "filledTrigonRGBA"); 117 lib.bindSymbol(cast(void**)&polygonColor, "polygonColor"); 118 lib.bindSymbol(cast(void**)&polygonRGBA, "polygonRGBA"); 119 lib.bindSymbol(cast(void**)&aapolygonColor, "aapolygonColor"); 120 lib.bindSymbol(cast(void**)&aapolygonRGBA, "aapolygonRGBA"); 121 lib.bindSymbol(cast(void**)&filledPolygonColor, "filledPolygonColor"); 122 lib.bindSymbol(cast(void**)&filledPolygonRGBA, "filledPolygonRGBA"); 123 lib.bindSymbol(cast(void**)&texturedPolygon, "texturedPolygon"); 124 //lib.bindSymbol(cast(void**)&filledPolygonColorMT, "filledPolygonColorMT"); 125 lib.bindSymbol(cast(void**)&filledPolygonRGBAMT, "filledPolygonRGBAMT"); 126 lib.bindSymbol(cast(void**)&texturedPolygonMT, "texturedPolygonMT"); 127 lib.bindSymbol(cast(void**)&bezierColor, "bezierColor"); 128 lib.bindSymbol(cast(void**)&bezierRGBA, "bezierRGBA"); 129 lib.bindSymbol(cast(void**)&gfxPrimitivesSetFont, "gfxPrimitivesSetFont"); 130 lib.bindSymbol(cast(void**)&gfxPrimitivesSetFontRotation, "gfxPrimitivesSetFontRotation"); 131 lib.bindSymbol(cast(void**)&characterColor, "characterColor"); 132 lib.bindSymbol(cast(void**)&characterRGBA, "characterRGBA"); 133 lib.bindSymbol(cast(void**)&stringColor, "stringColor"); 134 lib.bindSymbol(cast(void**)&stringRGBA, "stringRGBA"); 135 //lib.bindSymbol(cast(void**)&SDL_gfxBlitRGBA, "SDL_gfxBlitRGBA"); 136 //lib.bindSymbol(cast(void**)&SDL_gfxSetAlpha, "SDL_gfxSetAlpha"); 137 //lib.bindSymbol(cast(void**)&SDL_gfxMultiplyAlpha, "SDL_gfxMultiplyAlpha"); 138 lib.bindSymbol(cast(void**)&SDL_imageFilterMMXdetect, "SDL_imageFilterMMXdetect"); 139 lib.bindSymbol(cast(void**)&SDL_imageFilterMMXoff, "SDL_imageFilterMMXoff"); 140 lib.bindSymbol(cast(void**)&SDL_imageFilterMMXon, "SDL_imageFilterMMXon"); 141 lib.bindSymbol(cast(void**)&SDL_imageFilterAdd, "SDL_imageFilterAdd"); 142 lib.bindSymbol(cast(void**)&SDL_imageFilterMean, "SDL_imageFilterMean"); 143 lib.bindSymbol(cast(void**)&SDL_imageFilterSub, "SDL_imageFilterSub"); 144 lib.bindSymbol(cast(void**)&SDL_imageFilterAbsDiff, "SDL_imageFilterAbsDiff"); 145 lib.bindSymbol(cast(void**)&SDL_imageFilterMult, "SDL_imageFilterMult"); 146 lib.bindSymbol(cast(void**)&SDL_imageFilterMultNor, "SDL_imageFilterMultNor"); 147 lib.bindSymbol(cast(void**)&SDL_imageFilterMultDivby2, "SDL_imageFilterMultDivby2"); 148 lib.bindSymbol(cast(void**)&SDL_imageFilterMultDivby4, "SDL_imageFilterMultDivby4"); 149 lib.bindSymbol(cast(void**)&SDL_imageFilterBitAnd, "SDL_imageFilterBitAnd"); 150 lib.bindSymbol(cast(void**)&SDL_imageFilterBitOr, "SDL_imageFilterBitOr"); 151 lib.bindSymbol(cast(void**)&SDL_imageFilterDiv, "SDL_imageFilterDiv"); 152 lib.bindSymbol(cast(void**)&SDL_imageFilterBitNegation, "SDL_imageFilterBitNegation"); 153 lib.bindSymbol(cast(void**)&SDL_imageFilterAddByte, "SDL_imageFilterAddByte"); 154 lib.bindSymbol(cast(void**)&SDL_imageFilterAddUint, "SDL_imageFilterAddUint"); 155 lib.bindSymbol(cast(void**)&SDL_imageFilterAddByteToHalf, "SDL_imageFilterAddByteToHalf"); 156 lib.bindSymbol(cast(void**)&SDL_imageFilterSubByte, "SDL_imageFilterSubByte"); 157 lib.bindSymbol(cast(void**)&SDL_imageFilterSubUint, "SDL_imageFilterSubUint"); 158 lib.bindSymbol(cast(void**)&SDL_imageFilterShiftRight, "SDL_imageFilterShiftRight"); 159 lib.bindSymbol(cast(void**)&SDL_imageFilterShiftRightUint, "SDL_imageFilterShiftRightUint"); 160 lib.bindSymbol(cast(void**)&SDL_imageFilterMultByByte, "SDL_imageFilterMultByByte"); 161 lib.bindSymbol(cast(void**)&SDL_imageFilterShiftRightAndMultByByte, "SDL_imageFilterShiftRightAndMultByByte"); 162 lib.bindSymbol(cast(void**)&SDL_imageFilterShiftLeftByte, "SDL_imageFilterShiftLeftByte"); 163 lib.bindSymbol(cast(void**)&SDL_imageFilterShiftLeftUint, "SDL_imageFilterShiftLeftUint"); 164 lib.bindSymbol(cast(void**)&SDL_imageFilterShiftLeft, "SDL_imageFilterShiftLeft"); 165 lib.bindSymbol(cast(void**)&SDL_imageFilterBinarizeUsingThreshold, "SDL_imageFilterBinarizeUsingThreshold"); 166 lib.bindSymbol(cast(void**)&SDL_imageFilterClipToRange, "SDL_imageFilterClipToRange"); 167 lib.bindSymbol(cast(void**)&SDL_imageFilterNormalizeLinear, "SDL_imageFilterNormalizeLinear"); 168 lib.bindSymbol(cast(void**)&SDL_imageFilterConvolveKernel3x3Divide, "SDL_imageFilterConvolveKernel3x3Divide"); 169 lib.bindSymbol(cast(void**)&SDL_imageFilterConvolveKernel5x5Divide, "SDL_imageFilterConvolveKernel5x5Divide"); 170 lib.bindSymbol(cast(void**)&SDL_imageFilterConvolveKernel7x7Divide, "SDL_imageFilterConvolveKernel7x7Divide"); 171 lib.bindSymbol(cast(void**)&SDL_imageFilterConvolveKernel9x9Divide, "SDL_imageFilterConvolveKernel9x9Divide"); 172 lib.bindSymbol(cast(void**)&SDL_imageFilterConvolveKernel3x3ShiftRight, "SDL_imageFilterConvolveKernel3x3ShiftRight"); 173 lib.bindSymbol(cast(void**)&SDL_imageFilterConvolveKernel5x5ShiftRight, "SDL_imageFilterConvolveKernel5x5ShiftRight"); 174 lib.bindSymbol(cast(void**)&SDL_imageFilterConvolveKernel7x7ShiftRight, "SDL_imageFilterConvolveKernel7x7ShiftRight"); 175 lib.bindSymbol(cast(void**)&SDL_imageFilterConvolveKernel9x9ShiftRight, "SDL_imageFilterConvolveKernel9x9ShiftRight"); 176 lib.bindSymbol(cast(void**)&SDL_imageFilterSobelX, "SDL_imageFilterSobelX"); 177 lib.bindSymbol(cast(void**)&SDL_imageFilterSobelXShiftRight, "SDL_imageFilterSobelXShiftRight"); 178 lib.bindSymbol(cast(void**)&SDL_imageFilterAlignStack, "SDL_imageFilterAlignStack"); 179 lib.bindSymbol(cast(void**)&SDL_imageFilterRestoreStack, "SDL_imageFilterRestoreStack"); 180 lib.bindSymbol(cast(void**)&rotozoomSurface, "rotozoomSurface"); 181 lib.bindSymbol(cast(void**)&rotozoomSurfaceXY, "rotozoomSurfaceXY"); 182 lib.bindSymbol(cast(void**)&rotozoomSurfaceSize, "rotozoomSurfaceSize"); 183 lib.bindSymbol(cast(void**)&rotozoomSurfaceSizeXY, "rotozoomSurfaceSizeXY"); 184 lib.bindSymbol(cast(void**)&zoomSurface, "zoomSurface"); 185 lib.bindSymbol(cast(void**)&zoomSurfaceSize, "zoomSurfaceSize"); 186 lib.bindSymbol(cast(void**)&shrinkSurface, "shrinkSurface"); 187 //lib.bindSymbol(cast(void**)&rotateSurface90Degree, "rotateSurface90Degree"); 188 189 if(errorCount() != errCount) loadedVersion = SDLgfxSupport.badLibrary; 190 else loadedVersion = SDLgfxSupport.SDLgfx; 191 192 return loadedVersion; 193 }