diff --git a/include/openspace/rendering/renderengine.h b/include/openspace/rendering/renderengine.h index d64c689fd1..eeff1de63a 100644 --- a/include/openspace/rendering/renderengine.h +++ b/include/openspace/rendering/renderengine.h @@ -151,6 +151,8 @@ public: */ static scripting::LuaLibrary luaLibrary(); + void setDebugTextureRendering(GLuint texture); + glm::ivec2 renderingResolution() const; glm::ivec2 fontResolution() const; @@ -176,6 +178,8 @@ private: ghoul::Dictionary _resolveData; ScreenLog* _log = nullptr; + GLuint _debugTextureRender = 0; + ghoul::opengl::OpenGLStateCache* _openglStateCache = nullptr; properties::BoolProperty _showOverlayOnClients; diff --git a/modules/base/shaders/dbg_tex_fs.glsl b/modules/base/shaders/dbg_tex_fs.glsl new file mode 100644 index 0000000000..f2a09859c6 --- /dev/null +++ b/modules/base/shaders/dbg_tex_fs.glsl @@ -0,0 +1,12 @@ +#include "fragment.glsl" + +uniform sampler2D tex; + +in vec2 uv; + +Fragment getFragment() { + Fragment frag; + frag.disableLDR2HDR = true; + frag.color = texture(tex, uv).rrrr; + return frag; +} diff --git a/modules/base/shaders/dbg_tex_vs.glsl b/modules/base/shaders/dbg_tex_vs.glsl new file mode 100644 index 0000000000..85076bb300 --- /dev/null +++ b/modules/base/shaders/dbg_tex_vs.glsl @@ -0,0 +1,11 @@ +#version __CONTEXT__ + +layout(location=0) in vec2 vertex_position; + +out vec2 uv; + +void main() +{ + uv = 2 * (vertex_position - 0.5); + gl_Position = vec4(vertex_position, 0.0, 1.0); +} \ No newline at end of file diff --git a/src/rendering/renderengine.cpp b/src/rendering/renderengine.cpp index 960b893f8f..66dd78b8ad 100644 --- a/src/rendering/renderengine.cpp +++ b/src/rendering/renderengine.cpp @@ -710,6 +710,56 @@ void RenderEngine::render(const glm::mat4& sceneMatrix, const glm::mat4& viewMat } glDisable(GL_BLEND); } + + if (_debugTextureRender > 0) { + static constexpr GLfloat vertices[] = { + 0.5f, 0.5f, + 1.f, 0.5f, + 0.5f, 1.f, + 0.5f, 1.f, + 1.f, 0.5f, + 1.f, 1.f, + }; + + static GLuint vao = 0, vbo; + static std::unique_ptr prog; + if (vao == 0) { + glGenVertexArrays(1, &vao); + glBindVertexArray(vao); + + glGenBuffers(1, &vbo); + glBindBuffer(GL_ARRAY_BUFFER, vbo); + glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); + glEnableVertexAttribArray(0); + glVertexAttribPointer( + 0, + 2, + GL_FLOAT, + GL_FALSE, + 2 * sizeof(GL_FLOAT), + reinterpret_cast(0) + ); + glBindBuffer(GL_ARRAY_BUFFER, 0); + glBindVertexArray(0); + + prog = buildRenderProgram( + "PlanetaryTrailBlurProgram", + absPath("${MODULE_BASE}/shaders/dbg_tex_vs.glsl"), + absPath("${MODULE_BASE}/shaders/dbg_tex_fs.glsl") + ); + } + + prog->activate(); + prog->setUniform("tex", 0); + + glBindTexture(GL_TEXTURE_2D, _debugTextureRender); + + glBindVertexArray(vao); + glDrawArrays(GL_TRIANGLES, 0, 6); + glBindVertexArray(0); + + glBindTexture(GL_TEXTURE_2D, 0); + } LTRACE("RenderEngine::render(end)"); } @@ -1032,6 +1082,10 @@ scripting::LuaLibrary RenderEngine::luaLibrary() { }; } +void RenderEngine::setDebugTextureRendering(GLuint texture) { + _debugTextureRender = texture; +} + void RenderEngine::addScreenSpaceRenderable(std::unique_ptr s) { const std::string identifier = s->identifier();