Adding ImGui , fixing some minor framebuffer error

This commit is contained in:
2023-05-19 16:04:52 +02:00
parent dc89cc6173
commit 3acc8525b0
8 changed files with 141 additions and 41 deletions

View File

@ -1,40 +1,59 @@
#include "OutlinePass.h"
#include "Renderer.h"
#include "../../CheckErrors.h"
OutlinePass::OutlinePass(Model& sceneObject, glm::mat4& model, glm::mat4& projection, Camera& camera)
: RenderPass("Renderpass - Outline", "../Shaders/shader.vs", "../Shaders/outlineshader.fs" ) , m_model(sceneObject), camera(camera), projection(projection), model(model)
{
// Framebuffer outline effect
std::cout << "Create Framebuffer" << std::endl;
m_outlineFrameBuffer = FrameBuffer();
m_outlineFrameBuffer.Bind();
// Create a texture attachment (colour attachment)
std::cout << "Create Texture" << std::endl;
m_depthTexture = CreateTexture(800,600);
// attach texture to the frame buffer as a colour attachment
m_outlineFrameBuffer.Attach(*m_depthTexture);
// Add depth buffer attachment
std::cout << "Create RenderBuffer" << std::endl;
m_outlineRenderBuffer = RenderBuffer();
m_outlineRenderBuffer.Bind();
m_outlineRenderBuffer.UseDepthAndStencil();
m_outlineRenderBuffer.Unbind();
// attach depth buffer to our framebuffer
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, m_outlineRenderBuffer.id);
m_outlineFrameBuffer.Unbind();
std::cout << "Success!" << std::endl;
}
OutlinePass::~OutlinePass(){
void OutlinePass::Create() {
// Framebuffer outline effect
std::cout << "Create Framebuffer" << std::endl;
delete m_depthTexture;
m_outlineFrameBuffer = new FrameBuffer();
glCheckError();
m_outlineFrameBuffer->Bind();
glCheckError();
// Create a texture attachment (colour attachment)
std::cout << "Create Texture" << std::endl;
m_colourTexture = CreateTexture(800, 600);
glCheckError();
// attach texture to the frame buffer as a colour attachment
m_outlineFrameBuffer->Attach(*m_colourTexture);
glCheckError();
// Add depth buffer attachment
std::cout << "Create RenderBuffer" << std::endl;
m_outlineRenderBuffer = new RenderBuffer();
glCheckError();
m_outlineRenderBuffer->Bind();
glCheckError();
m_outlineRenderBuffer->UseDepthAndStencil();
glCheckError();
m_outlineRenderBuffer->Unbind();
glCheckError();
// attach depth buffer to our framebuffer
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, m_outlineRenderBuffer->id);
glCheckError();
m_outlineFrameBuffer->Unbind();
glCheckError();
std::cout << "Success!" << std::endl;
}
OutlinePass::~OutlinePass(){
delete m_colourTexture;
delete m_outlineRenderBuffer;
}
void OutlinePass::Render()

View File

@ -13,12 +13,13 @@ public:
void Render() override;
OutlinePass (Model& sceneObject, glm::mat4& model , glm::mat4& projection, Camera& camera) ;
void Create();
~OutlinePass();
private:
FrameBuffer m_outlineFrameBuffer;
RenderBuffer m_outlineRenderBuffer;
Texture* m_depthTexture;
FrameBuffer* m_outlineFrameBuffer;
RenderBuffer* m_outlineRenderBuffer;
Texture* m_colourTexture;
glm::mat4 model;
glm::mat4 projection;

View File

@ -21,5 +21,5 @@ RenderBuffer::RenderBuffer()
RenderBuffer::~RenderBuffer()
{
glDeleteRenderbuffers(GL_RENDERBUFFER, &id);
// glDeleteRenderbuffers(GL_RENDERBUFFER, &id);
}

View File

@ -9,18 +9,23 @@
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>
void Renderer::Setup()
{
framebuffer.Bind();
ColourBuffer = CreateTexture(800,600);
framebuffer.Attach(*ColourBuffer);
renderbufferObject.Bind();
renderbufferObject.UseDepthAndStencil();
renderbufferObject.Unbind();
framebuffer.Attach(renderbufferObject);
if(framebuffer.IsComplete() == false ){
@ -33,6 +38,7 @@ void Renderer::Setup()
void Renderer::Render( )
{
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
// Recalculate the Camera's view matrix
@ -44,7 +50,6 @@ void Renderer::Render( )
// 1. Skybox pass
skyboxpass.Render();
// 2. Scene pass
scenepass.Render();
@ -68,8 +73,9 @@ void Renderer::Render( )
m_shader.use();
m_shader.setInt("screenTexture",0);
glBindVertexArray(ScreenVAO);
glBindTexture(GL_TEXTURE_2D, ColourBuffer->id);
glDrawArrays(GL_TRIANGLES, 0, 6);
@ -91,6 +97,10 @@ Renderer::Renderer(Camera& camera, Model& scene) :
m_shader("../Shaders/Framebuffers.vs", "../Shaders/Framebuffers.fs")
{
outlinepass.Create();
std::vector<std::string> faces = {
"../Textures/skybox/right.jpg",
"../Textures/skybox/left.jpg",

View File

@ -1,5 +1,4 @@
#include "SkyboxPass.h"
SkyboxPass::SkyboxPass(Skybox& skybox, Camera& camera, glm::mat4& projection) : RenderPass("Render Pass - Skybox", "../Shaders/skybox.vs", "../Shaders/Cubemap.fs"),
skybox(skybox),
camera(camera),
@ -15,14 +14,19 @@ void SkyboxPass::Render()
glDepthMask(GL_FALSE);
m_shader.use();
m_shader.setMat4("projection", projection);
m_shader.setMat4("projection", projection);
glm::mat4 centeredView = glm::mat4(glm::mat3(camera.GetViewMatrix()));
m_shader.setMat4("view", centeredView);
skybox.Bind();
glDrawArrays(GL_TRIANGLES, 0, 36);
skybox.Unbind();
glDepthMask(GL_TRUE);
}