this repo has no description
0
fork

Configure Feed

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

Added OpenGL 4 renderer.

+224
+145
include/SDL_gpu_OpenGL_4.h
··· 1 + #ifndef _SDL_GPU_OPENGL_4_H__ 2 + #define _SDL_GPU_OPENGL_4_H__ 3 + 4 + #include "SDL_gpu.h" 5 + 6 + #if !defined(SDL_GPU_DISABLE_OPENGL) && !defined(SDL_GPU_DISABLE_OPENGL_4) 7 + 8 + // Hacks to fix compile errors due to polluted namespace 9 + #ifdef _WIN32 10 + #define _WINUSER_H 11 + #define _WINGDI_H 12 + #endif 13 + 14 + #include "glew.h" 15 + 16 + #if defined(GL_EXT_bgr) && !defined(GL_BGR) 17 + #define GL_BGR GL_BGR_EXT 18 + #endif 19 + #if defined(GL_EXT_bgra) && !defined(GL_BGRA) 20 + #define GL_BGRA GL_BGRA_EXT 21 + #endif 22 + #if defined(GL_EXT_abgr) && !defined(GL_ABGR) 23 + #define GL_ABGR GL_ABGR_EXT 24 + #endif 25 + #endif 26 + 27 + 28 + #define GPU_CONTEXT_DATA ContextData_OpenGL_4 29 + #define GPU_IMAGE_DATA ImageData_OpenGL_4 30 + #define GPU_TARGET_DATA TargetData_OpenGL_4 31 + 32 + 33 + 34 + #define GPU_DEFAULT_TEXTURED_VERTEX_SHADER_SOURCE \ 35 + "#version 400\n\ 36 + \ 37 + in vec2 gpu_Vertex;\n\ 38 + in vec2 gpu_TexCoord;\n\ 39 + in vec4 gpu_Color;\n\ 40 + uniform mat4 gpu_ModelViewProjectionMatrix;\n\ 41 + \ 42 + out vec4 color;\n\ 43 + out vec2 texCoord;\n\ 44 + \ 45 + void main(void)\n\ 46 + {\n\ 47 + color = gpu_Color;\n\ 48 + texCoord = vec2(gpu_TexCoord);\n\ 49 + gl_Position = gpu_ModelViewProjectionMatrix * vec4(gpu_Vertex, 0.0, 1.0);\n\ 50 + }" 51 + 52 + #define GPU_DEFAULT_UNTEXTURED_VERTEX_SHADER_SOURCE \ 53 + "#version 400\n\ 54 + \ 55 + in vec2 gpu_Vertex;\n\ 56 + in vec4 gpu_Color;\n\ 57 + uniform mat4 gpu_ModelViewProjectionMatrix;\n\ 58 + \ 59 + out vec4 color;\n\ 60 + \ 61 + void main(void)\n\ 62 + {\n\ 63 + color = gpu_Color;\n\ 64 + gl_Position = gpu_ModelViewProjectionMatrix * vec4(gpu_Vertex, 0.0, 1.0);\n\ 65 + }" 66 + 67 + 68 + #define GPU_DEFAULT_TEXTURED_FRAGMENT_SHADER_SOURCE \ 69 + "#version 400\n\ 70 + \ 71 + in vec4 color;\n\ 72 + in vec2 texCoord;\n\ 73 + \ 74 + uniform sampler2D tex;\n\ 75 + \ 76 + out vec4 fragColor;\n\ 77 + \ 78 + void main(void)\n\ 79 + {\n\ 80 + fragColor = texture(tex, texCoord) * color;\n\ 81 + }" 82 + 83 + #define GPU_DEFAULT_UNTEXTURED_FRAGMENT_SHADER_SOURCE \ 84 + "#version 400\n\ 85 + \ 86 + in vec4 color;\n\ 87 + \ 88 + out vec4 fragColor;\n\ 89 + \ 90 + void main(void)\n\ 91 + {\n\ 92 + fragColor = color;\n\ 93 + }" 94 + 95 + 96 + typedef struct ContextData_OpenGL_4 97 + { 98 + SDL_Color last_color; 99 + Uint8 last_use_texturing; 100 + unsigned int last_shape; 101 + Uint8 last_use_blending; 102 + GPU_BlendMode last_blend_mode; 103 + GPU_Rect last_viewport; 104 + GPU_Camera last_camera; 105 + Uint8 last_camera_inverted; 106 + 107 + GPU_Image* last_image; 108 + GPU_Target* last_target; 109 + 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, ...]). 110 + unsigned short blit_buffer_num_vertices; 111 + unsigned short blit_buffer_max_num_vertices; 112 + unsigned short* index_buffer; // Indexes into the blit buffer so we can use 4 vertices for every 2 triangles (1 quad) 113 + unsigned int index_buffer_num_vertices; 114 + unsigned int index_buffer_max_num_vertices; 115 + 116 + // Tier 3 rendering 117 + unsigned int blit_VAO; 118 + unsigned int blit_VBO[2]; // For double-buffering 119 + unsigned int blit_IBO; 120 + Uint8 blit_VBO_flop; 121 + GPU_ShaderBlock shader_block[2]; 122 + GPU_ShaderBlock current_shader_block; 123 + 124 + GPU_AttributeSource shader_attributes[16]; 125 + unsigned int attribute_VBO[16]; 126 + } ContextData_OpenGL_4; 127 + 128 + typedef struct ImageData_OpenGL_4 129 + { 130 + int refcount; 131 + Uint8 owns_handle; 132 + Uint32 handle; 133 + Uint32 format; 134 + } ImageData_OpenGL_4; 135 + 136 + typedef struct TargetData_OpenGL_4 137 + { 138 + int refcount; 139 + Uint32 handle; 140 + Uint32 format; 141 + } TargetData_OpenGL_4; 142 + 143 + 144 + 145 + #endif
+3
src/CMakeLists.txt
··· 8 8 renderer_OpenGL_1.c 9 9 renderer_OpenGL_2.c 10 10 renderer_OpenGL_3.c 11 + renderer_OpenGL_4.c 11 12 renderer_GLES_1.c 12 13 renderer_GLES_2.c 13 14 ) ··· 20 21 ../include/SDL_gpu_OpenGL_1.h 21 22 ../include/SDL_gpu_OpenGL_2.h 22 23 ../include/SDL_gpu_OpenGL_3.h 24 + ../include/SDL_gpu_OpenGL_4.h 23 25 ../include/SDL_gpu_GLES_1.h 24 26 ../include/SDL_gpu_GLES_2.h 25 27 renderer_GL_common.inl ··· 50 52 ../include/SDL_gpu_OpenGL_1.h 51 53 ../include/SDL_gpu_OpenGL_2.h 52 54 ../include/SDL_gpu_OpenGL_3.h 55 + ../include/SDL_gpu_OpenGL_4.h 53 56 ../include/SDL_gpu_GLES_1.h 54 57 ../include/SDL_gpu_GLES_2.h 55 58 )
+16
src/SDL_gpu_renderer.c
··· 133 133 void GPU_FreeRenderer_OpenGL_2(GPU_Renderer* renderer); 134 134 GPU_Renderer* GPU_CreateRenderer_OpenGL_3(GPU_RendererID request); 135 135 void GPU_FreeRenderer_OpenGL_3(GPU_Renderer* renderer); 136 + GPU_Renderer* GPU_CreateRenderer_OpenGL_4(GPU_RendererID request); 137 + void GPU_FreeRenderer_OpenGL_4(GPU_Renderer* renderer); 136 138 GPU_Renderer* GPU_CreateRenderer_GLES_1(GPU_RendererID request); 137 139 void GPU_FreeRenderer_GLES_1(GPU_Renderer* renderer); 138 140 GPU_Renderer* GPU_CreateRenderer_GLES_2(GPU_RendererID request); ··· 197 199 GPU_RegisterRenderer(GPU_MakeRendererID("OpenGL 3", GPU_RENDERER_OPENGL_3, 3, 0), 198 200 &GPU_CreateRenderer_OpenGL_3, 199 201 &GPU_FreeRenderer_OpenGL_3); 202 + #endif 203 + #endif 204 + 205 + #ifndef SDL_GPU_DISABLE_OPENGL_4 206 + #ifdef __MACOSX__ 207 + GPU_RegisterRenderer(GPU_MakeRendererID("OpenGL 4", GPU_RENDERER_OPENGL_4, 4, 1), 208 + &GPU_CreateRenderer_OpenGL_4, 209 + &GPU_FreeRenderer_OpenGL_4); 210 + #else 211 + GPU_RegisterRenderer(GPU_MakeRendererID("OpenGL 4", GPU_RENDERER_OPENGL_4, 4, 0), 212 + &GPU_CreateRenderer_OpenGL_4, 213 + &GPU_FreeRenderer_OpenGL_4); 200 214 #endif 201 215 #endif 202 216 #endif ··· 319 333 // OS X 10.9: GL 2.1, 3.3, 4.1 320 334 // OS X 10.7: GL 2.1, 3.2 321 335 // OS X 10.6: GL 1.4, 2.1 336 + default_order[count++] = GPU_MakeRendererID("OpenGL 4", GPU_RENDERER_OPENGL_4, 4, 1); 322 337 default_order[count++] = GPU_MakeRendererID("OpenGL 3", GPU_RENDERER_OPENGL_3, 3, 2); 323 338 #else 339 + default_order[count++] = GPU_MakeRendererID("OpenGL 4", GPU_RENDERER_OPENGL_4, 4, 0); 324 340 default_order[count++] = GPU_MakeRendererID("OpenGL 3", GPU_RENDERER_OPENGL_3, 3, 0); 325 341 #endif 326 342 default_order[count++] = GPU_MakeRendererID("OpenGL 2", GPU_RENDERER_OPENGL_2, 2, 0);
+60
src/renderer_OpenGL_4.c
··· 1 + #include "SDL_gpu_OpenGL_4.h" 2 + #include "SDL_gpu_RendererImpl.h" 3 + 4 + 5 + #if defined(SDL_GPU_DISABLE_OPENGL) || defined(SDL_GPU_DISABLE_OPENGL_4) 6 + 7 + // Dummy implementations 8 + GPU_Renderer* GPU_CreateRenderer_OpenGL_4(GPU_RendererID request) {return NULL;} 9 + void GPU_FreeRenderer_OpenGL_4(GPU_Renderer* renderer) {} 10 + 11 + #else 12 + 13 + 14 + // Most of the code pulled in from here... 15 + #define SDL_GPU_USE_OPENGL 16 + #define SDL_GPU_USE_BUFFER_PIPELINE 17 + #define SDL_GPU_ASSUME_SHADERS 18 + #define SDL_GPU_SKIP_ENABLE_TEXTURE_2D 19 + #define SDL_GPU_SKIP_LINE_WIDTH 20 + #define SDL_GPU_GL_TIER 3 21 + #define SDL_GPU_GLSL_VERSION 150 22 + #define SDL_GPU_GL_MAJOR_VERSION 4 23 + 24 + #include "renderer_GL_common.inl" 25 + #include "renderer_shapes_GL_common.inl" 26 + 27 + 28 + GPU_Renderer* GPU_CreateRenderer_OpenGL_4(GPU_RendererID request) 29 + { 30 + GPU_Renderer* renderer = (GPU_Renderer*)SDL_malloc(sizeof(GPU_Renderer)); 31 + if(renderer == NULL) 32 + return NULL; 33 + 34 + memset(renderer, 0, sizeof(GPU_Renderer)); 35 + 36 + renderer->id = request; 37 + renderer->id.renderer = GPU_RENDERER_OPENGL_4; 38 + renderer->shader_language = GPU_LANGUAGE_GLSL; 39 + renderer->min_shader_version = 110; 40 + renderer->max_shader_version = SDL_GPU_GLSL_VERSION; 41 + 42 + renderer->current_context_target = NULL; 43 + 44 + renderer->impl = (GPU_RendererImpl*)SDL_malloc(sizeof(GPU_RendererImpl)); 45 + memset(renderer->impl, 0, sizeof(GPU_RendererImpl)); 46 + SET_COMMON_FUNCTIONS(renderer->impl); 47 + 48 + return renderer; 49 + } 50 + 51 + void GPU_FreeRenderer_OpenGL_4(GPU_Renderer* renderer) 52 + { 53 + if(renderer == NULL) 54 + return; 55 + 56 + SDL_free(renderer); 57 + } 58 + 59 + 60 + #endif