aboutsummaryrefslogtreecommitdiff
path: root/sokol_gfx.h
diff options
context:
space:
mode:
authorWael El Oraiby <wael.eloraiby@gmail.com>2019-05-19 11:54:57 -0400
committerWael El Oraiby <wael.eloraiby@gmail.com>2019-05-19 11:54:57 -0400
commit39c49f8d504960f7d417e30847d89b57551c99a9 (patch)
treebebc016dd8e87aa475d42b4ff19907cc54e2a5e4 /sokol_gfx.h
parentda724c6c2216d530dc62afdc351effa2412ca5cd (diff)
Fix crash when glGetString returns NULL on GL_EXTENSIONS
Diffstat (limited to 'sokol_gfx.h')
-rw-r--r--sokol_gfx.h104
1 files changed, 55 insertions, 49 deletions
diff --git a/sokol_gfx.h b/sokol_gfx.h
index 48fa3f3d..cf59fc29 100644
--- a/sokol_gfx.h
+++ b/sokol_gfx.h
@@ -4020,62 +4020,68 @@ _SOKOL_PRIVATE void _sg_setup_backend(const sg_desc* desc) {
glGetIntegerv(GL_NUM_EXTENSIONS, &num_ext);
for (int i = 0; i < num_ext; i++) {
const char* ext = (const char*) glGetStringi(GL_EXTENSIONS, i);
- if (strstr(ext, "_texture_compression_s3tc")) {
- _sg.gl.features[SG_FEATURE_TEXTURE_COMPRESSION_DXT] = true;
- continue;
- }
- else if (strstr(ext, "_texture_filter_anisotropic")) {
- _sg.gl.ext_anisotropic = true;
- continue;
+ if( ext ) {
+ if (strstr(ext, "_texture_compression_s3tc")) {
+ _sg.gl.features[SG_FEATURE_TEXTURE_COMPRESSION_DXT] = true;
+ continue;
+ }
+ else if (strstr(ext, "_texture_filter_anisotropic")) {
+ _sg.gl.ext_anisotropic = true;
+ continue;
+ }
}
}
#elif defined(SOKOL_GLES3)
const char* ext = (const char*) glGetString(GL_EXTENSIONS);
- if (!_sg.gl.gles2) {
- _sg.gl.features[SG_FEATURE_INSTANCING] = true;
- _sg.gl.features[SG_FEATURE_TEXTURE_FLOAT] = true;
- _sg.gl.features[SG_FEATURE_TEXTURE_HALF_FLOAT] = true;
- _sg.gl.features[SG_FEATURE_IMAGETYPE_3D] = true;
- _sg.gl.features[SG_FEATURE_IMAGETYPE_ARRAY] = true;
- _sg.gl.features[SG_FEATURE_MSAA_RENDER_TARGETS] = true;
- _sg.gl.features[SG_FEATURE_PACKED_VERTEX_FORMAT_10_2] = true;
- _sg.gl.features[SG_FEATURE_MULTIPLE_RENDER_TARGET] = true;
+ if( ext ) {
+ if (!_sg.gl.gles2) {
+ _sg.gl.features[SG_FEATURE_INSTANCING] = true;
+ _sg.gl.features[SG_FEATURE_TEXTURE_FLOAT] = true;
+ _sg.gl.features[SG_FEATURE_TEXTURE_HALF_FLOAT] = true;
+ _sg.gl.features[SG_FEATURE_IMAGETYPE_3D] = true;
+ _sg.gl.features[SG_FEATURE_IMAGETYPE_ARRAY] = true;
+ _sg.gl.features[SG_FEATURE_MSAA_RENDER_TARGETS] = true;
+ _sg.gl.features[SG_FEATURE_PACKED_VERTEX_FORMAT_10_2] = true;
+ _sg.gl.features[SG_FEATURE_MULTIPLE_RENDER_TARGET] = true;
+ }
+ else {
+ _sg.gl.features[SG_FEATURE_INSTANCING] = strstr(ext, "_instanced_arrays");
+ _sg.gl.features[SG_FEATURE_TEXTURE_FLOAT] = strstr(ext, "_texture_float");
+ _sg.gl.features[SG_FEATURE_TEXTURE_HALF_FLOAT] = strstr(ext, "_texture_half_float");
+ }
+ _sg.gl.features[SG_FEATURE_TEXTURE_COMPRESSION_DXT] =
+ strstr(ext, "_texture_compression_s3tc") ||
+ strstr(ext, "_compressed_texture_s3tc") ||
+ strstr(ext, "texture_compression_dxt1");
+ _sg.gl.features[SG_FEATURE_TEXTURE_COMPRESSION_PVRTC] =
+ strstr(ext, "_texture_compression_pvrtc") ||
+ strstr(ext, "_compressed_texture_pvrtc");
+ _sg.gl.features[SG_FEATURE_TEXTURE_COMPRESSION_ATC] =
+ strstr(ext, "_compressed_texture_atc");
+ _sg.gl.ext_anisotropic =
+ strstr(ext, "_texture_filter_anisotropic");
}
- else {
- _sg.gl.features[SG_FEATURE_INSTANCING] = strstr(ext, "_instanced_arrays");
- _sg.gl.features[SG_FEATURE_TEXTURE_FLOAT] = strstr(ext, "_texture_float");
- _sg.gl.features[SG_FEATURE_TEXTURE_HALF_FLOAT] = strstr(ext, "_texture_half_float");
- }
- _sg.gl.features[SG_FEATURE_TEXTURE_COMPRESSION_DXT] =
- strstr(ext, "_texture_compression_s3tc") ||
- strstr(ext, "_compressed_texture_s3tc") ||
- strstr(ext, "texture_compression_dxt1");
- _sg.gl.features[SG_FEATURE_TEXTURE_COMPRESSION_PVRTC] =
- strstr(ext, "_texture_compression_pvrtc") ||
- strstr(ext, "_compressed_texture_pvrtc");
- _sg.gl.features[SG_FEATURE_TEXTURE_COMPRESSION_ATC] =
- strstr(ext, "_compressed_texture_atc");
- _sg.gl.ext_anisotropic =
- strstr(ext, "_texture_filter_anisotropic");
#elif defined(SOKOL_GLES2)
const char* ext = (const char*) glGetString(GL_EXTENSIONS);
- _sg.gl.features[SG_FEATURE_INSTANCING] =
- strstr(ext, "_instanced_arrays");
- _sg.gl.features[SG_FEATURE_TEXTURE_FLOAT] =
- strstr(ext, "_texture_float");
- _sg.gl.features[SG_FEATURE_TEXTURE_HALF_FLOAT] =
- strstr(ext, "_texture_half_float");
- _sg.gl.features[SG_FEATURE_TEXTURE_COMPRESSION_DXT] =
- strstr(ext, "_texture_compression_s3tc") ||
- strstr(ext, "_compressed_texture_s3tc") ||
- strstr(ext, "texture_compression_dxt1");
- _sg.gl.features[SG_FEATURE_TEXTURE_COMPRESSION_PVRTC] =
- strstr(ext, "_texture_compression_pvrtc") ||
- strstr(ext, "_compressed_texture_pvrtc");
- _sg.gl.features[SG_FEATURE_TEXTURE_COMPRESSION_ATC] =
- strstr(ext, "_compressed_texture_atc");
- _sg.gl.ext_anisotropic =
- strstr(ext, "_texture_filter_anisotropic");
+ if( ext ) {
+ _sg.gl.features[SG_FEATURE_INSTANCING] =
+ strstr(ext, "_instanced_arrays");
+ _sg.gl.features[SG_FEATURE_TEXTURE_FLOAT] =
+ strstr(ext, "_texture_float");
+ _sg.gl.features[SG_FEATURE_TEXTURE_HALF_FLOAT] =
+ strstr(ext, "_texture_half_float");
+ _sg.gl.features[SG_FEATURE_TEXTURE_COMPRESSION_DXT] =
+ strstr(ext, "_texture_compression_s3tc") ||
+ strstr(ext, "_compressed_texture_s3tc") ||
+ strstr(ext, "texture_compression_dxt1");
+ _sg.gl.features[SG_FEATURE_TEXTURE_COMPRESSION_PVRTC] =
+ strstr(ext, "_texture_compression_pvrtc") ||
+ strstr(ext, "_compressed_texture_pvrtc");
+ _sg.gl.features[SG_FEATURE_TEXTURE_COMPRESSION_ATC] =
+ strstr(ext, "_compressed_texture_atc");
+ _sg.gl.ext_anisotropic =
+ strstr(ext, "_texture_filter_anisotropic");
+ }
#endif
_sg.gl.max_anisotropy = 1;
if (_sg.gl.ext_anisotropic) {