From 4b5c76eeee8950588dd89574e47ec32a6c8208b3 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Wed, 9 Feb 2011 10:31:12 -0800 Subject: [PATCH] Fixed compiling on Windows Added an untested shader for YV12 textures --- VisualC/SDL/SDL_VS2008.vcproj | 8 +++++ VisualC/SDL/SDL_VS2010.vcxproj | 2 ++ src/render/opengl/SDL_shaders_gl.c | 57 +++++++++++++++++++++++++++--- src/render/opengl/SDL_shaders_gl.h | 2 +- 4 files changed, 63 insertions(+), 6 deletions(-) mode change 100644 => 100755 src/render/opengl/SDL_shaders_gl.c 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;