mirror of
https://github.com/MobileGL-Dev/MobileGlues.git
synced 2025-09-24 03:31:43 -04:00
fix(texture): detect GL_TEXTURE_LOD_BIAS_QCOM before using it, preventing Xaero from crashing
This commit is contained in:
parent
b78759df52
commit
916bdda672
@ -244,6 +244,12 @@ void glTexParameterf(GLenum target, GLenum pname, GLfloat param) {
|
|||||||
LOG();
|
LOG();
|
||||||
pname = pname_convert(pname);
|
pname = pname_convert(pname);
|
||||||
LOG_D("glTexParameterf, target: %d, pname: %d, param: %f",target, pname, param);
|
LOG_D("glTexParameterf, target: %d, pname: %d, param: %f",target, pname, param);
|
||||||
|
|
||||||
|
if (pname == GL_TEXTURE_LOD_BIAS_QCOM && !g_gles_caps.GL_QCOM_texture_lod_bias) {
|
||||||
|
LOG_D("Does not support GL_QCOM_texture_lod_bias, skipped!")
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
LOAD_GLES(glTexParameterf, void, GLenum target, GLenum pname, GLfloat param);
|
LOAD_GLES(glTexParameterf, void, GLenum target, GLenum pname, GLfloat param);
|
||||||
gles_glTexParameterf(target,pname, param);
|
gles_glTexParameterf(target,pname, param);
|
||||||
CHECK_GL_ERROR
|
CHECK_GL_ERROR
|
||||||
@ -785,6 +791,12 @@ void glTexParameteri(GLenum target, GLenum pname, GLint param) {
|
|||||||
LOG()
|
LOG()
|
||||||
pname = pname_convert(pname);
|
pname = pname_convert(pname);
|
||||||
LOG_D("glTexParameterfv, pname: %d", pname)
|
LOG_D("glTexParameterfv, pname: %d", pname)
|
||||||
|
|
||||||
|
if (pname == GL_TEXTURE_LOD_BIAS_QCOM && !g_gles_caps.GL_QCOM_texture_lod_bias) {
|
||||||
|
LOG_D("Does not support GL_QCOM_texture_lod_bias, skipped!")
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
LOAD_GLES_FUNC(glTexParameteri)
|
LOAD_GLES_FUNC(glTexParameteri)
|
||||||
gles_glTexParameteri(target,pname,param);
|
gles_glTexParameteri(target,pname,param);
|
||||||
CHECK_GL_ERROR
|
CHECK_GL_ERROR
|
||||||
|
@ -131,11 +131,16 @@ void LogOpenGLExtensions() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct gles_caps_t g_gles_caps;
|
||||||
|
|
||||||
void InitGLESCapabilities() {
|
void InitGLESCapabilities() {
|
||||||
|
memset(&g_gles_caps, 0, sizeof(struct gles_caps_t));
|
||||||
|
|
||||||
InitGLESBaseExtensions();
|
InitGLESBaseExtensions();
|
||||||
|
|
||||||
int has_GL_EXT_buffer_storage = 0;
|
// int has_GL_EXT_buffer_storage = 0;
|
||||||
int has_GL_ARB_timer_query = 0;
|
// int has_GL_ARB_timer_query = 0;
|
||||||
|
// int has_GL_QCOM_texture_lod_bias = 0;
|
||||||
LOAD_GLES_FUNC(glGetStringi)
|
LOAD_GLES_FUNC(glGetStringi)
|
||||||
LOAD_GLES_FUNC(glGetIntegerv)
|
LOAD_GLES_FUNC(glGetIntegerv)
|
||||||
|
|
||||||
@ -147,20 +152,22 @@ void InitGLESCapabilities() {
|
|||||||
if (extension) {
|
if (extension) {
|
||||||
LOG_D("%s", (const char*)extension);
|
LOG_D("%s", (const char*)extension);
|
||||||
if (strcmp(extension, "GL_EXT_buffer_storage") == 0) {
|
if (strcmp(extension, "GL_EXT_buffer_storage") == 0) {
|
||||||
has_GL_EXT_buffer_storage = 1;
|
g_gles_caps.GL_EXT_buffer_storage = 1;
|
||||||
} else if (strcmp(extension, "GL_EXT_disjoint_timer_query") == 0) {
|
} else if (strcmp(extension, "GL_EXT_disjoint_timer_query") == 0) {
|
||||||
has_GL_ARB_timer_query = 1;
|
g_gles_caps.GL_EXT_disjoint_timer_query = 1;
|
||||||
|
} else if (strcmp(extension, "GL_QCOM_texture_lod_bias") == 0) {
|
||||||
|
g_gles_caps.GL_QCOM_texture_lod_bias = 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
LOG_D("(null)");
|
LOG_D("(null)");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (has_GL_EXT_buffer_storage) {
|
if (g_gles_caps.GL_EXT_buffer_storage) {
|
||||||
AppendExtension("GL_ARB_buffer_storage");
|
AppendExtension("GL_ARB_buffer_storage");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (has_GL_ARB_timer_query) {
|
if (g_gles_caps.GL_EXT_disjoint_timer_query) {
|
||||||
AppendExtension("GL_ARB_timer_query");
|
AppendExtension("GL_ARB_timer_query");
|
||||||
AppendExtension("GL_EXT_timer_query");
|
AppendExtension("GL_EXT_timer_query");
|
||||||
}
|
}
|
||||||
|
@ -178,4 +178,12 @@ GLAPI GLAPIENTRY type name(__VA_ARGS__) {
|
|||||||
LOG_W("No function: %s @ %s(...)", RENDERERNAME, __FUNCTION__); \
|
LOG_W("No function: %s @ %s(...)", RENDERERNAME, __FUNCTION__); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct gles_caps_t {
|
||||||
|
int GL_EXT_buffer_storage;
|
||||||
|
int GL_EXT_disjoint_timer_query;
|
||||||
|
int GL_QCOM_texture_lod_bias;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern struct gles_caps_t g_gles_caps;
|
||||||
|
|
||||||
#endif // MOBILEGLUES_GLES_LOADER_H_
|
#endif // MOBILEGLUES_GLES_LOADER_H_
|
||||||
|
Loading…
x
Reference in New Issue
Block a user