diff options
| author | Wael El Oraiby <wael.eloraiby@gmail.com> | 2019-05-19 11:54:57 -0400 |
|---|---|---|
| committer | Wael El Oraiby <wael.eloraiby@gmail.com> | 2019-05-19 11:54:57 -0400 |
| commit | 39c49f8d504960f7d417e30847d89b57551c99a9 (patch) | |
| tree | bebc016dd8e87aa475d42b4ff19907cc54e2a5e4 /sokol_gfx.h | |
| parent | da724c6c2216d530dc62afdc351effa2412ca5cd (diff) | |
Fix crash when glGetString returns NULL on GL_EXTENSIONS
Diffstat (limited to 'sokol_gfx.h')
| -rw-r--r-- | sokol_gfx.h | 104 |
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) { |