@@ -30,6 +30,8 @@ void RenderSystem::Init(const pugi::xml_node& rendererNode) {
3030std::cout << " OpenGL Renderer: " << glGetString (GL_RENDERER) << ' \n ' ;
3131#endif
3232
33+ getHardwareFeatures ();
34+
3335const auto width = rendererNode.attribute (" width" ).as_uint ();
3436const auto height = rendererNode.attribute (" height" ).as_uint ();
3537
@@ -38,7 +40,7 @@ void RenderSystem::Init(const pugi::xml_node& rendererNode) {
3840m_shadowMapResolution = rendererNode.attribute (" shadowResolution" ).as_uint ();
3941
4042m_hdrFBO.Init (" HDR FBO" , width, height);
41- m_skybox.Init (" Data/hdri/barcelona .hdr" , 2048 );
43+ m_skybox.Init (" Data/hdri/hdriHaven4k .hdr" , 3072 );
4244
4345// Compile all shader programs in config.xml
4446for (auto program = rendererNode.child (" Program" ); program; program = program.next_sibling (" Program" )) {
@@ -49,15 +51,18 @@ void RenderSystem::Init(const pugi::xml_node& rendererNode) {
4951shaders.emplace_back (shader.attribute (" path" ).as_string (), shader.attribute (" type" ).as_string ());
5052}
5153
54+ // GLShaderProgram prgrm;
55+ // prgrm.Init(program.attribute("name").as_string(), shaders);
56+
5257// Compile and cache shader program
58+ // m_shaderCache.try_emplace(program.attribute("name").as_string(), prgrm);
5359m_shaderCache.try_emplace (program.attribute (" name" ).as_string (), program.attribute (" name" ).as_string (), shaders);
5460}
5561
5662setupScreenquad ();
5763setupTextureSamplers ();
5864setupShadowMap ();
5965setupPostProcessing ();
60-
6166
6267#ifdef _DEBUG
6368glEnable (GL_DEBUG_OUTPUT);
@@ -169,32 +174,42 @@ void RenderSystem::Render(const SceneBase& scene, const bool wireframe) {
169174}
170175
171176/* **********************************************************************************/
172- // TODO: This needs to be gutted and put elsewhere
173- void RenderSystem::InitView (const Camera& camera) {
174- m_projMatrix = camera.GetProjMatrix (m_width, m_height);
175- glBindBuffer (GL_UNIFORM_BUFFER, m_uboMatrices);
176- glBufferSubData (GL_UNIFORM_BUFFER, 0 , sizeof (glm::mat4), value_ptr (m_projMatrix));
177+ void RenderSystem::InitScene (const SceneBase& scene) {
178+ // m_skybox.Init(scene.m_skyboxPath, scene.m_skyboxResolution);
179+
180+ setProjectionMatrix (scene.m_camera );
177181}
178182
179183/* **********************************************************************************/
180- void RenderSystem::Update (const Camera& camera , const double delta) {
184+ void RenderSystem::Update (const SceneBase& scene , const double delta) {
181185
182186// Window size changed.
183187if (Input::GetInstance ().ShouldResize ()) {
184188m_width = Input::GetInstance ().GetWidth ();
185189m_height = Input::GetInstance ().GetHeight ();
186190
187- InitView (camera);
191+ setProjectionMatrix (scene.m_camera );
192+
188193glViewport (0 , 0 , m_width, m_height);
189194m_shadowDepthFBO.Resize (m_width, m_height);
190195}
191196
192197// Update view matrix inside UBO
193- const auto view = camera .GetViewMatrix ();
198+ const auto view = scene. m_camera .GetViewMatrix ();
194199glBindBuffer (GL_UNIFORM_BUFFER, m_uboMatrices);
195200glBufferSubData (GL_UNIFORM_BUFFER, sizeof (glm::mat4), sizeof (glm::mat4), glm::value_ptr (view));
196201}
197202
203+ /* **********************************************************************************/
204+ void RenderSystem::getHardwareFeatures () {
205+ glGetFloatv (GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &m_features.MaxAnisotropy );
206+ glGetIntegerv (GL_MAX_ARRAY_TEXTURE_LAYERS, &m_features.MaxArrayTextureLayers );
207+ glGetIntegerv (GL_MAX_COLOR_TEXTURE_SAMPLES, &m_features.MaxTextureSamples );
208+ glGetIntegerv (GL_MAX_TEXTURE_IMAGE_UNITS, &m_features.MaxTextureSamplers );
209+ glGetIntegerv (GL_MAX_VERTEX_UNIFORM_BLOCKS, &m_features.MaxVertexUniformBlocks );
210+ // finish getting hardware features
211+ }
212+
198213/* **********************************************************************************/
199214void RenderSystem::setDefaultState () {
200215glFrontFace (GL_CCW);
@@ -264,6 +279,10 @@ void RenderSystem::renderQuad() const {
264279
265280/* **********************************************************************************/
266281void RenderSystem::renderShadowMap (const SceneBase& scene) {
282+ setDefaultState ();
283+ glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
284+ glBindBuffer (GL_UNIFORM_BUFFER, m_uboMatrices);
285+
267286static auto & shadowDepthShader = m_shaderCache.at (" ShadowDepthShader" );
268287shadowDepthShader.Bind ();
269288static constexpr float near_plane = 0 .0f , far_plane = 100 .0f ;
@@ -289,7 +308,6 @@ void RenderSystem::renderShadowMap(const SceneBase& scene) {
289308glCullFace (GL_BACK);
290309}
291310
292-
293311/* **********************************************************************************/
294312void RenderSystem::setupScreenquad () {
295313const std::array<Vertex, 4 > screenQuadVertices {
@@ -312,17 +330,13 @@ void RenderSystem::setupScreenquad() {
312330
313331/* **********************************************************************************/
314332void RenderSystem::setupTextureSamplers () {
315- // Find max supported hardware anisotropy
316- float aniso = 0 .0f ;
317- glGetFloatv (GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &aniso);
318-
319333// Sampler for PBR textures used on meshes
320334glGenSamplers (1 , &m_samplerPBRTextures);
321335glSamplerParameteri (m_samplerPBRTextures, GL_TEXTURE_WRAP_S, GL_REPEAT);
322336glSamplerParameteri (m_samplerPBRTextures, GL_TEXTURE_WRAP_T, GL_REPEAT);
323337glSamplerParameteri (m_samplerPBRTextures, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
324338glSamplerParameteri (m_samplerPBRTextures, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
325- glSamplerParameterf (m_samplerPBRTextures, GL_TEXTURE_MAX_ANISOTROPY_EXT, aniso );
339+ glSamplerParameterf (m_samplerPBRTextures, GL_TEXTURE_MAX_ANISOTROPY_EXT, m_features. MaxAnisotropy );
326340
327341}
328342
@@ -419,3 +433,10 @@ void RenderSystem::setupPostProcessing() {
419433bloomBlendShader.SetUniform (" vibranceCoefficient" , m_coefficient);
420434
421435}
436+
437+ /* **********************************************************************************/
438+ void RenderSystem::setProjectionMatrix (const Camera& camera) {
439+ m_projMatrix = camera.GetProjMatrix (m_width, m_height);
440+ glBindBuffer (GL_UNIFORM_BUFFER, m_uboMatrices);
441+ glBufferSubData (GL_UNIFORM_BUFFER, 0 , sizeof (glm::mat4), value_ptr (m_projMatrix));
442+ }
0 commit comments