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;
uint8_t Uint8
An unsigned 8-bit integer type.
#define GL_FRAGMENT_SHADER
GLuint GLuint GLsizei GLenum type