From 69c5d553b56b29310f26320af42448d60aa02e8b Mon Sep 17 00:00:00 2001 From: WerWolv Date: Wed, 22 Jan 2025 19:55:17 +0100 Subject: [PATCH] fix: Disable postprocessing shaders in Web version --- main/gui/source/window/window.cpp | 123 ++++++++++++++++-------------- 1 file changed, 66 insertions(+), 57 deletions(-) diff --git a/main/gui/source/window/window.cpp b/main/gui/source/window/window.cpp index 0fcdc4d89..9a0d0c2d9 100644 --- a/main/gui/source/window/window.cpp +++ b/main/gui/source/window/window.cpp @@ -77,7 +77,10 @@ namespace hex { this->initImGui(); this->setupNativeWindow(); this->registerEventHandlers(); - this->loadPostProcessingShader(); + + #if !defined(OS_WEB) + this->loadPostProcessingShader(); + #endif ContentRegistry::Settings::impl::store(); ContentRegistry::Settings::impl::load(); @@ -791,10 +794,14 @@ namespace hex { glfwMakeContextCurrent(backupContext); if (shouldRender) { - if (m_postProcessingShader.isValid()) - drawWithShader(); - else + #if !defined(OS_WEB) + if (m_postProcessingShader.isValid()) + drawWithShader(); + else + drawImGui(); + #else drawImGui(); + #endif glfwSwapBuffers(m_window); } @@ -823,74 +830,76 @@ namespace hex { } void Window::drawWithShader() { - int displayWidth, displayHeight; - glfwGetFramebufferSize(m_window, &displayWidth, &displayHeight); + #if !defined(OS_WEB) + int displayWidth, displayHeight; + glfwGetFramebufferSize(m_window, &displayWidth, &displayHeight); - GLuint fbo, texture; - glGenFramebuffers(1, &fbo); - glBindFramebuffer(GL_FRAMEBUFFER, fbo); + GLuint fbo, texture; + glGenFramebuffers(1, &fbo); + glBindFramebuffer(GL_FRAMEBUFFER, fbo); - // Create a texture to render into - glGenTextures(1, &texture); - glBindTexture(GL_TEXTURE_2D, texture); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, displayWidth, displayHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + // Create a texture to render into + glGenTextures(1, &texture); + glBindTexture(GL_TEXTURE_2D, texture); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, displayWidth, displayHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - // Attach the texture to the framebuffer - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); + // Attach the texture to the framebuffer + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); - // Check if framebuffer is complete - if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) { - log::error("Framebuffer is not complete!"); - } + // Check if framebuffer is complete + if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) { + log::error("Framebuffer is not complete!"); + } - glBindFramebuffer(GL_FRAMEBUFFER, fbo); + glBindFramebuffer(GL_FRAMEBUFFER, fbo); - drawImGui(); + drawImGui(); - glBindFramebuffer(GL_FRAMEBUFFER, 0); + glBindFramebuffer(GL_FRAMEBUFFER, 0); - GLuint quadVAO, quadVBO; - float quadVertices[] = { - // positions // texCoords - -1.0f, 1.0f, 0.0f, 1.0f, - -1.0f, -1.0f, 0.0f, 0.0f, - 1.0f, -1.0f, 1.0f, 0.0f, + GLuint quadVAO, quadVBO; + float quadVertices[] = { + // positions // texCoords + -1.0f, 1.0f, 0.0f, 1.0f, + -1.0f, -1.0f, 0.0f, 0.0f, + 1.0f, -1.0f, 1.0f, 0.0f, - -1.0f, 1.0f, 0.0f, 1.0f, - 1.0f, -1.0f, 1.0f, 0.0f, - 1.0f, 1.0f, 1.0f, 1.0f - }; + -1.0f, 1.0f, 0.0f, 1.0f, + 1.0f, -1.0f, 1.0f, 0.0f, + 1.0f, 1.0f, 1.0f, 1.0f + }; - glGenVertexArrays(1, &quadVAO); - glGenBuffers(1, &quadVBO); - glBindVertexArray(quadVAO); - glBindBuffer(GL_ARRAY_BUFFER, quadVBO); - glBufferData(GL_ARRAY_BUFFER, sizeof(quadVertices), quadVertices, GL_STATIC_DRAW); - glEnableVertexAttribArray(0); - glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void*)0); - glEnableVertexAttribArray(1); - glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void*)(2 * sizeof(float))); - glBindVertexArray(0); + glGenVertexArrays(1, &quadVAO); + glGenBuffers(1, &quadVBO); + glBindVertexArray(quadVAO); + glBindBuffer(GL_ARRAY_BUFFER, quadVBO); + glBufferData(GL_ARRAY_BUFFER, sizeof(quadVertices), quadVertices, GL_STATIC_DRAW); + glEnableVertexAttribArray(0); + glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void*)0); + glEnableVertexAttribArray(1); + glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void*)(2 * sizeof(float))); + glBindVertexArray(0); - m_postProcessingShader.bind(); + m_postProcessingShader.bind(); - glBindVertexArray(quadVAO); - glBindTexture(GL_TEXTURE_2D, texture); - glClearColor(0.00F, 0.00F, 0.00F, 0.00F); - glClear(GL_COLOR_BUFFER_BIT); - glDrawArrays(GL_TRIANGLES, 0, 6); + glBindVertexArray(quadVAO); + glBindTexture(GL_TEXTURE_2D, texture); + glClearColor(0.00F, 0.00F, 0.00F, 0.00F); + glClear(GL_COLOR_BUFFER_BIT); + glDrawArrays(GL_TRIANGLES, 0, 6); - m_postProcessingShader.unbind(); + m_postProcessingShader.unbind(); - glDeleteVertexArrays(1, &quadVAO); - glDeleteBuffers(1, &quadVBO); - glDeleteTextures(1, &texture); - glDeleteFramebuffers(1, &fbo); + glDeleteVertexArrays(1, &quadVAO); + glDeleteBuffers(1, &quadVBO); + glDeleteTextures(1, &texture); + glDeleteFramebuffers(1, &fbo); + #endif } void Window::initGLFW() {