MSAA mostly working. Only merging the MS render buffer to a single texture so that others could use the AA texture easly
This commit is contained in:
@@ -27,15 +27,80 @@ public:
|
||||
void OnWindowResize();
|
||||
|
||||
//Return the texture that is used in later stages to apply the bloom effect
|
||||
GLuint BloomTexture() const { return m_BloomTexture; }
|
||||
GLuint BloomTexture() const {
|
||||
if (m_MSAA){
|
||||
m_AntiAliasedFrameBuffer->Bind();
|
||||
glClearColor(0.f, 0.f, 0.f, 0.f);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
m_AntiAliasedFrameBuffer->Unbind();
|
||||
m_FinalPassFrameBuffer->Read();
|
||||
glReadBuffer(GL_COLOR_ATTACHMENT1);
|
||||
m_AntiAliasedFrameBuffer->Draw();
|
||||
glBlitFramebuffer(
|
||||
0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height,
|
||||
0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height,
|
||||
GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
||||
glReadBuffer(GL_BACK);
|
||||
return m_AntiAliasedTexture;
|
||||
}
|
||||
return m_BloomTexture; }
|
||||
//Return the texture with diffuse and lighting of the scene.
|
||||
GLuint SceneTexture() const { return m_SceneTexture; }
|
||||
GLuint SceneTexture() const {
|
||||
if (m_MSAA) {
|
||||
m_AntiAliasedFrameBuffer->Bind();
|
||||
glClearColor(0.f, 0.f, 0.f, 0.f);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
m_AntiAliasedFrameBuffer->Unbind();
|
||||
GLERROR("SceneTexture() 11");
|
||||
m_FinalPassFrameBuffer->Read();
|
||||
GLERROR("SceneTexture() 12");
|
||||
glReadBuffer(GL_COLOR_ATTACHMENT0);
|
||||
GLERROR("SceneTexture() 13");
|
||||
m_AntiAliasedFrameBuffer->Draw();
|
||||
GLERROR("SceneTexture() 14");
|
||||
glBlitFramebuffer(
|
||||
0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height,
|
||||
0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height,
|
||||
GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
||||
GLERROR("SceneTexture() 15");
|
||||
glReadBuffer(GL_BACK);
|
||||
return m_AntiAliasedTexture;
|
||||
}
|
||||
return m_SceneTexture; }
|
||||
//Return the SceneTexture with the blurred HUD bits.
|
||||
GLuint CombinedSceneTexture() const { return m_CombinedTexture; }
|
||||
GLuint CombinedSceneTexture() const {
|
||||
if (m_MSAA) {
|
||||
m_AntiAliasedFrameBuffer->Bind();
|
||||
glClearColor(0.f, 0.f, 0.f, 0.f);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
m_AntiAliasedFrameBuffer->Unbind();
|
||||
m_FinalPassFrameBuffer->Read();
|
||||
m_AntiAliasedFrameBuffer->Draw();
|
||||
glBlitFramebuffer(
|
||||
0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height,
|
||||
0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height,
|
||||
GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
||||
return m_AntiAliasedTexture;
|
||||
}
|
||||
return m_CombinedTexture; }
|
||||
//Return the blurred scene texture.
|
||||
GLuint FullBlurredTexture() const { return m_FullBlurredTexture; }
|
||||
GLuint FullBlurredTexture() const {
|
||||
if (m_MSAA) {
|
||||
m_AntiAliasedFrameBuffer->Bind();
|
||||
glClearColor(0.f, 0.f, 0.f, 0.f);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
m_AntiAliasedFrameBuffer->Unbind();
|
||||
m_FinalPassFrameBuffer->Read();
|
||||
m_AntiAliasedFrameBuffer->Draw();
|
||||
glBlitFramebuffer(
|
||||
0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height,
|
||||
0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height,
|
||||
GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
||||
return m_AntiAliasedTexture;
|
||||
}
|
||||
return m_FullBlurredTexture; }
|
||||
//Return the framebuffer used in the scene rendering stage.
|
||||
FrameBuffer* FinalPassFrameBuffer() { return &m_FinalPassFrameBuffer; }
|
||||
FrameBuffer* FinalPassFrameBuffer() { return m_FinalPassFrameBuffer; }
|
||||
|
||||
private:
|
||||
void DrawSprites(std::list<std::shared_ptr<RenderJob>>&jobs, RenderScene& scene);
|
||||
@@ -56,18 +121,21 @@ private:
|
||||
Texture* m_GreyTexture;
|
||||
Texture* m_ErrorTexture;
|
||||
|
||||
FrameBuffer m_FinalPassFrameBuffer;
|
||||
FrameBuffer m_ShieldDepthFrameBuffer;
|
||||
FrameBuffer* m_FinalPassFrameBuffer = nullptr;
|
||||
FrameBuffer* m_ShieldDepthFrameBuffer = nullptr;
|
||||
FrameBuffer* m_AntiAliasedFrameBuffer = nullptr;
|
||||
GLuint m_BloomTexture = 0;
|
||||
GLuint m_SceneTexture = 0;
|
||||
GLuint m_DepthBuffer = 0;
|
||||
GLuint m_ShieldBuffer = 0;
|
||||
GLuint m_CubeMapTexture = 0;
|
||||
GLuint m_FullBlurredTexture;
|
||||
GLuint m_CombinedTexture; //This can be removed for less memory usage, just set m_sceneTexture to the return from m_BlurHUDPass.CombineTextures
|
||||
GLuint m_FullBlurredTexture = 0;
|
||||
GLuint m_CombinedTexture = 0; //This can be removed for less memory usage, just set m_sceneTexture to the return from m_BlurHUDPass.CombineTextures
|
||||
GLuint m_AntiAliasedTexture = 0; //Is only used when MSAA is active;
|
||||
|
||||
//maqke this component based i guess?
|
||||
GLuint m_ShieldPixelRate = 16;
|
||||
unsigned int m_MSAA = 4;
|
||||
|
||||
const IRenderer* m_Renderer;
|
||||
const LightCullingPass* m_LightCullingPass;
|
||||
|
||||
@@ -7,12 +7,13 @@
|
||||
class BufferResource
|
||||
{
|
||||
public:
|
||||
BufferResource(GLuint* resourceHandle, GLenum resourceType, GLenum attachment, GLuint mipMapLod);
|
||||
BufferResource(GLuint* resourceHandle, GLenum resourceType, GLenum attachment, GLuint mipMapLod, bool multiSampling);
|
||||
|
||||
GLuint* m_ResourceHandle;
|
||||
GLenum m_ResourceType;
|
||||
GLenum m_Attachment;
|
||||
GLuint m_MipMapLod = 0;
|
||||
bool m_MultiSampling = false;
|
||||
private:
|
||||
|
||||
};
|
||||
@@ -21,24 +22,33 @@ template <GLenum RESOURCETYPE>
|
||||
class ResourceType : public BufferResource
|
||||
{
|
||||
public:
|
||||
ResourceType(GLuint* resourceHandle, GLenum attachment, GLuint mipMapLod)
|
||||
: BufferResource(resourceHandle, RESOURCETYPE, attachment, mipMapLod) { }
|
||||
ResourceType(GLuint* resourceHandle, GLenum attachment, GLuint mipMapLod, bool multiSampling)
|
||||
: BufferResource(resourceHandle, RESOURCETYPE, attachment, mipMapLod, multiSampling) { }
|
||||
};
|
||||
|
||||
class Texture2D : public ResourceType<GL_TEXTURE_2D>
|
||||
{
|
||||
public:
|
||||
Texture2D(GLuint* resourceHandle, GLenum attachment, GLuint mipMapLod = 0)
|
||||
: ResourceType(resourceHandle, attachment, mipMapLod) { };
|
||||
: ResourceType(resourceHandle, attachment, mipMapLod, false) { };
|
||||
|
||||
~Texture2D();
|
||||
};
|
||||
|
||||
class Texture2DMultiSample : public ResourceType<GL_TEXTURE_2D_MULTISAMPLE>
|
||||
{
|
||||
public:
|
||||
Texture2DMultiSample(GLuint* resourceHandle, GLenum attachment, GLuint mipMapLod = 0)
|
||||
: ResourceType(resourceHandle, attachment, mipMapLod, true) { };
|
||||
|
||||
~Texture2DMultiSample();
|
||||
};
|
||||
|
||||
class RenderBuffer : public ResourceType<GL_RENDERBUFFER>
|
||||
{
|
||||
public:
|
||||
RenderBuffer(GLuint* resourceHandle, GLenum attachment)
|
||||
: ResourceType(resourceHandle, attachment, 0)
|
||||
RenderBuffer(GLuint* resourceHandle, GLenum attachment, bool multiSampling = false)
|
||||
: ResourceType(resourceHandle, attachment, 0, multiSampling)
|
||||
{ };
|
||||
|
||||
~RenderBuffer();
|
||||
@@ -48,12 +58,13 @@ class Texture2DArray : public ResourceType<GL_TEXTURE_2D_ARRAY>
|
||||
{
|
||||
public:
|
||||
Texture2DArray(GLuint* resourceHandle, GLenum attachment)
|
||||
: ResourceType(resourceHandle, attachment, 0)
|
||||
: ResourceType(resourceHandle, attachment, 0, false)
|
||||
{ };
|
||||
|
||||
~Texture2DArray();
|
||||
};
|
||||
|
||||
|
||||
class FrameBuffer
|
||||
{
|
||||
public:
|
||||
@@ -65,9 +76,13 @@ public:
|
||||
void Generate();
|
||||
void Bind();
|
||||
void Unbind();
|
||||
void Read();
|
||||
void Draw();
|
||||
GLuint GetHandle();
|
||||
bool MultiSampling() { return m_MultiSampling; };
|
||||
|
||||
private:
|
||||
bool m_MultiSampling = true;
|
||||
GLuint m_BufferHandle;
|
||||
std::vector<std::shared_ptr<BufferResource>> m_Resources;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user