From 0cf71e20b56f1360073e055ed1b31c0eebbc62e7 Mon Sep 17 00:00:00 2001 From: korenkonder Date: Sun, 13 Apr 2025 14:19:05 +0300 Subject: [PATCH] Fixed some GL inconsistencies and Lit Proj ... --- src/CRE/gl_state.cpp | 6 +++++- src/CRE/render_context.cpp | 3 +++ src/CRE/render_manager.cpp | 7 +++++-- src/CRE/shader_ft.cpp | 6 +++--- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/CRE/gl_state.cpp b/src/CRE/gl_state.cpp index f6636054..69a12625 100644 --- a/src/CRE/gl_state.cpp +++ b/src/CRE/gl_state.cpp @@ -119,6 +119,7 @@ void gl_state_bind_uniform_buffer_base(GLuint index, GLuint buffer, bool force) if (!Vulkan::use) glBindBufferBase(GL_UNIFORM_BUFFER, index, buffer); #endif + gl_state.uniform_buffer_binding = buffer; gl_state.uniform_buffer_bindings[index] = buffer; gl_state.uniform_buffer_offsets[index] = 0; gl_state.uniform_buffer_sizes[index] = -1; @@ -134,6 +135,7 @@ void gl_state_bind_uniform_buffer_range(GLuint index, if (!Vulkan::use) glBindBufferRange(GL_UNIFORM_BUFFER, index, buffer, offset, size); #endif + gl_state.uniform_buffer_binding = buffer; gl_state.uniform_buffer_bindings[index] = buffer; gl_state.uniform_buffer_offsets[index] = offset; gl_state.uniform_buffer_sizes[index] = size; @@ -153,6 +155,7 @@ void gl_state_bind_shader_storage_buffer_base(GLuint index, GLuint buffer, bool if (!Vulkan::use) glBindBufferBase(GL_SHADER_STORAGE_BUFFER, index, buffer); #endif + gl_state.shader_storage_buffer_binding = buffer; gl_state.shader_storage_buffer_bindings[index] = buffer; gl_state.shader_storage_buffer_offsets[index] = 0; gl_state.shader_storage_buffer_sizes[index] = -1; @@ -168,6 +171,7 @@ void gl_state_bind_shader_storage_buffer_range(GLuint index, if (!Vulkan::use) glBindBufferRange(GL_SHADER_STORAGE_BUFFER, index, buffer, offset, size); #endif + gl_state.shader_storage_buffer_binding = buffer; gl_state.shader_storage_buffer_bindings[index] = buffer; gl_state.shader_storage_buffer_offsets[index] = offset; gl_state.shader_storage_buffer_sizes[index] = size; @@ -378,7 +382,7 @@ void gl_state_get() { glActiveTexture((GLenum)(GL_TEXTURE0 + i)); glGetIntegerv(GL_TEXTURE_BINDING_2D, &gl_state.texture_binding_2d[i]); glGetIntegerv(GL_TEXTURE_BINDING_CUBE_MAP, &gl_state.texture_binding_cube_map[i]); - glGetIntegeri_v(GL_SAMPLER_BINDING, i, &gl_state.sampler_binding[i]); + glGetIntegerv(GL_SAMPLER_BINDING, &gl_state.sampler_binding[i]); } glActiveTexture(gl_state.active_texture); diff --git a/src/CRE/render_context.cpp b/src/CRE/render_context.cpp index e98a8e3e..0d28bdb6 100644 --- a/src/CRE/render_context.cpp +++ b/src/CRE/render_context.cpp @@ -199,6 +199,9 @@ bool light_proj::set_mat(bool set_mat) { vec3 up = { 0.0f, 1.0f, 0.0f }; mat4_look_at(&position, &interest, &up, &rctx->view_mat); + + mat4_mul(&rctx->view_mat, &rctx->proj_mat, &rctx->vp_mat); + rctx->set_scene_projection_view(rctx->view_mat, rctx->proj_mat, position); } return true; diff --git a/src/CRE/render_manager.cpp b/src/CRE/render_manager.cpp index e312317b..23def1fd 100644 --- a/src/CRE/render_manager.cpp +++ b/src/CRE/render_manager.cpp @@ -316,11 +316,14 @@ namespace rndr { rctx_ptr->disp_manager->check_vertex_arrays(); gl_state_bind_vertex_array(0); gl_state_disable_primitive_restart(); + gl_state_bind_uniform_buffer(0); gl_state_bind_uniform_buffer_base(0, 0); gl_state_bind_uniform_buffer_base(1, 0); gl_state_bind_uniform_buffer_base(2, 0); gl_state_bind_uniform_buffer_base(3, 0); gl_state_bind_uniform_buffer_base(4, 0); + gl_state_bind_shader_storage_buffer(0); + gl_state_bind_shader_storage_buffer_base(0, 0); } void RenderManager::rndpass_post_proc() { @@ -1802,8 +1805,8 @@ static int32_t draw_pass_3d_get_translucent_count(render_context* rctx) { } static void draw_pass_3d_shadow_reset(render_context* rctx) { - gl_state_active_bind_texture_2d(6, 0); - gl_state_active_bind_texture_2d(7, 0); + gl_state_active_bind_texture_2d(6, rctx->empty_texture_2d->glid); + gl_state_active_bind_texture_2d(7, rctx->empty_texture_2d->glid); rctx->draw_state->self_shadow = false; rctx->draw_state->shadow = false; } diff --git a/src/CRE/shader_ft.cpp b/src/CRE/shader_ft.cpp index c3fb1a36..a0b43a1c 100644 --- a/src/CRE/shader_ft.cpp +++ b/src/CRE/shader_ft.cpp @@ -216,11 +216,11 @@ static const int32_t glass_eye_fpt_unival_max[] = { }; static const int32_t esm_gauss_vpt_unival_max[] = { - -1, + 0, }; static const int32_t esm_gauss_fpt_unival_max[] = { - -1, + 1, }; static const int32_t esm_filter_min_vpt_unival_max[] = { @@ -2313,7 +2313,7 @@ static const uniform_name GLASEYE_uniform[] = { }; static const uniform_name ESMGAUSS_uniform[] = { - U_INVALID, + U_LIGHT_PROJ, }; static const uniform_name ESMFILT_uniform[] = {