Mercurial > sdl-ios-xcode
annotate src/render/opengl/SDL_shaders_gl.c @ 5275:7aba0406c273
Frank Zago to sdl
The following patch fixes some of the bitrot for the Nintendo DS port.
The support is still basic at the moment, but it allows to run the "general"
test under the current head of tree (parent: 5269:11bd1585efb5 tip).
Most of the patch is mine, but I integrated a couple changes that John
Magnotti posted on Feb 1st.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sat, 12 Feb 2011 11:36:56 -0800 |
parents | b530ef003506 |
children |
rev | line source |
---|---|
5233
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1 /* |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2 SDL - Simple DirectMedia Layer |
5267 | 3 Copyright (C) 1997-2011 Sam Lantinga |
5233
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
4 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
5 This library is free software; you can redistribute it and/or |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
7 License as published by the Free Software Foundation; either |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
9 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
10 This library is distributed in the hope that it will be useful, |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
13 Lesser General Public License for more details. |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
14 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
16 License along with this library; if not, write to the Free Software |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
18 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
19 Sam Lantinga |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
20 slouken@libsdl.org |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
21 */ |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
22 #include "SDL_config.h" |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
23 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
24 #if SDL_VIDEO_RENDER_OGL && !SDL_RENDER_DISABLED |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
25 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
26 #include "SDL_stdinc.h" |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
27 #include "SDL_log.h" |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
28 #include "SDL_opengl.h" |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
29 #include "SDL_video.h" |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
30 #include "SDL_shaders_gl.h" |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
31 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
32 /* OpenGL shader implementation */ |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
33 |
5236
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
34 /*#define DEBUG_SHADERS*/ |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
35 |
5233
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
36 typedef struct |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
37 { |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
38 GLenum program; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
39 GLenum vert_shader; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
40 GLenum frag_shader; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
41 } GL_ShaderData; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
42 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
43 struct GL_ShaderContext |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
44 { |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
45 GLenum (*glGetError)(void); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
46 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
47 PFNGLATTACHOBJECTARBPROC glAttachObjectARB; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
48 PFNGLCOMPILESHADERARBPROC glCompileShaderARB; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
49 PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
50 PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
51 PFNGLDELETEOBJECTARBPROC glDeleteObjectARB; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
52 PFNGLGETINFOLOGARBPROC glGetInfoLogARB; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
53 PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
54 PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
55 PFNGLLINKPROGRAMARBPROC glLinkProgramARB; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
56 PFNGLSHADERSOURCEARBPROC glShaderSourceARB; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
57 PFNGLUNIFORM1IARBPROC glUniform1iARB; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
58 PFNGLUNIFORM1FARBPROC glUniform1fARB; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
59 PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
60 |
5235
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
61 SDL_bool GL_ARB_texture_rectangle_supported; |
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
62 |
5233
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
63 GL_Shader current_shader; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
64 GL_ShaderData shaders[NUM_SHADERS]; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
65 }; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
66 |
5235
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
67 /* |
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
68 * NOTE: Always use sampler2D, etc here. We'll #define them to the |
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
69 * texture_rectangle versions if we choose to use that extension. |
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
70 */ |
5233
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
71 static const char *shader_source[NUM_SHADERS][2] = |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
72 { |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
73 /* SHADER_NONE */ |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
74 { NULL, NULL }, |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
75 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
76 /* SHADER_SOLID */ |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
77 { |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
78 /* vertex shader */ |
5236
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
79 "varying vec4 v_color;\n" |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
80 "\n" |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
81 "void main()\n" |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
82 "{\n" |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
83 " gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n" |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
84 " v_color = gl_Color;\n" |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
85 "}", |
5233
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
86 /* fragment shader */ |
5236
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
87 "varying vec4 v_color;\n" |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
88 "\n" |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
89 "void main()\n" |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
90 "{\n" |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
91 " gl_FragColor = v_color;\n" |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
92 "}" |
5233
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
93 }, |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
94 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
95 /* SHADER_RGB */ |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
96 { |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
97 /* vertex shader */ |
5236
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
98 "varying vec4 v_color;\n" |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
99 "varying vec2 v_texCoord;\n" |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
100 "\n" |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
101 "void main()\n" |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
102 "{\n" |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
103 " gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n" |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
104 " v_color = gl_Color;\n" |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
105 " v_texCoord = vec2(gl_MultiTexCoord0);\n" |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
106 "}", |
5233
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
107 /* fragment shader */ |
5236
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
108 "varying vec4 v_color;\n" |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
109 "varying vec2 v_texCoord;\n" |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
110 "uniform sampler2D tex0;\n" |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
111 "\n" |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
112 "void main()\n" |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
113 "{\n" |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
114 " gl_FragColor = texture2D(tex0, v_texCoord) * v_color;\n" |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
115 "}" |
5233
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
116 }, |
5243
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
117 |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
118 /* SHADER_YV12 */ |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
119 { |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
120 /* vertex shader */ |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
121 "varying vec4 v_color;\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
122 "varying vec2 v_texCoord;\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
123 "\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
124 "void main()\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
125 "{\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
126 " gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
127 " v_color = gl_Color;\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
128 " v_texCoord = vec2(gl_MultiTexCoord0);\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
129 "}", |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
130 /* fragment shader */ |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
131 "varying vec4 v_color;\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
132 "varying vec2 v_texCoord;\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
133 "uniform sampler2D tex0; // Y \n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
134 "uniform sampler2D tex1; // U \n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
135 "uniform sampler2D tex2; // V \n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
136 "\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
137 "// YUV offset \n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
138 "const vec3 offset = vec3(-0.0625, -0.5, -0.5);\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
139 "\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
140 "// RGB coefficients \n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
141 "const vec3 Rcoeff = vec3(1.164, 0.000, 1.596);\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
142 "const vec3 Gcoeff = vec3(1.164, -0.391, -0.813);\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
143 "const vec3 Bcoeff = vec3(1.164, 2.018, 0.000);\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
144 "\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
145 "void main()\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
146 "{\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
147 " vec2 tcoord;\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
148 " vec3 yuv, rgb;\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
149 "\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
150 " // Get the Y value \n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
151 " tcoord = v_texCoord;\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
152 " yuv.x = texture2D(tex0, tcoord).r;\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
153 "\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
154 " // Get the U and V values \n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
155 " tcoord *= 0.5;\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
156 " yuv.y = texture2D(tex1, tcoord).r;\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
157 " yuv.z = texture2D(tex2, tcoord).r;\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
158 "\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
159 " // Do the color transform \n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
160 " yuv += offset;\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
161 " rgb.r = dot(yuv, Rcoeff);\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
162 " rgb.g = dot(yuv, Gcoeff);\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
163 " rgb.b = dot(yuv, Bcoeff);\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
164 "\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
165 " // That was easy. :) \n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
166 " gl_FragColor = vec4(rgb, 1.0) * v_color;\n" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
167 "}" |
c0e9d3897a85
Fixed compiling on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
5242
diff
changeset
|
168 }, |
5233
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
169 }; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
170 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
171 static SDL_bool |
5235
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
172 CompileShader(GL_ShaderContext *ctx, GLenum shader, const char *defines, const char *source) |
5233
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
173 { |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
174 GLint status; |
5235
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
175 const char *sources[2]; |
5233
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
176 |
5235
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
177 sources[0] = defines; |
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
178 sources[1] = source; |
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
179 |
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
180 ctx->glShaderSourceARB(shader, SDL_arraysize(sources), sources, NULL); |
5233
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
181 ctx->glCompileShaderARB(shader); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
182 ctx->glGetObjectParameterivARB(shader, GL_OBJECT_COMPILE_STATUS_ARB, &status); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
183 if (status == 0) { |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
184 GLint length; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
185 char *info; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
186 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
187 ctx->glGetObjectParameterivARB(shader, GL_OBJECT_INFO_LOG_LENGTH_ARB, &length); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
188 info = SDL_stack_alloc(char, length+1); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
189 ctx->glGetInfoLogARB(shader, length, NULL, info); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
190 SDL_LogError(SDL_LOG_CATEGORY_RENDER, |
5236
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
191 "Failed to compile shader:\n%s%s\n%s", defines, source, info); |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
192 #ifdef DEBUG_SHADERS |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
193 fprintf(stderr, |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
194 "Failed to compile shader:\n%s%s\n%s", defines, source, info); |
e82908c86c9c
Made the shaders easier to debug when they don't compile
Sam Lantinga <slouken@libsdl.org>
parents:
5235
diff
changeset
|
195 #endif |
5233
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
196 SDL_stack_free(info); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
197 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
198 return SDL_FALSE; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
199 } else { |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
200 return SDL_TRUE; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
201 } |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
202 } |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
203 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
204 static SDL_bool |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
205 CompileShaderProgram(GL_ShaderContext *ctx, int index, GL_ShaderData *data) |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
206 { |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
207 const int num_tmus_bound = 4; |
5235
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
208 const char *vert_defines = ""; |
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
209 const char *frag_defines = ""; |
5233
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
210 int i; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
211 GLint location; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
212 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
213 if (index == SHADER_NONE) { |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
214 return SDL_TRUE; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
215 } |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
216 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
217 ctx->glGetError(); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
218 |
5235
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
219 /* Make sure we use the correct sampler type for our texture type */ |
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
220 if (ctx->GL_ARB_texture_rectangle_supported) { |
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
221 frag_defines = |
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
222 "#define sampler2D sampler2DRect\n" |
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
223 "#define texture2D texture2DRect\n"; |
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
224 } |
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
225 |
5233
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
226 /* Create one program object to rule them all */ |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
227 data->program = ctx->glCreateProgramObjectARB(); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
228 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
229 /* Create the vertex shader */ |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
230 data->vert_shader = ctx->glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB); |
5235
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
231 if (!CompileShader(ctx, data->vert_shader, vert_defines, shader_source[index][0])) { |
5233
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
232 return SDL_FALSE; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
233 } |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
234 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
235 /* Create the fragment shader */ |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
236 data->frag_shader = ctx->glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB); |
5235
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
237 if (!CompileShader(ctx, data->frag_shader, frag_defines, shader_source[index][1])) { |
5233
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
238 return SDL_FALSE; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
239 } |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
240 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
241 /* ... and in the darkness bind them */ |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
242 ctx->glAttachObjectARB(data->program, data->vert_shader); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
243 ctx->glAttachObjectARB(data->program, data->frag_shader); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
244 ctx->glLinkProgramARB(data->program); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
245 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
246 /* Set up some uniform variables */ |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
247 ctx->glUseProgramObjectARB(data->program); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
248 for (i = 0; i < num_tmus_bound; ++i) { |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
249 char tex_name[5]; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
250 SDL_snprintf(tex_name, SDL_arraysize(tex_name), "tex%d", i); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
251 location = ctx->glGetUniformLocationARB(data->program, tex_name); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
252 if (location >= 0) { |
5234
c015d3e63631
Fixed setting the texture unit, still doesn't work.
Sam Lantinga <slouken@libsdl.org>
parents:
5233
diff
changeset
|
253 ctx->glUniform1iARB(location, i); |
5233
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
254 } |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
255 } |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
256 ctx->glUseProgramObjectARB(0); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
257 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
258 return (ctx->glGetError() == GL_NO_ERROR); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
259 } |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
260 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
261 static void |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
262 DestroyShaderProgram(GL_ShaderContext *ctx, GL_ShaderData *data) |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
263 { |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
264 ctx->glDeleteObjectARB(data->vert_shader); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
265 ctx->glDeleteObjectARB(data->frag_shader); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
266 ctx->glDeleteObjectARB(data->program); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
267 } |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
268 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
269 GL_ShaderContext * |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
270 GL_CreateShaderContext() |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
271 { |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
272 GL_ShaderContext *ctx; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
273 SDL_bool shaders_supported; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
274 int i; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
275 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
276 ctx = (GL_ShaderContext *)SDL_calloc(1, sizeof(*ctx)); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
277 if (!ctx) { |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
278 return NULL; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
279 } |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
280 |
5235
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
281 if (SDL_GL_ExtensionSupported("GL_ARB_texture_rectangle") |
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
282 || SDL_GL_ExtensionSupported("GL_EXT_texture_rectangle")) { |
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
283 ctx->GL_ARB_texture_rectangle_supported = SDL_TRUE; |
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
284 } |
8efa43b915be
Fixed the shaders (needed to use texture2DRect) - thanks Ryan!
Sam Lantinga <slouken@libsdl.org>
parents:
5234
diff
changeset
|
285 |
5233
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
286 /* Check for shader support */ |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
287 shaders_supported = SDL_FALSE; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
288 if (SDL_GL_ExtensionSupported("GL_ARB_shader_objects") && |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
289 SDL_GL_ExtensionSupported("GL_ARB_shading_language_100") && |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
290 SDL_GL_ExtensionSupported("GL_ARB_vertex_shader") && |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
291 SDL_GL_ExtensionSupported("GL_ARB_fragment_shader")) { |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
292 ctx->glGetError = (GLenum (*)(void)) SDL_GL_GetProcAddress("glGetError"); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
293 ctx->glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC) SDL_GL_GetProcAddress("glAttachObjectARB"); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
294 ctx->glCompileShaderARB = (PFNGLCOMPILESHADERARBPROC) SDL_GL_GetProcAddress("glCompileShaderARB"); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
295 ctx->glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC) SDL_GL_GetProcAddress("glCreateProgramObjectARB"); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
296 ctx->glCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC) SDL_GL_GetProcAddress("glCreateShaderObjectARB"); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
297 ctx->glDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC) SDL_GL_GetProcAddress("glDeleteObjectARB"); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
298 ctx->glGetInfoLogARB = (PFNGLGETINFOLOGARBPROC) SDL_GL_GetProcAddress("glGetInfoLogARB"); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
299 ctx->glGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC) SDL_GL_GetProcAddress("glGetObjectParameterivARB"); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
300 ctx->glGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC) SDL_GL_GetProcAddress("glGetUniformLocationARB"); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
301 ctx->glLinkProgramARB = (PFNGLLINKPROGRAMARBPROC) SDL_GL_GetProcAddress("glLinkProgramARB"); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
302 ctx->glShaderSourceARB = (PFNGLSHADERSOURCEARBPROC) SDL_GL_GetProcAddress("glShaderSourceARB"); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
303 ctx->glUniform1iARB = (PFNGLUNIFORM1IARBPROC) SDL_GL_GetProcAddress("glUniform1iARB"); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
304 ctx->glUniform1fARB = (PFNGLUNIFORM1FARBPROC) SDL_GL_GetProcAddress("glUniform1fARB"); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
305 ctx->glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC) SDL_GL_GetProcAddress("glUseProgramObjectARB"); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
306 if (ctx->glGetError && |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
307 ctx->glAttachObjectARB && |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
308 ctx->glCompileShaderARB && |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
309 ctx->glCreateProgramObjectARB && |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
310 ctx->glCreateShaderObjectARB && |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
311 ctx->glDeleteObjectARB && |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
312 ctx->glGetInfoLogARB && |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
313 ctx->glGetObjectParameterivARB && |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
314 ctx->glGetUniformLocationARB && |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
315 ctx->glLinkProgramARB && |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
316 ctx->glShaderSourceARB && |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
317 ctx->glUniform1iARB && |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
318 ctx->glUniform1fARB && |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
319 ctx->glUseProgramObjectARB) { |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
320 shaders_supported = SDL_TRUE; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
321 } |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
322 } |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
323 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
324 if (!shaders_supported) { |
5242
55b31686f82b
Fixed crash when shaders aren't available.
Sam Lantinga <slouken@libsdl.org>
parents:
5236
diff
changeset
|
325 SDL_free(ctx); |
5233
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
326 return NULL; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
327 } |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
328 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
329 /* Compile all the shaders */ |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
330 for (i = 0; i < NUM_SHADERS; ++i) { |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
331 if (!CompileShaderProgram(ctx, i, &ctx->shaders[i])) { |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
332 GL_DestroyShaderContext(ctx); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
333 return NULL; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
334 } |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
335 } |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
336 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
337 /* We're done! */ |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
338 return ctx; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
339 } |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
340 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
341 void |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
342 GL_SelectShader(GL_ShaderContext *ctx, GL_Shader shader) |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
343 { |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
344 /* Nothing to do if there's no shader support */ |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
345 if (!ctx) { |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
346 return; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
347 } |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
348 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
349 /* Nothing to do if there's no shader change */ |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
350 if (shader == ctx->current_shader) { |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
351 return; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
352 } |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
353 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
354 ctx->glUseProgramObjectARB(ctx->shaders[shader].program); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
355 ctx->current_shader = shader; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
356 } |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
357 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
358 void |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
359 GL_DestroyShaderContext(GL_ShaderContext *ctx) |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
360 { |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
361 int i; |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
362 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
363 for (i = 0; i < NUM_SHADERS; ++i) { |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
364 DestroyShaderProgram(ctx, &ctx->shaders[i]); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
365 } |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
366 SDL_free(ctx); |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
367 } |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
368 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
369 #endif /* SDL_VIDEO_RENDER_OGL && !SDL_RENDER_DISABLED */ |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
370 |
811beeb698f9
Beginning of a framework for OpenGL shaders
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
371 /* vi: set ts=4 sw=4 expandtab: */ |