Browse Source

ESSL: always enable standard derivative functionality (dFdx, dFdy, fwidth) when available. Added 'shaderderivatives' graphics feature enum.

--HG--
branch : minor
Alex Szpakowski 8 years ago
parent
commit
34f25bd6c8

+ 1 - 0
src/modules/graphics/Graphics.cpp

@@ -1457,6 +1457,7 @@ StringMap<Graphics::Feature, Graphics::FEATURE_MAX_ENUM>::Entry Graphics::featur
 	{ "lighten",            FEATURE_LIGHTEN              },
 	{ "lighten",            FEATURE_LIGHTEN              },
 	{ "fullnpot",           FEATURE_FULL_NPOT            },
 	{ "fullnpot",           FEATURE_FULL_NPOT            },
 	{ "pixelshaderhighp",   FEATURE_PIXEL_SHADER_HIGHP   },
 	{ "pixelshaderhighp",   FEATURE_PIXEL_SHADER_HIGHP   },
+	{ "shaderderivatives",  FEATURE_SHADER_DERIVATIVES   },
 	{ "glsl3",              FEATURE_GLSL3                },
 	{ "glsl3",              FEATURE_GLSL3                },
 	{ "instancing",         FEATURE_INSTANCING           },
 	{ "instancing",         FEATURE_INSTANCING           },
 };
 };

+ 1 - 0
src/modules/graphics/Graphics.h

@@ -159,6 +159,7 @@ public:
 		FEATURE_LIGHTEN,
 		FEATURE_LIGHTEN,
 		FEATURE_FULL_NPOT,
 		FEATURE_FULL_NPOT,
 		FEATURE_PIXEL_SHADER_HIGHP,
 		FEATURE_PIXEL_SHADER_HIGHP,
+		FEATURE_SHADER_DERIVATIVES,
 		FEATURE_GLSL3,
 		FEATURE_GLSL3,
 		FEATURE_INSTANCING,
 		FEATURE_INSTANCING,
 		FEATURE_MAX_ENUM
 		FEATURE_MAX_ENUM

+ 2 - 1
src/modules/graphics/opengl/Graphics.cpp

@@ -1418,9 +1418,10 @@ void Graphics::initCapabilities()
 	capabilities.features[FEATURE_LIGHTEN] = GLAD_VERSION_1_4 || GLAD_ES_VERSION_3_0 || GLAD_EXT_blend_minmax;
 	capabilities.features[FEATURE_LIGHTEN] = GLAD_VERSION_1_4 || GLAD_ES_VERSION_3_0 || GLAD_EXT_blend_minmax;
 	capabilities.features[FEATURE_FULL_NPOT] = GLAD_VERSION_2_0 || GLAD_ES_VERSION_3_0 || GLAD_OES_texture_npot;
 	capabilities.features[FEATURE_FULL_NPOT] = GLAD_VERSION_2_0 || GLAD_ES_VERSION_3_0 || GLAD_OES_texture_npot;
 	capabilities.features[FEATURE_PIXEL_SHADER_HIGHP] = gl.isPixelShaderHighpSupported();
 	capabilities.features[FEATURE_PIXEL_SHADER_HIGHP] = gl.isPixelShaderHighpSupported();
+	capabilities.features[FEATURE_SHADER_DERIVATIVES] = GLAD_VERSION_2_0 || GLAD_ES_VERSION_3_0 || GLAD_OES_standard_derivatives;
 	capabilities.features[FEATURE_GLSL3] = GLAD_ES_VERSION_3_0 || gl.isCoreProfile();
 	capabilities.features[FEATURE_GLSL3] = GLAD_ES_VERSION_3_0 || gl.isCoreProfile();
 	capabilities.features[FEATURE_INSTANCING] = gl.isInstancingSupported();
 	capabilities.features[FEATURE_INSTANCING] = gl.isInstancingSupported();
-	static_assert(FEATURE_MAX_ENUM == 7, "Graphics::initCapabilities must be updated when adding a new graphics feature!");
+	static_assert(FEATURE_MAX_ENUM == 8, "Graphics::initCapabilities must be updated when adding a new graphics feature!");
 
 
 	capabilities.limits[LIMIT_POINT_SIZE] = gl.getMaxPointSize();
 	capabilities.limits[LIMIT_POINT_SIZE] = gl.getMaxPointSize();
 	capabilities.limits[LIMIT_TEXTURE_SIZE] = gl.getMax2DTextureSize();
 	capabilities.limits[LIMIT_TEXTURE_SIZE] = gl.getMax2DTextureSize();

+ 3 - 0
src/modules/graphics/wrap_Graphics.lua

@@ -62,6 +62,9 @@ GLSL.SYNTAX = [[
 #ifdef GL_OES_texture_3D
 #ifdef GL_OES_texture_3D
 #extension GL_OES_texture_3D : enable
 #extension GL_OES_texture_3D : enable
 #endif
 #endif
+#ifdef GL_OES_standard_derivatives
+#extension GL_OES_standard_derivatives : enable
+#endif
 ]]
 ]]
 
 
 -- Uniforms shared by the vertex and pixel shader stages.
 -- Uniforms shared by the vertex and pixel shader stages.