Lights
This commit is contained in:
@@ -16,8 +16,7 @@ private:
|
||||
uint32_t m_data_type;
|
||||
uint32_t m_mip_levels;
|
||||
uint32_t m_min_filter;
|
||||
uint32_t m_mag_filter;
|
||||
uint32_t m_levels;
|
||||
uint32_t m_mag_filter;
|
||||
uint32_t m_target;
|
||||
void *m_data;
|
||||
HydraID *m_texture_id;
|
||||
@@ -30,8 +29,7 @@ public:
|
||||
m_width, m_height,
|
||||
m_internal_format,
|
||||
m_min_filter,
|
||||
m_mag_filter,
|
||||
m_levels,
|
||||
m_mag_filter,
|
||||
m_format,
|
||||
m_data_type,
|
||||
m_mip_levels,
|
||||
@@ -45,8 +43,7 @@ public:
|
||||
uint32_t internal_format,
|
||||
uint32_t format,
|
||||
uint32_t min_filter,
|
||||
uint32_t mag_filter,
|
||||
uint32_t levels,
|
||||
uint32_t mag_filter,
|
||||
uint32_t data_type,
|
||||
uint32_t mip_levels,
|
||||
void *data,
|
||||
@@ -62,8 +59,7 @@ public:
|
||||
m_data = data;
|
||||
m_texture_id = texture_id;
|
||||
m_min_filter = min_filter;
|
||||
m_mag_filter = mag_filter;
|
||||
m_levels = levels;
|
||||
m_mag_filter = mag_filter;
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
@@ -16,8 +16,7 @@ private:
|
||||
uint32_t m_data_type;
|
||||
uint32_t m_mip_levels;
|
||||
uint32_t m_min_filter;
|
||||
uint32_t m_mag_filter;
|
||||
uint32_t m_levels;
|
||||
uint32_t m_mag_filter;
|
||||
void *m_data;
|
||||
HydraID *m_texture_id;
|
||||
|
||||
@@ -29,8 +28,7 @@ public:
|
||||
m_width, m_height,
|
||||
m_internal_format,
|
||||
m_min_filter,
|
||||
m_mag_filter,
|
||||
m_levels,
|
||||
m_mag_filter,
|
||||
m_format,
|
||||
m_data_type,
|
||||
m_mip_levels,
|
||||
@@ -43,8 +41,7 @@ public:
|
||||
uint32_t internal_format,
|
||||
uint32_t format,
|
||||
uint32_t min_filter,
|
||||
uint32_t mag_filter,
|
||||
uint32_t levels,
|
||||
uint32_t mag_filter,
|
||||
uint32_t data_type,
|
||||
uint32_t mip_levels,
|
||||
void *data,
|
||||
@@ -62,7 +59,7 @@ public:
|
||||
m_texture_id = texture_id;
|
||||
m_min_filter = min_filter;
|
||||
m_mag_filter = mag_filter;
|
||||
m_levels = levels;
|
||||
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
@@ -0,0 +1,86 @@
|
||||
#ifndef HYDRACREATECASCADESHADOWFRAMEBUFFER
|
||||
#define HYDRACREATECASCADESHADOWFRAMEBUFFER
|
||||
|
||||
#include "../HydraTask.h"
|
||||
#include "../../engine/HydraEngine.h"
|
||||
#include "../../renderer/HydraRenderer.h"
|
||||
#include <GLMIncludes.h>
|
||||
#include "../../GlewIncludes.h"
|
||||
#include "../../buffer/HydraTextureBufferManager.h"
|
||||
|
||||
class HydraCreateCascadeShadowFrameBuffer : public HydraTask
|
||||
{
|
||||
private:
|
||||
uint32_t *m_texture_id = 0;
|
||||
uint32_t *m_depth_texture_id = 0;
|
||||
uint32_t *m_frame_buffer_id = nullptr;
|
||||
|
||||
protected:
|
||||
public:
|
||||
void Process() override
|
||||
{
|
||||
HydraEngine *engine = GetEngine();
|
||||
|
||||
HydraTextureBufferManager *tex_buffer_manager = engine->TextureBufferManager();
|
||||
HydraRenderSettings render_settings = engine->RenderSettings();
|
||||
|
||||
*m_texture_id = tex_buffer_manager->CreateTextureArray("shadow_FB",
|
||||
SHADOW_MAP_SIZE, SHADOW_MAP_SIZE,
|
||||
GL_RGBA8,
|
||||
GL_NEAREST,
|
||||
GL_NEAREST,
|
||||
6);
|
||||
|
||||
HydraTextureBuffer texture = tex_buffer_manager->GetTexture(*m_texture_id);
|
||||
|
||||
*m_depth_texture_id = tex_buffer_manager->CreateTextureArray("shadow_depth_buffer",
|
||||
SHADOW_MAP_SIZE, SHADOW_MAP_SIZE,
|
||||
GL_DEPTH_COMPONENT32F,
|
||||
GL_NEAREST,
|
||||
GL_NEAREST,
|
||||
6);
|
||||
|
||||
HydraTextureBuffer depth_texture = tex_buffer_manager->GetTexture(*m_depth_texture_id);
|
||||
glGenFramebuffers(1, m_frame_buffer_id);
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, *m_frame_buffer_id);
|
||||
|
||||
glTextureParameteri(texture.gl_tex_id, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
glTextureParameteri(texture.gl_tex_id, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
|
||||
// FIX 1: Set explicit filters for the depth texture to prevent incomplete attachment
|
||||
glTextureParameteri(depth_texture.gl_tex_id, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
glTextureParameteri(depth_texture.gl_tex_id, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
|
||||
glm::vec4 border = glm::vec4(1,1,1,1);
|
||||
|
||||
glTextureParameteri(depth_texture.gl_tex_id, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
|
||||
glTextureParameteri(depth_texture.gl_tex_id, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
|
||||
glTextureParameterfv(depth_texture.gl_tex_id, GL_TEXTURE_BORDER_COLOR, &border[0]);
|
||||
|
||||
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, texture.gl_tex_id, 0);
|
||||
glFramebufferTexture(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, depth_texture.gl_tex_id, 0);
|
||||
|
||||
glNamedFramebufferDrawBuffer(*m_frame_buffer_id, GL_COLOR_ATTACHMENT0);
|
||||
glNamedFramebufferReadBuffer(*m_frame_buffer_id, GL_COLOR_ATTACHMENT0);
|
||||
|
||||
GLenum draw_buffers[] = {GL_COLOR_ATTACHMENT0};
|
||||
glNamedFramebufferDrawBuffers(*m_frame_buffer_id, 1, draw_buffers);
|
||||
|
||||
GLenum status = glCheckNamedFramebufferStatus(*m_frame_buffer_id, GL_FRAMEBUFFER);
|
||||
if (status != GL_FRAMEBUFFER_COMPLETE)
|
||||
{
|
||||
std::cout << "Framebuffer error: " << status << std::endl;
|
||||
}
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||
|
||||
tex_buffer_manager->BindTexture(*m_depth_texture_id, GL_TEXTURE_2D_ARRAY);
|
||||
|
||||
}
|
||||
void Initialise(uint32_t *texture_id, uint32_t *depth_texture_id, uint32_t *frame_buffer_id)
|
||||
{
|
||||
m_texture_id = texture_id;
|
||||
m_frame_buffer_id = frame_buffer_id;
|
||||
m_depth_texture_id = depth_texture_id;
|
||||
}
|
||||
};
|
||||
#endif /* HYDRACREATESHADOWFRAMEBUFFER */
|
||||
@@ -1,11 +1,13 @@
|
||||
#ifndef HYDRACREATESHADOWFRAMEBUFFER
|
||||
#define HYDRACREATESHADOWFRAMEBUFFER
|
||||
|
||||
|
||||
#include "../HydraTask.h"
|
||||
#include "../../engine/HydraEngine.h"
|
||||
#include "../../renderer/HydraRenderer.h"
|
||||
#include <GLMIncludes.h>
|
||||
#include "../../GlewIncludes.h"
|
||||
#include "../../buffer/HydraTextureBufferManager.h"
|
||||
|
||||
class HydraCreateShadowFrameBuffer : public HydraTask
|
||||
{
|
||||
@@ -13,7 +15,7 @@ private:
|
||||
uint32_t *m_texture_id = 0;
|
||||
uint32_t *m_depth_texture_id = 0;
|
||||
uint32_t *m_frame_buffer_id = nullptr;
|
||||
|
||||
|
||||
protected:
|
||||
public:
|
||||
void Process() override
|
||||
@@ -23,21 +25,21 @@ public:
|
||||
HydraTextureBufferManager *tex_buffer_manager = engine->TextureBufferManager();
|
||||
HydraRenderSettings render_settings = engine->RenderSettings();
|
||||
|
||||
*m_texture_id = tex_buffer_manager->CreateTextureArray("shadow_FB",
|
||||
*m_texture_id = tex_buffer_manager->CreateTexture("shadow_FB",
|
||||
SHADOW_MAP_SIZE, SHADOW_MAP_SIZE,
|
||||
GL_RGBA8,
|
||||
GL_NEAREST,
|
||||
GL_NEAREST,
|
||||
6);
|
||||
1);
|
||||
|
||||
HydraTextureBuffer texture = tex_buffer_manager->GetTexture(*m_texture_id);
|
||||
|
||||
*m_depth_texture_id = tex_buffer_manager->CreateTextureArray("shadow_depth_buffer",
|
||||
*m_depth_texture_id = tex_buffer_manager->CreateTexture("shadow_depth_buffer",
|
||||
SHADOW_MAP_SIZE, SHADOW_MAP_SIZE,
|
||||
GL_DEPTH_COMPONENT32F,
|
||||
GL_NEAREST,
|
||||
GL_NEAREST,
|
||||
6);
|
||||
1);
|
||||
|
||||
HydraTextureBuffer depth_texture = tex_buffer_manager->GetTexture(*m_depth_texture_id);
|
||||
glGenFramebuffers(1, m_frame_buffer_id);
|
||||
@@ -72,7 +74,8 @@ public:
|
||||
}
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||
|
||||
tex_buffer_manager->BindTexture(*m_depth_texture_id, GL_TEXTURE_2D_ARRAY);
|
||||
tex_buffer_manager->BindTexture(*m_depth_texture_id, GL_TEXTURE_2D);
|
||||
|
||||
}
|
||||
void Initialise(uint32_t *texture_id, uint32_t *depth_texture_id, uint32_t *frame_buffer_id)
|
||||
{
|
||||
@@ -81,4 +84,6 @@ public:
|
||||
m_depth_texture_id = depth_texture_id;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
#endif /* HYDRACREATESHADOWFRAMEBUFFER */
|
||||
|
||||
Reference in New Issue
Block a user