this repo has no description
0
fork

Configure Feed

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

Merged GLES 3 branch.

+270 -10
+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
··· 11 11 renderer_OpenGL_4.c 12 12 renderer_GLES_1.c 13 13 renderer_GLES_2.c 14 + renderer_GLES_3.c 14 15 ) 15 16 16 17 set(SDL_gpu_HDRS ··· 24 25 ../include/SDL_gpu_OpenGL_4.h 25 26 ../include/SDL_gpu_GLES_1.h 26 27 ../include/SDL_gpu_GLES_2.h 28 + ../include/SDL_gpu_GLES_3.h 27 29 renderer_GL_common.inl 28 30 renderer_shapes_GL_common.inl 29 31 ) ··· 55 57 ../include/SDL_gpu_OpenGL_4.h 56 58 ../include/SDL_gpu_GLES_1.h 57 59 ../include/SDL_gpu_GLES_2.h 60 + ../include/SDL_gpu_GLES_3.h 58 61 ) 59 62 60 63 # Set the appropriate library name for the version of SDL used
+38 -10
src/SDL_gpu_renderer.c
··· 139 139 void GPU_FreeRenderer_GLES_1(GPU_Renderer* renderer); 140 140 GPU_Renderer* GPU_CreateRenderer_GLES_2(GPU_RendererID request); 141 141 void GPU_FreeRenderer_GLES_2(GPU_Renderer* renderer); 142 + GPU_Renderer* GPU_CreateRenderer_GLES_3(GPU_RendererID request); 143 + void GPU_FreeRenderer_GLES_3(GPU_Renderer* renderer); 142 144 143 145 void GPU_RegisterRenderer(GPU_RendererID id, GPU_Renderer* (*create_renderer)(GPU_RendererID request), void (*free_renderer)(GPU_Renderer* renderer)) 144 146 { ··· 226 228 &GPU_CreateRenderer_GLES_2, 227 229 &GPU_FreeRenderer_GLES_2); 228 230 #endif 231 + #ifndef SDL_GPU_DISABLE_GLES_3 232 + GPU_RegisterRenderer(GPU_MakeRendererID("OpenGLES 3", GPU_RENDERER_GLES_3, 3, 0), 233 + &GPU_CreateRenderer_GLES_3, 234 + &GPU_FreeRenderer_GLES_3); 235 + #endif 229 236 #endif 230 237 231 238 } ··· 317 324 { 318 325 int count = 0; 319 326 GPU_RendererID default_order[GPU_RENDERER_ORDER_MAX]; 320 - 327 + 321 328 #ifndef SDL_GPU_DISABLE_GLES 329 + #ifndef SDL_GPU_DISABLE_GLES3 330 + default_order[count++] = GPU_MakeRendererID("OpenGLES 3", GPU_RENDERER_GLES_3, 3, 0); 331 + #endif 322 332 #ifndef SDL_GPU_DISABLE_GLES2 323 333 default_order[count++] = GPU_MakeRendererID("OpenGLES 2", GPU_RENDERER_GLES_2, 2, 0); 324 334 #endif ··· 328 338 #endif 329 339 330 340 #ifndef SDL_GPU_DISABLE_OPENGL 331 - #ifdef __MACOSX__ 332 - // My understanding of OS X OpenGL support: 333 - // OS X 10.9: GL 2.1, 3.3, 4.1 334 - // OS X 10.7: GL 2.1, 3.2 335 - // OS X 10.6: GL 1.4, 2.1 336 - default_order[count++] = GPU_MakeRendererID("OpenGL 4", GPU_RENDERER_OPENGL_4, 4, 1); 337 - default_order[count++] = GPU_MakeRendererID("OpenGL 3", GPU_RENDERER_OPENGL_3, 3, 2); 341 + #ifdef __MACOSX__ 342 + 343 + // My understanding of OS X OpenGL support: 344 + // OS X 10.9: GL 2.1, 3.3, 4.1 345 + // OS X 10.7: GL 2.1, 3.2 346 + // OS X 10.6: GL 1.4, 2.1 347 + #ifndef SDL_GPU_DISABLE_OPENGL_4 348 + default_order[count++] = GPU_MakeRendererID("OpenGL 4", GPU_RENDERER_OPENGL_4, 4, 1); 349 + #endif 350 + #ifndef SDL_GPU_DISABLE_OPENGL_3 351 + default_order[count++] = GPU_MakeRendererID("OpenGL 3", GPU_RENDERER_OPENGL_3, 3, 2); 352 + #endif 353 + 338 354 #else 339 - default_order[count++] = GPU_MakeRendererID("OpenGL 4", GPU_RENDERER_OPENGL_4, 4, 0); 340 - default_order[count++] = GPU_MakeRendererID("OpenGL 3", GPU_RENDERER_OPENGL_3, 3, 0); 355 + 356 + #ifndef SDL_GPU_DISABLE_OPENGL_4 357 + default_order[count++] = GPU_MakeRendererID("OpenGL 4", GPU_RENDERER_OPENGL_4, 4, 0); 358 + #endif 359 + #ifndef SDL_GPU_DISABLE_OPENGL_3 360 + default_order[count++] = GPU_MakeRendererID("OpenGL 3", GPU_RENDERER_OPENGL_3, 3, 0); 361 + #endif 362 + 341 363 #endif 364 + 365 + #ifndef SDL_GPU_DISABLE_OPENGL_2 342 366 default_order[count++] = GPU_MakeRendererID("OpenGL 2", GPU_RENDERER_OPENGL_2, 2, 0); 367 + #endif 368 + #ifndef SDL_GPU_DISABLE_OPENGL_1 343 369 default_order[count++] = GPU_MakeRendererID("OpenGL 1", GPU_RENDERER_OPENGL_1, 1, 1); 370 + #endif 371 + 344 372 #endif 345 373 346 374 if(order_size != NULL)
+64
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 + // TODO: Make this dynamic because GLES 3.1 supports it 27 + #define SDL_GPU_DISABLE_TEXTURE_GETS 28 + 29 + #include "renderer_GL_common.inl" 30 + #include "renderer_shapes_GL_common.inl" 31 + 32 + 33 + GPU_Renderer* GPU_CreateRenderer_GLES_3(GPU_RendererID request) 34 + { 35 + GPU_Renderer* renderer = (GPU_Renderer*)SDL_malloc(sizeof(GPU_Renderer)); 36 + if(renderer == NULL) 37 + return NULL; 38 + 39 + memset(renderer, 0, sizeof(GPU_Renderer)); 40 + 41 + renderer->id = request; 42 + renderer->id.renderer = GPU_RENDERER_GLES_3; 43 + renderer->shader_language = GPU_LANGUAGE_GLSLES; 44 + renderer->shader_version = SDL_GPU_GLSL_VERSION; 45 + 46 + renderer->current_context_target = NULL; 47 + 48 + renderer->impl = (GPU_RendererImpl*)SDL_malloc(sizeof(GPU_RendererImpl)); 49 + memset(renderer->impl, 0, sizeof(GPU_RendererImpl)); 50 + SET_COMMON_FUNCTIONS(renderer->impl); 51 + 52 + return renderer; 53 + } 54 + 55 + void GPU_FreeRenderer_GLES_3(GPU_Renderer* renderer) 56 + { 57 + if(renderer == NULL) 58 + return; 59 + 60 + SDL_free(renderer); 61 + } 62 + 63 + 64 + #endif
+8
src/renderer_GL_common.inl
··· 2121 2121 2122 2122 GPU_Image* result; 2123 2123 GPU_IMAGE_DATA* data; 2124 + 2125 + #ifdef SDL_GPU_USE_GLES 2126 + if(renderer->id.major_version == 3 && renderer->id.minor_version == 0) 2127 + { 2128 + 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); 2129 + return NULL; 2130 + } 2131 + #endif 2124 2132 2125 2133 flushAndBindTexture(renderer, handle); 2126 2134