bool render() { glm::ivec2 WindowSize(this->getWindowSize()); // Clear the framebuffer glBindFramebuffer(GL_FRAMEBUFFER, 0); glClearBufferfv(GL_COLOR, 0, &glm::vec4(1.0f, 0.5f, 0.0f, 1.0f)[0]); glUseProgram(ProgramName); glUniform1i(UniformDiffuse, 0); // Pass 1 // Render the scene in a multisampled framebuffer glEnable(GL_MULTISAMPLE); renderFBO(FramebufferName[framebuffer::RENDER]); glDisable(GL_MULTISAMPLE); // Resolved multisampling glBindFramebuffer(GL_READ_FRAMEBUFFER, FramebufferName[framebuffer::RENDER]); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, FramebufferName[framebuffer::RESOLVE]); glBlitFramebuffer( 0, 0, FRAMEBUFFER_SIZE.x, FRAMEBUFFER_SIZE.y, 0, 0, FRAMEBUFFER_SIZE.x, FRAMEBUFFER_SIZE.y, GL_COLOR_BUFFER_BIT, GL_NEAREST); glBindFramebuffer(GL_FRAMEBUFFER, 0); // Pass 2 // Render the colorbuffer from the multisampled framebuffer renderFB(TextureName[texture::COLORBUFFER]); return true; }
void display() { // Clear the framebuffer glBindFramebuffer(GL_FRAMEBUFFER, 0); glClearBufferfv(GL_COLOR, 0, &glm::vec4(1.0f, 0.5f, 0.0f, 1.0f)[0]); glBindProgramPipeline(PipelineName); // Step 1: Render the scene in a multisampled framebuffer glEnable(GL_MULTISAMPLE); renderFBO(FramebufferRenderName); glDisable(GL_MULTISAMPLE); // Step 2: Resolved multisampling glBindFramebuffer(GL_READ_FRAMEBUFFER, FramebufferRenderName); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, FramebufferResolveName); glBlitFramebuffer( 0, 0, FRAMEBUFFER_SIZE.x, FRAMEBUFFER_SIZE.y, 0, 0, FRAMEBUFFER_SIZE.x, FRAMEBUFFER_SIZE.y, GL_COLOR_BUFFER_BIT, GL_NEAREST); // Step 3: Generated mipmaps glGenerateTextureMipmapEXT(ColorTextureName, GL_TEXTURE_2D); // Step 4: Render the colorbuffer from the multisampled framebuffer renderFB(ColorTextureName); glf::checkError("display"); glf::swapBuffers(); }
bool render() { glm::vec2 WindowSize(this->getWindowSize()); { glm::mat4 ProjectionA = glm::scale(glm::perspective(glm::pi<float>() * 0.25f, float(FRAMEBUFFER_SIZE.x) / FRAMEBUFFER_SIZE.y, 0.1f, 100.0f), glm::vec3(1, -1, 1)); *reinterpret_cast<glm::mat4*>(this->UniformPointer + 0) = ProjectionA * this->view() * glm::mat4(1); glm::mat4 ProjectionB = glm::perspective(glm::pi<float>() * 0.25f, WindowSize.x / WindowSize.y, 0.1f, 100.0f); *reinterpret_cast<glm::mat4*>(this->UniformPointer + this->UniformBlockSize) = ProjectionB * this->view() * glm::scale(glm::mat4(1), glm::vec3(2)); } // Step 1, render the scene in a multisampled framebuffer glBindProgramPipeline(PipelineName); renderFBO(); // Step 2: blit glBlitNamedFramebuffer(FramebufferName[framebuffer::RENDER], FramebufferName[framebuffer::RESOLVE], 0, 0, FRAMEBUFFER_SIZE.x, FRAMEBUFFER_SIZE.y, 0, 0, FRAMEBUFFER_SIZE.x, FRAMEBUFFER_SIZE.y, GL_COLOR_BUFFER_BIT, GL_NEAREST); GLenum MaxColorAttachment = GL_COLOR_ATTACHMENT0; glInvalidateNamedFramebufferData(FramebufferName[framebuffer::RENDER], 1, &MaxColorAttachment); // Step 3, render the colorbuffer from the multisampled framebuffer renderFB(); return true; }
void display() { glProgramUniform1i(ProgramName, UniformDiffuse, 0); // Clear the framebuffer glBindFramebuffer(GL_FRAMEBUFFER, 0); glClearBufferfv(GL_COLOR, 0, &glm::vec4(1.0f, 0.5f, 0.0f, 1.0f)[0]); glUseProgram(ProgramName); // Pass 1 // Render the scene in a multisampled framebuffer glEnable(GL_MULTISAMPLE); renderFBO(ProgramName, FramebufferRenderName); glDisable(GL_MULTISAMPLE); // Resolved multisampling glBindFramebuffer(GL_READ_FRAMEBUFFER, FramebufferRenderName); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, FramebufferResolveName); glBlitFramebuffer( 0, 0, FRAMEBUFFER_SIZE.x, FRAMEBUFFER_SIZE.y, 0, 0, FRAMEBUFFER_SIZE.x, FRAMEBUFFER_SIZE.y, GL_COLOR_BUFFER_BIT, GL_LINEAR); glBindFramebuffer(GL_FRAMEBUFFER, 0); // Pass 2 // Render the colorbuffer from the multisampled framebuffer renderFB(ProgramName, ColorTextureName); glf::checkError("display"); glf::swapBuffers(); }
bool render() { glBindFramebuffer(GL_FRAMEBUFFER, 0); glClearBufferfv(GL_COLOR, 0, &glm::vec4(1.0f, 0.5f, 0.0f, 1.0f)[0]); glBindProgramPipeline(PipelineName); // Pass 1, render the scene in a multisampled framebuffer glEnable(GL_MULTISAMPLE); glEnable(GL_SAMPLE_SHADING); glMinSampleShading(4.0f); //glEnable(GL_SAMPLE_MASK); //glSampleMaski(0, 0xFF); renderFBO(); glDisable(GL_MULTISAMPLE); // Resolved multisampling glBindFramebuffer(GL_READ_FRAMEBUFFER, FramebufferRenderName); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, FramebufferResolveName); glBlitFramebuffer( 0, 0, FRAMEBUFFER_SIZE.x, FRAMEBUFFER_SIZE.y, 0, 0, FRAMEBUFFER_SIZE.x, FRAMEBUFFER_SIZE.y, GL_COLOR_BUFFER_BIT, GL_NEAREST); glBindFramebuffer(GL_FRAMEBUFFER, 0); // Pass 2, render the colorbuffer from the multisampled framebuffer glm::vec2 WindowSize(this->getWindowSize()); glViewportIndexedfv(0, &glm::vec4(0, 0, WindowSize)[0]); renderFB(); return true; }
void display() { // Clear the framebuffer glBindFramebuffer(GL_FRAMEBUFFER, 0); glClearBufferfv(GL_COLOR, 0, &glm::vec4(1.0f, 0.5f, 0.0f, 1.0f)[0]); // Pass 1 // Render the scene in a multisampled framebuffer glEnable(GL_MULTISAMPLE); renderFBO(FramebufferName[framebuffer::RENDER]); glDisable(GL_MULTISAMPLE); // Resolved multisampling glBindFramebuffer(GL_READ_FRAMEBUFFER, FramebufferName[framebuffer::RENDER]); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, FramebufferName[framebuffer::RESOLVE]); glBlitFramebuffer( 0, 0, FRAMEBUFFER_SIZE.x, FRAMEBUFFER_SIZE.y, 0, 0, FRAMEBUFFER_SIZE.x, FRAMEBUFFER_SIZE.y, GL_COLOR_BUFFER_BIT, GL_NEAREST); glBindFramebuffer(GL_FRAMEBUFFER, 0); // Pass 2 // Render the colorbuffer from the multisampled framebuffer renderFB(TextureName[texture::COLORBUFFER]); glf::checkError("display"); glf::swapBuffers(); }
bool render() { glm::vec2 WindowSize(this->getWindowSize()); glUseProgram(ProgramName); glUniform1i(UniformDiffuse, 0); // Pass 1 glBindFramebuffer(GL_FRAMEBUFFER, FramebufferName[framebuffer::RENDER]); glViewport(0, 0, FRAMEBUFFER_SIZE.x, FRAMEBUFFER_SIZE.y); glClearBufferfv(GL_COLOR, 0, &glm::vec4(0.0f, 0.5f, 1.0f, 1.0f)[0]); renderFBO(); glBindFramebuffer(GL_FRAMEBUFFER, 0); // Generate FBO mipmaps glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, TextureName[texture::COLORBUFFER]); glGenerateMipmap(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, 0); // Blit framebuffers GLint const Border = 2; int const Tile = 4; glBindFramebuffer(GL_READ_FRAMEBUFFER, FramebufferName[framebuffer::RENDER]); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, FramebufferName[framebuffer::RESOLVE]); glClearBufferfv(GL_COLOR, 0, &glm::vec4(1.0f, 0.5f, 0.0f, 1.0f)[0]); for(int j = 0; j < Tile; ++j) for(int i = 0; i < Tile; ++i) { if((i + j) % 2) continue; glBlitFramebuffer(0, 0, FRAMEBUFFER_SIZE.x, FRAMEBUFFER_SIZE.y, FRAMEBUFFER_SIZE.x / Tile * (i + 0) + Border, FRAMEBUFFER_SIZE.x / Tile * (j + 0) + Border, FRAMEBUFFER_SIZE.y / Tile * (i + 1) - Border, FRAMEBUFFER_SIZE.y / Tile * (j + 1) - Border, GL_COLOR_BUFFER_BIT, GL_LINEAR); } // Pass 2 glBindFramebuffer(GL_FRAMEBUFFER, 0); glViewport(0, 0, static_cast<GLsizei>(WindowSize.x), static_cast<GLsizei>(WindowSize.y)); glClearBufferfv(GL_COLOR, 0, &glm::vec4(1.0f, 1.0f, 1.0f, 1.0f)[0]); renderFB(); return true; }
void display() { glUseProgram(ProgramName); // Pass 1 glBindFramebuffer(GL_FRAMEBUFFER, FramebufferRenderName); glViewport(0, 0, FRAMEBUFFER_SIZE.x, FRAMEBUFFER_SIZE.y); glClearColor(0.0f, 0.5f, 1.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); renderFBO(); glBindFramebuffer(GL_FRAMEBUFFER, 0); // Generate FBO mipmaps glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, ColorTextureName); glGenerateMipmap(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, 0); // Blit framebuffers GLint const Border = 2; int const Tile = 4; glBindFramebuffer(GL_READ_FRAMEBUFFER, FramebufferRenderName); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, FramebufferResolveName); for(int j = 0; j < Tile; ++j) for(int i = 0; i < Tile; ++i) { if((i + j) % 2) continue; glBlitFramebuffer(0, 0, FRAMEBUFFER_SIZE.x, FRAMEBUFFER_SIZE.y, FRAMEBUFFER_SIZE.x / Tile * (i + 0) + Border, FRAMEBUFFER_SIZE.x / Tile * (j + 0) + Border, FRAMEBUFFER_SIZE.y / Tile * (i + 1) - Border, FRAMEBUFFER_SIZE.y / Tile * (j + 1) - Border, GL_COLOR_BUFFER_BIT, GL_LINEAR); } // Pass 2 glBindFramebuffer(GL_FRAMEBUFFER, 0); glViewport(0, 0, Window.Size.x, Window.Size.y); glClearColor(1.0f, 0.5f, 0.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); renderFB(); glf::swapBuffers(); glf::checkError("Render"); }