this repo has no description
0
fork

Configure Feed

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

Factored out the code to get the GL and GLSL versions. Added NULL check for GLSL version to fix crash on Android emulator. Thanks Rain!

+88 -61
+88 -61
src/renderer_GL_common.inl
··· 989 989 return ((renderer->enabled_features & feature) == feature); 990 990 } 991 991 992 + static Uint8 get_GL_version(int* major, int* minor) 993 + { 994 + const char* version_string; 995 + #ifdef SDL_GPU_USE_OPENGL 996 + // OpenGL < 3.0 doesn't have GL_MAJOR_VERSION. Check via version string instead. 997 + version_string = (const char*)glGetString(GL_VERSION); 998 + if(sscanf(version_string, "%d.%d", major, minor) <= 0) 999 + { 1000 + // Failure 1001 + *major = SDL_GPU_GL_MAJOR_VERSION; 1002 + #if SDL_GPU_GL_MAJOR_VERSION != 3 1003 + *minor = 1; 1004 + #else 1005 + *minor = 0; 1006 + #endif 1007 + 1008 + GPU_PushErrorCode(__func__, GPU_ERROR_BACKEND_ERROR, "Failed to parse OpenGL version string: \"%s\"", version_string); 1009 + return 0; 1010 + } 1011 + return 1; 1012 + #else 1013 + // GLES doesn't have GL_MAJOR_VERSION. Check via version string instead. 1014 + version_string = (const char*)glGetString(GL_VERSION); 1015 + // OpenGL ES 2.0? 1016 + if(sscanf(version_string, "OpenGL ES %d.%d", major, minor) <= 0) 1017 + { 1018 + // OpenGL ES-CM 1.1? OpenGL ES-CL 1.1? 1019 + if(sscanf(version_string, "OpenGL ES-C%*c %d.%d", major, minor) <= 0) 1020 + { 1021 + // Failure 1022 + *major = SDL_GPU_GLES_MAJOR_VERSION; 1023 + #if SDL_GPU_GLES_MAJOR_VERSION == 1 1024 + *minor = 1; 1025 + #else 1026 + *minor = 0; 1027 + #endif 1028 + 1029 + GPU_PushErrorCode(__func__, GPU_ERROR_BACKEND_ERROR, "Failed to parse OpenGL ES version string: \"%s\"", version_string); 1030 + return 0; 1031 + } 1032 + } 1033 + return 1; 1034 + #endif 1035 + } 1036 + 1037 + static Uint8 get_GLSL_version(int* version) 1038 + { 1039 + #ifndef SDL_GPU_DISABLE_SHADERS 1040 + const char* version_string; 1041 + int major, minor; 1042 + #ifdef SDL_GPU_USE_OPENGL 1043 + { 1044 + version_string = (const char*)glGetString(GL_SHADING_LANGUAGE_VERSION); 1045 + if(version_string == NULL || sscanf(version_string, "%d.%d", &major, &minor) <= 0) 1046 + { 1047 + GPU_PushErrorCode(__func__, GPU_ERROR_BACKEND_ERROR, "Failed to parse GLSL version string: \"%s\"", version_string); 1048 + *version = SDL_GPU_GLSL_VERSION; 1049 + return 0; 1050 + } 1051 + else 1052 + *version = major*100 + minor; 1053 + } 1054 + #else 1055 + { 1056 + version_string = (const char*)glGetString(GL_SHADING_LANGUAGE_VERSION); 1057 + if(version_string == NULL || sscanf(version_string, "OpenGL ES GLSL ES %d.%d", &major, &minor) <= 0) 1058 + { 1059 + GPU_PushErrorCode(__func__, GPU_ERROR_BACKEND_ERROR, "Failed to parse GLSL ES version string: \"%s\"", version_string); 1060 + *version = SDL_GPU_GLSL_VERSION; 1061 + return 0; 1062 + } 1063 + else 1064 + *version = major*100 + minor; 1065 + } 1066 + #endif 1067 + #endif 1068 + return 1; 1069 + } 1070 + 1071 + static Uint8 get_API_versions(GPU_Renderer* renderer) 1072 + { 1073 + return (get_GL_version(&renderer->id.major_version, &renderer->id.minor_version) 1074 + && get_GLSL_version(&renderer->max_shader_version)); 1075 + } 992 1076 993 1077 static GPU_Target* CreateTargetFromWindow(GPU_Renderer* renderer, Uint32 windowID, GPU_Target* target) 994 1078 { ··· 1004 1088 #ifdef SDL_GPU_USE_OPENGL 1005 1089 GLenum err; 1006 1090 #endif 1007 - const char* version_string; 1008 1091 GPU_FeatureEnum required_features = GPU_GetRequiredFeatures(); 1009 1092 1010 1093 if(target == NULL) ··· 1161 1244 glGetIntegerv(GL_FRAMEBUFFER_BINDING, &framebuffer_handle); 1162 1245 ((GPU_TARGET_DATA*)target->data)->handle = framebuffer_handle; 1163 1246 1164 - // Update our renderer info from the current GL context. 1165 - #ifdef SDL_GPU_USE_OPENGL 1166 - // OpenGL < 3.0 doesn't have GL_MAJOR_VERSION. Check via version string instead. 1167 - version_string = (const char*)glGetString(GL_VERSION); 1168 - if(sscanf(version_string, "%d.%d", &renderer->id.major_version, &renderer->id.minor_version) <= 0) 1169 - { 1170 - renderer->id.major_version = SDL_GPU_GL_MAJOR_VERSION; 1171 - #if SDL_GPU_GL_MAJOR_VERSION != 3 1172 - renderer->id.minor_version = 1; 1173 - #else 1174 - renderer->id.minor_version = 0; 1175 - #endif 1176 1247 1177 - GPU_PushErrorCode("GPU_CreateTargetFromWindow", GPU_ERROR_BACKEND_ERROR, "Failed to parse OpenGL version string: \"%s\"", version_string); 1178 - } 1179 - #ifndef SDL_GPU_DISABLE_SHADERS 1180 - // Check max GLSL version 1181 - { 1182 - int major, minor; 1183 - version_string = (const char*)glGetString(GL_SHADING_LANGUAGE_VERSION); 1184 - if(sscanf(version_string, "%d.%d", &major, &minor) <= 0) 1185 - { 1186 - GPU_PushErrorCode("GPU_CreateTargetFromWindow", GPU_ERROR_BACKEND_ERROR, "Failed to parse GLSL version string: \"%s\"", version_string); 1187 - } 1188 - else 1189 - renderer->max_shader_version = major*100 + minor; 1190 - } 1191 - #endif 1192 - #else 1193 - // GLES doesn't have GL_MAJOR_VERSION. Check via version string instead. 1194 - version_string = (const char*)glGetString(GL_VERSION); 1195 - // OpenGL ES 2.0? 1196 - if(sscanf(version_string, "OpenGL ES %d.%d", &renderer->id.major_version, &renderer->id.minor_version) <= 0) 1197 - { 1198 - // OpenGL ES-CM 1.1? OpenGL ES-CL 1.1? 1199 - if(sscanf(version_string, "OpenGL ES-C%*c %d.%d", &renderer->id.major_version, &renderer->id.minor_version) <= 0) 1200 - { 1201 - renderer->id.major_version = SDL_GPU_GLES_MAJOR_VERSION; 1202 - #if SDL_GPU_GLES_MAJOR_VERSION == 1 1203 - renderer->id.minor_version = 1; 1204 - #else 1205 - renderer->id.minor_version = 0; 1206 - #endif 1207 - 1208 - GPU_PushErrorCode("GPU_CreateTargetFromWindow", GPU_ERROR_BACKEND_ERROR, "Failed to parse OpenGL version string: \"%s\"", version_string); 1209 - } 1210 - } 1211 - #ifndef SDL_GPU_DISABLE_SHADERS 1212 - // Check max GLSL version 1213 - { 1214 - int major, minor; 1215 - version_string = (const char*)glGetString(GL_SHADING_LANGUAGE_VERSION); 1216 - if(sscanf(version_string, "OpenGL ES GLSL ES %d.%d", &major, &minor) <= 0) 1217 - { 1218 - GPU_PushErrorCode("GPU_CreateTargetFromWindow", GPU_ERROR_BACKEND_ERROR, "Failed to parse GLSL version string: \"%s\"", version_string); 1219 - } 1220 - else 1221 - renderer->max_shader_version = major*100 + minor; 1222 - } 1223 - #endif 1224 - #endif 1248 + // Update our renderer info from the current GL context. 1249 + if(!get_API_versions(renderer)) 1250 + GPU_PushErrorCode("GPU_CreateTargetFromWindow", GPU_ERROR_BACKEND_ERROR, "Failed to get backend API versions."); 1225 1251 1226 1252 // Did the wrong runtime library try to use a later versioned renderer? 1227 1253 if(renderer->id.major_version < renderer->requested_id.major_version) ··· 1230 1256 target->context->failed = 1; 1231 1257 return NULL; 1232 1258 } 1259 + 1233 1260 1234 1261 init_features(renderer); 1235 1262