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;