CSEngine
Loading...
Searching...
No Matches
CSE::SdfRenderGroup Class Reference
Inheritance diagram for CSE::SdfRenderGroup:
CSE::SRenderGroup

Public Member Functions

 SdfRenderGroup (const RenderMgr &renderMgr)
 
void RegisterObject (SIRender *object) override
 
void RemoveObjects (SIRender *object) override
 
void RenderAll (const CameraBase &camera) const override
 
void Exterminate () override
 
void BindShaderUniforms (const GLProgramHandle &handle) const
 
int BindShaderMap (const GLProgramHandle &handle, int textureLayout) const
 
- Public Member Functions inherited from CSE::SRenderGroup
 SRenderGroup (const RenderMgr &renderMgr)
 

Additional Inherited Members

- Static Protected Member Functions inherited from CSE::SRenderGroup
static void BindSourceBuffer (const SFrameBuffer &buffer, const GLProgramHandle &handle, int layout)
 
- Protected Attributes inherited from CSE::SRenderGroup
const RenderMgrm_renderMgr
 

Detailed Description

Definition at line 12 of file SdfRenderGroup.h.

Constructor & Destructor Documentation

◆ SdfRenderGroup()

SdfRenderGroup::SdfRenderGroup ( const RenderMgr & renderMgr)
explicit

Definition at line 13 of file SdfRenderGroup.cpp.

13 : SRenderGroup(renderMgr) {
14 m_envSize = 32;
15 m_nodeSize = vec3{ 10, 4, 4 };
16 m_nodeSpace = 0.5;
17
18 m_sdfMapBuffer = new SFrameBuffer();
19 m_sdfMapBuffer->SetName("SDF Render Group Texture");
20 float wh = m_nodeSize.x * m_nodeSize.y * m_nodeSize.z;
21 float wh_sqrt = sqrtf(wh);
22 m_cellSize = vec2{ ceilf(wh_sqrt), floorf(wh_sqrt) };
23 m_mapSize = vec2{ m_envSize * m_cellSize.x, m_envSize * m_cellSize.y };
24// m_mapSize = ivec2{ 256, 256 };
25 m_sdfMapBuffer->GenerateFramebuffer(SFrameBuffer::PLANE, m_mapSize.x, m_mapSize.y);
26
27 m_mapTexture = m_sdfMapBuffer->GenerateTexturebuffer(SFrameBuffer::RENDER, GL_RGBA);
28 m_sdfMapBuffer->GenerateRenderbuffer(SFrameBuffer::DEPTH, GL_DEPTH_COMPONENT);
29 m_sdfMapBuffer->RasterizeFramebuffer();
30
31 m_mapTexture->SetAbsoluteID("sdfmap.textureFakeCubeMap");
32 std::string hash = "CSEENV0000000005";
33 m_mapTexture->SetHash(hash);
34 m_mapTexture->GenerateMipmap();
35
36 // Codes for the SDF test
37 m_testTexture = SResource::Create<STexture>("File:test.png");
38 m_testTexture->GenerateMipmap();
39 m_sdfHandle = SResource::Create<GLProgramHandle>("File:Shader/SDF/sdfmap.post");
40 {
41 const auto& e = m_sdfHandle->UniformLocation("sdf.tex");
42 if (e != nullptr) m_testTextureId = m_sdfHandle->UniformLocation("sdf.tex")->id;
43 }
44 m_frameCount = 0;
45
46 m_lightMgr = CORE->GetCore(LightMgr);
47}
STexture * GenerateTexturebuffer(BufferType type, int channel, int level=0)
unsigned int GenerateRenderbuffer(BufferType type, int internalFormat)
void GenerateFramebuffer(BufferDimension dimension, int width, int height)

Member Function Documentation

◆ BindShaderMap()

int SdfRenderGroup::BindShaderMap ( const GLProgramHandle & handle,
int textureLayout ) const

Definition at line 102 of file SdfRenderGroup.cpp.

102 {
103 int steps = 0;
104 if(handle.Uniforms.SdfMap != HANDLE_NULL) {
105 m_mapTexture->Bind(handle.Uniforms.SdfMap, textureLayout);
106 ++steps;
107 }
108 return steps;
109}

◆ BindShaderUniforms()

void SdfRenderGroup::BindShaderUniforms ( const GLProgramHandle & handle) const

Definition at line 87 of file SdfRenderGroup.cpp.

87 {
88 const auto& uniforms = handle.Uniforms;
89
90 if(uniforms.SdfEnvSize != HANDLE_NULL)
91 glUniform1i(uniforms.SdfEnvSize, m_envSize);
92 if(uniforms.SdfCellSize != HANDLE_NULL)
93 glUniform2fv(uniforms.SdfCellSize, 1, m_cellSize.Pointer());
94 if(uniforms.SdfNodeSize != HANDLE_NULL)
95 glUniform3fv(uniforms.SdfNodeSize, 1, m_nodeSize.Pointer());
96 if(uniforms.SdfNodeSpace != HANDLE_NULL)
97 glUniform1f(uniforms.SdfNodeSpace, m_nodeSpace);
98 if(uniforms.SdfFrameCount != HANDLE_NULL)
99 glUniform1i(uniforms.SdfFrameCount, m_frameCount);
100}

◆ Exterminate()

void SdfRenderGroup::Exterminate ( )
overridevirtual

Implements CSE::SRenderGroup.

Definition at line 84 of file SdfRenderGroup.cpp.

84 {
85}

◆ RegisterObject()

void SdfRenderGroup::RegisterObject ( SIRender * object)
overridevirtual

Implements CSE::SRenderGroup.

Definition at line 51 of file SdfRenderGroup.cpp.

51 {
52}

◆ RemoveObjects()

void SdfRenderGroup::RemoveObjects ( SIRender * object)
overridevirtual

Implements CSE::SRenderGroup.

Definition at line 54 of file SdfRenderGroup.cpp.

54 {
55}

◆ RenderAll()

void SdfRenderGroup::RenderAll ( const CameraBase & camera) const
overridevirtual

Implements CSE::SRenderGroup.

Definition at line 60 of file SdfRenderGroup.cpp.

60 {
61 const auto& uniforms = m_sdfHandle->Uniforms;
62 const auto& cameraStruct = camera.GetCameraMatrixStruct();
63
64 m_sdfMapBuffer->AttachFrameBuffer();
65// glClear(GL_COLOR_BUFFER_BIT);
66 glViewport(0, 0, (int)m_mapSize.x, (int)m_mapSize.y);
67 glUseProgram(m_sdfHandle->Program);
68 m_testTexture->Bind(m_testTextureId, 0);
69 int layoutBegin = m_lightMgr->AttachLightToShader(m_sdfHandle);
70 glDisable(GL_CULL_FACE);
71 ShaderUtil::BindCameraToShader(*m_sdfHandle, cameraStruct.camera, cameraStruct.cameraPosition,
72 cameraStruct.projection, mat4::Identity());
73 glUniform2fv(uniforms.SourceBufferSize, 1, m_mapSize.Pointer());
74 BindShaderUniforms(*m_sdfHandle);
75
76 ShaderUtil::BindAttributeToPlane();
77 ++m_frameCount;
78 m_frameCount %= 100;
79
80// std::string save_str = CSE::AssetsPath() + "testmap" + ".png";
81// saveScreenshot(save_str.c_str());
82}
int AttachLightToShader(const GLProgramHandle *handle) const
Definition LightMgr.cpp:15
static void BindCameraToShader(const GLProgramHandle &handle, const mat4 &camera, const vec3 &cameraPosition, const mat4 &projection, const mat4 &transform)
Binds the camera data to the shader.

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