From 7b0f7626833d280ed1cd3f6eca5dfb14800fae04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Thu, 30 May 2013 00:45:17 +0200 Subject: [PATCH] Added and fully implemented OES_standard_derivatives extension. --- src/Context.cpp | 1 + src/Extensions.h | 1 + src/Renderer.cpp | 4 ++++ src/Renderer.h | 36 ++++++++++++++++++++++++++++++++++++ 4 files changed, 42 insertions(+) diff --git a/src/Context.cpp b/src/Context.cpp index b15b81956..d4d88cce8 100644 --- a/src/Context.cpp +++ b/src/Context.cpp @@ -251,6 +251,7 @@ const std::vector& Extension::extensions(Version version) { _extension(GL,OES,vertex_half_float), _extension(GL,OES,packed_depth_stencil), _extension(GL,OES,depth_texture), + _extension(GL,OES,standard_derivatives), // done _extension(GL,OES,vertex_array_object), _extension(GL,OES,required_internalformat)}; #endif diff --git a/src/Extensions.h b/src/Extensions.h index 02963ce29..ea74900da 100644 --- a/src/Extensions.h +++ b/src/Extensions.h @@ -236,6 +236,7 @@ namespace GL { _extension(GL,OES,vertex_half_float, GLES200, GLES300) // #38 _extension(GL,OES,packed_depth_stencil, GLES200, GLES300) // #43 _extension(GL,OES,depth_texture, GLES200, GLES300) // #44 + _extension(GL,OES,standard_derivatives, GLES200, GLES300) // #45 _extension(GL,OES,vertex_array_object, GLES200, GLES300) // #71 _extension(GL,OES,required_internalformat, GLES200, GLES300) // #? } diff --git a/src/Renderer.cpp b/src/Renderer.cpp index ff7751eb9..df9b41313 100644 --- a/src/Renderer.cpp +++ b/src/Renderer.cpp @@ -46,6 +46,10 @@ void Renderer::setFeature(const Feature feature, const bool enabled) { enabled ? glEnable(GLenum(feature)) : glDisable(GLenum(feature)); } +void Renderer::setHint(const Hint target, const HintMode mode) { + glHint(GLenum(target), GLenum(mode)); +} + void Renderer::setClearColor(const Color4<>& color) { glClearColor(color.r(), color.g(), color.b(), color.a()); } diff --git a/src/Renderer.h b/src/Renderer.h index 8a1712da3..0ff490450 100644 --- a/src/Renderer.h +++ b/src/Renderer.h @@ -192,6 +192,42 @@ class MAGNUM_EXPORT Renderer { */ static void setFeature(Feature feature, bool enabled); + /** + * @brief Hint + * + * @see setHint() + */ + enum class Hint: GLenum { + /** + * Accuracy of derivative calculation in fragment shader. + * @requires_gles30 %Extension @es_extension{OES,standard_derivatives} + */ + #ifndef MAGNUM_TARGET_GLES2 + FragmentShaderDerivative = GL_FRAGMENT_SHADER_DERIVATIVE_HINT + #else + FragmentShaderDerivative = GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES + #endif + }; + + /** + * @brief Hint mode + * + * @see setHint() + */ + enum class HintMode: GLenum { + Fastest = GL_FASTEST, /**< Most efficient option. */ + Nicest = GL_NICEST, /**< Most correct or highest quality option. */ + DontCare = GL_DONT_CARE /**< No preference. */ + }; + + /** + * @brief Set hint + * + * Initial value is @ref HintMode "HintMode::DontCare" for all targets. + * @see @fn_gl{Hint} + */ + static void setHint(Hint target, HintMode mode); + /*@}*/ /** @{ @name Clearing values */