SDL  2.0
SDL_shaders_gles2.c
Go to the documentation of this file.
1 /*
2  Simple DirectMedia Layer
3  Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org>
4 
5  This software is provided 'as-is', without any express or implied
6  warranty. In no event will the authors be held liable for any damages
7  arising from the use of this software.
8 
9  Permission is granted to anyone to use this software for any purpose,
10  including commercial applications, and to alter it and redistribute it
11  freely, subject to the following restrictions:
12 
13  1. The origin of this software must not be misrepresented; you must not
14  claim that you wrote the original software. If you use this software
15  in a product, an acknowledgment in the product documentation would be
16  appreciated but is not required.
17  2. Altered source versions must be plainly marked as such, and must not be
18  misrepresented as being the original software.
19  3. This notice may not be removed or altered from any source distribution.
20 */
21 #include "../../SDL_internal.h"
22 
23 #if SDL_VIDEO_RENDER_OGL_ES2 && !SDL_RENDER_DISABLED
24 
25 #include "SDL_video.h"
26 #include "SDL_opengles2.h"
27 #include "SDL_shaders_gles2.h"
28 #include "SDL_stdinc.h"
29 
30 /*************************************************************************************************
31  * Vertex/fragment shader source *
32  *************************************************************************************************/
33 
34 static const Uint8 GLES2_VertexSrc_Default_[] = " \
35  uniform mat4 u_projection; \
36  attribute vec2 a_position; \
37  attribute vec2 a_texCoord; \
38  attribute float a_angle; \
39  attribute vec2 a_center; \
40  varying vec2 v_texCoord; \
41  \
42  void main() \
43  { \
44  float angle = radians(a_angle); \
45  float c = cos(angle); \
46  float s = sin(angle); \
47  mat2 rotationMatrix = mat2(c, -s, s, c); \
48  vec2 position = rotationMatrix * (a_position - a_center) + a_center; \
49  v_texCoord = a_texCoord; \
50  gl_Position = u_projection * vec4(position, 0.0, 1.0);\
51  gl_PointSize = 1.0; \
52  } \
53 ";
54 
55 static const Uint8 GLES2_FragmentSrc_SolidSrc_[] = " \
56  precision mediump float; \
57  uniform vec4 u_color; \
58  \
59  void main() \
60  { \
61  gl_FragColor = u_color; \
62  } \
63 ";
64 
65 static const Uint8 GLES2_FragmentSrc_TextureABGRSrc_[] = " \
66  precision mediump float; \
67  uniform sampler2D u_texture; \
68  uniform vec4 u_modulation; \
69  varying vec2 v_texCoord; \
70  \
71  void main() \
72  { \
73  gl_FragColor = texture2D(u_texture, v_texCoord); \
74  gl_FragColor *= u_modulation; \
75  } \
76 ";
77 
78 /* ARGB to ABGR conversion */
79 static const Uint8 GLES2_FragmentSrc_TextureARGBSrc_[] = " \
80  precision mediump float; \
81  uniform sampler2D u_texture; \
82  uniform vec4 u_modulation; \
83  varying vec2 v_texCoord; \
84  \
85  void main() \
86  { \
87  vec4 abgr = texture2D(u_texture, v_texCoord); \
88  gl_FragColor = abgr; \
89  gl_FragColor.r = abgr.b; \
90  gl_FragColor.b = abgr.r; \
91  gl_FragColor *= u_modulation; \
92  } \
93 ";
94 
95 /* RGB to ABGR conversion */
96 static const Uint8 GLES2_FragmentSrc_TextureRGBSrc_[] = " \
97  precision mediump float; \
98  uniform sampler2D u_texture; \
99  uniform vec4 u_modulation; \
100  varying vec2 v_texCoord; \
101  \
102  void main() \
103  { \
104  vec4 abgr = texture2D(u_texture, v_texCoord); \
105  gl_FragColor = abgr; \
106  gl_FragColor.r = abgr.b; \
107  gl_FragColor.b = abgr.r; \
108  gl_FragColor.a = 1.0; \
109  gl_FragColor *= u_modulation; \
110  } \
111 ";
112 
113 /* BGR to ABGR conversion */
114 static const Uint8 GLES2_FragmentSrc_TextureBGRSrc_[] = " \
115  precision mediump float; \
116  uniform sampler2D u_texture; \
117  uniform vec4 u_modulation; \
118  varying vec2 v_texCoord; \
119  \
120  void main() \
121  { \
122  vec4 abgr = texture2D(u_texture, v_texCoord); \
123  gl_FragColor = abgr; \
124  gl_FragColor.a = 1.0; \
125  gl_FragColor *= u_modulation; \
126  } \
127 ";
128 
129 /* YUV to ABGR conversion */
130 static const Uint8 GLES2_FragmentSrc_TextureYUVSrc_[] = " \
131  precision mediump float; \
132  uniform sampler2D u_texture; \
133  uniform sampler2D u_texture_u; \
134  uniform sampler2D u_texture_v; \
135  uniform vec4 u_modulation; \
136  varying vec2 v_texCoord; \
137  \
138  void main() \
139  { \
140  mediump vec3 yuv; \
141  lowp vec3 rgb; \
142  yuv.x = texture2D(u_texture, v_texCoord).r; \
143  yuv.y = texture2D(u_texture_u, v_texCoord).r - 0.5; \
144  yuv.z = texture2D(u_texture_v, v_texCoord).r - 0.5; \
145  rgb = mat3( 1, 1, 1, \
146  0, -0.39465, 2.03211, \
147  1.13983, -0.58060, 0) * yuv; \
148  gl_FragColor = vec4(rgb, 1); \
149  gl_FragColor *= u_modulation; \
150  } \
151 ";
152 
153 /* NV12 to ABGR conversion */
154 static const Uint8 GLES2_FragmentSrc_TextureNV12Src_[] = " \
155  precision mediump float; \
156  uniform sampler2D u_texture; \
157  uniform sampler2D u_texture_u; \
158  uniform vec4 u_modulation; \
159  varying vec2 v_texCoord; \
160  \
161  void main() \
162  { \
163  mediump vec3 yuv; \
164  lowp vec3 rgb; \
165  yuv.x = texture2D(u_texture, v_texCoord).r; \
166  yuv.yz = texture2D(u_texture_u, v_texCoord).ra - 0.5; \
167  rgb = mat3( 1, 1, 1, \
168  0, -0.39465, 2.03211, \
169  1.13983, -0.58060, 0) * yuv; \
170  gl_FragColor = vec4(rgb, 1); \
171  gl_FragColor *= u_modulation; \
172  } \
173 ";
174 
175 /* NV21 to ABGR conversion */
176 static const Uint8 GLES2_FragmentSrc_TextureNV21Src_[] = " \
177  precision mediump float; \
178  uniform sampler2D u_texture; \
179  uniform sampler2D u_texture_u; \
180  uniform vec4 u_modulation; \
181  varying vec2 v_texCoord; \
182  \
183  void main() \
184  { \
185  mediump vec3 yuv; \
186  lowp vec3 rgb; \
187  yuv.x = texture2D(u_texture, v_texCoord).r; \
188  yuv.yz = texture2D(u_texture_u, v_texCoord).ar - 0.5; \
189  rgb = mat3( 1, 1, 1, \
190  0, -0.39465, 2.03211, \
191  1.13983, -0.58060, 0) * yuv; \
192  gl_FragColor = vec4(rgb, 1); \
193  gl_FragColor *= u_modulation; \
194  } \
195 ";
196 
197 static const GLES2_ShaderInstance GLES2_VertexSrc_Default = {
199  GLES2_SOURCE_SHADER,
200  sizeof(GLES2_VertexSrc_Default_),
201  GLES2_VertexSrc_Default_
202 };
203 
204 static const GLES2_ShaderInstance GLES2_FragmentSrc_SolidSrc = {
206  GLES2_SOURCE_SHADER,
207  sizeof(GLES2_FragmentSrc_SolidSrc_),
208  GLES2_FragmentSrc_SolidSrc_
209 };
210 
211 static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureABGRSrc = {
213  GLES2_SOURCE_SHADER,
214  sizeof(GLES2_FragmentSrc_TextureABGRSrc_),
215  GLES2_FragmentSrc_TextureABGRSrc_
216 };
217 
218 static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureARGBSrc = {
220  GLES2_SOURCE_SHADER,
221  sizeof(GLES2_FragmentSrc_TextureARGBSrc_),
222  GLES2_FragmentSrc_TextureARGBSrc_
223 };
224 
225 static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureRGBSrc = {
227  GLES2_SOURCE_SHADER,
228  sizeof(GLES2_FragmentSrc_TextureRGBSrc_),
229  GLES2_FragmentSrc_TextureRGBSrc_
230 };
231 
232 static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureBGRSrc = {
234  GLES2_SOURCE_SHADER,
235  sizeof(GLES2_FragmentSrc_TextureBGRSrc_),
236  GLES2_FragmentSrc_TextureBGRSrc_
237 };
238 
239 static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureYUVSrc = {
241  GLES2_SOURCE_SHADER,
242  sizeof(GLES2_FragmentSrc_TextureYUVSrc_),
243  GLES2_FragmentSrc_TextureYUVSrc_
244 };
245 
246 static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureNV12Src = {
248  GLES2_SOURCE_SHADER,
249  sizeof(GLES2_FragmentSrc_TextureNV12Src_),
250  GLES2_FragmentSrc_TextureNV12Src_
251 };
252 
253 static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureNV21Src = {
255  GLES2_SOURCE_SHADER,
256  sizeof(GLES2_FragmentSrc_TextureNV21Src_),
257  GLES2_FragmentSrc_TextureNV21Src_
258 };
259 
260 
261 /*************************************************************************************************
262  * Vertex/fragment shader binaries (NVIDIA Tegra 1/2) *
263  *************************************************************************************************/
264 
265 #if GLES2_INCLUDE_NVIDIA_SHADERS
266 
267 #define GL_NVIDIA_PLATFORM_BINARY_NV 0x890B
268 
269 static const Uint8 GLES2_VertexTegra_Default_[] = {
270  243, 193, 1, 142, 31, 109, 131, 38, 6, 0, 1, 0, 5, 0, 0, 0, 17, 0, 0, 0, 1, 0, 0, 0, 73, 0,
271  0, 0, 46, 0, 0, 0, 48, 0, 0, 0, 2, 0, 0, 0, 85, 0, 0, 0, 2, 0, 0, 0, 24, 0, 0, 0, 3, 0, 0, 0,
272  91, 0, 0, 0, 1, 0, 0, 0, 16, 0, 0, 0, 5, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
273  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 95, 0, 0, 0, 1, 0, 0, 0, 28, 0, 0, 0,
274  13, 0, 0, 0, 102, 0, 0, 0, 2, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
275  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
276  0, 0, 0, 16, 0, 0, 0, 104, 0, 0, 0, 1, 0, 0, 0, 32, 0, 0, 0, 17, 0, 0, 0, 112, 0, 0, 0, 0, 0,
277  0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 112, 0, 0, 0, 80, 0, 0, 0, 80, 0, 0, 0, 19, 0, 0, 0, 132, 0,
278  0, 0, 104, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
279  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 97, 110, 70, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97,
280  95, 112, 111, 115, 105, 116, 105, 111, 110, 0, 97, 95, 116, 101, 120, 67, 111, 111, 114, 100,
281  0, 118, 95, 116, 101, 120, 67, 111, 111, 114, 100, 0, 117, 95, 112, 114, 111, 106, 101, 99,
282  116, 105, 111, 110, 0, 0, 0, 0, 0, 0, 0, 82, 139, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 80, 139, 0,
283  0, 1, 0, 0, 0, 22, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 33, 0, 0, 0, 92, 139, 0, 0,
284  1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 240, 0, 0, 0, 0, 0, 0, 1, 0,
285  0, 0, 64, 0, 0, 0, 80, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 193, 0, 0, 0,
286  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
287  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
288  0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 66, 24, 0, 6, 34, 108, 28,
289  0, 0, 42, 16, 128, 0, 195, 192, 6, 129, 252, 255, 65, 96, 108, 28, 0, 0, 0, 0, 0, 1, 195, 192,
290  6, 1, 252, 255, 33, 96, 108, 156, 31, 64, 8, 1, 64, 0, 131, 192, 6, 1, 156, 159, 65, 96, 108,
291  28, 0, 0, 85, 32, 0, 1, 195, 192, 6, 1, 252, 255, 33, 96, 108, 156, 31, 64, 0, 64, 64, 0, 131,
292  192, 134, 1, 152, 31, 65, 96, 108, 156, 31, 64, 127, 48, 0, 1, 195, 192, 6, 129, 129, 255, 33,
293  96
294 };
295 
296 static const Uint8 GLES2_FragmentTegra_None_SolidSrc_[] = {
297  155, 191, 159, 1, 47, 109, 131, 38, 6, 0, 1, 0, 5, 0, 0, 0, 17, 0, 0, 0, 1, 0, 0, 0, 73, 0,
298  0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 75,
299  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
300  75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 75, 0, 0, 0, 1, 0, 0, 0, 28, 0, 0, 0, 13, 0,
301  0, 0, 82, 0, 0, 0, 2, 0, 0, 0, 8, 0, 0, 0, 14, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
302  22, 0, 0, 0, 84, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 23, 0, 0, 0, 92, 0, 0, 0, 1, 0, 0, 0, 4,
303  0, 0, 0, 15, 0, 0, 0, 93, 0, 0, 0, 1, 0, 0, 0, 80, 0, 0, 0, 17, 0, 0, 0, 113, 0, 0, 0, 0, 0,
304  0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 113, 0, 0,
305  0, 108, 0, 0, 0, 108, 0, 0, 0, 20, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0,
306  0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 97, 110, 70, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
307  0, 117, 95, 99, 111, 108, 111, 114, 0, 0, 0, 0, 0, 82, 139, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,
308  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 240, 0, 0,
309  0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 0, 0,
310  0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 21, 32, 0, 0, 0, 0, 0,
311  0, 0, 0, 0, 0, 20, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
312  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 82, 50, 48, 45, 66, 73, 78, 1,
313  0, 0, 0, 1, 0, 0, 0, 1, 0, 65, 37, 0, 0, 0, 0, 1, 0, 0, 21, 0, 0, 0, 0, 1, 0, 1, 38, 0, 0, 0,
314  0, 1, 0, 1, 39, 0, 0, 0, 0, 1, 0, 1, 40, 1, 0, 0, 0, 8, 0, 4, 40, 0, 40, 0, 0, 0, 242, 65, 63,
315  192, 200, 0, 0, 0, 242, 65, 63, 128, 168, 0, 0, 0, 242, 65, 63, 64, 72, 0, 0, 0, 242, 65, 63,
316  1, 0, 6, 40, 0, 0, 0, 0, 1, 0, 1, 41, 5, 0, 2, 0
317 };
318 
319 static const Uint8 GLES2_FragmentTegra_Alpha_SolidSrc_[] = {
320  169, 153, 195, 28, 47, 109, 131, 38, 6, 0, 1, 0, 5, 0, 0, 0, 17, 0, 0, 0, 1, 0, 0, 0, 73, 0,
321  0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 75,
322  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
323  75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 75, 0, 0, 0, 1, 0, 0, 0, 28, 0, 0, 0, 13, 0,
324  0, 0, 82, 0, 0, 0, 2, 0, 0, 0, 8, 0, 0, 0, 14, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
325  22, 0, 0, 0, 84, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 23, 0, 0, 0, 92, 0, 0, 0, 1, 0, 0, 0, 4,
326  0, 0, 0, 15, 0, 0, 0, 93, 0, 0, 0, 1, 0, 0, 0, 80, 0, 0, 0, 17, 0, 0, 0, 113, 0, 0, 0, 0, 0,
327  0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 113, 0, 0,
328  0, 220, 0, 0, 0, 220, 0, 0, 0, 20, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0,
329  0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 97, 110, 70, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
330  0, 117, 95, 99, 111, 108, 111, 114, 0, 0, 0, 0, 0, 82, 139, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,
331  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 48, 0, 0, 0, 0, 0, 0, 118, 118, 17, 241, 0, 0, 0, 240, 0,
332  0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 0,
333  0, 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 21, 32, 0, 0, 0, 0,
334  0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
335  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 82, 50, 48, 45, 66, 73, 78,
336  1, 0, 0, 0, 3, 0, 0, 0, 3, 0, 65, 37, 8, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 21, 0,
337  0, 0, 0, 3, 0, 1, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 39, 0, 0, 0, 0, 0, 0, 0,
338  0, 0, 0, 0, 0, 3, 0, 1, 40, 1, 0, 0, 0, 5, 0, 0, 0, 9, 0, 0, 0, 24, 0, 4, 40, 232, 231, 15,
339  0, 0, 242, 65, 62, 194, 72, 1, 0, 0, 250, 65, 63, 194, 40, 1, 0, 0, 250, 65, 63, 192, 168, 1,
340  0, 0, 242, 1, 64, 192, 168, 1, 0, 0, 242, 1, 68, 168, 32, 0, 0, 0, 50, 64, 0, 192, 168, 15,
341  0, 0, 242, 1, 66, 168, 64, 0, 16, 0, 242, 65, 1, 232, 231, 15, 0, 0, 242, 65, 62, 168, 160,
342  0, 0, 0, 50, 64, 2, 104, 192, 0, 0, 36, 48, 66, 4, 232, 231, 15, 0, 0, 242, 65, 62, 3, 0, 6,
343  40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 41, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 2, 0
344 };
345 
346 static const Uint8 GLES2_FragmentTegra_Additive_SolidSrc_[] = {
347  59, 71, 42, 17, 47, 109, 131, 38, 6, 0, 1, 0, 5, 0, 0, 0, 17, 0, 0, 0, 1, 0, 0, 0, 73, 0, 0,
348  0, 8, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 75,
349  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
350  75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 75, 0, 0, 0, 1, 0, 0, 0, 28, 0, 0, 0, 13, 0,
351  0, 0, 82, 0, 0, 0, 2, 0, 0, 0, 8, 0, 0, 0, 14, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
352  22, 0, 0, 0, 84, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 23, 0, 0, 0, 92, 0, 0, 0, 1, 0, 0, 0, 4,
353  0, 0, 0, 15, 0, 0, 0, 93, 0, 0, 0, 1, 0, 0, 0, 80, 0, 0, 0, 17, 0, 0, 0, 113, 0, 0, 0, 0, 0,
354  0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 113, 0, 0,
355  0, 108, 0, 0, 0, 108, 0, 0, 0, 20, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0,
356  0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 97, 110, 70, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
357  0, 117, 95, 99, 111, 108, 111, 114, 0, 0, 0, 0, 0, 82, 139, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,
358  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 48, 0, 0, 0, 0, 0, 0, 22, 22, 17, 241, 0, 0, 0, 240, 0,
359  0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 0,
360  0, 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 21, 32, 0, 0, 0, 0,
361  0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
362  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 82, 50, 48, 45, 66, 73, 78,
363  1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 65, 37, 8, 0, 129, 0, 1, 0, 0, 21, 0, 0, 0, 0, 1, 0, 1, 38, 0,
364  0, 0, 0, 1, 0, 1, 39, 0, 0, 0, 0, 1, 0, 1, 40, 1, 0, 0, 0, 8, 0, 4, 40, 192, 200, 0, 0, 0, 26,
365  0, 70, 192, 40, 0, 0, 0, 2, 0, 64, 192, 72, 0, 0, 0, 10, 0, 66, 192, 168, 0, 0, 0, 18, 0, 68,
366  1, 0, 6, 40, 0, 0, 0, 0, 1, 0, 1, 41, 5, 0, 2, 0
367 };
368 
369 static const Uint8 GLES2_FragmentTegra_Modulated_SolidSrc_[] = {
370  37, 191, 49, 17, 47, 109, 131, 38, 6, 0, 1, 0, 5, 0, 0, 0, 17, 0, 0, 0, 1, 0, 0, 0, 73, 0, 0,
371  0, 8, 0, 0, 0, 8, 0, 0, 0, 2, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 75,
372  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
373  75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 75, 0, 0, 0, 1, 0, 0, 0, 28, 0, 0, 0, 13, 0,
374  0, 0, 82, 0, 0, 0, 2, 0, 0, 0, 8, 0, 0, 0, 14, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
375  22, 0, 0, 0, 84, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 23, 0, 0, 0, 92, 0, 0, 0, 1, 0, 0, 0, 4,
376  0, 0, 0, 15, 0, 0, 0, 93, 0, 0, 0, 1, 0, 0, 0, 80, 0, 0, 0, 17, 0, 0, 0, 113, 0, 0, 0, 0, 0,
377  0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 113, 0, 0,
378  0, 108, 0, 0, 0, 108, 0, 0, 0, 20, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0,
379  0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 97, 110, 70, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
380  0, 117, 95, 99, 111, 108, 111, 114, 0, 0, 0, 0, 0, 82, 139, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,
381  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 48, 0, 0, 0, 0, 0, 0, 32, 32, 17, 241, 0, 0, 0, 240, 0,
382  0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 0,
383  0, 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 21, 32, 0, 0, 0, 0,
384  0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
385  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 82, 50, 48, 45, 66, 73, 78,
386  1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 65, 37, 8, 0, 129, 0, 1, 0, 0, 21, 0, 0, 0, 0, 1, 0, 1, 38, 0,
387  0, 0, 0, 1, 0, 1, 39, 0, 0, 0, 0, 1, 0, 1, 40, 1, 0, 0, 0, 8, 0, 4, 40, 104, 192, 0, 0, 0, 242,
388  1, 70, 8, 32, 0, 0, 0, 242, 1, 64, 40, 64, 0, 0, 0, 242, 1, 66, 72, 160, 0, 0, 0, 242, 1, 68,
389  1, 0, 6, 40, 0, 0, 0, 0, 1, 0, 1, 41, 5, 0, 2, 0
390 };
391 
392 static const Uint8 GLES2_FragmentTegra_None_TextureSrc_[] = {
393  220, 217, 41, 211, 47, 109, 131, 38, 6, 0, 1, 0, 5, 0, 0, 0, 17, 0, 0, 0, 1, 0, 0, 0, 73, 0,
394  0, 0, 34, 0, 0, 0, 36, 0, 0, 0, 2, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
395  82, 0, 0, 0, 1, 0, 0, 0, 20, 0, 0, 0, 6, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0,
396  0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 87, 0, 0, 0, 2, 0, 0, 0, 56, 0, 0, 0,
397  13, 0, 0, 0, 101, 0, 0, 0, 4, 0, 0, 0, 16, 0, 0, 0, 14, 0, 0, 0, 105, 0, 0, 0, 1, 0, 0, 0, 4,
398  0, 0, 0, 22, 0, 0, 0, 106, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 23, 0, 0, 0, 114, 0, 0, 0, 1, 0,
399  0, 0, 4, 0, 0, 0, 15, 0, 0, 0, 115, 0, 0, 0, 1, 0, 0, 0, 80, 0, 0, 0, 17, 0, 0, 0, 135, 0, 0,
400  0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 135,
401  0, 0, 0, 120, 0, 0, 0, 120, 0, 0, 0, 20, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21,
402  0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 97, 110, 70, 73, 0, 0, 0, 0, 0, 0, 0, 0,
403  0, 0, 0, 118, 95, 116, 101, 120, 67, 111, 111, 114, 100, 0, 117, 95, 109, 111, 100, 117, 108,
404  97, 116, 105, 111, 110, 0, 117, 95, 116, 101, 120, 116, 117, 114, 101, 0, 0, 0, 0, 0, 0, 0,
405  2, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 82, 139, 0, 0, 1, 0, 0, 0, 1,
406  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 94, 139, 0, 0, 1, 0, 0, 0, 1, 0, 0,
407  0, 2, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 5, 48, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
408  0, 0, 1, 0, 0, 0, 241, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240,
409  0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 1, 0,
410  0, 0, 1, 0, 0, 0, 21, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0,
411  0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
412  0, 0, 65, 82, 50, 48, 45, 66, 73, 78, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 65, 37, 0, 0, 0, 0, 1, 0,
413  0, 21, 0, 0, 0, 0, 1, 0, 1, 38, 1, 0, 0, 0, 2, 0, 4, 38, 186, 81, 78, 16, 2, 1, 0, 0, 1, 0,
414  1, 39, 0, 4, 0, 0, 1, 0, 1, 40, 1, 0, 0, 0, 8, 0, 4, 40, 104, 192, 0, 0, 0, 242, 1, 70, 8, 32,
415  0, 0, 0, 242, 1, 64, 40, 64, 0, 0, 0, 242, 1, 66, 72, 160, 0, 0, 0, 242, 1, 68, 1, 0, 6, 40,
416  0, 0, 0, 0, 1, 0, 1, 41, 5, 0, 2, 0
417 };
418 
419 static const Uint8 GLES2_FragmentTegra_Alpha_TextureSrc_[] = {
420  71, 202, 114, 229, 47, 109, 131, 38, 6, 0, 1, 0, 5, 0, 0, 0, 17, 0, 0, 0, 1, 0, 0, 0, 73, 0,
421  0, 0, 34, 0, 0, 0, 36, 0, 0, 0, 2, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
422  82, 0, 0, 0, 1, 0, 0, 0, 20, 0, 0, 0, 6, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0,
423  0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 87, 0, 0, 0, 2, 0, 0, 0, 56, 0, 0, 0,
424  13, 0, 0, 0, 101, 0, 0, 0, 4, 0, 0, 0, 16, 0, 0, 0, 14, 0, 0, 0, 105, 0, 0, 0, 1, 0, 0, 0, 4,
425  0, 0, 0, 22, 0, 0, 0, 106, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 23, 0, 0, 0, 114, 0, 0, 0, 1, 0,
426  0, 0, 4, 0, 0, 0, 15, 0, 0, 0, 115, 0, 0, 0, 1, 0, 0, 0, 80, 0, 0, 0, 17, 0, 0, 0, 135, 0, 0,
427  0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 135,
428  0, 0, 0, 176, 0, 0, 0, 176, 0, 0, 0, 20, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21,
429  0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 97, 110, 70, 73, 0, 0, 0, 0, 0, 0, 0, 0,
430  0, 0, 0, 118, 95, 116, 101, 120, 67, 111, 111, 114, 100, 0, 117, 95, 109, 111, 100, 117, 108,
431  97, 116, 105, 111, 110, 0, 117, 95, 116, 101, 120, 116, 117, 114, 101, 0, 0, 0, 0, 0, 0, 0,
432  2, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 82, 139, 0, 0, 1, 0, 0, 0, 1,
433  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 94, 139, 0, 0, 1, 0, 0, 0, 1, 0, 0,
434  0, 2, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 5, 48, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
435  0, 0, 1, 118, 118, 17, 241, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0,
436  240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 2, 0, 0, 0,
437  1, 0, 0, 0, 2, 0, 0, 0, 21, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 16, 0, 0, 0, 16,
438  0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
439  0, 0, 0, 0, 65, 82, 50, 48, 45, 66, 73, 78, 1, 0, 0, 0, 2, 0, 0, 0, 2, 0, 65, 37, 0, 0, 0, 0,
440  8, 0, 129, 0, 1, 0, 0, 21, 0, 0, 0, 0, 2, 0, 1, 38, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 38, 186,
441  81, 78, 16, 2, 1, 0, 0, 2, 0, 1, 39, 0, 4, 0, 0, 0, 0, 0, 0, 2, 0, 1, 40, 1, 0, 0, 0, 5, 0,
442  0, 0, 16, 0, 4, 40, 40, 160, 1, 0, 0, 242, 1, 66, 8, 192, 1, 0, 0, 242, 1, 64, 104, 32, 1, 0,
443  0, 242, 1, 70, 72, 64, 1, 0, 0, 242, 1, 68, 154, 192, 0, 0, 37, 34, 64, 3, 8, 32, 0, 0, 5, 58,
444  208, 4, 40, 64, 0, 0, 5, 50, 208, 4, 72, 160, 0, 0, 37, 42, 208, 4, 2, 0, 6, 40, 0, 0, 0, 0,
445  0, 0, 0, 0, 2, 0, 1, 41, 0, 0, 0, 0, 5, 0, 2, 0
446 };
447 
448 static const Uint8 GLES2_FragmentTegra_Additive_TextureSrc_[] = {
449  161, 234, 193, 234, 47, 109, 131, 38, 6, 0, 1, 0, 5, 0, 0, 0, 17, 0, 0, 0, 1, 0, 0, 0, 73, 0,
450  0, 0, 34, 0, 0, 0, 36, 0, 0, 0, 2, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
451  82, 0, 0, 0, 1, 0, 0, 0, 20, 0, 0, 0, 6, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0,
452  0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 87, 0, 0, 0, 2, 0, 0, 0, 56, 0, 0, 0,
453  13, 0, 0, 0, 101, 0, 0, 0, 4, 0, 0, 0, 16, 0, 0, 0, 14, 0, 0, 0, 105, 0, 0, 0, 1, 0, 0, 0, 4,
454  0, 0, 0, 22, 0, 0, 0, 106, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 23, 0, 0, 0, 114, 0, 0, 0, 1, 0,
455  0, 0, 4, 0, 0, 0, 15, 0, 0, 0, 115, 0, 0, 0, 1, 0, 0, 0, 80, 0, 0, 0, 17, 0, 0, 0, 135, 0, 0,
456  0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 135,
457  0, 0, 0, 176, 0, 0, 0, 176, 0, 0, 0, 20, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21,
458  0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 97, 110, 70, 73, 0, 0, 0, 0, 0, 0, 0, 0,
459  0, 0, 0, 118, 95, 116, 101, 120, 67, 111, 111, 114, 100, 0, 117, 95, 109, 111, 100, 117, 108,
460  97, 116, 105, 111, 110, 0, 117, 95, 116, 101, 120, 116, 117, 114, 101, 0, 0, 0, 0, 0, 0, 0,
461  2, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 82, 139, 0, 0, 1, 0, 0, 0, 1,
462  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 94, 139, 0, 0, 1, 0, 0, 0, 1, 0, 0,
463  0, 2, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 5, 48, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
464  0, 0, 1, 22, 22, 17, 241, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240,
465  0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 2, 0, 0, 0, 1, 0,
466  0, 0, 2, 0, 0, 0, 21, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0,
467  0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
468  0, 0, 65, 82, 50, 48, 45, 66, 73, 78, 1, 0, 0, 0, 2, 0, 0, 0, 2, 0, 65, 37, 0, 0, 0, 0, 8, 0,
469  129, 0, 1, 0, 0, 21, 0, 0, 0, 0, 2, 0, 1, 38, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 38, 186, 81,
470  78, 16, 2, 1, 0, 0, 2, 0, 1, 39, 0, 4, 0, 0, 0, 0, 0, 0, 2, 0, 1, 40, 1, 0, 0, 0, 5, 0, 0, 0,
471  16, 0, 4, 40, 40, 160, 1, 0, 0, 242, 1, 66, 104, 32, 1, 0, 0, 242, 1, 70, 8, 192, 1, 0, 0, 242,
472  1, 64, 72, 64, 1, 0, 0, 242, 1, 68, 136, 192, 0, 0, 0, 26, 64, 4, 136, 32, 0, 0, 0, 2, 64, 7,
473  136, 64, 0, 0, 0, 10, 64, 6, 136, 160, 0, 0, 0, 18, 64, 5, 2, 0, 6, 40, 0, 0, 0, 0, 0, 0, 0,
474  0, 2, 0, 1, 41, 0, 0, 0, 0, 5, 0, 2, 0
475 };
476 
477 static const Uint8 GLES2_FragmentTegra_Modulated_TextureSrc_[] = {
478  75, 132, 201, 227, 47, 109, 131, 38, 6, 0, 1, 0, 5, 0, 0, 0, 17, 0, 0, 0, 1, 0, 0, 0, 73, 0,
479  0, 0, 34, 0, 0, 0, 36, 0, 0, 0, 2, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
480  82, 0, 0, 0, 1, 0, 0, 0, 20, 0, 0, 0, 6, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0,
481  0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 87, 0, 0, 0, 2, 0, 0, 0, 56, 0, 0, 0,
482  13, 0, 0, 0, 101, 0, 0, 0, 4, 0, 0, 0, 16, 0, 0, 0, 14, 0, 0, 0, 105, 0, 0, 0, 1, 0, 0, 0, 4,
483  0, 0, 0, 22, 0, 0, 0, 106, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 23, 0, 0, 0, 114, 0, 0, 0, 1, 0,
484  0, 0, 4, 0, 0, 0, 15, 0, 0, 0, 115, 0, 0, 0, 1, 0, 0, 0, 80, 0, 0, 0, 17, 0, 0, 0, 135, 0, 0,
485  0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 135,
486  0, 0, 0, 176, 0, 0, 0, 176, 0, 0, 0, 20, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21,
487  0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 97, 110, 70, 73, 0, 0, 0, 0, 0, 0, 0, 0,
488  0, 0, 0, 118, 95, 116, 101, 120, 67, 111, 111, 114, 100, 0, 117, 95, 109, 111, 100, 117, 108,
489  97, 116, 105, 111, 110, 0, 117, 95, 116, 101, 120, 116, 117, 114, 101, 0, 0, 0, 0, 0, 0, 0,
490  2, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 82, 139, 0, 0, 1, 0, 0, 0, 1,
491  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 94, 139, 0, 0, 1, 0, 0, 0, 1, 0, 0,
492  0, 2, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 5, 48, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
493  0, 0, 1, 32, 32, 17, 241, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 240,
494  0, 0, 0, 240, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 2, 0, 0, 0, 1, 0,
495  0, 0, 2, 0, 0, 0, 21, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0,
496  0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
497  0, 0, 65, 82, 50, 48, 45, 66, 73, 78, 1, 0, 0, 0, 2, 0, 0, 0, 2, 0, 65, 37, 0, 0, 0, 0, 8, 0,
498  129, 0, 1, 0, 0, 21, 0, 0, 0, 0, 2, 0, 1, 38, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 38, 186, 81,
499  78, 16, 2, 1, 0, 0, 2, 0, 1, 39, 0, 4, 0, 0, 0, 0, 0, 0, 2, 0, 1, 40, 1, 0, 0, 0, 5, 0, 0, 0,
500  16, 0, 4, 40, 40, 160, 1, 0, 0, 242, 1, 66, 8, 192, 1, 0, 0, 242, 1, 64, 104, 32, 1, 0, 0, 242,
501  1, 70, 72, 64, 1, 0, 0, 242, 1, 68, 104, 192, 0, 0, 0, 242, 65, 4, 232, 32, 0, 0, 0, 242, 65,
502  0, 40, 64, 0, 0, 0, 242, 65, 6, 72, 160, 0, 0, 0, 242, 65, 5, 2, 0, 6, 40, 0, 0, 0, 0, 0, 0,
503  0, 0, 2, 0, 1, 41, 0, 0, 0, 0, 5, 0, 2, 0
504 };
505 
506 static const GLES2_ShaderInstance GLES2_VertexTegra_Default = {
508  GL_NVIDIA_PLATFORM_BINARY_NV,
509  sizeof(GLES2_VertexTegra_Default_),
510  GLES2_VertexTegra_Default_
511 };
512 
513 static const GLES2_ShaderInstance GLES2_FragmentTegra_None_SolidSrc = {
515  GL_NVIDIA_PLATFORM_BINARY_NV,
516  sizeof(GLES2_FragmentTegra_None_SolidSrc_),
517  GLES2_FragmentTegra_None_SolidSrc_
518 };
519 
520 static const GLES2_ShaderInstance GLES2_FragmentTegra_Alpha_SolidSrc = {
522  GL_NVIDIA_PLATFORM_BINARY_NV,
523  sizeof(GLES2_FragmentTegra_Alpha_SolidSrc_),
524  GLES2_FragmentTegra_Alpha_SolidSrc_
525 };
526 
527 static const GLES2_ShaderInstance GLES2_FragmentTegra_Additive_SolidSrc = {
529  GL_NVIDIA_PLATFORM_BINARY_NV,
530  sizeof(GLES2_FragmentTegra_Additive_SolidSrc_),
531  GLES2_FragmentTegra_Additive_SolidSrc_
532 };
533 
534 static const GLES2_ShaderInstance GLES2_FragmentTegra_Modulated_SolidSrc = {
536  GL_NVIDIA_PLATFORM_BINARY_NV,
537  sizeof(GLES2_FragmentTegra_Modulated_SolidSrc_),
538  GLES2_FragmentTegra_Modulated_SolidSrc_
539 };
540 
541 static const GLES2_ShaderInstance GLES2_FragmentTegra_None_TextureSrc = {
543  GL_NVIDIA_PLATFORM_BINARY_NV,
544  sizeof(GLES2_FragmentTegra_None_TextureSrc_),
545  GLES2_FragmentTegra_None_TextureSrc_
546 };
547 
548 static const GLES2_ShaderInstance GLES2_FragmentTegra_Alpha_TextureSrc = {
550  GL_NVIDIA_PLATFORM_BINARY_NV,
551  sizeof(GLES2_FragmentTegra_Alpha_TextureSrc_),
552  GLES2_FragmentTegra_Alpha_TextureSrc_
553 };
554 
555 static const GLES2_ShaderInstance GLES2_FragmentTegra_Additive_TextureSrc = {
557  GL_NVIDIA_PLATFORM_BINARY_NV,
558  sizeof(GLES2_FragmentTegra_Additive_TextureSrc_),
559  GLES2_FragmentTegra_Additive_TextureSrc_
560 };
561 
562 static const GLES2_ShaderInstance GLES2_FragmentTegra_Modulated_TextureSrc = {
564  GL_NVIDIA_PLATFORM_BINARY_NV,
565  sizeof(GLES2_FragmentTegra_Modulated_TextureSrc_),
566  GLES2_FragmentTegra_Modulated_TextureSrc_
567 };
568 
569 #endif /* GLES2_INCLUDE_NVIDIA_SHADERS */
570 
571 /*************************************************************************************************
572  * Vertex/fragment shader definitions *
573  *************************************************************************************************/
574 
575 static GLES2_Shader GLES2_VertexShader_Default = {
576 #if GLES2_INCLUDE_NVIDIA_SHADERS
577  2,
578 #else
579  1,
580 #endif
581  {
582 #if GLES2_INCLUDE_NVIDIA_SHADERS
583  &GLES2_VertexTegra_Default,
584 #endif
585  &GLES2_VertexSrc_Default
586  }
587 };
588 
589 static GLES2_Shader GLES2_FragmentShader_None_SolidSrc = {
590 #if GLES2_INCLUDE_NVIDIA_SHADERS
591  2,
592 #else
593  1,
594 #endif
595  {
596 #if GLES2_INCLUDE_NVIDIA_SHADERS
597  &GLES2_FragmentTegra_None_SolidSrc,
598 #endif
599  &GLES2_FragmentSrc_SolidSrc
600  }
601 };
602 
603 static GLES2_Shader GLES2_FragmentShader_Alpha_SolidSrc = {
604 #if GLES2_INCLUDE_NVIDIA_SHADERS
605  2,
606 #else
607  1,
608 #endif
609  {
610 #if GLES2_INCLUDE_NVIDIA_SHADERS
611  &GLES2_FragmentTegra_Alpha_SolidSrc,
612 #endif
613  &GLES2_FragmentSrc_SolidSrc
614  }
615 };
616 
617 static GLES2_Shader GLES2_FragmentShader_Additive_SolidSrc = {
618 #if GLES2_INCLUDE_NVIDIA_SHADERS
619  2,
620 #else
621  1,
622 #endif
623  {
624 #if GLES2_INCLUDE_NVIDIA_SHADERS
625  &GLES2_FragmentTegra_Additive_SolidSrc,
626 #endif
627  &GLES2_FragmentSrc_SolidSrc
628  }
629 };
630 
631 static GLES2_Shader GLES2_FragmentShader_Modulated_SolidSrc = {
632 #if GLES2_INCLUDE_NVIDIA_SHADERS
633  2,
634 #else
635  1,
636 #endif
637  {
638 #if GLES2_INCLUDE_NVIDIA_SHADERS
639  &GLES2_FragmentTegra_Modulated_SolidSrc,
640 #endif
641  &GLES2_FragmentSrc_SolidSrc
642  }
643 };
644 
645 static GLES2_Shader GLES2_FragmentShader_None_TextureABGRSrc = {
646 #if GLES2_INCLUDE_NVIDIA_SHADERS
647  2,
648 #else
649  1,
650 #endif
651  {
652 #if GLES2_INCLUDE_NVIDIA_SHADERS
653  &GLES2_FragmentTegra_None_TextureSrc,
654 #endif
655  &GLES2_FragmentSrc_TextureABGRSrc
656  }
657 };
658 
659 static GLES2_Shader GLES2_FragmentShader_Alpha_TextureABGRSrc = {
660 #if GLES2_INCLUDE_NVIDIA_SHADERS
661  2,
662 #else
663  1,
664 #endif
665  {
666 #if GLES2_INCLUDE_NVIDIA_SHADERS
667  &GLES2_FragmentTegra_Alpha_TextureSrc,
668 #endif
669  &GLES2_FragmentSrc_TextureABGRSrc
670  }
671 };
672 
673 static GLES2_Shader GLES2_FragmentShader_Additive_TextureABGRSrc = {
674 #if GLES2_INCLUDE_NVIDIA_SHADERS
675  2,
676 #else
677  1,
678 #endif
679  {
680 #if GLES2_INCLUDE_NVIDIA_SHADERS
681  &GLES2_FragmentTegra_Additive_TextureSrc,
682 #endif
683  &GLES2_FragmentSrc_TextureABGRSrc
684  }
685 };
686 
687 static GLES2_Shader GLES2_FragmentShader_Modulated_TextureABGRSrc = {
688 #if GLES2_INCLUDE_NVIDIA_SHADERS
689  2,
690 #else
691  1,
692 #endif
693  {
694 #if GLES2_INCLUDE_NVIDIA_SHADERS
695  &GLES2_FragmentTegra_Modulated_TextureSrc,
696 #endif
697  &GLES2_FragmentSrc_TextureABGRSrc
698  }
699 };
700 
701 static GLES2_Shader GLES2_FragmentShader_None_TextureARGBSrc = {
702  1,
703  {
704  &GLES2_FragmentSrc_TextureARGBSrc
705  }
706 };
707 
708 static GLES2_Shader GLES2_FragmentShader_Alpha_TextureARGBSrc = {
709  1,
710  {
711  &GLES2_FragmentSrc_TextureARGBSrc
712  }
713 };
714 
715 static GLES2_Shader GLES2_FragmentShader_Additive_TextureARGBSrc = {
716  1,
717  {
718  &GLES2_FragmentSrc_TextureARGBSrc
719  }
720 };
721 
722 static GLES2_Shader GLES2_FragmentShader_Modulated_TextureARGBSrc = {
723  1,
724  {
725  &GLES2_FragmentSrc_TextureARGBSrc
726  }
727 };
728 
729 static GLES2_Shader GLES2_FragmentShader_None_TextureRGBSrc = {
730  1,
731  {
732  &GLES2_FragmentSrc_TextureRGBSrc
733  }
734 };
735 
736 static GLES2_Shader GLES2_FragmentShader_Alpha_TextureRGBSrc = {
737  1,
738  {
739  &GLES2_FragmentSrc_TextureRGBSrc
740  }
741 };
742 
743 static GLES2_Shader GLES2_FragmentShader_Additive_TextureRGBSrc = {
744  1,
745  {
746  &GLES2_FragmentSrc_TextureRGBSrc
747  }
748 };
749 
750 static GLES2_Shader GLES2_FragmentShader_Modulated_TextureRGBSrc = {
751  1,
752  {
753  &GLES2_FragmentSrc_TextureRGBSrc
754  }
755 };
756 
757 static GLES2_Shader GLES2_FragmentShader_None_TextureBGRSrc = {
758  1,
759  {
760  &GLES2_FragmentSrc_TextureBGRSrc
761  }
762 };
763 
764 static GLES2_Shader GLES2_FragmentShader_Alpha_TextureBGRSrc = {
765  1,
766  {
767  &GLES2_FragmentSrc_TextureBGRSrc
768  }
769 };
770 
771 static GLES2_Shader GLES2_FragmentShader_Additive_TextureBGRSrc = {
772  1,
773  {
774  &GLES2_FragmentSrc_TextureBGRSrc
775  }
776 };
777 
778 static GLES2_Shader GLES2_FragmentShader_Modulated_TextureBGRSrc = {
779  1,
780  {
781  &GLES2_FragmentSrc_TextureBGRSrc
782  }
783 };
784 
785 static GLES2_Shader GLES2_FragmentShader_TextureYUVSrc = {
786  1,
787  {
788  &GLES2_FragmentSrc_TextureYUVSrc
789  }
790 };
791 
792 static GLES2_Shader GLES2_FragmentShader_TextureNV12Src = {
793  1,
794  {
795  &GLES2_FragmentSrc_TextureNV12Src
796  }
797 };
798 
799 static GLES2_Shader GLES2_FragmentShader_TextureNV21Src = {
800  1,
801  {
802  &GLES2_FragmentSrc_TextureNV21Src
803  }
804 };
805 
806 
807 /*************************************************************************************************
808  * Shader selector *
809  *************************************************************************************************/
810 
811 const GLES2_Shader *GLES2_GetShader(GLES2_ShaderType type, SDL_BlendMode blendMode)
812 {
813  switch (type) {
814  case GLES2_SHADER_VERTEX_DEFAULT:
815  return &GLES2_VertexShader_Default;
816  case GLES2_SHADER_FRAGMENT_SOLID_SRC:
817  switch (blendMode) {
818  case SDL_BLENDMODE_NONE:
819  return &GLES2_FragmentShader_None_SolidSrc;
820  case SDL_BLENDMODE_BLEND:
821  return &GLES2_FragmentShader_Alpha_SolidSrc;
822  case SDL_BLENDMODE_ADD:
823  return &GLES2_FragmentShader_Additive_SolidSrc;
824  case SDL_BLENDMODE_MOD:
825  return &GLES2_FragmentShader_Modulated_SolidSrc;
826  default:
827  return NULL;
828  }
829  case GLES2_SHADER_FRAGMENT_TEXTURE_ABGR_SRC:
830  switch (blendMode) {
831  case SDL_BLENDMODE_NONE:
832  return &GLES2_FragmentShader_None_TextureABGRSrc;
833  case SDL_BLENDMODE_BLEND:
834  return &GLES2_FragmentShader_Alpha_TextureABGRSrc;
835  case SDL_BLENDMODE_ADD:
836  return &GLES2_FragmentShader_Additive_TextureABGRSrc;
837  case SDL_BLENDMODE_MOD:
838  return &GLES2_FragmentShader_Modulated_TextureABGRSrc;
839  default:
840  return NULL;
841  }
842  case GLES2_SHADER_FRAGMENT_TEXTURE_ARGB_SRC:
843  switch (blendMode) {
844  case SDL_BLENDMODE_NONE:
845  return &GLES2_FragmentShader_None_TextureARGBSrc;
846  case SDL_BLENDMODE_BLEND:
847  return &GLES2_FragmentShader_Alpha_TextureARGBSrc;
848  case SDL_BLENDMODE_ADD:
849  return &GLES2_FragmentShader_Additive_TextureARGBSrc;
850  case SDL_BLENDMODE_MOD:
851  return &GLES2_FragmentShader_Modulated_TextureARGBSrc;
852  default:
853  return NULL;
854  }
855 
856  case GLES2_SHADER_FRAGMENT_TEXTURE_RGB_SRC:
857  switch (blendMode) {
858  case SDL_BLENDMODE_NONE:
859  return &GLES2_FragmentShader_None_TextureRGBSrc;
860  case SDL_BLENDMODE_BLEND:
861  return &GLES2_FragmentShader_Alpha_TextureRGBSrc;
862  case SDL_BLENDMODE_ADD:
863  return &GLES2_FragmentShader_Additive_TextureRGBSrc;
864  case SDL_BLENDMODE_MOD:
865  return &GLES2_FragmentShader_Modulated_TextureRGBSrc;
866  default:
867  return NULL;
868  }
869 
870  case GLES2_SHADER_FRAGMENT_TEXTURE_BGR_SRC:
871  switch (blendMode) {
872  case SDL_BLENDMODE_NONE:
873  return &GLES2_FragmentShader_None_TextureBGRSrc;
874  case SDL_BLENDMODE_BLEND:
875  return &GLES2_FragmentShader_Alpha_TextureBGRSrc;
876  case SDL_BLENDMODE_ADD:
877  return &GLES2_FragmentShader_Additive_TextureBGRSrc;
878  case SDL_BLENDMODE_MOD:
879  return &GLES2_FragmentShader_Modulated_TextureBGRSrc;
880  default:
881  return NULL;
882  }
883 
884  case GLES2_SHADER_FRAGMENT_TEXTURE_YUV_SRC:
885  {
886  return &GLES2_FragmentShader_TextureYUVSrc;
887  }
888 
889  case GLES2_SHADER_FRAGMENT_TEXTURE_NV12_SRC:
890  {
891  return &GLES2_FragmentShader_TextureNV12Src;
892  }
893 
894  case GLES2_SHADER_FRAGMENT_TEXTURE_NV21_SRC:
895  {
896  return &GLES2_FragmentShader_TextureNV21Src;
897  }
898 
899  default:
900  return NULL;
901  }
902 }
903 
904 #endif /* SDL_VIDEO_RENDER_OGL_ES2 && !SDL_RENDER_DISABLED */
905 
906 /* vi: set ts=4 sw=4 expandtab: */
#define GL_VERTEX_SHADER
SDL_BlendMode
The blend mode used in SDL_RenderCopy() and drawing operations.
Definition: SDL_blendmode.h:40
static SDL_BlendMode blendMode
Definition: testdraw2.c:34
uint8_t Uint8
An unsigned 8-bit integer type.
Definition: SDL_stdinc.h:139
#define GL_FRAGMENT_SHADER
#define NULL
Definition: begin_code.h:143
GLuint GLuint GLsizei GLenum type
Definition: SDL_opengl.h:1564