Created
September 6, 2015 18:57
-
-
Save hhrhhr/00e722624fbeee3a5a20 to your computer and use it in GitHub Desktop.
SDL2: Don't try to re-implement D3D11 pieces which are already part of mingw-w64; Workaround a gcc compatibility issue
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- src/render/direct3d11/SDL_render_d3d11.c.orig 2015-03-21 20:17:57.816864185 +0100 | |
+++ src/render/direct3d11/SDL_render_d3d11.c 2015-03-21 22:21:30.123045735 +0100 | |
@@ -46,6 +46,9 @@ | |
#endif /* __WINRT__ */ | |
+#define SDL_DEBUG_STRINGIFY_ARG(str) #str | |
+#define SDL_DEBUG(str) SDL_DEBUG_STRINGIFY_ARG(__FUNCTION__) str | |
+ | |
#define SAFE_RELEASE(X) if ((X)) { IUnknown_Release(SDL_static_cast(IUnknown*, X)); X = NULL; } | |
@@ -910,7 +925,7 @@ | |
blendDesc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL; | |
result = ID3D11Device_CreateBlendState(data->d3dDevice, &blendDesc, blendStateOutput); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11Device1::CreateBlendState", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ID3D11Device1::CreateBlendState"), result); | |
return result; | |
} | |
@@ -992,14 +1007,14 @@ | |
result = CreateDXGIFactoryFunc(&IID_IDXGIFactory2, &data->dxgiFactory); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", CreateDXGIFactory", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", CreateDXGIFactory"), result); | |
goto done; | |
} | |
/* FIXME: Should we use the default adapter? */ | |
result = IDXGIFactory2_EnumAdapters(data->dxgiFactory, 0, &data->dxgiAdapter); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", D3D11CreateDevice", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", D3D11CreateDevice"), result); | |
goto done; | |
} | |
@@ -1028,25 +1043,25 @@ | |
&d3dContext /* Returns the device immediate context. */ | |
); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", D3D11CreateDevice", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", D3D11CreateDevice"), result); | |
goto done; | |
} | |
result = ID3D11Device_QueryInterface(d3dDevice, &IID_ID3D11Device1, &data->d3dDevice); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11Device to ID3D11Device1", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ID3D11Device to ID3D11Device1"), result); | |
goto done; | |
} | |
result = ID3D11DeviceContext_QueryInterface(d3dContext, &IID_ID3D11DeviceContext1, &data->d3dContext); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11DeviceContext to ID3D11DeviceContext1", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ID3D11DeviceContext to ID3D11DeviceContext1"), result); | |
goto done; | |
} | |
result = ID3D11Device_QueryInterface(d3dDevice, &IID_IDXGIDevice1, &dxgiDevice); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11Device to IDXGIDevice1", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ID3D11Device to IDXGIDevice1"), result); | |
goto done; | |
} | |
@@ -1055,7 +1070,7 @@ | |
*/ | |
result = IDXGIDevice1_SetMaximumFrameLatency(dxgiDevice, 1); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", IDXGIDevice1::SetMaximumFrameLatency", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", IDXGIDevice1::SetMaximumFrameLatency"), result); | |
goto done; | |
} | |
@@ -1084,7 +1099,7 @@ | |
break; | |
default: | |
- SDL_SetError(__FUNCTION__ ", Unexpected feature level: %d", data->featureLevel); | |
+ SDL_SetError("%s, Unexpected feature level: %d", __FUNCTION__, data->featureLevel); | |
result = E_FAIL; | |
goto done; | |
} | |
@@ -1097,7 +1112,7 @@ | |
&data->vertexShader | |
); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11Device1::CreateVertexShader", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ID3D11Device1::CreateVertexShader"), result); | |
goto done; | |
} | |
@@ -1110,7 +1125,7 @@ | |
&data->inputLayout | |
); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11Device1::CreateInputLayout", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ID3D11Device1::CreateInputLayout"), result); | |
goto done; | |
} | |
@@ -1122,7 +1137,7 @@ | |
&data->colorPixelShader | |
); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11Device1::CreatePixelShader ['color' shader]", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ID3D11Device1::CreatePixelShader ['color' shader]"), result); | |
goto done; | |
} | |
@@ -1133,7 +1148,7 @@ | |
&data->texturePixelShader | |
); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11Device1::CreatePixelShader ['textures' shader]", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ID3D11Device1::CreatePixelShader ['textures' shader]"), result); | |
goto done; | |
} | |
@@ -1144,7 +1159,7 @@ | |
&data->yuvPixelShader | |
); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11Device1::CreatePixelShader ['yuv' shader]", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ID3D11Device1::CreatePixelShader ['yuv' shader]"), result); | |
goto done; | |
} | |
@@ -1159,7 +1174,7 @@ | |
&data->vertexShaderConstants | |
); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11Device1::CreateBuffer [vertex shader constants]", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ID3D11Device1::CreateBuffer [vertex shader constants]"), result); | |
goto done; | |
} | |
@@ -1179,7 +1194,7 @@ | |
&data->nearestPixelSampler | |
); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11Device1::CreateSamplerState [nearest-pixel filter]", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ID3D11Device1::CreateSamplerState [nearest-pixel filter]"), result); | |
goto done; | |
} | |
@@ -1189,7 +1204,7 @@ | |
&data->linearSampler | |
); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11Device1::CreateSamplerState [linear filter]", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ID3D11Device1::CreateSamplerState [linear filter]"), result); | |
goto done; | |
} | |
@@ -1207,14 +1222,14 @@ | |
rasterDesc.SlopeScaledDepthBias = 0.0f; | |
result = ID3D11Device_CreateRasterizerState(data->d3dDevice, &rasterDesc, &data->mainRasterizer); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11Device1::CreateRasterizerState [main rasterizer]", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ID3D11Device1::CreateRasterizerState [main rasterizer]"), result); | |
goto done; | |
} | |
rasterDesc.ScissorEnable = TRUE; | |
result = ID3D11Device_CreateRasterizerState(data->d3dDevice, &rasterDesc, &data->clippedRasterizer); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11Device1::CreateRasterizerState [clipped rasterizer]", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ID3D11Device1::CreateRasterizerState [clipped rasterizer]"), result); | |
goto done; | |
} | |
@@ -1374,7 +1389,7 @@ | |
&data->swapChain | |
); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", IDXGIFactory2::CreateSwapChainForCoreWindow", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", IDXGIFactory2::CreateSwapChainForCoreWindow"), result); | |
goto done; | |
} | |
} else if (usingXAML) { | |
@@ -1384,18 +1399,18 @@ | |
NULL, | |
&data->swapChain); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", IDXGIFactory2::CreateSwapChainForComposition", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", IDXGIFactory2::CreateSwapChainForComposition"), result); | |
goto done; | |
} | |
#if WINAPI_FAMILY == WINAPI_FAMILY_APP | |
result = ISwapChainBackgroundPanelNative_SetSwapChain(WINRT_GlobalSwapChainBackgroundPanelNative, (IDXGISwapChain *) data->swapChain); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ISwapChainBackgroundPanelNative::SetSwapChain", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ISwapChainBackgroundPanelNative::SetSwapChain"), result); | |
goto done; | |
} | |
#else | |
- SDL_SetError(__FUNCTION__ ", XAML support is not yet available for Windows Phone"); | |
+ SDL_SetError(SDL_DEBUG(", XAML support is not yet available for Windows Phone")); | |
result = E_FAIL; | |
goto done; | |
#endif | |
@@ -1414,7 +1429,7 @@ | |
&data->swapChain | |
); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", IDXGIFactory2::CreateSwapChainForHwnd", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", IDXGIFactory2::CreateSwapChainForHwnd"), result); | |
goto done; | |
} | |
#else | |
@@ -1464,7 +1479,7 @@ | |
0 | |
); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", IDXGISwapChain::ResizeBuffers", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", IDXGISwapChain::ResizeBuffers"), result); | |
goto done; | |
} | |
#endif | |
@@ -1485,7 +1500,7 @@ | |
if (data->swapEffect == DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL) { | |
result = IDXGISwapChain1_SetRotation(data->swapChain, data->rotation); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", IDXGISwapChain1::SetRotation", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", IDXGISwapChain1::SetRotation"), result); | |
goto done; | |
} | |
} | |
@@ -1497,7 +1512,7 @@ | |
&backBuffer | |
); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", IDXGISwapChain::GetBuffer [back-buffer]", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", IDXGISwapChain::GetBuffer [back-buffer]"), result); | |
goto done; | |
} | |
@@ -1508,7 +1523,7 @@ | |
&data->mainRenderTargetView | |
); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11Device::CreateRenderTargetView", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ID3D11Device::CreateRenderTargetView"), result); | |
goto done; | |
} | |
@@ -1628,7 +1643,7 @@ | |
); | |
if (FAILED(result)) { | |
D3D11_DestroyTexture(renderer, texture); | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11Device1::CreateTexture2D", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ID3D11Device1::CreateTexture2D"), result); | |
return -1; | |
} | |
@@ -1646,7 +1661,7 @@ | |
); | |
if (FAILED(result)) { | |
D3D11_DestroyTexture(renderer, texture); | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11Device1::CreateTexture2D", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ID3D11Device1::CreateTexture2D"), result); | |
return -1; | |
} | |
@@ -1657,7 +1672,7 @@ | |
); | |
if (FAILED(result)) { | |
D3D11_DestroyTexture(renderer, texture); | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11Device1::CreateTexture2D", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ID3D11Device1::CreateTexture2D"), result); | |
return -1; | |
} | |
} | |
@@ -1673,7 +1688,7 @@ | |
); | |
if (FAILED(result)) { | |
D3D11_DestroyTexture(renderer, texture); | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ "ID3D11Device1::CreateShaderResourceView", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG("ID3D11Device1::CreateShaderResourceView"), result); | |
return -1; | |
} | |
@@ -1685,7 +1700,7 @@ | |
); | |
if (FAILED(result)) { | |
D3D11_DestroyTexture(renderer, texture); | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ "ID3D11Device1::CreateShaderResourceView", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG("ID3D11Device1::CreateShaderResourceView"), result); | |
return -1; | |
} | |
result = ID3D11Device_CreateShaderResourceView(rendererData->d3dDevice, | |
@@ -1695,7 +1710,7 @@ | |
); | |
if (FAILED(result)) { | |
D3D11_DestroyTexture(renderer, texture); | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ "ID3D11Device1::CreateShaderResourceView", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG("ID3D11Device1::CreateShaderResourceView"), result); | |
return -1; | |
} | |
} | |
@@ -1712,7 +1727,7 @@ | |
&textureData->mainTextureRenderTargetView); | |
if (FAILED(result)) { | |
D3D11_DestroyTexture(renderer, texture); | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11Device1::CreateRenderTargetView", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ID3D11Device1::CreateRenderTargetView"), result); | |
return -1; | |
} | |
} | |
@@ -1768,7 +1783,7 @@ | |
NULL, | |
&stagingTexture); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11Device1::CreateTexture2D [create staging texture]", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ID3D11Device1::CreateTexture2D [create staging texture]"), result); | |
return -1; | |
} | |
@@ -1781,7 +1796,7 @@ | |
&textureMemory | |
); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11DeviceContext1::Map [map staging texture]", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ID3D11DeviceContext1::Map [map staging texture]"), result); | |
SAFE_RELEASE(stagingTexture); | |
return -1; | |
} | |
@@ -1943,7 +1958,7 @@ | |
NULL, | |
&textureData->stagingTexture); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11Device1::CreateTexture2D [create staging texture]", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ID3D11Device1::CreateTexture2D [create staging texture]"), result); | |
return -1; | |
} | |
@@ -1956,7 +1971,7 @@ | |
&textureMemory | |
); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11DeviceContext1::Map [map staging texture]", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ID3D11DeviceContext1::Map [map staging texture]"), result); | |
SAFE_RELEASE(textureData->stagingTexture); | |
return -1; | |
} | |
@@ -2238,7 +2253,7 @@ | |
&mappedResource | |
); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11DeviceContext1::Map [vertex buffer]", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ID3D11DeviceContext1::Map [vertex buffer]"), result); | |
return -1; | |
} | |
SDL_memcpy(mappedResource.pData, vertexData, dataSizeInBytes); | |
@@ -2262,7 +2277,7 @@ | |
&rendererData->vertexBuffer | |
); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11Device1::CreateBuffer [vertex buffer]", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ID3D11Device1::CreateBuffer [vertex buffer]"), result); | |
return -1; | |
} | |
@@ -2732,7 +2747,7 @@ | |
&backBuffer | |
); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", IDXGISwapChain1::GetBuffer [get back buffer]", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", IDXGISwapChain1::GetBuffer [get back buffer]"), result); | |
goto done; | |
} | |
@@ -2749,7 +2764,7 @@ | |
NULL, | |
&stagingTexture); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11Device1::CreateTexture2D [create staging texture]", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ID3D11Device1::CreateTexture2D [create staging texture]"), result); | |
goto done; | |
} | |
@@ -2781,7 +2796,7 @@ | |
0, | |
&textureMemory); | |
if (FAILED(result)) { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11DeviceContext1::Map [map staging texture]", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", ID3D11DeviceContext1::Map [map staging texture]"), result); | |
goto done; | |
} | |
@@ -2800,7 +2815,7 @@ | |
* Get the error message, and attach some extra data to it. | |
*/ | |
char errorMessage[1024]; | |
- SDL_snprintf(errorMessage, sizeof(errorMessage), __FUNCTION__ ", Convert Pixels failed: %s", SDL_GetError()); | |
+ SDL_snprintf(errorMessage, sizeof(errorMessage), "%s, Convert Pixels failed: %s", __FUNCTION__, SDL_GetError()); | |
SDL_SetError(errorMessage); | |
goto done; | |
} | |
@@ -2869,7 +2884,7 @@ | |
/* We probably went through a fullscreen <-> windowed transition */ | |
D3D11_CreateWindowSizeDependentResources(renderer); | |
} else { | |
- WIN_SetErrorFromHRESULT(__FUNCTION__ ", IDXGISwapChain::Present", result); | |
+ WIN_SetErrorFromHRESULT(SDL_DEBUG(", IDXGISwapChain::Present"), result); | |
} | |
} | |
} | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- src/render/direct3d11/SDL_render_d3d11.c.orig 2015-03-21 20:17:57.816864185 +0100 | |
+++ src/render/direct3d11/SDL_render_d3d11.c 2015-03-21 22:16:38.285858676 +0100 | |
@@ -132,12 +132,24 @@ | |
/* Defined here so we don't have to include uuid.lib */ | |
+#ifndef __IDXGIFactory2_INTERFACE_DEFINED__ | |
static const GUID IID_IDXGIFactory2 = { 0x50c83a1c, 0xe072, 0x4c48, { 0x87, 0xb0, 0x36, 0x30, 0xfa, 0x36, 0xa6, 0xd0 } }; | |
+#endif | |
+#ifndef __IDXGIDevice1_INTERFACE_DEFINED__ | |
static const GUID IID_IDXGIDevice1 = { 0x77db970f, 0x6276, 0x48ba, { 0xba, 0x28, 0x07, 0x01, 0x43, 0xb4, 0x39, 0x2c } }; | |
+#endif | |
+#ifndef __ID3D11Texture2D_INTERFACE_DEFINED__ | |
static const GUID IID_ID3D11Texture2D = { 0x6f15aaf2, 0xd208, 0x4e89, { 0x9a, 0xb4, 0x48, 0x95, 0x35, 0xd3, 0x4f, 0x9c } }; | |
+#endif | |
+#ifndef __ID3D11Device1_INTERFACE_DEFINED__ | |
static const GUID IID_ID3D11Device1 = { 0xa04bfb29, 0x08ef, 0x43d6, { 0xa4, 0x9c, 0xa9, 0xbd, 0xbd, 0xcb, 0xe6, 0x86 } }; | |
+#endif | |
+#ifndef __ID3D11DeviceContext1_INTERFACE_DEFINED__ | |
static const GUID IID_ID3D11DeviceContext1 = { 0xbb2c6faa, 0xb5fb, 0x4082, { 0x8e, 0x6b, 0x38, 0x8b, 0x8c, 0xfa, 0x90, 0xe1 } }; | |
+#endif | |
+#ifndef __ID3D11Debug_INTERFACE_DEFINED__ | |
static const GUID IID_ID3D11Debug = { 0x79cf2233, 0x7536, 0x4948, { 0x9d, 0x36, 0x1e, 0x46, 0x92, 0xdc, 0x57, 0x60 } }; | |
+#endif | |
/* Direct3D 11.x shaders | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
source — http://pkgs.fedoraproject.org/cgit/mingw-SDL2.git/tree/