Simple Directmedia Layer

Disable backface culling and use a constant rectangle winding order.

This makes it so we don't have to surface the rectangle winding order for applications that want to use the raw geometry API.

+8 -43
+5 -14
src/render/SDL_render.c
··· 149 149 150 150 static SDL_Renderer *SDL_renderers; 151 151 152 + static const int rect_index_order[] = { 0, 1, 2, 0, 2, 3 }; 153 + 152 154 void SDL_QuitRender(void) 153 155 { 154 156 while (SDL_renderers) { ··· 625 627 const int num_indices = 6 * count; 626 628 const int size_indices = 4; 627 629 int cur_index = 0; 628 - const int *rect_index_order = renderer->rect_index_order; 629 630 630 631 for (i = 0; i < count; ++i) { 631 632 float minx, miny, maxx, maxy; ··· 1065 1066 UpdatePixelViewport(renderer, &renderer->main_view); 1066 1067 UpdatePixelClipRect(renderer, &renderer->main_view); 1067 1068 UpdateMainViewDimensions(renderer); 1068 - 1069 - // Default value, if not specified by the renderer back-end 1070 - if (renderer->rect_index_order[0] == 0 && renderer->rect_index_order[1] == 0) { 1071 - renderer->rect_index_order[0] = 0; 1072 - renderer->rect_index_order[1] = 1; 1073 - renderer->rect_index_order[2] = 2; 1074 - renderer->rect_index_order[3] = 0; 1075 - renderer->rect_index_order[4] = 2; 1076 - renderer->rect_index_order[5] = 3; 1077 - } 1078 1069 1079 1070 // new textures start at zero, so we start at 1 so first render doesn't flush by accident. 1080 1071 renderer->render_command_generation = 1; ··· 3806 3797 float uv[8]; 3807 3798 const int uv_stride = 2 * sizeof(float); 3808 3799 const int num_vertices = 4; 3809 - const int *indices = renderer->rect_index_order; 3800 + const int *indices = rect_index_order; 3810 3801 const int num_indices = 6; 3811 3802 const int size_indices = 4; 3812 3803 float minu, minv, maxu, maxv; ··· 3967 3958 float uv[8]; 3968 3959 const int uv_stride = 2 * sizeof(float); 3969 3960 const int num_vertices = 4; 3970 - const int *indices = renderer->rect_index_order; 3961 + const int *indices = rect_index_order; 3971 3962 const int num_indices = 6; 3972 3963 const int size_indices = 4; 3973 3964 float minu, minv, maxu, maxv; ··· 4055 4046 float uv[8]; 4056 4047 const int uv_stride = 2 * sizeof(float); 4057 4048 const int num_vertices = 4; 4058 - const int *indices = renderer->rect_index_order; 4049 + const int *indices = rect_index_order; 4059 4050 const int num_indices = 6; 4060 4051 const int size_indices = 4; 4061 4052 float minu, minv, maxu, maxv;
-3
src/render/SDL_sysrender.h
··· 259 259 // The method of drawing lines 260 260 SDL_RenderLineMethod line_method; 261 261 262 - // List of triangle indices to draw rects 263 - int rect_index_order[6]; 264 - 265 262 // The list of textures 266 263 SDL_Texture *textures; 267 264 SDL_Texture *target;
-7
src/render/gpu/SDL_render_gpu.c
··· 1266 1266 SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBX32); 1267 1267 SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_BGRX32); 1268 1268 1269 - renderer->rect_index_order[0] = 0; 1270 - renderer->rect_index_order[1] = 1; 1271 - renderer->rect_index_order[2] = 3; 1272 - renderer->rect_index_order[3] = 1; 1273 - renderer->rect_index_order[4] = 3; 1274 - renderer->rect_index_order[5] = 2; 1275 - 1276 1269 data->state.draw_color.r = 1.0f; 1277 1270 data->state.draw_color.g = 1.0f; 1278 1271 data->state.draw_color.b = 1.0f;
-7
src/render/opengl/SDL_render_gl.c
··· 1796 1796 SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_UYVY); 1797 1797 #endif 1798 1798 1799 - renderer->rect_index_order[0] = 0; 1800 - renderer->rect_index_order[1] = 1; 1801 - renderer->rect_index_order[2] = 3; 1802 - renderer->rect_index_order[3] = 1; 1803 - renderer->rect_index_order[4] = 3; 1804 - renderer->rect_index_order[5] = 2; 1805 - 1806 1799 if (SDL_GL_ExtensionSupported("GL_EXT_framebuffer_object")) { 1807 1800 data->GL_EXT_framebuffer_object_supported = true; 1808 1801 data->glGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC)
+2 -7
src/render/opengles2/SDL_render_gles2.c
··· 2191 2191 } 2192 2192 #endif 2193 2193 2194 - renderer->rect_index_order[0] = 0; 2195 - renderer->rect_index_order[1] = 1; 2196 - renderer->rect_index_order[2] = 3; 2197 - renderer->rect_index_order[3] = 1; 2198 - renderer->rect_index_order[4] = 3; 2199 - renderer->rect_index_order[5] = 2; 2200 - 2201 2194 if (SDL_GL_ExtensionSupported("GL_EXT_blend_minmax")) { 2202 2195 data->GL_EXT_blend_minmax_supported = true; 2203 2196 } 2204 2197 2205 2198 // Set up parameters for rendering 2199 + data->glDisable(GL_DEPTH_TEST); 2200 + data->glDisable(GL_CULL_FACE); 2206 2201 data->glActiveTexture(GL_TEXTURE0); 2207 2202 data->glPixelStorei(GL_PACK_ALIGNMENT, 1); 2208 2203 data->glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+1 -5
src/render/psp/SDL_render_psp.c
··· 1375 1375 sceGuEnable(GU_SCISSOR_TEST); 1376 1376 1377 1377 // Backface culling 1378 - /* 1379 - FIXME: Culling probably un-needed ? It can conflict with SDL_RENDERCMD_GEOMETRY 1380 - sceGuFrontFace(GU_CCW); 1381 - sceGuEnable(GU_CULL_FACE); 1382 - */ 1378 + sceGuDisable(GU_CULL_FACE); 1383 1379 1384 1380 // Setup initial blend state 1385 1381 ResetBlendState(&data->blendState);