diff --git a/VisualC-WinPhone/SDL/SDL_VS2012-WinPhone.vcxproj b/VisualC-WinPhone/SDL/SDL_VS2012-WinPhone.vcxproj index c8c7e55dd..25884c9c5 100644 --- a/VisualC-WinPhone/SDL/SDL_VS2012-WinPhone.vcxproj +++ b/VisualC-WinPhone/SDL/SDL_VS2012-WinPhone.vcxproj @@ -382,7 +382,7 @@ Pixel Pixel - + Pixel Pixel Pixel diff --git a/VisualC-WinPhone/SDL/SDL_VS2012-WinPhone.vcxproj.filters b/VisualC-WinPhone/SDL/SDL_VS2012-WinPhone.vcxproj.filters index 3471b4635..f9f0227dd 100644 --- a/VisualC-WinPhone/SDL/SDL_VS2012-WinPhone.vcxproj.filters +++ b/VisualC-WinPhone/SDL/SDL_VS2012-WinPhone.vcxproj.filters @@ -592,14 +592,14 @@ - - GPU Shaders - GPU Shaders GPU Shaders + + GPU Shaders + \ No newline at end of file diff --git a/VisualC-WinRT/SDL/SDL_VS2012-WinRT.vcxproj b/VisualC-WinRT/SDL/SDL_VS2012-WinRT.vcxproj index 7c869f41b..0d462941e 100644 --- a/VisualC-WinRT/SDL/SDL_VS2012-WinRT.vcxproj +++ b/VisualC-WinRT/SDL/SDL_VS2012-WinRT.vcxproj @@ -293,7 +293,7 @@ 4.0_level_9_1 4.0_level_9_1 - + Pixel Pixel Pixel @@ -304,8 +304,6 @@ 4.0_level_9_1 4.0_level_9_1 4.0_level_9_1 - 4.0_level_9_1 - 4.0_level_9_1 Vertex diff --git a/VisualC-WinRT/SDL/SDL_VS2012-WinRT.vcxproj.filters b/VisualC-WinRT/SDL/SDL_VS2012-WinRT.vcxproj.filters index e8a704b70..16ca97f6d 100644 --- a/VisualC-WinRT/SDL/SDL_VS2012-WinRT.vcxproj.filters +++ b/VisualC-WinRT/SDL/SDL_VS2012-WinRT.vcxproj.filters @@ -1,15 +1,15 @@  - - GPU Shaders - GPU Shaders GPU Shaders + + GPU Shaders + diff --git a/src/render/direct3d11/SDL_D3D11_PixelShader_TextureCopy.hlsl b/src/render/direct3d11/SDL_D3D11_PixelShader_TextureColored.hlsl similarity index 75% rename from src/render/direct3d11/SDL_D3D11_PixelShader_TextureCopy.hlsl rename to src/render/direct3d11/SDL_D3D11_PixelShader_TextureColored.hlsl index a48ba426c..503b4fdcb 100644 --- a/src/render/direct3d11/SDL_D3D11_PixelShader_TextureCopy.hlsl +++ b/src/render/direct3d11/SDL_D3D11_PixelShader_TextureColored.hlsl @@ -10,5 +10,5 @@ struct PixelShaderInput float4 main(PixelShaderInput input) : SV_TARGET { - return theTexture.Sample(theSampler, input.tex); + return theTexture.Sample(theSampler, input.tex) * input.color; } diff --git a/src/render/direct3d11/SDL_render_d3d11.cpp b/src/render/direct3d11/SDL_render_d3d11.cpp index 69205bd7d..271dbeaea 100644 --- a/src/render/direct3d11/SDL_render_d3d11.cpp +++ b/src/render/direct3d11/SDL_render_d3d11.cpp @@ -436,7 +436,7 @@ D3D11_CreateDeviceResources(SDL_Renderer * renderer) // // Load in SDL's pixel shaders // - result = D3D11_LoadPixelShader(renderer, L"SDL_D3D11_PixelShader_TextureCopy.cso", &data->texturePixelShader); + result = D3D11_LoadPixelShader(renderer, L"SDL_D3D11_PixelShader_TextureColored.cso", &data->texturePixelShader); if (FAILED(result)) { // D3D11_LoadPixelShader will have aleady set the SDL error return result; @@ -1460,12 +1460,25 @@ D3D11_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, float maxu = (float) (srcrect->x + srcrect->w) / texture->w; float minv = (float) srcrect->y / texture->h; float maxv = (float) (srcrect->y + srcrect->h) / texture->h; + + float r = 1.0f; + float g = 1.0f; + float b = 1.0f; + float a = 1.0f; + if (texture->modMode & SDL_TEXTUREMODULATE_COLOR) { + r = (float)(texture->r / 255.0f); + g = (float)(texture->g / 255.0f); + b = (float)(texture->b / 255.0f); + } + if (texture->modMode & SDL_TEXTUREMODULATE_ALPHA) { + a = (float)(texture->a / 255.0f); + } VertexPositionColor vertices[] = { - {XMFLOAT3(dstrect->x, dstrect->y, 0.0f), XMFLOAT2(minu, minv), XMFLOAT4(1.0f, 1.0f, 1.0f, 1.0f)}, - {XMFLOAT3(dstrect->x, dstrect->y + dstrect->h, 0.0f), XMFLOAT2(minu, maxv), XMFLOAT4(1.0f, 1.0f, 1.0f, 1.0f)}, - {XMFLOAT3(dstrect->x + dstrect->w, dstrect->y, 0.0f), XMFLOAT2(maxu, minv), XMFLOAT4(1.0f, 1.0f, 1.0f, 1.0f)}, - {XMFLOAT3(dstrect->x + dstrect->w, dstrect->y + dstrect->h, 0.0f), XMFLOAT2(maxu, maxv), XMFLOAT4(1.0f, 1.0f, 1.0f, 1.0f)}, + {XMFLOAT3(dstrect->x, dstrect->y, 0.0f), XMFLOAT2(minu, minv), XMFLOAT4(r, g, b, a)}, + {XMFLOAT3(dstrect->x, dstrect->y + dstrect->h, 0.0f), XMFLOAT2(minu, maxv), XMFLOAT4(r, g, b, a)}, + {XMFLOAT3(dstrect->x + dstrect->w, dstrect->y, 0.0f), XMFLOAT2(maxu, minv), XMFLOAT4(r, g, b, a)}, + {XMFLOAT3(dstrect->x + dstrect->w, dstrect->y + dstrect->h, 0.0f), XMFLOAT2(maxu, maxv), XMFLOAT4(r, g, b, a)}, }; if (D3D11_UpdateVertexBuffer(renderer, vertices, sizeof(vertices)) != 0) { return -1; @@ -1498,6 +1511,19 @@ D3D11_RenderCopyEx(SDL_Renderer * renderer, SDL_Texture * texture, float minv = (float) srcrect->y / texture->h; float maxv = (float) (srcrect->y + srcrect->h) / texture->h; + float r = 1.0f; + float g = 1.0f; + float b = 1.0f; + float a = 1.0f; + if (texture->modMode & SDL_TEXTUREMODULATE_COLOR) { + r = (float)(texture->r / 255.0f); + g = (float)(texture->g / 255.0f); + b = (float)(texture->b / 255.0f); + } + if (texture->modMode & SDL_TEXTUREMODULATE_ALPHA) { + a = (float)(texture->a / 255.0f); + } + if (flip & SDL_FLIP_HORIZONTAL) { float tmp = maxu; maxu = minu; @@ -1523,10 +1549,10 @@ D3D11_RenderCopyEx(SDL_Renderer * renderer, SDL_Texture * texture, const float maxy = dstrect->h - center->y; VertexPositionColor vertices[] = { - {XMFLOAT3(minx, miny, 0.0f), XMFLOAT2(minu, minv), XMFLOAT4(1.0f, 1.0f, 1.0f, 1.0f)}, - {XMFLOAT3(minx, maxy, 0.0f), XMFLOAT2(minu, maxv), XMFLOAT4(1.0f, 1.0f, 1.0f, 1.0f)}, - {XMFLOAT3(maxx, miny, 0.0f), XMFLOAT2(maxu, minv), XMFLOAT4(1.0f, 1.0f, 1.0f, 1.0f)}, - {XMFLOAT3(maxx, maxy, 0.0f), XMFLOAT2(maxu, maxv), XMFLOAT4(1.0f, 1.0f, 1.0f, 1.0f)}, + {XMFLOAT3(minx, miny, 0.0f), XMFLOAT2(minu, minv), XMFLOAT4(r, g, b, a)}, + {XMFLOAT3(minx, maxy, 0.0f), XMFLOAT2(minu, maxv), XMFLOAT4(r, g, b, a)}, + {XMFLOAT3(maxx, miny, 0.0f), XMFLOAT2(maxu, minv), XMFLOAT4(r, g, b, a)}, + {XMFLOAT3(maxx, maxy, 0.0f), XMFLOAT2(maxu, maxv), XMFLOAT4(r, g, b, a)}, }; if (D3D11_UpdateVertexBuffer(renderer, vertices, sizeof(vertices)) != 0) { return -1;