Elevate Engine 1
Loading...
Searching...
No Matches
Elevate::OpenGLFrameBuffer Class Reference

#include <OpenGLFrameBuffer.h>

Inheritance diagram for Elevate::OpenGLFrameBuffer:
Elevate::Framebuffer

Public Member Functions

 OpenGLFrameBuffer (TexturePtr tex)
 
void Bind () const override
 
void Unbind () const override
 
void BlitFramebufferToScreen (uint32_t screenWidth, uint32_t screenHeight) const override
 
void Rescale (uint32_t width, uint32_t height) override
 
uint32_t GetFrameBufferId () const override
 
- Public Member Functions inherited from Elevate::Framebuffer
virtual ~Framebuffer ()=default
 
void * GetNativeTextureHandle () const
 
void SetClearColor (glm::vec4 color)
 
virtual void Clear () const
 

Additional Inherited Members

- Static Public Member Functions inherited from Elevate::Framebuffer
static FramebufferCreate (uint32_t width=1280, uint32_t height=720)
 
- Protected Member Functions inherited from Elevate::Framebuffer
 Framebuffer (TexturePtr tex)
 
- Protected Attributes inherited from Elevate::Framebuffer
TexturePtr m_texture
 
glm::vec4 m_clearColor = { 1.0f, 1.0f, 1.0f, 1.0f }
 

Detailed Description

Definition at line 6 of file OpenGLFrameBuffer.h.

Constructor & Destructor Documentation

◆ OpenGLFrameBuffer()

Elevate::OpenGLFrameBuffer::OpenGLFrameBuffer ( TexturePtr  tex)

Definition at line 11 of file OpenGLFrameBuffer.cpp.

11 : Framebuffer(tex)
12{
13 EE_CORE_ASSERT(tex->GetWidth() > 0 && tex->GetHeight() > 0, "Framebuffer dimensions must be positive");
14
15 // Creating and binding
16 glGenFramebuffers(1, &m_frameBufferId);
17 Bind();
18
19 m_textureId = static_cast<GLuint>(reinterpret_cast<intptr_t>(tex->GetNativeHandle()));
20
21 // Bind the texture with the Frame Buffer
22 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_textureId, 0);
23 // render buffer
24 glGenRenderbuffers(1, &m_renderBufferId);
25 glBindRenderbuffer(GL_RENDERBUFFER, m_renderBufferId);
26 glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, tex->GetWidth(), tex->GetHeight());
27 glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, m_renderBufferId);
28
29 CheckCompleteness();
30 Unbind();
31}
Framebuffer(TexturePtr tex)
Definition FrameBuffer.h:60
void Unbind() const override

Member Function Documentation

◆ Bind()

void Elevate::OpenGLFrameBuffer::Bind ( ) const
overridevirtual

Implements Elevate::Framebuffer.

Definition at line 33 of file OpenGLFrameBuffer.cpp.

34{
35 glBindFramebuffer(GL_FRAMEBUFFER, m_frameBufferId);
36}

◆ BlitFramebufferToScreen()

void Elevate::OpenGLFrameBuffer::BlitFramebufferToScreen ( uint32_t  screenWidth,
uint32_t  screenHeight 
) const
overridevirtual

Implements Elevate::Framebuffer.

Definition at line 43 of file OpenGLFrameBuffer.cpp.

44{
45 GLCheck(glBindFramebuffer(GL_READ_FRAMEBUFFER, m_frameBufferId)); // Read from this framebuffer
46 GLCheck(glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0)); // Draw to the main framebuffer
47
48 // TODO GIVE A CHOICE TO THE USER FOR THE FILTERING
49 glBlitFramebuffer(
50 0, 0, m_texture->GetWidth(), m_texture->GetHeight(),
51 0, 0, screenWidth, screenHeight,
52 GL_COLOR_BUFFER_BIT, GL_NEAREST
53 );
54}
#define GLCheck(x)
Definition GLDebug.h:11

◆ GetFrameBufferId()

uint32_t Elevate::OpenGLFrameBuffer::GetFrameBufferId ( ) const
inlineoverridevirtual

Implements Elevate::Framebuffer.

Definition at line 16 of file OpenGLFrameBuffer.h.

16{ return m_frameBufferId; }

◆ Rescale()

void Elevate::OpenGLFrameBuffer::Rescale ( uint32_t  width,
uint32_t  height 
)
overridevirtual

Implements Elevate::Framebuffer.

Definition at line 56 of file OpenGLFrameBuffer.cpp.

57{
58 if (width == m_texture->GetWidth() && height == m_texture->GetHeight()) return;
59 else if (width <= 0 || height <= 0) return;
60
61 Bind();
62
64
65 TextureMetadata meta = m_texture->GetMetadata();
66 meta.Width = width;
67 meta.Height = height;
68
69 m_texture->SetData(nullptr, meta);
70
71 // Attacher la texture redimensionn�e au framebuffer
72 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_textureId, 0);
73
74 // Redimensionner le renderbuffer pour le depth/stencil
75 glBindRenderbuffer(GL_RENDERBUFFER, m_renderBufferId);
76 glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, width, height);
77 glBindRenderbuffer(GL_RENDERBUFFER, 0); // Unbind renderbuffer
78
79 CheckCompleteness();
80 Unbind();
81}
static void BindTexture(const std::shared_ptr< Texture > &texture, uint8_t slot=0)
Definition Renderer.cpp:160

◆ Unbind()

void Elevate::OpenGLFrameBuffer::Unbind ( ) const
overridevirtual

Implements Elevate::Framebuffer.

Definition at line 38 of file OpenGLFrameBuffer.cpp.

39{
40 glBindFramebuffer(GL_FRAMEBUFFER, 0);
41}

The documentation for this class was generated from the following files: