21 #include "../../SDL_internal.h"
23 #if SDL_VIDEO_RENDER_OGL_ES2 && !SDL_RENDER_DISABLED
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; \
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);\
55 static const Uint8 GLES2_FragmentSrc_SolidSrc_[] =
" \
56 precision mediump float; \
57 uniform vec4 u_color; \
61 gl_FragColor = u_color; \
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; \
73 gl_FragColor = texture2D(u_texture, v_texCoord); \
74 gl_FragColor *= u_modulation; \
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; \
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; \
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; \
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; \
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; \
122 vec4 abgr = texture2D(u_texture, v_texCoord); \
123 gl_FragColor = abgr; \
124 gl_FragColor.a = 1.0; \
125 gl_FragColor *= u_modulation; \
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; \
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; \
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; \
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; \
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; \
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; \
197 static const GLES2_ShaderInstance GLES2_VertexSrc_Default = {
200 sizeof(GLES2_VertexSrc_Default_),
201 GLES2_VertexSrc_Default_
204 static const GLES2_ShaderInstance GLES2_FragmentSrc_SolidSrc = {
207 sizeof(GLES2_FragmentSrc_SolidSrc_),
208 GLES2_FragmentSrc_SolidSrc_
211 static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureABGRSrc = {
214 sizeof(GLES2_FragmentSrc_TextureABGRSrc_),
215 GLES2_FragmentSrc_TextureABGRSrc_
218 static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureARGBSrc = {
221 sizeof(GLES2_FragmentSrc_TextureARGBSrc_),
222 GLES2_FragmentSrc_TextureARGBSrc_
225 static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureRGBSrc = {
228 sizeof(GLES2_FragmentSrc_TextureRGBSrc_),
229 GLES2_FragmentSrc_TextureRGBSrc_
232 static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureBGRSrc = {
235 sizeof(GLES2_FragmentSrc_TextureBGRSrc_),
236 GLES2_FragmentSrc_TextureBGRSrc_
239 static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureYUVSrc = {
242 sizeof(GLES2_FragmentSrc_TextureYUVSrc_),
243 GLES2_FragmentSrc_TextureYUVSrc_
246 static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureNV12Src = {
249 sizeof(GLES2_FragmentSrc_TextureNV12Src_),
250 GLES2_FragmentSrc_TextureNV12Src_
253 static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureNV21Src = {
256 sizeof(GLES2_FragmentSrc_TextureNV21Src_),
257 GLES2_FragmentSrc_TextureNV21Src_
265 static GLES2_Shader GLES2_VertexShader_Default = {
268 &GLES2_VertexSrc_Default
272 static GLES2_Shader GLES2_FragmentShader_SolidSrc = {
275 &GLES2_FragmentSrc_SolidSrc
279 static GLES2_Shader GLES2_FragmentShader_TextureABGRSrc = {
282 &GLES2_FragmentSrc_TextureABGRSrc
286 static GLES2_Shader GLES2_FragmentShader_TextureARGBSrc = {
289 &GLES2_FragmentSrc_TextureARGBSrc
293 static GLES2_Shader GLES2_FragmentShader_TextureRGBSrc = {
296 &GLES2_FragmentSrc_TextureRGBSrc
300 static GLES2_Shader GLES2_FragmentShader_TextureBGRSrc = {
303 &GLES2_FragmentSrc_TextureBGRSrc
307 static GLES2_Shader GLES2_FragmentShader_TextureYUVSrc = {
310 &GLES2_FragmentSrc_TextureYUVSrc
314 static GLES2_Shader GLES2_FragmentShader_TextureNV12Src = {
317 &GLES2_FragmentSrc_TextureNV12Src
321 static GLES2_Shader GLES2_FragmentShader_TextureNV21Src = {
324 &GLES2_FragmentSrc_TextureNV21Src
333 const GLES2_Shader *GLES2_GetShader(GLES2_ShaderType
type)
336 case GLES2_SHADER_VERTEX_DEFAULT:
337 return &GLES2_VertexShader_Default;
338 case GLES2_SHADER_FRAGMENT_SOLID_SRC:
339 return &GLES2_FragmentShader_SolidSrc;
340 case GLES2_SHADER_FRAGMENT_TEXTURE_ABGR_SRC:
341 return &GLES2_FragmentShader_TextureABGRSrc;
342 case GLES2_SHADER_FRAGMENT_TEXTURE_ARGB_SRC:
343 return &GLES2_FragmentShader_TextureARGBSrc;
344 case GLES2_SHADER_FRAGMENT_TEXTURE_RGB_SRC:
345 return &GLES2_FragmentShader_TextureRGBSrc;
346 case GLES2_SHADER_FRAGMENT_TEXTURE_BGR_SRC:
347 return &GLES2_FragmentShader_TextureBGRSrc;
348 case GLES2_SHADER_FRAGMENT_TEXTURE_YUV_SRC:
349 return &GLES2_FragmentShader_TextureYUVSrc;
350 case GLES2_SHADER_FRAGMENT_TEXTURE_NV12_SRC:
351 return &GLES2_FragmentShader_TextureNV12Src;
352 case GLES2_SHADER_FRAGMENT_TEXTURE_NV21_SRC:
353 return &GLES2_FragmentShader_TextureNV21Src;
#define GL_FRAGMENT_SHADER
GLuint GLuint GLsizei GLenum type