diff --git a/src/modules/graphics/opengl/OpenGL.cpp b/src/modules/graphics/opengl/OpenGL.cpp index d0e93b4fa..44d7f8767 100644 --- a/src/modules/graphics/opengl/OpenGL.cpp +++ b/src/modules/graphics/opengl/OpenGL.cpp @@ -391,15 +391,23 @@ void OpenGL::initOpenGLFunctions() } } - if (GLAD_ES_VERSION_2_0 && GLAD_OES_texture_3D && !GLAD_ES_VERSION_3_0) + if (GLAD_ES_VERSION_2_0 && !GLAD_ES_VERSION_3_0) { - // Function signatures don't match, we'll have to conditionally call it - //fp_glTexImage3D = fp_glTexImage3DOES; - fp_glTexSubImage3D = fp_glTexSubImage3DOES; - fp_glCopyTexSubImage3D = fp_glCopyTexSubImage3DOES; - fp_glCompressedTexImage3D = fp_glCompressedTexImage3DOES; - fp_glCompressedTexSubImage3D = fp_glCompressedTexSubImage3DOES; - fp_glFramebufferTexture3D = fp_glFramebufferTexture3DOES; + // The Nvidia Tegra 3 driver (used by Ouya) claims to support GL_EXT_texture_array but + // segfaults if you actually try to use it. OpenGL ES 2.0 devices should use OES_texture_3D. + // GL_EXT_texture_array is for desktops. + GLAD_EXT_texture_array = false; + + if (GLAD_OES_texture_3D) + { + // Function signatures don't match, we'll have to conditionally call it + //fp_glTexImage3D = fp_glTexImage3DOES; + fp_glTexSubImage3D = fp_glTexSubImage3DOES; + fp_glCopyTexSubImage3D = fp_glCopyTexSubImage3DOES; + fp_glCompressedTexImage3D = fp_glCompressedTexImage3DOES; + fp_glCompressedTexSubImage3D = fp_glCompressedTexSubImage3DOES; + fp_glFramebufferTexture3D = fp_glFramebufferTexture3DOES; + } } if (!GLAD_VERSION_3_2 && !GLAD_ES_VERSION_3_2 && !GLAD_ARB_draw_elements_base_vertex) diff --git a/src/modules/graphics/wrap_GraphicsShader.lua b/src/modules/graphics/wrap_GraphicsShader.lua index 9ee2f5da0..3fbe9e10b 100644 --- a/src/modules/graphics/wrap_GraphicsShader.lua +++ b/src/modules/graphics/wrap_GraphicsShader.lua @@ -54,7 +54,8 @@ GLSL.SYNTAX = [[ #define DepthCubeImage samplerCubeShadow #endif #define extern uniform -#ifdef GL_EXT_texture_array +#if defined(GL_EXT_texture_array) && (!defined(GL_ES) || __VERSION__ > 100) +#define texture_arrays_enabled #extension GL_EXT_texture_array : enable #endif #ifdef GL_OES_texture_3D @@ -85,7 +86,7 @@ uniform LOVE_HIGHP_OR_MEDIUMP vec4 love_ScreenSize; GLSL.FUNCTIONS = [[ #ifdef GL_ES - #if __VERSION__ >= 300 || defined(GL_EXT_texture_array) + #if __VERSION__ >= 300 || defined(texture_arrays_enabled) precision lowp sampler2DArray; #endif #if __VERSION__ >= 300 || defined(GL_OES_texture_3D) @@ -121,7 +122,7 @@ GLSL.FUNCTIONS = [[ #if __VERSION__ > 100 || defined(GL_OES_texture_3D) vec4 Texel(sampler3D s, vec3 c) { return love_texture3D(s, c); } #endif - #if __VERSION__ >= 130 || defined(GL_EXT_texture_array) + #if __VERSION__ >= 130 || defined(texture_arrays_enabled) vec4 Texel(sampler2DArray s, vec3 c) { return love_texture2DArray(s, c); } #endif #ifdef PIXEL @@ -130,7 +131,7 @@ GLSL.FUNCTIONS = [[ #if __VERSION__ > 100 || defined(GL_OES_texture_3D) vec4 Texel(sampler3D s, vec3 c, float b) { return love_texture3D(s, c, b); } #endif - #if __VERSION__ >= 130 || defined(GL_EXT_texture_array) + #if __VERSION__ >= 130 || defined(texture_arrays_enabled) vec4 Texel(sampler2DArray s, vec3 c, float b) { return love_texture2DArray(s, c, b); } #endif #endif