diff --git a/VisualC/SDL/SDL_VS2008.vcproj b/VisualC/SDL/SDL_VS2008.vcproj
index 98084683f..53fa5eedc 100644
--- a/VisualC/SDL/SDL_VS2008.vcproj
+++ b/VisualC/SDL/SDL_VS2008.vcproj
@@ -1054,6 +1054,14 @@
RelativePath="..\..\src\file\SDL_rwops.c"
>
+
+
+
+
diff --git a/VisualC/SDL/SDL_VS2010.vcxproj b/VisualC/SDL/SDL_VS2010.vcxproj
index c964c4d5e..b180e9048 100644
--- a/VisualC/SDL/SDL_VS2010.vcxproj
+++ b/VisualC/SDL/SDL_VS2010.vcxproj
@@ -285,6 +285,7 @@ echo #define SDL_REVISION "hg-0:baadf00d" >"$(ProjectDir)\..\..\include\SDL_r
+
@@ -373,6 +374,7 @@ echo #define SDL_REVISION "hg-0:baadf00d" >"$(ProjectDir)\..\..\include\SDL_r
+
diff --git a/src/render/opengl/SDL_shaders_gl.c b/src/render/opengl/SDL_shaders_gl.c
old mode 100644
new mode 100755
index 708b090ef..4fc569400
--- a/src/render/opengl/SDL_shaders_gl.c
+++ b/src/render/opengl/SDL_shaders_gl.c
@@ -112,6 +112,58 @@ static const char *shader_source[NUM_SHADERS][2] =
"void main()\n"
"{\n"
" gl_FragColor = texture2D(tex0, v_texCoord) * v_color;\n"
+"}"
+ },
+
+ /* SHADER_YV12 */
+ {
+ /* vertex shader */
+"varying vec4 v_color;\n"
+"varying vec2 v_texCoord;\n"
+"\n"
+"void main()\n"
+"{\n"
+" gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n"
+" v_color = gl_Color;\n"
+" v_texCoord = vec2(gl_MultiTexCoord0);\n"
+"}",
+ /* fragment shader */
+"varying vec4 v_color;\n"
+"varying vec2 v_texCoord;\n"
+"uniform sampler2D tex0; // Y \n"
+"uniform sampler2D tex1; // U \n"
+"uniform sampler2D tex2; // V \n"
+"\n"
+"// YUV offset \n"
+"const vec3 offset = vec3(-0.0625, -0.5, -0.5);\n"
+"\n"
+"// RGB coefficients \n"
+"const vec3 Rcoeff = vec3(1.164, 0.000, 1.596);\n"
+"const vec3 Gcoeff = vec3(1.164, -0.391, -0.813);\n"
+"const vec3 Bcoeff = vec3(1.164, 2.018, 0.000);\n"
+"\n"
+"void main()\n"
+"{\n"
+" vec2 tcoord;\n"
+" vec3 yuv, rgb;\n"
+"\n"
+" // Get the Y value \n"
+" tcoord = v_texCoord;\n"
+" yuv.x = texture2D(tex0, tcoord).r;\n"
+"\n"
+" // Get the U and V values \n"
+" tcoord *= 0.5;\n"
+" yuv.y = texture2D(tex1, tcoord).r;\n"
+" yuv.z = texture2D(tex2, tcoord).r;\n"
+"\n"
+" // Do the color transform \n"
+" yuv += offset;\n"
+" rgb.r = dot(yuv, Rcoeff);\n"
+" rgb.g = dot(yuv, Gcoeff);\n"
+" rgb.b = dot(yuv, Bcoeff);\n"
+"\n"
+" // That was easy. :) \n"
+" gl_FragColor = vec4(rgb, 1.0) * v_color;\n"
"}"
},
};
@@ -209,10 +261,6 @@ CompileShaderProgram(GL_ShaderContext *ctx, int index, GL_ShaderData *data)
static void
DestroyShaderProgram(GL_ShaderContext *ctx, GL_ShaderData *data)
{
- if (index == SHADER_NONE) {
- return;
- }
-
ctx->glDeleteObjectARB(data->vert_shader);
ctx->glDeleteObjectARB(data->frag_shader);
ctx->glDeleteObjectARB(data->program);
@@ -281,7 +329,6 @@ GL_CreateShaderContext()
/* Compile all the shaders */
for (i = 0; i < NUM_SHADERS; ++i) {
if (!CompileShaderProgram(ctx, i, &ctx->shaders[i])) {
-fprintf(stderr, "Unable to compile shader!\n");
GL_DestroyShaderContext(ctx);
return NULL;
}
diff --git a/src/render/opengl/SDL_shaders_gl.h b/src/render/opengl/SDL_shaders_gl.h
index dfb821ba2..de2ed3d72 100644
--- a/src/render/opengl/SDL_shaders_gl.h
+++ b/src/render/opengl/SDL_shaders_gl.h
@@ -27,7 +27,7 @@ typedef enum {
SHADER_NONE,
SHADER_SOLID,
SHADER_RGB,
- //SHADER_YV12,
+ SHADER_YV12,
NUM_SHADERS
} GL_Shader;