cscg22-gearboy

CSCG 2022 Challenge 'Gearboy'
git clone https://git.sinitax.com/sinitax/cscg22-gearboy
Log | Files | Refs | sfeed.txt

SDL_shaders_gles2.c (39164B)


      1/*
      2  Simple DirectMedia Layer
      3  Copyright (C) 1997-2014 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
     34static 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
     55static 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
     65static 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 */
     79static 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 */
     96static 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 */
    114static 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 */
    130static 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 */
    154static 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 */
    176static 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
    197static const GLES2_ShaderInstance GLES2_VertexSrc_Default = {
    198    GL_VERTEX_SHADER,
    199    GLES2_SOURCE_SHADER,
    200    sizeof(GLES2_VertexSrc_Default_),
    201    GLES2_VertexSrc_Default_
    202};
    203
    204static const GLES2_ShaderInstance GLES2_FragmentSrc_SolidSrc = {
    205    GL_FRAGMENT_SHADER,
    206    GLES2_SOURCE_SHADER,
    207    sizeof(GLES2_FragmentSrc_SolidSrc_),
    208    GLES2_FragmentSrc_SolidSrc_
    209};
    210
    211static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureABGRSrc = {
    212    GL_FRAGMENT_SHADER,
    213    GLES2_SOURCE_SHADER,
    214    sizeof(GLES2_FragmentSrc_TextureABGRSrc_),
    215    GLES2_FragmentSrc_TextureABGRSrc_
    216};
    217
    218static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureARGBSrc = {
    219    GL_FRAGMENT_SHADER,
    220    GLES2_SOURCE_SHADER,
    221    sizeof(GLES2_FragmentSrc_TextureARGBSrc_),
    222    GLES2_FragmentSrc_TextureARGBSrc_
    223};
    224
    225static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureRGBSrc = {
    226    GL_FRAGMENT_SHADER,
    227    GLES2_SOURCE_SHADER,
    228    sizeof(GLES2_FragmentSrc_TextureRGBSrc_),
    229    GLES2_FragmentSrc_TextureRGBSrc_
    230};
    231
    232static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureBGRSrc = {
    233    GL_FRAGMENT_SHADER,
    234    GLES2_SOURCE_SHADER,
    235    sizeof(GLES2_FragmentSrc_TextureBGRSrc_),
    236    GLES2_FragmentSrc_TextureBGRSrc_
    237};
    238
    239static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureYUVSrc = {
    240    GL_FRAGMENT_SHADER,
    241    GLES2_SOURCE_SHADER,
    242    sizeof(GLES2_FragmentSrc_TextureYUVSrc_),
    243    GLES2_FragmentSrc_TextureYUVSrc_
    244};
    245
    246static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureNV12Src = {
    247    GL_FRAGMENT_SHADER,
    248    GLES2_SOURCE_SHADER,
    249    sizeof(GLES2_FragmentSrc_TextureNV12Src_),
    250    GLES2_FragmentSrc_TextureNV12Src_
    251};
    252
    253static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureNV21Src = {
    254    GL_FRAGMENT_SHADER,
    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
    269static 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
    296static 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
    319static 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
    346static 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
    369static 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
    392static 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
    419static 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
    448static 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
    477static 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
    506static const GLES2_ShaderInstance GLES2_VertexTegra_Default = {
    507    GL_VERTEX_SHADER,
    508    GL_NVIDIA_PLATFORM_BINARY_NV,
    509    sizeof(GLES2_VertexTegra_Default_),
    510    GLES2_VertexTegra_Default_
    511};
    512
    513static const GLES2_ShaderInstance GLES2_FragmentTegra_None_SolidSrc = {
    514    GL_FRAGMENT_SHADER,
    515    GL_NVIDIA_PLATFORM_BINARY_NV,
    516    sizeof(GLES2_FragmentTegra_None_SolidSrc_),
    517    GLES2_FragmentTegra_None_SolidSrc_
    518};
    519
    520static const GLES2_ShaderInstance GLES2_FragmentTegra_Alpha_SolidSrc = {
    521    GL_FRAGMENT_SHADER,
    522    GL_NVIDIA_PLATFORM_BINARY_NV,
    523    sizeof(GLES2_FragmentTegra_Alpha_SolidSrc_),
    524    GLES2_FragmentTegra_Alpha_SolidSrc_
    525};
    526
    527static const GLES2_ShaderInstance GLES2_FragmentTegra_Additive_SolidSrc = {
    528    GL_FRAGMENT_SHADER,
    529    GL_NVIDIA_PLATFORM_BINARY_NV,
    530    sizeof(GLES2_FragmentTegra_Additive_SolidSrc_),
    531    GLES2_FragmentTegra_Additive_SolidSrc_
    532};
    533
    534static const GLES2_ShaderInstance GLES2_FragmentTegra_Modulated_SolidSrc = {
    535    GL_FRAGMENT_SHADER,
    536    GL_NVIDIA_PLATFORM_BINARY_NV,
    537    sizeof(GLES2_FragmentTegra_Modulated_SolidSrc_),
    538    GLES2_FragmentTegra_Modulated_SolidSrc_
    539};
    540
    541static const GLES2_ShaderInstance GLES2_FragmentTegra_None_TextureSrc = {
    542    GL_FRAGMENT_SHADER,
    543    GL_NVIDIA_PLATFORM_BINARY_NV,
    544    sizeof(GLES2_FragmentTegra_None_TextureSrc_),
    545    GLES2_FragmentTegra_None_TextureSrc_
    546};
    547
    548static const GLES2_ShaderInstance GLES2_FragmentTegra_Alpha_TextureSrc = {
    549    GL_FRAGMENT_SHADER,
    550    GL_NVIDIA_PLATFORM_BINARY_NV,
    551    sizeof(GLES2_FragmentTegra_Alpha_TextureSrc_),
    552    GLES2_FragmentTegra_Alpha_TextureSrc_
    553};
    554
    555static const GLES2_ShaderInstance GLES2_FragmentTegra_Additive_TextureSrc = {
    556    GL_FRAGMENT_SHADER,
    557    GL_NVIDIA_PLATFORM_BINARY_NV,
    558    sizeof(GLES2_FragmentTegra_Additive_TextureSrc_),
    559    GLES2_FragmentTegra_Additive_TextureSrc_
    560};
    561
    562static const GLES2_ShaderInstance GLES2_FragmentTegra_Modulated_TextureSrc = {
    563    GL_FRAGMENT_SHADER,
    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
    575static 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
    589static 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
    603static 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
    617static 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
    631static 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
    645static 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
    659static 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
    673static 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
    687static 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
    701static GLES2_Shader GLES2_FragmentShader_None_TextureARGBSrc = {
    702    1,
    703    {
    704        &GLES2_FragmentSrc_TextureARGBSrc
    705    }
    706};
    707
    708static GLES2_Shader GLES2_FragmentShader_Alpha_TextureARGBSrc = {
    709    1,
    710    {
    711        &GLES2_FragmentSrc_TextureARGBSrc
    712    }
    713};
    714
    715static GLES2_Shader GLES2_FragmentShader_Additive_TextureARGBSrc = {
    716    1,
    717    {
    718        &GLES2_FragmentSrc_TextureARGBSrc
    719    }
    720};
    721
    722static GLES2_Shader GLES2_FragmentShader_Modulated_TextureARGBSrc = {
    723    1,
    724    {
    725        &GLES2_FragmentSrc_TextureARGBSrc
    726    }
    727};
    728
    729static GLES2_Shader GLES2_FragmentShader_None_TextureRGBSrc = {
    730    1,
    731    {
    732        &GLES2_FragmentSrc_TextureRGBSrc
    733    }
    734};
    735
    736static GLES2_Shader GLES2_FragmentShader_Alpha_TextureRGBSrc = {
    737    1,
    738    {
    739        &GLES2_FragmentSrc_TextureRGBSrc
    740    }
    741};
    742
    743static GLES2_Shader GLES2_FragmentShader_Additive_TextureRGBSrc = {
    744    1,
    745    {
    746        &GLES2_FragmentSrc_TextureRGBSrc
    747    }
    748};
    749
    750static GLES2_Shader GLES2_FragmentShader_Modulated_TextureRGBSrc = {
    751    1,
    752    {
    753        &GLES2_FragmentSrc_TextureRGBSrc
    754    }
    755};
    756
    757static GLES2_Shader GLES2_FragmentShader_None_TextureBGRSrc = {
    758    1,
    759    {
    760        &GLES2_FragmentSrc_TextureBGRSrc
    761    }
    762};
    763
    764static GLES2_Shader GLES2_FragmentShader_Alpha_TextureBGRSrc = {
    765    1,
    766    {
    767        &GLES2_FragmentSrc_TextureBGRSrc
    768    }
    769};
    770
    771static GLES2_Shader GLES2_FragmentShader_Additive_TextureBGRSrc = {
    772    1,
    773    {
    774        &GLES2_FragmentSrc_TextureBGRSrc
    775    }
    776};
    777
    778static GLES2_Shader GLES2_FragmentShader_Modulated_TextureBGRSrc = {
    779    1,
    780    {
    781        &GLES2_FragmentSrc_TextureBGRSrc
    782    }
    783};
    784
    785static GLES2_Shader GLES2_FragmentShader_TextureYUVSrc = {
    786    1,
    787    {
    788        &GLES2_FragmentSrc_TextureYUVSrc
    789    }
    790};
    791
    792static GLES2_Shader GLES2_FragmentShader_TextureNV12Src = {
    793    1,
    794    {
    795        &GLES2_FragmentSrc_TextureNV12Src
    796    }
    797};
    798
    799static GLES2_Shader GLES2_FragmentShader_TextureNV21Src = {
    800    1,
    801    {
    802        &GLES2_FragmentSrc_TextureNV21Src
    803    }
    804};
    805
    806
    807/*************************************************************************************************
    808 * Shader selector                                                                               *
    809 *************************************************************************************************/
    810
    811const GLES2_Shader *GLES2_GetShader(GLES2_ShaderType type, SDL_BlendMode blendMode)
    812{
    813    switch (type)
    814    {
    815    case GLES2_SHADER_VERTEX_DEFAULT:
    816        return &GLES2_VertexShader_Default;
    817    case GLES2_SHADER_FRAGMENT_SOLID_SRC:
    818    switch (blendMode)
    819    {
    820    case SDL_BLENDMODE_NONE:
    821        return &GLES2_FragmentShader_None_SolidSrc;
    822    case SDL_BLENDMODE_BLEND:
    823        return &GLES2_FragmentShader_Alpha_SolidSrc;
    824    case SDL_BLENDMODE_ADD:
    825        return &GLES2_FragmentShader_Additive_SolidSrc;
    826    case SDL_BLENDMODE_MOD:
    827        return &GLES2_FragmentShader_Modulated_SolidSrc;
    828    default:
    829        return NULL;
    830    }
    831    case GLES2_SHADER_FRAGMENT_TEXTURE_ABGR_SRC:
    832        switch (blendMode)
    833    {
    834        case SDL_BLENDMODE_NONE:
    835            return &GLES2_FragmentShader_None_TextureABGRSrc;
    836        case SDL_BLENDMODE_BLEND:
    837            return &GLES2_FragmentShader_Alpha_TextureABGRSrc;
    838        case SDL_BLENDMODE_ADD:
    839            return &GLES2_FragmentShader_Additive_TextureABGRSrc;
    840        case SDL_BLENDMODE_MOD:
    841            return &GLES2_FragmentShader_Modulated_TextureABGRSrc;
    842        default:
    843            return NULL;
    844    }
    845    case GLES2_SHADER_FRAGMENT_TEXTURE_ARGB_SRC:
    846        switch (blendMode)
    847    {
    848        case SDL_BLENDMODE_NONE:
    849            return &GLES2_FragmentShader_None_TextureARGBSrc;
    850        case SDL_BLENDMODE_BLEND:
    851            return &GLES2_FragmentShader_Alpha_TextureARGBSrc;
    852        case SDL_BLENDMODE_ADD:
    853            return &GLES2_FragmentShader_Additive_TextureARGBSrc;
    854        case SDL_BLENDMODE_MOD:
    855            return &GLES2_FragmentShader_Modulated_TextureARGBSrc;
    856        default:
    857            return NULL;
    858    }
    859
    860    case GLES2_SHADER_FRAGMENT_TEXTURE_RGB_SRC:
    861        switch (blendMode)
    862    {
    863        case SDL_BLENDMODE_NONE:
    864            return &GLES2_FragmentShader_None_TextureRGBSrc;
    865        case SDL_BLENDMODE_BLEND:
    866            return &GLES2_FragmentShader_Alpha_TextureRGBSrc;
    867        case SDL_BLENDMODE_ADD:
    868            return &GLES2_FragmentShader_Additive_TextureRGBSrc;
    869        case SDL_BLENDMODE_MOD:
    870            return &GLES2_FragmentShader_Modulated_TextureRGBSrc;
    871        default:
    872            return NULL;
    873    }
    874
    875    case GLES2_SHADER_FRAGMENT_TEXTURE_BGR_SRC:
    876        switch (blendMode)
    877    {
    878        case SDL_BLENDMODE_NONE:
    879            return &GLES2_FragmentShader_None_TextureBGRSrc;
    880        case SDL_BLENDMODE_BLEND:
    881            return &GLES2_FragmentShader_Alpha_TextureBGRSrc;
    882        case SDL_BLENDMODE_ADD:
    883            return &GLES2_FragmentShader_Additive_TextureBGRSrc;
    884        case SDL_BLENDMODE_MOD:
    885            return &GLES2_FragmentShader_Modulated_TextureBGRSrc;
    886        default:
    887            return NULL;
    888    }
    889    
    890    case GLES2_SHADER_FRAGMENT_TEXTURE_YUV_SRC:
    891    {
    892        return &GLES2_FragmentShader_TextureYUVSrc;
    893    }
    894
    895    case GLES2_SHADER_FRAGMENT_TEXTURE_NV12_SRC:
    896    {
    897        return &GLES2_FragmentShader_TextureNV12Src;
    898    }
    899
    900    case GLES2_SHADER_FRAGMENT_TEXTURE_NV21_SRC:
    901    {
    902        return &GLES2_FragmentShader_TextureNV21Src;
    903    }
    904
    905    default:
    906        return NULL;
    907    }
    908}
    909
    910#endif /* SDL_VIDEO_RENDER_OGL_ES2 && !SDL_RENDER_DISABLED */
    911
    912/* vi: set ts=4 sw=4 expandtab: */