Fixed some GL inconsistencies and Lit Proj

This commit is contained in:
korenkonder
2025-04-13 14:19:02 +03:00
parent bf2752aad1
commit 8c5178b9ea
3 changed files with 16 additions and 6 deletions
+5 -1
View File
@@ -96,6 +96,7 @@ void gl_state_bind_uniform_buffer(GLuint buffer, bool force) {
void gl_state_bind_uniform_buffer_base(GLuint index, GLuint buffer, bool force) {
if (force || gl_state.uniform_buffer_bindings[index] != buffer) {
glBindBufferBase(GL_UNIFORM_BUFFER, index, buffer);
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;
@@ -108,6 +109,7 @@ void gl_state_bind_uniform_buffer_range(GLuint index,
|| gl_state.uniform_buffer_offsets[index] != offset
|| gl_state.uniform_buffer_sizes[index] != size) {
glBindBufferRange(GL_UNIFORM_BUFFER, index, buffer, offset, size);
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;
@@ -124,6 +126,7 @@ void gl_state_bind_shader_storage_buffer(GLuint buffer, bool force) {
void gl_state_bind_shader_storage_buffer_base(GLuint index, GLuint buffer, bool force) {
if (force || gl_state.shader_storage_buffer_bindings[index] != buffer) {
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, index, buffer);
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;
@@ -136,6 +139,7 @@ void gl_state_bind_shader_storage_buffer_range(GLuint index,
|| gl_state.shader_storage_buffer_offsets[index] != offset
|| gl_state.shader_storage_buffer_sizes[index] != size) {
glBindBufferRange(GL_SHADER_STORAGE_BUFFER, index, buffer, offset, size);
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;
@@ -297,7 +301,7 @@ void gl_state_get() {
glActiveTexture((GLenum)(GL_TEXTURE0 + i));
glGetIntegervDLL(GL_TEXTURE_BINDING_2D, &gl_state.texture_binding_2d[i]);
glGetIntegervDLL(GL_TEXTURE_BINDING_CUBE_MAP, &gl_state.texture_binding_cube_map[i]);
glGetIntegeri_v(GL_SAMPLER_BINDING, i, &gl_state.sampler_binding[i]);
glGetIntegervDLL(GL_SAMPLER_BINDING, &gl_state.sampler_binding[i]);
}
glActiveTexture(gl_state.active_texture);
+8 -2
View File
@@ -301,11 +301,14 @@ namespace rndr {
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::render_single_pass(RenderPassID id) {
@@ -1673,6 +1676,9 @@ static bool draw_pass_shadow_litproj_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;
@@ -1876,8 +1882,8 @@ static int32_t draw_pass_3d_get_translucent_count() {
}
static void draw_pass_3d_shadow_reset() {
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);
draw_state.self_shadow = false;
draw_state.shadow = false;
}
+3 -3
View File
@@ -215,11 +215,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[] = {
@@ -1001,7 +1001,7 @@ static const uniform_name GLASEYE_uniform[] = {
};
static const uniform_name ESMGAUSS_uniform[] = {
U_INVALID,
U_LIGHT_PROJ,
};
static const uniform_name ESMFILT_uniform[] = {