Add OpenGLRenderTargetView and OpenGLDepthStencilView
This commit is contained in:
@@ -136,6 +136,8 @@ add_library(XCEngine STATIC
|
|||||||
include/XCEngine/RHI/OpenGL/OpenGLSwapChain.h
|
include/XCEngine/RHI/OpenGL/OpenGLSwapChain.h
|
||||||
include/XCEngine/RHI/OpenGL/OpenGLFence.h
|
include/XCEngine/RHI/OpenGL/OpenGLFence.h
|
||||||
include/XCEngine/RHI/OpenGL/OpenGLSampler.h
|
include/XCEngine/RHI/OpenGL/OpenGLSampler.h
|
||||||
|
include/XCEngine/RHI/OpenGL/OpenGLRenderTargetView.h
|
||||||
|
include/XCEngine/RHI/OpenGL/OpenGLDepthStencilView.h
|
||||||
src/RHI/OpenGL/OpenGLDevice.cpp
|
src/RHI/OpenGL/OpenGLDevice.cpp
|
||||||
src/RHI/OpenGL/OpenGLShader.cpp
|
src/RHI/OpenGL/OpenGLShader.cpp
|
||||||
src/RHI/OpenGL/OpenGLBuffer.cpp
|
src/RHI/OpenGL/OpenGLBuffer.cpp
|
||||||
@@ -146,6 +148,8 @@ add_library(XCEngine STATIC
|
|||||||
src/RHI/OpenGL/OpenGLSwapChain.cpp
|
src/RHI/OpenGL/OpenGLSwapChain.cpp
|
||||||
src/RHI/OpenGL/OpenGLFence.cpp
|
src/RHI/OpenGL/OpenGLFence.cpp
|
||||||
src/RHI/OpenGL/OpenGLSampler.cpp
|
src/RHI/OpenGL/OpenGLSampler.cpp
|
||||||
|
src/RHI/OpenGL/OpenGLRenderTargetView.cpp
|
||||||
|
src/RHI/OpenGL/OpenGLDepthStencilView.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories(XCEngine PUBLIC
|
target_include_directories(XCEngine PUBLIC
|
||||||
|
|||||||
35
engine/include/XCEngine/RHI/OpenGL/OpenGLDepthStencilView.h
Normal file
35
engine/include/XCEngine/RHI/OpenGL/OpenGLDepthStencilView.h
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
|
namespace XCEngine {
|
||||||
|
namespace RHI {
|
||||||
|
|
||||||
|
enum class DepthStencilFormat {
|
||||||
|
D16_UNORM,
|
||||||
|
D24_UNORM_S8_UINT,
|
||||||
|
D32_FLOAT,
|
||||||
|
D32_FLOAT_S8X24_UINT
|
||||||
|
};
|
||||||
|
|
||||||
|
class OpenGLDepthStencilView {
|
||||||
|
public:
|
||||||
|
OpenGLDepthStencilView();
|
||||||
|
~OpenGLDepthStencilView();
|
||||||
|
|
||||||
|
bool Initialize(unsigned int texture, int mipLevel = 0);
|
||||||
|
void Shutdown();
|
||||||
|
|
||||||
|
void Bind();
|
||||||
|
void Unbind();
|
||||||
|
|
||||||
|
unsigned int GetID() const { return m_texture; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
unsigned int m_texture;
|
||||||
|
unsigned int m_framebuffer;
|
||||||
|
int m_mipLevel;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace RHI
|
||||||
|
} // namespace XCEngine
|
||||||
28
engine/include/XCEngine/RHI/OpenGL/OpenGLRenderTargetView.h
Normal file
28
engine/include/XCEngine/RHI/OpenGL/OpenGLRenderTargetView.h
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
|
namespace XCEngine {
|
||||||
|
namespace RHI {
|
||||||
|
|
||||||
|
class OpenGLRenderTargetView {
|
||||||
|
public:
|
||||||
|
OpenGLRenderTargetView();
|
||||||
|
~OpenGLRenderTargetView();
|
||||||
|
|
||||||
|
bool Initialize(unsigned int texture, int mipLevel = 0);
|
||||||
|
void Shutdown();
|
||||||
|
|
||||||
|
void Bind(unsigned int slot);
|
||||||
|
void Unbind();
|
||||||
|
|
||||||
|
unsigned int GetID() const { return m_texture; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
unsigned int m_texture;
|
||||||
|
unsigned int m_framebuffer;
|
||||||
|
int m_mipLevel;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace RHI
|
||||||
|
} // namespace XCEngine
|
||||||
47
engine/src/RHI/OpenGL/OpenGLDepthStencilView.cpp
Normal file
47
engine/src/RHI/OpenGL/OpenGLDepthStencilView.cpp
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
#define GLFW_INCLUDE_NONE
|
||||||
|
#include "XCEngine/RHI/OpenGL/OpenGLDepthStencilView.h"
|
||||||
|
#include <glad/glad.h>
|
||||||
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
|
namespace XCEngine {
|
||||||
|
namespace RHI {
|
||||||
|
|
||||||
|
OpenGLDepthStencilView::OpenGLDepthStencilView() : m_texture(0), m_framebuffer(0), m_mipLevel(0) {
|
||||||
|
}
|
||||||
|
|
||||||
|
OpenGLDepthStencilView::~OpenGLDepthStencilView() {
|
||||||
|
}
|
||||||
|
|
||||||
|
bool OpenGLDepthStencilView::Initialize(unsigned int texture, int mipLevel) {
|
||||||
|
m_texture = texture;
|
||||||
|
m_mipLevel = mipLevel;
|
||||||
|
|
||||||
|
glGenFramebuffers(1, &m_framebuffer);
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, m_framebuffer);
|
||||||
|
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, texture, mipLevel);
|
||||||
|
|
||||||
|
if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLDepthStencilView::Shutdown() {
|
||||||
|
if (m_framebuffer) {
|
||||||
|
glDeleteFramebuffers(1, &m_framebuffer);
|
||||||
|
m_framebuffer = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLDepthStencilView::Bind() {
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, m_framebuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLDepthStencilView::Unbind() {
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace RHI
|
||||||
|
} // namespace XCEngine
|
||||||
47
engine/src/RHI/OpenGL/OpenGLRenderTargetView.cpp
Normal file
47
engine/src/RHI/OpenGL/OpenGLRenderTargetView.cpp
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
#define GLFW_INCLUDE_NONE
|
||||||
|
#include "XCEngine/RHI/OpenGL/OpenGLRenderTargetView.h"
|
||||||
|
#include <glad/glad.h>
|
||||||
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
|
namespace XCEngine {
|
||||||
|
namespace RHI {
|
||||||
|
|
||||||
|
OpenGLRenderTargetView::OpenGLRenderTargetView() : m_texture(0), m_framebuffer(0), m_mipLevel(0) {
|
||||||
|
}
|
||||||
|
|
||||||
|
OpenGLRenderTargetView::~OpenGLRenderTargetView() {
|
||||||
|
}
|
||||||
|
|
||||||
|
bool OpenGLRenderTargetView::Initialize(unsigned int texture, int mipLevel) {
|
||||||
|
m_texture = texture;
|
||||||
|
m_mipLevel = mipLevel;
|
||||||
|
|
||||||
|
glGenFramebuffers(1, &m_framebuffer);
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, m_framebuffer);
|
||||||
|
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, mipLevel);
|
||||||
|
|
||||||
|
if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLRenderTargetView::Shutdown() {
|
||||||
|
if (m_framebuffer) {
|
||||||
|
glDeleteFramebuffers(1, &m_framebuffer);
|
||||||
|
m_framebuffer = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLRenderTargetView::Bind(unsigned int slot) {
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, m_framebuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLRenderTargetView::Unbind() {
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace RHI
|
||||||
|
} // namespace XCEngine
|
||||||
Reference in New Issue
Block a user