From eab35bf2c210c80d65d8bebd9f2bf96a25ca2a60 Mon Sep 17 00:00:00 2001 From: korenkonder Date: Wed, 23 Apr 2025 23:57:23 +0300 Subject: [PATCH] Renamed `gl_state` to `gl_rend_state` --- src/CRE/GL/array_buffer.cpp | 16 +- src/CRE/GL/element_array_buffer.cpp | 16 +- src/CRE/GL/shader_storage_buffer.cpp | 16 +- src/CRE/GL/uniform_buffer.cpp | 16 +- src/CRE/Glitter/file_reader.cpp | 2 +- src/CRE/Glitter/glitter.cpp | 10 +- src/CRE/Glitter/particle_manager.cpp | 8 +- src/CRE/Glitter/render_scene.cpp | 90 +-- src/CRE/Vulkan/gl_wrap.cpp | 644 +++++++++++----------- src/CRE/Vulkan/gl_wrap.hpp | 10 +- src/CRE/clear_color.cpp | 2 +- src/CRE/effect.cpp | 184 +++---- src/CRE/gl_rend_state.cpp | 570 +++++++++++++++++++ src/CRE/gl_rend_state.hpp | 147 +++++ src/CRE/gl_state.cpp | 585 -------------------- src/CRE/gl_state.hpp | 149 ----- src/CRE/light_param.cpp | 2 +- src/CRE/mdl/disp_manager.cpp | 118 ++-- src/CRE/mdl/draw_object.cpp | 56 +- src/CRE/object.cpp | 2 +- src/CRE/render.cpp | 302 +++++------ src/CRE/render_context.cpp | 24 +- src/CRE/render_manager.cpp | 694 ++++++++++++------------ src/CRE/render_texture.cpp | 30 +- src/CRE/render_texture.hpp | 4 +- src/CRE/renderer/dof.cpp | 116 ++-- src/CRE/renderer/fbo.cpp | 6 +- src/CRE/renderer/fbo.hpp | 4 +- src/CRE/renderer/transparency.cpp | 16 +- src/CRE/shader.cpp | 27 +- src/CRE/shader_dev.cpp | 2 +- src/CRE/shader_ft.cpp | 2 +- src/CRE/shadow.cpp | 4 +- src/CRE/shared.cpp | 19 +- src/CRE/shared.hpp | 3 + src/CRE/sprite.cpp | 68 +-- src/CRE/sprite.hpp | 2 +- src/CRE/texture.cpp | 13 +- src/ReDIVA/app.cpp | 68 +-- src/ReDIVA/data_edit/glitter_editor.cpp | 1 - src/ReDIVA/x_pv_game.cpp | 46 +- 41 files changed, 2048 insertions(+), 2046 deletions(-) create mode 100644 src/CRE/gl_rend_state.cpp create mode 100644 src/CRE/gl_rend_state.hpp delete mode 100644 src/CRE/gl_state.cpp delete mode 100644 src/CRE/gl_state.hpp diff --git a/src/CRE/GL/array_buffer.cpp b/src/CRE/GL/array_buffer.cpp index c8e89162..e7d71f94 100644 --- a/src/CRE/GL/array_buffer.cpp +++ b/src/CRE/GL/array_buffer.cpp @@ -4,11 +4,11 @@ */ #include "array_buffer.hpp" -#include "../gl_state.hpp" +#include "../gl_rend_state.hpp" namespace GL { void ArrayBuffer::Bind(bool force) { - gl_state_bind_array_buffer(buffer, force); + gl_rend_state.bind_array_buffer(buffer, force); } void ArrayBuffer::Create(size_t size) { @@ -21,7 +21,7 @@ namespace GL { } else { glGenBuffers(1, &buffer); - gl_state_bind_array_buffer(buffer, true); + gl_rend_state.bind_array_buffer(buffer, true); if (GL_VERSION_4_4) glBufferStorage(GL_ARRAY_BUFFER, (GLsizeiptr)size, 0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT); @@ -41,7 +41,7 @@ namespace GL { } else { glGenBuffers(1, &buffer); - gl_state_bind_array_buffer(buffer, true); + gl_rend_state.bind_array_buffer(buffer, true); if (GL_VERSION_4_4) glBufferStorage(GL_ARRAY_BUFFER, (GLsizeiptr)size, data, dynamic ? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0); @@ -66,7 +66,7 @@ namespace GL { if (GL_VERSION_4_5) data = glMapNamedBuffer(buffer, GL_WRITE_ONLY); else { - gl_state_bind_array_buffer(buffer); + gl_rend_state.bind_array_buffer(buffer); data = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY); } @@ -77,7 +77,7 @@ namespace GL { glUnmapNamedBuffer(buffer); else { glUnmapBuffer(GL_ARRAY_BUFFER); - gl_state_bind_array_buffer(0); + gl_rend_state.bind_array_buffer(0); } return 0; } @@ -90,7 +90,7 @@ namespace GL { glUnmapNamedBuffer(buffer); else { glUnmapBuffer(GL_ARRAY_BUFFER); - gl_state_bind_array_buffer(0); + gl_rend_state.bind_array_buffer(0); } } @@ -101,7 +101,7 @@ namespace GL { if (GL_VERSION_4_5) glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data); else { - gl_state_bind_array_buffer(buffer); + gl_rend_state.bind_array_buffer(buffer); glBufferSubData(GL_ARRAY_BUFFER, (GLsizeiptr)offset, (GLsizeiptr)size, data); } } diff --git a/src/CRE/GL/element_array_buffer.cpp b/src/CRE/GL/element_array_buffer.cpp index 1bb00cfd..76b5710d 100644 --- a/src/CRE/GL/element_array_buffer.cpp +++ b/src/CRE/GL/element_array_buffer.cpp @@ -4,11 +4,11 @@ */ #include "element_array_buffer.hpp" -#include "../gl_state.hpp" +#include "../gl_rend_state.hpp" namespace GL { void ElementArrayBuffer::Bind(bool force) { - gl_state_bind_element_array_buffer(buffer, force); + gl_rend_state.bind_element_array_buffer(buffer, force); } void ElementArrayBuffer::Create(size_t size) { @@ -21,7 +21,7 @@ namespace GL { } else { glGenBuffers(1, &buffer); - gl_state_bind_element_array_buffer(buffer, true); + gl_rend_state.bind_element_array_buffer(buffer, true); if (GL_VERSION_4_4) glBufferStorage(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)size, 0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT); @@ -41,7 +41,7 @@ namespace GL { } else { glGenBuffers(1, &buffer); - gl_state_bind_element_array_buffer(buffer, true); + gl_rend_state.bind_element_array_buffer(buffer, true); if (GL_VERSION_4_4) glBufferStorage(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)size, data, dynamic ? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0); @@ -66,7 +66,7 @@ namespace GL { if (GL_VERSION_4_5) data = glMapNamedBuffer(buffer, GL_WRITE_ONLY); else { - gl_state_bind_element_array_buffer(buffer); + gl_rend_state.bind_element_array_buffer(buffer); data = glMapBuffer(GL_ELEMENT_ARRAY_BUFFER, GL_WRITE_ONLY); } @@ -77,7 +77,7 @@ namespace GL { glUnmapNamedBuffer(buffer); else { glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER); - gl_state_bind_element_array_buffer(0); + gl_rend_state.bind_element_array_buffer(0); } return 0; } @@ -90,7 +90,7 @@ namespace GL { glUnmapNamedBuffer(buffer); else { glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER); - gl_state_bind_element_array_buffer(0); + gl_rend_state.bind_element_array_buffer(0); } } @@ -101,7 +101,7 @@ namespace GL { if (GL_VERSION_4_5) glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data); else { - gl_state_bind_element_array_buffer(buffer); + gl_rend_state.bind_element_array_buffer(buffer); glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)offset, (GLsizeiptr)size, data); } } diff --git a/src/CRE/GL/shader_storage_buffer.cpp b/src/CRE/GL/shader_storage_buffer.cpp index 99abc20c..0a09c7fc 100644 --- a/src/CRE/GL/shader_storage_buffer.cpp +++ b/src/CRE/GL/shader_storage_buffer.cpp @@ -4,11 +4,11 @@ */ #include "shader_storage_buffer.hpp" -#include "../gl_state.hpp" +#include "../gl_rend_state.hpp" namespace GL { void ShaderStorageBuffer::Bind(int32_t index, bool force) { - gl_state_bind_shader_storage_buffer_base(index, buffer, force); + gl_rend_state.bind_shader_storage_buffer_base(index, buffer, force); } void ShaderStorageBuffer::Create(size_t size) { @@ -21,7 +21,7 @@ namespace GL { } else { glGenBuffers(1, &buffer); - gl_state_bind_shader_storage_buffer(buffer, true); + gl_rend_state.bind_shader_storage_buffer(buffer, true); if (GL_VERSION_4_4) glBufferStorage(GL_SHADER_STORAGE_BUFFER, (GLsizeiptr)size, 0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT); @@ -41,7 +41,7 @@ namespace GL { } else { glGenBuffers(1, &buffer); - gl_state_bind_shader_storage_buffer(buffer, true); + gl_rend_state.bind_shader_storage_buffer(buffer, true); if (GL_VERSION_4_4) glBufferStorage(GL_SHADER_STORAGE_BUFFER, (GLsizeiptr)size, data, dynamic ? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0); @@ -66,7 +66,7 @@ namespace GL { if (GL_VERSION_4_5) data = glMapNamedBuffer(buffer, GL_WRITE_ONLY); else { - gl_state_bind_shader_storage_buffer(buffer); + gl_rend_state.bind_shader_storage_buffer(buffer); data = glMapBuffer(GL_SHADER_STORAGE_BUFFER, GL_WRITE_ONLY); } @@ -77,7 +77,7 @@ namespace GL { glUnmapNamedBuffer(buffer); else { glUnmapBuffer(GL_SHADER_STORAGE_BUFFER); - gl_state_bind_shader_storage_buffer(0); + gl_rend_state.bind_shader_storage_buffer(0); } return 0; } @@ -90,7 +90,7 @@ namespace GL { glUnmapNamedBuffer(buffer); else { glUnmapBuffer(GL_SHADER_STORAGE_BUFFER); - gl_state_bind_shader_storage_buffer(0); + gl_rend_state.bind_shader_storage_buffer(0); } } @@ -101,7 +101,7 @@ namespace GL { if (GL_VERSION_4_5) glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data); else { - gl_state_bind_shader_storage_buffer(buffer); + gl_rend_state.bind_shader_storage_buffer(buffer); glBufferSubData(GL_SHADER_STORAGE_BUFFER, (GLsizeiptr)offset, (GLsizeiptr)size, data); } } diff --git a/src/CRE/GL/uniform_buffer.cpp b/src/CRE/GL/uniform_buffer.cpp index d6bab09c..a36b5cda 100644 --- a/src/CRE/GL/uniform_buffer.cpp +++ b/src/CRE/GL/uniform_buffer.cpp @@ -4,11 +4,11 @@ */ #include "uniform_buffer.hpp" -#include "../gl_state.hpp" +#include "../gl_rend_state.hpp" namespace GL { void UniformBuffer::Bind(int32_t index, bool force) { - gl_state_bind_uniform_buffer_base(index, buffer, force); + gl_rend_state.bind_uniform_buffer_base(index, buffer, force); } void UniformBuffer::Create(size_t size) { @@ -21,7 +21,7 @@ namespace GL { } else { glGenBuffers(1, &buffer); - gl_state_bind_uniform_buffer(buffer, true); + gl_rend_state.bind_uniform_buffer(buffer, true); if (GL_VERSION_4_4) glBufferStorage(GL_UNIFORM_BUFFER, (GLsizeiptr)size, 0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT); @@ -41,7 +41,7 @@ namespace GL { } else { glGenBuffers(1, &buffer); - gl_state_bind_uniform_buffer(buffer, true); + gl_rend_state.bind_uniform_buffer(buffer, true); if (GL_VERSION_4_4) glBufferStorage(GL_UNIFORM_BUFFER, (GLsizeiptr)size, data, dynamic ? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0); @@ -66,7 +66,7 @@ namespace GL { if (GL_VERSION_4_5) data = glMapNamedBuffer(buffer, GL_WRITE_ONLY); else { - gl_state_bind_uniform_buffer(buffer); + gl_rend_state.bind_uniform_buffer(buffer); data = glMapBuffer(GL_UNIFORM_BUFFER, GL_WRITE_ONLY); } @@ -77,7 +77,7 @@ namespace GL { glUnmapNamedBuffer(buffer); else { glUnmapBuffer(GL_UNIFORM_BUFFER); - gl_state_bind_uniform_buffer(0); + gl_rend_state.bind_uniform_buffer(0); } return 0; } @@ -90,7 +90,7 @@ namespace GL { glUnmapNamedBuffer(buffer); else { glUnmapBuffer(GL_UNIFORM_BUFFER); - gl_state_bind_uniform_buffer(0); + gl_rend_state.bind_uniform_buffer(0); } } @@ -101,7 +101,7 @@ namespace GL { if (GL_VERSION_4_5) glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data); else { - gl_state_bind_uniform_buffer(buffer); + gl_rend_state.bind_uniform_buffer(buffer); glBufferSubData(GL_UNIFORM_BUFFER, (GLsizeiptr)offset, (GLsizeiptr)size, data); } } diff --git a/src/CRE/Glitter/file_reader.cpp b/src/CRE/Glitter/file_reader.cpp index 4e583e7c..b777e569 100644 --- a/src/CRE/Glitter/file_reader.cpp +++ b/src/CRE/Glitter/file_reader.cpp @@ -12,7 +12,7 @@ #include "../data.hpp" #include "../object.hpp" #if SHARED_GLITTER_BUFFER -#include "../gl_state.hpp" +#include "../gl_rend_state.hpp" #endif namespace Glitter { diff --git a/src/CRE/Glitter/glitter.cpp b/src/CRE/Glitter/glitter.cpp index 6e06a7f8..5bec5f81 100644 --- a/src/CRE/Glitter/glitter.cpp +++ b/src/CRE/Glitter/glitter.cpp @@ -4,7 +4,7 @@ */ #include "glitter.hpp" -#include "../gl_state.hpp" +#include "../gl_rend_state.hpp" namespace Glitter { const float_t min_emission = 0.01f; @@ -271,7 +271,7 @@ namespace Glitter { buffer = force_malloc(max_count); glGenVertexArrays(1, &vao); - gl_state_bind_vertex_array(vao, true); + gl_rend_state.bind_vertex_array(vao, true); static const GLsizei buffer_size = sizeof(Buffer); @@ -304,10 +304,10 @@ namespace Glitter { glVertexAttribPointer(2, 4, GL_FLOAT, GL_FALSE, buffer_size, (void*)offsetof(Buffer, color)); - gl_state_bind_array_buffer(0); - gl_state_bind_vertex_array(0); + gl_rend_state.bind_array_buffer(0); + gl_rend_state.bind_vertex_array(0); if (is_quad) - gl_state_bind_element_array_buffer(0); + gl_rend_state.bind_element_array_buffer(0); } void DeleteBuffer(Buffer*& buffer, GLuint& vao, GL::ArrayBuffer& vbo, GL::ElementArrayBuffer& ebo) { diff --git a/src/CRE/Glitter/particle_manager.cpp b/src/CRE/Glitter/particle_manager.cpp index 9254c361..5a72724a 100644 --- a/src/CRE/Glitter/particle_manager.cpp +++ b/src/CRE/Glitter/particle_manager.cpp @@ -284,10 +284,10 @@ namespace Glitter { i->Disp(this, disp_type); } - gl_state_bind_vertex_array(0); - gl_state_disable_blend(); - gl_state_enable_cull_face(); - gl_state_disable_depth_test(); + gl_rend_state.bind_vertex_array(0); + gl_rend_state.disable_blend(); + gl_rend_state.enable_cull_face(); + gl_rend_state.disable_depth_test(); } void GltParticleManager::FreeEffects() { diff --git a/src/CRE/Glitter/render_scene.cpp b/src/CRE/Glitter/render_scene.cpp index 4068d6e0..847b7965 100644 --- a/src/CRE/Glitter/render_scene.cpp +++ b/src/CRE/Glitter/render_scene.cpp @@ -4,7 +4,7 @@ */ #include "glitter.hpp" -#include "../gl_state.hpp" +#include "../gl_rend_state.hpp" #include "../render_context.hpp" #include "../shader.hpp" #include "../shader_ft.hpp" @@ -995,8 +995,8 @@ namespace Glitter { break; } - gl_state_set_blend_func(blend_src, blend_dst); - gl_state_set_blend_equation(GL_FUNC_ADD); + gl_rend_state.set_blend_func(blend_src, blend_dst); + gl_rend_state.set_blend_equation(GL_FUNC_ADD); GLuint texture = rctx_ptr->empty_texture_2d->glid; GLuint mask_texture = rctx_ptr->empty_texture_2d->glid; @@ -1028,8 +1028,8 @@ namespace Glitter { uniform_value[U_TEXTURE_BLEND] = 0; } - gl_state_active_bind_texture_2d(0, texture); - gl_state_active_bind_texture_2d(1, mask_texture); + gl_rend_state.active_bind_texture_2d(0, texture); + gl_rend_state.active_bind_texture_2d(1, mask_texture); switch (rend_group->type) { case PARTICLE_QUAD: @@ -1045,55 +1045,55 @@ namespace Glitter { break; } - gl_state_enable_depth_test(); + gl_rend_state.enable_depth_test(); if (alpha_test) { uniform_value[U_ALPHA_TEST] = 1; rctx_ptr->set_batch_alpha_threshold(0.5f); uniform_value[U_ALPHA_BLEND] = 1; - gl_state_set_depth_mask(GL_TRUE); - gl_state_disable_blend(); + gl_rend_state.set_depth_mask(GL_TRUE); + gl_rend_state.disable_blend(); } else if (rend_group->disp_type) { uniform_value[U_ALPHA_TEST] = 0; uniform_value[U_ALPHA_BLEND] = 2; - gl_state_set_depth_mask(GL_FALSE); - gl_state_enable_blend(); + gl_rend_state.set_depth_mask(GL_FALSE); + gl_rend_state.enable_blend(); } else { uniform_value[U_ALPHA_TEST] = 0; uniform_value[U_ALPHA_BLEND] = 0; - gl_state_set_depth_mask(GL_TRUE); - gl_state_disable_blend(); + gl_rend_state.set_depth_mask(GL_TRUE); + gl_rend_state.disable_blend(); } if (rend_group->draw_type == DIRECTION_BILLBOARD) { - gl_state_enable_cull_face(); - gl_state_set_cull_face_mode(GL_BACK); + gl_rend_state.enable_cull_face(); + gl_rend_state.set_cull_face_mode(GL_BACK); } else - gl_state_disable_cull_face(); + gl_rend_state.disable_cull_face(); break; case PARTICLE_LINE: uniform_value[U_ALPHA_TEST] = 0; uniform_value[U_ALPHA_BLEND] = 2; uniform_value[U_FOG_STAGE] = 0; - gl_state_enable_depth_test(); - gl_state_set_depth_mask(GL_FALSE); - gl_state_enable_blend(); - gl_state_enable_cull_face(); - gl_state_set_cull_face_mode(GL_BACK); + gl_rend_state.enable_depth_test(); + gl_rend_state.set_depth_mask(GL_FALSE); + gl_rend_state.enable_blend(); + gl_rend_state.enable_cull_face(); + gl_rend_state.set_cull_face_mode(GL_BACK); break; case PARTICLE_LOCUS: uniform_value[U_ALPHA_TEST] = 0; uniform_value[U_ALPHA_BLEND] = 2; uniform_value[U_FOG_STAGE] = 0; - gl_state_enable_depth_test(); - gl_state_set_depth_mask(GL_FALSE); - gl_state_enable_blend(); - gl_state_disable_cull_face(); + gl_rend_state.enable_depth_test(); + gl_rend_state.set_depth_mask(GL_FALSE); + gl_rend_state.enable_blend(); + gl_rend_state.disable_cull_face(); break; } @@ -1102,18 +1102,18 @@ namespace Glitter { rctx_ptr->glitter_batch_ubo.Bind(3); switch (rend_group->type) { case PARTICLE_QUAD: - gl_state_bind_vertex_array(rend_group->vao); + gl_rend_state.bind_vertex_array(rend_group->vao); shaders_ft.enable_primitive_restart(); shaders_ft.draw_elements(GL_TRIANGLE_STRIP, (GLsizei)(5 * rend_group->disp - 1), GL_UNSIGNED_INT, 0); shaders_ft.disable_primitive_restart(); break; case PARTICLE_LINE: - gl_state_bind_vertex_array(rend_group->vao); + gl_rend_state.bind_vertex_array(rend_group->vao); for (std::pair& i : rend_group->draw_list) shaders_ft.draw_arrays(GL_LINE_STRIP, i.first, i.second); break; case PARTICLE_LOCUS: - gl_state_bind_vertex_array(rend_group->vao); + gl_rend_state.bind_vertex_array(rend_group->vao); for (std::pair& i : rend_group->draw_list) shaders_ft.draw_arrays(GL_TRIANGLE_STRIP, i.first, i.second); break; @@ -1975,8 +1975,8 @@ namespace Glitter { break; } - gl_state_set_blend_func(blend_src, blend_dst); - gl_state_set_blend_equation(GL_FUNC_ADD); + gl_rend_state.set_blend_func(blend_src, blend_dst); + gl_rend_state.set_blend_equation(GL_FUNC_ADD); GLuint texture = rctx_ptr->empty_texture_2d->glid; GLuint mask_texture = rctx_ptr->empty_texture_2d->glid; @@ -2008,8 +2008,8 @@ namespace Glitter { uniform_value[U_TEXTURE_BLEND] = 0; } - gl_state_active_bind_texture_2d(0, texture); - gl_state_active_bind_texture_2d(1, mask_texture); + gl_rend_state.active_bind_texture_2d(0, texture); + gl_rend_state.active_bind_texture_2d(1, mask_texture); switch (rend_group->fog_type) { default: @@ -2024,54 +2024,54 @@ namespace Glitter { } if (!(rend_group->flags & PARTICLE_DEPTH_TEST)) - gl_state_enable_depth_test(); + gl_rend_state.enable_depth_test(); else - gl_state_disable_depth_test(); + gl_rend_state.disable_depth_test(); if (alpha_test) { uniform_value[U_ALPHA_TEST] = 1; rctx_ptr->set_batch_alpha_threshold(0.5f); uniform_value[U_ALPHA_BLEND] = rend_group->disp_type ? 3 : 1; - gl_state_set_depth_mask(GL_TRUE); - gl_state_disable_blend(); + gl_rend_state.set_depth_mask(GL_TRUE); + gl_rend_state.disable_blend(); } else if (rend_group->disp_type) { uniform_value[U_ALPHA_TEST] = 0; uniform_value[U_ALPHA_BLEND] = 2; - gl_state_set_depth_mask(GL_FALSE); - gl_state_enable_blend(); + gl_rend_state.set_depth_mask(GL_FALSE); + gl_rend_state.enable_blend(); } else { uniform_value[U_ALPHA_TEST] = 0; uniform_value[U_ALPHA_BLEND] = 0; - gl_state_set_depth_mask(GL_TRUE); - gl_state_disable_blend(); + gl_rend_state.set_depth_mask(GL_TRUE); + gl_rend_state.disable_blend(); } if (rend_group->draw_type == DIRECTION_BILLBOARD && !rend_group->use_culling) { - gl_state_enable_cull_face(); - gl_state_set_cull_face_mode(GL_BACK); + gl_rend_state.enable_cull_face(); + gl_rend_state.set_cull_face_mode(GL_BACK); } else - gl_state_disable_cull_face(); + gl_rend_state.disable_cull_face(); shaders_ft.set(SHADER_FT_GLITTER_PT); rctx_ptr->set_glitter_render_data(); rctx_ptr->glitter_batch_ubo.Bind(3); switch (rend_group->type) { case PARTICLE_QUAD: - gl_state_bind_vertex_array(rend_group->vao); + gl_rend_state.bind_vertex_array(rend_group->vao); shaders_ft.enable_primitive_restart(); shaders_ft.draw_elements(GL_TRIANGLE_STRIP, (GLsizei)(5 * rend_group->disp - 1), GL_UNSIGNED_INT, 0); shaders_ft.disable_primitive_restart(); break; case PARTICLE_LINE: - gl_state_bind_vertex_array(rend_group->vao); + gl_rend_state.bind_vertex_array(rend_group->vao); for (std::pair& i : rend_group->draw_list) shaders_ft.draw_arrays(GL_LINE_STRIP, i.first, i.second); break; case PARTICLE_LOCUS: - gl_state_bind_vertex_array(rend_group->vao); + gl_rend_state.bind_vertex_array(rend_group->vao); for (std::pair& i : rend_group->draw_list) shaders_ft.draw_arrays(GL_TRIANGLE_STRIP, i.first, i.second); break; diff --git a/src/CRE/Vulkan/gl_wrap.cpp b/src/CRE/Vulkan/gl_wrap.cpp index 9f4bd50a..c2c3ade7 100644 --- a/src/CRE/Vulkan/gl_wrap.cpp +++ b/src/CRE/Vulkan/gl_wrap.cpp @@ -97,7 +97,7 @@ namespace Vulkan { void update_buffers(); }; - gl_state_struct gl_state; + gl_rend_state_struct gl_rend_state; gl_wrap_manager* gl_wrap_manager_ptr; static bool gl_wrap_manager_prepare_pipeline_draw(GLenum mode, GLenum type, const void* indices); @@ -538,7 +538,7 @@ namespace Vulkan { return 0; } - gl_state_struct::gl_state_struct() { + gl_rend_state_struct::gl_rend_state_struct() { clear_color = 0.0f; clear_depth = 1.0f; clear_stencil = 0x00; @@ -909,7 +909,7 @@ namespace Vulkan { uint32_t binding = -1; for (gl_vertex_buffer_binding_data& i : vertex_buffer_bindings) - if (i.buffer == gl_state.array_buffer_binding && i.stride == i.stride + if (i.buffer == gl_rend_state.array_buffer_binding && i.stride == i.stride && i.offset < offset && offset < i.offset + i.stride) { binding = (uint32_t)(&i - vertex_buffer_bindings); offset -= i.offset; @@ -926,7 +926,7 @@ namespace Vulkan { for (uint32_t i = 0; i < Vulkan::MAX_VERTEX_ATTRIB_COUNT; i++) if (!binding_used[i]) { binding = i; - vertex_buffer_bindings[binding].buffer = gl_state.array_buffer_binding; + vertex_buffer_bindings[binding].buffer = gl_rend_state.array_buffer_binding; vertex_buffer_bindings[binding].offset = offset; vertex_buffer_bindings[binding].stride = stride; offset = 0; @@ -1022,7 +1022,7 @@ namespace Vulkan { } GLuint gl_wrap_manager_get_query_samples_passed() { - return gl_state.query_samples_passed; + return gl_rend_state.query_samples_passed; } void gl_wrap_manager_update_buffers() { @@ -1429,7 +1429,7 @@ namespace Vulkan { this->data.resize(texture_get_size(internal_format, width, height)); if (!gl_texture_data::tex_data::convert(internal_format, width, height, format, - type, _type, data, this->data.data(), gl_state.unpack_alignment, true)) + type, _type, data, this->data.data(), gl_rend_state.unpack_alignment, true)) this->data.clear(); } @@ -2002,7 +2002,7 @@ namespace Vulkan { } static bool gl_wrap_manager_prepare_pipeline_draw(GLenum mode, GLenum type, const void* indices) { - Vulkan::gl_program* vk_program = Vulkan::gl_program::get(gl_state.program); + Vulkan::gl_program* vk_program = Vulkan::gl_program::get(gl_rend_state.program); if (!vk_program) return false; @@ -2011,7 +2011,7 @@ namespace Vulkan { if (!shader || !sub_shader || !sub_shader->vp_desc || !sub_shader->fp_desc) return false; - Vulkan::gl_vertex_array* vk_vao = Vulkan::gl_vertex_array::get(gl_state.vertex_array_binding); + Vulkan::gl_vertex_array* vk_vao = Vulkan::gl_vertex_array::get(gl_rend_state.vertex_array_binding); if (!vk_vao || type && !vk_vao->index_buffer_binding.buffer) return false; @@ -2424,7 +2424,7 @@ namespace Vulkan { break; case GL_LINE_STRIP: input_assembly_state.topology = VK_PRIMITIVE_TOPOLOGY_LINE_STRIP; - input_assembly_state.primitiveRestartEnable = gl_state.primitive_restart ? VK_TRUE : VK_FALSE; + input_assembly_state.primitiveRestartEnable = gl_rend_state.primitive_restart ? VK_TRUE : VK_FALSE; break; case GL_TRIANGLES: input_assembly_state.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; @@ -2432,62 +2432,62 @@ namespace Vulkan { break; case GL_TRIANGLE_STRIP: input_assembly_state.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP; - input_assembly_state.primitiveRestartEnable = gl_state.primitive_restart ? VK_TRUE : VK_FALSE; + input_assembly_state.primitiveRestartEnable = gl_rend_state.primitive_restart ? VK_TRUE : VK_FALSE; break; case GL_TRIANGLE_FAN: input_assembly_state.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN; - input_assembly_state.primitiveRestartEnable = gl_state.primitive_restart ? VK_TRUE : VK_FALSE; + input_assembly_state.primitiveRestartEnable = gl_rend_state.primitive_restart ? VK_TRUE : VK_FALSE; break; default: return false; } VkRect2D viewport_scissor_rect[2]; - viewport_scissor_rect[0] = *(VkRect2D*)&gl_state.viewport; - viewport_scissor_rect[1] = gl_state.scissor_test - ? *(VkRect2D*)&gl_state.scissor_box : *(VkRect2D*)&gl_state.viewport; + viewport_scissor_rect[0] = *(VkRect2D*)&gl_rend_state.viewport; + viewport_scissor_rect[1] = gl_rend_state.scissor_test + ? *(VkRect2D*)&gl_rend_state.scissor_box : *(VkRect2D*)&gl_rend_state.viewport; VkPipelineRasterizationStateCreateInfo rasterization_state = {}; rasterization_state.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO; rasterization_state.depthClampEnable = VK_FALSE; rasterization_state.rasterizerDiscardEnable = VK_FALSE; - rasterization_state.polygonMode = Vulkan::get_polygon_mode(gl_state.polygon_mode); - rasterization_state.lineWidth = gl_state.line_width; + rasterization_state.polygonMode = Vulkan::get_polygon_mode(gl_rend_state.polygon_mode); + rasterization_state.lineWidth = gl_rend_state.line_width; rasterization_state.cullMode = Vulkan::get_cull_mode_flags( - gl_state.cull_face ? gl_state.cull_face_mode : GL_NONE); + gl_rend_state.cull_face ? gl_rend_state.cull_face_mode : GL_NONE); rasterization_state.frontFace = VK_FRONT_FACE_CLOCKWISE; rasterization_state.depthBiasEnable = VK_FALSE; VkPipelineDepthStencilStateCreateInfo depth_stencil_state = {}; depth_stencil_state.sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO; - depth_stencil_state.depthTestEnable = gl_state.depth_test ? VK_TRUE : VK_FALSE; - depth_stencil_state.depthWriteEnable = gl_state.depth_test && gl_state.depth_mask ? VK_TRUE : VK_FALSE; + depth_stencil_state.depthTestEnable = gl_rend_state.depth_test ? VK_TRUE : VK_FALSE; + depth_stencil_state.depthWriteEnable = gl_rend_state.depth_test && gl_rend_state.depth_mask ? VK_TRUE : VK_FALSE; depth_stencil_state.depthCompareOp = Vulkan::get_compare_op( - gl_state.depth_test ? gl_state.depth_func : GL_ALWAYS); + gl_rend_state.depth_test ? gl_rend_state.depth_func : GL_ALWAYS); depth_stencil_state.depthBoundsTestEnable = VK_FALSE; - depth_stencil_state.stencilTestEnable = gl_state.stencil_test ? VK_TRUE : VK_FALSE; - depth_stencil_state.front.failOp = Vulkan::get_stencil_op(gl_state.stencil_fail); - depth_stencil_state.front.passOp = Vulkan::get_stencil_op(gl_state.stencil_dppass); - depth_stencil_state.front.depthFailOp = Vulkan::get_stencil_op(gl_state.stencil_dpfail); - depth_stencil_state.front.compareOp = Vulkan::get_compare_op(gl_state.stencil_func); - depth_stencil_state.front.compareMask = gl_state.stencil_value_mask; - depth_stencil_state.front.writeMask = gl_state.stencil_mask; - depth_stencil_state.front.reference = gl_state.stencil_ref; - depth_stencil_state.back.failOp = Vulkan::get_stencil_op(gl_state.stencil_fail); - depth_stencil_state.back.passOp = Vulkan::get_stencil_op(gl_state.stencil_dppass); - depth_stencil_state.back.depthFailOp = Vulkan::get_stencil_op(gl_state.stencil_dpfail); - depth_stencil_state.back.compareOp = Vulkan::get_compare_op(gl_state.stencil_func); - depth_stencil_state.back.compareMask = gl_state.stencil_value_mask; - depth_stencil_state.back.writeMask = gl_state.stencil_mask; - depth_stencil_state.back.reference = gl_state.stencil_ref; + depth_stencil_state.stencilTestEnable = gl_rend_state.stencil_test ? VK_TRUE : VK_FALSE; + depth_stencil_state.front.failOp = Vulkan::get_stencil_op(gl_rend_state.stencil_fail); + depth_stencil_state.front.passOp = Vulkan::get_stencil_op(gl_rend_state.stencil_dppass); + depth_stencil_state.front.depthFailOp = Vulkan::get_stencil_op(gl_rend_state.stencil_dpfail); + depth_stencil_state.front.compareOp = Vulkan::get_compare_op(gl_rend_state.stencil_func); + depth_stencil_state.front.compareMask = gl_rend_state.stencil_value_mask; + depth_stencil_state.front.writeMask = gl_rend_state.stencil_mask; + depth_stencil_state.front.reference = gl_rend_state.stencil_ref; + depth_stencil_state.back.failOp = Vulkan::get_stencil_op(gl_rend_state.stencil_fail); + depth_stencil_state.back.passOp = Vulkan::get_stencil_op(gl_rend_state.stencil_dppass); + depth_stencil_state.back.depthFailOp = Vulkan::get_stencil_op(gl_rend_state.stencil_dpfail); + depth_stencil_state.back.compareOp = Vulkan::get_compare_op(gl_rend_state.stencil_func); + depth_stencil_state.back.compareMask = gl_rend_state.stencil_value_mask; + depth_stencil_state.back.writeMask = gl_rend_state.stencil_mask; + depth_stencil_state.back.reference = gl_rend_state.stencil_ref; depth_stencil_state.minDepthBounds = 0.0f; depth_stencil_state.maxDepthBounds = 1.0f; VkColorComponentFlags color_write_mask = 0; - color_write_mask |= gl_state.color_mask[0] ? VK_COLOR_COMPONENT_R_BIT : 0; - color_write_mask |= gl_state.color_mask[1] ? VK_COLOR_COMPONENT_G_BIT : 0; - color_write_mask |= gl_state.color_mask[2] ? VK_COLOR_COMPONENT_B_BIT : 0; - color_write_mask |= gl_state.color_mask[3] ? VK_COLOR_COMPONENT_A_BIT : 0; + color_write_mask |= gl_rend_state.color_mask[0] ? VK_COLOR_COMPONENT_R_BIT : 0; + color_write_mask |= gl_rend_state.color_mask[1] ? VK_COLOR_COMPONENT_G_BIT : 0; + color_write_mask |= gl_rend_state.color_mask[2] ? VK_COLOR_COMPONENT_B_BIT : 0; + color_write_mask |= gl_rend_state.color_mask[3] ? VK_COLOR_COMPONENT_A_BIT : 0; uint32_t color_blend_attachment_count = fragment_output_count; VkPipelineColorBlendAttachmentState* color_blend_attachments @@ -2495,13 +2495,13 @@ namespace Vulkan { for (uint32_t i = 0; i < color_blend_attachment_count; i++) { VkPipelineColorBlendAttachmentState& color_blend_attachment = color_blend_attachments[i]; color_blend_attachment.colorWriteMask = color_write_mask; - color_blend_attachment.blendEnable = gl_state.blend ? VK_TRUE : VK_FALSE; - color_blend_attachment.srcColorBlendFactor = Vulkan::get_blend_factor(gl_state.blend_src_rgb); - color_blend_attachment.dstColorBlendFactor = Vulkan::get_blend_factor(gl_state.blend_dst_rgb); - color_blend_attachment.colorBlendOp = Vulkan::get_blend_op(gl_state.blend_mode_rgb); - color_blend_attachment.srcAlphaBlendFactor = Vulkan::get_blend_factor(gl_state.blend_src_alpha); - color_blend_attachment.dstAlphaBlendFactor = Vulkan::get_blend_factor(gl_state.blend_dst_alpha); - color_blend_attachment.alphaBlendOp = Vulkan::get_blend_op(gl_state.blend_mode_alpha); + color_blend_attachment.blendEnable = gl_rend_state.blend ? VK_TRUE : VK_FALSE; + color_blend_attachment.srcColorBlendFactor = Vulkan::get_blend_factor(gl_rend_state.blend_src_rgb); + color_blend_attachment.dstColorBlendFactor = Vulkan::get_blend_factor(gl_rend_state.blend_dst_rgb); + color_blend_attachment.colorBlendOp = Vulkan::get_blend_op(gl_rend_state.blend_mode_rgb); + color_blend_attachment.srcAlphaBlendFactor = Vulkan::get_blend_factor(gl_rend_state.blend_src_alpha); + color_blend_attachment.dstAlphaBlendFactor = Vulkan::get_blend_factor(gl_rend_state.blend_dst_alpha); + color_blend_attachment.alphaBlendOp = Vulkan::get_blend_op(gl_rend_state.blend_mode_alpha); } Vulkan::DescriptorPipeline* vk_descriptor_pipeline = descriptor_pipeline.get(); @@ -2511,8 +2511,8 @@ namespace Vulkan { const uint32_t framebuffer_index = depth_stencil_state.depthWriteEnable || depth_stencil_state.stencilTestEnable ? 0 : 1; VkRenderPass render_pass; - if (gl_state.draw_framebuffer_binding) { - Vulkan::gl_framebuffer* vk_fbo = Vulkan::gl_framebuffer::get(gl_state.draw_framebuffer_binding); + if (gl_rend_state.draw_framebuffer_binding) { + Vulkan::gl_framebuffer* vk_fbo = Vulkan::gl_framebuffer::get(gl_rend_state.draw_framebuffer_binding); render_pass = *vk_fbo->render_pass[framebuffer_index].get(); } else @@ -2585,10 +2585,10 @@ namespace Vulkan { GLuint texture = 0; switch (desc->data) { case 0: - texture = gl_state.texture_binding_2d[desc->binding]; + texture = gl_rend_state.texture_binding_2d[desc->binding]; break; case 1: - texture = gl_state.texture_binding_cube_map[desc->binding]; + texture = gl_rend_state.texture_binding_cube_map[desc->binding]; break; } @@ -2597,7 +2597,7 @@ namespace Vulkan { break; Vulkan::gl_sampler* sampler_data = &vk_tex->sampler_data; - GLuint sampler = gl_state.sampler_binding[desc->binding]; + GLuint sampler = gl_rend_state.sampler_binding[desc->binding]; if (sampler) { Vulkan::gl_sampler* vk_samp = Vulkan::gl_sampler::get(sampler); if (vk_samp) @@ -2633,7 +2633,7 @@ namespace Vulkan { break; case SHADER_DESCRIPTION_UNIFORM: if (desc->binding == -1) { - Vulkan::gl_buffer* vk_buf = Vulkan::gl_buffer::get(gl_state.uniform_buffer_bindings[0]); + Vulkan::gl_buffer* vk_buf = Vulkan::gl_buffer::get(gl_rend_state.uniform_buffer_bindings[0]); if (!vk_buf) break; @@ -2654,12 +2654,12 @@ namespace Vulkan { if (!found) { Vulkan::gl_uniform_buffer* vk_ub = Vulkan::gl_uniform_buffer::get( - gl_state.uniform_buffer_bindings[desc->binding]); + gl_rend_state.uniform_buffer_bindings[desc->binding]); if (!vk_ub) break; - const GLintptr gl_offset = gl_state.uniform_buffer_offsets[desc->binding]; - const GLsizeiptr gl_size = gl_state.uniform_buffer_sizes[desc->binding]; + const GLintptr gl_offset = gl_rend_state.uniform_buffer_offsets[desc->binding]; + const GLsizeiptr gl_size = gl_rend_state.uniform_buffer_sizes[desc->binding]; VkDeviceSize offset = vk_ub->working_buffer.GetOffset() + (VkDeviceSize)gl_offset; VkDeviceSize range = gl_size != -1 ? (VkDeviceSize)gl_size : vk_ub->working_buffer.GetSize(); @@ -2684,13 +2684,13 @@ namespace Vulkan { } if (!found) { - GLuint buffer = gl_state.shader_storage_buffer_bindings[desc->binding]; + GLuint buffer = gl_rend_state.shader_storage_buffer_bindings[desc->binding]; Vulkan::gl_storage_buffer* vk_sb = Vulkan::gl_storage_buffer::get(buffer); if (!vk_sb) break; - const GLintptr gl_offset = gl_state.shader_storage_buffer_offsets[desc->binding]; - const GLsizeiptr gl_size = gl_state.shader_storage_buffer_sizes[desc->binding]; + const GLintptr gl_offset = gl_rend_state.shader_storage_buffer_offsets[desc->binding]; + const GLsizeiptr gl_size = gl_rend_state.shader_storage_buffer_sizes[desc->binding]; VkDeviceSize offset = vk_sb->working_buffer.GetOffset() + (VkDeviceSize)gl_offset; VkDeviceSize range = gl_size != -1 ? (VkDeviceSize)gl_size : vk_sb->working_buffer.GetSize(); @@ -2730,10 +2730,10 @@ namespace Vulkan { GLuint texture = 0; switch (desc->data) { case 0: - texture = gl_state.texture_binding_2d[desc->binding]; + texture = gl_rend_state.texture_binding_2d[desc->binding]; break; case 1: - texture = gl_state.texture_binding_cube_map[desc->binding]; + texture = gl_rend_state.texture_binding_cube_map[desc->binding]; break; } @@ -2742,7 +2742,7 @@ namespace Vulkan { break; Vulkan::gl_sampler* sampler_data = &vk_tex->sampler_data; - GLuint sampler = gl_state.sampler_binding[desc->binding]; + GLuint sampler = gl_rend_state.sampler_binding[desc->binding]; if (sampler) { Vulkan::gl_sampler* vk_samp = Vulkan::gl_sampler::get(sampler); if (vk_samp) @@ -2778,7 +2778,7 @@ namespace Vulkan { break; case SHADER_DESCRIPTION_UNIFORM: if (desc->binding == -1) { - Vulkan::gl_buffer* vk_buf = Vulkan::gl_buffer::get(gl_state.uniform_buffer_bindings[0]); + Vulkan::gl_buffer* vk_buf = Vulkan::gl_buffer::get(gl_rend_state.uniform_buffer_bindings[0]); if (!vk_buf) break; @@ -2799,12 +2799,12 @@ namespace Vulkan { if (!found) { Vulkan::gl_uniform_buffer* vk_ub = Vulkan::gl_uniform_buffer::get( - gl_state.uniform_buffer_bindings[desc->binding]); + gl_rend_state.uniform_buffer_bindings[desc->binding]); if (!vk_ub) break; - const GLintptr gl_offset = gl_state.uniform_buffer_offsets[desc->binding]; - const GLsizeiptr gl_size = gl_state.uniform_buffer_sizes[desc->binding]; + const GLintptr gl_offset = gl_rend_state.uniform_buffer_offsets[desc->binding]; + const GLsizeiptr gl_size = gl_rend_state.uniform_buffer_sizes[desc->binding]; VkDeviceSize offset = vk_ub->working_buffer.GetOffset() + (VkDeviceSize)gl_offset; VkDeviceSize range = gl_size != -1 ? (VkDeviceSize)gl_size : vk_ub->working_buffer.GetSize(); @@ -2829,13 +2829,13 @@ namespace Vulkan { } if (!found) { - GLuint buffer = gl_state.shader_storage_buffer_bindings[desc->binding]; + GLuint buffer = gl_rend_state.shader_storage_buffer_bindings[desc->binding]; Vulkan::gl_storage_buffer* vk_sb = Vulkan::gl_storage_buffer::get(buffer); if (!vk_sb) break; - const GLintptr gl_offset = gl_state.shader_storage_buffer_offsets[desc->binding]; - const GLsizeiptr gl_size = gl_state.shader_storage_buffer_sizes[desc->binding]; + const GLintptr gl_offset = gl_rend_state.shader_storage_buffer_offsets[desc->binding]; + const GLsizeiptr gl_size = gl_rend_state.shader_storage_buffer_sizes[desc->binding]; VkDeviceSize offset = vk_sb->working_buffer.GetOffset() + (VkDeviceSize)gl_offset; VkDeviceSize range = gl_size != -1 ? (VkDeviceSize)gl_size : vk_sb->working_buffer.GetSize(); @@ -2956,8 +2956,8 @@ namespace Vulkan { Vulkan::gl_query::get(query)->query.Reset(Vulkan::current_command_buffer); } - if (gl_state.draw_framebuffer_binding) { - Vulkan::gl_framebuffer* vk_fbo = Vulkan::gl_framebuffer::get(gl_state.draw_framebuffer_binding); + if (gl_rend_state.draw_framebuffer_binding) { + Vulkan::gl_framebuffer* vk_fbo = Vulkan::gl_framebuffer::get(gl_rend_state.draw_framebuffer_binding); if (!vk_fbo->framebuffer) { free_def(descriptor_infos); return false; @@ -3099,7 +3099,7 @@ namespace Vulkan { return; } - gl_state.active_texture_index = texture_index; + gl_rend_state.active_texture_index = texture_index; } static void gl_wrap_manager_begin_query(GLenum target, GLuint id) { @@ -3108,8 +3108,8 @@ namespace Vulkan { return; } - gl_query* vk_que_curr = gl_query::get(gl_state.query_samples_passed); - if (vk_que_curr && vk_que_curr->target == target || !id || gl_state.query_samples_passed == id) { + gl_query* vk_que_curr = gl_query::get(gl_rend_state.query_samples_passed); + if (vk_que_curr && vk_que_curr->target == target || !id || gl_rend_state.query_samples_passed == id) { gl_wrap_manager_ptr->push_error(GL_INVALID_OPERATION); return; } @@ -3127,7 +3127,7 @@ namespace Vulkan { vk_que->query.Create(Vulkan::current_device, 0, VK_QUERY_TYPE_OCCLUSION); } - gl_state.query_samples_passed = id; + gl_rend_state.query_samples_passed = id; } static void gl_wrap_manager_bind_buffer(GLenum target, GLuint buffer) { @@ -3147,7 +3147,7 @@ namespace Vulkan { } } - gl_state.array_buffer_binding = buffer; + gl_rend_state.array_buffer_binding = buffer; } break; case GL_ELEMENT_ARRAY_BUFFER: { if (buffer) { @@ -3165,9 +3165,9 @@ namespace Vulkan { } } - gl_state.element_array_buffer_binding = buffer; + gl_rend_state.element_array_buffer_binding = buffer; - gl_vertex_array* vk_vao = gl_vertex_array::get(gl_state.vertex_array_binding); + gl_vertex_array* vk_vao = gl_vertex_array::get(gl_rend_state.vertex_array_binding); if (vk_vao) vk_vao->index_buffer_binding.buffer = buffer; } break; @@ -3186,7 +3186,7 @@ namespace Vulkan { } } - gl_state.uniform_buffer_binding = buffer; + gl_rend_state.uniform_buffer_binding = buffer; } break; case GL_SHADER_STORAGE_BUFFER: { if (buffer) { @@ -3203,7 +3203,7 @@ namespace Vulkan { } } - gl_state.shader_storage_buffer_binding = buffer; + gl_rend_state.shader_storage_buffer_binding = buffer; } break; default: gl_wrap_manager_ptr->push_error(GL_INVALID_ENUM); @@ -3233,9 +3233,9 @@ namespace Vulkan { } } - gl_state.uniform_buffer_bindings[index] = buffer; - gl_state.uniform_buffer_offsets[index] = 0; - gl_state.uniform_buffer_sizes[index] = -1; + gl_rend_state.uniform_buffer_bindings[index] = buffer; + gl_rend_state.uniform_buffer_offsets[index] = 0; + gl_rend_state.uniform_buffer_sizes[index] = -1; } break; case GL_SHADER_STORAGE_BUFFER: { if (index >= Vulkan::MAX_SHADER_STORAGE_BUFFER_BINDINGS) { @@ -3257,9 +3257,9 @@ namespace Vulkan { } } - gl_state.shader_storage_buffer_bindings[index] = buffer; - gl_state.shader_storage_buffer_offsets[index] = 0; - gl_state.shader_storage_buffer_sizes[index] = -1; + gl_rend_state.shader_storage_buffer_bindings[index] = buffer; + gl_rend_state.shader_storage_buffer_offsets[index] = 0; + gl_rend_state.shader_storage_buffer_sizes[index] = -1; } break; default: gl_wrap_manager_ptr->push_error(GL_INVALID_ENUM); @@ -3305,9 +3305,9 @@ namespace Vulkan { return; } - gl_state.uniform_buffer_bindings[index] = buffer; - gl_state.uniform_buffer_offsets[index] = offset; - gl_state.uniform_buffer_sizes[index] = size; + gl_rend_state.uniform_buffer_bindings[index] = buffer; + gl_rend_state.uniform_buffer_offsets[index] = offset; + gl_rend_state.uniform_buffer_sizes[index] = size; } break; case GL_SHADER_STORAGE_BUFFER: { if (index >= Vulkan::MAX_SHADER_STORAGE_BUFFER_BINDINGS || size <= 0) { @@ -3345,9 +3345,9 @@ namespace Vulkan { return; } - gl_state.shader_storage_buffer_bindings[index] = buffer; - gl_state.shader_storage_buffer_offsets[index] = offset; - gl_state.shader_storage_buffer_sizes[index] = size; + gl_rend_state.shader_storage_buffer_bindings[index] = buffer; + gl_rend_state.shader_storage_buffer_offsets[index] = offset; + gl_rend_state.shader_storage_buffer_sizes[index] = size; } break; default: gl_wrap_manager_ptr->push_error(GL_INVALID_ENUM); @@ -3376,14 +3376,14 @@ namespace Vulkan { switch (target) { case GL_READ_FRAMEBUFFER: - gl_state.read_framebuffer_binding = framebuffer; + gl_rend_state.read_framebuffer_binding = framebuffer; break; case GL_DRAW_FRAMEBUFFER: - gl_state.draw_framebuffer_binding = framebuffer; + gl_rend_state.draw_framebuffer_binding = framebuffer; break; case GL_FRAMEBUFFER: - gl_state.read_framebuffer_binding = framebuffer; - gl_state.draw_framebuffer_binding = framebuffer; + gl_rend_state.read_framebuffer_binding = framebuffer; + gl_rend_state.draw_framebuffer_binding = framebuffer; break; } } @@ -3402,7 +3402,7 @@ namespace Vulkan { } } - gl_state.sampler_binding[unit] = sampler; + gl_rend_state.sampler_binding[unit] = sampler; } static void gl_wrap_manager_bind_texture(GLenum target, GLuint texture) { @@ -3431,10 +3431,10 @@ namespace Vulkan { switch (target) { case GL_TEXTURE_2D: - gl_state.texture_binding_2d[gl_state.active_texture_index] = texture; + gl_rend_state.texture_binding_2d[gl_rend_state.active_texture_index] = texture; break; case GL_TEXTURE_CUBE_MAP: - gl_state.texture_binding_cube_map[gl_state.active_texture_index] = texture; + gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index] = texture; break; } } @@ -3448,7 +3448,7 @@ namespace Vulkan { } } - gl_state.vertex_array_binding = array; + gl_rend_state.vertex_array_binding = array; } static void gl_wrap_manager_blend_func(GLenum sfactor, GLenum dfactor) { @@ -3489,10 +3489,10 @@ namespace Vulkan { return; } - gl_state.blend_src_rgb = sfactorRGB; - gl_state.blend_dst_rgb = dfactorRGB; - gl_state.blend_src_alpha = sfactorAlpha; - gl_state.blend_dst_alpha = dfactorAlpha; + gl_rend_state.blend_src_rgb = sfactorRGB; + gl_rend_state.blend_dst_rgb = dfactorRGB; + gl_rend_state.blend_src_alpha = sfactorAlpha; + gl_rend_state.blend_dst_alpha = dfactorAlpha; } static void gl_wrap_manager_blend_equation(GLenum mode) { @@ -3518,14 +3518,14 @@ namespace Vulkan { return; } - gl_state.blend_mode_rgb = modeRGB; - gl_state.blend_mode_alpha = modeAlpha; + gl_rend_state.blend_mode_rgb = modeRGB; + gl_rend_state.blend_mode_alpha = modeAlpha; } static void gl_wrap_manager_blit_framebuffer( GLint src_x0, GLint src_y0, GLint src_x1, GLint src_y1, GLint dst_x0, GLint dst_y0, GLint dst_x1, GLint dst_y1, GLbitfield mask, GLenum filter) { - gl_wrap_manager_blit_named_framebuffer(gl_state.read_framebuffer_binding, gl_state.draw_framebuffer_binding, + gl_wrap_manager_blit_named_framebuffer(gl_rend_state.read_framebuffer_binding, gl_rend_state.draw_framebuffer_binding, src_x0, src_y0, src_x1, src_y1, dst_x0, dst_y0, dst_x1, dst_y1, mask, filter); } @@ -3625,19 +3625,19 @@ namespace Vulkan { switch (target) { case GL_ARRAY_BUFFER: gl_wrap_manager_named_buffer_data( - gl_state.array_buffer_binding, size, data, usage); + gl_rend_state.array_buffer_binding, size, data, usage); break; case GL_ELEMENT_ARRAY_BUFFER: gl_wrap_manager_named_buffer_data( - gl_state.element_array_buffer_binding, size, data, usage); + gl_rend_state.element_array_buffer_binding, size, data, usage); break; case GL_UNIFORM_BUFFER: gl_wrap_manager_named_buffer_data( - gl_state.uniform_buffer_binding, size, data, usage); + gl_rend_state.uniform_buffer_binding, size, data, usage); break; case GL_SHADER_STORAGE_BUFFER: gl_wrap_manager_named_buffer_data( - gl_state.shader_storage_buffer_binding, size, data, usage); + gl_rend_state.shader_storage_buffer_binding, size, data, usage); break; default: gl_wrap_manager_ptr->push_error(GL_INVALID_ENUM); @@ -3650,19 +3650,19 @@ namespace Vulkan { switch (target) { case GL_ARRAY_BUFFER: gl_wrap_manager_named_buffer_storage( - gl_state.array_buffer_binding, size, data, flags); + gl_rend_state.array_buffer_binding, size, data, flags); break; case GL_ELEMENT_ARRAY_BUFFER: gl_wrap_manager_named_buffer_storage( - gl_state.element_array_buffer_binding, size, data, flags); + gl_rend_state.element_array_buffer_binding, size, data, flags); break; case GL_UNIFORM_BUFFER: gl_wrap_manager_named_buffer_storage( - gl_state.uniform_buffer_binding, size, data, flags); + gl_rend_state.uniform_buffer_binding, size, data, flags); break; case GL_SHADER_STORAGE_BUFFER: gl_wrap_manager_named_buffer_storage( - gl_state.shader_storage_buffer_binding, size, data, flags); + gl_rend_state.shader_storage_buffer_binding, size, data, flags); break; default: gl_wrap_manager_ptr->push_error(GL_INVALID_ENUM); @@ -3675,19 +3675,19 @@ namespace Vulkan { switch (target) { case GL_ARRAY_BUFFER: gl_wrap_manager_named_buffer_sub_data( - gl_state.array_buffer_binding, offset, size, data); + gl_rend_state.array_buffer_binding, offset, size, data); break; case GL_ELEMENT_ARRAY_BUFFER: gl_wrap_manager_named_buffer_sub_data( - gl_state.element_array_buffer_binding, offset, size, data); + gl_rend_state.element_array_buffer_binding, offset, size, data); break; case GL_UNIFORM_BUFFER: gl_wrap_manager_named_buffer_sub_data( - gl_state.uniform_buffer_binding, offset, size, data); + gl_rend_state.uniform_buffer_binding, offset, size, data); break; case GL_SHADER_STORAGE_BUFFER: gl_wrap_manager_named_buffer_sub_data( - gl_state.shader_storage_buffer_binding, offset, size, data); + gl_rend_state.shader_storage_buffer_binding, offset, size, data); break; default: gl_wrap_manager_ptr->push_error(GL_INVALID_ENUM); @@ -3699,11 +3699,11 @@ namespace Vulkan { GLuint framebuffer; switch (target) { case GL_READ_FRAMEBUFFER: - framebuffer = gl_state.read_framebuffer_binding; + framebuffer = gl_rend_state.read_framebuffer_binding; break; case GL_DRAW_FRAMEBUFFER: case GL_FRAMEBUFFER: - framebuffer = gl_state.draw_framebuffer_binding; + framebuffer = gl_rend_state.draw_framebuffer_binding; break; default: gl_wrap_manager_ptr->push_error(GL_INVALID_ENUM); @@ -3778,7 +3778,7 @@ namespace Vulkan { } if (mask & GL_COLOR_BUFFER_BIT) { - gl_framebuffer* vk_fbo = gl_framebuffer::get(gl_state.draw_framebuffer_binding); + gl_framebuffer* vk_fbo = gl_framebuffer::get(gl_rend_state.draw_framebuffer_binding); for (uint32_t i = 0; i < Vulkan::MAX_COLOR_ATTACHMENTS; i++) { VkImage image; @@ -3798,10 +3798,10 @@ namespace Vulkan { } VkClearColorValue clear_color_value; - clear_color_value.float32[0] = gl_state.clear_color.x; - clear_color_value.float32[1] = gl_state.clear_color.y; - clear_color_value.float32[2] = gl_state.clear_color.z; - clear_color_value.float32[3] = gl_state.clear_color.w; + clear_color_value.float32[0] = gl_rend_state.clear_color.x; + clear_color_value.float32[1] = gl_rend_state.clear_color.y; + clear_color_value.float32[2] = gl_rend_state.clear_color.z; + clear_color_value.float32[3] = gl_rend_state.clear_color.w; VkImageSubresourceRange range; range.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; @@ -3825,7 +3825,7 @@ namespace Vulkan { } if (mask & GL_DEPTH_BUFFER_BIT) { - gl_framebuffer* vk_fbo = gl_framebuffer::get(gl_state.draw_framebuffer_binding); + gl_framebuffer* vk_fbo = gl_framebuffer::get(gl_rend_state.draw_framebuffer_binding); if (vk_fbo && vk_fbo->depth_attachment) { gl_texture* vk_tex = gl_texture::get(vk_fbo->depth_attachment); VkImage image = vk_tex->image; @@ -3834,8 +3834,8 @@ namespace Vulkan { const VkImageAspectFlags aspect_mask = Vulkan::get_aspect_mask(vk_tex->internal_format); VkClearDepthStencilValue clear_depth_stencil_value; - clear_depth_stencil_value.depth = gl_state.clear_depth; - clear_depth_stencil_value.stencil = gl_state.clear_stencil; + clear_depth_stencil_value.depth = gl_rend_state.clear_depth; + clear_depth_stencil_value.stencil = gl_rend_state.clear_stencil; VkImageSubresourceRange range; range.aspectMask = aspect_mask; @@ -3857,22 +3857,22 @@ namespace Vulkan { } static void gl_wrap_manager_clear_buffer(GLenum buffer, GLint drawbuffer, const GLfloat* value) { - gl_wrap_manager_clear_named_framebuffer(gl_state.draw_framebuffer_binding, buffer, drawbuffer, value); + gl_wrap_manager_clear_named_framebuffer(gl_rend_state.draw_framebuffer_binding, buffer, drawbuffer, value); } static void gl_wrap_manager_clear_color(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) { - gl_state.clear_color.x = red; - gl_state.clear_color.y = green; - gl_state.clear_color.z = blue; - gl_state.clear_color.w = alpha; + gl_rend_state.clear_color.x = red; + gl_rend_state.clear_color.y = green; + gl_rend_state.clear_color.z = blue; + gl_rend_state.clear_color.w = alpha; } static void gl_wrap_manager_clear_depth(GLfloat depth) { - gl_state.clear_depth = depth; + gl_rend_state.clear_depth = depth; } static void gl_wrap_manager_clear_stencil(GLint s) { - gl_state.clear_stencil = s; + gl_rend_state.clear_stencil = s; } static void gl_wrap_manager_clear_named_framebuffer(GLuint framebuffer, @@ -3969,10 +3969,10 @@ namespace Vulkan { } static void gl_wrap_manager_color_mask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) { - gl_state.color_mask[0] = red ? GL_TRUE : GL_FALSE; - gl_state.color_mask[1] = green ? GL_TRUE : GL_FALSE; - gl_state.color_mask[2] = blue ? GL_TRUE : GL_FALSE; - gl_state.color_mask[3] = alpha ? GL_TRUE : GL_FALSE; + gl_rend_state.color_mask[0] = red ? GL_TRUE : GL_FALSE; + gl_rend_state.color_mask[1] = green ? GL_TRUE : GL_FALSE; + gl_rend_state.color_mask[2] = blue ? GL_TRUE : GL_FALSE; + gl_rend_state.color_mask[3] = alpha ? GL_TRUE : GL_FALSE; } static void gl_wrap_manager_compressed_tex_image_2d(GLenum target, GLint level, @@ -3982,36 +3982,36 @@ namespace Vulkan { switch (target) { case GL_TEXTURE_2D: layer = 0; - texture = gl_state.texture_binding_2d[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_2d[gl_rend_state.active_texture_index]; break; case GL_TEXTURE_CUBE_MAP_POSITIVE_X: layer = 0; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_NEGATIVE_X: layer = 1; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_POSITIVE_Y: layer = 2; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: layer = 3; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_POSITIVE_Z: layer = 4; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: layer = 5; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; default: @@ -4093,36 +4093,36 @@ namespace Vulkan { switch (target) { case GL_TEXTURE_2D: layer = 0; - texture = gl_state.texture_binding_2d[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_2d[gl_rend_state.active_texture_index]; break; case GL_TEXTURE_CUBE_MAP_POSITIVE_X: layer = 0; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_NEGATIVE_X: layer = 1; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_POSITIVE_Y: layer = 2; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: layer = 3; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_POSITIVE_Z: layer = 4; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: layer = 5; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; default: @@ -4298,36 +4298,36 @@ namespace Vulkan { switch (target) { case GL_TEXTURE_2D: layer = 0; - texture = gl_state.texture_binding_2d[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_2d[gl_rend_state.active_texture_index]; break; case GL_TEXTURE_CUBE_MAP_POSITIVE_X: layer = 0; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_NEGATIVE_X: layer = 1; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_POSITIVE_Y: layer = 2; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: layer = 3; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_POSITIVE_Z: layer = 4; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: layer = 5; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; default: @@ -4356,7 +4356,7 @@ namespace Vulkan { return; } - gl_framebuffer* vk_fbo = gl_framebuffer::get(gl_state.read_framebuffer_binding, false); + gl_framebuffer* vk_fbo = gl_framebuffer::get(gl_rend_state.read_framebuffer_binding, false); VkImage src_image; VkImageLayout src_old_layout; @@ -4439,7 +4439,7 @@ namespace Vulkan { return; } - gl_state.cull_face_mode = mode; + gl_rend_state.cull_face_mode = mode; } static void gl_wrap_manager_delete_buffers(GLsizei n, const GLuint* buffers) { @@ -4522,35 +4522,35 @@ namespace Vulkan { return; } - gl_state.depth_func = func; + gl_rend_state.depth_func = func; } static void gl_wrap_manager_depth_mask(GLboolean flag) { - gl_state.depth_mask = flag ? GL_TRUE : GL_FALSE; + gl_rend_state.depth_mask = flag ? GL_TRUE : GL_FALSE; } static void gl_wrap_manager_disable(GLenum cap) { switch (cap) { case GL_CULL_FACE: - gl_state.cull_face = GL_FALSE; + gl_rend_state.cull_face = GL_FALSE; break; case GL_DEPTH_TEST: - gl_state.depth_test = GL_FALSE; + gl_rend_state.depth_test = GL_FALSE; break; case GL_STENCIL_TEST: - gl_state.stencil_test = GL_FALSE; + gl_rend_state.stencil_test = GL_FALSE; break; case GL_BLEND: - gl_state.blend = GL_FALSE; + gl_rend_state.blend = GL_FALSE; break; case GL_SCISSOR_TEST: - gl_state.scissor_test = GL_FALSE; + gl_rend_state.scissor_test = GL_FALSE; break; case GL_MULTISAMPLE: - gl_state.multisample = GL_FALSE; + gl_rend_state.multisample = GL_FALSE; break; case GL_PRIMITIVE_RESTART: - gl_state.primitive_restart = GL_FALSE; + gl_rend_state.primitive_restart = GL_FALSE; break; default: gl_wrap_manager_ptr->push_error(GL_INVALID_ENUM); @@ -4564,7 +4564,7 @@ namespace Vulkan { return; } - gl_vertex_array* vk_vao = gl_vertex_array::get(gl_state.vertex_array_binding); + gl_vertex_array* vk_vao = gl_vertex_array::get(gl_rend_state.vertex_array_binding); if (!vk_vao) { gl_wrap_manager_ptr->push_error(GL_INVALID_OPERATION); return; @@ -4590,7 +4590,7 @@ namespace Vulkan { return; } - gl_framebuffer* vk_fbo = gl_framebuffer::get(gl_state.draw_framebuffer_binding, false); + gl_framebuffer* vk_fbo = gl_framebuffer::get(gl_rend_state.draw_framebuffer_binding, false); if (!vk_fbo) { gl_wrap_manager_ptr->push_error(GL_INVALID_OPERATION); return; @@ -4633,25 +4633,25 @@ namespace Vulkan { static void gl_wrap_manager_enable(GLenum cap) { switch (cap) { case GL_CULL_FACE: - gl_state.cull_face = GL_TRUE; + gl_rend_state.cull_face = GL_TRUE; break; case GL_DEPTH_TEST: - gl_state.depth_test = GL_TRUE; + gl_rend_state.depth_test = GL_TRUE; break; case GL_STENCIL_TEST: - gl_state.stencil_test = GL_TRUE; + gl_rend_state.stencil_test = GL_TRUE; break; case GL_BLEND: - gl_state.blend = GL_TRUE; + gl_rend_state.blend = GL_TRUE; break; case GL_SCISSOR_TEST: - gl_state.scissor_test = GL_TRUE; + gl_rend_state.scissor_test = GL_TRUE; break; case GL_MULTISAMPLE: - gl_state.multisample = GL_TRUE; + gl_rend_state.multisample = GL_TRUE; break; case GL_PRIMITIVE_RESTART: - gl_state.primitive_restart = GL_TRUE; + gl_rend_state.primitive_restart = GL_TRUE; break; default: gl_wrap_manager_ptr->push_error(GL_INVALID_ENUM); @@ -4665,7 +4665,7 @@ namespace Vulkan { return; } - gl_vertex_array* vk_vao = gl_vertex_array::get(gl_state.vertex_array_binding); + gl_vertex_array* vk_vao = gl_vertex_array::get(gl_rend_state.vertex_array_binding); if (!vk_vao) { gl_wrap_manager_ptr->push_error(GL_INVALID_OPERATION); return; @@ -4680,17 +4680,17 @@ namespace Vulkan { return; } - if (!gl_state.query_samples_passed) { + if (!gl_rend_state.query_samples_passed) { gl_wrap_manager_ptr->push_error(GL_INVALID_OPERATION); return; } - gl_query* vk_que = gl_query::get(gl_state.query_samples_passed); + gl_query* vk_que = gl_query::get(gl_rend_state.query_samples_passed); if (!vk_que) return; vk_que->query.End(Vulkan::current_command_buffer); - gl_state.query_samples_passed = 0; + gl_rend_state.query_samples_passed = 0; } static void gl_wrap_manager_finish() { @@ -4706,7 +4706,7 @@ namespace Vulkan { return; } - gl_framebuffer* vk_fbo = gl_framebuffer::get(gl_state.draw_framebuffer_binding, false); + gl_framebuffer* vk_fbo = gl_framebuffer::get(gl_rend_state.draw_framebuffer_binding, false); if (!vk_fbo) { gl_wrap_manager_ptr->push_error(GL_INVALID_OPERATION); return; @@ -4801,7 +4801,7 @@ namespace Vulkan { switch (target) { case GL_TEXTURE_2D: gl_wrap_manager_generate_texture_mipmap( - gl_state.texture_binding_2d[gl_state.active_texture_index]); + gl_rend_state.texture_binding_2d[gl_rend_state.active_texture_index]); break; default: gl_wrap_manager_ptr->push_error(GL_INVALID_ENUM); @@ -4870,36 +4870,36 @@ namespace Vulkan { switch (target) { case GL_TEXTURE_2D: layer = 0; - texture = gl_state.texture_binding_2d[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_2d[gl_rend_state.active_texture_index]; break; case GL_TEXTURE_CUBE_MAP_POSITIVE_X: layer = 0; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_NEGATIVE_X: layer = 1; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_POSITIVE_Y: layer = 2; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: layer = 3; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_POSITIVE_Z: layer = 4; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: layer = 5; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; default: @@ -4995,34 +4995,34 @@ namespace Vulkan { switch (pname) { case GL_CULL_FACE: - *data = gl_state.cull_face; + *data = gl_rend_state.cull_face; break; case GL_DEPTH_TEST: - *data = gl_state.depth_test; + *data = gl_rend_state.depth_test; break; case GL_DEPTH_WRITEMASK: - *data = gl_state.depth_mask; + *data = gl_rend_state.depth_mask; break; case GL_STENCIL_TEST: - *data = gl_state.stencil_test; + *data = gl_rend_state.stencil_test; break; case GL_BLEND: - *data = gl_state.blend; + *data = gl_rend_state.blend; break; case GL_SCISSOR_TEST: - *data = gl_state.scissor_test; + *data = gl_rend_state.scissor_test; break; case GL_COLOR_WRITEMASK: - data[0] = gl_state.color_mask[0]; - data[1] = gl_state.color_mask[1]; - data[2] = gl_state.color_mask[2]; - data[3] = gl_state.color_mask[3]; + data[0] = gl_rend_state.color_mask[0]; + data[1] = gl_rend_state.color_mask[1]; + data[2] = gl_rend_state.color_mask[2]; + data[3] = gl_rend_state.color_mask[3]; break; case GL_MULTISAMPLE: - *data = gl_state.multisample; + *data = gl_rend_state.multisample; break; case GL_PRIMITIVE_RESTART: - *data = gl_state.primitive_restart; + *data = gl_rend_state.primitive_restart; break; default: gl_wrap_manager_ptr->push_error(GL_INVALID_ENUM); @@ -5036,100 +5036,100 @@ namespace Vulkan { switch (pname) { case GL_CULL_FACE_MODE: - *data = gl_state.cull_face_mode; + *data = gl_rend_state.cull_face_mode; break; case GL_DEPTH_FUNC: - *data = gl_state.depth_func; + *data = gl_rend_state.depth_func; break; case GL_STENCIL_FUNC: - *data = gl_state.stencil_func; + *data = gl_rend_state.stencil_func; break; case GL_STENCIL_VALUE_MASK: - *data = gl_state.stencil_value_mask; + *data = gl_rend_state.stencil_value_mask; break; case GL_STENCIL_FAIL: - *data = gl_state.stencil_fail; + *data = gl_rend_state.stencil_fail; break; case GL_STENCIL_PASS_DEPTH_FAIL: - *data = gl_state.stencil_dpfail; + *data = gl_rend_state.stencil_dpfail; break; case GL_STENCIL_PASS_DEPTH_PASS: - *data = gl_state.stencil_dppass; + *data = gl_rend_state.stencil_dppass; break; case GL_STENCIL_REF: - *data = gl_state.stencil_ref; + *data = gl_rend_state.stencil_ref; break; case GL_STENCIL_WRITEMASK: - *data = gl_state.stencil_mask; + *data = gl_rend_state.stencil_mask; break; case GL_VIEWPORT: - data[0] = gl_state.viewport.x; - data[1] = gl_state.viewport.y; - data[2] = gl_state.viewport.width; - data[3] = gl_state.viewport.height; + data[0] = gl_rend_state.viewport.x; + data[1] = gl_rend_state.viewport.y; + data[2] = gl_rend_state.viewport.width; + data[3] = gl_rend_state.viewport.height; break; case GL_SCISSOR_BOX: - data[0] = gl_state.scissor_box.x; - data[1] = gl_state.scissor_box.y; - data[2] = gl_state.scissor_box.width; - data[3] = gl_state.scissor_box.height; + data[0] = gl_rend_state.scissor_box.x; + data[1] = gl_rend_state.scissor_box.y; + data[2] = gl_rend_state.scissor_box.width; + data[3] = gl_rend_state.scissor_box.height; break; case GL_BLEND_EQUATION_RGB: - *data = gl_state.blend_mode_rgb; + *data = gl_rend_state.blend_mode_rgb; break; case GL_BLEND_DST_RGB: - *data = gl_state.blend_dst_rgb; + *data = gl_rend_state.blend_dst_rgb; break; case GL_BLEND_SRC_RGB: - *data = gl_state.blend_src_rgb; + *data = gl_rend_state.blend_src_rgb; break; case GL_BLEND_DST_ALPHA: - *data = gl_state.blend_dst_alpha; + *data = gl_rend_state.blend_dst_alpha; break; case GL_BLEND_SRC_ALPHA: - *data = gl_state.blend_src_alpha; + *data = gl_rend_state.blend_src_alpha; break; case GL_ACTIVE_TEXTURE: - *data = GL_TEXTURE0 + gl_state.active_texture_index; + *data = GL_TEXTURE0 + gl_rend_state.active_texture_index; break; case GL_TEXTURE_BINDING_2D: - *data = gl_state.texture_binding_2d[gl_state.active_texture_index]; + *data = gl_rend_state.texture_binding_2d[gl_rend_state.active_texture_index]; break; case GL_TEXTURE_BINDING_CUBE_MAP: - *data = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + *data = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; break; case GL_VERTEX_ARRAY_BINDING: - *data = gl_state.vertex_array_binding; + *data = gl_rend_state.vertex_array_binding; break; case GL_BLEND_EQUATION_ALPHA: - *data = gl_state.blend_mode_alpha; + *data = gl_rend_state.blend_mode_alpha; break; case GL_ARRAY_BUFFER_BINDING: - *data = gl_state.array_buffer_binding; + *data = gl_rend_state.array_buffer_binding; break; case GL_ELEMENT_ARRAY_BUFFER_BINDING: - *data = gl_state.element_array_buffer_binding; + *data = gl_rend_state.element_array_buffer_binding; break; case GL_SAMPLER_BINDING: - *data = gl_state.sampler_binding[gl_state.active_texture_index]; + *data = gl_rend_state.sampler_binding[gl_rend_state.active_texture_index]; break; case GL_UNIFORM_BUFFER_BINDING: - *data = gl_state.uniform_buffer_binding; + *data = gl_rend_state.uniform_buffer_binding; break; case GL_CURRENT_PROGRAM: - *data = gl_state.program; + *data = gl_rend_state.program; break; case GL_DRAW_FRAMEBUFFER_BINDING: - *data = gl_state.draw_framebuffer_binding; + *data = gl_rend_state.draw_framebuffer_binding; break; case GL_READ_FRAMEBUFFER_BINDING: - *data = gl_state.read_framebuffer_binding; + *data = gl_rend_state.read_framebuffer_binding; break; case GL_PRIMITIVE_RESTART_INDEX: - *data = gl_state.primitive_restart_index; + *data = gl_rend_state.primitive_restart_index; break; case GL_SHADER_STORAGE_BUFFER_BINDING: - *data = gl_state.shader_storage_buffer_binding; + *data = gl_rend_state.shader_storage_buffer_binding; break; default: gl_wrap_manager_ptr->push_error(GL_INVALID_ENUM); @@ -5147,16 +5147,16 @@ namespace Vulkan { switch (pname) { case GL_LINE_WIDTH: - *data = gl_state.line_width; + *data = gl_rend_state.line_width; break; case GL_COLOR_CLEAR_VALUE: - data[0] = gl_state.clear_color.x; - data[1] = gl_state.clear_color.y; - data[2] = gl_state.clear_color.z; - data[3] = gl_state.clear_color.w; + data[0] = gl_rend_state.clear_color.x; + data[1] = gl_rend_state.clear_color.y; + data[2] = gl_rend_state.clear_color.z; + data[3] = gl_rend_state.clear_color.w; break; case GL_DEPTH_CLEAR_VALUE: - *data = gl_state.clear_depth; + *data = gl_rend_state.clear_depth; break; default: gl_wrap_manager_ptr->push_error(GL_INVALID_ENUM); @@ -5172,7 +5172,7 @@ namespace Vulkan { return; } - *data = gl_state.texture_binding_2d[index]; + *data = gl_rend_state.texture_binding_2d[index]; break; case GL_TEXTURE_BINDING_CUBE_MAP: if (index >= Vulkan::MAX_COMBINED_TEXTURE_IMAGE_UNITS) { @@ -5180,7 +5180,7 @@ namespace Vulkan { return; } - *data = gl_state.texture_binding_cube_map[index]; + *data = gl_rend_state.texture_binding_cube_map[index]; break; case GL_SAMPLER_BINDING: if (index >= Vulkan::MAX_COMBINED_TEXTURE_IMAGE_UNITS) { @@ -5188,7 +5188,7 @@ namespace Vulkan { return; } - *data = gl_state.sampler_binding[index]; + *data = gl_rend_state.sampler_binding[index]; break; case GL_UNIFORM_BUFFER_BINDING: if (index >= Vulkan::MAX_UNIFORM_BUFFER_BINDINGS) { @@ -5196,7 +5196,7 @@ namespace Vulkan { return; } - *data = gl_state.uniform_buffer_bindings[index]; + *data = gl_rend_state.uniform_buffer_bindings[index]; break; case GL_UNIFORM_BUFFER_START: if (index >= Vulkan::MAX_UNIFORM_BUFFER_BINDINGS) { @@ -5204,7 +5204,7 @@ namespace Vulkan { return; } - *data = (GLint)gl_state.uniform_buffer_offsets[index]; + *data = (GLint)gl_rend_state.uniform_buffer_offsets[index]; break; case GL_UNIFORM_BUFFER_SIZE: if (index >= Vulkan::MAX_UNIFORM_BUFFER_BINDINGS) { @@ -5212,7 +5212,7 @@ namespace Vulkan { return; } - *data = (GLint)gl_state.uniform_buffer_sizes[index]; + *data = (GLint)gl_rend_state.uniform_buffer_sizes[index]; break; case GL_SHADER_STORAGE_BUFFER_BINDING: if (index >= Vulkan::MAX_SHADER_STORAGE_BUFFER_BINDINGS) { @@ -5220,7 +5220,7 @@ namespace Vulkan { return; } - *data = gl_state.shader_storage_buffer_bindings[index]; + *data = gl_rend_state.shader_storage_buffer_bindings[index]; break; case GL_SHADER_STORAGE_BUFFER_START: if (index >= Vulkan::MAX_SHADER_STORAGE_BUFFER_BINDINGS) { @@ -5228,7 +5228,7 @@ namespace Vulkan { return; } - *data = (GLint)gl_state.shader_storage_buffer_offsets[index]; + *data = (GLint)gl_rend_state.shader_storage_buffer_offsets[index]; break; case GL_SHADER_STORAGE_BUFFER_SIZE: if (index >= Vulkan::MAX_SHADER_STORAGE_BUFFER_BINDINGS) { @@ -5236,7 +5236,7 @@ namespace Vulkan { return; } - *data = (GLint)gl_state.shader_storage_buffer_sizes[index]; + *data = (GLint)gl_rend_state.shader_storage_buffer_sizes[index]; break; default: gl_wrap_manager_ptr->push_error(GL_INVALID_ENUM); @@ -5252,7 +5252,7 @@ namespace Vulkan { return; } - *data = gl_state.uniform_buffer_offsets[index]; + *data = gl_rend_state.uniform_buffer_offsets[index]; break; case GL_UNIFORM_BUFFER_SIZE: if (index >= Vulkan::MAX_UNIFORM_BUFFER_BINDINGS) { @@ -5260,7 +5260,7 @@ namespace Vulkan { return; } - *data = gl_state.uniform_buffer_sizes[index]; + *data = gl_rend_state.uniform_buffer_sizes[index]; break; case GL_SHADER_STORAGE_BUFFER_START: if (index >= Vulkan::MAX_SHADER_STORAGE_BUFFER_BINDINGS) { @@ -5268,7 +5268,7 @@ namespace Vulkan { return; } - *data = gl_state.shader_storage_buffer_sizes[index]; + *data = gl_rend_state.shader_storage_buffer_sizes[index]; break; } } @@ -5310,36 +5310,36 @@ namespace Vulkan { switch (target) { case GL_TEXTURE_2D: layer = 0; - texture = gl_state.texture_binding_2d[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_2d[gl_rend_state.active_texture_index]; break; case GL_TEXTURE_CUBE_MAP_POSITIVE_X: layer = 0; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_NEGATIVE_X: layer = 1; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_POSITIVE_Y: layer = 2; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: layer = 3; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_POSITIVE_Z: layer = 4; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: layer = 5; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; default: @@ -5478,7 +5478,7 @@ namespace Vulkan { } if (!gl_texture_data::tex_data::convert(internal_format, width, height, format, - _type, type, temp, pixels, gl_state.pack_alignment, false)) { + _type, type, temp, pixels, gl_rend_state.pack_alignment, false)) { free_def(temp); gl_wrap_manager_ptr->push_error(GL_INVALID_OPERATION); return; @@ -5492,19 +5492,19 @@ namespace Vulkan { return; } - gl_state.line_width = width; + gl_rend_state.line_width = width; } static void* gl_wrap_manager_map_buffer(GLenum target, GLenum access) { switch (target) { case GL_ARRAY_BUFFER: - return gl_wrap_manager_map_named_buffer(gl_state.array_buffer_binding, access); + return gl_wrap_manager_map_named_buffer(gl_rend_state.array_buffer_binding, access); case GL_ELEMENT_ARRAY_BUFFER: - return gl_wrap_manager_map_named_buffer(gl_state.element_array_buffer_binding, access); + return gl_wrap_manager_map_named_buffer(gl_rend_state.element_array_buffer_binding, access); case GL_UNIFORM_BUFFER: - return gl_wrap_manager_map_named_buffer(gl_state.uniform_buffer_binding, access); + return gl_wrap_manager_map_named_buffer(gl_rend_state.uniform_buffer_binding, access); case GL_SHADER_STORAGE_BUFFER: - return gl_wrap_manager_map_named_buffer(gl_state.shader_storage_buffer_binding, access); + return gl_wrap_manager_map_named_buffer(gl_rend_state.shader_storage_buffer_binding, access); default: gl_wrap_manager_ptr->push_error(GL_INVALID_ENUM); return 0; @@ -5638,7 +5638,7 @@ namespace Vulkan { return; } - gl_state.pack_alignment = param; + gl_rend_state.pack_alignment = param; break; case GL_UNPACK_ALIGNMENT: if (param != 1 && param != 2 && param != 4 && param != 8) { @@ -5646,7 +5646,7 @@ namespace Vulkan { return; } - gl_state.unpack_alignment = param; + gl_rend_state.unpack_alignment = param; break; default: gl_wrap_manager_ptr->push_error(GL_INVALID_VALUE); @@ -5673,7 +5673,7 @@ namespace Vulkan { return; } - gl_state.polygon_mode = mode; + gl_rend_state.polygon_mode = mode; } static void gl_wrap_manager_pop_debug_group() { @@ -5682,7 +5682,7 @@ namespace Vulkan { } static void gl_wrap_manager_primitive_restart_index(GLuint index) { - gl_state.primitive_restart_index = index; + gl_rend_state.primitive_restart_index = index; } static void gl_wrap_manager_push_debug_group(GLenum source, GLuint id, GLsizei length, const GLchar* message) { @@ -5706,7 +5706,7 @@ namespace Vulkan { return; } - gl_framebuffer* vk_fbo = gl_framebuffer::get(gl_state.read_framebuffer_binding, false); + gl_framebuffer* vk_fbo = gl_framebuffer::get(gl_rend_state.read_framebuffer_binding, false); if (!vk_fbo) { gl_wrap_manager_ptr->push_error(GL_INVALID_OPERATION); return; @@ -5787,10 +5787,10 @@ namespace Vulkan { return; } - gl_state.scissor_box.x = x; - gl_state.scissor_box.y = y; - gl_state.scissor_box.width = width; - gl_state.scissor_box.height = height; + gl_rend_state.scissor_box.x = x; + gl_rend_state.scissor_box.y = y; + gl_rend_state.scissor_box.width = width; + gl_rend_state.scissor_box.height = height; } static void gl_wrap_manager_stencil_func(GLenum func, GLint ref, GLuint mask) { @@ -5809,11 +5809,11 @@ namespace Vulkan { return; } - gl_state.stencil_func = func; + gl_rend_state.stencil_func = func; } static void gl_wrap_manager_stencil_mask(GLuint mask) { - gl_state.stencil_mask = mask; + gl_rend_state.stencil_mask = mask; } static void gl_wrap_manager_stencil_op(GLenum fail, GLenum zfail, GLenum zpass) { @@ -5838,9 +5838,9 @@ namespace Vulkan { return; } - gl_state.stencil_fail = fail; - gl_state.stencil_dpfail = zfail; - gl_state.stencil_dppass = zpass; + gl_rend_state.stencil_fail = fail; + gl_rend_state.stencil_dpfail = zfail; + gl_rend_state.stencil_dppass = zpass; } static void gl_wrap_manager_tex_image_2d(GLenum target, GLint level, GLint internal_format, @@ -5850,36 +5850,36 @@ namespace Vulkan { switch (target) { case GL_TEXTURE_2D: layer = 0; - texture = gl_state.texture_binding_2d[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_2d[gl_rend_state.active_texture_index]; break; case GL_TEXTURE_CUBE_MAP_POSITIVE_X: layer = 0; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_NEGATIVE_X: layer = 1; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_POSITIVE_Y: layer = 2; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: layer = 3; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_POSITIVE_Z: layer = 4; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: layer = 5; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; default: @@ -6011,11 +6011,11 @@ namespace Vulkan { switch (target) { case GL_TEXTURE_2D: gl_wrap_manager_texture_parameter_float( - gl_state.texture_binding_2d[gl_state.active_texture_index], pname, param); + gl_rend_state.texture_binding_2d[gl_rend_state.active_texture_index], pname, param); break; case GL_TEXTURE_CUBE_MAP: gl_wrap_manager_texture_parameter_float( - gl_state.texture_binding_cube_map[gl_state.active_texture_index], pname, param); + gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index], pname, param); break; default: gl_wrap_manager_ptr->push_error(GL_INVALID_ENUM); @@ -6027,11 +6027,11 @@ namespace Vulkan { switch (target) { case GL_TEXTURE_2D: gl_wrap_manager_texture_parameter_float_ptr( - gl_state.texture_binding_2d[gl_state.active_texture_index], pname, params); + gl_rend_state.texture_binding_2d[gl_rend_state.active_texture_index], pname, params); break; case GL_TEXTURE_CUBE_MAP: gl_wrap_manager_texture_parameter_float_ptr( - gl_state.texture_binding_cube_map[gl_state.active_texture_index], pname, params); + gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index], pname, params); break; default: gl_wrap_manager_ptr->push_error(GL_INVALID_ENUM); @@ -6043,11 +6043,11 @@ namespace Vulkan { switch (target) { case GL_TEXTURE_2D: gl_wrap_manager_texture_parameter_int( - gl_state.texture_binding_2d[gl_state.active_texture_index], pname, param); + gl_rend_state.texture_binding_2d[gl_rend_state.active_texture_index], pname, param); break; case GL_TEXTURE_CUBE_MAP: gl_wrap_manager_texture_parameter_int( - gl_state.texture_binding_cube_map[gl_state.active_texture_index], pname, param); + gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index], pname, param); break; default: gl_wrap_manager_ptr->push_error(GL_INVALID_ENUM); @@ -6059,11 +6059,11 @@ namespace Vulkan { switch (target) { case GL_TEXTURE_2D: gl_wrap_manager_texture_parameter_int_ptr( - gl_state.texture_binding_2d[gl_state.active_texture_index], pname, params); + gl_rend_state.texture_binding_2d[gl_rend_state.active_texture_index], pname, params); break; case GL_TEXTURE_CUBE_MAP: gl_wrap_manager_texture_parameter_int_ptr( - gl_state.texture_binding_cube_map[gl_state.active_texture_index], pname, params); + gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index], pname, params); break; default: gl_wrap_manager_ptr->push_error(GL_INVALID_ENUM); @@ -6079,36 +6079,36 @@ namespace Vulkan { switch (target) { case GL_TEXTURE_2D: layer = 0; - texture = gl_state.texture_binding_2d[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_2d[gl_rend_state.active_texture_index]; break; case GL_TEXTURE_CUBE_MAP_POSITIVE_X: layer = 0; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_NEGATIVE_X: layer = 1; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_POSITIVE_Y: layer = 2; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: layer = 3; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_POSITIVE_Z: layer = 4; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: layer = 5; - texture = gl_state.texture_binding_cube_map[gl_state.active_texture_index]; + texture = gl_rend_state.texture_binding_cube_map[gl_rend_state.active_texture_index]; target = GL_TEXTURE_CUBE_MAP; break; default: @@ -6467,13 +6467,13 @@ namespace Vulkan { static GLboolean gl_wrap_manager_unmap_buffer(GLenum target) { switch (target) { case GL_ARRAY_BUFFER: - return gl_wrap_manager_unmap_named_buffer(gl_state.array_buffer_binding); + return gl_wrap_manager_unmap_named_buffer(gl_rend_state.array_buffer_binding); case GL_ELEMENT_ARRAY_BUFFER: - return gl_wrap_manager_unmap_named_buffer(gl_state.element_array_buffer_binding); + return gl_wrap_manager_unmap_named_buffer(gl_rend_state.element_array_buffer_binding); case GL_UNIFORM_BUFFER: - return gl_wrap_manager_unmap_named_buffer(gl_state.uniform_buffer_binding); + return gl_wrap_manager_unmap_named_buffer(gl_rend_state.uniform_buffer_binding); case GL_SHADER_STORAGE_BUFFER: - return gl_wrap_manager_unmap_named_buffer(gl_state.shader_storage_buffer_binding); + return gl_wrap_manager_unmap_named_buffer(gl_rend_state.shader_storage_buffer_binding); default: gl_wrap_manager_ptr->push_error(GL_INVALID_ENUM); return GL_FALSE; @@ -6501,14 +6501,14 @@ namespace Vulkan { } } - gl_state.program = program; + gl_rend_state.program = program; } static void gl_wrap_manager_vertex_attrib(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) { if (index >= Vulkan::MAX_VERTEX_ATTRIB_COUNT) return; - gl_vertex_array* vk_vao = gl_vertex_array::get(gl_state.vertex_array_binding); + gl_vertex_array* vk_vao = gl_vertex_array::get(gl_rend_state.vertex_array_binding); if (!vk_vao) return; @@ -6600,8 +6600,8 @@ namespace Vulkan { return; } - gl_vertex_array* vk_vao = gl_vertex_array::get(gl_state.vertex_array_binding); - if (!vk_vao || !gl_state.array_buffer_binding) { + gl_vertex_array* vk_vao = gl_vertex_array::get(gl_rend_state.vertex_array_binding); + if (!vk_vao || !gl_rend_state.array_buffer_binding) { gl_wrap_manager_ptr->push_error(GL_INVALID_OPERATION); return; } @@ -6794,8 +6794,8 @@ namespace Vulkan { return; } - gl_vertex_array* vk_vao = gl_vertex_array::get(gl_state.vertex_array_binding); - if (!vk_vao || !gl_state.array_buffer_binding) { + gl_vertex_array* vk_vao = gl_vertex_array::get(gl_rend_state.vertex_array_binding); + if (!vk_vao || !gl_rend_state.array_buffer_binding) { gl_wrap_manager_ptr->push_error(GL_INVALID_OPERATION); return; } @@ -6809,9 +6809,9 @@ namespace Vulkan { return; } - gl_state.viewport.x = x; - gl_state.viewport.y = y; - gl_state.viewport.width = width; - gl_state.viewport.height = height; + gl_rend_state.viewport.x = x; + gl_rend_state.viewport.y = y; + gl_rend_state.viewport.width = width; + gl_rend_state.viewport.height = height; } }; diff --git a/src/CRE/Vulkan/gl_wrap.hpp b/src/CRE/Vulkan/gl_wrap.hpp index b756d900..128e9e18 100644 --- a/src/CRE/Vulkan/gl_wrap.hpp +++ b/src/CRE/Vulkan/gl_wrap.hpp @@ -129,14 +129,14 @@ namespace Vulkan { static gl_sampler* get(GLuint program); }; - struct gl_state_rect { + struct gl_rend_state_rect { GLint x; GLint y; GLsizei width; GLsizei height; }; - struct gl_state_struct { + struct gl_rend_state_struct { vec4 clear_color; float_t clear_depth; int32_t clear_stencil; @@ -180,7 +180,7 @@ namespace Vulkan { GLboolean multisample; GLboolean primitive_restart; GLuint primitive_restart_index; - gl_state_rect scissor_box; + gl_rend_state_rect scissor_box; GLboolean scissor_test; GLboolean stencil_test; GLenum stencil_func; @@ -190,9 +190,9 @@ namespace Vulkan { GLuint stencil_mask; GLint stencil_ref; GLuint stencil_value_mask; - gl_state_rect viewport; + gl_rend_state_rect viewport; - gl_state_struct(); + gl_rend_state_struct(); }; struct gl_storage_buffer { diff --git a/src/CRE/clear_color.cpp b/src/CRE/clear_color.cpp index d00b2052..a4c21b8a 100644 --- a/src/CRE/clear_color.cpp +++ b/src/CRE/clear_color.cpp @@ -4,7 +4,7 @@ */ #include "clear_color.hpp" -#include "gl_state.hpp" +#include "gl_rend_state.hpp" color4u8 clear_color; bool set_clear_color; diff --git a/src/CRE/effect.cpp b/src/CRE/effect.cpp index 8ed6dad1..9a5567b4 100644 --- a/src/CRE/effect.cpp +++ b/src/CRE/effect.cpp @@ -15,7 +15,7 @@ #include "app_system_detail.hpp" #include "auth_3d.hpp" #include "data.hpp" -#include "gl_state.hpp" +#include "gl_rend_state.hpp" #include "random.hpp" #include "render_texture.hpp" #include "render_context.hpp" @@ -1284,12 +1284,12 @@ void leaf_particle_draw() { &shader_data.g_lit_dir, &shader_data.g_lit_luce, 0, 0); leaf_particle_scene_ubo.WriteMemory(shader_data); - gl_state_active_bind_texture_2d(0, tex->glid); + gl_rend_state.active_bind_texture_2d(0, tex->glid); shaders_ft.set(SHADER_FT_LEAF_PT); leaf_particle_scene_ubo.Bind(0); - gl_state_bind_vertex_array(leaf_ptcl_vao); + gl_rend_state.bind_vertex_array(leaf_ptcl_vao); shaders_ft.draw_elements(GL_TRIANGLES, count / 4 * 6, GL_UNSIGNED_INT, 0); - gl_state_bind_vertex_array(0); + gl_rend_state.bind_vertex_array(0); } void rain_particle_draw() { @@ -1323,11 +1323,11 @@ void rain_particle_draw() { scene_shader_data.g_range_offset = { range_offset.x, range_offset.y, range_offset.z, 0.0f }; rain_particle_scene_ubo.WriteMemory(scene_shader_data); - gl_state_enable_blend(); - gl_state_set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl_state_enable_depth_test(); - gl_state_set_depth_mask(GL_FALSE); - gl_state_active_bind_texture_2d(0, tex->glid); + gl_rend_state.enable_blend(); + gl_rend_state.set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gl_rend_state.enable_depth_test(); + gl_rend_state.set_depth_mask(GL_FALSE); + gl_rend_state.active_bind_texture_2d(0, tex->glid); shaders_ft.set(SHADER_FT_RAIN); float_t tangent_sign = -rain->psize.x; @@ -1341,7 +1341,7 @@ void rain_particle_draw() { rain_particle_scene_ubo.Bind(0); rain_particle_batch_ubo.Bind(1); rain_ssbo.Bind(0); - gl_state_bind_vertex_array(rctx_ptr->common_vao); + gl_rend_state.bind_vertex_array(rctx_ptr->common_vao); for (int32_t i = 0; i < 8; i++, first += count) { particle_data& data = rain_ptcl_data[i]; vec3 pos_offset = data.position / range; @@ -1355,10 +1355,10 @@ void rain_particle_draw() { rain_particle_batch_ubo.WriteMemory(batch_shader_data); shaders_ft.draw_arrays(GL_TRIANGLES, first, count); } - gl_state_bind_vertex_array(0); - gl_state_active_bind_texture_2d(0, 0); - gl_state_set_depth_mask(GL_TRUE); - gl_state_disable_blend(); + gl_rend_state.bind_vertex_array(0); + gl_rend_state.active_bind_texture_2d(0, 0); + gl_rend_state.set_depth_mask(GL_TRUE); + gl_rend_state.disable_blend(); } void particle_draw() { @@ -1392,9 +1392,9 @@ void particle_draw() { shaders_ft.set(SHADER_FT_PARTICL); particle_scene_ubo.Bind(0); - gl_state_bind_vertex_array(ptcl_vao); + gl_rend_state.bind_vertex_array(ptcl_vao); shaders_ft.draw_arrays(GL_TRIANGLES, 0, count); - gl_state_bind_vertex_array(0); + gl_rend_state.bind_vertex_array(0); } void snow_particle_draw() { @@ -1408,10 +1408,10 @@ void snow_particle_draw() { stage_param_snow* snow = stage_param_data_snow_current; draw_pass_set_camera(); - gl_state_enable_blend(); - gl_state_set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl_state_enable_depth_test(); - gl_state_set_depth_mask(GL_FALSE); + gl_rend_state.enable_blend(); + gl_rend_state.set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gl_rend_state.enable_depth_test(); + gl_rend_state.set_depth_mask(GL_FALSE); float_t point_attenuation = powf(tanf((float_t)rctx_ptr->camera->get_fov() * 0.5f * DEG_TO_RAD_FLOAT) * 3.4f, 2.0f) * 0.1f; @@ -1444,9 +1444,9 @@ void snow_particle_draw() { snow_batch.start_vertex_location.x = 0; snow_particle_batch_ubo.WriteMemory(snow_batch); - gl_state_active_bind_texture_2d(0, tex->glid); - gl_state_active_bind_texture_2d(1, rctx_ptr->render.rend_texture[0].GetDepthTex()); - gl_state_bind_vertex_array(rctx_ptr->common_vao); + gl_rend_state.active_bind_texture_2d(0, tex->glid); + gl_rend_state.active_bind_texture_2d(1, rctx_ptr->render.rend_texture[0].GetDepthTex()); + gl_rend_state.bind_vertex_array(rctx_ptr->common_vao); uniform_value[U_SNOW_PARTICLE] = 0; shaders_ft.set(SHADER_FT_SNOW_PT); @@ -1491,13 +1491,13 @@ void snow_particle_draw() { first += count; } - gl_state_bind_vertex_array(0); - gl_state_active_bind_texture_2d(1, 0); - gl_state_active_bind_texture_2d(0, 0); + gl_rend_state.bind_vertex_array(0); + gl_rend_state.active_bind_texture_2d(1, 0); + gl_rend_state.active_bind_texture_2d(0, 0); - gl_state_disable_depth_test(); - gl_state_set_depth_mask(GL_TRUE); - gl_state_disable_blend(); + gl_rend_state.disable_depth_test(); + gl_rend_state.set_depth_mask(GL_TRUE); + gl_rend_state.disable_blend(); } void star_catalog_draw() { @@ -2287,16 +2287,16 @@ void EffectFogRing::draw() { rctx->draw_state->set_fog_height(true); RenderTexture& rt = rctx->render_manager->get_render_texture(8); rt.Bind(); - gl_state_set_viewport(0, 0, + gl_rend_state.set_viewport(0, 0, rt.color_texture->get_width_align_mip_level(), rt.color_texture->get_height_align_mip_level()); glClearColor(density_offset, density_offset, density_offset, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (rctx->disp_manager->get_obj_count(mdl::OBJ_TYPE_USER)) rctx->disp_manager->draw(mdl::OBJ_TYPE_USER); - gl_state_bind_framebuffer(0); + gl_rend_state.bind_framebuffer(0); rctx->render_manager->set_effect_texture(rt.color_texture); - gl_state_get_error(); + gl_get_error_print(); } void EffectFogRing::init_particle_data() { @@ -3076,7 +3076,7 @@ void EffectRipple::clear_tex() { glClearColor(0.0f, 0.0f, 0.0f, v5); rt->Bind(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - gl_state_bind_framebuffer(0); + gl_rend_state.bind_framebuffer(0); } glClearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); @@ -3122,7 +3122,7 @@ void EffectRipple::draw() { if (!stage_set) return; - gl_state_disable_cull_face(); + gl_rend_state.disable_cull_face(); render_context* rctx = rctx_ptr; @@ -3138,22 +3138,22 @@ void EffectRipple::draw() { rt[(counter + 1) % 3]->Bind(); - gl_state_rect viewport_rect = gl_state_get_viewport(); + gl_rend_state_rect viewport_rect = gl_rend_state.get_viewport(); int32_t width = rt[0]->GetWidth(); int32_t height = rt[0]->GetHeight(); - gl_state_set_viewport(1, 1, width - 2, height - 2); + gl_rend_state.set_viewport(1, 1, width - 2, height - 2); draw_pass_set_camera(); glClear(GL_DEPTH_BUFFER_BIT); if (rctx->disp_manager->get_obj_count(mdl::OBJ_TYPE_USER)) { - gl_state_active_bind_texture_2d(7, rt[counter % 3]->GetColorTex()); + gl_rend_state.active_bind_texture_2d(7, rt[counter % 3]->GetColorTex()); rctx->disp_manager->draw(mdl::OBJ_TYPE_USER); - gl_state_active_bind_texture_2d(7, 0); + gl_rend_state.active_bind_texture_2d(7, 0); } - gl_state_bind_framebuffer(0); + gl_rend_state.bind_framebuffer(0); params.field_8 = 0.0005f; params.field_C = 0.97f; @@ -3164,7 +3164,7 @@ void EffectRipple::draw() { sub_1403B6ED0(rt[(counter + 2) % 3], rt[(counter + 1) % 3], rt[counter % 3], params); - gl_state_set_viewport(viewport_rect); + gl_rend_state.set_viewport(viewport_rect); sub_1403584A0(rt[(counter + 2) % 3]); @@ -3180,7 +3180,7 @@ void EffectRipple::draw() { update = false; - gl_state_enable_cull_face(); + gl_rend_state.enable_cull_face(); } void EffectRipple::reset() { @@ -3301,7 +3301,7 @@ void EffectRipple::sub_1403584A0(RenderTexture* rt) { field_BB8.Bind(); image_filter_scale(&field_BB8, rt->color_texture); - gl_state_bind_framebuffer(0); + gl_rend_state.bind_framebuffer(0); } void EffectRipple::sub_140358690() { @@ -4081,20 +4081,20 @@ void water_particle::draw(mat4* mat) { scene_shader_data.g_size_in_projection.w = 60.0; water_particle_scene_ubo.WriteMemory(scene_shader_data); - gl_state_disable_cull_face(); + gl_rend_state.disable_cull_face(); shaders_ft.set(SHADER_FT_W_PTCL); - gl_state_bind_vertex_array(rctx_ptr->common_vao); + gl_rend_state.bind_vertex_array(rctx_ptr->common_vao); water_particle_scene_ubo.Bind(0); ssbo.Bind(0); texture* tex = texture_manager_get_texture(splash_tex_id); if (tex) - gl_state_active_bind_texture_2d(0, tex->glid); + gl_rend_state.active_bind_texture_2d(0, tex->glid); shaders_ft.draw_arrays(GL_TRIANGLES, 0, count * 6); - gl_state_bind_vertex_array(0); + gl_rend_state.bind_vertex_array(0); shader::unbind(); - gl_state_enable_cull_face(); + gl_rend_state.enable_cull_face(); } void water_particle::free() { @@ -5034,27 +5034,27 @@ void star_catalog_milky_way::draw(const mat4& vp, const mat4& mat, texture* tex, scene_shader_data.g_transform[3] = temp.row3; scene_ubo.WriteMemory(scene_shader_data); - gl_state_enable_cull_face(); - gl_state_disable_blend(); - gl_state_set_depth_mask(GL_FALSE); - gl_state_active_bind_texture_2d(0, tex->glid); - gl_state_bind_sampler(0, sampler); - gl_state_enable_primitive_restart(); - gl_state_set_primitive_restart_index(restart_index); + gl_rend_state.enable_cull_face(); + gl_rend_state.disable_blend(); + gl_rend_state.set_depth_mask(GL_FALSE); + gl_rend_state.active_bind_texture_2d(0, tex->glid); + gl_rend_state.bind_sampler(0, sampler); + gl_rend_state.enable_primitive_restart(); + gl_rend_state.set_primitive_restart_index(restart_index); uniform_value[U_STAR] = 1; shaders_ft.set(SHADER_FT_STAR); - gl_state_bind_vertex_array(vao); + gl_rend_state.bind_vertex_array(vao); scene_ubo.Bind(0); shaders_ft.draw_elements(GL_TRIANGLE_STRIP, idx_count, GL_UNSIGNED_SHORT, 0); - gl_state_bind_vertex_array(0); + gl_rend_state.bind_vertex_array(0); - gl_state_bind_sampler(0, 0); - gl_state_active_bind_texture_2d(0, 0); - gl_state_disable_primitive_restart(); - gl_state_set_depth_mask(GL_TRUE); - gl_state_enable_blend(); - gl_state_disable_cull_face(); + gl_rend_state.bind_sampler(0, 0); + gl_rend_state.active_bind_texture_2d(0, 0); + gl_rend_state.disable_primitive_restart(); + gl_rend_state.set_depth_mask(GL_TRUE); + gl_rend_state.enable_blend(); + gl_rend_state.disable_cull_face(); } void star_catalog_milky_way::reset() { @@ -5130,11 +5130,11 @@ void star_catalog::draw() { uniform_value[U_STAR] = 0; shaders_ft.set(SHADER_FT_STAR); - gl_state_enable_blend(); - gl_state_set_blend_func(GL_ONE, GL_ONE); - gl_state_enable_depth_test(); - gl_state_set_depth_mask(false); - gl_state_bind_vertex_array(rctx_ptr->common_vao); + gl_rend_state.enable_blend(); + gl_rend_state.set_blend_func(GL_ONE, GL_ONE); + gl_rend_state.enable_depth_test(); + gl_rend_state.set_depth_mask(false); + gl_rend_state.bind_vertex_array(rctx_ptr->common_vao); for (int32_t i = 0; i < 2; i++) { stage_param_star_modifiers& modifiers = stage_param_data.modifiers[i]; @@ -5153,16 +5153,16 @@ void star_catalog::draw() { batch_ubo.Bind(1); stars_ssbo.Bind(0); if (i) { - gl_state_active_bind_texture_2d(0, star_b_tex->glid); + gl_rend_state.active_bind_texture_2d(0, star_b_tex->glid); shaders_ft.draw_arrays(GL_TRIANGLES, 0, star_b_count * 6); } else { - gl_state_active_bind_texture_2d(0, star_tex->glid); + gl_rend_state.active_bind_texture_2d(0, star_tex->glid); shaders_ft.draw_arrays(GL_TRIANGLES, 0, star_count * 6); } } - gl_state_active_bind_texture_2d(0, 0); - gl_state_bind_vertex_array(0); + gl_rend_state.active_bind_texture_2d(0, 0); + gl_rend_state.bind_vertex_array(0); } @@ -5579,15 +5579,15 @@ static void draw_fog_particle(EffectFogRing* data, mat4* mat) { return; shaders_ft.set(SHADER_FT_FOGPTCL); - gl_state_enable_blend(); + gl_rend_state.enable_blend(); texture* tex = texture_manager_get_texture(data->tex_id); if (tex) - gl_state_active_bind_texture_2d(0, tex->glid); - gl_state_bind_vertex_array(rctx_ptr->common_vao); + gl_rend_state.active_bind_texture_2d(0, tex->glid); + gl_rend_state.bind_vertex_array(rctx_ptr->common_vao); data->ssbo.Bind(0); shaders_ft.draw_arrays(GL_TRIANGLES, 0, data->num_vtx); - gl_state_bind_vertex_array(0); - gl_state_disable_blend(); + gl_rend_state.bind_vertex_array(0); + gl_rend_state.disable_blend(); shader::unbind(); } @@ -5633,9 +5633,9 @@ static void draw_ripple_particles(ripple_struct* data, mat4* mat) { uniform_value[U_RIPPLE] = data->ripple_uniform; uniform_value[U_RIPPLE_EMIT] = data->ripple_emit_uniform; - gl_state_begin_event("EffectRipple::Impl::draw_ripple_particles"); - gl_state_set_color_mask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE); - gl_state_bind_vertex_array(rctx_ptr->common_vao); + gl_rend_state.begin_event("EffectRipple::Impl::draw_ripple_particles"); + gl_rend_state.set_color_mask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE); + gl_rend_state.bind_vertex_array(rctx_ptr->common_vao); shaders_ft.set(SHADER_FT_RIPEMIT); ripple_emit_scene_ubo.Bind(0); @@ -5644,9 +5644,9 @@ static void draw_ripple_particles(ripple_struct* data, mat4* mat) { shader::unbind(); - gl_state_bind_vertex_array(0); - gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - gl_state_end_event(); + gl_rend_state.bind_vertex_array(0); + gl_rend_state.set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + gl_rend_state.end_event(); } static void draw_water_particle(water_particle* data, mat4* mat) { @@ -6561,7 +6561,7 @@ static void sub_1403B6ED0(RenderTexture* a1, RenderTexture* a2, RenderTexture* a else uniform_value[U_RIPPLE] = 0; sub_1403B6F60(a1->color_texture, a2->color_texture, a3->color_texture, params); - gl_state_bind_framebuffer(0); + gl_rend_state.bind_framebuffer(0); } static void sub_1403B6F60(texture* a1, texture* a2, texture* a3, ripple_emit_params& params) { @@ -6571,8 +6571,8 @@ static void sub_1403B6F60(texture* a1, texture* a2, texture* a3, ripple_emit_par int32_t width = a2->width; int32_t height = a2->height; - gl_state_rect viewport_rect = gl_state_get_viewport(); - gl_state_set_viewport(1, 1, width - 2, height - 2); + gl_rend_state_rect viewport_rect = gl_rend_state.get_viewport(); + gl_rend_state.set_viewport(1, 1, width - 2, height - 2); ripple_scene_shader_data ripple_scene = {}; ripple_scene.g_transform = { @@ -6586,16 +6586,16 @@ static void sub_1403B6F60(texture* a1, texture* a2, texture* a3, ripple_emit_par ripple_batch.g_params = { params.wake_attn, 0.0f, 0.0f, 0.0f }; ripple_batch_ubo.WriteMemory(ripple_batch); - gl_state_bind_vertex_array(rctx_ptr->common_vao); + gl_rend_state.bind_vertex_array(rctx_ptr->common_vao); shaders_ft.set(SHADER_FT_RIPPLE); ripple_scene_ubo.Bind(0); ripple_batch_ubo.Bind(1); - gl_state_active_bind_texture_2d(0, a2->glid); - gl_state_active_bind_texture_2d(1, a3->glid); + gl_rend_state.active_bind_texture_2d(0, a2->glid); + gl_rend_state.active_bind_texture_2d(1, a3->glid); shaders_ft.draw_arrays(GL_TRIANGLE_STRIP, 0, 4); - gl_state_active_bind_texture_2d(1, 0); - gl_state_active_bind_texture_2d(0, 0); - gl_state_bind_vertex_array(0); + gl_rend_state.active_bind_texture_2d(1, 0); + gl_rend_state.active_bind_texture_2d(0, 0); + gl_rend_state.bind_vertex_array(0); - gl_state_set_viewport(viewport_rect); + gl_rend_state.set_viewport(viewport_rect); } diff --git a/src/CRE/gl_rend_state.cpp b/src/CRE/gl_rend_state.cpp new file mode 100644 index 00000000..e3621f08 --- /dev/null +++ b/src/CRE/gl_rend_state.cpp @@ -0,0 +1,570 @@ +/* + by korenkonder + GitHub/GitLab: korenkonder +*/ + +#include "gl_rend_state.hpp" + +gl_rend_state_struct gl_rend_state; + +void gl_rend_state_struct::active_bind_texture_2d(int32_t index, GLuint texture, bool force) { + if (force || texture_binding_2d[index] != texture) { + if (force || active_texture_index != index) { + glActiveTexture((GLenum)(GL_TEXTURE0 + index)); + active_texture_index = (GLuint)index; + } + glBindTexture(GL_TEXTURE_2D, texture); + texture_binding_2d[index] = texture; + } +} + +void gl_rend_state_struct::active_bind_texture_cube_map(int32_t index, GLuint texture, bool force) { + if (force || texture_binding_cube_map[index] != texture) { + if (force || active_texture_index != index) { + glActiveTexture((GLenum)(GL_TEXTURE0 + index)); + active_texture_index = (GLuint)index; + } + glBindTexture(GL_TEXTURE_CUBE_MAP, texture); + texture_binding_cube_map[index] = texture; + } +} + +void gl_rend_state_struct::active_texture(size_t index, bool force) { + if (force || active_texture_index != index) { + glActiveTexture((GLenum)(GL_TEXTURE0 + index)); + active_texture_index = (GLuint)index; + } +} + +void gl_rend_state_struct::bind_framebuffer(GLuint framebuffer, bool force) { + if (force || read_framebuffer_binding != framebuffer + || draw_framebuffer_binding != framebuffer) { + glBindFramebuffer(GL_FRAMEBUFFER, framebuffer); + read_framebuffer_binding = framebuffer; + draw_framebuffer_binding = framebuffer; + } +} + +void gl_rend_state_struct::bind_read_framebuffer(GLuint framebuffer, bool force) { + if (force || read_framebuffer_binding != framebuffer) { + glBindFramebuffer(GL_READ_FRAMEBUFFER, framebuffer); + read_framebuffer_binding = framebuffer; + } +} + +void gl_rend_state_struct::bind_draw_framebuffer(GLuint framebuffer, bool force) { + if (force || draw_framebuffer_binding != framebuffer) { + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer); + draw_framebuffer_binding = framebuffer; + } +} + +void gl_rend_state_struct::bind_vertex_array(GLuint array, bool force) { + if (force || vertex_array_binding != array) { + glBindVertexArray(array); + vertex_array_binding = array; + } +} + +void gl_rend_state_struct::bind_array_buffer(GLuint buffer, bool force) { + if (force || array_buffer_binding != buffer) { + glBindBuffer(GL_ARRAY_BUFFER, buffer); + array_buffer_binding = buffer; + } +} + +void gl_rend_state_struct::bind_element_array_buffer(GLuint buffer, bool force) { + if (force || element_array_buffer_binding != buffer) { + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffer); + element_array_buffer_binding = buffer; + } +} + +void gl_rend_state_struct::bind_uniform_buffer(GLuint buffer, bool force) { + if (force || uniform_buffer_binding != buffer) { + glBindBuffer(GL_UNIFORM_BUFFER, buffer); + uniform_buffer_binding = buffer; + } +} + +void gl_rend_state_struct::bind_uniform_buffer_base(GLuint index, GLuint buffer, bool force) { + if (force || uniform_buffer_bindings[index] != buffer) { + glBindBufferBase(GL_UNIFORM_BUFFER, index, buffer); + uniform_buffer_binding = buffer; + uniform_buffer_bindings[index] = buffer; + uniform_buffer_offsets[index] = 0; + uniform_buffer_sizes[index] = -1; + } +} + +void gl_rend_state_struct::bind_uniform_buffer_range(GLuint index, + GLuint buffer, GLintptr offset, GLsizeiptr size, bool force) { + if (force || uniform_buffer_bindings[index] != buffer + || uniform_buffer_offsets[index] != offset + || uniform_buffer_sizes[index] != size) { + glBindBufferRange(GL_UNIFORM_BUFFER, index, buffer, offset, size); + uniform_buffer_binding = buffer; + uniform_buffer_bindings[index] = buffer; + uniform_buffer_offsets[index] = offset; + uniform_buffer_sizes[index] = size; + } +} + +void gl_rend_state_struct::bind_shader_storage_buffer(GLuint buffer, bool force) { + if (force || shader_storage_buffer_binding != buffer) { + glBindBuffer(GL_SHADER_STORAGE_BUFFER, buffer); + shader_storage_buffer_binding = buffer; + } +} + +void gl_rend_state_struct::bind_shader_storage_buffer_base(GLuint index, GLuint buffer, bool force) { + if (force || shader_storage_buffer_bindings[index] != buffer) { + glBindBufferBase(GL_SHADER_STORAGE_BUFFER, index, buffer); + shader_storage_buffer_binding = buffer; + shader_storage_buffer_bindings[index] = buffer; + shader_storage_buffer_offsets[index] = 0; + shader_storage_buffer_sizes[index] = -1; + } +} + +void gl_rend_state_struct::bind_shader_storage_buffer_range(GLuint index, + GLuint buffer, GLintptr offset, GLsizeiptr size, bool force) { + if (force || shader_storage_buffer_bindings[index] != buffer + || shader_storage_buffer_offsets[index] != offset + || shader_storage_buffer_sizes[index] != size) { + glBindBufferRange(GL_SHADER_STORAGE_BUFFER, index, buffer, offset, size); + shader_storage_buffer_binding = buffer; + shader_storage_buffer_bindings[index] = buffer; + shader_storage_buffer_offsets[index] = offset; + shader_storage_buffer_sizes[index] = size; + } +} + +void gl_rend_state_struct::bind_texture_2d(GLuint texture, bool force) { + if (texture_binding_2d[active_texture_index] != texture) { + glBindTexture(GL_TEXTURE_2D, texture); + texture_binding_2d[active_texture_index] = texture; + } +} + +void gl_rend_state_struct::bind_texture_cube_map(GLuint texture, bool force) { + if (force || texture_binding_cube_map[active_texture_index] != texture) { + glBindTexture(GL_TEXTURE_CUBE_MAP, texture); + texture_binding_cube_map[active_texture_index] = texture; + } +} + +void gl_rend_state_struct::bind_sampler(int32_t index, GLuint sampler, bool force) { + if (force || sampler_binding[index] != sampler) { + glBindSampler(index, sampler); + sampler_binding[index] = sampler; + } +} + +bool gl_rend_state_struct::check_uniform_buffer_binding() { + return uniform_buffer_binding != 0; +} + +bool gl_rend_state_struct::check_uniform_buffer_binding_base(size_t index) { + return uniform_buffer_bindings[index] != 0; +} + +bool gl_rend_state_struct::check_shader_storage_buffer_binding() { + return shader_storage_buffer_binding != 0; +} + +bool gl_rend_state_struct::check_shader_storage_buffer_binding_base(size_t index) { + return shader_storage_buffer_bindings[index] != 0; +} + +bool gl_rend_state_struct::check_texture_binding_2d(size_t index) { + return texture_binding_2d[index] != 0; +} + +bool gl_rend_state_struct::check_texture_binding_cube_map(size_t index) { + return texture_binding_cube_map[index] != 0; +} + +bool gl_rend_state_struct::check_sampler_binding(int32_t index, GLuint sampler) { + return sampler_binding[index] != 0; +} + +void gl_rend_state_struct::disable_blend(bool force) { + if (force || blend) { + glDisable(GL_BLEND); + blend = GL_FALSE; + } +} + +void gl_rend_state_struct::disable_cull_face(bool force) { + if (force || cull_face) { + glDisable(GL_CULL_FACE); + cull_face = GL_FALSE; + } +} + +void gl_rend_state_struct::disable_depth_test(bool force) { + if (force || depth_test) { + glDisable(GL_DEPTH_TEST); + depth_test = GL_FALSE; + } +} + +void gl_rend_state_struct::disable_multisample(bool force) { + if (force || multisample) { + glDisable(GL_MULTISAMPLE); + multisample = GL_FALSE; + } +} + +void gl_rend_state_struct::disable_primitive_restart(bool force) { + if (force || primitive_restart) { + glDisable(GL_PRIMITIVE_RESTART); + primitive_restart = GL_FALSE; + } +} + +void gl_rend_state_struct::disable_scissor_test(bool force) { + if (force || scissor_test) { + glDisable(GL_SCISSOR_TEST); + scissor_test = GL_FALSE; + } +} + +void gl_rend_state_struct::disable_stencil_test(bool force) { + if (force || stencil_test) { + glDisable(GL_STENCIL_TEST); + stencil_test = GL_FALSE; + } +} + +void gl_rend_state_struct::enable_blend(bool force) { + if (force || !blend) { + glEnable(GL_BLEND); + blend = GL_TRUE; + } +} + +void gl_rend_state_struct::enable_cull_face(bool force) { + if (force || !cull_face) { + glEnable(GL_CULL_FACE); + cull_face = GL_TRUE; + } +} + +void gl_rend_state_struct::enable_depth_test(bool force) { + if (force || !depth_test) { + glEnable(GL_DEPTH_TEST); + depth_test = GL_TRUE; + } +} + +void gl_rend_state_struct::enable_multisample(bool force) { + if (force || !multisample) { + glEnable(GL_MULTISAMPLE); + multisample = GL_TRUE; + } +} + +void gl_rend_state_struct::enable_primitive_restart(bool force) { + if (force || !primitive_restart) { + glEnable(GL_PRIMITIVE_RESTART); + primitive_restart = GL_TRUE; + } +} + +void gl_rend_state_struct::enable_scissor_test(bool force) { + if (force || !scissor_test) { + glEnable(GL_SCISSOR_TEST); + scissor_test = GL_TRUE; + } +} + +void gl_rend_state_struct::enable_stencil_test(bool force) { + if (force || !stencil_test) { + glEnable(GL_STENCIL_TEST); + stencil_test = GL_TRUE; + } +} + +void gl_rend_state_struct::get() { + glGetIntegerv(GL_CURRENT_PROGRAM, (GLint*)&program); + GLenum active_texture = GL_TEXTURE0; + glGetIntegerv(GL_ACTIVE_TEXTURE, (GLint*)&active_texture); + active_texture_index = active_texture - GL_TEXTURE0; + + if (GLAD_GL_VERSION_4_5) { + for (GLuint i = 0; i < 32; i++) { + glGetIntegeri_v(GL_TEXTURE_BINDING_2D, i, (GLint*)&texture_binding_2d[i]); + glGetIntegeri_v(GL_TEXTURE_BINDING_CUBE_MAP, i, (GLint*)&texture_binding_cube_map[i]); + glGetIntegeri_v(GL_SAMPLER_BINDING, i, (GLint*)&sampler_binding[i]); + } + } + else { + for (GLuint i = 0; i < 32; i++) { + glActiveTexture((GLenum)(GL_TEXTURE0 + i)); + glGetIntegerv(GL_TEXTURE_BINDING_2D, (GLint*)&texture_binding_2d[i]); + glGetIntegerv(GL_TEXTURE_BINDING_CUBE_MAP, (GLint*)&texture_binding_cube_map[i]); + glGetIntegerv(GL_SAMPLER_BINDING, (GLint*)&sampler_binding[i]); + } + glActiveTexture(active_texture); + } + + glGetBooleanv(GL_BLEND, &blend); + glGetIntegerv(GL_BLEND_SRC_RGB, (GLint*)&blend_src_rgb); + glGetIntegerv(GL_BLEND_SRC_ALPHA, (GLint*)&blend_src_alpha); + glGetIntegerv(GL_BLEND_DST_RGB, (GLint*)&blend_dst_rgb); + glGetIntegerv(GL_BLEND_DST_ALPHA, (GLint*)&blend_dst_alpha); + glGetIntegerv(GL_BLEND_EQUATION_RGB, (GLint*)&blend_mode_rgb); + glGetIntegerv(GL_BLEND_EQUATION_ALPHA, (GLint*)&blend_mode_alpha); + + glGetIntegerv(GL_READ_FRAMEBUFFER_BINDING, (GLint*)&read_framebuffer_binding); + glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, (GLint*)&draw_framebuffer_binding); + glGetIntegerv(GL_VERTEX_ARRAY_BINDING, (GLint*)&vertex_array_binding); + glGetIntegerv(GL_ARRAY_BUFFER_BINDING, (GLint*)&array_buffer_binding); + glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING, (GLint*)&element_array_buffer_binding); + + glGetIntegerv(GL_UNIFORM_BUFFER_BINDING, (GLint*)&uniform_buffer_binding); + for (GLuint i = 0; i < 14; i++) { + glGetIntegeri_v(GL_UNIFORM_BUFFER_BINDING, i, (GLint*)&uniform_buffer_bindings[i]); + glGetInteger64i_v(GL_UNIFORM_BUFFER_START, i, (GLint64*)&uniform_buffer_offsets[i]); + glGetInteger64i_v(GL_UNIFORM_BUFFER_SIZE, i, (GLint64*)&uniform_buffer_sizes[i]); + } + + glGetIntegerv(GL_SHADER_STORAGE_BUFFER_BINDING, (GLint*)&shader_storage_buffer_binding); + for (GLuint i = 0; i < 14; i++) { + glGetIntegeri_v(GL_SHADER_STORAGE_BUFFER_BINDING, i, (GLint*)&shader_storage_buffer_bindings[i]); + glGetInteger64i_v(GL_SHADER_STORAGE_BUFFER_START, i, (GLint64*)&shader_storage_buffer_offsets[i]); + glGetInteger64i_v(GL_SHADER_STORAGE_BUFFER_SIZE, i, (GLint64*)&shader_storage_buffer_sizes[i]); + } + + glGetBooleanv(GL_COLOR_WRITEMASK, color_mask); + glGetBooleanv(GL_CULL_FACE, &cull_face); + glGetIntegerv(GL_CULL_FACE_MODE, (GLint*)&cull_face_mode); + glGetBooleanv(GL_DEPTH_TEST, &depth_test); + glGetIntegerv(GL_DEPTH_FUNC, (GLint*)&depth_func); + glGetBooleanv(GL_DEPTH_WRITEMASK, &depth_mask); + glGetFloatv(GL_LINE_WIDTH, &line_width); + glGetBooleanv(GL_MULTISAMPLE, &multisample); + glGetBooleanv(GL_PRIMITIVE_RESTART, &primitive_restart); + glGetIntegerv(GL_PRIMITIVE_RESTART_INDEX, (GLint*)&primitive_restart_index); + glGetIntegerv(GL_SCISSOR_BOX, (GLint*)&scissor_box); + glGetBooleanv(GL_SCISSOR_TEST, &scissor_test); + glGetBooleanv(GL_STENCIL_TEST, &stencil_test); + glGetIntegerv(GL_STENCIL_FUNC, (GLint*)&stencil_func); + glGetIntegerv(GL_STENCIL_VALUE_MASK, (GLint*)&stencil_value_mask); + glGetIntegerv(GL_STENCIL_FAIL, (GLint*)&stencil_fail); + glGetIntegerv(GL_STENCIL_PASS_DEPTH_FAIL, (GLint*)&stencil_dpfail); + glGetIntegerv(GL_STENCIL_PASS_DEPTH_PASS, (GLint*)&stencil_dppass); + glGetIntegerv(GL_STENCIL_REF, &stencil_ref); + glGetIntegerv(GL_STENCIL_WRITEMASK, (GLint*)&stencil_mask); + glGetIntegerv(GL_VIEWPORT, (GLint*)&viewport); + + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + polygon_mode = GL_FILL; +} + +GLuint gl_rend_state_struct::get_program() { + return program; +} + +gl_rend_state_rect gl_rend_state_struct::get_scissor() { + return scissor_box; +} + +void gl_rend_state_struct::get_scissor(GLint& x, GLint& y, GLsizei& width, GLsizei& height) { + x = scissor_box.x; + y = scissor_box.y; + width = scissor_box.width; + height = scissor_box.height; +} + +gl_rend_state_rect gl_rend_state_struct::get_viewport() { + return viewport; +} + +void gl_rend_state_struct::get_viewport(GLint& x, GLint& y, GLsizei& width, GLsizei& height) { + x = viewport.x; + y = viewport.y; + width = viewport.width; + height = viewport.height; +} + +void gl_rend_state_struct::set_blend_func(GLenum src, GLenum dst, bool force) { + if (force || blend_src_rgb != src || blend_dst_rgb != dst + || blend_src_alpha != GL_ONE || blend_dst_alpha != GL_ONE_MINUS_SRC_ALPHA) { + glBlendFuncSeparate(src, dst, GL_ONE, GL_ONE_MINUS_SRC_ALPHA); + blend_src_rgb = src; + blend_dst_rgb = dst; + blend_src_alpha = GL_ONE; + blend_dst_alpha = GL_ONE_MINUS_SRC_ALPHA; + } +} + +void gl_rend_state_struct::set_blend_func_separate(GLenum src_rgb, GLenum dst_rgb, + GLenum src_alpha, GLenum dst_alpha, bool force) { + if (force || blend_src_rgb != src_rgb || blend_dst_rgb != dst_rgb + || blend_src_alpha != src_alpha || blend_dst_alpha != dst_alpha) { + glBlendFuncSeparate(src_rgb, dst_rgb, src_alpha, dst_alpha); + blend_src_rgb = src_rgb; + blend_dst_rgb = dst_rgb; + blend_src_alpha = src_alpha; + blend_dst_alpha = dst_alpha; + } +} + +void gl_rend_state_struct::set_blend_equation(GLenum mode, bool force) { + if (force || blend_mode_rgb != mode || blend_mode_alpha != mode) { + glBlendEquationSeparate(mode, mode); + blend_mode_rgb = mode; + blend_mode_alpha = mode; + } +} + +void gl_rend_state_struct::set_blend_equation_separate(GLenum mode_rgb, GLenum mode_alpha, bool force) { + if (force || blend_mode_rgb != mode_rgb || blend_mode_alpha != mode_alpha) { + glBlendEquationSeparate(mode_rgb, mode_alpha); + blend_mode_rgb = mode_rgb; + blend_mode_alpha = mode_alpha; + } +} + +void gl_rend_state_struct::set_color_mask(GLboolean red, GLboolean green, + GLboolean blue, GLboolean alpha, bool force) { + if (force || color_mask[0] != red || color_mask[1] != green + || color_mask[2] != blue || color_mask[3] != alpha) { + glColorMask(red, green, blue, alpha); + color_mask[0] = red; + color_mask[1] = green; + color_mask[2] = blue; + color_mask[3] = alpha; + } +} + +void gl_rend_state_struct::set_cull_face_mode(GLenum mode, bool force) { + if (force || cull_face_mode != mode) { + glCullFace(mode); + cull_face_mode = mode; + } +} + +void gl_rend_state_struct::set_depth_func(GLenum func, bool force) { + if (force || depth_func != func) { + glDepthFunc(func); + depth_func = func; + } +} + +void gl_rend_state_struct::set_depth_mask(GLboolean flag, bool force) { + if (force || depth_mask != flag) { + glDepthMask(flag); + depth_mask = flag; + } +} + +void gl_rend_state_struct::set_line_width(GLfloat width, bool force) { + if (force || line_width != width) { + glLineWidth(width); + line_width = width; + } +} + +void gl_rend_state_struct::set_polygon_mode(GLenum face, GLenum mode, bool force) { + switch (face) { + case GL_FRONT: + if (force || polygon_mode != mode) { + glPolygonMode(GL_FRONT, mode); + polygon_mode = mode; + } + break; + case GL_BACK: + if (force || polygon_mode != mode) { + glPolygonMode(GL_BACK, mode); + polygon_mode = mode; + } + break; + case GL_FRONT_AND_BACK: + if (force || polygon_mode != mode) { + glPolygonMode(GL_FRONT_AND_BACK, mode); + polygon_mode = mode; + } + break; + } +} + +void gl_rend_state_struct::set_primitive_restart_index(GLuint index, bool force) { + if (force || primitive_restart_index != index) { + glPrimitiveRestartIndex(index); + primitive_restart_index = index; + } +} + +void gl_rend_state_struct::set_scissor(const gl_rend_state_rect& rect, bool force) { + if (force || scissor_box.x != rect.x || scissor_box.y != rect.y + || scissor_box.width != rect.width || scissor_box.height != rect.height) { + glScissor(rect.x, rect.y, rect.width, rect.height); + scissor_box = rect; + } +} + +void gl_rend_state_struct::set_scissor(GLint x, GLint y, GLsizei width, GLsizei height, bool force) { + if (force || scissor_box.x != x || scissor_box.y != y + || scissor_box.width != width || scissor_box.height != height) { + glScissor(x, y, width, height); + scissor_box.x = x; + scissor_box.y = y; + scissor_box.width = width; + scissor_box.height = height; + } +} + +void gl_rend_state_struct::set_stencil_func(GLenum func, GLint ref, GLuint mask, bool force) { + if (force || stencil_func != func || stencil_ref != ref || stencil_value_mask != mask) { + glStencilFunc(func, ref, mask); + stencil_func = func; + stencil_ref = ref; + stencil_value_mask = mask; + } +} + +void gl_rend_state_struct::set_stencil_mask(GLuint mask, bool force) { + if (force || stencil_mask != mask) { + glStencilMask(mask); + stencil_mask = mask; + } +} + +void gl_rend_state_struct::set_stencil_op(GLenum sfail, GLenum dpfail, GLenum dppass, bool force) { + if (force || stencil_fail != sfail || stencil_dpfail != dpfail || stencil_dppass != dppass) { + glStencilOp(sfail, dpfail, dppass); + stencil_fail = sfail; + stencil_dpfail = dpfail; + stencil_dppass = dppass; + } +} + +void gl_rend_state_struct::set_viewport(const gl_rend_state_rect& rect, bool force) { + if (force || viewport.x != rect.x || viewport.y != rect.y + || viewport.width != rect.width || viewport.height != rect.height) { + glViewport(rect.x, rect.y, rect.width, rect.height); + viewport = rect; + } +} + +void gl_rend_state_struct::set_viewport(GLint x, GLint y, GLsizei width, GLsizei height, bool force) { + if (force || viewport.x != x || viewport.y != y + || viewport.width != width || viewport.height != height) { + glViewport(x, y, width, height); + viewport.x = x; + viewport.y = y; + viewport.width = width; + viewport.height = height; + } +} + +void gl_rend_state_struct::use_program(GLuint program, bool force) { + if (force || this->program != program) { + glUseProgram(program); + this->program = program; + } +} diff --git a/src/CRE/gl_rend_state.hpp b/src/CRE/gl_rend_state.hpp new file mode 100644 index 00000000..8553ad1e --- /dev/null +++ b/src/CRE/gl_rend_state.hpp @@ -0,0 +1,147 @@ +/* + by korenkonder + GitHub/GitLab: korenkonder +*/ + +#pragma once + +#include "../KKdLib/default.hpp" +#include "gl.hpp" + +struct gl_rend_state_rect { + GLint x; + GLint y; + GLsizei width; + GLsizei height; +}; + +struct gl_rend_state_struct { + GLuint program; + GLuint active_texture_index; + GLuint texture_binding_2d[32]; + GLuint texture_binding_cube_map[32]; + GLuint sampler_binding[32]; + GLboolean blend; + GLenum blend_src_rgb; + GLenum blend_src_alpha; + GLenum blend_dst_rgb; + GLenum blend_dst_alpha; + GLenum blend_mode_rgb; + GLenum blend_mode_alpha; + GLuint read_framebuffer_binding; + GLuint draw_framebuffer_binding; + GLuint vertex_array_binding; + GLuint array_buffer_binding; + GLuint element_array_buffer_binding; + GLuint uniform_buffer_binding; + GLuint uniform_buffer_bindings[14]; + GLintptr uniform_buffer_offsets[14]; + GLsizeiptr uniform_buffer_sizes[14]; + GLuint shader_storage_buffer_binding; + GLuint shader_storage_buffer_bindings[14]; + GLintptr shader_storage_buffer_offsets[14]; + GLsizeiptr shader_storage_buffer_sizes[14]; + GLboolean color_mask[4]; + GLboolean cull_face; + GLenum cull_face_mode; + GLboolean depth_test; + GLenum depth_func; + GLboolean depth_mask; + GLfloat line_width; + GLenum polygon_mode; + GLboolean multisample; + GLboolean primitive_restart; + GLuint primitive_restart_index; + gl_rend_state_rect scissor_box; + GLboolean scissor_test; + GLboolean stencil_test; + GLenum stencil_func; + GLenum stencil_fail; + GLenum stencil_dpfail; + GLenum stencil_dppass; + GLuint stencil_mask; + GLint stencil_ref; + GLuint stencil_value_mask; + gl_rend_state_rect viewport; + + void active_bind_texture_2d(int32_t index, GLuint texture, bool force = false); + void active_bind_texture_cube_map(int32_t index, GLuint texture, bool force = false); + void active_texture(size_t index, bool force = false); + void bind_framebuffer(GLuint framebuffer, bool force = false); + void bind_read_framebuffer(GLuint framebuffer, bool force = false); + void bind_draw_framebuffer(GLuint framebuffer, bool force = false); + void bind_vertex_array(GLuint array, bool force = false); + void bind_array_buffer(GLuint buffer, bool force = false); + void bind_element_array_buffer(GLuint buffer, bool force = false); + void bind_uniform_buffer(GLuint buffer, bool force = false); + void bind_uniform_buffer_base(GLuint index, GLuint buffer, bool force = false); + void bind_uniform_buffer_range(GLuint index, + GLuint buffer, GLintptr offset, GLsizeiptr size, bool force = false); + void bind_shader_storage_buffer(GLuint buffer, bool force = false); + void bind_shader_storage_buffer_base(GLuint index, GLuint buffer, bool force = false); + void bind_shader_storage_buffer_range(GLuint index, + GLuint buffer, GLintptr offset, GLsizeiptr size, bool force = false); + void bind_texture_2d(GLuint texture, bool force = false); + void bind_texture_cube_map(GLuint texture, bool force = false); + void bind_sampler(int32_t index, GLuint sampler, bool force = false); + bool check_uniform_buffer_binding(); + bool check_uniform_buffer_binding_base(size_t index); + bool check_shader_storage_buffer_binding(); + bool check_shader_storage_buffer_binding_base(size_t index); + bool check_texture_binding_2d(size_t index); + bool check_texture_binding_cube_map(size_t index); + bool check_sampler_binding(int32_t index, GLuint sampler); + void disable_blend(bool force = false); + void disable_cull_face(bool force = false); + void disable_depth_test(bool force = false); + void disable_multisample(bool force = false); + void disable_primitive_restart(bool force = false); + void disable_scissor_test(bool force = false); + void disable_stencil_test(bool force = false); + void enable_blend(bool force = false); + void enable_cull_face(bool force = false); + void enable_depth_test(bool force = false); + void enable_multisample(bool force = false); + void enable_primitive_restart(bool force = false); + void enable_scissor_test(bool force = false); + void enable_stencil_test(bool force = false); + void get(); + GLuint get_program(); + gl_rend_state_rect get_scissor(); + void get_scissor(GLint& x, GLint& y, GLsizei& width, GLsizei& height); + gl_rend_state_rect get_viewport(); + void get_viewport(GLint& x, GLint& y, GLsizei& width, GLsizei& height); + void set_blend_func(GLenum src, GLenum dst, bool force = false); + void set_blend_func_separate(GLenum src_rgb, GLenum dst_rgb, + GLenum src_alpha, GLenum dst_alpha, bool force = false); + void set_blend_equation(GLenum mode, bool force = false); + void set_blend_equation_separate( + GLenum mode_rgb, GLenum mode_alpha, bool force = false); + void set_color_mask(GLboolean red, GLboolean green, + GLboolean blue, GLboolean alpha, bool force = false); + void set_cull_face_mode(GLenum mode, bool force = false); + void set_depth_func(GLenum func, bool force = false); + void set_depth_mask(GLboolean flag, bool force = false); + void set_line_width(GLfloat width, bool force = false); + void set_polygon_mode(GLenum face, GLenum mode, bool force = false); + void set_primitive_restart_index(GLuint index, bool force = false); + void set_scissor(const gl_rend_state_rect& rect, bool force = false); + void set_scissor(GLint x, GLint y, GLsizei width, GLsizei height, bool force = false); + void set_stencil_func(GLenum func, GLint ref, GLuint mask, bool force = false); + void set_stencil_mask(GLuint mask, bool force = false); + void set_stencil_op(GLenum sfail, GLenum dpfail, GLenum dppass, bool force = false); + void set_viewport(const gl_rend_state_rect& rect, bool force = false); + void set_viewport(GLint x, GLint y, GLsizei width, GLsizei height, bool force = false); + void use_program(GLuint program, bool force = false); + + template + inline void begin_event(const char(&str)[size]) { + glPushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0, (GLsizei)(size - 1), str); + } + + inline void end_event() { + glPopDebugGroup(); + } +}; + +extern gl_rend_state_struct gl_rend_state; diff --git a/src/CRE/gl_state.cpp b/src/CRE/gl_state.cpp deleted file mode 100644 index fd907a02..00000000 --- a/src/CRE/gl_state.cpp +++ /dev/null @@ -1,585 +0,0 @@ -/* - by korenkonder - GitHub/GitLab: korenkonder -*/ - -#include "gl_state.hpp" - -gl_state_struct gl_state; - -void gl_state_active_bind_texture_2d(int32_t index, GLuint texture, bool force) { - if (force || gl_state.texture_binding_2d[index] != texture) { - if (force || gl_state.active_texture_index != index) { - glActiveTexture((GLenum)(GL_TEXTURE0 + index)); - gl_state.active_texture_index = (GLuint)index; - } - glBindTexture(GL_TEXTURE_2D, texture); - gl_state.texture_binding_2d[index] = texture; - } -} - -void gl_state_active_bind_texture_cube_map(int32_t index, GLuint texture, bool force) { - if (force || gl_state.texture_binding_cube_map[index] != texture) { - if (force || gl_state.active_texture_index != index) { - glActiveTexture((GLenum)(GL_TEXTURE0 + index)); - gl_state.active_texture_index = (GLuint)index; - } - glBindTexture(GL_TEXTURE_CUBE_MAP, texture); - gl_state.texture_binding_cube_map[index] = texture; - } -} - -void gl_state_active_texture(size_t index, bool force) { - if (force || gl_state.active_texture_index != index) { - glActiveTexture((GLenum)(GL_TEXTURE0 + index)); - gl_state.active_texture_index = (GLuint)index; - } -} - -void gl_state_bind_framebuffer(GLuint framebuffer, bool force) { - if (force || gl_state.read_framebuffer_binding != framebuffer - || gl_state.draw_framebuffer_binding != framebuffer) { - glBindFramebuffer(GL_FRAMEBUFFER, framebuffer); - gl_state.read_framebuffer_binding = framebuffer; - gl_state.draw_framebuffer_binding = framebuffer; - } -} - -void gl_state_bind_read_framebuffer(GLuint framebuffer, bool force) { - if (force || gl_state.read_framebuffer_binding != framebuffer) { - glBindFramebuffer(GL_READ_FRAMEBUFFER, framebuffer); - gl_state.read_framebuffer_binding = framebuffer; - } -} - -void gl_state_bind_draw_framebuffer(GLuint framebuffer, bool force) { - if (force || gl_state.draw_framebuffer_binding != framebuffer) { - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer); - gl_state.draw_framebuffer_binding = framebuffer; - } -} - -void gl_state_bind_vertex_array(GLuint array, bool force) { - if (force || gl_state.vertex_array_binding != array) { - glBindVertexArray(array); - gl_state.vertex_array_binding = array; - } -} - -void gl_state_bind_array_buffer(GLuint buffer, bool force) { - if (force || gl_state.array_buffer_binding != buffer) { - glBindBuffer(GL_ARRAY_BUFFER, buffer); - gl_state.array_buffer_binding = buffer; - } -} - -void gl_state_bind_element_array_buffer(GLuint buffer, bool force) { - if (force || gl_state.element_array_buffer_binding != buffer) { - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffer); - gl_state.element_array_buffer_binding = buffer; - } -} - -void gl_state_bind_uniform_buffer(GLuint buffer, bool force) { - if (force || gl_state.uniform_buffer_binding != buffer) { - glBindBuffer(GL_UNIFORM_BUFFER, buffer); - gl_state.uniform_buffer_binding = buffer; - } -} - -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; - } -} - -void gl_state_bind_uniform_buffer_range(GLuint index, - GLuint buffer, GLintptr offset, GLsizeiptr size, bool force) { - if (force || gl_state.uniform_buffer_bindings[index] != buffer - || 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; - } -} - -void gl_state_bind_shader_storage_buffer(GLuint buffer, bool force) { - if (force || gl_state.shader_storage_buffer_binding != buffer) { - glBindBuffer(GL_SHADER_STORAGE_BUFFER, buffer); - gl_state.shader_storage_buffer_binding = buffer; - } -} - -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); - 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; - } -} - -void gl_state_bind_shader_storage_buffer_range(GLuint index, - GLuint buffer, GLintptr offset, GLsizeiptr size, bool force) { - if (force || gl_state.shader_storage_buffer_bindings[index] != buffer - || 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); - 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; - } -} - -void gl_state_bind_texture_2d(GLuint texture, bool force) { - if (gl_state.texture_binding_2d[gl_state.active_texture_index] != texture) { - glBindTexture(GL_TEXTURE_2D, texture); - gl_state.texture_binding_2d[gl_state.active_texture_index] = texture; - } -} - -void gl_state_bind_texture_cube_map(GLuint texture, bool force) { - if (force || gl_state.texture_binding_cube_map[gl_state.active_texture_index] != texture) { - glBindTexture(GL_TEXTURE_CUBE_MAP, texture); - gl_state.texture_binding_cube_map[gl_state.active_texture_index] = texture; - } -} - -void gl_state_bind_sampler(int32_t index, GLuint sampler, bool force) { - if (force || gl_state.sampler_binding[index] != sampler) { - glBindSampler(index, sampler); - gl_state.sampler_binding[index] = sampler; - } -} - -bool gl_state_check_uniform_buffer_binding() { - return gl_state.uniform_buffer_binding != 0; -} - -bool gl_state_check_uniform_buffer_binding_base(size_t index) { - return gl_state.uniform_buffer_bindings[index] != 0; -} - -bool gl_state_check_shader_storage_buffer_binding() { - return gl_state.shader_storage_buffer_binding != 0; -} - -bool gl_state_check_shader_storage_buffer_binding_base(size_t index) { - return gl_state.shader_storage_buffer_bindings[index] != 0; -} - -bool gl_state_check_texture_binding_2d(size_t index) { - return gl_state.texture_binding_2d[index] != 0; -} - -bool gl_state_check_texture_binding_cube_map(size_t index) { - return gl_state.texture_binding_cube_map[index] != 0; -} - -bool gl_state_check_sampler_binding(int32_t index, GLuint sampler) { - return gl_state.sampler_binding[index] != 0; -} - -void gl_state_disable_blend(bool force) { - if (force || gl_state.blend) { - glDisable(GL_BLEND); - gl_state.blend = GL_FALSE; - } -} - -void gl_state_disable_cull_face(bool force) { - if (force || gl_state.cull_face) { - glDisable(GL_CULL_FACE); - gl_state.cull_face = GL_FALSE; - } -} - -void gl_state_disable_depth_test(bool force) { - if (force || gl_state.depth_test) { - glDisable(GL_DEPTH_TEST); - gl_state.depth_test = GL_FALSE; - } -} - -void gl_state_disable_multisample(bool force) { - if (force || gl_state.multisample) { - glDisable(GL_MULTISAMPLE); - gl_state.multisample = GL_FALSE; - } -} - -void gl_state_disable_primitive_restart(bool force) { - if (force || gl_state.primitive_restart) { - glDisable(GL_PRIMITIVE_RESTART); - gl_state.primitive_restart = GL_FALSE; - } -} - -void gl_state_disable_scissor_test(bool force) { - if (force || gl_state.scissor_test) { - glDisable(GL_SCISSOR_TEST); - gl_state.scissor_test = GL_FALSE; - } -} - -void gl_state_disable_stencil_test(bool force) { - if (force || gl_state.stencil_test) { - glDisable(GL_STENCIL_TEST); - gl_state.stencil_test = GL_FALSE; - } -} - -void gl_state_enable_blend(bool force) { - if (force || !gl_state.blend) { - glEnable(GL_BLEND); - gl_state.blend = GL_TRUE; - } -} - -void gl_state_enable_cull_face(bool force) { - if (force || !gl_state.cull_face) { - glEnable(GL_CULL_FACE); - gl_state.cull_face = GL_TRUE; - } -} - -void gl_state_enable_depth_test(bool force) { - if (force || !gl_state.depth_test) { - glEnable(GL_DEPTH_TEST); - gl_state.depth_test = GL_TRUE; - } -} - -void gl_state_enable_multisample(bool force) { - if (force || !gl_state.multisample) { - glEnable(GL_MULTISAMPLE); - gl_state.multisample = GL_TRUE; - } -} - -void gl_state_enable_primitive_restart(bool force) { - if (force || !gl_state.primitive_restart) { - glEnable(GL_PRIMITIVE_RESTART); - gl_state.primitive_restart = GL_TRUE; - } -} - -void gl_state_enable_scissor_test(bool force) { - if (force || !gl_state.scissor_test) { - glEnable(GL_SCISSOR_TEST); - gl_state.scissor_test = GL_TRUE; - } -} - -void gl_state_enable_stencil_test(bool force) { - if (force || !gl_state.stencil_test) { - glEnable(GL_STENCIL_TEST); - gl_state.stencil_test = GL_TRUE; - } -} - -void gl_state_get() { - glGetIntegerv(GL_CURRENT_PROGRAM, (GLint*)&gl_state.program); - GLenum active_texture = GL_TEXTURE0; - glGetIntegerv(GL_ACTIVE_TEXTURE, (GLint*)&active_texture); - gl_state.active_texture_index = active_texture - GL_TEXTURE0; - - if (GLAD_GL_VERSION_4_5) { - for (GLuint i = 0; i < 32; i++) { - glGetIntegeri_v(GL_TEXTURE_BINDING_2D, i, (GLint*)&gl_state.texture_binding_2d[i]); - glGetIntegeri_v(GL_TEXTURE_BINDING_CUBE_MAP, i, (GLint*)&gl_state.texture_binding_cube_map[i]); - glGetIntegeri_v(GL_SAMPLER_BINDING, i, (GLint*)&gl_state.sampler_binding[i]); - } - } - else { - for (GLuint i = 0; i < 32; i++) { - glActiveTexture((GLenum)(GL_TEXTURE0 + i)); - glGetIntegerv(GL_TEXTURE_BINDING_2D, (GLint*)&gl_state.texture_binding_2d[i]); - glGetIntegerv(GL_TEXTURE_BINDING_CUBE_MAP, (GLint*)&gl_state.texture_binding_cube_map[i]); - glGetIntegerv(GL_SAMPLER_BINDING, (GLint*)&gl_state.sampler_binding[i]); - } - glActiveTexture(active_texture); - } - - glGetBooleanv(GL_BLEND, &gl_state.blend); - glGetIntegerv(GL_BLEND_SRC_RGB, (GLint*)&gl_state.blend_src_rgb); - glGetIntegerv(GL_BLEND_SRC_ALPHA, (GLint*)&gl_state.blend_src_alpha); - glGetIntegerv(GL_BLEND_DST_RGB, (GLint*)&gl_state.blend_dst_rgb); - glGetIntegerv(GL_BLEND_DST_ALPHA, (GLint*)&gl_state.blend_dst_alpha); - glGetIntegerv(GL_BLEND_EQUATION_RGB, (GLint*)&gl_state.blend_mode_rgb); - glGetIntegerv(GL_BLEND_EQUATION_ALPHA, (GLint*)&gl_state.blend_mode_alpha); - - glGetIntegerv(GL_READ_FRAMEBUFFER_BINDING, (GLint*)&gl_state.read_framebuffer_binding); - glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, (GLint*)&gl_state.draw_framebuffer_binding); - glGetIntegerv(GL_VERTEX_ARRAY_BINDING, (GLint*)&gl_state.vertex_array_binding); - glGetIntegerv(GL_ARRAY_BUFFER_BINDING, (GLint*)&gl_state.array_buffer_binding); - glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING, (GLint*)&gl_state.element_array_buffer_binding); - - glGetIntegerv(GL_UNIFORM_BUFFER_BINDING, (GLint*)&gl_state.uniform_buffer_binding); - for (GLuint i = 0; i < 14; i++) { - glGetIntegeri_v(GL_UNIFORM_BUFFER_BINDING, i, (GLint*)&gl_state.uniform_buffer_bindings[i]); - glGetInteger64i_v(GL_UNIFORM_BUFFER_START, i, (GLint64*)&gl_state.uniform_buffer_offsets[i]); - glGetInteger64i_v(GL_UNIFORM_BUFFER_SIZE, i, (GLint64*)&gl_state.uniform_buffer_sizes[i]); - } - - glGetIntegerv(GL_SHADER_STORAGE_BUFFER_BINDING, (GLint*)&gl_state.shader_storage_buffer_binding); - for (GLuint i = 0; i < 14; i++) { - glGetIntegeri_v(GL_SHADER_STORAGE_BUFFER_BINDING, i, (GLint*)&gl_state.shader_storage_buffer_bindings[i]); - glGetInteger64i_v(GL_SHADER_STORAGE_BUFFER_START, i, (GLint64*)&gl_state.shader_storage_buffer_offsets[i]); - glGetInteger64i_v(GL_SHADER_STORAGE_BUFFER_SIZE, i, (GLint64*)&gl_state.shader_storage_buffer_sizes[i]); - } - - glGetBooleanv(GL_COLOR_WRITEMASK, gl_state.color_mask); - glGetBooleanv(GL_CULL_FACE, &gl_state.cull_face); - glGetIntegerv(GL_CULL_FACE_MODE, (GLint*)&gl_state.cull_face_mode); - glGetBooleanv(GL_DEPTH_TEST, &gl_state.depth_test); - glGetIntegerv(GL_DEPTH_FUNC, (GLint*)&gl_state.depth_func); - glGetBooleanv(GL_DEPTH_WRITEMASK, &gl_state.depth_mask); - glGetFloatv(GL_LINE_WIDTH, &gl_state.line_width); - glGetBooleanv(GL_MULTISAMPLE, &gl_state.multisample); - glGetBooleanv(GL_PRIMITIVE_RESTART, &gl_state.primitive_restart); - glGetIntegerv(GL_PRIMITIVE_RESTART_INDEX, (GLint*)&gl_state.primitive_restart_index); - glGetIntegerv(GL_SCISSOR_BOX, (GLint*)&gl_state.scissor_box); - glGetBooleanv(GL_SCISSOR_TEST, &gl_state.scissor_test); - glGetBooleanv(GL_STENCIL_TEST, &gl_state.stencil_test); - glGetIntegerv(GL_STENCIL_FUNC, (GLint*)&gl_state.stencil_func); - glGetIntegerv(GL_STENCIL_VALUE_MASK, (GLint*)&gl_state.stencil_value_mask); - glGetIntegerv(GL_STENCIL_FAIL, (GLint*)&gl_state.stencil_fail); - glGetIntegerv(GL_STENCIL_PASS_DEPTH_FAIL, (GLint*)&gl_state.stencil_dpfail); - glGetIntegerv(GL_STENCIL_PASS_DEPTH_PASS, (GLint*)&gl_state.stencil_dppass); - glGetIntegerv(GL_STENCIL_REF, &gl_state.stencil_ref); - glGetIntegerv(GL_STENCIL_WRITEMASK, (GLint*)&gl_state.stencil_mask); - glGetIntegerv(GL_VIEWPORT, (GLint*)&gl_state.viewport); - - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - gl_state.polygon_mode = GL_FILL; -} - -void gl_state_get_all_gl_errors() { - GLenum error; - while (error = glGetError()) - printf_debug("GL Error: 0x%04X\n", error); -} - -GLenum gl_state_get_error() { - GLenum error = glGetError(); - if (error) - printf_debug("GL Error: 0x%04X\n", error); - return error; -} - -GLuint gl_state_get_program() { - return gl_state.program; -} - -gl_state_rect gl_state_get_scissor() { - return gl_state.scissor_box; -} - -void gl_state_get_scissor(GLint& x, GLint& y, GLsizei& width, GLsizei& height) { - x = gl_state.scissor_box.x; - y = gl_state.scissor_box.y; - width = gl_state.scissor_box.width; - height = gl_state.scissor_box.height; -} - -gl_state_rect gl_state_get_viewport() { - return gl_state.viewport; -} - -void gl_state_get_viewport(GLint& x, GLint& y, GLsizei& width, GLsizei& height) { - x = gl_state.viewport.x; - y = gl_state.viewport.y; - width = gl_state.viewport.width; - height = gl_state.viewport.height; -} - -void gl_state_set_blend_func(GLenum src, GLenum dst, bool force) { - if (force || gl_state.blend_src_rgb != src || gl_state.blend_dst_rgb != dst - || gl_state.blend_src_alpha != GL_ONE || gl_state.blend_dst_alpha != GL_ONE_MINUS_SRC_ALPHA) { - glBlendFuncSeparate(src, dst, GL_ONE, GL_ONE_MINUS_SRC_ALPHA); - gl_state.blend_src_rgb = src; - gl_state.blend_dst_rgb = dst; - gl_state.blend_src_alpha = GL_ONE; - gl_state.blend_dst_alpha = GL_ONE_MINUS_SRC_ALPHA; - } -} - -void gl_state_set_blend_func_separate(GLenum src_rgb, GLenum dst_rgb, - GLenum src_alpha, GLenum dst_alpha, bool force) { - if (force || gl_state.blend_src_rgb != src_rgb || gl_state.blend_dst_rgb != dst_rgb - || gl_state.blend_src_alpha != src_alpha || gl_state.blend_dst_alpha != dst_alpha) { - glBlendFuncSeparate(src_rgb, dst_rgb, src_alpha, dst_alpha); - gl_state.blend_src_rgb = src_rgb; - gl_state.blend_dst_rgb = dst_rgb; - gl_state.blend_src_alpha = src_alpha; - gl_state.blend_dst_alpha = dst_alpha; - } -} - -void gl_state_set_blend_equation(GLenum mode, bool force) { - if (force || gl_state.blend_mode_rgb != mode || gl_state.blend_mode_alpha != mode) { - glBlendEquationSeparate(mode, mode); - gl_state.blend_mode_rgb = mode; - gl_state.blend_mode_alpha = mode; - } -} - -void gl_state_set_blend_equation_separate(GLenum mode_rgb, GLenum mode_alpha, bool force) { - if (force || gl_state.blend_mode_rgb != mode_rgb || gl_state.blend_mode_alpha != mode_alpha) { - glBlendEquationSeparate(mode_rgb, mode_alpha); - gl_state.blend_mode_rgb = mode_rgb; - gl_state.blend_mode_alpha = mode_alpha; - } -} - -void gl_state_set_color_mask(GLboolean red, GLboolean green, - GLboolean blue, GLboolean alpha, bool force) { - if (force || gl_state.color_mask[0] != red || gl_state.color_mask[1] != green - || gl_state.color_mask[2] != blue || gl_state.color_mask[3] != alpha) { - glColorMask(red, green, blue, alpha); - gl_state.color_mask[0] = red; - gl_state.color_mask[1] = green; - gl_state.color_mask[2] = blue; - gl_state.color_mask[3] = alpha; - } -} - -void gl_state_set_cull_face_mode(GLenum mode, bool force) { - if (force || gl_state.cull_face_mode != mode) { - glCullFace(mode); - gl_state.cull_face_mode = mode; - } -} - -void gl_state_set_depth_func(GLenum func, bool force) { - if (force || gl_state.depth_func != func) { - glDepthFunc(func); - gl_state.depth_func = func; - } -} - -void gl_state_set_depth_mask(GLboolean flag, bool force) { - if (force || gl_state.depth_mask != flag) { - glDepthMask(flag); - gl_state.depth_mask = flag; - } -} - -void gl_state_set_line_width(GLfloat width, bool force) { - if (force || gl_state.line_width != width) { - glLineWidth(width); - gl_state.line_width = width; - } -} - -void gl_state_set_polygon_mode(GLenum face, GLenum mode, bool force) { - switch (face) { - case GL_FRONT: - if (force || gl_state.polygon_mode != mode) { - glPolygonMode(GL_FRONT, mode); - gl_state.polygon_mode = mode; - } - break; - case GL_BACK: - if (force || gl_state.polygon_mode != mode) { - glPolygonMode(GL_BACK, mode); - gl_state.polygon_mode = mode; - } - break; - case GL_FRONT_AND_BACK: - if (force || gl_state.polygon_mode != mode) { - glPolygonMode(GL_FRONT_AND_BACK, mode); - gl_state.polygon_mode = mode; - } - break; - } -} - -void gl_state_set_primitive_restart_index(GLuint index, bool force) { - if (force || gl_state.primitive_restart_index != index) { - glPrimitiveRestartIndex(index); - gl_state.primitive_restart_index = index; - } -} - -void gl_state_set_scissor(const gl_state_rect& rect, bool force) { - if (force || gl_state.scissor_box.x != rect.x || gl_state.scissor_box.y != rect.y - || gl_state.scissor_box.width != rect.width || gl_state.scissor_box.height != rect.height) { - glScissor(rect.x, rect.y, rect.width, rect.height); - gl_state.scissor_box = rect; - } -} - -void gl_state_set_scissor(GLint x, GLint y, GLsizei width, GLsizei height, bool force) { - if (force || gl_state.scissor_box.x != x || gl_state.scissor_box.y != y - || gl_state.scissor_box.width != width || gl_state.scissor_box.height != height) { - glScissor(x, y, width, height); - gl_state.scissor_box.x = x; - gl_state.scissor_box.y = y; - gl_state.scissor_box.width = width; - gl_state.scissor_box.height = height; - } -} - -void gl_state_set_stencil_func(GLenum func, GLint ref, GLuint mask, bool force) { - if (force || gl_state.stencil_func != func - || gl_state.stencil_ref != ref || gl_state.stencil_value_mask != mask) { - glStencilFunc(func, ref, mask); - gl_state.stencil_func = func; - gl_state.stencil_ref = ref; - gl_state.stencil_value_mask = mask; - } -} - -void gl_state_set_stencil_mask(GLuint mask, bool force) { - if (force || gl_state.stencil_mask != mask) { - glStencilMask(mask); - gl_state.stencil_mask = mask; - } -} - -void gl_state_set_stencil_op(GLenum sfail, GLenum dpfail, GLenum dppass, bool force) { - if (force || gl_state.stencil_fail != sfail - || gl_state.stencil_dpfail != dpfail || gl_state.stencil_dppass != dppass) { - glStencilOp(sfail, dpfail, dppass); - gl_state.stencil_fail = sfail; - gl_state.stencil_dpfail = dpfail; - gl_state.stencil_dppass = dppass; - } -} - -void gl_state_set_viewport(const gl_state_rect& rect, bool force) { - if (force || gl_state.viewport.x != rect.x || gl_state.viewport.y != rect.y - || gl_state.viewport.width != rect.width || gl_state.viewport.height != rect.height) { - glViewport(rect.x, rect.y, rect.width, rect.height); - gl_state.viewport = rect; - } -} - -void gl_state_set_viewport(GLint x, GLint y, GLsizei width, GLsizei height, bool force) { - if (force || gl_state.viewport.x != x || gl_state.viewport.y != y - || gl_state.viewport.width != width || gl_state.viewport.height != height) { - glViewport(x, y, width, height); - gl_state.viewport.x = x; - gl_state.viewport.y = y; - gl_state.viewport.width = width; - gl_state.viewport.height = height; - } -} - -void gl_state_use_program(GLuint program, bool force) { - if (force || gl_state.program != program) { - glUseProgram(program); - gl_state.program = program; - } -} diff --git a/src/CRE/gl_state.hpp b/src/CRE/gl_state.hpp deleted file mode 100644 index 9b3aa843..00000000 --- a/src/CRE/gl_state.hpp +++ /dev/null @@ -1,149 +0,0 @@ -/* - by korenkonder - GitHub/GitLab: korenkonder -*/ - -#pragma once - -#include "../KKdLib/default.hpp" -#include "gl.hpp" - -struct gl_state_rect { - GLint x; - GLint y; - GLsizei width; - GLsizei height; -}; - -struct gl_state_struct { - GLuint program; - GLuint active_texture_index; - GLuint texture_binding_2d[32]; - GLuint texture_binding_cube_map[32]; - GLuint sampler_binding[32]; - GLboolean blend; - GLenum blend_src_rgb; - GLenum blend_src_alpha; - GLenum blend_dst_rgb; - GLenum blend_dst_alpha; - GLenum blend_mode_rgb; - GLenum blend_mode_alpha; - GLuint read_framebuffer_binding; - GLuint draw_framebuffer_binding; - GLuint vertex_array_binding; - GLuint array_buffer_binding; - GLuint element_array_buffer_binding; - GLuint uniform_buffer_binding; - GLuint uniform_buffer_bindings[14]; - GLintptr uniform_buffer_offsets[14]; - GLsizeiptr uniform_buffer_sizes[14]; - GLuint shader_storage_buffer_binding; - GLuint shader_storage_buffer_bindings[14]; - GLintptr shader_storage_buffer_offsets[14]; - GLsizeiptr shader_storage_buffer_sizes[14]; - GLboolean color_mask[4]; - GLboolean cull_face; - GLenum cull_face_mode; - GLboolean depth_test; - GLenum depth_func; - GLboolean depth_mask; - GLfloat line_width; - GLenum polygon_mode; - GLboolean multisample; - GLboolean primitive_restart; - GLuint primitive_restart_index; - gl_state_rect scissor_box; - GLboolean scissor_test; - GLboolean stencil_test; - GLenum stencil_func; - GLenum stencil_fail; - GLenum stencil_dpfail; - GLenum stencil_dppass; - GLuint stencil_mask; - GLint stencil_ref; - GLuint stencil_value_mask; - gl_state_rect viewport; -}; - -extern gl_state_struct gl_state; - -extern void gl_state_active_bind_texture_2d(int32_t index, GLuint texture, bool force = false); -extern void gl_state_active_bind_texture_cube_map(int32_t index, GLuint texture, bool force = false); -extern void gl_state_active_texture(size_t index, bool force = false); -extern void gl_state_bind_framebuffer(GLuint framebuffer, bool force = false); -extern void gl_state_bind_read_framebuffer(GLuint framebuffer, bool force = false); -extern void gl_state_bind_draw_framebuffer(GLuint framebuffer, bool force = false); -extern void gl_state_bind_vertex_array(GLuint array, bool force = false); -extern void gl_state_bind_array_buffer(GLuint buffer, bool force = false); -extern void gl_state_bind_element_array_buffer(GLuint buffer, bool force = false); -extern void gl_state_bind_uniform_buffer(GLuint buffer, bool force = false); -extern void gl_state_bind_uniform_buffer_base(GLuint index, GLuint buffer, bool force = false); -extern void gl_state_bind_uniform_buffer_range(GLuint index, - GLuint buffer, GLintptr offset, GLsizeiptr size, bool force = false); -extern void gl_state_bind_shader_storage_buffer(GLuint buffer, bool force = false); -extern void gl_state_bind_shader_storage_buffer_base(GLuint index, GLuint buffer, bool force = false); -extern void gl_state_bind_shader_storage_buffer_range(GLuint index, - GLuint buffer, GLintptr offset, GLsizeiptr size, bool force = false); -extern void gl_state_bind_texture_2d(GLuint texture, bool force = false); -extern void gl_state_bind_texture_cube_map(GLuint texture, bool force = false); -extern void gl_state_bind_sampler(int32_t index, GLuint sampler, bool force = false); -extern bool gl_state_check_uniform_buffer_binding(); -extern bool gl_state_check_uniform_buffer_binding_base(size_t index); -extern bool gl_state_check_shader_storage_buffer_binding(); -extern bool gl_state_check_shader_storage_buffer_binding_base(size_t index); -extern bool gl_state_check_texture_binding_2d(size_t index); -extern bool gl_state_check_texture_binding_cube_map(size_t index); -extern bool gl_state_check_sampler_binding(int32_t index, GLuint sampler); -extern void gl_state_disable_blend(bool force = false); -extern void gl_state_disable_cull_face(bool force = false); -extern void gl_state_disable_depth_test(bool force = false); -extern void gl_state_disable_multisample(bool force = false); -extern void gl_state_disable_primitive_restart(bool force = false); -extern void gl_state_disable_scissor_test(bool force = false); -extern void gl_state_disable_stencil_test(bool force = false); -extern void gl_state_enable_blend(bool force = false); -extern void gl_state_enable_cull_face(bool force = false); -extern void gl_state_enable_depth_test(bool force = false); -extern void gl_state_enable_multisample(bool force = false); -extern void gl_state_enable_primitive_restart(bool force = false); -extern void gl_state_enable_scissor_test(bool force = false); -extern void gl_state_enable_stencil_test(bool force = false); -extern void gl_state_get(); -extern void gl_state_get_all_gl_errors(); -extern GLenum gl_state_get_error(); -extern GLuint gl_state_get_program(); -extern gl_state_rect gl_state_get_scissor(); -extern void gl_state_get_scissor(GLint& x, GLint& y, GLsizei& width, GLsizei& height); -extern gl_state_rect gl_state_get_viewport(); -extern void gl_state_get_viewport(GLint& x, GLint& y, GLsizei& width, GLsizei& height); -extern void gl_state_set_blend_func(GLenum src, GLenum dst, bool force = false); -extern void gl_state_set_blend_func_separate(GLenum src_rgb, GLenum dst_rgb, - GLenum src_alpha, GLenum dst_alpha, bool force = false); -extern void gl_state_set_blend_equation(GLenum mode, bool force = false); -extern void gl_state_set_blend_equation_separate( - GLenum mode_rgb, GLenum mode_alpha, bool force = false); -extern void gl_state_set_color_mask(GLboolean red, GLboolean green, - GLboolean blue, GLboolean alpha, bool force = false); -extern void gl_state_set_cull_face_mode(GLenum mode, bool force = false); -extern void gl_state_set_depth_func(GLenum func, bool force = false); -extern void gl_state_set_depth_mask(GLboolean flag, bool force = false); -extern void gl_state_set_line_width(GLfloat width, bool force = false); -extern void gl_state_set_polygon_mode(GLenum face, GLenum mode, bool force = false); -extern void gl_state_set_primitive_restart_index(GLuint index, bool force = false); -extern void gl_state_set_scissor(const gl_state_rect& rect, bool force = false); -extern void gl_state_set_scissor(GLint x, GLint y, GLsizei width, GLsizei height, bool force = false); -extern void gl_state_set_stencil_func(GLenum func, GLint ref, GLuint mask, bool force = false); -extern void gl_state_set_stencil_mask(GLuint mask, bool force = false); -extern void gl_state_set_stencil_op(GLenum sfail, GLenum dpfail, GLenum dppass, bool force = false); -extern void gl_state_set_viewport(const gl_state_rect& rect, bool force = false); -extern void gl_state_set_viewport(GLint x, GLint y, GLsizei width, GLsizei height, bool force = false); -extern void gl_state_use_program(GLuint program, bool force = false); - -template -inline void gl_state_begin_event(const char(&str)[size]) { - glPushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0, (GLsizei)(size - 1), str); -} - -inline void gl_state_end_event() { - glPopDebugGroup(); -} diff --git a/src/CRE/light_param.cpp b/src/CRE/light_param.cpp index ec8e74df..bcc94207 100644 --- a/src/CRE/light_param.cpp +++ b/src/CRE/light_param.cpp @@ -157,7 +157,7 @@ void light_param_data_storage_data_set_ibl() { }; for (int32_t i = 0; i < 5; i++) - gl_state_active_bind_texture_cube_map(ibl_texture_index[i], + gl_rend_state.active_bind_texture_cube_map(ibl_texture_index[i], light_param_data_storage_data->textures[i]); } diff --git a/src/CRE/mdl/disp_manager.cpp b/src/CRE/mdl/disp_manager.cpp index 64a6e58d..d136e46d 100644 --- a/src/CRE/mdl/disp_manager.cpp +++ b/src/CRE/mdl/disp_manager.cpp @@ -2105,12 +2105,12 @@ namespace mdl { void(*func)(render_context * rctx, const ObjSubMeshArgs * args) = draw_sub_mesh_default; for (int32_t i = 0; i < 5; i++) - gl_state_active_bind_texture_2d(i, rctx->empty_texture_2d->glid); - gl_state_active_bind_texture_cube_map(5, rctx->empty_texture_cube_map->glid); - gl_state_active_texture(0); - gl_state_set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gl_rend_state.active_bind_texture_2d(i, rctx->empty_texture_2d->glid); + gl_rend_state.active_bind_texture_cube_map(5, rctx->empty_texture_cube_map->glid); + gl_rend_state.active_texture(0); + gl_rend_state.set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); uniform_value_reset(); - gl_state_get(); + gl_rend_state.get(); switch (type) { case OBJ_TYPE_TRANSLUCENT: @@ -2118,7 +2118,7 @@ namespace mdl { if (depth_mask) func = draw_sub_mesh_translucent; else - gl_state_set_depth_mask(GL_FALSE); + gl_rend_state.set_depth_mask(GL_FALSE); alpha_test = 1; min_alpha = 0.0f; @@ -2137,12 +2137,12 @@ namespace mdl { break; case OBJ_TYPE_TYPE_6: func = draw_sub_mesh_translucent; - gl_state_set_color_mask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); + gl_rend_state.set_color_mask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); rctx->draw_state->shader_index = SHADER_FT_SIL; break; case OBJ_TYPE_TYPE_7: func = draw_sub_mesh_translucent; - gl_state_set_color_mask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); + gl_rend_state.set_color_mask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); rctx->draw_state->shader_index = SHADER_FT_SIL; alpha_test = 1; @@ -2150,7 +2150,7 @@ namespace mdl { alpha_threshold = 0.99999994f; break; case OBJ_TYPE_REFLECT_CHARA_OPAQUE: - gl_state_set_cull_face_mode(GL_FRONT); + gl_rend_state.set_cull_face_mode(GL_FRONT); if (!reflect_draw) { if (reflect) @@ -2160,7 +2160,7 @@ namespace mdl { } break; case OBJ_TYPE_REFLECT_CHARA_TRANSLUCENT: - gl_state_set_cull_face_mode(GL_FRONT); + gl_rend_state.set_cull_face_mode(GL_FRONT); min_alpha = 0.0f; @@ -2172,7 +2172,7 @@ namespace mdl { } break; case OBJ_TYPE_REFLECT_CHARA_TRANSPARENT: - gl_state_set_cull_face_mode(GL_FRONT); + gl_rend_state.set_cull_face_mode(GL_FRONT); alpha_test = 1; min_alpha = 0.1f; @@ -2190,18 +2190,18 @@ namespace mdl { alpha_threshold = 0.5f; if (reflect_draw) - gl_state_set_cull_face_mode(GL_FRONT); + gl_rend_state.set_cull_face_mode(GL_FRONT); else if (!reflect_texture_mask) func = draw_sub_mesh_reflect_reflect_map; break; case OBJ_TYPE_REFLECT_TRANSLUCENT: - gl_state_set_depth_mask(GL_FALSE); + gl_rend_state.set_depth_mask(GL_FALSE); min_alpha = 0.0f; alpha_threshold = 0.0f; if (reflect_draw) - gl_state_set_cull_face_mode(GL_FRONT); + gl_rend_state.set_cull_face_mode(GL_FRONT); break; case OBJ_TYPE_REFLECT_TRANSPARENT: alpha_test = 1; @@ -2209,10 +2209,10 @@ namespace mdl { alpha_threshold = 0.5f; if (reflect_draw) - gl_state_set_cull_face_mode(GL_FRONT); + gl_rend_state.set_cull_face_mode(GL_FRONT); break; case OBJ_TYPE_REFRACT_TRANSLUCENT: - gl_state_set_depth_mask(GL_FALSE); + gl_rend_state.set_depth_mask(GL_FALSE); min_alpha = 0.0f; alpha_threshold = 0.0f; @@ -2226,7 +2226,7 @@ namespace mdl { func = draw_sub_mesh_sss; if (reflect_draw) - gl_state_set_cull_face_mode(GL_FRONT); + gl_rend_state.set_cull_face_mode(GL_FRONT); break; case OBJ_TYPE_TRANSPARENT_ALPHA_ORDER_1: case OBJ_TYPE_TRANSPARENT_ALPHA_ORDER_2: @@ -2238,7 +2238,7 @@ namespace mdl { case OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_1: case OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_2: case OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_3: - gl_state_set_depth_mask(GL_FALSE); + gl_rend_state.set_depth_mask(GL_FALSE); alpha_test = 1; min_alpha = 0.0f; @@ -2295,53 +2295,53 @@ namespace mdl { case OBJ_TYPE_TRANSLUCENT: case OBJ_TYPE_TRANSLUCENT_SORT_BY_RADIUS: if (!depth_mask) - gl_state_set_depth_mask(GL_TRUE); + gl_rend_state.set_depth_mask(GL_TRUE); break; case OBJ_TYPE_TYPE_6: case OBJ_TYPE_TYPE_7: rctx_ptr->draw_state->shader_index = -1; - gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + gl_rend_state.set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); break; case OBJ_TYPE_REFLECT_CHARA_OPAQUE: case OBJ_TYPE_REFLECT_CHARA_TRANSLUCENT: case OBJ_TYPE_REFLECT_CHARA_TRANSPARENT: - gl_state_set_cull_face_mode(GL_BACK); + gl_rend_state.set_cull_face_mode(GL_BACK); break; case OBJ_TYPE_REFLECT_OPAQUE: if (reflect_draw) - gl_state_set_cull_face_mode(GL_FRONT); + gl_rend_state.set_cull_face_mode(GL_FRONT); break; case OBJ_TYPE_REFLECT_TRANSLUCENT: if (reflect_draw) - gl_state_set_cull_face_mode(GL_FRONT); - gl_state_set_depth_mask(GL_TRUE); + gl_rend_state.set_cull_face_mode(GL_FRONT); + gl_rend_state.set_depth_mask(GL_TRUE); break; case OBJ_TYPE_REFLECT_TRANSPARENT: if (reflect_draw) - gl_state_set_cull_face_mode(GL_FRONT); + gl_rend_state.set_cull_face_mode(GL_FRONT); break; case OBJ_TYPE_REFRACT_TRANSLUCENT: if (reflect_draw) - gl_state_set_cull_face_mode(GL_FRONT); - gl_state_set_depth_mask(GL_TRUE); + gl_rend_state.set_cull_face_mode(GL_FRONT); + gl_rend_state.set_depth_mask(GL_TRUE); break; case OBJ_TYPE_SSS: if (reflect_draw) - gl_state_set_cull_face_mode(GL_BACK); + gl_rend_state.set_cull_face_mode(GL_BACK); break; case OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_1: case OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_2: case OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_3: - gl_state_set_depth_mask(GL_TRUE); + gl_rend_state.set_depth_mask(GL_TRUE); break; } uniform_value_reset(); - gl_state_bind_vertex_array(0); + gl_rend_state.bind_vertex_array(0); shader::unbind(); - gl_state_set_blend_func(GL_ONE, GL_ZERO); + gl_rend_state.set_blend_func(GL_ONE, GL_ZERO); for (int32_t i = 0; i < 5; i++) - gl_state_bind_sampler(i, 0); + gl_rend_state.bind_sampler(i, 0); } void DispManager::draw(mdl::ObjTypeLocal type, int32_t depth_mask, bool reflect_texture_mask) { @@ -2356,19 +2356,19 @@ namespace mdl { void(*func)(render_context * rctx, const ObjSubMeshArgs * args) = draw_sub_mesh_default; for (int32_t i = 0; i < 5; i++) - gl_state_active_bind_texture_2d(i, rctx->empty_texture_2d->glid); - gl_state_active_bind_texture_cube_map(5, rctx->empty_texture_cube_map->glid); - gl_state_active_texture(0); - gl_state_set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gl_rend_state.active_bind_texture_2d(i, rctx->empty_texture_2d->glid); + gl_rend_state.active_bind_texture_cube_map(5, rctx->empty_texture_cube_map->glid); + gl_rend_state.active_texture(0); + gl_rend_state.set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); uniform_value_reset(); - gl_state_get(); + gl_rend_state.get(); switch (type) { case OBJ_TYPE_LOCAL_TRANSLUCENT: if (depth_mask) func = draw_sub_mesh_translucent; else - gl_state_set_depth_mask(GL_FALSE); + gl_rend_state.set_depth_mask(GL_FALSE); alpha_test = 1; min_alpha = 0.0f; @@ -2399,16 +2399,16 @@ namespace mdl { switch (type) { case OBJ_TYPE_LOCAL_TRANSLUCENT: if (!depth_mask) - gl_state_set_depth_mask(GL_TRUE); + gl_rend_state.set_depth_mask(GL_TRUE); break; } uniform_value_reset(); - gl_state_bind_vertex_array(0); + gl_rend_state.bind_vertex_array(0); shader::unbind(); - gl_state_set_blend_func(GL_ONE, GL_ZERO); + gl_rend_state.set_blend_func(GL_ONE, GL_ZERO); for (int32_t i = 0; i < 5; i++) - gl_state_bind_sampler(i, 0); + gl_rend_state.bind_sampler(i, 0); } void DispManager::draw(mdl::ObjTypeReflect type, int32_t depth_mask, bool reflect_texture_mask) { @@ -2424,25 +2424,25 @@ namespace mdl { void(*func)(render_context * rctx, const ObjSubMeshArgs * args) = draw_sub_mesh_default; for (int32_t i = 0; i < 5; i++) - gl_state_active_bind_texture_2d(i, rctx->empty_texture_2d->glid); - gl_state_active_bind_texture_cube_map(5, rctx->empty_texture_cube_map->glid); - gl_state_active_texture(0); - gl_state_set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gl_rend_state.active_bind_texture_2d(i, rctx->empty_texture_2d->glid); + gl_rend_state.active_bind_texture_cube_map(5, rctx->empty_texture_cube_map->glid); + gl_rend_state.active_texture(0); + gl_rend_state.set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); uniform_value_reset(); - gl_state_get(); + gl_rend_state.get(); switch (type) { case OBJ_TYPE_REFLECT_TRANSLUCENT_SORT_BY_RADIUS: if (depth_mask) func = draw_sub_mesh_translucent; else - gl_state_set_depth_mask(GL_FALSE); + gl_rend_state.set_depth_mask(GL_FALSE); alpha_test = 1; min_alpha = 0.0f; alpha_threshold = 0.0f; - gl_state_set_cull_face_mode(GL_FRONT); + gl_rend_state.set_cull_face_mode(GL_FRONT); break; } rctx->set_batch_alpha_threshold(alpha_threshold); @@ -2464,16 +2464,16 @@ namespace mdl { switch (type) { case OBJ_TYPE_REFLECT_TRANSLUCENT_SORT_BY_RADIUS: if (!depth_mask) - gl_state_set_cull_face_mode(GL_BACK); + gl_rend_state.set_cull_face_mode(GL_BACK); break; } uniform_value_reset(); - gl_state_bind_vertex_array(0); + gl_rend_state.bind_vertex_array(0); shader::unbind(); - gl_state_set_blend_func(GL_ONE, GL_ZERO); + gl_rend_state.set_blend_func(GL_ONE, GL_ZERO); for (int32_t i = 0; i < 5; i++) - gl_state_bind_sampler(i, 0); + gl_rend_state.bind_sampler(i, 0); } /*void DispManager::draw_show_vector(ObjType type, int32_t show_vector) { @@ -2483,12 +2483,12 @@ namespace mdl { render_context* rctx = rctx_ptr; for (int32_t i = 0; i < 5; i++) - gl_state_active_bind_texture_2d(i, rctx->empty_texture_2d); - gl_state_active_bind_texture_cube_map(5, rctx->empty_texture_cube_map); - gl_state_active_texture(0); - gl_state_set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gl_rend_state.active_bind_texture_2d(i, rctx->empty_texture_2d); + gl_rend_state.active_bind_texture_cube_map(5, rctx->empty_texture_cube_map); + gl_rend_state.active_texture(0); + gl_rend_state.set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); uniform_value_reset(); - gl_state_get(); + gl_rend_state.get(); for (ObjData*& i : obj[type]) { switch (i->type) { @@ -2503,7 +2503,7 @@ namespace mdl { } break; } } - gl_state_set_blend_func(GL_ONE, GL_ZERO); + gl_rend_state.set_blend_func(GL_ONE, GL_ZERO); }*/ void DispManager::entry_list(ObjType type, ObjData* data) { diff --git a/src/CRE/mdl/draw_object.cpp b/src/CRE/mdl/draw_object.cpp index 6ee24818..39e4b9c3 100644 --- a/src/CRE/mdl/draw_object.cpp +++ b/src/CRE/mdl/draw_object.cpp @@ -108,7 +108,7 @@ namespace mdl { else rctx->set_batch_blend_color_offset_color(color, 0.0f); - gl_state_bind_vertex_array(vao); + gl_rend_state.bind_vertex_array(vao); //rctx->set_shader(SHADER_FT_SIMPLE); rctx->set_shader(etc->constant ? SHADER_FT_CONSTANT : SHADER_FT_SIMPLE); rctx->set_render_data(); @@ -117,11 +117,11 @@ namespace mdl { shaders_ft.draw_elements(GL_TRIANGLES, etc->count, GL_UNSIGNED_INT, 0); break; case mdl::ETC_OBJ_GRID: - gl_state_set_line_width(0.2f); + gl_rend_state.set_line_width(0.2f); shaders_ft.draw_arrays(GL_LINES, 0, etc->count); - gl_state_set_line_width(2.0f); + gl_rend_state.set_line_width(2.0f); shaders_ft.draw_arrays(GL_LINES, (GLint)etc->count, 4); - gl_state_set_line_width(1.0f); + gl_rend_state.set_line_width(1.0f); break; case mdl::ETC_OBJ_CUBE: if (etc->data.sphere.wire) @@ -188,9 +188,9 @@ namespace mdl { if (rctx->get_shared_storage_uniform_buffer_data( (size_t)args->mats, buffer, offset, size, !!GLAD_GL_VERSION_4_3)) if (GLAD_GL_VERSION_4_3) - gl_state_bind_shader_storage_buffer_range(0, buffer, (GLintptr)offset, (GLsizeiptr)size); + gl_rend_state.bind_shader_storage_buffer_range(0, buffer, (GLintptr)offset, (GLsizeiptr)size); else - gl_state_bind_uniform_buffer_range(6, buffer, (GLintptr)offset, (GLsizeiptr)size); + gl_rend_state.bind_uniform_buffer_range(6, buffer, (GLintptr)offset, (GLsizeiptr)size); } else { vec4* g_joint_transforms = rctx->data.buffer_skinning_data.g_joint_transforms; @@ -213,7 +213,7 @@ namespace mdl { rctx->set_batch_worlds(mat4_identity); uniform_value[U_SKINNING] = 1; - gl_state_bind_vertex_array(vao); + gl_rend_state.bind_vertex_array(vao); func(rctx, args); uniform_value[U_SKINNING] = 0; } @@ -227,7 +227,7 @@ namespace mdl { _mat = *mat; uniform_value[U_SKINNING] = 0; - gl_state_bind_vertex_array(vao); + gl_rend_state.bind_vertex_array(vao); if (func != draw_sub_mesh_default || !args->instances_count) { draw_object_model_mat_load(rctx, _mat); func(rctx, args); @@ -422,7 +422,7 @@ namespace mdl { draw_object_vertex_attrib_set_default(rctx, args); if (args->material->material.attrib.m.double_sided) - gl_state_disable_cull_face(); + gl_rend_state.disable_cull_face(); GLuint tex_id = -1; int32_t tex_index = 0; @@ -463,7 +463,7 @@ namespace mdl { if (tex_id == -1) tex_id = rctx->empty_texture_2d->glid; - gl_state_active_bind_texture_2d(tex_index, tex_id); + gl_rend_state.active_bind_texture_2d(tex_index, tex_id); int32_t wrap_s; if (texdata->attrib.m.mirror_u) @@ -482,7 +482,7 @@ namespace mdl { wrap_t = 0; texture* tex = texture_manager_get_texture(::texture_id(0x00, texture_id)); - gl_state_bind_sampler(tex_index, rctx->samplers[(wrap_t * 3 + wrap_s) * 2 + gl_rend_state.bind_sampler(tex_index, rctx->samplers[(wrap_t * 3 + wrap_s) * 2 + (!tex || tex->max_mipmap_level > 0 ? 1 : 0)]); } } @@ -498,9 +498,9 @@ namespace mdl { sub_mesh->index_offset); if (tex_id != -1) - gl_state_active_bind_texture_2d(tex_index, rctx->empty_texture_2d->glid); + gl_rend_state.active_bind_texture_2d(tex_index, rctx->empty_texture_2d->glid); - gl_state_enable_cull_face(); + gl_rend_state.enable_cull_face(); draw_object_vertex_attrib_reset_default(args); if (rctx->draw_state->shader_index != -1) @@ -594,7 +594,7 @@ static bool draw_object_blend_set(render_context* rctx, } } } - gl_state_set_blend_func(src_blend_factor, dst_blend_factor); + gl_rend_state.set_blend_func(src_blend_factor, dst_blend_factor); return dst_blend_factor == GL_ONE; } @@ -632,17 +632,17 @@ static void draw_object_chara_color_fog_set(render_context* rctx, const mdl::Obj static void draw_object_material_reset_default(const obj_material_data* mat_data) { if (mat_data) { - gl_state_enable_cull_face(); + gl_rend_state.enable_cull_face(); obj_material_attrib_member attrib = mat_data->material.attrib.m; if ((attrib.alpha_texture || attrib.alpha_material) && !attrib.punch_through) - gl_state_set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gl_rend_state.set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } uniform_value_reset(); } static void draw_object_material_reset_reflect(render_context* rctx) { - gl_state_active_bind_texture_2d(0, rctx->empty_texture_2d->glid); - gl_state_enable_cull_face(); + gl_rend_state.active_bind_texture_2d(0, rctx->empty_texture_2d->glid); + gl_rend_state.enable_cull_face(); uniform_value_reset(); } @@ -713,11 +713,11 @@ static void draw_object_material_set_default(render_context* rctx, const mdl::Ob } if (tex_type == OBJ_MATERIAL_TEXTURE_ENVIRONMENT_CUBE) { - gl_state_active_bind_texture_cube_map(tex_index, tex_id); - gl_state_bind_sampler(tex_index, 0); + gl_rend_state.active_bind_texture_cube_map(tex_index, tex_id); + gl_rend_state.bind_sampler(tex_index, 0); } else { - gl_state_active_bind_texture_2d(tex_index, tex_id); + gl_rend_state.active_bind_texture_2d(tex_index, tex_id); int32_t wrap_s; if (texdata->attrib.m.mirror_u) @@ -736,7 +736,7 @@ static void draw_object_material_set_default(render_context* rctx, const mdl::Ob wrap_t = 0; texture* tex = texture_manager_get_texture(texture_id); - gl_state_bind_sampler(tex_index, rctx->samplers[(wrap_t * 3 + wrap_s) * 2 + gl_rend_state.bind_sampler(tex_index, rctx->samplers[(wrap_t * 3 + wrap_s) * 2 + (!tex || tex->max_mipmap_level > 0 ? 1 : 0)]); } @@ -761,7 +761,7 @@ static void draw_object_material_set_default(render_context* rctx, const mdl::Ob } if (material->material.attrib.m.double_sided) { - gl_state_disable_cull_face(); + gl_rend_state.disable_cull_face(); if (!material->material.attrib.m.normal_dir_light) uniform_value[U0B] = 1; } @@ -901,7 +901,7 @@ static void draw_object_material_set_reflect(render_context* rctx, const mdl::Ob const obj_material_data* material = args->material; const std::vector* textures = args->textures; if (material->material.attrib.m.double_sided) - gl_state_disable_cull_face(); + gl_rend_state.disable_cull_face(); const obj_material_texture_data* texdata = material->material.texdata; for (int32_t i = 0; i < 1; i++, texdata++) { @@ -924,7 +924,7 @@ static void draw_object_material_set_reflect(render_context* rctx, const mdl::Ob if (tex_id == -1) tex_id = rctx->empty_texture_2d->glid; - gl_state_active_bind_texture_2d(i, tex_id); + gl_rend_state.active_bind_texture_2d(i, tex_id); int32_t wrap_s; if (texdata->attrib.m.mirror_u) @@ -943,7 +943,7 @@ static void draw_object_material_set_reflect(render_context* rctx, const mdl::Ob wrap_t = 0; texture* tex = texture_manager_get_texture(texture_id); - gl_state_bind_sampler(i, rctx->samplers[(wrap_t * 3 + wrap_s) * 2 + gl_rend_state.bind_sampler(i, rctx->samplers[(wrap_t * 3 + wrap_s) * 2 + (!tex || tex->max_mipmap_level > 0 ? 1 : 0)]); } @@ -1043,7 +1043,7 @@ static void draw_object_vertex_attrib_reset_default(const mdl::ObjSubMeshArgs* a /*if (args->instances_count) uniform_value[U_INSTANCE] = 0;*/ - gl_state_active_texture(0); + gl_rend_state.active_texture(0); } static void draw_object_vertex_attrib_reset_reflect(const mdl::ObjSubMeshArgs* args) { @@ -1058,7 +1058,7 @@ static void draw_object_vertex_attrib_reset_reflect(const mdl::ObjSubMeshArgs* a uniform_value[U_MORPH_COLOR] = 0; } - gl_state_active_texture(0); + gl_rend_state.active_texture(0); } static void draw_object_vertex_attrib_set_default(render_context* rctx, const mdl::ObjSubMeshArgs* args) { diff --git a/src/CRE/object.cpp b/src/CRE/object.cpp index 018973f0..f95961d5 100644 --- a/src/CRE/object.cpp +++ b/src/CRE/object.cpp @@ -12,7 +12,7 @@ #include "../KKdLib/msgpack.hpp" #include "../KKdLib/str_utils.hpp" #include "data.hpp" -#include "gl_state.hpp" +#include "gl_rend_state.hpp" #include "render_context.hpp" #include "shader_ft.hpp" #include diff --git a/src/CRE/render.cpp b/src/CRE/render.cpp index 05e81703..32f47b47 100644 --- a/src/CRE/render.cpp +++ b/src/CRE/render.cpp @@ -5,7 +5,7 @@ #include "render.hpp" #include "rob/rob.hpp" -#include "gl_state.hpp" +#include "gl_rend_state.hpp" #include "render_context.hpp" #include "shader_ft.hpp" #include "stage.hpp" @@ -135,7 +135,7 @@ namespace rndr { render_context* rctx = rctx_ptr; for (int32_t i = 0; i < 8; i++) - gl_state_bind_sampler(i, 0); + gl_rend_state.bind_sampler(i, 0); dof->apply(&rend_texture[0], &rctx_ptr->render_buffer); @@ -163,9 +163,9 @@ namespace rndr { else uniform_value[U_REDUCE] = 0; - gl_state_set_viewport(0, 0, t->width, t->height); - gl_state_active_bind_texture_2d(0, taa_tex[taa_texture_selector]->glid); - gl_state_bind_sampler(0, rctx->render_samplers[0]); + gl_rend_state.set_viewport(0, 0, t->width, t->height); + gl_rend_state.active_bind_texture_2d(0, taa_tex[taa_texture_selector]->glid); + gl_rend_state.bind_sampler(0, rctx->render_samplers[0]); shaders_ft.set(SHADER_FT_REDUCE); draw_quad(render_post_width[0], render_post_height[0], render_post_width_scale, render_post_height_scale, @@ -185,7 +185,7 @@ namespace rndr { if (taa_blend < 0.0f || taa_blend >= 1.0f) taa_texture = taa_texture_selector; else { - gl_state_begin_event("taa_or_blur"); + gl_rend_state.begin_event("taa_or_blur"); bool blur; GLuint sampler; if (taa_blend > 0.99f) { @@ -199,13 +199,13 @@ namespace rndr { taa_texture = 2; taa_buffer[2].Bind(); - gl_state_set_viewport(0, 0, render_width[0], render_height[0]); - gl_state_active_bind_texture_2d(0, taa_tex[taa_texture_selector]->glid); - gl_state_bind_sampler(0, sampler); + gl_rend_state.set_viewport(0, 0, render_width[0], render_height[0]); + gl_rend_state.active_bind_texture_2d(0, taa_tex[taa_texture_selector]->glid); + gl_rend_state.bind_sampler(0, sampler); if (blur) { - gl_state_active_bind_texture_2d(2, rend_texture[0].depth_texture->glid); - gl_state_bind_sampler(2, sampler); + gl_rend_state.active_bind_texture_2d(2, rend_texture[0].depth_texture->glid); + gl_rend_state.bind_sampler(2, sampler); mat4 mat; mat4_invert(&cam_view_projection, &mat); @@ -224,8 +224,8 @@ namespace rndr { int32_t taa_texture_selector = this->taa_texture_selector + 1; if (taa_texture_selector > taa) taa_texture_selector = 0; - gl_state_active_bind_texture_2d(1, taa_tex[taa_texture_selector]->glid); - gl_state_bind_sampler(1, sampler); + gl_rend_state.active_bind_texture_2d(1, taa_tex[taa_texture_selector]->glid); + gl_rend_state.bind_sampler(1, sampler); uniform_value[U_REDUCE] = 5; } @@ -234,7 +234,7 @@ namespace rndr { draw_quad(render_post_width[0], render_post_height[0], render_post_width_scale, render_post_height_scale, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, taa_blend); - gl_state_end_event(); + gl_rend_state.end_event(); } if (taa) { @@ -245,10 +245,10 @@ namespace rndr { } rctx->screen_buffer.Bind(); - gl_state_set_viewport(0, 0, rctx->sprite_width, rctx->sprite_height); + gl_rend_state.set_viewport(0, 0, rctx->sprite_width, rctx->sprite_height); if (ssaa) { - gl_state_active_bind_texture_2d(0, taa_tex[taa_texture]->glid); - gl_state_bind_sampler(0, rctx->render_samplers[0]); + gl_rend_state.active_bind_texture_2d(0, taa_tex[taa_texture]->glid); + gl_rend_state.bind_sampler(0, rctx->render_samplers[0]); uniform_value[U_ALPHA_MASK] = ss_alpha_mask ? 1 : 0; uniform_value[U_REDUCE] = 0; shaders_ft.set(SHADER_FT_REDUCE); @@ -258,11 +258,11 @@ namespace rndr { uniform_value[U_ALPHA_MASK] = 0; } else { - gl_state_active_bind_texture_2d(0, taa_tex[taa_texture]->glid); + gl_rend_state.active_bind_texture_2d(0, taa_tex[taa_texture]->glid); if (mag_filter == MAG_FILTER_NEAREST) - gl_state_bind_sampler(0, rctx->render_samplers[1]); + gl_rend_state.bind_sampler(0, rctx->render_samplers[1]); else - gl_state_bind_sampler(0, rctx->render_samplers[0]); + gl_rend_state.bind_sampler(0, rctx->render_samplers[0]); switch (mag_filter) { case MAG_FILTER_NEAREST: @@ -292,7 +292,7 @@ namespace rndr { shader::unbind(); for (int32_t i = 0; i < 8; i++) - gl_state_bind_sampler(i, 0); + gl_rend_state.bind_sampler(i, 0); } void Render::bind_render_texture(bool aet_back) { @@ -302,18 +302,18 @@ namespace rndr { } else rend_texture[0].Bind(); - gl_state_set_viewport(0, 0, render_width[0], render_height[0]); + gl_rend_state.set_viewport(0, 0, render_width[0], render_height[0]); } void Render::calc_exposure_chara_data(camera* cam) { shader::unbind(); - gl_state_set_color_mask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - gl_state_set_depth_mask(GL_FALSE); - gl_state_disable_cull_face(); + gl_rend_state.set_color_mask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); + gl_rend_state.set_depth_mask(GL_FALSE); + gl_rend_state.disable_cull_face(); shaders_ft.set(SHADER_FT_SUN_NO_TEXTURED); - gl_state_bind_vertex_array(rctx_ptr->common_vao); + gl_rend_state.bind_vertex_array(rctx_ptr->common_vao); rctx_ptr->sun_quad_ubo.Bind(0); ExposureCharaData* chara_data = exposure_chara_data; @@ -363,11 +363,11 @@ namespace rndr { } } - gl_state_bind_vertex_array(0); + gl_rend_state.bind_vertex_array(0); - gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - gl_state_set_depth_mask(GL_TRUE); - gl_state_enable_cull_face(); + gl_rend_state.set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + gl_rend_state.set_depth_mask(GL_TRUE); + gl_rend_state.enable_cull_face(); } void Render::calc_projection_matrix(mat4* mat, float_t fov, float_t aspect, float_t z_near, float_t z_far, @@ -406,7 +406,7 @@ namespace rndr { rctx_ptr->quad_ubo.WriteMemory(quad); rctx_ptr->quad_ubo.Bind(0); - gl_state_bind_vertex_array(rctx_ptr->common_vao); + gl_rend_state.bind_vertex_array(rctx_ptr->common_vao); shaders_ft.draw_arrays(GL_TRIANGLE_STRIP, 0, 4); } @@ -471,9 +471,9 @@ namespace rndr { sun_quad_shader_data shader_data = {}; shader_data.g_emission = emission; - gl_state_active_bind_texture_2d(0, tex); + gl_rend_state.active_bind_texture_2d(0, tex); shaders_ft.set(SHADER_FT_SUN); - gl_state_bind_vertex_array(rctx_ptr->common_vao); + gl_rend_state.bind_vertex_array(rctx_ptr->common_vao); rctx_ptr->sun_quad_ubo.Bind(0); int32_t query_index = (lens_flare_query_index + 1) % 3; @@ -486,9 +486,9 @@ namespace rndr { if (lens_flare_query_data[next_query_index] == -1) lens_flare_query_data[next_query_index] = 0; - gl_state_set_color_mask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - gl_state_set_depth_mask(GL_FALSE); - gl_state_disable_cull_face(); + gl_rend_state.set_color_mask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); + gl_rend_state.set_depth_mask(GL_FALSE); + gl_rend_state.disable_cull_face(); mat4 mat; mat4_mul_translate(&cam->view, &position, &mat); @@ -523,9 +523,9 @@ namespace rndr { shaders_ft.draw_arrays(GL_TRIANGLE_STRIP, 0, 4); glEndQuery(GL_SAMPLES_PASSED); - gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - gl_state_set_depth_mask(GL_TRUE); - gl_state_enable_cull_face(); + gl_rend_state.set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + gl_rend_state.set_depth_mask(GL_TRUE); + gl_rend_state.enable_cull_face(); if (lens_shaft_query_data[query_index] != -1) { int32_t res = 0; @@ -542,9 +542,9 @@ namespace rndr { } if (emission.x + emission.y + emission.z > 0.0f) { - gl_state_enable_blend(); - gl_state_set_blend_func(GL_ONE, GL_ONE); - gl_state_set_depth_mask(GL_FALSE); + gl_rend_state.enable_blend(); + gl_rend_state.set_blend_func(GL_ONE, GL_ONE); + gl_rend_state.set_depth_mask(GL_FALSE); mat4_mul_translate(&cam->view, &position, &mat); mat4_clear_rot(&mat, &mat); @@ -560,13 +560,13 @@ namespace rndr { shaders_ft.draw_arrays(GL_TRIANGLE_STRIP, 0, 4); - gl_state_disable_blend(); - gl_state_set_blend_func(GL_ONE, GL_ZERO); - gl_state_set_depth_mask(GL_TRUE); + gl_rend_state.disable_blend(); + gl_rend_state.set_blend_func(GL_ONE, GL_ZERO); + gl_rend_state.set_depth_mask(GL_TRUE); } - gl_state_active_bind_texture_2d(0, 0); - gl_state_bind_vertex_array(0); + gl_rend_state.active_bind_texture_2d(0, 0); + gl_rend_state.bind_vertex_array(0); if (lens_flare_appear_power <= 0.01f) lens_flare_appear_power = 0.0f; @@ -1100,13 +1100,13 @@ namespace rndr { texture* tex = task_movie_get_texture(); if (tex) { movie_textures[0].Bind(); - gl_state_active_bind_texture_2d(0, tex->glid); - gl_state_bind_sampler(0, rctx_ptr->render_samplers[0]); - gl_state_set_viewport(0, 0, movie_textures_data[0]->width, movie_textures_data[0]->height); + gl_rend_state.active_bind_texture_2d(0, tex->glid); + gl_rend_state.bind_sampler(0, rctx_ptr->render_samplers[0]); + gl_rend_state.set_viewport(0, 0, movie_textures_data[0]->width, movie_textures_data[0]->height); uniform_value[U_REDUCE] = 0; shaders_ft.set(SHADER_FT_REDUCE); draw_quad(tex->width, tex->height, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f); - gl_state_bind_framebuffer(0); + gl_rend_state.bind_framebuffer(0); } } } @@ -1427,9 +1427,9 @@ namespace rndr { shaders_ft.set(SHADER_FT_REDUCE); for (int32_t i = 1; i < downsample_count - 1; i++) { rend_texture[i].Bind(); - gl_state_active_bind_texture_2d(0, rend_texture[i - 1].GetColorTex()); - gl_state_bind_sampler(0, rctx->render_samplers[0]); - gl_state_set_viewport(0, 0, render_width[i], render_height[i]); + gl_rend_state.active_bind_texture_2d(0, rend_texture[i - 1].GetColorTex()); + gl_rend_state.bind_sampler(0, rctx->render_samplers[0]); + gl_rend_state.set_viewport(0, 0, render_width[i], render_height[i]); draw_quad( render_post_width[i - 1], render_post_height[i - 1], render_post_width_scale, render_post_height_scale, @@ -1440,18 +1440,18 @@ namespace rndr { shaders_ft.set(SHADER_FT_REDUCE); int32_t downsample = max_def(downsample_count - 2, 0); - gl_state_set_viewport(0, 0, reduce_width[0], reduce_height[0]); + gl_rend_state.set_viewport(0, 0, reduce_width[0], reduce_height[0]); reduce_texture[0].Bind(); - gl_state_active_bind_texture_2d(0, rend_texture[downsample].GetColorTex()); - gl_state_bind_sampler(0, rctx->render_samplers[0]); + gl_rend_state.active_bind_texture_2d(0, rend_texture[downsample].GetColorTex()); + gl_rend_state.bind_sampler(0, rctx->render_samplers[0]); draw_quad( render_post_width[downsample], render_post_height[downsample], render_post_width_scale, render_post_height_scale, 0.0f, 0.0f, 1.0f, 1.1f, 1.1f, 1.1f, 0.0f); downsample_texture.Bind(); - gl_state_active_bind_texture_2d(0, reduce_tex[0]->glid); - gl_state_bind_sampler(0, rctx->render_samplers[2]); + gl_rend_state.active_bind_texture_2d(0, reduce_tex[0]->glid); + gl_rend_state.bind_sampler(0, rctx->render_samplers[2]); for (int32_t i = 1; i < 5; i++) { float_t scale; if (i == 4) { @@ -1466,11 +1466,11 @@ namespace rndr { shaders_ft.set(SHADER_FT_REDUCE); } - gl_state_set_viewport(0, 0, reduce_width[i], reduce_height[i]); + gl_rend_state.set_viewport(0, 0, reduce_width[i], reduce_height[i]); draw_quad(reduce_width[i - 1], reduce_height[i - 1], 1.0f, 1.0f, 0.0f, 0.0f, scale, 1.0f, 1.0f, 1.0f, 1.0f); - gl_state_active_bind_texture_2d(0, reduce_tex[i]->glid); - gl_state_bind_sampler(0, rctx->render_samplers[2]); + gl_rend_state.active_bind_texture_2d(0, reduce_tex[i]->glid); + gl_rend_state.bind_sampler(0, rctx->render_samplers[2]); glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, reduce_width[i], reduce_height[i]); } } @@ -1551,11 +1551,11 @@ namespace rndr { } void Render::apply_mlaa(int32_t destination, int32_t source, int32_t ss_alpha_mask) { - gl_state_begin_event("PostProcess::mlaa"); + gl_rend_state.begin_event("PostProcess::mlaa"); if (mlaa) { mlaa_buffer.Bind(); - gl_state_active_bind_texture_2d(0, taa_tex[source]->glid); - gl_state_bind_sampler(0, rctx_ptr->render_samplers[1]); + gl_rend_state.active_bind_texture_2d(0, taa_tex[source]->glid); + gl_rend_state.bind_sampler(0, rctx_ptr->render_samplers[1]); uniform_value[U_MLAA] = 0; shaders_ft.set(SHADER_FT_MLAA); draw_quad(render_post_width[0], render_post_height[0], @@ -1563,10 +1563,10 @@ namespace rndr { 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f); temp_buffer.Bind(); - gl_state_active_bind_texture_2d(0, mlaa_buffer.GetColorTex()); - gl_state_active_bind_texture_2d(1, mlaa_area_texture); - gl_state_bind_sampler(0, rctx_ptr->render_samplers[0]); - gl_state_bind_sampler(1, rctx_ptr->render_samplers[3]); + gl_rend_state.active_bind_texture_2d(0, mlaa_buffer.GetColorTex()); + gl_rend_state.active_bind_texture_2d(1, mlaa_area_texture); + gl_rend_state.bind_sampler(0, rctx_ptr->render_samplers[0]); + gl_rend_state.bind_sampler(1, rctx_ptr->render_samplers[3]); uniform_value[U_MLAA] = 1; uniform_value[U_MLAA_SEARCH] = 2; shaders_ft.set(SHADER_FT_MLAA); @@ -1575,10 +1575,10 @@ namespace rndr { 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f); taa_buffer[destination].Bind(); - gl_state_active_bind_texture_2d(0, taa_tex[source]->glid); - gl_state_active_bind_texture_2d(1, temp_buffer.GetColorTex()); - gl_state_bind_sampler(0, rctx_ptr->render_samplers[1]); - gl_state_bind_sampler(1, rctx_ptr->render_samplers[1]); + gl_rend_state.active_bind_texture_2d(0, taa_tex[source]->glid); + gl_rend_state.active_bind_texture_2d(1, temp_buffer.GetColorTex()); + gl_rend_state.bind_sampler(0, rctx_ptr->render_samplers[1]); + gl_rend_state.bind_sampler(1, rctx_ptr->render_samplers[1]); uniform_value[U_MLAA] = 2; uniform_value[U_ALPHA_MASK] = ss_alpha_mask ? 1 : 0; shaders_ft.set(SHADER_FT_MLAA); @@ -1586,26 +1586,26 @@ namespace rndr { render_post_width_scale, render_post_height_scale, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f); uniform_value[U_ALPHA_MASK] = 0; - gl_state_active_bind_texture_2d(0, 0); - gl_state_active_bind_texture_2d(1, 0); + gl_rend_state.active_bind_texture_2d(0, 0); + gl_rend_state.active_bind_texture_2d(1, 0); } else { taa_buffer[destination].Bind(); - gl_state_active_bind_texture_2d(0, taa_tex[source]->glid); - gl_state_bind_sampler(0, rctx_ptr->render_samplers[1]); + gl_rend_state.active_bind_texture_2d(0, taa_tex[source]->glid); + gl_rend_state.bind_sampler(0, rctx_ptr->render_samplers[1]); uniform_value[U_REDUCE] = 0; shaders_ft.set(SHADER_FT_REDUCE); draw_quad(render_post_width[0], render_post_height[0], render_post_width_scale, render_post_height_scale, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f); } - gl_state_end_event(); + gl_rend_state.end_event(); } void Render::apply_tone_map(texture* light_proj_tex, int32_t npr_param) { render_context* rctx = rctx_ptr; - gl_state_begin_event("PostProcess::tone_map"); + gl_rend_state.begin_event("PostProcess::tone_map"); update_tone_map_lut(); @@ -1639,21 +1639,21 @@ namespace rndr { shader_data.g_texcoord_transforms[2] = { 1.0f, 0.0f, 0.0f, 0.0f }; shader_data.g_texcoord_transforms[3] = { 0.0f, 1.0f, 0.0f, 0.0f }; - gl_state_active_bind_texture_2d(0, rend_texture[0].GetColorTex()); - gl_state_bind_sampler(0, rctx->render_samplers[1]); - gl_state_active_bind_texture_2d(1, reduce_tex_draw); - gl_state_bind_sampler(1, rctx->render_samplers[2]); - gl_state_active_bind_texture_2d(2, tonemap_lut_texture); - gl_state_bind_sampler(2, rctx->render_samplers[0]); - gl_state_active_bind_texture_2d(3, exposure_tex); - gl_state_bind_sampler(3, rctx->render_samplers[3]); + gl_rend_state.active_bind_texture_2d(0, rend_texture[0].GetColorTex()); + gl_rend_state.bind_sampler(0, rctx->render_samplers[1]); + gl_rend_state.active_bind_texture_2d(1, reduce_tex_draw); + gl_rend_state.bind_sampler(1, rctx->render_samplers[2]); + gl_rend_state.active_bind_texture_2d(2, tonemap_lut_texture); + gl_rend_state.bind_sampler(2, rctx->render_samplers[0]); + gl_rend_state.active_bind_texture_2d(3, exposure_tex); + gl_rend_state.bind_sampler(3, rctx->render_samplers[3]); if (lens_flare_texture) { const float_t aspect = (float_t)height / (float_t)width; uniform_value[U_FLARE] = 1; - gl_state_active_bind_texture_2d(4, lens_flare_texture); - gl_state_bind_sampler(4, rctx->render_samplers[2]); + gl_rend_state.active_bind_texture_2d(4, lens_flare_texture); + gl_rend_state.bind_sampler(4, rctx->render_samplers[2]); mat4 mat; mat4_translate(0.5f, 0.5f, 0.0f, &mat); @@ -1669,8 +1669,8 @@ namespace rndr { if (lens_shaft_scale < 50.0f) { uniform_value[U_FLARE] = 2; - gl_state_active_bind_texture_2d(5, lens_shaft_texture); - gl_state_bind_sampler(5, rctx->render_samplers[2]); + gl_rend_state.active_bind_texture_2d(5, lens_shaft_texture); + gl_rend_state.bind_sampler(5, rctx->render_samplers[2]); mat4_translate(0.5f, 0.5f, 0.0f, &mat); mat4_scale_rot(&mat, lens_shaft_scale, lens_shaft_scale, 1.0f, &mat); @@ -1684,18 +1684,18 @@ namespace rndr { shader_data.g_texcoord_transforms[7] = mat.row1; } else { - gl_state_active_bind_texture_2d(5, rctx->empty_texture_2d->glid); - gl_state_bind_sampler(5, rctx->render_samplers[2]); + gl_rend_state.active_bind_texture_2d(5, rctx->empty_texture_2d->glid); + gl_rend_state.bind_sampler(5, rctx->render_samplers[2]); shader_data.g_texcoord_transforms[6] = { 1.0f, 0.0f, 0.0f, 0.0f }; shader_data.g_texcoord_transforms[7] = { 0.0f, 1.0f, 0.0f, 0.0f }; } } else { - gl_state_active_bind_texture_2d(4, rctx->empty_texture_2d->glid); - gl_state_bind_sampler(4, rctx->render_samplers[2]); - gl_state_active_bind_texture_2d(5, rctx->empty_texture_2d->glid); - gl_state_bind_sampler(5, rctx->render_samplers[2]); + gl_rend_state.active_bind_texture_2d(4, rctx->empty_texture_2d->glid); + gl_rend_state.bind_sampler(4, rctx->render_samplers[2]); + gl_rend_state.active_bind_texture_2d(5, rctx->empty_texture_2d->glid); + gl_rend_state.bind_sampler(5, rctx->render_samplers[2]); shader_data.g_texcoord_transforms[4] = { 1.0f, 0.0f, 0.0f, 0.0f }; shader_data.g_texcoord_transforms[5] = { 0.0f, 1.0f, 0.0f, 0.0f }; @@ -1704,38 +1704,38 @@ namespace rndr { } if (aet_back) { - gl_state_active_bind_texture_2d(6, aet_back_tex->glid); - gl_state_bind_sampler(6, rctx->render_samplers[2]); + gl_rend_state.active_bind_texture_2d(6, aet_back_tex->glid); + gl_rend_state.bind_sampler(6, rctx->render_samplers[2]); uniform_value[U_AET_BACK] = 1; } if (light_proj_tex) { uniform_value[U_LIGHT_PROJ] = 1; - gl_state_active_bind_texture_2d(7, light_proj_tex->glid); - gl_state_bind_sampler(7, rctx->render_samplers[2]); + gl_rend_state.active_bind_texture_2d(7, light_proj_tex->glid); + gl_rend_state.bind_sampler(7, rctx->render_samplers[2]); shader_data.g_flare_coef.z = 1.0f; } else { - gl_state_active_bind_texture_2d(7, rctx->empty_texture_2d->glid); - gl_state_bind_sampler(7, rctx->render_samplers[2]); + gl_rend_state.active_bind_texture_2d(7, rctx->empty_texture_2d->glid); + gl_rend_state.bind_sampler(7, rctx->render_samplers[2]); } if (aet_back && npr_param == 1) { - gl_state_active_bind_texture_2d(14, rend_texture[0].GetDepthTex()); - gl_state_bind_sampler(14, rctx->render_samplers[1]); + gl_rend_state.active_bind_texture_2d(14, rend_texture[0].GetDepthTex()); + gl_rend_state.bind_sampler(14, rctx->render_samplers[1]); } rctx->tone_map_ubo.WriteMemory(shader_data); - gl_state_set_viewport(0, 0, render_width[0], render_height[0]); + gl_rend_state.set_viewport(0, 0, render_width[0], render_height[0]); taa_buffer[2].Bind(); shaders_ft.set(SHADER_FT_TONEMAP); rctx->tone_map_ubo.Bind(1); - gl_state_bind_vertex_array(rctx->common_vao); + gl_rend_state.bind_vertex_array(rctx->common_vao); shaders_ft.draw_arrays(GL_TRIANGLE_STRIP, 0, 4); - gl_state_active_bind_texture_2d(2, 0); - gl_state_end_event(); + gl_rend_state.active_bind_texture_2d(2, 0); + gl_rend_state.end_event(); } void Render::calc_exposure(camera* cam) { @@ -1845,21 +1845,21 @@ namespace rndr { exposure_measure.g_spot_coefficients[i * 8 + j] = chara_data->spot_coefficients[j]; rctx->exposure_measure_ubo.WriteMemory(exposure_measure); - gl_state_set_viewport(0, 0, 32, 1); + gl_rend_state.set_viewport(0, 0, 32, 1); downsample_texture.Bind(); uniform_value[U_EXPOSURE] = 1; shaders_ft.set(SHADER_FT_EXPOSURE); rctx->exposure_measure_ubo.Bind(1); - gl_state_active_bind_texture_2d(0, reduce_tex[4]->glid); - gl_state_active_bind_texture_2d(1, reduce_tex[2]->glid); - gl_state_bind_sampler(0, rctx->render_samplers[2]); - gl_state_bind_sampler(1, rctx->render_samplers[2]); + gl_rend_state.active_bind_texture_2d(0, reduce_tex[4]->glid); + gl_rend_state.active_bind_texture_2d(1, reduce_tex[2]->glid); + gl_rend_state.bind_sampler(0, rctx->render_samplers[2]); + gl_rend_state.bind_sampler(1, rctx->render_samplers[2]); draw_quad(1, 1, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f); - gl_state_active_bind_texture_2d(0, exposure_history->glid); - gl_state_bind_sampler(0, rctx->render_samplers[2]); + gl_rend_state.active_bind_texture_2d(0, exposure_history->glid); + gl_rend_state.bind_sampler(0, rctx->render_samplers[2]); if (reset_exposure) glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 32, 1); else @@ -1867,12 +1867,12 @@ namespace rndr { exposure_history_counter = (exposure_history_counter + 1) % 32; } - gl_state_set_viewport(0, 0, 1, 1); + gl_rend_state.set_viewport(0, 0, 1, 1); exposure_texture.Bind(); uniform_value[U_EXPOSURE] = 2; shaders_ft.set(SHADER_FT_EXPOSURE); - gl_state_active_bind_texture_2d(0, exposure_history->glid); - gl_state_bind_sampler(0, rctx->render_samplers[0]); + gl_rend_state.active_bind_texture_2d(0, exposure_history->glid); + gl_rend_state.bind_sampler(0, rctx->render_samplers[0]); draw_quad(1, 1, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f); } @@ -1947,14 +1947,14 @@ namespace rndr { texture* dst_tex = j.texture; - gl_state_active_bind_texture_2d(0, j.type == FRAME_TEXTURE_PRE_PP ? pre_pp_tex : post_pp_tex); - gl_state_bind_sampler(0, rctx_ptr->render_samplers[0]); - gl_state_set_viewport(0, 0, dst_tex->width, dst_tex->height); + gl_rend_state.active_bind_texture_2d(0, j.type == FRAME_TEXTURE_PRE_PP ? pre_pp_tex : post_pp_tex); + gl_rend_state.bind_sampler(0, rctx_ptr->render_samplers[0]); + gl_rend_state.set_viewport(0, 0, dst_tex->width, dst_tex->height); uniform_value[U_REDUCE] = 0; shaders_ft.set(SHADER_FT_REDUCE); draw_quad(dst_tex->width, dst_tex->height, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f); - gl_state_bind_framebuffer(0); + gl_rend_state.bind_framebuffer(0); } if (&i - frame_texture) @@ -2054,21 +2054,21 @@ namespace rndr { rctx_ptr->lens_ghost_vbo.UnmapMemory(); - gl_state_set_viewport(0, 0, render_width[0], render_height[0]); + gl_rend_state.set_viewport(0, 0, render_width[0], render_height[0]); rend_texture[0].Bind(); - gl_state_enable_blend(); - gl_state_set_blend_func(GL_ONE, GL_ONE); + gl_rend_state.enable_blend(); + gl_rend_state.set_blend_func(GL_ONE, GL_ONE); uniform_value[U_REDUCE] = 4; shaders_ft.set(SHADER_FT_REDUCE); - gl_state_active_bind_texture_2d(0, lens_ghost_texture); - gl_state_bind_sampler(0, rctx_ptr->render_samplers[0]); - gl_state_bind_vertex_array(rctx_ptr->lens_ghost_vao); + gl_rend_state.active_bind_texture_2d(0, lens_ghost_texture); + gl_rend_state.bind_sampler(0, rctx_ptr->render_samplers[0]); + gl_rend_state.bind_vertex_array(rctx_ptr->lens_ghost_vao); shaders_ft.draw_arrays(GL_TRIANGLES, 0, (GLsizei)(lens_ghost_count * 6LL)); - gl_state_bind_vertex_array(0); + gl_rend_state.bind_vertex_array(0); - gl_state_disable_blend(); - gl_state_set_blend_func(GL_ONE, GL_ZERO); + gl_rend_state.disable_blend(); + gl_rend_state.set_blend_func(GL_ONE, GL_ZERO); } void Render::generate_mlaa_area_texture() { @@ -2099,18 +2099,18 @@ namespace rndr { downsample_texture.Bind(); for (int32_t i = 1; i < 4; i++) { - gl_state_set_viewport(0, 0, reduce_width[i], reduce_height[i]); - gl_state_active_bind_texture_2d(0, reduce_tex[i]->glid); - gl_state_bind_sampler(0, rctx->render_samplers[2]); + gl_rend_state.set_viewport(0, 0, reduce_width[i], reduce_height[i]); + gl_rend_state.active_bind_texture_2d(0, reduce_tex[i]->glid); + gl_rend_state.bind_sampler(0, rctx->render_samplers[2]); draw_quad(reduce_width[i], reduce_height[i], 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f); glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, reduce_width[i], reduce_height[i]); } for (int32_t i = 1; i < 4; i++) { - gl_state_set_viewport(0, 0, reduce_width[i], reduce_height[i]); - gl_state_active_bind_texture_2d(0, reduce_tex[i]->glid); - gl_state_bind_sampler(0, rctx->render_samplers[2]); + gl_rend_state.set_viewport(0, 0, reduce_width[i], reduce_height[i]); + gl_rend_state.active_bind_texture_2d(0, reduce_tex[i]->glid); + gl_rend_state.bind_sampler(0, rctx->render_samplers[2]); draw_quad(reduce_width[i], reduce_height[i], 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f); glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, reduce_width[i], reduce_height[i]); @@ -2119,9 +2119,9 @@ namespace rndr { uniform_value[U_GAUSS] = 1; shaders_ft.set(SHADER_FT_GAUSS); - gl_state_set_viewport(0, 0, reduce_width[0], reduce_height[0]); - gl_state_active_bind_texture_2d(0, reduce_tex[0]->glid); - gl_state_bind_sampler(0, rctx->render_samplers[2]); + gl_rend_state.set_viewport(0, 0, reduce_width[0], reduce_height[0]); + gl_rend_state.active_bind_texture_2d(0, reduce_tex[0]->glid); + gl_rend_state.bind_sampler(0, rctx->render_samplers[2]); draw_quad(reduce_width[0], reduce_height[0], 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, intensity.x * 0.5f, intensity.y * 0.5f, intensity.z * 0.5f, 1.0f); @@ -2129,16 +2129,16 @@ namespace rndr { uniform_value[U_REDUCE] = 7; shaders_ft.set(SHADER_FT_REDUCE); - gl_state_set_viewport(0, 0, reduce_width[0], reduce_height[0]); + gl_rend_state.set_viewport(0, 0, reduce_width[0], reduce_height[0]); reduce_texture[0].Bind(); - gl_state_active_bind_texture_2d(0, downsample_texture.GetColorTex()); - gl_state_active_bind_texture_2d(1, reduce_tex[1]->glid); - gl_state_active_bind_texture_2d(2, reduce_tex[2]->glid); - gl_state_active_bind_texture_2d(3, reduce_tex[3]->glid); - gl_state_bind_sampler(0, rctx->render_samplers[2]); - gl_state_bind_sampler(1, rctx->render_samplers[2]); - gl_state_bind_sampler(2, rctx->render_samplers[2]); - gl_state_bind_sampler(3, rctx->render_samplers[2]); + gl_rend_state.active_bind_texture_2d(0, downsample_texture.GetColorTex()); + gl_rend_state.active_bind_texture_2d(1, reduce_tex[1]->glid); + gl_rend_state.active_bind_texture_2d(2, reduce_tex[2]->glid); + gl_rend_state.active_bind_texture_2d(3, reduce_tex[3]->glid); + gl_rend_state.bind_sampler(0, rctx->render_samplers[2]); + gl_rend_state.bind_sampler(1, rctx->render_samplers[2]); + gl_rend_state.bind_sampler(2, rctx->render_samplers[2]); + gl_rend_state.bind_sampler(3, rctx->render_samplers[2]); draw_quad(reduce_width[3], reduce_height[3], 1.0f, 1.0f, 0.0f, 0.0f, 0.25f, 0.15f, 0.25f, 0.25f, 0.25f); reduce_tex_draw = reduce_tex[0]->glid; @@ -2180,7 +2180,7 @@ namespace rndr { glTextureSubImage2D(tonemap_lut_texture, 0, 0, 0, 16 * TONE_MAP_SAT_GAMMA_SAMPLES, 1, GL_RG, GL_FLOAT, tex_data); else { - gl_state_bind_texture_2d(tonemap_lut_texture); + gl_rend_state.bind_texture_2d(tonemap_lut_texture); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 16 * TONE_MAP_SAT_GAMMA_SAMPLES, 1, GL_RG, GL_FLOAT, tex_data); } diff --git a/src/CRE/render_context.cpp b/src/CRE/render_context.cpp index 26a610cf..5d63a287 100644 --- a/src/CRE/render_context.cpp +++ b/src/CRE/render_context.cpp @@ -107,8 +107,8 @@ void sss_data::init() { } void sss_data::set_texture(int32_t texture_index) { - gl_state_active_bind_texture_2d(16, textures[texture_index].GetColorTex()); - gl_state_active_texture(0); + gl_rend_state.active_bind_texture_2d(16, textures[texture_index].GetColorTex()); + gl_rend_state.active_texture(0); } light_proj::light_proj(int32_t width, int32_t height) : enable(), texture_id() { @@ -136,9 +136,9 @@ bool light_proj::set() { static const GLfloat depth_clear = 1.0f; shadow_texture[0].Bind(); - gl_state_set_viewport(0, 0, 2048, 512); - gl_state_enable_depth_test(); - gl_state_set_depth_mask(GL_TRUE); + gl_rend_state.set_viewport(0, 0, 2048, 512); + gl_rend_state.enable_depth_test(); + gl_rend_state.set_depth_mask(GL_TRUE); glClearBufferfv(GL_COLOR, 0, (float_t*)&color_clear); glClearBufferfv(GL_DEPTH, 0, &depth_clear); @@ -150,8 +150,8 @@ bool light_proj::set() { else { draw_texture.Bind(); draw_texture.SetViewport(); - gl_state_enable_depth_test(); - gl_state_set_depth_mask(GL_TRUE); + gl_rend_state.enable_depth_test(); + gl_rend_state.set_depth_mask(GL_TRUE); glClearBufferfv(GL_COLOR, 0, (float_t*)&color_clear); glClearBufferfv(GL_DEPTH, 0, &depth_clear); } @@ -1144,20 +1144,22 @@ void render_context::pre_proc() { if (!i.offset) continue; - size_t align = align_val(i.offset, sv_min_storage_buffer_alignment) - i.offset; + const size_t size = align_val(i.offset, sv_min_uniform_buffer_alignment); + const size_t align = size - i.offset; if (align) memset((void*)((size_t)i.data + i.offset), 0, align); - i.buffer.WriteMemory(0, i.size, i.data); + i.buffer.WriteMemory(0, size, i.data); } for (render_context::shared_uniform_buffer& i : shared_uniform_buffers) { if (!i.offset) continue; - size_t align = align_val(i.offset, sv_min_uniform_buffer_alignment) - i.offset; + const size_t size = align_val(i.offset, sv_min_uniform_buffer_alignment); + const size_t align = size - i.offset; if (align) memset((void*)((size_t)i.data + i.offset), 0, align); - i.buffer.WriteMemory(0, i.size, i.data); + i.buffer.WriteMemory(0, size, i.data); } } } diff --git a/src/CRE/render_manager.cpp b/src/CRE/render_manager.cpp index 861c35ec..c1938c55 100644 --- a/src/CRE/render_manager.cpp +++ b/src/CRE/render_manager.cpp @@ -14,7 +14,7 @@ #include "config.hpp" #include "clear_color.hpp" #include "effect.hpp" -#include "gl_state.hpp" +#include "gl_rend_state.hpp" #include "light_param.hpp" #include "render.hpp" #include "render_context.hpp" @@ -288,68 +288,68 @@ namespace rndr { static const vec4 color_clear = 0.0f; - gl_state_bind_framebuffer(0); + gl_rend_state.bind_framebuffer(0); glClearBufferfv(GL_COLOR, 0, (float_t*)&color_clear); rctx_ptr->set_scene_framebuffer_size(render->render_width[0], render->render_height[0], render->render_width[0], render->render_height[0]); - gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - gl_state_enable_depth_test(); - gl_state_set_depth_func(GL_LEQUAL); - gl_state_set_depth_mask(GL_TRUE); + gl_rend_state.set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + gl_rend_state.enable_depth_test(); + gl_rend_state.set_depth_func(GL_LEQUAL); + gl_rend_state.set_depth_mask(GL_TRUE); - gl_state_begin_event("rndpass_render_all_pass::Caller::execute_pre3d"); + gl_rend_state.begin_event("rndpass_render_all_pass::Caller::execute_pre3d"); for (int32_t i = RND_PASSID_SHADOW; i <= RND_PASSID_CLEAR; i++) RenderManager::render_single_pass((RenderPassID)i); - gl_state_end_event(); + gl_rend_state.end_event(); - gl_state_begin_event("rndpass_render_all_pass::Caller::execute_3d"); + gl_rend_state.begin_event("rndpass_render_all_pass::Caller::execute_3d"); for (int32_t i = RND_PASSID_PRE_SPRITE; i <= RND_PASSID_3D; i++) RenderManager::render_single_pass((RenderPassID)i); - gl_state_end_event(); + gl_rend_state.end_event(); - gl_state_begin_event("rndpass_render_all_pass::Caller::execute_2d"); + gl_rend_state.begin_event("rndpass_render_all_pass::Caller::execute_2d"); for (int32_t i = RND_PASSID_SHOW_VECTOR; i <= RND_PASSID_12; i++) RenderManager::render_single_pass((RenderPassID)i); - gl_state_end_event(); + gl_rend_state.end_event(); rctx_ptr->disp_manager->check_vertex_arrays(); sprite_manager_post_draw(); - 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); + gl_rend_state.bind_vertex_array(0); + gl_rend_state.disable_primitive_restart(); + gl_rend_state.bind_uniform_buffer(0); + gl_rend_state.bind_uniform_buffer_base(0, 0); + gl_rend_state.bind_uniform_buffer_base(1, 0); + gl_rend_state.bind_uniform_buffer_base(2, 0); + gl_rend_state.bind_uniform_buffer_base(3, 0); + gl_rend_state.bind_uniform_buffer_base(4, 0); + gl_rend_state.bind_shader_storage_buffer(0); + gl_rend_state.bind_shader_storage_buffer_base(0, 0); } void RenderManager::rndpass_post_proc() { - gl_state_begin_event("rndpass_post_proc"); + gl_rend_state.begin_event("rndpass_post_proc"); rctx_ptr->post_proc(); render->post_proc(); field_31C = false; - gl_state_end_event(); + gl_rend_state.end_event(); } void RenderManager::rndpass_pre_proc(struct camera* cam) { - gl_state_begin_event("rndpass_pre_proc"); + gl_rend_state.begin_event("rndpass_pre_proc"); render->pre_proc(cam); Glitter::glt_particle_manager->CalcDisp(); rctx_ptr->pre_proc(); - gl_state_end_event(); + gl_rend_state.end_event(); } void RenderManager::render_single_pass(RenderPassID id) { cpu_time[id] = 0.0; gpu_time[id] = 0.0; if (!pass_sw[id]) { - gl_state_get_error(); + gl_get_error_print(); return; } @@ -390,7 +390,7 @@ namespace rndr { break; } render_pass_end(id); - gl_state_get_error(); + gl_get_error_print(); } void RenderManager::render_pass_begin() { @@ -412,8 +412,8 @@ namespace rndr { void RenderManager::pass_shadow() { render_context* rctx = rctx_ptr; - gl_state_begin_event("pass_shadow"); - gl_state_begin_event("texproj"); + gl_rend_state.begin_event("pass_shadow"); + gl_rend_state.begin_event("texproj"); if (rctx->litproj->set()) { rctx->disp_manager->draw(mdl::OBJ_TYPE_OPAQUE); rctx->disp_manager->draw(mdl::OBJ_TYPE_TRANSPARENT); @@ -433,15 +433,15 @@ namespace rndr { rctx->disp_manager->draw(mdl::OBJ_TYPE_OPAQUE); rctx->disp_manager->draw(mdl::OBJ_TYPE_TRANSPARENT); rctx->disp_manager->obj_sort(&rctx->view_mat, mdl::OBJ_TYPE_TRANSLUCENT, 1); - gl_state_set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl_state_enable_blend(); + gl_rend_state.set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gl_rend_state.enable_blend(); rctx->disp_manager->draw(mdl::OBJ_TYPE_TRANSLUCENT); - gl_state_disable_blend(); + gl_rend_state.disable_blend(); rctx->draw_state->shader_index = -1; - gl_state_bind_framebuffer(0); + gl_rend_state.bind_framebuffer(0); } } - gl_state_end_event(); + gl_rend_state.end_event(); bool v3 = false; int32_t v10[2]; @@ -467,10 +467,10 @@ namespace rndr { draw_pass_shadow_begin_make_shadowmap(shad, v11[i], j); rctx->disp_manager->draw((mdl::ObjType)(mdl::OBJ_TYPE_SHADOW_CHARA + v11[i])); if (rctx->disp_manager->get_obj_count((mdl::ObjType)(mdl::OBJ_TYPE_SHADOW_OBJECT_CHARA + v11[i])) > 0) { - gl_state_set_color_mask(show_stage_shadow + gl_rend_state.set_color_mask(show_stage_shadow ? GL_TRUE : GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); rctx->disp_manager->draw((mdl::ObjType)(mdl::OBJ_TYPE_SHADOW_OBJECT_CHARA + i)); - gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + gl_rend_state.set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); } draw_pass_shadow_end_make_shadowmap(shad, v11[i], j); j++; @@ -483,8 +483,8 @@ namespace rndr { shad->clear_textures(); } shader::unbind(); - gl_state_bind_framebuffer(0); - gl_state_end_event(); + gl_rend_state.bind_framebuffer(0); + gl_rend_state.end_event(); } void RenderManager::pass_ss_sss() { @@ -493,12 +493,12 @@ namespace rndr { if (!sss->init_data || !sss->enable) return; - gl_state_begin_event("pass_ss_sss"); + gl_rend_state.begin_event("pass_ss_sss"); rndr::Render* rend = render; extern bool reflect_full; if ((reflect_full || sv_better_reflect && reflect_type == STAGE_DATA_REFLECT_REFLECT_MAP) && pass_sw[rndr::RND_PASSID_REFLECT] && rctx->disp_manager->get_obj_count(mdl::OBJ_TYPE_SSS)) { - gl_state_begin_event("reflect"); + gl_rend_state.begin_event("reflect"); reflect_draw = true; rndr::Render* rend = render; @@ -512,7 +512,7 @@ namespace rndr { //} //else { // sss->textures[0].Bind(); - // gl_state_set_viewport(0, 0, 640, 360); + // gl_rend_state.set_viewport(0, 0, 640, 360); //} glClearColor(sss->param.x, sss->param.y, sss->param.z, 0.0f); @@ -530,11 +530,11 @@ namespace rndr { set_reflect_mat(rctx); rctx->draw_state->shader_index = SHADER_FT_SSS_SKIN; - gl_state_enable_depth_test(); - gl_state_set_depth_func(GL_LEQUAL); - gl_state_set_depth_mask(GL_TRUE); + gl_rend_state.enable_depth_test(); + gl_rend_state.set_depth_func(GL_LEQUAL); + gl_rend_state.set_depth_mask(GL_TRUE); rctx->disp_manager->draw(mdl::OBJ_TYPE_SSS); - gl_state_disable_depth_test(); + gl_rend_state.disable_depth_test(); rctx->draw_state->shader_index = -1; draw_pass_3d_shadow_reset(rctx); uniform_value[U_NPR] = 0; @@ -549,12 +549,12 @@ namespace rndr { refl_tex.SetViewport(); glClear(GL_DEPTH_BUFFER_BIT); rctx->draw_state->shader_index = SHADER_FT_SSS_SKIN; - gl_state_enable_depth_test(); - gl_state_set_depth_mask(GL_TRUE); + gl_rend_state.enable_depth_test(); + gl_rend_state.set_depth_mask(GL_TRUE); rctx->disp_manager->draw(mdl::OBJ_TYPE_SSS); - gl_state_disable_depth_test(); + gl_rend_state.disable_depth_test(); rctx->draw_state->shader_index = -1; - gl_state_bind_framebuffer(0); + gl_rend_state.bind_framebuffer(0); uniform_value[U_NPR] = 1; draw_pass_sss_contour(rctx, rend); } @@ -562,7 +562,7 @@ namespace rndr { if (!sss->npr_contour) { sss->textures[0].Bind(); - gl_state_set_viewport(0, 0, 640, 360); + gl_rend_state.set_viewport(0, 0, 640, 360); filter_scene_shader_data filter_scene = {}; filter_scene.g_transform = { 1.0f, 1.0f, 0.0f, 0.0f }; @@ -579,15 +579,15 @@ namespace rndr { shaders_ft.set(SHADER_FT_IMGFILT); rctx->filter_scene_ubo.Bind(0); rctx->imgfilter_batch_ubo.Bind(1); - gl_state_active_bind_texture_2d(0, refl_tex.GetColorTex()); - gl_state_bind_sampler(0, rctx->render_samplers[0]); - gl_state_bind_vertex_array(rctx->common_vao); + gl_rend_state.active_bind_texture_2d(0, refl_tex.GetColorTex()); + gl_rend_state.bind_sampler(0, rctx->render_samplers[0]); + gl_rend_state.bind_vertex_array(rctx->common_vao); shaders_ft.draw_arrays(GL_TRIANGLE_STRIP, 0, 4); } draw_pass_sss_filter(rctx, sss); reflect_draw = false; - gl_state_end_event(); + gl_rend_state.end_event(); } //if (rend->render_width > 1280.0) @@ -599,7 +599,7 @@ namespace rndr { //} //else { // sss->textures[0].Bind(); - // gl_state_set_viewport(0, 0, 640, 360); + // gl_rend_state.set_viewport(0, 0, 640, 360); //} glClearColor(sss->param.x, sss->param.y, sss->param.z, 0.0f); @@ -615,11 +615,11 @@ namespace rndr { draw_pass_3d_shadow_reset(rctx); rctx->draw_state->shader_index = SHADER_FT_SSS_SKIN; - gl_state_enable_depth_test(); - gl_state_set_depth_func(GL_LEQUAL); - gl_state_set_depth_mask(GL_TRUE); + gl_rend_state.enable_depth_test(); + gl_rend_state.set_depth_func(GL_LEQUAL); + gl_rend_state.set_depth_mask(GL_TRUE); rctx->disp_manager->draw(mdl::OBJ_TYPE_SSS); - gl_state_disable_depth_test(); + gl_rend_state.disable_depth_test(); rctx->draw_state->shader_index = -1; draw_pass_3d_shadow_reset(rctx); uniform_value[U_NPR] = 0; @@ -634,12 +634,12 @@ namespace rndr { rend->rend_texture[0].SetViewport(); glClear(GL_DEPTH_BUFFER_BIT); rctx->draw_state->shader_index = SHADER_FT_SSS_SKIN; - gl_state_enable_depth_test(); - gl_state_set_depth_mask(GL_TRUE); + gl_rend_state.enable_depth_test(); + gl_rend_state.set_depth_mask(GL_TRUE); rctx->disp_manager->draw(mdl::OBJ_TYPE_SSS); - gl_state_disable_depth_test(); + gl_rend_state.disable_depth_test(); rctx->draw_state->shader_index = -1; - gl_state_bind_framebuffer(0); + gl_rend_state.bind_framebuffer(0); uniform_value[U_NPR] = 1; draw_pass_sss_contour(rctx, rend); } @@ -647,7 +647,7 @@ namespace rndr { if (!sss->npr_contour) { sss->textures[0].Bind(); - gl_state_set_viewport(0, 0, 640, 360); + gl_rend_state.set_viewport(0, 0, 640, 360); filter_scene_shader_data filter_scene = {}; filter_scene.g_transform = { 1.0f, 1.0f, 0.0f, 0.0f }; @@ -664,15 +664,15 @@ namespace rndr { shaders_ft.set(SHADER_FT_IMGFILT); rctx->filter_scene_ubo.Bind(0); rctx->imgfilter_batch_ubo.Bind(1); - gl_state_active_bind_texture_2d(0, rend->rend_texture[0].GetColorTex()); - gl_state_bind_sampler(0, rctx->render_samplers[0]); - gl_state_bind_vertex_array(rctx->common_vao); + gl_rend_state.active_bind_texture_2d(0, rend->rend_texture[0].GetColorTex()); + gl_rend_state.bind_sampler(0, rctx->render_samplers[0]); + gl_rend_state.bind_vertex_array(rctx->common_vao); shaders_ft.draw_arrays(GL_TRIANGLE_STRIP, 0, 4); } draw_pass_sss_filter(rctx, sss); - gl_state_bind_framebuffer(0); - gl_state_end_event(); + gl_rend_state.bind_framebuffer(0); + gl_rend_state.end_event(); } void RenderManager::pass_reflect() { @@ -683,7 +683,7 @@ namespace rndr { } render_context* rctx = rctx_ptr; - gl_state_begin_event("pass_reflect"); + gl_rend_state.begin_event("pass_reflect"); RenderTexture& refl_tex = rctx->render_manager->get_render_texture(0); RenderTexture& refl_buf_tex = rctx->reflect_buffer; refl_tex.Bind(); @@ -716,16 +716,16 @@ namespace rndr { uniform_value[U_REFLECT] = 2; uniform_value[U_CLIP_PLANE] = clip_plane.data[1] ? 1 : 0; - gl_state_enable_depth_test(); - gl_state_set_depth_func(GL_LEQUAL); - gl_state_set_depth_mask(GL_TRUE); + gl_rend_state.enable_depth_test(); + gl_rend_state.set_depth_func(GL_LEQUAL); + gl_rend_state.set_depth_mask(GL_TRUE); rctx->disp_manager->draw(mdl::OBJ_TYPE_REFLECT_OPAQUE, 0, reflect_texture_mask); if (reflect_type == STAGE_DATA_REFLECT_REFLECT_MAP) { - gl_state_enable_blend(); - gl_state_set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl_state_set_blend_equation(GL_FUNC_ADD); + gl_rend_state.enable_blend(); + gl_rend_state.set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gl_rend_state.set_blend_equation(GL_FUNC_ADD); rctx->disp_manager->draw(mdl::OBJ_TYPE_REFLECT_TRANSLUCENT); - gl_state_disable_blend(); + gl_rend_state.disable_blend(); } if (sv_better_reflect && reflect_type == STAGE_DATA_REFLECT_REFLECT_MAP) { @@ -742,9 +742,9 @@ namespace rndr { draw_pass_3d_shadow_reset(rctx); if (effect_texture) - gl_state_active_bind_texture_2d(14, effect_texture->glid); + gl_rend_state.active_bind_texture_2d(14, effect_texture->glid); else - gl_state_active_bind_texture_2d(14, rctx->empty_texture_2d->glid); + gl_rend_state.active_bind_texture_2d(14, rctx->empty_texture_2d->glid); uniform_value[U_WATER_REFLECT] = 0; @@ -754,30 +754,30 @@ namespace rndr { uniform_value[U_REFLECT] = 1; if (draw_pass_3d[DRAW_PASS_3D_OPAQUE]) { - gl_state_enable_depth_test(); - gl_state_set_depth_mask(GL_TRUE); + gl_rend_state.enable_depth_test(); + gl_rend_state.set_depth_mask(GL_TRUE); rctx->disp_manager->draw(mdl::OBJ_TYPE_REFLECT_CHARA_OPAQUE); - gl_state_disable_depth_test(); + gl_rend_state.disable_depth_test(); } if (draw_pass_3d[DRAW_PASS_3D_TRANSPARENT]) { - gl_state_enable_depth_test(); - gl_state_set_depth_mask(GL_TRUE); + gl_rend_state.enable_depth_test(); + gl_rend_state.set_depth_mask(GL_TRUE); rctx->disp_manager->draw(mdl::OBJ_TYPE_REFLECT_CHARA_TRANSPARENT); - gl_state_disable_depth_test(); + gl_rend_state.disable_depth_test(); } if (npr_param == 1) pass_3d_contour(); if (draw_pass_3d[DRAW_PASS_3D_TRANSLUCENT]) { - gl_state_enable_blend(); - gl_state_set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl_state_enable_depth_test(); - gl_state_set_depth_mask(GL_FALSE); + gl_rend_state.enable_blend(); + gl_rend_state.set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gl_rend_state.enable_depth_test(); + gl_rend_state.set_depth_mask(GL_FALSE); rctx->disp_manager->draw(mdl::OBJ_TYPE_REFLECT_CHARA_TRANSLUCENT); - gl_state_disable_depth_test(); - gl_state_disable_blend(); + gl_rend_state.disable_depth_test(); + gl_rend_state.disable_blend(); } if (shadow) @@ -792,7 +792,7 @@ namespace rndr { uniform_value[U_CLIP_PLANE] = clip_plane.data[0] ? 1 : 0; rctx->disp_manager->draw(mdl::OBJ_TYPE_REFLECT_CHARA_OPAQUE); } - gl_state_disable_depth_test(); + gl_rend_state.disable_depth_test(); uniform_value[U_REFLECT] = 0; rctx->draw_state->shader_index = -1; @@ -810,20 +810,20 @@ namespace rndr { glClearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); } shader::unbind(); - gl_state_bind_framebuffer(0); - gl_state_end_event(); + gl_rend_state.bind_framebuffer(0); + gl_rend_state.end_event(); } void RenderManager::pass_refract() { render_context* rctx = rctx_ptr; - gl_state_begin_event("pass_refract"); + gl_rend_state.begin_event("pass_refract"); RenderTexture& refract_texture = rctx->render_manager->get_render_texture(1); refract_texture.Bind(); if (rctx->disp_manager->get_obj_count(mdl::OBJ_TYPE_REFRACT_OPAQUE) || rctx->disp_manager->get_obj_count(mdl::OBJ_TYPE_REFRACT_TRANSPARENT) || rctx->disp_manager->get_obj_count(mdl::OBJ_TYPE_REFRACT_TRANSLUCENT)) { texture* refr_tex = refract_texture.color_texture; - gl_state_set_viewport(0, 0, refr_tex->width, refr_tex->height); + gl_rend_state.set_viewport(0, 0, refr_tex->width, refr_tex->height); draw_pass_set_camera(); @@ -839,13 +839,13 @@ namespace rndr { glClearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); rctx->draw_state->shader_index = SHADER_FT_S_REFR; - gl_state_enable_depth_test(); - gl_state_set_depth_func(GL_LEQUAL); - gl_state_set_depth_mask(GL_TRUE); + gl_rend_state.enable_depth_test(); + gl_rend_state.set_depth_func(GL_LEQUAL); + gl_rend_state.set_depth_mask(GL_TRUE); rctx->disp_manager->draw(mdl::OBJ_TYPE_REFRACT_OPAQUE); rctx->disp_manager->draw(mdl::OBJ_TYPE_REFRACT_TRANSPARENT); rctx->disp_manager->draw(mdl::OBJ_TYPE_REFRACT_TRANSLUCENT); - gl_state_disable_depth_test(); + gl_rend_state.disable_depth_test(); rctx->draw_state->shader_index = -1; } else { @@ -856,29 +856,29 @@ namespace rndr { glClearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); } shader::unbind(); - gl_state_bind_framebuffer(0); - gl_state_end_event(); + gl_rend_state.bind_framebuffer(0); + gl_rend_state.end_event(); } void RenderManager::pass_pre_process() { - gl_state_begin_event("pass_pre_process"); + gl_rend_state.begin_event("pass_pre_process"); for (draw_pre_process& i : pre_process) if (i.func) i.func(i.data); shader::unbind(); - gl_state_bind_framebuffer(0); - gl_state_end_event(); + gl_rend_state.bind_framebuffer(0); + gl_rend_state.end_event(); } void RenderManager::pass_clear() { render_context* rctx = rctx_ptr; - gl_state_begin_event("pass_clear"); + gl_rend_state.begin_event("pass_clear"); if (clear) { rctx->screen_buffer.Bind(); clear_color_set_gl(); //glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT); - gl_state_bind_framebuffer(0); + gl_rend_state.bind_framebuffer(0); } rndr::Render* rend = render; @@ -888,7 +888,7 @@ namespace rndr { glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClearDepthf(1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - gl_state_bind_framebuffer(0); + gl_rend_state.bind_framebuffer(0); } else { clear_color_set_gl(); @@ -897,7 +897,7 @@ namespace rndr { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); else glClear(GL_DEPTH_BUFFER_BIT); - gl_state_bind_framebuffer(0); + gl_rend_state.bind_framebuffer(0); } } else { @@ -905,18 +905,18 @@ namespace rndr { rend->bind_render_texture(); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT); - gl_state_bind_framebuffer(0); + gl_rend_state.bind_framebuffer(0); } else if (clear) { rend->bind_render_texture(); clear_color_set_gl(); glClear(GL_COLOR_BUFFER_BIT); - gl_state_bind_framebuffer(0); + gl_rend_state.bind_framebuffer(0); } } - gl_state_get_error(); - gl_state_end_event(); + gl_get_error_print(); + gl_rend_state.end_event(); } void RenderManager::pass_pre_sprite() { @@ -925,26 +925,26 @@ namespace rndr { render_context* rctx = rctx_ptr; - gl_state_begin_event("pass_pre_sprite"); + gl_rend_state.begin_event("pass_pre_sprite"); rndr::Render* rend = render; rend->bind_render_texture(true); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT); - gl_state_set_depth_mask(GL_FALSE); - gl_state_disable_depth_test(); - gl_state_enable_blend(); - gl_state_disable_cull_face(); + gl_rend_state.set_depth_mask(GL_FALSE); + gl_rend_state.disable_depth_test(); + gl_rend_state.enable_blend(); + gl_rend_state.disable_cull_face(); sprite_manager_draw(2, true, rend->temp_buffer.color_texture, rctx->camera->view_projection_aet_3d); - gl_state_enable_cull_face(); - gl_state_disable_blend(); - gl_state_enable_depth_test(); - gl_state_set_depth_mask(GL_TRUE); + gl_rend_state.enable_cull_face(); + gl_rend_state.disable_blend(); + gl_rend_state.enable_depth_test(); + gl_rend_state.set_depth_mask(GL_TRUE); shader::unbind(); - gl_state_bind_framebuffer(0); - gl_state_get_error(); - gl_state_end_event(); + gl_rend_state.bind_framebuffer(0); + gl_get_error_print(); + gl_rend_state.end_event(); } void RenderManager::pass_3d() { @@ -953,11 +953,11 @@ namespace rndr { draw_pass_set_camera(); if (!rctx->sss_data->enable || !rctx->sss_data->npr_contour || draw_pass_3d_get_translucent_count(rctx)) { - gl_state_set_depth_mask(GL_TRUE); + gl_rend_state.set_depth_mask(GL_TRUE); glClear(GL_DEPTH_BUFFER_BIT); } - gl_state_set_depth_func(GL_LEQUAL); + gl_rend_state.set_depth_func(GL_LEQUAL); for (int32_t i = LIGHT_SET_MAIN; i < LIGHT_SET_MAX; i++) rctx->light_set[i].data_set(rctx->face, (light_set_id)i); @@ -970,25 +970,25 @@ namespace rndr { draw_pass_3d_shadow_reset(rctx); if (effect_texture) - gl_state_active_bind_texture_2d(14, effect_texture->glid); + gl_rend_state.active_bind_texture_2d(14, effect_texture->glid); else - gl_state_active_bind_texture_2d(14, rctx->empty_texture_2d->glid); + gl_rend_state.active_bind_texture_2d(14, rctx->empty_texture_2d->glid); if (pass_sw[RND_PASSID_REFLECT] && reflect) { RenderTexture& refl_tex = get_render_texture(0); - gl_state_active_bind_texture_2d(15, refl_tex.GetColorTex()); + gl_rend_state.active_bind_texture_2d(15, refl_tex.GetColorTex()); uniform_value[U_WATER_REFLECT] = 1; } else { - gl_state_active_bind_texture_2d(15, rctx->empty_texture_2d->glid); + gl_rend_state.active_bind_texture_2d(15, rctx->empty_texture_2d->glid); uniform_value[U_WATER_REFLECT] = 0; } rctx->sss_data->set_texture(1); - gl_state_bind_sampler(14, rctx->render_samplers[0]); - gl_state_bind_sampler(15, rctx->render_samplers[0]); - gl_state_bind_sampler(16, rctx->render_samplers[0]); + gl_rend_state.bind_sampler(14, rctx->render_samplers[0]); + gl_rend_state.bind_sampler(15, rctx->render_samplers[0]); + gl_rend_state.bind_sampler(16, rctx->render_samplers[0]); uniform_value[U_STAGE_AMBIENT] = light_stage_ambient ? 1 : 0; @@ -1009,16 +1009,16 @@ namespace rndr { rctx->disp_manager->obj_sort(&rctx->view_mat, mdl::OBJ_TYPE_OPAQUE, 0); if (draw_pass_3d[DRAW_PASS_3D_OPAQUE]) { - gl_state_enable_depth_test(); - gl_state_set_depth_mask(GL_TRUE); + gl_rend_state.enable_depth_test(); + gl_rend_state.set_depth_mask(GL_TRUE); rctx->disp_manager->draw(mdl::OBJ_TYPE_OPAQUE); - gl_state_disable_depth_test(); + gl_rend_state.disable_depth_test(); } Glitter::glt_particle_manager->DispScenes(Glitter::DISP_OPAQUE); - gl_state_enable_depth_test(); - gl_state_set_depth_mask(GL_TRUE); + gl_rend_state.enable_depth_test(); + gl_rend_state.set_depth_mask(GL_TRUE); if (draw_pass_3d[DRAW_PASS_3D_TRANSPARENT]) rctx->disp_manager->draw(mdl::OBJ_TYPE_TRANSPARENT); if (rctx->render_manager->field_120) @@ -1041,54 +1041,54 @@ namespace rndr { rain_particle_draw(); leaf_particle_draw(); particle_draw(); - gl_state_disable_depth_test(); + gl_rend_state.disable_depth_test(); - gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); + gl_rend_state.set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); Glitter::glt_particle_manager->DispScenes(Glitter::DISP_ALPHA); - gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + gl_rend_state.set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); /*if (npr_param == 1) { - gl_state_set_color_mask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE); + gl_rend_state.set_color_mask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT); - gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + gl_rend_state.set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); }*/ - gl_state_enable_depth_test(); + gl_rend_state.enable_depth_test(); if (draw_pass_3d[DRAW_PASS_3D_TRANSLUCENT]) { - gl_state_enable_blend(); - gl_state_set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl_state_set_depth_mask(GL_FALSE); + gl_rend_state.enable_blend(); + gl_rend_state.set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gl_rend_state.set_depth_mask(GL_FALSE); rctx->disp_manager->draw(mdl::OBJ_TYPE_TRANSLUCENT_SORT_BY_RADIUS); rctx->disp_manager->draw(mdl::OBJ_TYPE_TRANSLUCENT); - gl_state_disable_blend(); + gl_rend_state.disable_blend(); } - gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); // X + gl_rend_state.set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); // X Glitter::glt_particle_manager->DispScenes(Glitter::DISP_TYPE_2); - gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + gl_rend_state.set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - gl_state_set_depth_mask(GL_TRUE); + gl_rend_state.set_depth_mask(GL_TRUE); draw_pass_3d_translucent(rctx, mdl::OBJ_TYPE_OPAQUE_ALPHA_ORDER_2, mdl::OBJ_TYPE_TRANSPARENT_ALPHA_ORDER_2, mdl::OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_2); - gl_state_disable_depth_test(); + gl_rend_state.disable_depth_test(); - gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); + gl_rend_state.set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); Glitter::glt_particle_manager->DispScenes(Glitter::DISP_NORMAL); - gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + gl_rend_state.set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - gl_state_enable_depth_test(); - gl_state_set_depth_mask(GL_TRUE); + gl_rend_state.enable_depth_test(); + gl_rend_state.set_depth_mask(GL_TRUE); draw_pass_3d_translucent(rctx, mdl::OBJ_TYPE_OPAQUE_ALPHA_ORDER_1, mdl::OBJ_TYPE_TRANSPARENT_ALPHA_ORDER_1, mdl::OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_1); if (Glitter::glt_particle_manager->CheckHasLocalEffect()) { // X - gl_state_begin_event("local"); + gl_rend_state.begin_event("local"); if (alpha_z_sort) rctx->disp_manager->obj_sort(&rctx->view_mat, mdl::OBJ_TYPE_LOCAL_TRANSLUCENT, 1); @@ -1103,30 +1103,30 @@ namespace rndr { rctx->disp_manager->draw(mdl::OBJ_TYPE_LOCAL_OPAQUE); rctx->disp_manager->draw(mdl::OBJ_TYPE_LOCAL_TRANSPARENT); - gl_state_enable_blend(); + gl_rend_state.enable_blend(); rctx->disp_manager->draw(mdl::OBJ_TYPE_LOCAL_TRANSLUCENT); - gl_state_disable_blend(); + gl_rend_state.disable_blend(); - gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); + gl_rend_state.set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); Glitter::glt_particle_manager->DispScenes(Glitter::DISP_LOCAL); - gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + gl_rend_state.set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); cam->set_fov(fov); - gl_state_end_event(); + gl_rend_state.end_event(); draw_pass_set_camera(); } - gl_state_active_bind_texture_2d(14, 0); - gl_state_active_bind_texture_2d(15, 0); + gl_rend_state.active_bind_texture_2d(14, 0); + gl_rend_state.active_bind_texture_2d(15, 0); - gl_state_disable_depth_test(); + gl_rend_state.disable_depth_test(); if (shadow) draw_pass_3d_shadow_reset(rctx); pass_sprite_surf(); shader::unbind(); - gl_state_bind_framebuffer(0); + gl_rend_state.bind_framebuffer(0); } void RenderManager::pass_show_vector() { @@ -1135,7 +1135,7 @@ namespace rndr { return; render_context* rctx = rctx_ptr; - gl_state_begin_event("pass_show_vector"); + gl_rend_state.begin_event("pass_show_vector"); rctx->camera->update_data(); rctx->view_mat = rctx->camera->view; @@ -1157,13 +1157,13 @@ namespace rndr { } } shader::unbind(); - gl_state_bind_framebuffer(0); - gl_state_end_event();*/ + gl_rend_state.bind_framebuffer(0); + gl_rend_state.end_event();*/ } void RenderManager::pass_post_process() { render_context* rctx = rctx_ptr; - gl_state_begin_event("pass_post_process"); + gl_rend_state.begin_event("pass_post_process"); texture* light_proj_tex = 0; light_proj* litproj = rctx->litproj; @@ -1175,7 +1175,7 @@ namespace rndr { } render->apply_post_process(rctx->camera, light_proj_tex, npr_param); - gl_state_end_event(); + gl_rend_state.end_event(); } void RenderManager::pass_sprite() { @@ -1183,14 +1183,14 @@ namespace rndr { if (!sprite_manager_get_reqlist_count(0)) return; - gl_state_begin_event("pass_sprite"); + gl_rend_state.begin_event("pass_sprite"); rndr::Render* rend = render; - gl_state_set_viewport(0, 0, width, height); + gl_rend_state.set_viewport(0, 0, width, height); #ifdef USE_OPENGL if (!Vulkan::use && multisample && multisample_framebuffer) { - gl_state_bind_framebuffer(multisample_framebuffer); - gl_state_enable_multisample(); + gl_rend_state.bind_framebuffer(multisample_framebuffer); + gl_rend_state.enable_multisample(); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT); } @@ -1198,29 +1198,29 @@ namespace rndr { rctx->screen_buffer.Bind(); #endif - gl_state_disable_depth_test(); - gl_state_enable_blend(); - gl_state_disable_cull_face(); + gl_rend_state.disable_depth_test(); + gl_rend_state.enable_blend(); + gl_rend_state.disable_cull_face(); sprite_manager_draw(0, true, rctx->screen_overlay_buffer.color_texture, rctx->camera->view_projection_aet_2d); - gl_state_enable_cull_face(); - gl_state_disable_blend(); - gl_state_enable_depth_test(); + gl_rend_state.enable_cull_face(); + gl_rend_state.disable_blend(); + gl_rend_state.enable_depth_test(); #ifdef USE_OPENGL if (!Vulkan::use && multisample && multisample_framebuffer) { - gl_state_bind_framebuffer(rctx->screen_buffer.fbos[0]); - gl_state_disable_multisample(); - gl_state_bind_read_framebuffer(multisample_framebuffer); + gl_rend_state.bind_framebuffer(rctx->screen_buffer.fbos[0]); + gl_rend_state.disable_multisample(); + gl_rend_state.bind_read_framebuffer(multisample_framebuffer); glBlitFramebuffer(0, 0, width, height, 0, 0, width, height, GL_COLOR_BUFFER_BIT, GL_NEAREST); - gl_state_bind_read_framebuffer(0); + gl_rend_state.bind_read_framebuffer(0); } #endif - gl_state_get_error(); - gl_state_bind_framebuffer(0); - gl_state_end_event(); + gl_get_error_print(); + gl_rend_state.bind_framebuffer(0); + gl_rend_state.end_event(); } void RenderManager::pass_3d_contour() { @@ -1236,12 +1236,12 @@ namespace rndr { contour_rt = render->sss_contour_texture; } - gl_state_begin_event("`anonymous-namespace'::draw_npr_frame"); - gl_state_enable_blend(); - gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); - gl_state_set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl_state_set_blend_equation(GL_FUNC_ADD); - gl_state_disable_depth_test(); + gl_rend_state.begin_event("`anonymous-namespace'::draw_npr_frame"); + gl_rend_state.enable_blend(); + gl_rend_state.set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); + gl_rend_state.set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gl_rend_state.set_blend_equation(GL_FUNC_ADD); + gl_rend_state.disable_depth_test(); quad_shader_data quad_data = {}; quad_data.g_texcoord_modifier = { 0.5f, 0.5f, 0.5f, 0.5f }; @@ -1252,26 +1252,26 @@ namespace rndr { rctx->contour_params_ubo.WriteMemory(contour_params_data); shaders_ft.set(SHADER_FT_CONTOUR_NPR); - gl_state_active_bind_texture_2d(14, rt->GetDepthTex()); - gl_state_active_bind_texture_2d(16, contour_rt->GetColorTex()); - gl_state_active_bind_texture_2d(17, contour_rt->GetDepthTex()); - gl_state_bind_sampler(14, rctx->render_samplers[1]); - gl_state_bind_sampler(16, rctx->render_samplers[1]); - gl_state_bind_sampler(17, rctx->render_samplers[1]); + gl_rend_state.active_bind_texture_2d(14, rt->GetDepthTex()); + gl_rend_state.active_bind_texture_2d(16, contour_rt->GetColorTex()); + gl_rend_state.active_bind_texture_2d(17, contour_rt->GetDepthTex()); + gl_rend_state.bind_sampler(14, rctx->render_samplers[1]); + gl_rend_state.bind_sampler(16, rctx->render_samplers[1]); + gl_rend_state.bind_sampler(17, rctx->render_samplers[1]); rctx->quad_ubo.Bind(0); rctx->contour_params_ubo.Bind(2); - gl_state_bind_vertex_array(rctx->common_vao); + gl_rend_state.bind_vertex_array(rctx->common_vao); shaders_ft.draw_arrays(GL_TRIANGLE_STRIP, 0, 4); if (effect_texture) - gl_state_active_bind_texture_2d(14, effect_texture->glid); + gl_rend_state.active_bind_texture_2d(14, effect_texture->glid); else - gl_state_active_bind_texture_2d(14, rctx->empty_texture_2d->glid); - gl_state_bind_sampler(14, rctx->render_samplers[0]); - gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - gl_state_enable_depth_test(); - gl_state_disable_blend(); - gl_state_end_event(); + gl_rend_state.active_bind_texture_2d(14, rctx->empty_texture_2d->glid); + gl_rend_state.bind_sampler(14, rctx->render_samplers[0]); + gl_rend_state.set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + gl_rend_state.enable_depth_test(); + gl_rend_state.disable_blend(); + gl_rend_state.end_event(); } void RenderManager::pass_sprite_surf() { @@ -1281,10 +1281,10 @@ namespace rndr { render_context* rctx = rctx_ptr; rndr::Render* rend = render; - gl_state_set_depth_mask(GL_FALSE); - gl_state_disable_depth_test(); - gl_state_enable_blend(); - gl_state_disable_cull_face(); + gl_rend_state.set_depth_mask(GL_FALSE); + gl_rend_state.disable_depth_test(); + gl_rend_state.enable_blend(); + gl_rend_state.disable_cull_face(); sprite_manager_draw(1, true, rend->temp_buffer.color_texture, rctx->camera->view_projection_aet_2d); @@ -1297,7 +1297,7 @@ void image_filter_scale(RenderTexture* dst, texture* src, const vec4& scale) { render_context* rctx = rctx_ptr; - gl_state_begin_event("`anonymous-namespace'::Impl::apply_no_filter_sub"); + gl_rend_state.begin_event("`anonymous-namespace'::Impl::apply_no_filter_sub"); dst->Bind(); dst->SetViewport(); @@ -1317,11 +1317,11 @@ void image_filter_scale(RenderTexture* dst, texture* src, const vec4& scale) { shaders_ft.set(SHADER_FT_IMGFILT); rctx->filter_scene_ubo.Bind(0); rctx->imgfilter_batch_ubo.Bind(1); - gl_state_active_bind_texture_2d(0, src->glid); - gl_state_bind_sampler(0, rctx->render_samplers[0]); - gl_state_bind_vertex_array(rctx->common_vao); + gl_rend_state.active_bind_texture_2d(0, src->glid); + gl_rend_state.bind_sampler(0, rctx->render_samplers[0]); + gl_rend_state.bind_vertex_array(rctx->common_vao); shaders_ft.draw_arrays(GL_TRIANGLE_STRIP, 0, 4); - gl_state_end_event(); + gl_rend_state.end_event(); } void draw_pass_set_camera() { @@ -1367,7 +1367,7 @@ void render_manager_init_data(int32_t ssaa, int32_t hd_res, int32_t ss_alpha_mas render_manager.shadow_ptr->init(); rctx_ptr->sss_data->init(); - gl_state_get_error(); + gl_get_error_print(); } void render_manager_free_data() { @@ -1383,8 +1383,8 @@ static void draw_pass_shadow_begin_make_shadowmap(Shadow* shad, int32_t index, i render_context* rctx = rctx_ptr; shad->curr_render_textures[0]->Bind(); texture* tex = shad->curr_render_textures[0]->color_texture; - gl_state_set_viewport(1, 1, tex->width - 2, tex->width - 2); - gl_state_enable_depth_test(); + gl_rend_state.set_viewport(1, 1, tex->width - 2, tex->width - 2); + gl_rend_state.enable_depth_test(); glClearColor(1.0, 1.0, 1.0, 1.0); if (!a3) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -1425,7 +1425,7 @@ static void draw_pass_shadow_begin_make_shadowmap(Shadow* shad, int32_t index, i static void draw_pass_shadow_end_make_shadowmap(Shadow* shad, int32_t index, int32_t a3) { render_context* rctx = rctx_ptr; - gl_state_disable_depth_test(); + gl_rend_state.disable_depth_test(); rctx->draw_state->shader_index = -1; if (a3 == shad->num_shadow - 1) { @@ -1456,10 +1456,10 @@ static void draw_pass_shadow_end_make_shadowmap(Shadow* shad, int32_t index, int glClear(GL_COLOR_BUFFER_BIT); } - gl_state_bind_framebuffer(0); - gl_state_bind_texture_2d(rend_tex->GetColorTex()); + gl_rend_state.bind_framebuffer(0); + gl_rend_state.bind_texture_2d(rend_tex->GetColorTex()); glGenerateMipmap(GL_TEXTURE_2D); - gl_state_bind_texture_2d(0); + gl_rend_state.bind_texture_2d(0); } static void draw_pass_shadow_filter(RenderTexture* a1, RenderTexture* a2, @@ -1475,7 +1475,7 @@ static void draw_pass_shadow_filter(RenderTexture* a1, RenderTexture* a2, render_context* rctx = rctx_ptr; - gl_state_begin_event("`anonymous-namespace'::Impl::apply_esm_filter"); + gl_rend_state.begin_event("`anonymous-namespace'::Impl::apply_esm_filter"); filter_scene_shader_data filter_scene = {}; filter_scene.g_transform = 0.0f; filter_scene.g_texcoord = { 1.0f, 1.0f, 0.0f, 0.0f }; @@ -1493,15 +1493,15 @@ static void draw_pass_shadow_filter(RenderTexture* a1, RenderTexture* a2, rctx->filter_scene_ubo.Bind(0); rctx->esm_filter_batch_ubo.Bind(1); - gl_state_set_viewport(0, 0, v7->width, v7->height); + gl_rend_state.set_viewport(0, 0, v7->width, v7->height); a2->Bind(); esm_filter_batch.g_params = { 1.0f / (float_t)v7->width, 0.0f, far_texel_offset, far_texel_offset }; rctx->esm_filter_batch_ubo.WriteMemory(esm_filter_batch); - gl_state_active_bind_texture_2d(0, v11->glid); - gl_state_bind_sampler(0, rctx->render_samplers[0]); - gl_state_bind_vertex_array(rctx->common_vao); + gl_rend_state.active_bind_texture_2d(0, v11->glid); + gl_rend_state.bind_sampler(0, rctx->render_samplers[0]); + gl_rend_state.bind_vertex_array(rctx->common_vao); shaders_ft.draw_arrays(GL_TRIANGLE_STRIP, 0, 4); a1->Bind(); @@ -1509,27 +1509,27 @@ static void draw_pass_shadow_filter(RenderTexture* a1, RenderTexture* a2, esm_filter_batch.g_params = { 0.0f, 1.0f / (float_t)v7->height, far_texel_offset, far_texel_offset }; rctx->esm_filter_batch_ubo.WriteMemory(esm_filter_batch); - gl_state_active_bind_texture_2d(0, v9->glid); - gl_state_bind_sampler(0, rctx->render_samplers[0]); - gl_state_bind_vertex_array(rctx->common_vao); + gl_rend_state.active_bind_texture_2d(0, v9->glid); + gl_rend_state.bind_sampler(0, rctx->render_samplers[0]); + gl_rend_state.bind_vertex_array(rctx->common_vao); shaders_ft.draw_arrays(GL_TRIANGLE_STRIP, 0, 4); shader::unbind(); - gl_state_end_event(); + gl_rend_state.end_event(); } static void draw_pass_shadow_esm_filter(RenderTexture* dst, RenderTexture* buf, RenderTexture* src) { texture* dst_tex = dst->color_texture; texture* buf_tex = buf->color_texture; texture* src_tex = src->color_texture; - gl_state_begin_event("`anonymous-namespace'::Impl::apply_esm_min_filter"); + gl_rend_state.begin_event("`anonymous-namespace'::Impl::apply_esm_min_filter"); if (!dst_tex || !dst_tex->glid || !buf_tex || !buf_tex->glid || !src_tex || !src_tex->glid) { - gl_state_end_event(); + gl_rend_state.end_event(); return; } render_context* rctx = rctx_ptr; - gl_state_begin_event("minimize"); + gl_rend_state.begin_event("minimize"); filter_scene_shader_data filter_scene = {}; filter_scene.g_transform = 0.0f; filter_scene.g_texcoord = { 1.0f, 1.0f, 0.0f, 0.0f }; @@ -1542,7 +1542,7 @@ static void draw_pass_shadow_esm_filter(RenderTexture* dst, RenderTexture* buf, rctx->filter_scene_ubo.Bind(0); rctx->esm_filter_batch_ubo.Bind(1); - gl_state_set_viewport(0, 0, dst_tex->width, dst_tex->height); + gl_rend_state.set_viewport(0, 0, dst_tex->width, dst_tex->height); buf->Bind(); esm_filter_batch.g_params = { 1.0f / (float_t)src_tex->width, @@ -1551,13 +1551,13 @@ static void draw_pass_shadow_esm_filter(RenderTexture* dst, RenderTexture* buf, uniform_value[U_ESM_FILTER] = 0; shaders_ft.set(SHADER_FT_ESMFILT); - gl_state_active_bind_texture_2d(0, src_tex->glid); - gl_state_bind_sampler(0, rctx->render_samplers[0]); - gl_state_bind_vertex_array(rctx->common_vao); + gl_rend_state.active_bind_texture_2d(0, src_tex->glid); + gl_rend_state.bind_sampler(0, rctx->render_samplers[0]); + gl_rend_state.bind_vertex_array(rctx->common_vao); shaders_ft.draw_arrays(GL_TRIANGLE_STRIP, 0, 4); - gl_state_end_event(); + gl_rend_state.end_event(); - gl_state_begin_event("erosion"); + gl_rend_state.begin_event("erosion"); dst->Bind(); esm_filter_batch.g_params = { 0.75f / (float_t)buf_tex->width, 0.75f / (float_t)buf_tex->height, 0.0f, 0.0f }; @@ -1565,12 +1565,12 @@ static void draw_pass_shadow_esm_filter(RenderTexture* dst, RenderTexture* buf, uniform_value[U_ESM_FILTER] = 1; shaders_ft.set(SHADER_FT_ESMFILT); - gl_state_active_bind_texture_2d(0, buf_tex->glid); - gl_state_bind_sampler(0, rctx->render_samplers[0]); - gl_state_bind_vertex_array(rctx->common_vao); + gl_rend_state.active_bind_texture_2d(0, buf_tex->glid); + gl_rend_state.bind_sampler(0, rctx->render_samplers[0]); + gl_rend_state.bind_vertex_array(rctx->common_vao); shaders_ft.draw_arrays(GL_TRIANGLE_STRIP, 0, 4); - gl_state_end_event(); - gl_state_end_event(); + gl_rend_state.end_event(); + gl_rend_state.end_event(); } static bool draw_pass_shadow_litproj(light_proj* litproj) { @@ -1583,23 +1583,23 @@ static bool draw_pass_shadow_litproj(light_proj* litproj) { litproj->draw_texture.Bind(); litproj->draw_texture.SetViewport(); - gl_state_enable_depth_test(); + gl_rend_state.enable_depth_test(); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClearDepthf(1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (!light_proj::set_mat(true)) { - gl_state_bind_framebuffer(0); + gl_rend_state.bind_framebuffer(0); return false; } render_context* rctx = rctx_ptr; rctx->draw_state->shader_index = SHADER_FT_LITPROJ; - gl_state_active_bind_texture_2d(17, tex->glid); - gl_state_bind_sampler(17, rctx->render_samplers[2]); - gl_state_active_bind_texture_2d(18, litproj->shadow_texture[0].GetColorTex()); - gl_state_bind_sampler(18, rctx->render_samplers[2]); - gl_state_active_texture(0); + gl_rend_state.active_bind_texture_2d(17, tex->glid); + gl_rend_state.bind_sampler(17, rctx->render_samplers[2]); + gl_rend_state.active_bind_texture_2d(18, litproj->shadow_texture[0].GetColorTex()); + gl_rend_state.bind_sampler(18, rctx->render_samplers[2]); + gl_rend_state.active_texture(0); return true; } @@ -1609,25 +1609,25 @@ static void draw_pass_sss_contour(render_context* rctx, rndr::Render* rend) { else rend->sss_contour_texture->Bind(); - gl_state_enable_depth_test(); - gl_state_set_depth_func(GL_ALWAYS); - gl_state_set_depth_mask(GL_TRUE); + gl_rend_state.enable_depth_test(); + gl_rend_state.set_depth_func(GL_ALWAYS); + gl_rend_state.set_depth_mask(GL_TRUE); if (reflect_draw) { RenderTexture& refl_tex = rctx->render_manager->get_render_texture(0); - gl_state_set_viewport(0, 0, refl_tex.GetWidth(), refl_tex.GetHeight()); - gl_state_active_bind_texture_2d(0, refl_tex.GetColorTex()); - gl_state_bind_sampler(0, rctx->render_samplers[1]); - gl_state_active_bind_texture_2d(1, refl_tex.GetDepthTex()); - gl_state_bind_sampler(1, rctx->render_samplers[1]); + gl_rend_state.set_viewport(0, 0, refl_tex.GetWidth(), refl_tex.GetHeight()); + gl_rend_state.active_bind_texture_2d(0, refl_tex.GetColorTex()); + gl_rend_state.bind_sampler(0, rctx->render_samplers[1]); + gl_rend_state.active_bind_texture_2d(1, refl_tex.GetDepthTex()); + gl_rend_state.bind_sampler(1, rctx->render_samplers[1]); } else { - gl_state_set_viewport(0, 0, rend->render_width[0], rend->render_height[0]); - gl_state_active_bind_texture_2d(0, rend->rend_texture[0].GetColorTex()); - gl_state_bind_sampler(0, rctx->render_samplers[1]); - gl_state_active_bind_texture_2d(1, rend->rend_texture[0].GetDepthTex()); - gl_state_bind_sampler(1, rctx->render_samplers[1]); + gl_rend_state.set_viewport(0, 0, rend->render_width[0], rend->render_height[0]); + gl_rend_state.active_bind_texture_2d(0, rend->rend_texture[0].GetColorTex()); + gl_rend_state.bind_sampler(0, rctx->render_samplers[1]); + gl_rend_state.active_bind_texture_2d(1, rend->rend_texture[0].GetDepthTex()); + gl_rend_state.bind_sampler(1, rctx->render_samplers[1]); } - gl_state_active_texture(0); + gl_rend_state.active_texture(0); camera* cam = rctx->camera; float_t v3 = 1.0f / tanf(cam->fov * 0.5f * DEG_TO_RAD_FLOAT); @@ -1739,27 +1739,27 @@ static void draw_pass_sss_filter(render_context* rctx, sss_data* sss) { v33 = max_def(v34 - 0.02f, 0.0f) * 8.0f * 0.6f; rctx->set_batch_sss_param({ v33, 0.0f, 0.0f, 0.0f }); - gl_state_active_texture(0); + gl_rend_state.active_texture(0); if (sss->npr_contour) { sss->textures[0].Bind(); - gl_state_set_viewport(0, 0, 640, 360); + gl_rend_state.set_viewport(0, 0, 640, 360); rndr::Render* rend = &rctx->render; uniform_value[U_REDUCE] = 0; shaders_ft.set(SHADER_FT_REDUCE); RenderTexture& rt = reflect_draw ? rctx->render_manager->get_render_texture(0) : rend->rend_texture[0]; - gl_state_bind_texture_2d(rt.GetColorTex()); - gl_state_bind_sampler(0, rctx->render_samplers[0]); + gl_rend_state.bind_texture_2d(rt.GetColorTex()); + gl_rend_state.bind_sampler(0, rctx->render_samplers[0]); rctx->render.draw_quad(rt.GetWidth(), rt.GetHeight(), 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f); } sss->textures[2].Bind(); - gl_state_set_viewport(0, 0, 320, 180); + gl_rend_state.set_viewport(0, 0, 320, 180); uniform_value[U_SSS_FILTER] = 0; shaders_ft.set(SHADER_FT_SSS_FILT); - gl_state_bind_texture_2d(sss->textures[0].GetColorTex()); - gl_state_bind_sampler(0, rctx->render_samplers[0]); + gl_rend_state.bind_texture_2d(sss->textures[0].GetColorTex()); + gl_rend_state.bind_sampler(0, rctx->render_samplers[0]); rctx->render.draw_quad(sss->textures[0].GetWidth(), sss->textures[0].GetHeight(), 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f); @@ -1774,15 +1774,15 @@ static void draw_pass_sss_filter(render_context* rctx, sss_data* sss) { rctx->sss_filter_gaussian_coef_ubo.WriteMemory(shader_data); sss->textures[reflect_draw ? 3 : 1].Bind(); - gl_state_set_viewport(0, 0, 320, 180); + gl_rend_state.set_viewport(0, 0, 320, 180); uniform_value[U_SSS_FILTER] = 3; shaders_ft.set(SHADER_FT_SSS_FILT); - gl_state_bind_texture_2d(sss->textures[2].GetColorTex()); - gl_state_bind_sampler(0, rctx->render_samplers[0]); + gl_rend_state.bind_texture_2d(sss->textures[2].GetColorTex()); + gl_rend_state.bind_sampler(0, rctx->render_samplers[0]); rctx->sss_filter_gaussian_coef_ubo.Bind(1); rctx->render.draw_quad(sss->textures[2].GetWidth(), sss->textures[2].GetHeight(), 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.96f, 1.0f, 0.0f); - gl_state_bind_texture_2d(0); + gl_rend_state.bind_texture_2d(0); } static int32_t draw_pass_3d_get_translucent_count(render_context* rctx) { @@ -1800,8 +1800,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, rctx->empty_texture_2d->glid); - gl_state_active_bind_texture_2d(7, rctx->empty_texture_2d->glid); + gl_rend_state.active_bind_texture_2d(6, rctx->empty_texture_2d->glid); + gl_rend_state.active_bind_texture_2d(7, rctx->empty_texture_2d->glid); rctx->draw_state->self_shadow = false; rctx->draw_state->shadow = false; } @@ -1809,22 +1809,22 @@ static void draw_pass_3d_shadow_reset(render_context* rctx) { static void draw_pass_3d_shadow_set(Shadow* shad, render_context* rctx) { float_t esm_param; if (shad->self_shadow && shad->num_shadow > 0) { - gl_state_active_bind_texture_2d(19, shad->render_textures[3].GetColorTex()); - gl_state_active_bind_texture_2d(20, shad->render_textures[5].GetColorTex()); - gl_state_active_texture(0); + gl_rend_state.active_bind_texture_2d(19, shad->render_textures[3].GetColorTex()); + gl_rend_state.active_bind_texture_2d(20, shad->render_textures[5].GetColorTex()); + gl_rend_state.active_texture(0); esm_param = (shad->field_2D8 * shad->field_208 * 2.0f) * 1.442695f; rctx->draw_state->self_shadow = true; } else { - gl_state_active_bind_texture_2d(19, rctx->empty_texture_2d->glid); - gl_state_active_bind_texture_2d(20, rctx->empty_texture_2d->glid); - gl_state_active_texture(0); + gl_rend_state.active_bind_texture_2d(19, rctx->empty_texture_2d->glid); + gl_rend_state.active_bind_texture_2d(20, rctx->empty_texture_2d->glid); + gl_rend_state.active_texture(0); esm_param = 0.0f; rctx->draw_state->self_shadow = false; } - gl_state_bind_sampler(19, rctx->render_samplers[0]); - gl_state_bind_sampler(20, rctx->render_samplers[0]); + gl_rend_state.bind_sampler(19, rctx->render_samplers[0]); + gl_rend_state.bind_sampler(20, rctx->render_samplers[0]); mat4 mats[2]; mats[0] = mat4_identity; @@ -1870,13 +1870,13 @@ static void draw_pass_3d_shadow_set(Shadow* shad, render_context* rctx) { int32_t j = 0; for (int32_t i = 0; i < 2; i++) if (shad->shadow_enable[i]) { - gl_state_active_bind_texture_2d(6 + j, shad->curr_render_textures[1 + i]->GetColorTex()); + gl_rend_state.active_bind_texture_2d(6 + j, shad->curr_render_textures[1 + i]->GetColorTex()); j++; } for (; j < 2; j++) - gl_state_active_bind_texture_2d(6 + j, rctx->empty_texture_2d->glid); - gl_state_active_texture(0); + gl_rend_state.active_bind_texture_2d(6 + j, rctx->empty_texture_2d->glid); + gl_rend_state.active_texture(0); light_set* set = &rctx->light_set[LIGHT_SET_MAIN]; light_data* data = &set->lights[LIGHT_SHADOW]; @@ -1894,8 +1894,8 @@ static void draw_pass_3d_shadow_set(Shadow* shad, render_context* rctx) { rctx->draw_state->shadow = false; for (int32_t i = 0; i < 2; i++) - gl_state_active_bind_texture_2d(6 + i, shad->curr_render_textures[1 + i]->GetColorTex()); - gl_state_active_texture(0); + gl_rend_state.active_bind_texture_2d(6 + i, shad->curr_render_textures[1 + i]->GetColorTex()); + gl_rend_state.active_texture(0); shadow_ambient = 1.0f; shadow_ambient1 = 0.0f; @@ -1903,8 +1903,8 @@ static void draw_pass_3d_shadow_set(Shadow* shad, render_context* rctx) { rctx->set_scene_shadow_params(esm_param, mats, shadow_ambient, shadow_ambient1); - gl_state_bind_sampler(6, 0); - gl_state_bind_sampler(7, 0); + gl_rend_state.bind_sampler(6, 0); + gl_rend_state.bind_sampler(7, 0); } static void draw_pass_3d_translucent(render_context* rctx, mdl::ObjType opaque, @@ -1927,9 +1927,9 @@ static void draw_pass_3d_translucent(render_context* rctx, mdl::ObjType opaque, if (rctx->render_manager->draw_pass_3d[DRAW_PASS_3D_TRANSPARENT] && rctx->disp_manager->get_obj_count(transparent)) rctx->disp_manager->draw(transparent, 0, true, alpha); if (rctx->render_manager->draw_pass_3d[DRAW_PASS_3D_TRANSLUCENT] && rctx->disp_manager->get_obj_count(translucent)) { - gl_state_enable_blend(); + gl_rend_state.enable_blend(); rctx->disp_manager->draw(translucent, 0, true, alpha); - gl_state_disable_blend(); + gl_rend_state.disable_blend(); } rend->transparency_combine((float_t)alpha * (float_t)(1.0 / 255.0)); } @@ -1975,7 +1975,7 @@ static void draw_pass_3d_translucent_has_objects(render_context* rctx, bool* arr static void draw_pass_reflect_full(rndr::RenderManager* render_manager) { render_context* rctx = rctx_ptr; - gl_state_begin_event("pass_reflect"); + gl_rend_state.begin_event("pass_reflect"); RenderTexture& refl_tex = render_manager->get_render_texture(0); RenderTexture& refl_buf_tex = rctx->reflect_buffer; refl_tex.Bind(); @@ -1990,7 +1990,7 @@ static void draw_pass_reflect_full(rndr::RenderManager* render_manager) { if (!rctx->sss_data->enable || !rctx->sss_data->npr_contour) glClear(GL_DEPTH_BUFFER_BIT); - gl_state_set_depth_func(GL_LEQUAL); + gl_rend_state.set_depth_func(GL_LEQUAL); for (int32_t i = LIGHT_SET_MAIN; i < LIGHT_SET_MAX; i++) rctx->light_set[i].data_set(rctx->face, (light_set_id)i); @@ -2003,10 +2003,10 @@ static void draw_pass_reflect_full(rndr::RenderManager* render_manager) { else glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - gl_state_enable_depth_test(); - gl_state_set_depth_func(GL_LEQUAL); - gl_state_set_depth_mask(GL_TRUE); - gl_state_set_cull_face_mode(GL_FRONT); + gl_rend_state.enable_depth_test(); + gl_rend_state.set_depth_func(GL_LEQUAL); + gl_rend_state.set_depth_mask(GL_TRUE); + gl_rend_state.set_cull_face_mode(GL_FRONT); reflect_draw = true; rctx->draw_state->shader_index = -1; @@ -2021,17 +2021,17 @@ static void draw_pass_reflect_full(rndr::RenderManager* render_manager) { draw_pass_3d_shadow_reset(rctx); if (render_manager->effect_texture) - gl_state_active_bind_texture_2d(14, render_manager->effect_texture->glid); + gl_rend_state.active_bind_texture_2d(14, render_manager->effect_texture->glid); else - gl_state_active_bind_texture_2d(14, rctx->empty_texture_2d->glid); + gl_rend_state.active_bind_texture_2d(14, rctx->empty_texture_2d->glid); uniform_value[U_WATER_REFLECT] = 0; rctx->sss_data->set_texture(3); - gl_state_bind_sampler(14, rctx->render_samplers[0]); - gl_state_bind_sampler(15, rctx->render_samplers[0]); - gl_state_bind_sampler(16, rctx->render_samplers[0]); + gl_rend_state.bind_sampler(14, rctx->render_samplers[0]); + gl_rend_state.bind_sampler(15, rctx->render_samplers[0]); + gl_rend_state.bind_sampler(16, rctx->render_samplers[0]); uniform_value[U_STAGE_AMBIENT] = render_manager->light_stage_ambient ? 1 : 0; @@ -2048,60 +2048,60 @@ static void draw_pass_reflect_full(rndr::RenderManager* render_manager) { rctx->disp_manager->obj_sort(&rctx->view_mat, mdl::OBJ_TYPE_REFLECT_OPAQUE, 0); if (render_manager->draw_pass_3d[DRAW_PASS_3D_OPAQUE]) { - gl_state_enable_depth_test(); - gl_state_set_depth_mask(GL_TRUE); + gl_rend_state.enable_depth_test(); + gl_rend_state.set_depth_mask(GL_TRUE); rctx->disp_manager->draw(mdl::OBJ_TYPE_REFLECT_OPAQUE); - gl_state_disable_depth_test(); + gl_rend_state.disable_depth_test(); } Glitter::glt_particle_manager->DispScenes(Glitter::DISP_OPAQUE); - gl_state_enable_depth_test(); - gl_state_set_depth_mask(GL_TRUE); + gl_rend_state.enable_depth_test(); + gl_rend_state.set_depth_mask(GL_TRUE); if (render_manager->draw_pass_3d[DRAW_PASS_3D_TRANSPARENT]) { - gl_state_set_cull_face_mode(GL_FRONT); + gl_rend_state.set_cull_face_mode(GL_FRONT); rctx->disp_manager->draw(mdl::OBJ_TYPE_REFLECT_TRANSPARENT); } if (render_manager->npr_param == 1) render_manager->pass_3d_contour(); - gl_state_disable_depth_test(); + gl_rend_state.disable_depth_test(); - gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); + gl_rend_state.set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); Glitter::glt_particle_manager->DispScenes(Glitter::DISP_ALPHA); - gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + gl_rend_state.set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); /*if (npr_param == 1) { - gl_state_set_color_mask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE); + gl_rend_state.set_color_mask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT); - gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + gl_rend_state.set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); }*/ - gl_state_enable_depth_test(); + gl_rend_state.enable_depth_test(); if (render_manager->draw_pass_3d[DRAW_PASS_3D_TRANSLUCENT]) { - gl_state_enable_blend(); - gl_state_set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - gl_state_set_depth_mask(GL_FALSE); - gl_state_set_cull_face_mode(GL_FRONT); + gl_rend_state.enable_blend(); + gl_rend_state.set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + gl_rend_state.set_depth_mask(GL_FALSE); + gl_rend_state.set_cull_face_mode(GL_FRONT); rctx->disp_manager->draw(mdl::OBJ_TYPE_REFLECT_TRANSLUCENT_SORT_BY_RADIUS); rctx->disp_manager->draw(mdl::OBJ_TYPE_REFLECT_TRANSLUCENT); - gl_state_disable_blend(); + gl_rend_state.disable_blend(); } - gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); // X + gl_rend_state.set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); // X Glitter::glt_particle_manager->DispScenes(Glitter::DISP_TYPE_2); - gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - gl_state_disable_depth_test(); + gl_rend_state.set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + gl_rend_state.disable_depth_test(); - gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); + gl_rend_state.set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); Glitter::glt_particle_manager->DispScenes(Glitter::DISP_NORMAL); - gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + gl_rend_state.set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - gl_state_active_bind_texture_2d(14, 0); - gl_state_active_bind_texture_2d(15, 0); + gl_rend_state.active_bind_texture_2d(14, 0); + gl_rend_state.active_bind_texture_2d(15, 0); if (render_manager->shadow) draw_pass_3d_shadow_reset(rctx); @@ -2111,8 +2111,8 @@ static void draw_pass_reflect_full(rndr::RenderManager* render_manager) { render->render_height[0], render->render_width[0], render->render_height[0]); reflect_draw = false; - gl_state_set_cull_face_mode(GL_BACK); - gl_state_disable_depth_test(); + gl_rend_state.set_cull_face_mode(GL_BACK); + gl_rend_state.disable_depth_test(); for (int32_t i = render_manager->reflect_blur_num, j = 0; i > 0; i--, j++) { blur_filter_apply(rctx, &refl_buf_tex, &refl_tex, @@ -2128,8 +2128,8 @@ static void draw_pass_reflect_full(rndr::RenderManager* render_manager) { glClearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); } shader::unbind(); - gl_state_bind_framebuffer(0); - gl_state_end_event(); + gl_rend_state.bind_framebuffer(0); + gl_rend_state.end_event(); } static void blur_filter_apply(render_context* rctx, RenderTexture* dst, RenderTexture* src, @@ -2137,7 +2137,7 @@ static void blur_filter_apply(render_context* rctx, RenderTexture* dst, RenderTe if (!dst || !src) return; - gl_state_begin_event("`anonymous-namespace'::Impl::apply_blur_filter_sub"); + gl_rend_state.begin_event("`anonymous-namespace'::Impl::apply_blur_filter_sub"); dst->Bind(); dst->SetViewport(); @@ -2159,14 +2159,14 @@ static void blur_filter_apply(render_context* rctx, RenderTexture* dst, RenderTe rctx->imgfilter_batch_ubo.WriteMemory(imgfilter_batch); uniform_value[U_IMAGE_FILTER] = filter == BLUR_FILTER_32 ? 1 : 0; - gl_state_bind_vertex_array(rctx->box_vao); + gl_rend_state.bind_vertex_array(rctx->box_vao); shaders_ft.set(SHADER_FT_IMGFILT); rctx->filter_scene_ubo.Bind(0); rctx->imgfilter_batch_ubo.Bind(1); - gl_state_active_bind_texture_2d(0, src->GetColorTex()); - gl_state_bind_sampler(0, rctx->render_samplers[0]); + gl_rend_state.active_bind_texture_2d(0, src->GetColorTex()); + gl_rend_state.bind_sampler(0, rctx->render_samplers[0]); shaders_ft.draw_arrays(GL_TRIANGLE_STRIP, (GLint)(filter * 4LL), 4); - gl_state_end_event(); + gl_rend_state.end_event(); } static void render_manager_free_render_textures() { @@ -2198,7 +2198,7 @@ static void render_manager_init_render_textures(int32_t multisample) { glGenFramebuffers(1, &render_manager.multisample_framebuffer); glGenRenderbuffers(1, &render_manager.multisample_renderbuffer); - gl_state_bind_framebuffer(render_manager.multisample_framebuffer); + gl_rend_state.bind_framebuffer(render_manager.multisample_framebuffer); glBindRenderbuffer(GL_RENDERBUFFER, render_manager.multisample_renderbuffer); glRenderbufferStorageMultisample(GL_RENDERBUFFER, 8, GL_RGBA8, render_manager.width, render_manager.height); @@ -2206,7 +2206,7 @@ static void render_manager_init_render_textures(int32_t multisample) { GL_RENDERBUFFER, render_manager.multisample_renderbuffer); glDrawBuffer(GL_COLOR_ATTACHMENT0); glReadBuffer(GL_COLOR_ATTACHMENT0); - gl_state_bind_framebuffer(0); + gl_rend_state.bind_framebuffer(0); glBindRenderbuffer(GL_RENDERBUFFER, 0); if (glGetError()) { @@ -2230,7 +2230,7 @@ static void render_manager_init_render_textures(int32_t multisample) { glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } - gl_state_bind_framebuffer(0); + gl_rend_state.bind_framebuffer(0); } static void set_reflect_mat(render_context* rctx) { diff --git a/src/CRE/render_texture.cpp b/src/CRE/render_texture.cpp index bac121f2..aeb0b140 100644 --- a/src/CRE/render_texture.cpp +++ b/src/CRE/render_texture.cpp @@ -28,11 +28,11 @@ int32_t RenderTexture::Bind(int32_t index) { if (index < 0 || index > max_level) return -1; - gl_state_bind_framebuffer(fbos[index]); + gl_rend_state.bind_framebuffer(fbos[index]); if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) return -1; - gl_state_get_error(); + gl_get_error_print(); return 0; } @@ -123,22 +123,22 @@ int32_t RenderTexture::Init(int32_t width, int32_t height, } /*int32_t RenderTexture::InitDepthRenderbuffer(GLenum internal_format, int32_t width, int32_t height) { - gl_state_bind_framebuffer(fbos[0]); + gl_rend_state.bind_framebuffer(fbos[0]); glGenRenderbuffers(1, &depth_rbo); glBindRenderbuffer(GL_RENDERBUFFER, depth_rbo); glRenderbufferStorage(GL_RENDERBUFFER, internal_format, width, height); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depth_rbo); - gl_state_bind_framebuffer(0); + gl_rend_state.bind_framebuffer(0); return -(glGetError() != GL_ZERO); } int32_t RenderTexture::InitStencilRenderbuffer(GLenum internal_format, int32_t width, int32_t height) { - gl_state_bind_framebuffer(fbos[0]); + gl_rend_state.bind_framebuffer(fbos[0]); glGenRenderbuffers(1, &stencil_rbo); glBindRenderbuffer(GL_RENDERBUFFER, stencil_rbo); glRenderbufferStorage(GL_RENDERBUFFER, internal_format, width, height); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, stencil_rbo); - gl_state_bind_framebuffer(0); + gl_rend_state.bind_framebuffer(0); return -(glGetError() != GL_ZERO); }*/ @@ -159,7 +159,7 @@ void render_texture_counter_reset() { static int32_t render_texture_init_framebuffer(RenderTexture* rt, int32_t max_level) { rt->fbos = force_malloc(max_level + 1LL); glGenFramebuffers(max_level + 1, rt->fbos); - return -(gl_state_get_error() != GL_ZERO); + return -(gl_get_error_print() != GL_ZERO); } static int32_t render_texture_set_framebuffer_texture(RenderTexture* rt, @@ -167,22 +167,22 @@ static int32_t render_texture_set_framebuffer_texture(RenderTexture* rt, if (level < 0 || level > rt->max_level) return -1; - gl_state_bind_framebuffer(rt->fbos[level]); - gl_state_get_error(); + gl_rend_state.bind_framebuffer(rt->fbos[level]); + gl_get_error_print(); if (color_texture) { glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, color_texture, level); - gl_state_get_error(); + gl_get_error_print(); glDrawBuffer(GL_COLOR_ATTACHMENT0); glReadBuffer(GL_COLOR_ATTACHMENT0); } else { glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, 0, 0); - gl_state_get_error(); + gl_get_error_print(); glDrawBuffer(GL_ZERO); glReadBuffer(GL_ZERO); } - gl_state_get_error(); + gl_get_error_print(); if (!level) { GLenum attechment = stencil ? GL_DEPTH_STENCIL_ATTACHMENT : GL_DEPTH_ATTACHMENT; @@ -194,13 +194,13 @@ static int32_t render_texture_set_framebuffer_texture(RenderTexture* rt, }*/ else glFramebufferTexture(GL_FRAMEBUFFER, attechment, 0, 0); - gl_state_get_error(); + gl_get_error_print(); } int32_t ret = 0; if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) ret = -1; - gl_state_bind_framebuffer(0); - gl_state_get_error(); + gl_rend_state.bind_framebuffer(0); + gl_get_error_print(); return ret; } diff --git a/src/CRE/render_texture.hpp b/src/CRE/render_texture.hpp index 0ce9af25..8940659a 100644 --- a/src/CRE/render_texture.hpp +++ b/src/CRE/render_texture.hpp @@ -6,7 +6,7 @@ #pragma once #include "shared.hpp" -#include "gl_state.hpp" +#include "gl_rend_state.hpp" #include "texture.hpp" struct RenderTexture { @@ -47,7 +47,7 @@ struct RenderTexture { }; inline void SetViewport() { - gl_state_set_viewport(0, 0, GetWidth(), GetHeight()); + gl_rend_state.set_viewport(0, 0, GetWidth(), GetHeight()); }; }; diff --git a/src/CRE/renderer/dof.cpp b/src/CRE/renderer/dof.cpp index 300353f5..1c249a8d 100644 --- a/src/CRE/renderer/dof.cpp +++ b/src/CRE/renderer/dof.cpp @@ -5,7 +5,7 @@ #include "dof.hpp" #include "../rob/rob.hpp" -#include "../gl_state.hpp" +#include "../gl_rend_state.hpp" #include "../shader_ft.hpp" struct dof_common_shader_data { @@ -176,16 +176,16 @@ namespace renderer { void DOF3::apply_f2(RenderTexture* rt, RenderTexture* buf_rt, GLuint color_texture, GLuint depth_texture, float_t min_distance, float_t max_distance, float_t fov, float_t focus, float_t focus_range, float_t fuzzing_range, float_t ratio) { - gl_state_begin_event("renderer::DOF3::apply_f2"); - gl_state_disable_blend(); - gl_state_set_depth_mask(GL_FALSE); - gl_state_set_depth_func(GL_ALWAYS); + gl_rend_state.begin_event("renderer::DOF3::apply_f2"); + gl_rend_state.disable_blend(); + gl_rend_state.set_depth_mask(GL_FALSE); + gl_rend_state.set_depth_func(GL_ALWAYS); update_data(min_distance, max_distance, fov, focus, 0.0f, 1.0f, focus_range, fuzzing_range, ratio); uniform_value[U_DOF] = 1; - gl_state_bind_vertex_array(vao); + gl_rend_state.bind_vertex_array(vao); render_tiles(depth_texture, true); downsample(color_texture, depth_texture, true); apply_main_filter(true); @@ -193,26 +193,26 @@ namespace renderer { shader::unbind(); for (int32_t i = 0; i < 8; i++) { - gl_state_bind_sampler(i, 0); - gl_state_active_bind_texture_2d(i, 0); + gl_rend_state.bind_sampler(i, 0); + gl_rend_state.active_bind_texture_2d(i, 0); } - gl_state_bind_vertex_array(0); - gl_state_end_event(); + gl_rend_state.bind_vertex_array(0); + gl_rend_state.end_event(); } void DOF3::apply_physical(RenderTexture* rt, RenderTexture* buf_rt, GLuint color_texture, GLuint depth_texture, float_t min_distance, float_t max_distance, float_t focus, float_t focal_length, float_t fov, float_t f_number) { - gl_state_begin_event("renderer::DOF3::apply_physical"); - gl_state_disable_blend(); - gl_state_set_depth_mask(GL_FALSE); - gl_state_set_depth_func(GL_ALWAYS); + gl_rend_state.begin_event("renderer::DOF3::apply_physical"); + gl_rend_state.disable_blend(); + gl_rend_state.set_depth_mask(GL_FALSE); + gl_rend_state.set_depth_func(GL_ALWAYS); update_data(min_distance, max_distance, fov, focus, focal_length, f_number, 0.0f, 0.1f, 0.0f); uniform_value[U_DOF] = 0; - gl_state_bind_vertex_array(vao); + gl_rend_state.bind_vertex_array(vao); render_tiles(depth_texture, false); downsample(color_texture, depth_texture, false); apply_main_filter(false); @@ -220,93 +220,93 @@ namespace renderer { shader::unbind(); for (int32_t i = 0; i < 8; i++) { - gl_state_bind_sampler(i, 0); - gl_state_active_bind_texture_2d(i, 0); + gl_rend_state.bind_sampler(i, 0); + gl_rend_state.active_bind_texture_2d(i, 0); } - gl_state_bind_vertex_array(0); - gl_state_end_event(); + gl_rend_state.bind_vertex_array(0); + gl_rend_state.end_event(); } void DOF3::render_tiles(GLuint depth_texture, bool f2) { - gl_state_begin_event("renderer::DOF3::render_tiles"); + gl_rend_state.begin_event("renderer::DOF3::render_tiles"); fbo[0].bind_buffer(); - gl_state_set_viewport(0, 0, fbo[0].width, fbo[0].height); + gl_rend_state.set_viewport(0, 0, fbo[0].width, fbo[0].height); uniform_value[U_DOF_STAGE] = 0; shaders_ft.set(SHADER_FT_DOF); common_ubo.Bind(0); - gl_state_active_bind_texture_2d(0, depth_texture); - gl_state_bind_sampler(0, samplers[1]); + gl_rend_state.active_bind_texture_2d(0, depth_texture); + gl_rend_state.bind_sampler(0, samplers[1]); shaders_ft.draw_arrays(GL_TRIANGLE_STRIP, 0, 4); fbo[1].bind_buffer(); - gl_state_set_viewport(0, 0, fbo[1].width, fbo[1].height); + gl_rend_state.set_viewport(0, 0, fbo[1].width, fbo[1].height); uniform_value[U_DOF_STAGE] = 1; shaders_ft.set(SHADER_FT_DOF); - gl_state_active_bind_texture_2d(0, textures[0]); - gl_state_bind_sampler(0, samplers[1]); + gl_rend_state.active_bind_texture_2d(0, textures[0]); + gl_rend_state.bind_sampler(0, samplers[1]); shaders_ft.draw_arrays(GL_TRIANGLE_STRIP, 0, 4); - gl_state_end_event(); + gl_rend_state.end_event(); } void DOF3::downsample(GLuint color_texture, GLuint depth_texture, bool f2) { - gl_state_begin_event("renderer::DOF3::downsample"); + gl_rend_state.begin_event("renderer::DOF3::downsample"); fbo[2].bind_buffer(); - gl_state_set_viewport(0, 0, fbo[2].width, fbo[2].height); + gl_rend_state.set_viewport(0, 0, fbo[2].width, fbo[2].height); uniform_value[U_DOF_STAGE] = 2; shaders_ft.set(SHADER_FT_DOF); common_ubo.Bind(0); - gl_state_active_bind_texture_2d(0, depth_texture); - gl_state_bind_sampler(0, samplers[1]); - gl_state_active_bind_texture_2d(1, color_texture); - gl_state_bind_sampler(1, samplers[0]); - gl_state_active_bind_texture_2d(2, textures[1]); - gl_state_bind_sampler(2, samplers[1]); + gl_rend_state.active_bind_texture_2d(0, depth_texture); + gl_rend_state.bind_sampler(0, samplers[1]); + gl_rend_state.active_bind_texture_2d(1, color_texture); + gl_rend_state.bind_sampler(1, samplers[0]); + gl_rend_state.active_bind_texture_2d(2, textures[1]); + gl_rend_state.bind_sampler(2, samplers[1]); shaders_ft.draw_arrays(GL_TRIANGLE_STRIP, 0, 4); - gl_state_end_event(); + gl_rend_state.end_event(); } void DOF3::apply_main_filter(bool f2) { - gl_state_begin_event("renderer::DOF3::apply_main_filter"); + gl_rend_state.begin_event("renderer::DOF3::apply_main_filter"); fbo[3].bind_buffer(); - gl_state_set_viewport(0, 0, fbo[3].width, fbo[3].height); + gl_rend_state.set_viewport(0, 0, fbo[3].width, fbo[3].height); uniform_value[U_DOF_STAGE] = 3; shaders_ft.set(SHADER_FT_DOF); common_ubo.Bind(0); texcoords_ubo.Bind(1); - gl_state_active_bind_texture_2d(0, textures[3]); - gl_state_bind_sampler(0, samplers[1]); - gl_state_active_bind_texture_2d(1, textures[2]); - gl_state_bind_sampler(1, samplers[1]); - gl_state_active_bind_texture_2d(2, textures[1]); - gl_state_bind_sampler(2, samplers[1]); + gl_rend_state.active_bind_texture_2d(0, textures[3]); + gl_rend_state.bind_sampler(0, samplers[1]); + gl_rend_state.active_bind_texture_2d(1, textures[2]); + gl_rend_state.bind_sampler(1, samplers[1]); + gl_rend_state.active_bind_texture_2d(2, textures[1]); + gl_rend_state.bind_sampler(2, samplers[1]); shaders_ft.draw_arrays(GL_TRIANGLE_STRIP, 0, 4); - gl_state_end_event(); + gl_rend_state.end_event(); } void DOF3::upsample(RenderTexture* rt, RenderTexture* buf_rt, GLuint color_texture, GLuint depth_texture, bool f2) { - gl_state_begin_event("renderer::DOF3::upsample"); + gl_rend_state.begin_event("renderer::DOF3::upsample"); buf_rt->Bind(); - gl_state_set_viewport(0, 0, width, height); + gl_rend_state.set_viewport(0, 0, width, height); uniform_value[U_DOF_STAGE] = 4; shaders_ft.set(SHADER_FT_DOF); common_ubo.Bind(0); - gl_state_active_bind_texture_2d(0, textures[4]); - gl_state_bind_sampler(0, samplers[1]); - gl_state_active_bind_texture_2d(1, textures[5]); - gl_state_bind_sampler(1, samplers[1]); - gl_state_active_bind_texture_2d(2, textures[1]); - gl_state_bind_sampler(2, samplers[1]); - gl_state_active_bind_texture_2d(3, color_texture); - gl_state_bind_sampler(3, samplers[1]); - gl_state_active_bind_texture_2d(4, depth_texture); - gl_state_bind_sampler(4, samplers[1]); + gl_rend_state.active_bind_texture_2d(0, textures[4]); + gl_rend_state.bind_sampler(0, samplers[1]); + gl_rend_state.active_bind_texture_2d(1, textures[5]); + gl_rend_state.bind_sampler(1, samplers[1]); + gl_rend_state.active_bind_texture_2d(2, textures[1]); + gl_rend_state.bind_sampler(2, samplers[1]); + gl_rend_state.active_bind_texture_2d(3, color_texture); + gl_rend_state.bind_sampler(3, samplers[1]); + gl_rend_state.active_bind_texture_2d(4, depth_texture); + gl_rend_state.bind_sampler(4, samplers[1]); shaders_ft.draw_arrays(GL_TRIANGLE_STRIP, 0, 4); glCopyImageSubData( buf_rt->GetColorTex(), GL_TEXTURE_2D, 0, 0, 0, 0, rt->GetColorTex(), GL_TEXTURE_2D, 0, 0, 0, 0, width, height, 1); - gl_state_end_event(); + gl_rend_state.end_event(); } void DOF3::init_textures(int32_t width, int32_t height) { diff --git a/src/CRE/renderer/fbo.cpp b/src/CRE/renderer/fbo.cpp index 2b4fd2b2..a8f1b455 100644 --- a/src/CRE/renderer/fbo.cpp +++ b/src/CRE/renderer/fbo.cpp @@ -4,7 +4,7 @@ */ #include "fbo.hpp" -#include "../gl_state.hpp" +#include "../gl_rend_state.hpp" namespace renderer { FBO::FBO() : flags(), width(), height(), buffer(), count(), textures() { @@ -41,7 +41,7 @@ namespace renderer { textures[count] = depth_texture; glGenFramebuffers(1, &buffer); - gl_state_bind_framebuffer(buffer, true); + gl_rend_state.bind_framebuffer(buffer, true); for (int32_t i = 0; i < count; i++) glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, textures[i], 0); @@ -53,7 +53,7 @@ namespace renderer { color_attachments[i] = GL_COLOR_ATTACHMENT0 + i; glDrawBuffers(count, color_attachments); glCheckFramebufferStatus(GL_FRAMEBUFFER); - gl_state_bind_framebuffer(0); + gl_rend_state.bind_framebuffer(0); } #pragma warning(pop) diff --git a/src/CRE/renderer/fbo.hpp b/src/CRE/renderer/fbo.hpp index 807b806f..d71a9afa 100644 --- a/src/CRE/renderer/fbo.hpp +++ b/src/CRE/renderer/fbo.hpp @@ -5,7 +5,7 @@ #pragma once -#include "../gl_state.hpp" +#include "../gl_rend_state.hpp" #include "../shared.hpp" namespace renderer { @@ -29,7 +29,7 @@ namespace renderer { void free(); inline void bind_buffer() { - gl_state_bind_framebuffer(buffer); + gl_rend_state.bind_framebuffer(buffer); } }; } diff --git a/src/CRE/renderer/transparency.cpp b/src/CRE/renderer/transparency.cpp index 30420afc..05b485d3 100644 --- a/src/CRE/renderer/transparency.cpp +++ b/src/CRE/renderer/transparency.cpp @@ -5,7 +5,7 @@ #include "transparency.hpp" #include "../../KKdLib/str_utils.hpp" -#include "../gl_state.hpp" +#include "../gl_rend_state.hpp" #include "../render_context.hpp" #include "../shader_ft.hpp" @@ -44,16 +44,16 @@ namespace renderer { shader_data.g_opacity = { alpha, 0.0f, 0.0f, 0.0f }; rctx_ptr->transparency_batch_ubo.WriteMemory(shader_data); - gl_state_disable_blend(); - gl_state_disable_depth_test(); + gl_rend_state.disable_blend(); + gl_rend_state.disable_depth_test(); rctx_ptr->render_buffer.Bind(); shaders_ft.set(SHADER_FT_TRANSPARENCY); rctx_ptr->transparency_batch_ubo.Bind(0); - gl_state_active_bind_texture_2d(0, fbo.textures[0]); - gl_state_active_bind_texture_2d(1, rt->GetColorTex()); - gl_state_bind_vertex_array(vao); + gl_rend_state.active_bind_texture_2d(0, fbo.textures[0]); + gl_rend_state.active_bind_texture_2d(1, rt->GetColorTex()); + gl_rend_state.bind_vertex_array(vao); shaders_ft.draw_arrays(GL_TRIANGLE_STRIP, 0, 4); - gl_state_enable_depth_test(); + gl_rend_state.enable_depth_test(); glCopyImageSubData(rctx_ptr->render_buffer.GetColorTex(), GL_TEXTURE_2D, 0, 0, 0, 0, rt->GetColorTex(), GL_TEXTURE_2D, 0, 0, 0, 0, fbo.width, fbo.height, 1); @@ -63,7 +63,7 @@ namespace renderer { glCopyImageSubData(texture, GL_TEXTURE_2D, 0, 0, 0, 0, fbo.textures[0], GL_TEXTURE_2D, 0, 0, 0, 0, fbo.width, fbo.height, 1); fbo.bind_buffer(); - gl_state_set_viewport(0, 0, fbo.width, fbo.height); + gl_rend_state.set_viewport(0, 0, fbo.width, fbo.height); } void Transparency::resize(GLuint color_texture, GLuint depth_texture, int32_t width, int32_t height) { diff --git a/src/CRE/shader.cpp b/src/CRE/shader.cpp index f280107f..11dfbba2 100644 --- a/src/CRE/shader.cpp +++ b/src/CRE/shader.cpp @@ -13,7 +13,8 @@ #include "Vulkan/gl_wrap.hpp" #include "Vulkan/Manager.hpp" #include "Vulkan/ShaderModule.hpp" -#include "gl_state.hpp" +#include "gl_rend_state.hpp" +#include "shared.hpp" #include struct program_binary { @@ -69,7 +70,7 @@ int32_t shader::bind(shader_set_data* set, uint32_t sub_index) { GLuint program = sub_shader->programs[unival_shad]; set->curr_program = program; - gl_state_use_program(program); + gl_rend_state.use_program(program); return 0; } @@ -489,7 +490,7 @@ char* shader::parse_include(char* data, farc* f) { } void shader::unbind() { - gl_state_use_program(0); + gl_rend_state.use_program(0); } shader_set_data::shader_set_data() : size(), shaders(), curr_program(), primitive_restart(), @@ -1110,13 +1111,13 @@ void shader_set_data::load(farc* f, bool ignore_cache, if (programs[k] && samplers.size()) { GLuint program = programs[k]; - gl_state_use_program(program); + gl_rend_state.use_program(program); for (auto& i : samplers) { GLint loc = glGetUniformLocation(program, i.second.c_str()); if (loc != -1) glUniform1i(loc, i.first); } - gl_state_use_program(0); + gl_rend_state.use_program(0); } if (programs[k] && uniforms.size()) { @@ -1175,13 +1176,13 @@ void shader_set_data::load(farc* f, bool ignore_cache, if (programs[0] && samplers.size()) { GLuint program = programs[0]; - gl_state_use_program(program); + gl_rend_state.use_program(program); for (auto& i : samplers) { GLint loc = glGetUniformLocation(program, i.second.c_str()); if (loc != -1) glUniform1i(loc, i.first); } - gl_state_use_program(0); + gl_rend_state.use_program(0); } if (programs[0] && uniforms.size()) { @@ -1439,7 +1440,7 @@ static GLuint shader_compile(const char* vert, const char* frag, const char* vp, return 0; } else { - gl_state_get_all_gl_errors(); + gl_get_error_all_print(); return program; } } @@ -1513,13 +1514,13 @@ static GLuint shader_compile_binary(const char* vert, const char* frag, const ch return 0; } else { - gl_state_get_all_gl_errors(); + gl_get_error_all_print(); GLenum binary_format = 0x0; GLsizei length = 0; while (*buffer_size < 0x7FFFFFF) { glGetProgramBinary(program, *buffer_size, &length, &binary_format, *binary); - if (!gl_state_get_error()) + if (!gl_get_error_print()) break; free_def(*binary); @@ -1570,11 +1571,11 @@ static bool shader_update_data(shader_set_data* set) { return false; if (set->primitive_restart) { - gl_state_enable_primitive_restart(); - gl_state_set_primitive_restart_index(set->primitive_restart_index); + gl_rend_state.enable_primitive_restart(); + gl_rend_state.set_primitive_restart_index(set->primitive_restart_index); } else - gl_state_disable_primitive_restart(); + gl_rend_state.disable_primitive_restart(); return true; } diff --git a/src/CRE/shader_dev.cpp b/src/CRE/shader_dev.cpp index e7a1e201..8502e020 100644 --- a/src/CRE/shader_dev.cpp +++ b/src/CRE/shader_dev.cpp @@ -5,7 +5,7 @@ #include "shader_dev.hpp" #include "../KKdLib/str_utils.hpp" -#include "gl_state.hpp" +#include "gl_rend_state.hpp" #include "random.hpp" #include "render_context.hpp" diff --git a/src/CRE/shader_ft.cpp b/src/CRE/shader_ft.cpp index a0b43a1c..96c7d090 100644 --- a/src/CRE/shader_ft.cpp +++ b/src/CRE/shader_ft.cpp @@ -6,7 +6,7 @@ #include "shader_ft.hpp" #include "../KKdLib/str_utils.hpp" #include "app_system_detail.hpp" -#include "gl_state.hpp" +#include "gl_rend_state.hpp" #include "random.hpp" #include "render_context.hpp" diff --git a/src/CRE/shadow.cpp b/src/CRE/shadow.cpp index 78ff71de..8eddbc6b 100644 --- a/src/CRE/shadow.cpp +++ b/src/CRE/shadow.cpp @@ -37,7 +37,7 @@ void Shadow::clear_textures() { glClearColor(1.0f, 1.0f, 1.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); } - gl_state_bind_framebuffer(0); + gl_rend_state.bind_framebuffer(0); } void Shadow::ctrl() { @@ -113,7 +113,7 @@ int32_t Shadow::init() { GLint swizzle[] = { GL_RED, GL_RED, GL_RED, GL_ONE }; glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzle); glBindTexture(GL_TEXTURE_2D, 0); - gl_state_get_error(); + gl_get_error_print(); return 0; } diff --git a/src/CRE/shared.cpp b/src/CRE/shared.cpp index 0009e045..da051b83 100644 --- a/src/CRE/shared.cpp +++ b/src/CRE/shared.cpp @@ -4,13 +4,26 @@ */ #include "shared.hpp" -#include "gl_state.hpp" +#include "gl_rend_state.hpp" void fbo_blit(GLuint src_fbo, GLuint dst_fbo, GLint src_x, GLint src_y, GLint src_width, GLint src_height, GLint dst_x, GLint dst_y, GLint dst_width, GLint dst_height, GLbitfield mask, GLenum filter) { - gl_state_bind_read_framebuffer(src_fbo); - gl_state_bind_draw_framebuffer(dst_fbo); + gl_rend_state.bind_read_framebuffer(src_fbo); + gl_rend_state.bind_draw_framebuffer(dst_fbo); glBlitFramebuffer(src_x, src_y, src_x + src_width, src_y + src_height, dst_x, dst_y, dst_x + dst_width, dst_y + dst_height, mask, filter); } + +void gl_get_error_all_print() { + GLenum error; + while (error = glGetError()) + printf_debug("GL Error: 0x%04X\n", error); +} + +GLenum gl_get_error_print() { + GLenum error = glGetError(); + if (error) + printf_debug("GL Error: 0x%04X\n", error); + return error; +} diff --git a/src/CRE/shared.hpp b/src/CRE/shared.hpp index b3625e97..87332249 100644 --- a/src/CRE/shared.hpp +++ b/src/CRE/shared.hpp @@ -21,3 +21,6 @@ enum blur_filter_mode { extern void fbo_blit(GLuint src_fbo, GLuint dst_fbo, GLint src_x, GLint src_y, GLint src_width, GLint src_height, GLint dst_x, GLint dst_y, GLint dst_width, GLint dst_height, GLbitfield mask, GLenum filter); + +extern void gl_get_error_all_print(); +extern GLenum gl_get_error_print(); diff --git a/src/CRE/sprite.cpp b/src/CRE/sprite.cpp index 6b7eaeba..239be4f3 100644 --- a/src/CRE/sprite.cpp +++ b/src/CRE/sprite.cpp @@ -785,7 +785,7 @@ namespace spr { if (index == 2 && resolution_mode != RESOLUTION_MODE_MAX) res_window_get()->resolution_mode = resolution_mode; - gl_state_rect viewport_rect = gl_state_get_viewport(); + gl_rend_state_rect viewport_rect = gl_rend_state.get_viewport(); for (int32_t i = 0; i < 2; i++) { auto reqlist = this->reqlist[index][i]; @@ -826,7 +826,7 @@ namespace spr { y_min = (int32_t)min.y; x_max = (int32_t)(max.x - min.x); y_max = (int32_t)(max.y - min.y); - gl_state_set_viewport(x_min, y_min, x_max, y_max); + gl_rend_state.set_viewport(x_min, y_min, x_max, y_max); } else { view_projection = vp; @@ -861,12 +861,12 @@ namespace spr { rctx->sprite_scene_ubo.WriteMemory(shader_data); rctx->sprite_scene_ubo.Bind(0); - gl_state_bind_vertex_array(render_data.vao); + gl_rend_state.bind_vertex_array(render_data.vao); for (uint32_t j = SPR_PRIO_MAX; j; j--, reqlist++) for (SprArgs& k : *reqlist) if (k.sprite_draw_param_index >= 0) draw_sprite(this, rctx, k, mat, x_min, y_min, x_max, y_max, overlay_tex); - gl_state_bind_vertex_array(0); + gl_rend_state.bind_vertex_array(0); } if (index == 2 && resolution_mode != RESOLUTION_MODE_MAX) @@ -1796,7 +1796,7 @@ namespace spr { int32_t combiner = 0; if (draw_param.attrib.m.enable_blend) { if (draw_param.attrib.m.blend == 5) { - gl_state_active_bind_texture_2d(7, overlay_tex->glid); + gl_rend_state.active_bind_texture_2d(7, overlay_tex->glid); draw_sprite_copy_overlay_texture(rctx, args, mat, draw_param.vtx, x_min, y_min, x_max, y_max); combiner = 2; } @@ -1805,11 +1805,11 @@ namespace spr { const GLenum* blend = spr_blend_param[draw_param.attrib.m.blend]; - gl_state_enable_blend(); - gl_state_set_blend_func_separate(blend[0], blend[1], blend[2], blend[3]); + gl_rend_state.enable_blend(); + gl_rend_state.set_blend_func_separate(blend[0], blend[1], blend[2], blend[3]); } else - gl_state_disable_blend(); + gl_rend_state.disable_blend(); if (draw_param.shader == SHADER_FT_SPRITE) { int32_t tex_0_type = 0; @@ -1838,21 +1838,21 @@ namespace spr { } if (draw_param.textures[0]) { - gl_state_active_bind_texture_2d(0, draw_param.textures[0]->glid); - gl_state_bind_sampler(0, rctx->sprite_samplers[draw_param.attrib.m.sampler]); + gl_rend_state.active_bind_texture_2d(0, draw_param.textures[0]->glid); + gl_rend_state.bind_sampler(0, rctx->sprite_samplers[draw_param.attrib.m.sampler]); if (draw_param.textures[1]) { - gl_state_active_bind_texture_2d(1, draw_param.textures[1]->glid); - gl_state_bind_sampler(1, rctx->sprite_samplers[draw_param.attrib.m.sampler]); + gl_rend_state.active_bind_texture_2d(1, draw_param.textures[1]->glid); + gl_rend_state.bind_sampler(1, rctx->sprite_samplers[draw_param.attrib.m.sampler]); } - else if (!gl_state.texture_binding_2d[1]) - gl_state_active_bind_texture_2d(1, rctx->empty_texture_2d->glid); + else if (!gl_rend_state.texture_binding_2d[1]) + gl_rend_state.active_bind_texture_2d(1, rctx->empty_texture_2d->glid); } else { - if (!gl_state.texture_binding_2d[0]) - gl_state_active_bind_texture_2d(0, rctx->empty_texture_2d->glid); - if (!gl_state.texture_binding_2d[1]) - gl_state_active_bind_texture_2d(1, rctx->empty_texture_2d->glid); + if (!gl_rend_state.texture_binding_2d[0]) + gl_rend_state.active_bind_texture_2d(0, rctx->empty_texture_2d->glid); + if (!gl_rend_state.texture_binding_2d[1]) + gl_rend_state.active_bind_texture_2d(1, rctx->empty_texture_2d->glid); } shaders_ft.set(draw_param.shader); @@ -1864,13 +1864,13 @@ namespace spr { } static void draw_sprite_begin(render_context* rctx) { - gl_state_disable_blend(); - gl_state_active_bind_texture_2d(0, rctx->empty_texture_2d->glid); - gl_state_bind_sampler(0, 0); - gl_state_active_bind_texture_2d(1, rctx->empty_texture_2d->glid); - gl_state_bind_sampler(1, 0); - gl_state_bind_sampler(7, 0); - gl_state_set_blend_func_separate(GL_ONE, GL_ZERO, GL_ONE, GL_ZERO); + gl_rend_state.disable_blend(); + gl_rend_state.active_bind_texture_2d(0, rctx->empty_texture_2d->glid); + gl_rend_state.bind_sampler(0, 0); + gl_rend_state.active_bind_texture_2d(1, rctx->empty_texture_2d->glid); + gl_rend_state.bind_sampler(1, 0); + gl_rend_state.bind_sampler(7, 0); + gl_rend_state.set_blend_func_separate(GL_ONE, GL_ZERO, GL_ONE, GL_ZERO); } static void draw_sprite_copy_overlay_texture(render_context* rctx, const SprArgs& args, const mat4& mat, @@ -1929,20 +1929,20 @@ namespace spr { const int32_t width = x_max - x_min + 1; const int32_t height = y_max - y_min + 1; if (width * height > 0) { - gl_state_active_texture(7); + gl_rend_state.active_texture(7); glCopyTexSubImage2D(GL_TEXTURE_2D, 0, x_min, y_min, x_min, y_min, width, height); } } static void draw_sprite_end() { - gl_state_disable_blend(); - gl_state_active_bind_texture_2d(0, 0); - gl_state_bind_sampler(0, 0); - gl_state_active_bind_texture_2d(1, 0); - gl_state_bind_sampler(1, 0); - gl_state_active_bind_texture_2d(7, 0); - gl_state_bind_sampler(7, 0); - gl_state_set_blend_func_separate(GL_ONE, GL_ZERO, GL_ONE, GL_ZERO); + gl_rend_state.disable_blend(); + gl_rend_state.active_bind_texture_2d(0, 0); + gl_rend_state.bind_sampler(0, 0); + gl_rend_state.active_bind_texture_2d(1, 0); + gl_rend_state.bind_sampler(1, 0); + gl_rend_state.active_bind_texture_2d(7, 0); + gl_rend_state.bind_sampler(7, 0); + gl_rend_state.set_blend_func_separate(GL_ONE, GL_ZERO, GL_ONE, GL_ZERO); shader::unbind(); } diff --git a/src/CRE/sprite.hpp b/src/CRE/sprite.hpp index d53981d6..d6737182 100644 --- a/src/CRE/sprite.hpp +++ b/src/CRE/sprite.hpp @@ -17,7 +17,7 @@ #include "render_context.hpp" #include "resolution_mode.hpp" #include "texture.hpp" -#include "gl_state.hpp" +#include "gl_rend_state.hpp" #define BREAK_SPRITE_VERTEX_LIMIT (1) diff --git a/src/CRE/texture.cpp b/src/CRE/texture.cpp index ba74b2c6..3d5626f5 100644 --- a/src/CRE/texture.cpp +++ b/src/CRE/texture.cpp @@ -4,7 +4,8 @@ */ #include "texture.hpp" -#include "gl_state.hpp" +#include "gl_rend_state.hpp" +#include "shared.hpp" #include "static_var.hpp" static void texture_bind(GLenum target, GLuint texture); @@ -117,7 +118,7 @@ void texture_apply_color_tone(const texture* chg_tex, glTexSubImage2D(chg_tex->target, i, 0, 0, width, height, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, data); } - gl_state_get_error(); + gl_get_error_print(); free_def(data); } texture_bind(org_tex->target, 0); @@ -145,7 +146,7 @@ texture* texture_create_copy_texture(texture_id id, texture* org_tex) { glGetCompressedTexImage(org_tex->target, i, data); else glGetTexImage(org_tex->target, i, format, type, data); - gl_state_get_error(); + gl_get_error_print(); vec_data.push_back(data); } texture_bind(org_tex->target, 0); @@ -198,7 +199,7 @@ texture* texture_create_copy_texture_apply_color_tone( } else glGetTexImage(org_tex->target, i, format, type, data); - gl_state_get_error(); + gl_get_error_print(); vec_data.push_back(data); } texture_bind(org_tex->target, 0); @@ -599,7 +600,7 @@ inline static GLuint texture_get_working_internal_format(GLuint internal_format) static int32_t texture_load_pixels(GLenum target, GLenum internal_format, int32_t width, int32_t height, int32_t level, const void* data) { - gl_state_get_all_gl_errors(); + gl_get_error_all_print(); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); switch (internal_format) { case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: @@ -618,7 +619,7 @@ static int32_t texture_load_pixels(GLenum target, GLenum internal_format, glTexImage2D(target, level, internal_format, width, height, 0, format, type, data); } break; } - return -(gl_state_get_error() != GL_ZERO); + return -(gl_get_error_print() != GL_ZERO); } static texture* texture_load_tex(texture_id id, GLenum target, diff --git a/src/ReDIVA/app.cpp b/src/ReDIVA/app.cpp index 4df22993..98397c4c 100644 --- a/src/ReDIVA/app.cpp +++ b/src/ReDIVA/app.cpp @@ -25,7 +25,7 @@ #include "../CRE/effect.hpp" #include "../CRE/file_handler.hpp" #include "../CRE/font.hpp" -#include "../CRE/gl_state.hpp" +#include "../CRE/gl_rend_state.hpp" #include "../CRE/hand_item.hpp" #include "../CRE/light_param.hpp" #include "../CRE/mdata_manager.hpp" @@ -449,12 +449,12 @@ int32_t app_main(const app_init_struct& ais) { #if !(BAKE_PNG || BAKE_VIDEO) glfwGetFramebufferSize(window, &width, &height); #endif - gl_state_set_viewport(0, 0, width, height); - gl_state_disable_blend(); - gl_state_disable_depth_test(); - gl_state_set_depth_mask(GL_FALSE); - gl_state_disable_cull_face(); - gl_state_disable_stencil_test(); + gl_rend_state.set_viewport(0, 0, width, height); + gl_rend_state.disable_blend(); + gl_rend_state.disable_depth_test(); + gl_rend_state.set_depth_mask(GL_FALSE); + gl_rend_state.disable_cull_face(); + gl_rend_state.disable_stencil_test(); glfwSwapInterval(0); @@ -527,8 +527,8 @@ bool app_render_data::load() { d3d_gl_handle = wglDXOpenDeviceNV(d3d_device); #endif - gl_state_get_error(); - gl_state_set_viewport(0, 0, width, height); + gl_get_error_print(); + gl_rend_state.set_viewport(0, 0, width, height); #if DISPLAY_IBL const float_t box_vertices[] = { @@ -576,7 +576,7 @@ bool app_render_data::load() { }; glGenVertexArrays(1, &ibl_vao); - gl_state_bind_vertex_array(ibl_vao, true); + gl_rend_state.bind_vertex_array(ibl_vao, true); ibl_vbo.Create(sizeof(box_vertices), box_vertices); ibl_vbo.Bind(true); @@ -584,8 +584,8 @@ bool app_render_data::load() { glEnableVertexAttribArray(0); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float_t) * 3, (void*)0); - gl_state_bind_array_buffer(0); - gl_state_bind_vertex_array(0); + gl_rend_state.bind_array_buffer(0); + gl_rend_state.bind_vertex_array(0); cubemap_display_ubo.Create(sizeof(cubemap_display_batch_shader_data)); #endif @@ -748,7 +748,7 @@ static render_context* render_context_load() { render_context* rctx = new render_context; rctx_ptr = rctx; - gl_state_get(); + gl_rend_state.get(); data_struct* aft_data = &data_list[DATA_AFT]; aet_database* aft_aet_db = &aft_data->data_ft.aet_db; @@ -1386,12 +1386,12 @@ static void render_context_ctrl(render_context* rctx) { camera* cam = rctx->camera; for (int32_t i = 0; i < 32; i++) { - if (!gl_state_check_texture_binding_2d(i) && !gl_state_check_texture_binding_cube_map(i)) + if (!gl_rend_state.check_texture_binding_2d(i) && !gl_rend_state.check_texture_binding_cube_map(i)) continue; - gl_state_active_bind_texture_2d(i, 0); - gl_state_active_bind_texture_cube_map(i, 0); - gl_state_bind_sampler(i, 0); + gl_rend_state.active_bind_texture_2d(i, 0); + gl_rend_state.active_bind_texture_cube_map(i, 0); + gl_rend_state.bind_sampler(i, 0); } global_context_menu = true; @@ -1536,23 +1536,23 @@ static void render_context_disp(render_context* rctx) { static const GLint stencil_clear = 0; for (int32_t i = 0; i < 32; i++) { - if (!gl_state_check_texture_binding_2d(i) && !gl_state_check_texture_binding_cube_map(i)) + if (!gl_rend_state.check_texture_binding_2d(i) && !gl_rend_state.check_texture_binding_cube_map(i)) continue; - gl_state_active_bind_texture_2d(i, 0); - gl_state_active_bind_texture_cube_map(i, 0); - gl_state_bind_sampler(i, 0); + gl_rend_state.active_bind_texture_2d(i, 0); + gl_rend_state.active_bind_texture_cube_map(i, 0); + gl_rend_state.bind_sampler(i, 0); } - gl_state_bind_framebuffer(0); - gl_state_set_depth_mask(GL_TRUE); - gl_state_set_stencil_mask(0xFF); + gl_rend_state.bind_framebuffer(0); + gl_rend_state.set_depth_mask(GL_TRUE); + gl_rend_state.set_stencil_mask(0xFF); glClearBufferfv(GL_COLOR, 0, (float_t*)&color_clear); glClearDepthf(depth_clear); - gl_state_set_stencil_mask(0x00); - gl_state_set_depth_mask(GL_FALSE); + gl_rend_state.set_stencil_mask(0x00); + gl_rend_state.set_depth_mask(GL_FALSE); - gl_state_set_viewport(0, 0, internal_3d_res.x, internal_3d_res.y); + gl_rend_state.set_viewport(0, 0, internal_3d_res.x, internal_3d_res.y); rctx->disp(); @@ -1579,11 +1579,11 @@ static void render_context_disp(render_context* rctx) { rctx_ptr->glitter_batch_ubo.Bind(3); shaders_dev.set(SHADER_DEV_CUBEMAP_DISPLAY); - gl_state_bind_vertex_array(ibl_vao); - gl_state_active_bind_texture_cube_map(0, + gl_rend_state.bind_vertex_array(ibl_vao); + gl_rend_state.active_bind_texture_cube_map(0, light_param_data_storage_data_get_ibl_texture(max_def(ibl_index - 1, 0))); shaders_dev.draw_arrays(GL_TRIANGLES, 0, 36); - gl_state_bind_vertex_array(0); + gl_rend_state.bind_vertex_array(0); } #endif @@ -1591,14 +1591,14 @@ static void render_context_disp(render_context* rctx) { Vulkan::end_render_pass(Vulkan::current_command_buffer); #if BAKE_PNG || BAKE_VIDEO - gl_state_set_viewport(0, 0, rctx->screen_width, rctx->screen_height); + gl_rend_state.set_viewport(0, 0, rctx->screen_width, rctx->screen_height); #else - gl_state_set_viewport(rctx->screen_x_offset, rctx->screen_y_offset, + gl_rend_state.set_viewport(rctx->screen_x_offset, rctx->screen_y_offset, rctx->sprite_width, rctx->sprite_height); #endif - gl_state_bind_framebuffer(0); - gl_state_active_bind_texture_2d(0, rctx->screen_buffer.GetColorTex()); + gl_rend_state.bind_framebuffer(0); + gl_rend_state.active_bind_texture_2d(0, rctx->screen_buffer.GetColorTex()); uniform_value[U_ALPHA_MASK] = 0; uniform_value[U_REDUCE] = 0; shaders_ft.set(SHADER_FT_REDUCE); diff --git a/src/ReDIVA/data_edit/glitter_editor.cpp b/src/ReDIVA/data_edit/glitter_editor.cpp index b6b44bbd..90916049 100644 --- a/src/ReDIVA/data_edit/glitter_editor.cpp +++ b/src/ReDIVA/data_edit/glitter_editor.cpp @@ -17,7 +17,6 @@ #include "../../CRE/app_system_detail.hpp" #include "../../CRE/camera.hpp" #include "../../CRE/data.hpp" -#include "../../CRE/gl_state.hpp" #include "../../CRE/render_context.hpp" #include "../../CRE/stage.hpp" #include "../../CRE/static_var.hpp" diff --git a/src/ReDIVA/x_pv_game.cpp b/src/ReDIVA/x_pv_game.cpp index 5a5a066c..d65a6a07 100644 --- a/src/ReDIVA/x_pv_game.cpp +++ b/src/ReDIVA/x_pv_game.cpp @@ -6336,11 +6336,11 @@ struct d3d_gl_fbo_tex_struct { handle = wglDXRegisterObjectNV(d3d_gl_handle, d3d_tex, gl_tex, GL_TEXTURE_2D, WGL_ACCESS_READ_WRITE_NV); else { - gl_state_bind_texture_2d(gl_tex); + gl_rend_state.bind_texture_2d(gl_tex); ::texture* tex = rctx_ptr->screen_buffer.color_texture; glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, tex->width, tex->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); - gl_state_bind_texture_2d(0); + gl_rend_state.bind_texture_2d(0); } glGenFramebuffers(1, &gl_fbo); @@ -6348,9 +6348,9 @@ struct d3d_gl_fbo_tex_struct { return; lock(); - gl_state_bind_framebuffer(gl_fbo); + gl_rend_state.bind_framebuffer(gl_fbo); glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, gl_tex, 0); - gl_state_bind_framebuffer(0); + gl_rend_state.bind_framebuffer(0); unlock(); } @@ -6468,9 +6468,9 @@ bool x_pv_game::ctrl() { D3D11_MAPPED_SUBRESOURCE mapped_res = {}; if (SUCCEEDED(d3d_device_context->Map(d3d_gl_fbo_tex.d3d_tex, 0, D3D11_MAP_WRITE_DISCARD, 0, &mapped_res))) { - gl_state_bind_texture_2d(d3d_gl_fbo_tex.gl_tex); + gl_rend_state.bind_texture_2d(d3d_gl_fbo_tex.gl_tex); glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, nvenc_temp_pixels.data()); - gl_state_bind_texture_2d(0); + gl_rend_state.bind_texture_2d(0); uint8_t* src = (uint8_t*)nvenc_temp_pixels.data(); uint8_t* dst = (uint8_t*)mapped_res.pData; @@ -6491,9 +6491,9 @@ bool x_pv_game::ctrl() { D3D11_MAPPED_SUBRESOURCE mapped_alpha_res = {}; if (SUCCEEDED(d3d_device_context->Map(d3d_gl_alpha_fbo_tex.d3d_tex, 0, D3D11_MAP_WRITE_DISCARD, 0, &mapped_alpha_res))) { - gl_state_bind_texture_2d(d3d_gl_alpha_fbo_tex.gl_tex); + gl_rend_state.bind_texture_2d(d3d_gl_alpha_fbo_tex.gl_tex); glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, nvenc_temp_pixels.data()); - gl_state_bind_texture_2d(0); + gl_rend_state.bind_texture_2d(0); uint8_t* src = (uint8_t*)nvenc_temp_pixels.data(); uint8_t* dst = (uint8_t*)mapped_alpha_res.pData; @@ -6524,9 +6524,9 @@ bool x_pv_game::ctrl() { #elif BAKE_PNG std::vector temp_pixels; temp_pixels.resize((size_t)width * (size_t)height * 4 * sizeof(uint8_t)); - gl_state_bind_texture_2d(tex->glid); + gl_rend_state.bind_texture_2d(tex->glid); glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, temp_pixels.data()); - gl_state_bind_texture_2d(0); + gl_rend_state.bind_texture_2d(0); std::vector pixels; pixels.resize((size_t)width * (size_t)height * 4 * sizeof(uint8_t)); @@ -8183,16 +8183,16 @@ void x_pv_game::basic() { #if BAKE_VIDEO d3d_gl_fbo_tex.lock(); - gl_state_bind_framebuffer(d3d_gl_fbo_tex.gl_fbo); - gl_state_active_bind_texture_2d(0, tex->glid); - gl_state_bind_sampler(0, rctx_ptr->render_samplers[1]); + gl_rend_state.bind_framebuffer(d3d_gl_fbo_tex.gl_fbo); + gl_rend_state.active_bind_texture_2d(0, tex->glid); + gl_rend_state.bind_sampler(0, rctx_ptr->render_samplers[1]); #if BAKE_VIDEO_ALPHA GLint swizzle_rgb1[] = { GL_RED, GL_GREEN, GL_BLUE, GL_ONE }; glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzle_rgb1); #endif - gl_state_set_viewport(0, 0, width, height); + gl_rend_state.set_viewport(0, 0, width, height); if (nvenc_rgb) shaders_dev.set(SHADER_DEV_CONVERT_RGB); else @@ -8216,7 +8216,7 @@ void x_pv_game::basic() { rctx_ptr->quad_ubo.WriteMemory(quad); rctx_ptr->quad_ubo.Bind(0); - gl_state_bind_vertex_array(rctx_ptr->common_vao); + gl_rend_state.bind_vertex_array(rctx_ptr->common_vao); shaders_dev.draw_arrays(GL_TRIANGLE_STRIP, 0, 4); #if BAKE_VIDEO_ALPHA @@ -8224,24 +8224,24 @@ void x_pv_game::basic() { glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzle_rgba); #endif - gl_state_bind_sampler(0, 0); - gl_state_bind_texture_2d(0); - gl_state_bind_framebuffer(0); + gl_rend_state.bind_sampler(0, 0); + gl_rend_state.bind_texture_2d(0); + gl_rend_state.bind_framebuffer(0); d3d_gl_fbo_tex.unlock(); #if BAKE_VIDEO_ALPHA d3d_gl_alpha_fbo_tex.lock(); - gl_state_bind_framebuffer(d3d_gl_alpha_fbo_tex.gl_fbo); - gl_state_active_bind_texture_2d(0, tex->glid); + gl_rend_state.bind_framebuffer(d3d_gl_alpha_fbo_tex.gl_fbo); + gl_rend_state.active_bind_texture_2d(0, tex->glid); if (nvenc_rgb) { GLint swizzle_aaa1[] = { GL_ALPHA, GL_ALPHA, GL_ALPHA, GL_ONE }; glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzle_aaa1); } - gl_state_set_viewport(0, 0, width, height); + gl_rend_state.set_viewport(0, 0, width, height); if (nvenc_rgb) { uniform_value[U_REDUCE] = 0; shaders_ft.set(SHADER_FT_REDUCE); @@ -8254,8 +8254,8 @@ void x_pv_game::basic() { if (nvenc_rgb) glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzle_rgba); - gl_state_bind_texture_2d(0); - gl_state_bind_framebuffer(0); + gl_rend_state.bind_texture_2d(0); + gl_rend_state.bind_framebuffer(0); d3d_gl_alpha_fbo_tex.unlock(); #endif