diff --git a/include/openspace/rendering/screenspacerenderable.h b/include/openspace/rendering/screenspacerenderable.h index 28f262f61d..49977b8b9d 100644 --- a/include/openspace/rendering/screenspacerenderable.h +++ b/include/openspace/rendering/screenspacerenderable.h @@ -109,7 +109,8 @@ protected: glm::vec3 raeToCartesian(const glm::vec3& rae) const; glm::vec3 cartesianToRae(const glm::vec3& cartesian) const; - void draw(const glm::mat4& modelTransform, const RenderData& renderData); + void draw(const glm::mat4& modelTransform, const RenderData& renderData, + bool useAcceleratedRendering = false); virtual void bindTexture() = 0; virtual void unbindTexture(); @@ -150,7 +151,8 @@ protected: glm::ivec2 _objectSize = glm::ivec2(0); UniformCache(color, opacity, blackoutFactor, hue, value, saturation, mvpMatrix, tex, - backgroundColor, gamma, borderColor, borderWidth, borderFeather) _uniformCache; + backgroundColor, gamma, borderColor, borderWidth, borderFeather, + useAcceleratedRendering) _uniformCache; std::unique_ptr _shader; }; diff --git a/modules/base/shaders/screenspace_fs.glsl b/modules/base/shaders/screenspace_fs.glsl index 5d0b7fea8a..f3aa9f27a0 100644 --- a/modules/base/shaders/screenspace_fs.glsl +++ b/modules/base/shaders/screenspace_fs.glsl @@ -41,20 +41,20 @@ uniform float gamma = 1.0; uniform vec2 borderWidth = vec2(0.1); uniform vec3 borderColor = vec3(0.0); uniform int borderFeather = 0; - // Accelerated rendering can be used for the CEF browser -#define USE_ACCELERATED_RENDERING #{useAcceleratedRendering} +uniform bool useAcceleratedRendering = false; + Fragment getFragment() { Fragment frag; vec4 originalColor; - #if USE_ACCELERATED_RENDERING + if (useAcceleratedRendering) { vec2 flippedTexCoords = vec2(vs_st.x, 1.0 - vs_st.y); // Correcting both orientation and color channels originalColor = texture(tex, flippedTexCoords).bgra; - #else + } else { originalColor = texture(tex, vs_st); - #endif + } vec4 texColor = originalColor * vec4(color, opacity); diff --git a/modules/webbrowser/include/screenspacebrowser.h b/modules/webbrowser/include/screenspacebrowser.h index a2d6d5cfad..9a10898dc8 100644 --- a/modules/webbrowser/include/screenspacebrowser.h +++ b/modules/webbrowser/include/screenspacebrowser.h @@ -97,6 +97,7 @@ private: CefRefPtr _keyboardHandler; + bool _useAcceleratedRendering = false; bool _isUrlDirty = false; bool _isDimensionsDirty = false; }; diff --git a/modules/webbrowser/src/screenspacebrowser.cpp b/modules/webbrowser/src/screenspacebrowser.cpp index 8ee054ba11..78ccc956fb 100644 --- a/modules/webbrowser/src/screenspacebrowser.cpp +++ b/modules/webbrowser/src/screenspacebrowser.cpp @@ -123,6 +123,7 @@ ScreenSpaceBrowser::ScreenSpaceBrowser(const ghoul::Dictionary& dictionary) addProperty(_url); addProperty(_dimensions); addProperty(_reload); + _useAcceleratedRendering = WebBrowserModule::canUseAcceleratedRendering(); WebBrowserModule* webBrowser = global::moduleEngine->module(); if (webBrowser) { @@ -131,13 +132,7 @@ ScreenSpaceBrowser::ScreenSpaceBrowser(const ghoul::Dictionary& dictionary) } bool ScreenSpaceBrowser::initializeGL() { - ghoul::Dictionary dict = ghoul::Dictionary(); - - dict.setValue( - "useAcceleratedRendering", - WebBrowserModule::canUseAcceleratedRendering() - ); - createShaders(dict); + createShaders(); _browserInstance->initialize(); _browserInstance->loadUrl(_url); @@ -173,7 +168,7 @@ void ScreenSpaceBrowser::render(const RenderData& renderData) { translationMatrix() * localRotationMatrix() * scaleMatrix(); - draw(mat, renderData); + draw(mat, renderData, _useAcceleratedRendering); } void ScreenSpaceBrowser::update() { diff --git a/src/rendering/screenspacerenderable.cpp b/src/rendering/screenspacerenderable.cpp index 2d02451c76..fa49bc7e11 100644 --- a/src/rendering/screenspacerenderable.cpp +++ b/src/rendering/screenspacerenderable.cpp @@ -653,7 +653,8 @@ glm::mat4 ScreenSpaceRenderable::translationMatrix() { } void ScreenSpaceRenderable::draw(const glm::mat4& modelTransform, - const RenderData& renderData) + const RenderData& renderData, + bool useAcceleratedRendering) { glDisable(GL_CULL_FACE); @@ -678,6 +679,7 @@ void ScreenSpaceRenderable::draw(const glm::mat4& modelTransform, _shader->setUniform(_uniformCache.borderWidth, borderUV); _shader->setUniform(_uniformCache.borderColor, _borderColor); _shader->setUniform(_uniformCache.borderFeather, _borderFeather); + _shader->setUniform(_uniformCache.useAcceleratedRendering, useAcceleratedRendering); _shader->setUniform( _uniformCache.mvpMatrix, global::renderEngine->scene()->camera()->viewProjectionMatrix() * modelTransform