this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Added GLES 3 renderer for testing.

+238
+157
include/SDL_gpu_GLES_3.h
··· 1 + #ifndef _SDL_GPU_GLES_3_H__ 2 + #define _SDL_GPU_GLES_3_H__ 3 + 4 + #include "SDL_gpu.h" 5 + #include "SDL_platform.h" 6 + 7 + #if !defined(SDL_GPU_DISABLE_GLES) && !defined(SDL_GPU_DISABLE_GLES_3) 8 + 9 + #ifdef __IPHONEOS__ 10 + #include <OpenGLES/ES3/gl.h> 11 + #include <OpenGLES/ES3/glext.h> 12 + #else 13 + #include "GLES3/gl3.h" 14 + #include "GLES3/gl3ext.h" 15 + #endif 16 + 17 + #define glVertexAttribI1i glVertexAttrib1f 18 + #define glVertexAttribI2i glVertexAttrib2f 19 + #define glVertexAttribI3i glVertexAttrib3f 20 + #define glVertexAttribI1ui glVertexAttrib1f 21 + #define glVertexAttribI2ui glVertexAttrib2f 22 + #define glVertexAttribI3ui glVertexAttrib3f 23 + #define glMapBuffer glMapBufferOES 24 + #define glUnmapBuffer glUnmapBufferOES 25 + #define GL_WRITE_ONLY GL_WRITE_ONLY_OES 26 + #endif 27 + 28 + 29 + 30 + #define GPU_CONTEXT_DATA ContextData_GLES_3 31 + #define GPU_IMAGE_DATA ImageData_GLES_3 32 + #define GPU_TARGET_DATA TargetData_GLES_3 33 + 34 + 35 + #define GPU_DEFAULT_TEXTURED_VERTEX_SHADER_SOURCE \ 36 + "#version 300 es\n\ 37 + precision mediump float;\n\ 38 + precision mediump int;\n\ 39 + \ 40 + in vec2 gpu_Vertex;\n\ 41 + in vec2 gpu_TexCoord;\n\ 42 + in vec4 gpu_Color;\n\ 43 + uniform mat4 gpu_ModelViewProjectionMatrix;\n\ 44 + \ 45 + out vec4 color;\n\ 46 + out vec2 texCoord;\n\ 47 + \ 48 + void main(void)\n\ 49 + {\n\ 50 + color = gpu_Color;\n\ 51 + texCoord = vec2(gpu_TexCoord);\n\ 52 + gl_Position = gpu_ModelViewProjectionMatrix * vec4(gpu_Vertex, 0.0, 1.0);\n\ 53 + }" 54 + 55 + // Tier 3 uses shader attributes to send position, texcoord, and color data for each vertex. 56 + #define GPU_DEFAULT_UNTEXTURED_VERTEX_SHADER_SOURCE \ 57 + "#version 300 es\n\ 58 + precision mediump float;\n\ 59 + precision mediump int;\n\ 60 + \ 61 + in vec2 gpu_Vertex;\n\ 62 + in vec4 gpu_Color;\n\ 63 + uniform mat4 gpu_ModelViewProjectionMatrix;\n\ 64 + \ 65 + out vec4 color;\n\ 66 + \ 67 + void main(void)\n\ 68 + {\n\ 69 + color = gpu_Color;\n\ 70 + gl_Position = gpu_ModelViewProjectionMatrix * vec4(gpu_Vertex, 0.0, 1.0);\n\ 71 + }" 72 + 73 + 74 + #define GPU_DEFAULT_TEXTURED_FRAGMENT_SHADER_SOURCE \ 75 + "#version 300 es\n\ 76 + precision mediump float;\n\ 77 + precision mediump int;\n\ 78 + \ 79 + in vec4 color;\n\ 80 + in vec2 texCoord;\n\ 81 + \ 82 + uniform sampler2D tex;\n\ 83 + \ 84 + out vec4 fragColor;\n\ 85 + \ 86 + void main(void)\n\ 87 + {\n\ 88 + fragColor = texture(tex, texCoord) * color;\n\ 89 + }" 90 + 91 + #define GPU_DEFAULT_UNTEXTURED_FRAGMENT_SHADER_SOURCE \ 92 + "#version 300 es\n\ 93 + precision mediump float;\n\ 94 + precision mediump int;\n\ 95 + \ 96 + in vec4 color;\n\ 97 + \ 98 + out vec4 fragColor;\n\ 99 + \ 100 + void main(void)\n\ 101 + {\n\ 102 + fragColor = color;\n\ 103 + }" 104 + 105 + 106 + 107 + 108 + typedef struct ContextData_GLES_3 109 + { 110 + SDL_Color last_color; 111 + Uint8 last_use_texturing; 112 + unsigned int last_shape; 113 + Uint8 last_use_blending; 114 + GPU_BlendMode last_blend_mode; 115 + GPU_Rect last_viewport; 116 + GPU_Camera last_camera; 117 + Uint8 last_camera_inverted; 118 + 119 + GPU_Image* last_image; 120 + GPU_Target* last_target; 121 + float* blit_buffer; // Holds sets of 4 vertices, each with interleaved position, tex coords, and colors (e.g. [x0, y0, z0, s0, t0, r0, g0, b0, a0, ...]). 122 + unsigned short blit_buffer_num_vertices; 123 + unsigned short blit_buffer_max_num_vertices; 124 + unsigned short* index_buffer; // Indexes into the blit buffer so we can use 4 vertices for every 2 triangles (1 quad) 125 + unsigned int index_buffer_num_vertices; 126 + unsigned int index_buffer_max_num_vertices; 127 + 128 + // Tier 3 rendering 129 + unsigned int blit_VAO; 130 + unsigned int blit_VBO[2]; // For double-buffering 131 + unsigned int blit_IBO; 132 + Uint8 blit_VBO_flop; 133 + GPU_ShaderBlock shader_block[2]; 134 + GPU_ShaderBlock current_shader_block; 135 + 136 + GPU_AttributeSource shader_attributes[16]; 137 + unsigned int attribute_VBO[16]; 138 + } ContextData_GLES_3; 139 + 140 + typedef struct ImageData_GLES_3 141 + { 142 + int refcount; 143 + Uint8 owns_handle; 144 + Uint32 handle; 145 + Uint32 format; 146 + } ImageData_GLES_3; 147 + 148 + typedef struct TargetData_GLES_3 149 + { 150 + int refcount; 151 + Uint32 handle; 152 + Uint32 format; 153 + } TargetData_GLES_3; 154 + 155 + 156 + 157 + #endif
+3
src/CMakeLists.txt
··· 10 10 renderer_OpenGL_3.c 11 11 renderer_GLES_1.c 12 12 renderer_GLES_2.c 13 + renderer_GLES_3.c 13 14 ) 14 15 15 16 set(SDL_gpu_HDRS ··· 22 23 ../include/SDL_gpu_OpenGL_3.h 23 24 ../include/SDL_gpu_GLES_1.h 24 25 ../include/SDL_gpu_GLES_2.h 26 + ../include/SDL_gpu_GLES_3.h 25 27 renderer_GL_common.inl 26 28 renderer_shapes_GL_common.inl 27 29 ) ··· 52 54 ../include/SDL_gpu_OpenGL_3.h 53 55 ../include/SDL_gpu_GLES_1.h 54 56 ../include/SDL_gpu_GLES_2.h 57 + ../include/SDL_gpu_GLES_3.h 55 58 ) 56 59 57 60 # Set the appropriate library name for the version of SDL used
+8
src/SDL_gpu_renderer.c
··· 137 137 void GPU_FreeRenderer_GLES_1(GPU_Renderer* renderer); 138 138 GPU_Renderer* GPU_CreateRenderer_GLES_2(GPU_RendererID request); 139 139 void GPU_FreeRenderer_GLES_2(GPU_Renderer* renderer); 140 + GPU_Renderer* GPU_CreateRenderer_GLES_3(GPU_RendererID request); 141 + void GPU_FreeRenderer_GLES_3(GPU_Renderer* renderer); 140 142 141 143 void GPU_RegisterRenderer(GPU_RendererID id, GPU_Renderer* (*create_renderer)(GPU_RendererID request), void (*free_renderer)(GPU_Renderer* renderer)) 142 144 { ··· 211 213 GPU_RegisterRenderer(GPU_MakeRendererID("OpenGLES 2", GPU_RENDERER_GLES_2, 2, 0), 212 214 &GPU_CreateRenderer_GLES_2, 213 215 &GPU_FreeRenderer_GLES_2); 216 + #endif 217 + #ifndef SDL_GPU_DISABLE_GLES_3 218 + GPU_RegisterRenderer(GPU_MakeRendererID("OpenGLES 3", GPU_RENDERER_GLES_3, 3, 0), 219 + &GPU_CreateRenderer_GLES_3, 220 + &GPU_FreeRenderer_GLES_3); 214 221 #endif 215 222 #endif 216 223 ··· 305 312 GPU_RendererID default_order[GPU_RENDERER_ORDER_MAX]; 306 313 307 314 #if defined(__ANDROID__) || defined(__IPHONEOS__) 315 + default_order[count++] = GPU_MakeRendererID("OpenGLES 3", GPU_RENDERER_GLES_3, 3, 0); 308 316 default_order[count++] = GPU_MakeRendererID("OpenGLES 2", GPU_RENDERER_GLES_2, 2, 0); 309 317 default_order[count++] = GPU_MakeRendererID("OpenGLES 1", GPU_RENDERER_GLES_1, 1, 1); 310 318 #else
+62
src/renderer_GLES_3.c
··· 1 + #include "SDL_gpu_GLES_3.h" 2 + #include "SDL_gpu_RendererImpl.h" 3 + 4 + 5 + #if defined(SDL_GPU_DISABLE_GLES) || defined(SDL_GPU_DISABLE_GLES_3) 6 + 7 + // Dummy implementations 8 + GPU_Renderer* GPU_CreateRenderer_GLES_3(GPU_RendererID request) {return NULL;} 9 + void GPU_FreeRenderer_GLES_3(GPU_Renderer* renderer) {} 10 + 11 + #else 12 + 13 + 14 + // Most of the code pulled in from here... 15 + #define SDL_GPU_USE_GLES 16 + #define SDL_GPU_GL_TIER 3 17 + #define SDL_GPU_GLES_MAJOR_VERSION 3 18 + #define SDL_GPU_GLSL_VERSION 300 19 + 20 + #define SDL_GPU_USE_BUFFER_PIPELINE 21 + #ifdef __IPHONEOS__ 22 + #define SDL_GPU_USE_BUFFER_RESET 23 + #endif 24 + #define SDL_GPU_SKIP_ENABLE_TEXTURE_2D 25 + #define SDL_GPU_ASSUME_SHADERS 26 + 27 + #include "renderer_GL_common.inl" 28 + #include "renderer_shapes_GL_common.inl" 29 + 30 + 31 + GPU_Renderer* GPU_CreateRenderer_GLES_3(GPU_RendererID request) 32 + { 33 + GPU_Renderer* renderer = (GPU_Renderer*)SDL_malloc(sizeof(GPU_Renderer)); 34 + if(renderer == NULL) 35 + return NULL; 36 + 37 + memset(renderer, 0, sizeof(GPU_Renderer)); 38 + 39 + renderer->id = request; 40 + renderer->id.renderer = GPU_RENDERER_GLES_3; 41 + renderer->shader_language = GPU_LANGUAGE_GLSLES; 42 + renderer->shader_version = SDL_GPU_GLSL_VERSION; 43 + 44 + renderer->current_context_target = NULL; 45 + 46 + renderer->impl = (GPU_RendererImpl*)SDL_malloc(sizeof(GPU_RendererImpl)); 47 + memset(renderer->impl, 0, sizeof(GPU_RendererImpl)); 48 + SET_COMMON_FUNCTIONS(renderer->impl); 49 + 50 + return renderer; 51 + } 52 + 53 + void GPU_FreeRenderer_GLES_3(GPU_Renderer* renderer) 54 + { 55 + if(renderer == NULL) 56 + return; 57 + 58 + SDL_free(renderer); 59 + } 60 + 61 + 62 + #endif
+8
src/renderer_GL_common.inl
··· 2011 2011 2012 2012 GPU_Image* result; 2013 2013 GPU_IMAGE_DATA* data; 2014 + 2015 + #ifdef SDL_GPU_USE_GLES 2016 + if(renderer->id.major_version == 3 && renderer->id.minor_version == 0) 2017 + { 2018 + GPU_PushErrorCode("GPU_CreateImageUsingTexture", GPU_ERROR_UNSUPPORTED_FUNCTION, "Renderer %s's runtime version on this device (3.0) does not support this function", renderer->id.name); 2019 + return NULL; 2020 + } 2021 + #endif 2014 2022 2015 2023 flushAndBindTexture(renderer, handle); 2016 2024