diff --git a/src/DivaGL/DivaGL.vcxproj b/src/DivaGL/DivaGL.vcxproj
index 2010cc9..a715329 100644
--- a/src/DivaGL/DivaGL.vcxproj
+++ b/src/DivaGL/DivaGL.vcxproj
@@ -165,7 +165,7 @@
-
+
@@ -213,7 +213,7 @@
-
+
diff --git a/src/DivaGL/GL/array_buffer.cpp b/src/DivaGL/GL/array_buffer.cpp
index 4428d8e..aa612d4 100644
--- a/src/DivaGL/GL/array_buffer.cpp
+++ b/src/DivaGL/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 (DIVA_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 (DIVA_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 (DIVA_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 (DIVA_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/DivaGL/GL/element_array_buffer.cpp b/src/DivaGL/GL/element_array_buffer.cpp
index b3acd48..2660a24 100644
--- a/src/DivaGL/GL/element_array_buffer.cpp
+++ b/src/DivaGL/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 (DIVA_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 (DIVA_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 (DIVA_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 (DIVA_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/DivaGL/GL/shader_storage_buffer.cpp b/src/DivaGL/GL/shader_storage_buffer.cpp
index a709356..c909f27 100644
--- a/src/DivaGL/GL/shader_storage_buffer.cpp
+++ b/src/DivaGL/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 (DIVA_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 (DIVA_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 (DIVA_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 (DIVA_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/DivaGL/GL/uniform_buffer.cpp b/src/DivaGL/GL/uniform_buffer.cpp
index 46b90a3..7da0f5e 100644
--- a/src/DivaGL/GL/uniform_buffer.cpp
+++ b/src/DivaGL/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 (DIVA_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 (DIVA_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 (DIVA_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 (DIVA_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/DivaGL/Glitter/file_reader.cpp b/src/DivaGL/Glitter/file_reader.cpp
index ef7bcec..b695e44 100644
--- a/src/DivaGL/Glitter/file_reader.cpp
+++ b/src/DivaGL/Glitter/file_reader.cpp
@@ -8,7 +8,7 @@
#include "../../KKdLib/farc.hpp"
#include "../rob/rob.hpp"
#if SHARED_GLITTER_BUFFER
-#include "../gl_state.hpp"
+#include "../gl_rend_state.hpp"
#endif
namespace Glitter {
@@ -151,10 +151,10 @@ namespace Glitter {
k->buffer = buffer;
glGenVertexArrays(1, &k->vao);
- gl_state_bind_vertex_array(k->vao, true);
- gl_state_bind_array_buffer(vbo, true);
+ gl_rend_state.bind_vertex_array(k->vao, true);
+ gl_rend_state.bind_array_buffer(vbo, true);
if (k->data.type == PARTICLE_QUAD)
- gl_state_bind_element_array_buffer(ebo, true);
+ gl_rend_state.bind_element_array_buffer(ebo, true);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, buffer_size,
@@ -174,9 +174,9 @@ namespace Glitter {
}
}
- gl_state_bind_array_buffer(0);
- gl_state_bind_vertex_array(0);
- gl_state_bind_element_array_buffer(0);
+ gl_rend_state.bind_array_buffer(0);
+ gl_rend_state.bind_vertex_array(0);
+ gl_rend_state.bind_element_array_buffer(0);
}
else {
free_def(effect_group->buffer);
diff --git a/src/DivaGL/Glitter/glitter.cpp b/src/DivaGL/Glitter/glitter.cpp
index d8091ad..ee46528 100644
--- a/src/DivaGL/Glitter/glitter.cpp
+++ b/src/DivaGL/Glitter/glitter.cpp
@@ -4,7 +4,7 @@
*/
#include "glitter.hpp"
-#include "../gl_state.hpp"
+#include "../gl_rend_state.hpp"
#include "../wrap.hpp"
#include
@@ -21,7 +21,7 @@ namespace Glitter {
buffer = (Buffer*)_operator_new(sizeof(Buffer) * 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);
@@ -54,10 +54,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/DivaGL/Glitter/particle_manager.cpp b/src/DivaGL/Glitter/particle_manager.cpp
index 1875520..7423ed1 100644
--- a/src/DivaGL/Glitter/particle_manager.cpp
+++ b/src/DivaGL/Glitter/particle_manager.cpp
@@ -4,7 +4,7 @@
*/
#include "glitter.hpp"
-#include "../gl_state.hpp"
+#include "../gl_rend_state.hpp"
#include
namespace Glitter {
@@ -28,10 +28,10 @@ namespace Glitter {
if (i)
i->Disp(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();
}
GltParticleManagerX::GltParticleManagerX() : frame_rate(),
@@ -270,10 +270,10 @@ namespace Glitter {
if (i)
i->Disp(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 GltParticleManagerX::FreeEffects() {
diff --git a/src/DivaGL/Glitter/render_scene.cpp b/src/DivaGL/Glitter/render_scene.cpp
index 49b5f9b..cbbe651 100644
--- a/src/DivaGL/Glitter/render_scene.cpp
+++ b/src/DivaGL/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_ft.hpp"
#include "../wrap.hpp"
@@ -137,8 +137,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->empty_texture_2d->glid;
GLuint mask_texture = rctx->empty_texture_2d->glid;
@@ -170,8 +170,8 @@ namespace Glitter {
uniform->arr[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:
@@ -187,55 +187,55 @@ namespace Glitter {
break;
}
- gl_state_enable_depth_test();
+ gl_rend_state.enable_depth_test();
if (alpha_test) {
uniform->arr[U_ALPHA_TEST] = 1;
rctx->set_batch_alpha_threshold(0.5f);
uniform->arr[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->arr[U_ALPHA_TEST] = 0;
uniform->arr[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->arr[U_ALPHA_TEST] = 0;
uniform->arr[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->arr[U_ALPHA_TEST] = 0;
uniform->arr[U_ALPHA_BLEND] = 2;
uniform->arr[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->arr[U_ALPHA_TEST] = 0;
uniform->arr[U_ALPHA_BLEND] = 2;
uniform->arr[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;
}
@@ -244,18 +244,18 @@ namespace Glitter {
rctx->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;
@@ -1854,8 +1854,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->empty_texture_2d->glid;
GLuint mask_texture = rctx->empty_texture_2d->glid;
@@ -1887,8 +1887,8 @@ namespace Glitter {
uniform->arr[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:
@@ -1903,54 +1903,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->arr[U_ALPHA_TEST] = 1;
rctx->set_batch_alpha_threshold(0.5f);
uniform->arr[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->arr[U_ALPHA_TEST] = 0;
uniform->arr[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->arr[U_ALPHA_TEST] = 0;
uniform->arr[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->set_glitter_render_data();
rctx->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/DivaGL/effect.cpp b/src/DivaGL/effect.cpp
index f38cb2f..393d70d 100644
--- a/src/DivaGL/effect.cpp
+++ b/src/DivaGL/effect.cpp
@@ -14,7 +14,7 @@
#include "GL/uniform_buffer.hpp"
#include "rob/rob.hpp"
#include "auth_3d.hpp"
-#include "gl_state.hpp"
+#include "gl_rend_state.hpp"
#include "render_context.hpp"
#include "render_manager.hpp"
#include "render_texture.hpp"
@@ -438,7 +438,7 @@ struct EffectStorage {
if (DIVA_GL_VERSION_4_3)
ssbo.Bind(index, force);
else
- gl_state_bind_vertex_array(vao);
+ gl_rend_state.bind_vertex_array(vao);
}
void Create(size_t size, size_t count, const EffectStorageAttrib* attribs) {
@@ -450,7 +450,7 @@ struct EffectStorage {
return;
glGenVertexArrays(1, &vao);
- gl_state_bind_vertex_array(vao, true);
+ gl_rend_state.bind_vertex_array(vao, true);
vbo.Create(size * count);
vbo.Bind(true);
@@ -464,8 +464,8 @@ struct EffectStorage {
attrib++;
}
- 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);
}
void Create(size_t size, size_t count, const EffectStorageAttrib* attribs,
@@ -478,7 +478,7 @@ struct EffectStorage {
return;
glGenVertexArrays(1, &vao);
- gl_state_bind_vertex_array(vao, true);
+ gl_rend_state.bind_vertex_array(vao, true);
vbo.Create(size * count, data, true);
vbo.Bind(true);
@@ -492,8 +492,8 @@ struct EffectStorage {
attrib++;
}
- 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);
}
void Destroy() {
@@ -683,12 +683,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() {
@@ -722,11 +722,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;
@@ -737,7 +737,7 @@ void rain_particle_draw() {
vec4 color = rain->color;
float_t color_a = color.w;
- gl_state_bind_vertex_array(rctx->common_vao);
+ gl_rend_state.bind_vertex_array(rctx->common_vao);
rain_particle_scene_ubo.Bind(0);
rain_particle_batch_ubo.Bind(1);
rain_storage.Bind(0);
@@ -754,10 +754,10 @@ void rain_particle_draw() {
rain_particle_batch_ubo.WriteMemory(batch_shader_data);
rain_storage.Draw(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() {
@@ -791,9 +791,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() {
@@ -807,10 +807,10 @@ void snow_particle_draw() {
stage_param_data_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)camera_data.fov
* 0.5f * DEG_TO_RAD_FLOAT) * 3.4f, 2.0f) * 0.1f;
@@ -843,9 +843,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, render_get()->rend_texture[0].GetDepthTex());
- gl_state_bind_vertex_array(rctx->common_vao);
+ gl_rend_state.active_bind_texture_2d(0, tex->glid);
+ gl_rend_state.active_bind_texture_2d(1, render_get()->rend_texture[0].GetDepthTex());
+ gl_rend_state.bind_vertex_array(rctx->common_vao);
uniform->arr[U_SNOW_PARTICLE] = 0;
shaders_ft.set(SHADER_FT_SNOW_PT);
@@ -891,12 +891,12 @@ void snow_particle_draw() {
first += count;
}
- gl_state_active_bind_texture_2d(1, 0);
- gl_state_active_bind_texture_2d(0, 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() {
@@ -1054,7 +1054,7 @@ HOOK(void, FASTCALL, leaf_particle_init, 0x000000014034C530, bool change_stage)
leaf_ptcl_vbo.Create(buffer_size * leaf_ptcl_vtx_count);
leaf_ptcl_vbo.Bind();
- gl_state_bind_vertex_array(leaf_ptcl_vao);
+ gl_rend_state.bind_vertex_array(leaf_ptcl_vao);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, buffer_size,
(void*)offsetof(leaf_particle_vertex_data, position));
@@ -1068,9 +1068,9 @@ HOOK(void, FASTCALL, leaf_particle_init, 0x000000014034C530, bool change_stage)
leaf_ptcl_ebo.Create(sizeof(uint32_t) * ebo_count, ebo_data);
leaf_ptcl_ebo.Bind();
- gl_state_bind_vertex_array(0);
- gl_state_bind_array_buffer(0);
- gl_state_bind_element_array_buffer(0);
+ gl_rend_state.bind_vertex_array(0);
+ gl_rend_state.bind_array_buffer(0);
+ gl_rend_state.bind_element_array_buffer(0);
free_def(ebo_data);
leaf_particle_scene_ubo.Create(sizeof(leaf_particle_scene_shader_data));
@@ -1121,7 +1121,7 @@ HOOK(void, FASTCALL, particle_init, 0x0000000140351C50, vec3* offset) {
ptcl_vbo.Create(buffer_size * ptcl_vtx_count);
ptcl_vbo.Bind();
- gl_state_bind_vertex_array(ptcl_vao);
+ gl_rend_state.bind_vertex_array(ptcl_vao);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, buffer_size,
(void*)offsetof(particle_vertex_data, position));
@@ -1135,8 +1135,8 @@ HOOK(void, FASTCALL, particle_init, 0x0000000140351C50, vec3* offset) {
glVertexAttribPointer(3, 3, GL_FLOAT, GL_FALSE, buffer_size,
(void*)offsetof(particle_vertex_data, normal));
- gl_state_bind_vertex_array(0);
- gl_state_bind_array_buffer(0);
+ gl_rend_state.bind_vertex_array(0);
+ gl_rend_state.bind_array_buffer(0);
particle_scene_ubo.Create(sizeof(particle_scene_shader_data));
}
@@ -1576,16 +1576,16 @@ void EffectFogRing::draw() {
draw_state.set_fog_height(true);
RenderTexture& rt = 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());
glClearColorDLL(density_offset, density_offset, density_offset, 1.0f);
glClearDLL(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
if (disp_manager->get_obj_count(mdl::OBJ_TYPE_USER))
disp_manager->draw(mdl::OBJ_TYPE_USER);
- gl_state_bind_framebuffer(0);
+ gl_rend_state.bind_framebuffer(0);
render_manager.set_effect_texture(rt.color_texture);
- gl_state_get_error();
+ gl_get_error_print();
}
static void sub_1403B6F60(texture* a1, texture* a2, texture* a3, EffectRipple::Params& params) {
@@ -1595,8 +1595,8 @@ static void sub_1403B6F60(texture* a1, texture* a2, texture* a3, EffectRipple::P
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 = {
@@ -1610,18 +1610,18 @@ static void sub_1403B6F60(texture* a1, texture* a2, texture* a3, EffectRipple::P
ripple_batch.g_params = { params.wake_attn, params.speed, params.field_8, params.field_C };
ripple_batch_ubo.WriteMemory(ripple_batch);
- gl_state_bind_vertex_array(rctx->common_vao);
+ gl_rend_state.bind_vertex_array(rctx->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);
}
static void sub_1403B6ED0(RenderTexture* a1, RenderTexture* a2, RenderTexture* a3, EffectRipple::Params& params) {
@@ -1632,14 +1632,14 @@ static void sub_1403B6ED0(RenderTexture* a1, RenderTexture* a2, RenderTexture* a
else
uniform->arr[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);
}
void EffectRipple::draw() {
if (!stage_set)
return;
- gl_state_disable_cull_face();
+ gl_rend_state.disable_cull_face();
RenderTexture* rt[3];
for (int32_t i = 0, j = 2; i < 3; i++, j++)
@@ -1653,22 +1653,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();
glClearDLL(GL_DEPTH_BUFFER_BIT);
if (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());
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;
@@ -1679,7 +1679,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]);
@@ -1695,7 +1695,7 @@ void EffectRipple::draw() {
update = false;
- gl_state_enable_cull_face();
+ gl_rend_state.enable_cull_face();
}
void EffectRipple::sub_1403584A0(RenderTexture* rt) {
@@ -1710,7 +1710,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 star_catalog_milky_way::create_buffers(int32_t subdivs, float_t uv_rec_scale_u, float_t uv_rec_scale_v,
@@ -1722,9 +1722,9 @@ void star_catalog_milky_way::create_buffers(int32_t subdivs, float_t uv_rec_scal
const int32_t vtx_count = (subdivs - 1) * sectors_count + 2;
restart_index = (uint16_t)0xFFFFFFFF;
- gl_state_bind_vertex_array(0);
- gl_state_bind_array_buffer(0);
- gl_state_bind_element_array_buffer(0);
+ gl_rend_state.bind_vertex_array(0);
+ gl_rend_state.bind_array_buffer(0);
+ gl_rend_state.bind_element_array_buffer(0);
const float_t rec_longitude_degs_10 = 1.0f / (float_t)longitude_degs_10;
const float_t rec_latitude_degs_10 = 1.0f / (float_t)latitude_degs_10;
@@ -1802,7 +1802,7 @@ void star_catalog_milky_way::create_buffers(int32_t subdivs, float_t uv_rec_scal
vbo.Create((size_t)buffer_size * vtx_count, vtx_data);
vbo.Bind();
- gl_state_bind_vertex_array(vao);
+ gl_rend_state.bind_vertex_array(vao);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, buffer_size,
(void*)offsetof(star_catalog_vertex, position));
@@ -1813,9 +1813,9 @@ void star_catalog_milky_way::create_buffers(int32_t subdivs, float_t uv_rec_scal
ebo.Create(sizeof(uint16_t) * ebo_count, ebo_data);
ebo.Bind();
- gl_state_bind_vertex_array(0);
- gl_state_bind_array_buffer(0);
- gl_state_bind_element_array_buffer(0);
+ gl_rend_state.bind_vertex_array(0);
+ gl_rend_state.bind_array_buffer(0);
+ gl_rend_state.bind_element_array_buffer(0);
free_def(vtx_data);
free_def(ebo_data);
@@ -1891,27 +1891,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, star_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, star_sampler);
+ gl_rend_state.enable_primitive_restart();
+ gl_rend_state.set_primitive_restart_index(restart_index);
uniform->arr[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();
}
@@ -1962,11 +1962,11 @@ void star_catalog::draw() {
uniform->arr[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->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->common_vao);
for (int32_t i = 0; i < 2; i++) {
stage_param_data_star_modifiers& modifiers = stage_param_data.modifiers[i];
@@ -1985,16 +1985,16 @@ void star_catalog::draw() {
stars_batch_ubo.Bind(1);
stars_storage.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);
stars_storage.Draw(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);
stars_storage.Draw(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);
}
@@ -2133,20 +2133,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->common_vao);
+ gl_rend_state.bind_vertex_array(rctx->common_vao);
water_particle_scene_ubo.Bind(0);
storage.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);
storage.Draw(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();
}
static void TaskEffectAuth3D__SetVisibility(size_t This, bool value) {
@@ -2183,15 +2183,15 @@ static void draw_fog_particle(EffectFogRing* data, mat4* mat) {
EffectStorage& storage = elem->second;
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->common_vao);
+ gl_rend_state.active_bind_texture_2d(0, tex->glid);
+ gl_rend_state.bind_vertex_array(rctx->common_vao);
storage.Bind(0);
storage.Draw(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();
}
@@ -2237,9 +2237,9 @@ static void draw_ripple_particles(ripple_struct* data, mat4* mat) {
uniform->arr[U_RIPPLE] = data->ripple_uniform;
uniform->arr[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->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->common_vao);
shaders_ft.set(SHADER_FT_RIPEMIT);
ripple_emit_scene_ubo.Bind(0);
@@ -2248,9 +2248,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) {
diff --git a/src/DivaGL/gl_rend_state.cpp b/src/DivaGL/gl_rend_state.cpp
new file mode 100644
index 0000000..9726502
--- /dev/null
+++ b/src/DivaGL/gl_rend_state.cpp
@@ -0,0 +1,586 @@
+/*
+ by korenkonder
+ GitHub/GitLab: korenkonder
+*/
+
+#include "gl_rend_state.hpp"
+#include "wrap.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;
+ }
+ glBindTextureDLL(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;
+ }
+ glBindTextureDLL(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 || framebuffer_binding != framebuffer
+ || read_framebuffer_binding != framebuffer
+ || draw_framebuffer_binding != framebuffer) {
+ glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
+ framebuffer_binding = 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 (!DIVA_GL_VERSION_4_3)
+ return;
+
+ 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 (!DIVA_GL_VERSION_4_3)
+ return;
+
+ 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 (!DIVA_GL_VERSION_4_3)
+ return;
+
+ 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) {
+ glBindTextureDLL(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) {
+ glBindTextureDLL(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_texture_binding_2d(size_t index) {
+ return texture_binding_2d[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_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) {
+ glDisableDLL(GL_BLEND);
+ blend = GL_FALSE;
+ }
+}
+
+void gl_rend_state_struct::disable_cull_face(bool force) {
+ if (force || cull_face) {
+ glDisableDLL(GL_CULL_FACE);
+ cull_face = GL_FALSE;
+ }
+}
+
+void gl_rend_state_struct::disable_depth_test(bool force) {
+ if (force || depth_test) {
+ glDisableDLL(GL_DEPTH_TEST);
+ depth_test = GL_FALSE;
+ }
+}
+
+void gl_rend_state_struct::disable_multisample(bool force) {
+ if (force || multisample) {
+ glDisableDLL(GL_MULTISAMPLE);
+ multisample = GL_FALSE;
+ }
+}
+
+void gl_rend_state_struct::disable_primitive_restart(bool force) {
+ if (force || primitive_restart) {
+ glDisableDLL(GL_PRIMITIVE_RESTART);
+ primitive_restart = GL_FALSE;
+ }
+}
+
+void gl_rend_state_struct::disable_scissor_test(bool force) {
+ if (force || scissor_test) {
+ glDisableDLL(GL_SCISSOR_TEST);
+ scissor_test = GL_FALSE;
+ }
+}
+
+void gl_rend_state_struct::disable_stencil_test(bool force) {
+ if (force || stencil_test) {
+ glDisableDLL(GL_STENCIL_TEST);
+ stencil_test = GL_FALSE;
+ }
+}
+
+void gl_rend_state_struct::enable_blend(bool force) {
+ if (force || !blend) {
+ glEnableDLL(GL_BLEND);
+ blend = GL_TRUE;
+ }
+}
+
+void gl_rend_state_struct::enable_cull_face(bool force) {
+ if (force || !cull_face) {
+ glEnableDLL(GL_CULL_FACE);
+ cull_face = GL_TRUE;
+ }
+}
+
+void gl_rend_state_struct::enable_depth_test(bool force) {
+ if (force || !depth_test) {
+ glEnableDLL(GL_DEPTH_TEST);
+ depth_test = GL_TRUE;
+ }
+}
+
+void gl_rend_state_struct::enable_multisample(bool force) {
+ if (force || !multisample) {
+ glEnableDLL(GL_MULTISAMPLE);
+ multisample = GL_TRUE;
+ }
+}
+
+void gl_rend_state_struct::enable_primitive_restart(bool force) {
+ if (force || !primitive_restart) {
+ glEnableDLL(GL_PRIMITIVE_RESTART);
+ primitive_restart = GL_TRUE;
+ }
+}
+
+void gl_rend_state_struct::enable_scissor_test(bool force) {
+ if (force || !scissor_test) {
+ glEnableDLL(GL_SCISSOR_TEST);
+ scissor_test = GL_TRUE;
+ }
+}
+
+void gl_rend_state_struct::enable_stencil_test(bool force) {
+ if (force || !stencil_test) {
+ glEnableDLL(GL_STENCIL_TEST);
+ stencil_test = GL_TRUE;
+ }
+}
+
+void gl_rend_state_struct::get() {
+ glGetIntegervDLL(GL_CURRENT_PROGRAM, (GLint*)&program);
+ GLenum active_texture = GL_TEXTURE0;
+ glGetIntegervDLL(GL_ACTIVE_TEXTURE, (GLint*)&active_texture);
+ active_texture_index = active_texture - GL_TEXTURE0;
+
+ if (DIVA_GL_VERSION_4_5) {
+ for (GLuint i = 0; i < 32; i++) {
+ glGetIntegeri_v(GL_TEXTURE_BINDING_2D, i, &texture_binding_2d[i]);
+ glGetIntegeri_v(GL_TEXTURE_BINDING_CUBE_MAP, i, &texture_binding_cube_map[i]);
+ glGetIntegeri_v(GL_SAMPLER_BINDING, i, &sampler_binding[i]);
+ }
+ }
+ else {
+ for (GLuint i = 0; i < 32; i++) {
+ glActiveTexture((GLenum)(GL_TEXTURE0 + i));
+ glGetIntegervDLL(GL_TEXTURE_BINDING_2D, &texture_binding_2d[i]);
+ glGetIntegervDLL(GL_TEXTURE_BINDING_CUBE_MAP, &texture_binding_cube_map[i]);
+ glGetIntegervDLL(GL_SAMPLER_BINDING, &sampler_binding[i]);
+ }
+ glActiveTexture(active_texture);
+ }
+
+ glGetBooleanvDLL(GL_BLEND, &blend);
+ glGetIntegervDLL(GL_BLEND_SRC_RGB, (GLint*)&blend_src_rgb);
+ glGetIntegervDLL(GL_BLEND_SRC_ALPHA, (GLint*)&blend_src_alpha);
+ glGetIntegervDLL(GL_BLEND_DST_RGB, (GLint*)&blend_dst_rgb);
+ glGetIntegervDLL(GL_BLEND_DST_ALPHA, (GLint*)&blend_dst_alpha);
+ glGetIntegervDLL(GL_BLEND_EQUATION_RGB, (GLint*)&blend_mode_rgb);
+ glGetIntegervDLL(GL_BLEND_EQUATION_ALPHA, (GLint*)&blend_mode_alpha);
+
+ glGetIntegervDLL(GL_FRAMEBUFFER_BINDING, (GLint*)&framebuffer_binding);
+ glGetIntegervDLL(GL_READ_FRAMEBUFFER_BINDING, (GLint*)&read_framebuffer_binding);
+ glGetIntegervDLL(GL_DRAW_FRAMEBUFFER_BINDING, (GLint*)&draw_framebuffer_binding);
+ glGetIntegervDLL(GL_VERTEX_ARRAY_BINDING, (GLint*)&vertex_array_binding);
+ glGetIntegervDLL(GL_ARRAY_BUFFER_BINDING, (GLint*)&array_buffer_binding);
+ glGetIntegervDLL(GL_ELEMENT_ARRAY_BUFFER_BINDING, (GLint*)&element_array_buffer_binding);
+
+ glGetIntegervDLL(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, (GLintptr*)&uniform_buffer_offsets[i]);
+ glGetInteger64i_v(GL_UNIFORM_BUFFER_SIZE, i, (GLsizeiptr*)&uniform_buffer_sizes[i]);
+ }
+
+ if (DIVA_GL_VERSION_4_3) {
+ glGetIntegervDLL(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, (GLintptr*)&shader_storage_buffer_offsets[i]);
+ glGetInteger64i_v(GL_SHADER_STORAGE_BUFFER_SIZE, i, (GLsizeiptr*)&shader_storage_buffer_sizes[i]);
+ }
+ }
+
+ glGetBooleanvDLL(GL_COLOR_WRITEMASK, color_mask);
+ glGetBooleanvDLL(GL_CULL_FACE, &cull_face);
+ glGetIntegervDLL(GL_CULL_FACE_MODE, (GLint*)&cull_face_mode);
+ glGetBooleanvDLL(GL_DEPTH_TEST, &depth_test);
+ glGetIntegervDLL(GL_DEPTH_FUNC, (GLint*)&depth_func);
+ glGetBooleanvDLL(GL_DEPTH_WRITEMASK, &depth_mask);
+ glGetFloatvDLL(GL_LINE_WIDTH, &line_width);
+ glGetBooleanvDLL(GL_MULTISAMPLE, &multisample);
+ glGetBooleanvDLL(GL_PRIMITIVE_RESTART, &primitive_restart);
+ glGetIntegervDLL(GL_PRIMITIVE_RESTART_INDEX, (GLint*)&primitive_restart_index);
+ glGetIntegervDLL(GL_SCISSOR_BOX, (GLint*)&scissor_box);
+ glGetBooleanvDLL(GL_SCISSOR_TEST, &scissor_test);
+ glGetBooleanvDLL(GL_STENCIL_TEST, &stencil_test);
+ glGetIntegervDLL(GL_STENCIL_FUNC, (GLint*)&stencil_func);
+ glGetIntegervDLL(GL_STENCIL_VALUE_MASK, (GLint*)&stencil_value_mask);
+ glGetIntegervDLL(GL_STENCIL_FAIL, (GLint*)&stencil_fail);
+ glGetIntegervDLL(GL_STENCIL_PASS_DEPTH_FAIL, (GLint*)&stencil_dpfail);
+ glGetIntegervDLL(GL_STENCIL_PASS_DEPTH_PASS, (GLint*)&stencil_dppass);
+ glGetIntegervDLL(GL_STENCIL_REF, &stencil_ref);
+ glGetIntegervDLL(GL_STENCIL_WRITEMASK, (GLint*)&stencil_mask);
+ glGetIntegervDLL(GL_VIEWPORT, (GLint*)&viewport);
+
+ glPolygonModeDLL(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) {
+ glColorMaskDLL(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) {
+ glCullFaceDLL(mode);
+ cull_face_mode = mode;
+ }
+}
+
+void gl_rend_state_struct::set_depth_func(GLenum func, bool force) {
+ if (force || depth_func != func) {
+ glDepthFuncDLL(func);
+ depth_func = func;
+ }
+}
+
+void gl_rend_state_struct::set_depth_mask(GLboolean flag, bool force) {
+ if (force || depth_mask != flag) {
+ glDepthMaskDLL(flag);
+ depth_mask = flag;
+ }
+}
+
+void gl_rend_state_struct::set_line_width(GLfloat width, bool force) {
+ if (force || line_width != width) {
+ glLineWidthDLL(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) {
+ glPolygonModeDLL(GL_FRONT, mode);
+ polygon_mode = mode;
+ }
+ break;
+ case GL_BACK:
+ if (force || polygon_mode != mode) {
+ glPolygonModeDLL(GL_BACK, mode);
+ polygon_mode = mode;
+ }
+ break;
+ case GL_FRONT_AND_BACK:
+ if (force || polygon_mode != mode) {
+ glPolygonModeDLL(GL_FRONT_AND_BACK, mode);
+ polygon_mode = 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) {
+ glScissorDLL(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) {
+ glScissorDLL(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) {
+ glStencilFuncSeparate(GL_FRONT_AND_BACK, 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) {
+ glStencilMaskSeparate(GL_FRONT_AND_BACK, 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) {
+ glStencilOpSeparate(GL_FRONT_AND_BACK, 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) {
+ glViewportDLL(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) {
+ glViewportDLL(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/DivaGL/gl_rend_state.hpp b/src/DivaGL/gl_rend_state.hpp
new file mode 100644
index 0000000..e48c124
--- /dev/null
+++ b/src/DivaGL/gl_rend_state.hpp
@@ -0,0 +1,149 @@
+/*
+ by korenkonder
+ GitHub/GitLab: korenkonder
+*/
+
+#pragma once
+
+#include "../KKdLib/default.hpp"
+#include "wrap.hpp"
+
+struct gl_rend_state_rect {
+ GLint x;
+ GLint y;
+ GLsizei width;
+ GLsizei height;
+};
+
+struct gl_rend_state_struct {
+ GLint program;
+ GLuint active_texture_index;
+ GLint texture_binding_2d[32];
+ GLint texture_binding_cube_map[32];
+ GLint 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 framebuffer_binding;
+ 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/DivaGL/gl_state.cpp b/src/DivaGL/gl_state.cpp
deleted file mode 100644
index 9e7c45e..0000000
--- a/src/DivaGL/gl_state.cpp
+++ /dev/null
@@ -1,603 +0,0 @@
-/*
- by korenkonder
- GitHub/GitLab: korenkonder
-*/
-
-#include "gl_state.hpp"
-#include "wrap.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 = (GLenum)(GL_TEXTURE0 + index);
- gl_state.active_texture_index = (GLuint)index;
- }
- glBindTextureDLL(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 = (GLenum)(GL_TEXTURE0 + index);
- gl_state.active_texture_index = (GLuint)index;
- }
- glBindTextureDLL(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 = (GLenum)(GL_TEXTURE0 + index);
- gl_state.active_texture_index = (GLuint)index;
- }
-}
-
-void gl_state_bind_framebuffer(GLuint framebuffer, bool force) {
- if (force || gl_state.framebuffer_binding != framebuffer
- || gl_state.read_framebuffer_binding != framebuffer
- || gl_state.draw_framebuffer_binding != framebuffer) {
- glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
- gl_state.framebuffer_binding = 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 (!DIVA_GL_VERSION_4_3)
- return;
-
- 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 (!DIVA_GL_VERSION_4_3)
- return;
-
- if (force || gl_state.shader_storage_buffer_bindings[index] != buffer) {
- glBindBufferBase(GL_SHADER_STORAGE_BUFFER, index, buffer);
- shader_storage_buffer_binding = buffer;
- gl_state.shader_storage_buffer_bindings[index] = buffer;
- gl_state.shader_storage_buffer_offsets[index] = 0;
- gl_state.shader_storage_buffer_sizes[index] = -1;
- }
-}
-
-void gl_state_bind_shader_storage_buffer_range(GLuint index,
- GLuint buffer, GLintptr offset, GLsizeiptr size, bool force) {
- if (!DIVA_GL_VERSION_4_3)
- return;
-
- 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);
- 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) {
- glBindTextureDLL(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) {
- glBindTextureDLL(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_texture_binding_2d(size_t index) {
- return gl_state.texture_binding_2d[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_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) {
- glDisableDLL(GL_BLEND);
- gl_state.blend = GL_FALSE;
- }
-}
-
-void gl_state_disable_cull_face(bool force) {
- if (force || gl_state.cull_face) {
- glDisableDLL(GL_CULL_FACE);
- gl_state.cull_face = GL_FALSE;
- }
-}
-
-void gl_state_disable_depth_test(bool force) {
- if (force || gl_state.depth_test) {
- glDisableDLL(GL_DEPTH_TEST);
- gl_state.depth_test = GL_FALSE;
- }
-}
-
-void gl_state_disable_multisample(bool force) {
- if (force || gl_state.multisample) {
- glDisableDLL(GL_MULTISAMPLE);
- gl_state.multisample = GL_FALSE;
- }
-}
-
-void gl_state_disable_primitive_restart(bool force) {
- if (force || gl_state.primitive_restart) {
- glDisableDLL(GL_PRIMITIVE_RESTART);
- gl_state.primitive_restart = GL_FALSE;
- }
-}
-
-void gl_state_disable_scissor_test(bool force) {
- if (force || gl_state.scissor_test) {
- glDisableDLL(GL_SCISSOR_TEST);
- gl_state.scissor_test = GL_FALSE;
- }
-}
-
-void gl_state_disable_stencil_test(bool force) {
- if (force || gl_state.stencil_test) {
- glDisableDLL(GL_STENCIL_TEST);
- gl_state.stencil_test = GL_FALSE;
- }
-}
-
-void gl_state_enable_blend(bool force) {
- if (force || !gl_state.blend) {
- glEnableDLL(GL_BLEND);
- gl_state.blend = GL_TRUE;
- }
-}
-
-void gl_state_enable_cull_face(bool force) {
- if (force || !gl_state.cull_face) {
- glEnableDLL(GL_CULL_FACE);
- gl_state.cull_face = GL_TRUE;
- }
-}
-
-void gl_state_enable_depth_test(bool force) {
- if (force || !gl_state.depth_test) {
- glEnableDLL(GL_DEPTH_TEST);
- gl_state.depth_test = GL_TRUE;
- }
-}
-
-void gl_state_enable_multisample(bool force) {
- if (force || !gl_state.multisample) {
- glEnableDLL(GL_MULTISAMPLE);
- gl_state.multisample = GL_TRUE;
- }
-}
-
-void gl_state_enable_primitive_restart(bool force) {
- if (force || !gl_state.primitive_restart) {
- glEnableDLL(GL_PRIMITIVE_RESTART);
- gl_state.primitive_restart = GL_TRUE;
- }
-}
-
-void gl_state_enable_scissor_test(bool force) {
- if (force || !gl_state.scissor_test) {
- glEnableDLL(GL_SCISSOR_TEST);
- gl_state.scissor_test = GL_TRUE;
- }
-}
-
-void gl_state_enable_stencil_test(bool force) {
- if (force || !gl_state.stencil_test) {
- glEnableDLL(GL_STENCIL_TEST);
- gl_state.stencil_test = GL_TRUE;
- }
-}
-
-void gl_state_get() {
- glGetIntegervDLL(GL_CURRENT_PROGRAM, &gl_state.program);
- glGetIntegervDLL(GL_ACTIVE_TEXTURE, (GLint*)&gl_state.active_texture);
- gl_state.active_texture_index = gl_state.active_texture - GL_TEXTURE0;
-
- if (DIVA_GL_VERSION_4_5) {
- for (GLuint i = 0; i < 32; i++) {
- glGetIntegeri_v(GL_TEXTURE_BINDING_2D, i, &gl_state.texture_binding_2d[i]);
- glGetIntegeri_v(GL_TEXTURE_BINDING_CUBE_MAP, i, &gl_state.texture_binding_cube_map[i]);
- glGetIntegeri_v(GL_SAMPLER_BINDING, i, &gl_state.sampler_binding[i]);
- }
- }
- else {
- for (GLuint i = 0; i < 32; i++) {
- glActiveTexture((GLenum)(GL_TEXTURE0 + i));
- glGetIntegervDLL(GL_TEXTURE_BINDING_2D, &gl_state.texture_binding_2d[i]);
- glGetIntegervDLL(GL_TEXTURE_BINDING_CUBE_MAP, &gl_state.texture_binding_cube_map[i]);
- glGetIntegervDLL(GL_SAMPLER_BINDING, &gl_state.sampler_binding[i]);
- }
- glActiveTexture(gl_state.active_texture);
- }
-
- glGetBooleanvDLL(GL_BLEND, &gl_state.blend);
- glGetIntegervDLL(GL_BLEND_SRC_RGB, (GLint*)&gl_state.blend_src_rgb);
- glGetIntegervDLL(GL_BLEND_SRC_ALPHA, (GLint*)&gl_state.blend_src_alpha);
- glGetIntegervDLL(GL_BLEND_DST_RGB, (GLint*)&gl_state.blend_dst_rgb);
- glGetIntegervDLL(GL_BLEND_DST_ALPHA, (GLint*)&gl_state.blend_dst_alpha);
- glGetIntegervDLL(GL_BLEND_EQUATION_RGB, (GLint*)&gl_state.blend_mode_rgb);
- glGetIntegervDLL(GL_BLEND_EQUATION_ALPHA, (GLint*)&gl_state.blend_mode_alpha);
-
- glGetIntegervDLL(GL_FRAMEBUFFER_BINDING, (GLint*)&gl_state.framebuffer_binding);
- glGetIntegervDLL(GL_READ_FRAMEBUFFER_BINDING, (GLint*)&gl_state.read_framebuffer_binding);
- glGetIntegervDLL(GL_DRAW_FRAMEBUFFER_BINDING, (GLint*)&gl_state.draw_framebuffer_binding);
- glGetIntegervDLL(GL_VERTEX_ARRAY_BINDING, (GLint*)&gl_state.vertex_array_binding);
- glGetIntegervDLL(GL_ARRAY_BUFFER_BINDING, (GLint*)&gl_state.array_buffer_binding);
- glGetIntegervDLL(GL_ELEMENT_ARRAY_BUFFER_BINDING, (GLint*)&gl_state.element_array_buffer_binding);
-
- glGetIntegervDLL(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, (GLintptr*)&gl_state.uniform_buffer_offsets[i]);
- glGetInteger64i_v(GL_UNIFORM_BUFFER_SIZE, i, (GLsizeiptr*)&gl_state.uniform_buffer_sizes[i]);
- }
-
- if (DIVA_GL_VERSION_4_3) {
- glGetIntegervDLL(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, (GLintptr*)&gl_state.shader_storage_buffer_offsets[i]);
- glGetInteger64i_v(GL_SHADER_STORAGE_BUFFER_SIZE, i, (GLsizeiptr*)&gl_state.shader_storage_buffer_sizes[i]);
- }
- }
-
- glGetBooleanvDLL(GL_COLOR_WRITEMASK, gl_state.color_mask);
- glGetBooleanvDLL(GL_CULL_FACE, &gl_state.cull_face);
- glGetIntegervDLL(GL_CULL_FACE_MODE, (GLint*)&gl_state.cull_face_mode);
- glGetBooleanvDLL(GL_DEPTH_TEST, &gl_state.depth_test);
- glGetIntegervDLL(GL_DEPTH_FUNC, (GLint*)&gl_state.depth_func);
- glGetBooleanvDLL(GL_DEPTH_WRITEMASK, &gl_state.depth_mask);
- glGetFloatvDLL(GL_LINE_WIDTH, &gl_state.line_width);
- glGetBooleanvDLL(GL_MULTISAMPLE, &gl_state.multisample);
- glGetBooleanvDLL(GL_PRIMITIVE_RESTART, &gl_state.primitive_restart);
- glGetIntegervDLL(GL_PRIMITIVE_RESTART_INDEX, (GLint*)&gl_state.primitive_restart_index);
- glGetIntegervDLL(GL_SCISSOR_BOX, (GLint*)&gl_state.scissor_box);
- glGetBooleanvDLL(GL_SCISSOR_TEST, &gl_state.scissor_test);
- glGetBooleanvDLL(GL_STENCIL_TEST, &gl_state.stencil_test);
- glGetIntegervDLL(GL_STENCIL_FUNC, (GLint*)&gl_state.stencil_func);
- glGetIntegervDLL(GL_STENCIL_VALUE_MASK, (GLint*)&gl_state.stencil_value_mask);
- glGetIntegervDLL(GL_STENCIL_FAIL, (GLint*)&gl_state.stencil_fail);
- glGetIntegervDLL(GL_STENCIL_PASS_DEPTH_FAIL, (GLint*)&gl_state.stencil_dpfail);
- glGetIntegervDLL(GL_STENCIL_PASS_DEPTH_PASS, (GLint*)&gl_state.stencil_dppass);
- glGetIntegervDLL(GL_STENCIL_REF, &gl_state.stencil_ref);
- glGetIntegervDLL(GL_STENCIL_WRITEMASK, (GLint*)&gl_state.stencil_mask);
- glGetIntegervDLL(GL_VIEWPORT, (GLint*)&gl_state.viewport);
-
- glPolygonModeDLL(GL_FRONT_AND_BACK, GL_FILL);
- gl_state.polygon_mode = GL_FILL;
-}
-
-void gl_state_get_all_gl_errors() {
- GLenum error;
- while (error = glGetErrorDLL())
- printf_debug("GL Error: 0x%04X\n", error);
-}
-
-GLenum gl_state_get_error() {
- GLenum error = glGetErrorDLL();
- 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) {
- glColorMaskDLL(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) {
- glCullFaceDLL(mode);
- gl_state.cull_face_mode = mode;
- }
-}
-
-void gl_state_set_depth_func(GLenum func, bool force) {
- if (force || gl_state.depth_func != func) {
- glDepthFuncDLL(func);
- gl_state.depth_func = func;
- }
-}
-
-void gl_state_set_depth_mask(GLboolean flag, bool force) {
- if (force || gl_state.depth_mask != flag) {
- glDepthMaskDLL(flag);
- gl_state.depth_mask = flag;
- }
-}
-
-void gl_state_set_line_width(GLfloat width, bool force) {
- if (force || gl_state.line_width != width) {
- glLineWidthDLL(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) {
- glPolygonModeDLL(GL_FRONT, mode);
- gl_state.polygon_mode = mode;
- }
- break;
- case GL_BACK:
- if (force || gl_state.polygon_mode != mode) {
- glPolygonModeDLL(GL_BACK, mode);
- gl_state.polygon_mode = mode;
- }
- break;
- case GL_FRONT_AND_BACK:
- if (force || gl_state.polygon_mode != mode) {
- glPolygonModeDLL(GL_FRONT_AND_BACK, mode);
- gl_state.polygon_mode = 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) {
- glScissorDLL(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) {
- glScissorDLL(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) {
- glStencilFuncSeparate(GL_FRONT_AND_BACK, 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) {
- glStencilMaskSeparate(GL_FRONT_AND_BACK, 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) {
- glStencilOpSeparate(GL_FRONT_AND_BACK, 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) {
- glViewportDLL(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) {
- glViewportDLL(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/DivaGL/gl_state.hpp b/src/DivaGL/gl_state.hpp
deleted file mode 100644
index 5bfc412..0000000
--- a/src/DivaGL/gl_state.hpp
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- by korenkonder
- GitHub/GitLab: korenkonder
-*/
-
-#pragma once
-
-#include "../KKdLib/default.hpp"
-#include "wrap.hpp"
-
-struct gl_state_rect {
- GLint x;
- GLint y;
- GLsizei width;
- GLsizei height;
-};
-
-struct gl_state_struct {
- GLint program;
- GLenum active_texture;
- GLuint active_texture_index;
- GLint texture_binding_2d[32];
- GLint texture_binding_cube_map[32];
- GLint 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 framebuffer_binding;
- 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/DivaGL/graphics/color_change_dw.cpp b/src/DivaGL/graphics/color_change_dw.cpp
index 864f534..2d0404d 100644
--- a/src/DivaGL/graphics/color_change_dw.cpp
+++ b/src/DivaGL/graphics/color_change_dw.cpp
@@ -6,7 +6,8 @@
#include "color_change_dw.hpp"
#include "../../AFTModsShared/dw.hpp"
#include "../rob/rob.hpp"
-#include "../gl_state.hpp"
+#include "../gl_rend_state.hpp"
+#include "../shared.hpp"
#include "../texture.hpp"
#include
@@ -120,7 +121,7 @@ HOOK(void, FASTCALL, ColorChangeDw__Draw, 0x00000001402C2170, ColorChangeDw* Thi
else
dxt5_image_apply_color_tone(width_align, height_align, size, (dxt5_block*)data, col_tone);
- gl_state_bind_texture_2d(org_tex->glid);
+ gl_rend_state.bind_texture_2d(org_tex->glid);
int32_t width = chg_tex->get_width_mip_level(i);
int32_t height = chg_tex->get_height_mip_level(i);
glCompressedTexSubImage2D(org_tex->target, i, 0, 0, width, height,
@@ -129,16 +130,16 @@ HOOK(void, FASTCALL, ColorChangeDw__Draw, 0x00000001402C2170, ColorChangeDw* Thi
else if (chg_tex->internal_format == GL_RGB5) {
rgb565_image_apply_color_tone(width_align, height_align, size, (rgb565*)data, col_tone);
- gl_state_bind_texture_2d(org_tex->glid);
+ gl_rend_state.bind_texture_2d(org_tex->glid);
int32_t width = chg_tex->get_width_mip_level(i);
int32_t height = chg_tex->get_height_mip_level(i);
glTexSubImage2DDLL(org_tex->target, i, 0, 0, width, height,
GL_RGB, GL_UNSIGNED_SHORT_5_6_5, data);
}
- gl_state_get_error();
+ gl_get_error_print();
prj::HeapCMallocFree(prj::HeapCMallocTemp, data);
}
- gl_state_bind_texture_2d(0);
+ gl_rend_state.bind_texture_2d(0);
}
if (This->show) {
@@ -280,12 +281,12 @@ bool ColorChangeDw::LoadTexture() {
int32_t width_align = org_tex->get_width_align_mip_level(i);
int32_t height_align = org_tex->get_height_align_mip_level(i);
- gl_state_bind_texture_2d(org_tex->glid);
+ gl_rend_state.bind_texture_2d(org_tex->glid);
if (org_tex->flags & TEXTURE_BLOCK_COMPRESSION)
glGetCompressedTexImage(org_tex->target, i, data);
else
glGetTexImageDLL(org_tex->target, i, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, data);
- gl_state_get_error();
+ gl_get_error_print();
vec_data.push_back(data);
}
diff --git a/src/DivaGL/hook.cpp b/src/DivaGL/hook.cpp
index da5ae83..480655e 100644
--- a/src/DivaGL/hook.cpp
+++ b/src/DivaGL/hook.cpp
@@ -118,8 +118,8 @@ HOOK(void, FASTCALL, sub_140194CD0, 0x000000140194CD0) {
originalsub_140194CD0();
}
-HOOK(void, FASTCALL, _gl_state_get, 0x0000000140442DF0) {
- gl_state_get();
+HOOK(void, FASTCALL, gl_rend_state__get, 0x0000000140442DF0) {
+ gl_rend_state.get();
}
HOOK(void, FASTCALL, rndr__Render__update_res, 0x00000001404A9480, rndr::Render* rend, bool set, int32_t base_downsample) {
@@ -165,12 +165,12 @@ HOOK(void, FASTCALL, rndr__Render__movie_texture_free, 0x00000001404B18F0,
}
HOOK(void, FASTCALL, rndr__RenderManager__rndpass_pre_proc, 0x0000000140502C90) {
- gl_state_begin_event("rndpass_pre_proc");
+ gl_rend_state.begin_event("rndpass_pre_proc");
render_manager.render->pre_proc();
Glitter::glt_particle_manager->CalcDisp();
Glitter::glt_particle_manager_x->CalcDisp();
rctx->pre_proc();
- gl_state_end_event();
+ gl_rend_state.end_event();
}
HOOK(void, FASTCALL, rndr__RenderManager__render_all, 0x0000000140502CA0) {
@@ -178,11 +178,11 @@ HOOK(void, FASTCALL, rndr__RenderManager__render_all, 0x0000000140502CA0) {
}
HOOK(void, FASTCALL, rndr__RenderManager__rndpass_post_proc, 0x0000000140502C70) {
- gl_state_begin_event("rndpass_post_proc");
+ gl_rend_state.begin_event("rndpass_post_proc");
rctx->post_proc();
render_manager.render->post_proc();
render_manager.field_31C = false;
- gl_state_end_event();
+ gl_rend_state.end_event();
}
struct ScreenShotData {
@@ -279,7 +279,7 @@ void hook_funcs() {
INSTALL_HOOK(sub_140194CD0);
- INSTALL_HOOK(_gl_state_get);
+ INSTALL_HOOK(gl_rend_state__get);
INSTALL_HOOK(rndr__Render__update_res);
INSTALL_HOOK(rndr__Render__take_ss);
@@ -318,9 +318,6 @@ void hook_funcs() {
*(uint64_t*)&buf[0x02] = (uint64_t)&printf_proxy;
WRITE_MEMORY_STRING(0x00000001400DE640, buf, 0x0C);
- *(uint64_t*)&buf[0x02] = (uint64_t)&gl_state_get;
- WRITE_MEMORY_STRING(0x0000000140442FB4, buf, 0x0C);
-
extern size_t glut_handle;
*(uint64_t*)&buf[0x02] = (uint64_t)&glut_create_context;
WRITE_MEMORY_STRING(glut_handle + 0x0000A970, buf, 0x0C);
diff --git a/src/DivaGL/light_param.cpp b/src/DivaGL/light_param.cpp
index c4bed4e..0fc0313 100644
--- a/src/DivaGL/light_param.cpp
+++ b/src/DivaGL/light_param.cpp
@@ -247,13 +247,13 @@ 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]);
}
void light_param_data::set_ibl(const light_param_data_ibl* ibl, const light_param_data_storage* storage) {
for (int32_t i = 0, j = -1; i < 5; i++, j++) {
- gl_state_bind_texture_cube_map(storage->textures[i]);
+ gl_rend_state.bind_texture_cube_map(storage->textures[i]);
glTexParameteriDLL(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteriDLL(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteriDLL(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
@@ -279,7 +279,7 @@ void light_param_data::set_ibl(const light_param_data_ibl* ibl, const light_para
light_param_data::set_ibl_specular(&ibl->specular[j]);
}
}
- gl_state_bind_texture_cube_map(0);
+ gl_rend_state.bind_texture_cube_map(0);
::light_set* set = &light_set_data[LIGHT_SET_MAIN];
set->set_irradiance(ibl->diff_coef[1][0], ibl->diff_coef[1][1], ibl->diff_coef[1][2]);
diff --git a/src/DivaGL/mdl/disp_manager.cpp b/src/DivaGL/mdl/disp_manager.cpp
index 4d405b5..31f5b88 100644
--- a/src/DivaGL/mdl/disp_manager.cpp
+++ b/src/DivaGL/mdl/disp_manager.cpp
@@ -9,7 +9,7 @@
#include "../../AFTModsShared/uniform.hpp"
#include "../Glitter/glitter.hpp"
#include "../rob/rob.hpp"
-#include "../gl_state.hpp"
+#include "../gl_rend_state.hpp"
#include "../object.hpp"
#include "../render_manager.hpp"
#include "../shader_ft.hpp"
@@ -295,15 +295,15 @@ namespace mdl {
vertex_buffer = 0;
morph_vertex_buffer = 0;
- gl_state_bind_vertex_array(vertex_array);
+ gl_rend_state.bind_vertex_array(vertex_array);
for (int32_t i = 0; i < 16; i++)
if (vertex_attrib_array[i]) {
glDisableVertexAttribArray(i);
vertex_attrib_array[i] = false;
}
- gl_state_bind_array_buffer(0, true);
- gl_state_bind_element_array_buffer(0, true);
- gl_state_bind_vertex_array(0);
+ gl_rend_state.bind_array_buffer(0, true);
+ gl_rend_state.bind_element_array_buffer(0, true);
+ gl_rend_state.bind_vertex_array(0);
}
void DispManager::add_vertex_array(ObjSubMeshArgs* args) {
@@ -377,7 +377,7 @@ namespace mdl {
if (!vertex_array->vertex_array) {
glGenVertexArrays(1, &vertex_array->vertex_array);
- gl_state_bind_vertex_array(vertex_array->vertex_array);
+ gl_rend_state.bind_vertex_array(vertex_array->vertex_array);
glVertexAttrib4f( POSITION_INDEX, 0.0f, 0.0f, 0.0f, 1.0f);
glVertexAttrib4f( BONE_WEIGHT_INDEX, 0.0f, 0.0f, 0.0f, 0.0f);
glVertexAttrib4f( NORMAL_INDEX, 0.0f, 0.0f, 0.0f, 1.0f);
@@ -409,10 +409,10 @@ namespace mdl {
memcpy(&vertex_array->vertex_attrib_buffer_binding,
vertex_attrib_buffer_binding, sizeof(vertex_attrib_buffer_binding));
- gl_state_bind_vertex_array(vertex_array->vertex_array);
- gl_state_bind_array_buffer(vertex_buffer, true);
+ gl_rend_state.bind_vertex_array(vertex_array->vertex_array);
+ gl_rend_state.bind_array_buffer(vertex_buffer, true);
if (index_buffer)
- gl_state_bind_element_array_buffer(index_buffer, true);
+ gl_rend_state.bind_element_array_buffer(index_buffer, true);
size_t offset = vertex_buffer_offset;
if (vertex_format & OBJ_VERTEX_POSITION) {
@@ -651,7 +651,7 @@ namespace mdl {
}
if (morph_vertex_buffer) {
- gl_state_bind_array_buffer(morph_vertex_buffer, true);
+ gl_rend_state.bind_array_buffer(morph_vertex_buffer, true);
size_t offset = morph_vertex_buffer_offset;
if (vertex_format & OBJ_VERTEX_POSITION) {
@@ -883,10 +883,10 @@ namespace mdl {
}
}
- 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 (index_buffer)
- gl_state_bind_element_array_buffer(0);
+ gl_rend_state.bind_element_array_buffer(0);
}
static size_t gen_grid_vertices(prj::vector>& data,
@@ -1650,7 +1650,7 @@ namespace mdl {
if (!etc_vertex_array->vertex_array) {
glGenVertexArrays(1, &etc_vertex_array->vertex_array);
- gl_state_bind_vertex_array(etc_vertex_array->vertex_array);
+ gl_rend_state.bind_vertex_array(etc_vertex_array->vertex_array);
glVertexAttrib4f( POSITION_INDEX, 0.0f, 0.0f, 0.0f, 1.0f);
glVertexAttrib4f( BONE_WEIGHT_INDEX, 0.0f, 0.0f, 0.0f, 0.0f);
glVertexAttrib4f( NORMAL_INDEX, 0.0f, 0.0f, 0.0f, 1.0f);
@@ -1787,7 +1787,7 @@ namespace mdl {
GLsizei size_vertex = sizeof(vec3) * 2;
- gl_state_bind_vertex_array(etc_vertex_array->vertex_array);
+ gl_rend_state.bind_vertex_array(etc_vertex_array->vertex_array);
if (etc_vertex_array->vertex_buffer.IsNull())
etc_vertex_array->vertex_buffer.Create(sizeof(vec3) * 2 * vtx_data.size());
@@ -1813,10 +1813,10 @@ namespace mdl {
glVertexAttribPointer(NORMAL_INDEX,
3, GL_FLOAT, GL_FALSE, size_vertex, (void*)sizeof(vec3));
- 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 (indexed)
- gl_state_bind_element_array_buffer(0);
+ gl_rend_state.bind_element_array_buffer(0);
}
void* DispManager::alloc_data(int32_t size) {
@@ -2030,12 +2030,12 @@ namespace mdl {
for (DispManager::etc_vertex_array& i : etc_vertex_array_cache)
if (i.alive_time > 0 && --i.alive_time <= 0) {
- gl_state_bind_vertex_array(i.vertex_array);
+ gl_rend_state.bind_vertex_array(i.vertex_array);
glDisableVertexAttribArray(POSITION_INDEX);
glDisableVertexAttribArray(NORMAL_INDEX);
- gl_state_bind_array_buffer(0, true);
- gl_state_bind_element_array_buffer(0, true);
- gl_state_bind_vertex_array(0);
+ gl_rend_state.bind_array_buffer(0, true);
+ gl_rend_state.bind_element_array_buffer(0, true);
+ gl_rend_state.bind_vertex_array(0);
}
}
@@ -2057,12 +2057,12 @@ namespace mdl {
void(*func)(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:
@@ -2070,7 +2070,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;
@@ -2089,12 +2089,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);
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);
draw_state.shader_index = SHADER_FT_SIL;
alpha_test = 1;
@@ -2102,7 +2102,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)
@@ -2112,7 +2112,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;
@@ -2124,7 +2124,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;
@@ -2142,18 +2142,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;
@@ -2161,10 +2161,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;
@@ -2178,7 +2178,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:
@@ -2190,7 +2190,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;
@@ -2247,53 +2247,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:
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) {
@@ -2306,19 +2306,19 @@ namespace mdl {
void(*func)(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;
@@ -2349,16 +2349,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) {
@@ -2372,25 +2372,25 @@ namespace mdl {
void(*func)(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);
@@ -2412,16 +2412,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) {
@@ -2431,12 +2431,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->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();
for (ObjData*& i : get_obj_list(type)) {
switch (i->type) {
@@ -2451,7 +2451,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/DivaGL/mdl/draw_object.cpp b/src/DivaGL/mdl/draw_object.cpp
index bcd1d87..909ccf1 100644
--- a/src/DivaGL/mdl/draw_object.cpp
+++ b/src/DivaGL/mdl/draw_object.cpp
@@ -112,7 +112,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();
@@ -121,11 +121,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)
@@ -192,9 +192,9 @@ namespace mdl {
if (rctx->get_shared_storage_uniform_buffer_data(
(size_t)args->mats, buffer, offset, size, !!DIVA_GL_VERSION_4_3))
if (DIVA_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;
@@ -217,7 +217,7 @@ namespace mdl {
rctx->set_batch_worlds(mat4_identity);
uniform->arr[U_SKINNING] = 1;
- gl_state_bind_vertex_array(vao);
+ gl_rend_state.bind_vertex_array(vao);
func(args);
uniform->arr[U_SKINNING] = 0;
}
@@ -231,7 +231,7 @@ namespace mdl {
_mat = *mat;
uniform->arr[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(_mat);
func(args);
@@ -426,7 +426,7 @@ namespace mdl {
draw_object_vertex_attrib_set_default(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;
@@ -467,7 +467,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)
@@ -486,7 +486,7 @@ namespace mdl {
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)]);
}
}
@@ -502,9 +502,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 (draw_state.shader_index != -1)
@@ -598,7 +598,7 @@ static bool draw_object_blend_set(
}
}
}
- 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;
}
@@ -636,17 +636,17 @@ static void draw_object_chara_color_fog_set(const mdl::ObjSubMeshArgs* args, boo
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() {
- 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();
}
@@ -715,11 +715,11 @@ static void draw_object_material_set_default(const mdl::ObjSubMeshArgs* args, bo
}
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)
@@ -738,7 +738,7 @@ static void draw_object_material_set_default(const mdl::ObjSubMeshArgs* args, bo
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)]);
}
@@ -763,7 +763,7 @@ static void draw_object_material_set_default(const mdl::ObjSubMeshArgs* args, bo
}
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->arr[U0B] = 1;
}
@@ -903,7 +903,7 @@ static void draw_object_material_set_reflect(const mdl::ObjSubMeshArgs* args) {
const obj_material_data* material = args->material;
const prj::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++) {
@@ -926,7 +926,7 @@ static void draw_object_material_set_reflect(const mdl::ObjSubMeshArgs* args) {
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)
@@ -945,7 +945,7 @@ static void draw_object_material_set_reflect(const mdl::ObjSubMeshArgs* args) {
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)]);
}
@@ -1045,7 +1045,7 @@ static void draw_object_vertex_attrib_reset_default(const mdl::ObjSubMeshArgs* a
/*if (args->instances_count)
uniform->arr[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) {
@@ -1060,7 +1060,7 @@ static void draw_object_vertex_attrib_reset_reflect(const mdl::ObjSubMeshArgs* a
uniform->arr[U_MORPH_COLOR] = 0;
}
- gl_state_active_texture(0);
+ gl_rend_state.active_texture(0);
}
static void draw_object_vertex_attrib_set_default(const mdl::ObjSubMeshArgs* args) {
diff --git a/src/DivaGL/object.cpp b/src/DivaGL/object.cpp
index 1dfec07..e13bd58 100644
--- a/src/DivaGL/object.cpp
+++ b/src/DivaGL/object.cpp
@@ -8,7 +8,7 @@
#include "../AFTModsShared/file_handler.hpp"
#include "mdl/disp_manager.hpp"
#include "pv_game/firstread.hpp"
-#include "gl_state.hpp"
+#include "gl_rend_state.hpp"
#include "wrap.hpp"
#include
@@ -206,9 +206,9 @@ GLsizeiptr obj_mesh_vertex_buffer_divagl::get_size() {
GLint buffer;
GLint size;
glGetIntegervDLL(GL_ARRAY_BUFFER_BINDING, &buffer);
- gl_state_bind_element_array_buffer(buffers[0]);
+ gl_rend_state.bind_element_array_buffer(buffers[0]);
glGetBufferParameteriv(target, GL_BUFFER_SIZE, &size);
- gl_state_bind_element_array_buffer(buffer);
+ gl_rend_state.bind_element_array_buffer(buffer);
return size;
}
#endif
@@ -1163,12 +1163,12 @@ bool ObjsetInfo::vertex_buffer_load() {
static GLuint create_index_buffer(size_t size, const void* data) {
GLuint buffer = 0;
glGenBuffers(1, &buffer);
- gl_state_bind_element_array_buffer(buffer);
+ gl_rend_state.bind_element_array_buffer(buffer);
if (DIVA_GL_VERSION_4_4)
glBufferStorage(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)size, data, 0);
else
glBufferData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)size, data, GL_STATIC_DRAW);
- gl_state_bind_element_array_buffer(0);
+ gl_rend_state.bind_element_array_buffer(0);
if (glGetErrorDLL()) {
glDeleteBuffers(1, &buffer);
@@ -1183,14 +1183,14 @@ static GLuint create_index_buffer(size_t size, const void* data) {
static GLuint create_vertex_buffer(size_t size, const void* data, bool dynamic) {
GLuint buffer = 0;
glGenBuffers(1, &buffer);
- gl_state_bind_array_buffer(buffer);
+ gl_rend_state.bind_array_buffer(buffer);
if (DIVA_GL_VERSION_4_4)
glBufferStorage(GL_ARRAY_BUFFER, (GLsizeiptr)size, data,
dynamic ? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0);
else
glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)size, data,
dynamic ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW);
- gl_state_bind_array_buffer(0);
+ gl_rend_state.bind_array_buffer(0);
if (glGetErrorDLL()) {
glDeleteBuffers(1, &buffer);
@@ -1209,9 +1209,9 @@ static void free_index_buffer(GLuint buffer) {
disp_manager->check_index_buffer(buffer);
GLint size;
- gl_state_bind_element_array_buffer(buffer);
+ gl_rend_state.bind_element_array_buffer(buffer);
glGetBufferParameteriv(GL_ELEMENT_ARRAY_BUFFER, GL_BUFFER_SIZE, &size);
- gl_state_bind_element_array_buffer(0);
+ gl_rend_state.bind_element_array_buffer(0);
bufobj_mgr.ib_all_size -= size;
glDeleteBuffers(1, &buffer);
@@ -1225,9 +1225,9 @@ static void free_vertex_buffer(GLuint buffer) {
disp_manager->check_vertex_buffer(buffer);
GLint size = 0;
- gl_state_bind_array_buffer(buffer);
+ gl_rend_state.bind_array_buffer(buffer);
glGetBufferParameteriv(GL_ARRAY_BUFFER, GL_BUFFER_SIZE, &size);
- gl_state_bind_array_buffer(0);
+ gl_rend_state.bind_array_buffer(0);
bufobj_mgr.vb_all_size -= size;
glDeleteBuffers(1, &buffer);
diff --git a/src/DivaGL/render.cpp b/src/DivaGL/render.cpp
index f7c5102..cff1ff7 100644
--- a/src/DivaGL/render.cpp
+++ b/src/DivaGL/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 "render_context.hpp"
#include "shader_ft.hpp"
@@ -36,10 +36,10 @@ namespace rndr {
void Render::apply_post_process(texture* light_proj_tex, int32_t npr_param) {
for (int32_t i = 0; i < 8; i++)
- gl_state_bind_sampler(i, 0);
+ gl_rend_state.bind_sampler(i, 0);
- gl_state_disable_depth_test();
- gl_state_disable_blend();
+ gl_rend_state.disable_depth_test();
+ gl_rend_state.disable_blend();
dof->apply(&rend_texture[0], &rctx->render_buffer);
@@ -67,9 +67,9 @@ namespace rndr {
else
uniform->arr[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,
@@ -89,7 +89,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) {
@@ -103,13 +103,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);
@@ -128,8 +128,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->arr[U_REDUCE] = 5;
}
@@ -138,7 +138,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) {
@@ -149,10 +149,10 @@ namespace rndr {
}
rctx->screen_buffer.Bind();
- 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);
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->arr[U_ALPHA_MASK] = ss_alpha_mask ? 1 : 0;
uniform->arr[U_REDUCE] = 0;
shaders_ft.set(SHADER_FT_REDUCE);
@@ -162,11 +162,11 @@ namespace rndr {
uniform->arr[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:
@@ -196,13 +196,13 @@ 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);
fbo_blit(rctx->screen_buffer.fbos[0], 0,
0, 0, rctx->screen_width, rctx->screen_height,
0, 0, rctx->screen_width, rctx->screen_height, GL_COLOR_BUFFER_BIT, GL_LINEAR);
- gl_state_bind_framebuffer(0);
+ gl_rend_state.bind_framebuffer(0);
}
void Render::bind_render_texture(bool aet_back) {
@@ -212,18 +212,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() {
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->common_vao);
+ gl_rend_state.bind_vertex_array(rctx->common_vao);
rctx->sun_quad_ubo.Bind(0);
mat4 view;
@@ -279,11 +279,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,
@@ -323,7 +323,7 @@ namespace rndr {
rctx->quad_ubo.WriteMemory(quad);
rctx->quad_ubo.Bind(0);
- 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);
}
@@ -401,9 +401,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->common_vao);
+ gl_rend_state.bind_vertex_array(rctx->common_vao);
rctx->sun_quad_ubo.Bind(0);
int32_t query_index = (lens_flare_query_index + 1) % 3;
@@ -416,9 +416,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(&view, &position, &mat);
@@ -453,9 +453,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;
@@ -472,9 +472,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(&view, &position, &mat);
mat4_clear_rot(&mat, &mat);
@@ -490,13 +490,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;
@@ -673,10 +673,10 @@ namespace rndr {
rend_texture[0].Init(render_post_width[0], render_post_height[0], 0, GL_RGBA16F, GL_DEPTH_COMPONENT24);
- gl_state_bind_texture_2d(rend_texture[0].GetColorTex());
+ gl_rend_state.bind_texture_2d(rend_texture[0].GetColorTex());
glTexParameteriDLL(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- gl_state_bind_texture_2d(rend_texture[0].GetDepthTex());
+ gl_rend_state.bind_texture_2d(rend_texture[0].GetDepthTex());
GLint swizzle[] = { GL_RED, GL_RED, GL_RED, GL_ONE };
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzle);
@@ -694,19 +694,19 @@ namespace rndr {
temp_buffer.Init(render_post_width[0], render_post_height[0], 0, GL_RGBA8, GL_ZERO);
sss_contour_texture = &mlaa_buffer;
- gl_state_bind_texture_2d(mlaa_buffer.GetDepthTex());
+ gl_rend_state.bind_texture_2d(mlaa_buffer.GetDepthTex());
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzle);
for (int32_t i = 1; i < downsample_count; i++) {
rend_texture[i].Init(render_post_width[i], render_post_height[i], 0, GL_RGBA16F, GL_ZERO);
- gl_state_bind_texture_2d(rend_texture[i].GetColorTex());
+ gl_rend_state.bind_texture_2d(rend_texture[i].GetColorTex());
glTexParameteriDLL(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
}
downsample_texture.Init(reduce_width[0], reduce_height[0], 0, GL_RGBA16F, GL_ZERO);
- gl_state_bind_texture_2d(downsample_texture.GetColorTex());
+ gl_rend_state.bind_texture_2d(downsample_texture.GetColorTex());
const vec4 border_color = 0.0f;
glTexParameterfvDLL(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, (GLfloat*)&border_color);
@@ -729,7 +729,7 @@ namespace rndr {
for (int32_t i = 0; i < 5; i++) {
reduce_tex[i] = texture_load_tex_2d(texture_id(0x25, texture_counter++),
GL_RGBA16F, reduce_width[i], reduce_height[i], 0, 0, 0);
- gl_state_bind_texture_2d(reduce_tex[i]->glid);
+ gl_rend_state.bind_texture_2d(reduce_tex[i]->glid);
const vec4 border_color = 0.0f;
glTexParameterfvDLL(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, (GLfloat*)&border_color);
@@ -743,18 +743,18 @@ namespace rndr {
GL_RGBA16F, 32, 2, 0, 0, 0);
glGenTextures(1, &exposure_tex);
- gl_state_bind_texture_2d(exposure_tex);
+ gl_rend_state.bind_texture_2d(exposure_tex);
glTexImage2DDLL(GL_TEXTURE_2D, 0, GL_RGBA32F, 2, 2, 0, GL_RGBA, GL_FLOAT, 0);
glTexParameteriDLL(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteriDLL(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteriDLL(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteriDLL(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- gl_state_bind_texture_2d(0);
+ gl_rend_state.bind_texture_2d(0);
exposure_texture.SetColorDepthTextures(exposure_tex);
glGenTextures(1, &tonemap_lut_texture);
- gl_state_bind_texture_2d(tonemap_lut_texture);
+ gl_rend_state.bind_texture_2d(tonemap_lut_texture);
glTexImage2DDLL(GL_TEXTURE_2D, 0, GL_RG16F, 16 * TONE_MAP_SAT_GAMMA_SAMPLES, 1, 0, GL_RG, GL_HALF_FLOAT, 0);
glTexParameteriDLL(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteriDLL(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
@@ -762,7 +762,7 @@ namespace rndr {
glTexParameteriDLL(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
const GLint swizzle[] = { GL_RED, GL_RED, GL_RED, GL_GREEN };
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzle);
- gl_state_bind_texture_2d(0);
+ gl_rend_state.bind_texture_2d(0);
generate_mlaa_area_texture();
@@ -855,13 +855,13 @@ namespace rndr {
texture* movie_texture = sub_14041ED80(task_movie);
if (movie_texture) {
movie_textures[0].Bind();
- gl_state_set_viewport(0, 0, movie_textures_data[0]->width, movie_textures_data[0]->height);
- gl_state_active_bind_texture_2d(0, movie_texture->glid);
+ gl_rend_state.set_viewport(0, 0, movie_textures_data[0]->width, movie_textures_data[0]->height);
+ gl_rend_state.active_bind_texture_2d(0, movie_texture->glid);
uniform->arr[U_REDUCE] = 0;
shaders_ft.set(SHADER_FT_REDUCE);
draw_quad(movie_texture->width, movie_texture->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);
}
}
}
@@ -923,10 +923,10 @@ namespace rndr {
rend_texture[0].Init(render_post_width[0], render_post_height[0], 0, GL_RGBA16F, GL_DEPTH_COMPONENT24);
- gl_state_bind_texture_2d(rend_texture[0].GetColorTex());
+ gl_rend_state.bind_texture_2d(rend_texture[0].GetColorTex());
glTexParameteriDLL(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- gl_state_bind_texture_2d(rend_texture[0].GetDepthTex());
+ gl_rend_state.bind_texture_2d(rend_texture[0].GetDepthTex());
GLint swizzle[] = { GL_RED, GL_RED, GL_RED, GL_ONE };
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzle);
@@ -948,13 +948,13 @@ namespace rndr {
temp_buffer.Init(render_post_width[0], render_post_height[0], 0, GL_RGBA8, GL_ZERO);
sss_contour_texture = &mlaa_buffer;
- gl_state_bind_texture_2d(mlaa_buffer.GetDepthTex());
+ gl_rend_state.bind_texture_2d(mlaa_buffer.GetDepthTex());
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzle);
for (int32_t i = 1; i < downsample_count; i++) {
rend_texture[i].Init(render_post_width[i], render_post_height[i], 0, GL_RGBA16F, GL_ZERO);
- gl_state_bind_texture_2d(rend_texture[i].GetColorTex());
+ gl_rend_state.bind_texture_2d(rend_texture[i].GetColorTex());
glTexParameteriDLL(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
}
@@ -976,9 +976,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,
@@ -989,18 +989,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) {
@@ -1015,11 +1015,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]);
glCopyTexSubImage2DDLL(GL_TEXTURE_2D, 0, 0, 0, 0, 0, reduce_width[i], reduce_height[i]);
}
}
@@ -1052,16 +1052,16 @@ namespace rndr {
texture* rend_tex = render_textures_data[index];
uniform->arr[U_REDUCE] = 0;
- gl_state_set_viewport(0, 0, rend_tex->width, rend_tex->height);
- gl_state_active_bind_texture_2d(0, rctx->screen_buffer.GetColorTex());
- gl_state_bind_sampler(0, rctx->render_samplers[0]);
+ gl_rend_state.set_viewport(0, 0, rend_tex->width, rend_tex->height);
+ gl_rend_state.active_bind_texture_2d(0, rctx->screen_buffer.GetColorTex());
+ gl_rend_state.bind_sampler(0, rctx->render_samplers[0]);
shaders_ft.set(SHADER_FT_REDUCE);
draw_quad(rend_tex->width, rend_tex->height,
x_max, 1.0f, x_min, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f);
shader::unbind();
- gl_state_bind_framebuffer(0);
- gl_state_active_bind_texture_2d(0, 0);
- gl_state_bind_sampler(0, 0);
+ gl_rend_state.bind_framebuffer(0);
+ gl_rend_state.active_bind_texture_2d(0, 0);
+ gl_rend_state.bind_sampler(0, 0);
render_texture_free(tex, true);
}
@@ -1147,11 +1147,11 @@ namespace rndr {
}
void Render::apply_mlaa(int32_t destination, int32_t source, int32_t mlaa) {
- 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->render_samplers[1]);
+ gl_rend_state.active_bind_texture_2d(0, taa_tex[source]->glid);
+ gl_rend_state.bind_sampler(0, rctx->render_samplers[1]);
uniform->arr[U_MLAA] = 0;
shaders_ft.set(SHADER_FT_MLAA);
draw_quad(render_post_width[0], render_post_height[0],
@@ -1159,10 +1159,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->render_samplers[0]);
- gl_state_bind_sampler(1, rctx->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->render_samplers[0]);
+ gl_rend_state.bind_sampler(1, rctx->render_samplers[3]);
uniform->arr[U_MLAA] = 1;
uniform->arr[U_MLAA_SEARCH] = 2;
shaders_ft.set(SHADER_FT_MLAA);
@@ -1171,10 +1171,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->render_samplers[1]);
- gl_state_bind_sampler(1, rctx->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->render_samplers[1]);
+ gl_rend_state.bind_sampler(1, rctx->render_samplers[1]);
uniform->arr[U_MLAA] = 2;
uniform->arr[U_ALPHA_MASK] = ss_alpha_mask ? 1 : 0;
shaders_ft.set(SHADER_FT_MLAA);
@@ -1182,27 +1182,27 @@ 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->arr[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->render_samplers[1]);
+ gl_rend_state.active_bind_texture_2d(0, taa_tex[source]->glid);
+ gl_rend_state.bind_sampler(0, rctx->render_samplers[1]);
uniform->arr[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) {
if (!this)
return;
- gl_state_begin_event("PostProcess::tone_map");
+ gl_rend_state.begin_event("PostProcess::tone_map");
update_tone_map_lut();
@@ -1236,21 +1236,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->arr[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);
@@ -1266,8 +1266,8 @@ namespace rndr {
if (lens_shaft_scale < 50.0f) {
uniform->arr[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);
@@ -1281,18 +1281,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 };
@@ -1301,38 +1301,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->arr[U_AET_BACK] = 1;
}
if (light_proj_tex) {
uniform->arr[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();
}
@@ -1444,21 +1444,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->arr[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)
glCopyTexSubImage2DDLL(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 32, 1);
else
@@ -1466,12 +1466,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->arr[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);
}
@@ -1576,14 +1576,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->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->render_samplers[0]);
+ gl_rend_state.set_viewport(0, 0, dst_tex->width, dst_tex->height);
uniform->arr[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)
@@ -1653,21 +1653,21 @@ namespace rndr {
rctx->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->arr[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->render_samplers[0]);
- gl_state_bind_vertex_array(rctx->lens_ghost_vao);
+ gl_rend_state.active_bind_texture_2d(0, lens_ghost_texture);
+ gl_rend_state.bind_sampler(0, rctx->render_samplers[0]);
+ gl_rend_state.bind_vertex_array(rctx->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() {
@@ -1680,10 +1680,10 @@ namespace rndr {
calculate_mlaa_area_texture_data(data, cross1, cross2);
glGenTextures(1, &mlaa_area_texture);
- gl_state_bind_texture_2d(mlaa_area_texture);
+ gl_rend_state.bind_texture_2d(mlaa_area_texture);
glPixelStoreiDLL(GL_UNPACK_ALIGNMENT, 1);
glTexImage2DDLL(GL_TEXTURE_2D, 0, GL_RG8, MLAA_SIDE_LEN, MLAA_SIDE_LEN, 0, GL_RG, GL_UNSIGNED_BYTE, data);
- gl_state_bind_texture_2d(0);
+ gl_rend_state.bind_texture_2d(0);
free_def(data);
}
@@ -1696,18 +1696,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);
glCopyTexSubImage2DDLL(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);
glCopyTexSubImage2DDLL(GL_TEXTURE_2D, 0, 0, 0, 0, 0, reduce_width[i], reduce_height[i]);
@@ -1716,9 +1716,9 @@ namespace rndr {
uniform->arr[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);
@@ -1726,16 +1726,16 @@ namespace rndr {
uniform->arr[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;
@@ -1777,7 +1777,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);
glTexSubImage2DDLL(GL_TEXTURE_2D, 0, 0, 0,
16 * TONE_MAP_SAT_GAMMA_SAMPLES, 1, GL_RG, GL_FLOAT, tex_data);
}
diff --git a/src/DivaGL/render_context.cpp b/src/DivaGL/render_context.cpp
index d1c79b2..5e545e0 100644
--- a/src/DivaGL/render_context.cpp
+++ b/src/DivaGL/render_context.cpp
@@ -48,8 +48,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);
}
void draw_state_struct::set_fog_height(bool value) {
@@ -471,7 +471,7 @@ samplers(), render_samplers(), sprite_samplers(), screen_width(), screen_height(
};
glGenVertexArrays(1, &box_vao);
- gl_state_bind_vertex_array(box_vao);
+ gl_rend_state.bind_vertex_array(box_vao);
box_vbo.Create(sizeof(box_texcoords), box_texcoords);
box_vbo.Bind();
@@ -486,7 +486,7 @@ samplers(), render_samplers(), sprite_samplers(), screen_width(), screen_height(
glVertexAttribPointer(3, 4, GL_FLOAT, GL_FALSE, sizeof(float_t) * 16, (void*)(sizeof(float_t) * 12));
glGenVertexArrays(1, &lens_ghost_vao);
- gl_state_bind_vertex_array(lens_ghost_vao);
+ gl_rend_state.bind_vertex_array(lens_ghost_vao);
lens_ghost_vbo.Create(sizeof(float_t) * 5 * (6 * 16));
lens_ghost_vbo.Bind();
@@ -495,8 +495,8 @@ samplers(), render_samplers(), sprite_samplers(), screen_width(), screen_height(
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float_t) * 5, (void*)0);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(float_t) * 5, (void*)(sizeof(float_t) * 2));
- 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);
glGenVertexArrays(1, &common_vao);
@@ -966,20 +966,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/DivaGL/render_manager.cpp b/src/DivaGL/render_manager.cpp
index a13d9a1..3b295cf 100644
--- a/src/DivaGL/render_manager.cpp
+++ b/src/DivaGL/render_manager.cpp
@@ -13,7 +13,7 @@
#include "rob/rob.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"
@@ -273,52 +273,52 @@ 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->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();
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::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;
}
@@ -359,7 +359,7 @@ namespace rndr {
break;
}
render_pass_end(id);
- gl_state_get_error();
+ gl_get_error_print();
}
void RenderManager::render_pass_begin() {
@@ -380,8 +380,8 @@ namespace rndr {
}
void RenderManager::pass_shadow() {
- 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 (draw_pass_shadow_litproj_set()) {
disp_manager->draw(mdl::OBJ_TYPE_OPAQUE);
disp_manager->draw(mdl::OBJ_TYPE_TRANSPARENT);
@@ -400,15 +400,15 @@ namespace rndr {
disp_manager->draw(mdl::OBJ_TYPE_OPAQUE);
disp_manager->draw(mdl::OBJ_TYPE_TRANSPARENT);
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();
disp_manager->draw(mdl::OBJ_TYPE_TRANSLUCENT);
- gl_state_disable_blend();
+ gl_rend_state.disable_blend();
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];
@@ -434,10 +434,10 @@ namespace rndr {
draw_pass_shadow_begin_make_shadowmap(shad, v11[i], j);
disp_manager->draw((mdl::ObjType)(mdl::OBJ_TYPE_SHADOW_CHARA + v11[i]));
if (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);
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++;
@@ -455,8 +455,8 @@ 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_ss_sss() {
@@ -464,13 +464,13 @@ 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 && pass_sw[rndr::RND_PASSID_REFLECT]
&& draw_pass_reflect_get_obj_reflect_surface()
&& disp_manager->get_obj_count(mdl::OBJ_TYPE_SSS) && reflect_full_ptr) {
- gl_state_begin_event("reflect");
+ gl_rend_state.begin_event("reflect");
reflect_draw = true;
rndr::Render* rend = render;
@@ -484,7 +484,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);
//}
glClearColorDLL(sss->param.x, sss->param.y, sss->param.z, 0.0f);
@@ -502,11 +502,11 @@ namespace rndr {
set_reflect_mat(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);
disp_manager->draw(mdl::OBJ_TYPE_SSS);
- gl_state_disable_depth_test();
+ gl_rend_state.disable_depth_test();
draw_state.shader_index = -1;
draw_pass_3d_shadow_reset();
uniform->arr[U_NPR] = 0;
@@ -521,12 +521,12 @@ namespace rndr {
refl_tex.SetViewport();
glClearDLL(GL_DEPTH_BUFFER_BIT);
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);
disp_manager->draw(mdl::OBJ_TYPE_SSS);
- gl_state_disable_depth_test();
+ gl_rend_state.disable_depth_test();
draw_state.shader_index = -1;
- gl_state_bind_framebuffer(0);
+ gl_rend_state.bind_framebuffer(0);
uniform->arr[U_NPR] = 1;
draw_pass_sss_contour(rend);
}
@@ -534,7 +534,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 };
@@ -551,15 +551,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(sss);
reflect_draw = false;
- gl_state_end_event();
+ gl_rend_state.end_event();
}
//if (rend->render_width > 1280.0)
@@ -571,7 +571,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);
//}
glClearColorDLL(sss->param.x, sss->param.y, sss->param.z, 0.0f);
@@ -587,11 +587,11 @@ namespace rndr {
draw_pass_3d_shadow_reset();
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);
disp_manager->draw(mdl::OBJ_TYPE_SSS);
- gl_state_disable_depth_test();
+ gl_rend_state.disable_depth_test();
draw_state.shader_index = -1;
draw_pass_3d_shadow_reset();
uniform->arr[U_NPR] = 0;
@@ -606,12 +606,12 @@ namespace rndr {
rend->rend_texture[0].SetViewport();
glClearDLL(GL_DEPTH_BUFFER_BIT);
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);
disp_manager->draw(mdl::OBJ_TYPE_SSS);
- gl_state_disable_depth_test();
+ gl_rend_state.disable_depth_test();
draw_state.shader_index = -1;
- gl_state_bind_framebuffer(0);
+ gl_rend_state.bind_framebuffer(0);
uniform->arr[U_NPR] = 1;
draw_pass_sss_contour(rend);
}
@@ -619,7 +619,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 };
@@ -636,16 +636,16 @@ 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(sss);
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_reflect() {
@@ -655,7 +655,7 @@ namespace rndr {
return;
}
- 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();
@@ -685,16 +685,16 @@ namespace rndr {
uniform->arr[U_REFLECT] = 2;
uniform->arr[U_CLIP_PLANE] = clip_plane.data[1];
- 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);
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);
disp_manager->draw(mdl::OBJ_TYPE_REFLECT_TRANSLUCENT);
- gl_state_disable_blend();
+ gl_rend_state.disable_blend();
}
if (reflect_type == STAGE_DATA_REFLECT_REFLECT_MAP) {
@@ -702,7 +702,7 @@ namespace rndr {
uniform->arr[U_CLIP_PLANE] = clip_plane.data[0];
disp_manager->draw(mdl::OBJ_TYPE_REFLECT_CHARA_OPAQUE);
}
- gl_state_disable_depth_test();
+ gl_rend_state.disable_depth_test();
uniform->arr[U_REFLECT] = 0;
draw_state.shader_index = -1;
@@ -720,19 +720,19 @@ namespace rndr {
glClearColorDLL(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() {
- gl_state_begin_event("pass_refract");
+ gl_rend_state.begin_event("pass_refract");
RenderTexture& refract_texture = render_manager.get_render_texture(1);
refract_texture.Bind();
if (disp_manager->get_obj_count(mdl::OBJ_TYPE_REFRACT_OPAQUE)
|| disp_manager->get_obj_count(mdl::OBJ_TYPE_REFRACT_TRANSPARENT)
|| 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();
@@ -748,13 +748,13 @@ namespace rndr {
glClearColorDLL(clear_color.x, clear_color.y, clear_color.z, clear_color.w);
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);
disp_manager->draw(mdl::OBJ_TYPE_REFRACT_OPAQUE);
disp_manager->draw(mdl::OBJ_TYPE_REFRACT_TRANSPARENT);
disp_manager->draw(mdl::OBJ_TYPE_REFRACT_TRANSLUCENT);
- gl_state_disable_depth_test();
+ gl_rend_state.disable_depth_test();
draw_state.shader_index = -1;
}
else {
@@ -765,28 +765,28 @@ namespace rndr {
glClearColorDLL(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() {
- gl_state_begin_event("pass_clear");
+ gl_rend_state.begin_event("pass_clear");
if (clear) {
rctx->screen_buffer.Bind();
clear_color_set_gl();
//glClearDLL(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearDLL(GL_COLOR_BUFFER_BIT);
- gl_state_bind_framebuffer(0);
+ gl_rend_state.bind_framebuffer(0);
}
rndr::Render* rend = render;
@@ -796,7 +796,7 @@ namespace rndr {
glClearColorDLL(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepthf(1.0f);
glClearDLL(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- gl_state_bind_framebuffer(0);
+ gl_rend_state.bind_framebuffer(0);
}
else {
clear_color_set_gl();
@@ -805,7 +805,7 @@ namespace rndr {
glClearDLL(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
else
glClearDLL(GL_DEPTH_BUFFER_BIT);
- gl_state_bind_framebuffer(0);
+ gl_rend_state.bind_framebuffer(0);
}
}
else {
@@ -813,44 +813,44 @@ namespace rndr {
rend->bind_render_texture();
glClearColorDLL(0.0f, 0.0f, 0.0f, 0.0f);
glClearDLL(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();
glClearDLL(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() {
if (!sprite_manager_get_reqlist_count(2))
return;
- gl_state_begin_event("pass_pre_sprite");
+ gl_rend_state.begin_event("pass_pre_sprite");
rndr::Render* rend = render;
rend->bind_render_texture(true);
glClearColorDLL(0.0f, 0.0f, 0.0f, 0.0f);
glClearDLL(GL_COLOR_BUFFER_BIT);
sprite_manager_set_view_projection(true);
- 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);
- 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() {
@@ -858,11 +858,11 @@ namespace rndr {
draw_pass_set_camera();
if (!sss_data_get()->enable || !sss_data_get()->npr_contour
|| draw_pass_3d_get_translucent_count()) {
- gl_state_set_depth_mask(GL_TRUE);
+ gl_rend_state.set_depth_mask(GL_TRUE);
glClearDLL(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++)
lighting_set((light_set_id)i);
@@ -875,27 +875,27 @@ namespace rndr {
draw_pass_3d_shadow_reset();
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) {
extern bool reflect_full;
RenderTexture& refl_tex = reflect_full && reflect_full_ptr
? reflect_full_ptr->reflect_texture : 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->arr[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->arr[U_WATER_REFLECT] = 0;
}
sss_data_get()->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->arr[U_STAGE_AMBIENT] = light_stage_ambient ? 1 : 0;
@@ -911,17 +911,17 @@ namespace rndr {
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);
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);
Glitter::glt_particle_manager_x->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])
disp_manager->draw(mdl::OBJ_TYPE_TRANSPARENT);
if (render_manager.field_120)
@@ -944,56 +944,56 @@ 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);
Glitter::glt_particle_manager_x->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);
glClearColorDLL(0.0f, 0.0f, 0.0f, 0.0f);
glClearDLL(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);
disp_manager->draw(mdl::OBJ_TYPE_TRANSLUCENT_SORT_BY_RADIUS);
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_x->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(
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);
Glitter::glt_particle_manager_x->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(
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_x->CheckHasLocalEffect()) { // X
- gl_state_begin_event("local");
+ gl_rend_state.begin_event("local");
if (alpha_z_sort)
disp_manager->obj_sort(&rctx->view_mat, mdl::OBJ_TYPE_LOCAL_TRANSLUCENT, 1, field_31F);
@@ -1007,30 +1007,30 @@ namespace rndr {
disp_manager->draw(mdl::OBJ_TYPE_LOCAL_OPAQUE);
disp_manager->draw(mdl::OBJ_TYPE_LOCAL_TRANSPARENT);
- gl_state_enable_blend();
+ gl_rend_state.enable_blend();
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_x->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);
camera_data.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();
pass_sprite_surf();
shader::unbind();
- gl_state_bind_framebuffer(0);
+ gl_rend_state.bind_framebuffer(0);
}
void RenderManager::pass_show_vector() {
@@ -1038,7 +1038,7 @@ namespace rndr {
/*if (!show_vector_flags)
return;
- gl_state_begin_event("pass_show_vector");
+ gl_rend_state.begin_event("pass_show_vector");
render->bind_render_texture();
draw_pass_set_camera();
@@ -1060,27 +1060,27 @@ 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() {
- gl_state_begin_event("pass_post_process");
+ gl_rend_state.begin_event("pass_post_process");
static texture* (FASTCALL * litproj_texture_get)() = (texture * (FASTCALL*)())0x0000000140350600;
render->apply_post_process(litproj_texture_get(), npr_param);
- gl_state_end_event();
+ gl_rend_state.end_event();
}
void RenderManager::pass_sprite() {
- gl_state_begin_event("pass_sprite");
+ gl_rend_state.begin_event("pass_sprite");
if (sprite_manager_get_reqlist_count(0)) {
rndr::Render* rend = render;
- gl_state_set_viewport(0, 0, rend->screen_width, rend->screen_height);
+ gl_rend_state.set_viewport(0, 0, rend->screen_width, rend->screen_height);
if (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();
glClearColorDLL(0.0f, 0.0f, 0.0f, 0.0f);
glClearDLL(GL_COLOR_BUFFER_BIT);
}
@@ -1088,35 +1088,35 @@ namespace rndr {
rctx->screen_buffer.Bind();
sprite_manager_set_view_projection(false);
- 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_set_res((double_t)rctx->screen_width / (double_t)rctx->screen_height,
rctx->screen_width, rctx->screen_height);
sprite_manager_draw(0, true,
rctx->screen_overlay_buffer.color_texture);
- 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();
if (multisample && multisample_framebuffer) {
- gl_state_bind_framebuffer(0);
- gl_state_disable_multisample();
+ gl_rend_state.bind_framebuffer(0);
+ gl_rend_state.disable_multisample();
fbo_blit(multisample_framebuffer, rctx->screen_buffer.fbos[0],
0, 0, rctx->screen_width, rctx->screen_height,
0, 0, rctx->screen_width, rctx->screen_height, GL_COLOR_BUFFER_BIT, GL_NEAREST);
}
shader::unbind();
- gl_state_get_error();
+ gl_get_error_print();
}
fbo_blit(rctx->screen_buffer.fbos[0], 0,
0, 0, rctx->screen_width, rctx->screen_height,
0, 0, rctx->screen_width, rctx->screen_height, GL_COLOR_BUFFER_BIT, GL_LINEAR);
- gl_state_bind_framebuffer(0);
- gl_state_end_event();
+ gl_rend_state.bind_framebuffer(0);
+ gl_rend_state.end_event();
}
void RenderManager::pass_3d_contour() {
@@ -1131,12 +1131,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 };
@@ -1147,26 +1147,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() {
@@ -1176,11 +1176,11 @@ namespace rndr {
rndr::Render* rend = render;
sprite_manager_set_view_projection(false);
- gl_state_set_depth_mask(GL_FALSE);
- gl_state_disable_depth_test();
- 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.disable_depth_test();
+ gl_rend_state.enable_blend();
+ gl_rend_state.disable_cull_face();
sprite_manager_draw(1, true,
rend->temp_buffer.color_texture);
}
@@ -1190,7 +1190,7 @@ void image_filter_scale(RenderTexture* dst, texture* src, const vec4& scale) {
if (!dst || !dst->color_texture->glid || !dst->color_texture || !src || !src->glid)
return;
- 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();
@@ -1210,11 +1210,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() {
@@ -1387,15 +1387,15 @@ static void draw_pass_shadow_begin_make_shadowmap(Shadow* shad, int32_t index, i
shad->curr_render_textures[0]->Bind();
shad->curr_render_textures[0]->SetViewport();
texture* tex = shad->curr_render_textures[0]->color_texture;
- gl_state_set_scissor(0, 0, tex->width, tex->height);
- gl_state_enable_depth_test();
- gl_state_enable_scissor_test();
+ gl_rend_state.set_scissor(0, 0, tex->width, tex->height);
+ gl_rend_state.enable_depth_test();
+ gl_rend_state.enable_scissor_test();
glClearColorDLL(1.0, 1.0, 1.0, 1.0);
if (!a3)
glClearDLL(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
else if (shad->separate)
glClearDLL(GL_COLOR_BUFFER_BIT);
- gl_state_set_scissor(1, 1, tex->width - 2, tex->height - 2);
+ gl_rend_state.set_scissor(1, 1, tex->width - 2, tex->height - 2);
float_t shadow_range = shad->get_shadow_range();
float_t offset;
@@ -1428,8 +1428,8 @@ 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) {
- gl_state_disable_depth_test();
- gl_state_disable_scissor_test();
+ gl_rend_state.disable_depth_test();
+ gl_rend_state.disable_scissor_test();
draw_state.shader_index = -1;
if (a3 == shad->num_shadow - 1) {
@@ -1459,10 +1459,10 @@ static void draw_pass_shadow_end_make_shadowmap(Shadow* shad, int32_t index, int
glClearDLL(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,
@@ -1476,7 +1476,7 @@ static void draw_pass_shadow_filter(RenderTexture* a1, RenderTexture* a2,
if (!v7 || !v9 || !v11 || v7->width != v9->width || v7->height != v9->height)
return;
- 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 };
@@ -1494,13 +1494,13 @@ 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_rend_state.active_bind_texture_2d(0, v11->glid);
if (a3) {
GLint swizzle[] = { GL_RED, GL_RED, GL_RED, GL_ONE };
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzle);
@@ -1509,8 +1509,8 @@ static void draw_pass_shadow_filter(RenderTexture* a1, RenderTexture* a2,
GLint swizzle[] = { GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA };
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzle);
}
- gl_state_bind_sampler(0, rctx->render_samplers[0]);
- gl_state_bind_vertex_array(rctx->common_vao);
+ 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();
@@ -1518,25 +1518,25 @@ 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;
}
- 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 };
@@ -1549,7 +1549,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,
@@ -1558,13 +1558,13 @@ static void draw_pass_shadow_esm_filter(RenderTexture* dst, RenderTexture* buf,
uniform->arr[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 };
@@ -1572,12 +1572,12 @@ static void draw_pass_shadow_esm_filter(RenderTexture* dst, RenderTexture* buf,
uniform->arr[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() {
@@ -1590,22 +1590,22 @@ static bool draw_pass_shadow_litproj() {
litproj_texture->Bind();
litproj_texture->SetViewport();
- gl_state_enable_depth_test();
+ gl_rend_state.enable_depth_test();
glClearColorDLL(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepthf(1.0f);
glClearDLL(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
if (!draw_pass_shadow_litproj_set_mat(true)) {
- gl_state_bind_framebuffer(0);
+ gl_rend_state.bind_framebuffer(0);
return false;
}
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[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[0].GetColorTex());
+ gl_rend_state.bind_sampler(18, rctx->render_samplers[2]);
+ gl_rend_state.active_texture(0);
return true;
}
@@ -1617,9 +1617,9 @@ static bool draw_pass_shadow_litproj_set() {
static const GLfloat depth_clear = 1.0f;
litproj_shadow[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);
@@ -1631,8 +1631,8 @@ static bool draw_pass_shadow_litproj_set() {
else {
litproj_texture->Bind();
litproj_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);
}
@@ -1693,25 +1693,25 @@ static void draw_pass_sss_contour(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 = reflect_full_ptr->reflect_texture;
- 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);
float_t v3 = 1.0f / tanf(camera_data.fov * 0.5f * DEG_TO_RAD_FLOAT);
@@ -1824,27 +1824,27 @@ static void draw_pass_sss_filter(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 = render_get();
uniform->arr[U_REDUCE] = 0;
shaders_ft.set(SHADER_FT_REDUCE);
RenderTexture& rt = reflect_draw
? reflect_full_ptr->reflect_texture
: 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]);
render_get()->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->arr[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]);
render_get()->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);
@@ -1859,15 +1859,15 @@ static void draw_pass_sss_filter(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->arr[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);
render_get()->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() {
@@ -1885,8 +1885,8 @@ static int32_t draw_pass_3d_get_translucent_count() {
}
static void draw_pass_3d_shadow_reset() {
- 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);
draw_state.self_shadow = false;
draw_state.shadow = false;
}
@@ -1894,22 +1894,22 @@ static void draw_pass_3d_shadow_reset() {
static void draw_pass_3d_shadow_set(Shadow* shad) {
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;
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;
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;
@@ -1955,14 +1955,14 @@ static void draw_pass_3d_shadow_set(Shadow* shad) {
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());
glTexParameterfDLL(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 16.0f);
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 = &light_set_data[LIGHT_SET_MAIN];
light_data* data = &set->lights[LIGHT_SHADOW];
@@ -1980,8 +1980,8 @@ static void draw_pass_3d_shadow_set(Shadow* shad) {
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;
@@ -1989,8 +1989,8 @@ static void draw_pass_3d_shadow_set(Shadow* shad) {
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(mdl::ObjType opaque,
@@ -2013,9 +2013,9 @@ static void draw_pass_3d_translucent(mdl::ObjType opaque,
if (render_manager.draw_pass_3d[DRAW_PASS_3D_TRANSPARENT] && disp_manager->get_obj_count(transparent))
disp_manager->draw(transparent, 0, true, alpha);
if (render_manager.draw_pass_3d[DRAW_PASS_3D_TRANSLUCENT] && disp_manager->get_obj_count(translucent)) {
- gl_state_enable_blend();
+ gl_rend_state.enable_blend();
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));
}
@@ -2058,7 +2058,7 @@ static void draw_pass_3d_translucent_has_objects(bool* arr, mdl::ObjType type) {
}
static void draw_pass_reflect_full(rndr::RenderManager& render_manager) {
- gl_state_begin_event("pass_reflect");
+ gl_rend_state.begin_event("pass_reflect");
RenderTexture& refl_tex = reflect_full_ptr->reflect_texture;
RenderTexture& refl_buf_tex = reflect_full_ptr->reflect_buffer_texture;
refl_tex.Bind();
@@ -2073,7 +2073,7 @@ static void draw_pass_reflect_full(rndr::RenderManager& render_manager) {
if (!sss_data_get()->enable || !sss_data_get()->npr_contour)
glClearDLL(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++)
lighting_set((light_set_id)i);
@@ -2086,10 +2086,10 @@ static void draw_pass_reflect_full(rndr::RenderManager& render_manager) {
else
glClearDLL(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;
draw_state.shader_index = -1;
@@ -2104,17 +2104,17 @@ static void draw_pass_reflect_full(rndr::RenderManager& render_manager) {
draw_pass_3d_shadow_reset();
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->arr[U_WATER_REFLECT] = 0;
sss_data_get()->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->arr[U_STAGE_AMBIENT] = render_manager.light_stage_ambient ? 1 : 0;
@@ -2132,63 +2132,63 @@ static void draw_pass_reflect_full(rndr::RenderManager& render_manager) {
uniform->arr[U_REFLECT] = 1;
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);
disp_manager->draw(mdl::OBJ_TYPE_REFLECT_OPAQUE);
- gl_state_disable_depth_test();
+ gl_rend_state.disable_depth_test();
}
Glitter::glt_particle_manager_x->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])
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_x->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_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);
disp_manager->draw(mdl::OBJ_TYPE_REFLECT_TRANSLUCENT_SORT_BY_RADIUS);
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_x->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_x->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();
- 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();
reflect_full_ptr->dof->apply(&refl_tex, &refl_buf_tex);
@@ -2213,8 +2213,8 @@ static void draw_pass_reflect_full(rndr::RenderManager& render_manager) {
glClearColorDLL(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 bool draw_pass_reflect_get_obj_reflect_surface() {
@@ -2255,7 +2255,7 @@ static void blur_filter_apply(RenderTexture* dst, RenderTexture* src,
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();
@@ -2277,14 +2277,14 @@ static void blur_filter_apply(RenderTexture* dst, RenderTexture* src,
rctx->imgfilter_batch_ubo.WriteMemory(imgfilter_batch);
uniform->arr[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 fog_set(fog_id id) {
@@ -2591,7 +2591,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);
@@ -2599,7 +2599,7 @@ static void render_manager_init_render_textures(int32_t multisample) {
GL_RENDERBUFFER, render_manager.multisample_renderbuffer);
glDrawBufferDLL(GL_COLOR_ATTACHMENT0);
glDrawBufferDLL(GL_COLOR_ATTACHMENT0);
- gl_state_bind_framebuffer(0);
+ gl_rend_state.bind_framebuffer(0);
glBindRenderbuffer(GL_RENDERBUFFER, 0);
if (glGetErrorDLL()) {
@@ -2622,7 +2622,7 @@ static void render_manager_init_render_textures(int32_t multisample) {
glClearColorDLL(0.0f, 0.0f, 0.0f, 0.0f);
glClearDLL(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/DivaGL/render_texture.cpp b/src/DivaGL/render_texture.cpp
index f705c6e..7134f18 100644
--- a/src/DivaGL/render_texture.cpp
+++ b/src/DivaGL/render_texture.cpp
@@ -4,7 +4,7 @@
*/
#include "render_texture.hpp"
-#include "gl_state.hpp"
+#include "gl_rend_state.hpp"
#include
static uint32_t& render_texture_counter = *(uint32_t*)0x00000001411AD648;
@@ -26,11 +26,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;
}
@@ -82,12 +82,12 @@ int32_t RenderTexture::Init(int32_t width, int32_t height,
render_texture_counter++;
color_texture = GetColorTex();
- gl_state_bind_texture_2d(GetColorTex());
+ gl_rend_state.bind_texture_2d(GetColorTex());
if (color_format == GL_RGBA32F) {
glTexParameteriDLL(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteriDLL(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
}
- gl_state_bind_texture_2d(0);
+ gl_rend_state.bind_texture_2d(0);
}
else {
this->color_texture = 0;
@@ -121,22 +121,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);
}*/
@@ -161,7 +161,7 @@ void render_texture_patch() {
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,
@@ -169,22 +169,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();
glDrawBufferDLL(GL_COLOR_ATTACHMENT0);
glReadBufferDLL(GL_COLOR_ATTACHMENT0);
}
else {
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, 0, 0);
- gl_state_get_error();
+ gl_get_error_print();
glDrawBufferDLL(GL_ZERO);
glReadBufferDLL(GL_ZERO);
}
- gl_state_get_error();
+ gl_get_error_print();
if (!level) {
GLenum attechment = stencil ? GL_DEPTH_STENCIL_ATTACHMENT : GL_DEPTH_ATTACHMENT;
@@ -196,13 +196,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/DivaGL/render_texture.hpp b/src/DivaGL/render_texture.hpp
index fb46aa7..55b0d3e 100644
--- a/src/DivaGL/render_texture.hpp
+++ b/src/DivaGL/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/DivaGL/renderer/dof.cpp b/src/DivaGL/renderer/dof.cpp
index d0e576b..16d6a46 100644
--- a/src/DivaGL/renderer/dof.cpp
+++ b/src/DivaGL/renderer/dof.cpp
@@ -6,7 +6,7 @@
#include "dof.hpp"
#include "../rob/rob.hpp"
#include "../camera.hpp"
-#include "../gl_state.hpp"
+#include "../gl_rend_state.hpp"
#include "../render_context.hpp"
#include "../shader_ft.hpp"
#include
@@ -155,43 +155,43 @@ 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->arr[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);
upsample(rt, buf_rt, color_texture, depth_texture, true);
- gl_state_use_program(0);
+ gl_rend_state.use_program(0);
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->arr[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);
@@ -199,88 +199,88 @@ 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->arr[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]);
glDrawArraysDLL(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->arr[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]);
glDrawArraysDLL(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->arr[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]);
glDrawArraysDLL(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->arr[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]);
glDrawArraysDLL(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->arr[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]);
glDrawArraysDLL(GL_TRIANGLE_STRIP, 0, 4);
if (DIVA_GL_VERSION_4_3)
@@ -291,7 +291,7 @@ namespace renderer {
fbo_blit(buf_rt->fbos[0], rt->fbos[0],
0, 0, width, height,
0, 0, width, height, GL_COLOR_BUFFER_BIT, GL_NEAREST);
- gl_state_end_event();
+ gl_rend_state.end_event();
}
void DOF3::init_textures(int32_t width, int32_t height) {
@@ -301,23 +301,23 @@ namespace renderer {
int32_t h2 = max_def(height / 2, 1);
glGenTextures(6, textures);
- gl_state_bind_texture_2d(textures[0]);
+ gl_rend_state.bind_texture_2d(textures[0]);
glTexImage2DDLL(GL_TEXTURE_2D, 0, GL_RG16F, w20, h20, 0, GL_RG, GL_HALF_FLOAT, 0);
fbo[0].init(w20, h20, &textures[0], 1, 0);
- gl_state_bind_texture_2d(textures[1]);
+ gl_rend_state.bind_texture_2d(textures[1]);
glTexImage2DDLL(GL_TEXTURE_2D, 0, GL_RG16F, w20, h20, 0, GL_RG, GL_HALF_FLOAT, 0);
fbo[1].init(w20, h20, &textures[1], 1, 0);
- gl_state_bind_texture_2d(textures[2]);
+ gl_rend_state.bind_texture_2d(textures[2]);
glTexImage2DDLL(GL_TEXTURE_2D, 0, GL_R11F_G11F_B10F, w2, h2, 0, GL_RGB, GL_UNSIGNED_INT_10F_11F_11F_REV, 0);
- gl_state_bind_texture_2d(textures[3]);
+ gl_rend_state.bind_texture_2d(textures[3]);
glTexImage2DDLL(GL_TEXTURE_2D, 0, GL_R11F_G11F_B10F, w2, h2, 0, GL_RGB, GL_UNSIGNED_INT_10F_11F_11F_REV, 0);
fbo[2].init(w2, h2, &textures[2], 2, 0);
- gl_state_bind_texture_2d(textures[4]);
+ gl_rend_state.bind_texture_2d(textures[4]);
glTexImage2DDLL(GL_TEXTURE_2D, 0, GL_R11F_G11F_B10F, w2, h2, 0, GL_RGB, GL_UNSIGNED_INT_10F_11F_11F_REV, 0);
- gl_state_bind_texture_2d(textures[5]);
+ gl_rend_state.bind_texture_2d(textures[5]);
glTexImage2DDLL(GL_TEXTURE_2D, 0, GL_R8, w2, h2, 0, GL_RED, GL_UNSIGNED_BYTE, 0);
fbo[3].init(w2, h2, &textures[4], 2, 0);
}
diff --git a/src/DivaGL/renderer/fbo.cpp b/src/DivaGL/renderer/fbo.cpp
index 6ed9fb9..907c9f4 100644
--- a/src/DivaGL/renderer/fbo.cpp
+++ b/src/DivaGL/renderer/fbo.cpp
@@ -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/DivaGL/renderer/fbo.hpp b/src/DivaGL/renderer/fbo.hpp
index ab29d40..62d60ad 100644
--- a/src/DivaGL/renderer/fbo.hpp
+++ b/src/DivaGL/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/DivaGL/renderer/transparency.cpp b/src/DivaGL/renderer/transparency.cpp
index 7d18ba3..60a3e09 100644
--- a/src/DivaGL/renderer/transparency.cpp
+++ b/src/DivaGL/renderer/transparency.cpp
@@ -6,7 +6,7 @@
#include "transparency.hpp"
#include "../../KKdLib/str_utils.hpp"
#include "../render_context.hpp"
-#include "../gl_state.hpp"
+#include "../gl_rend_state.hpp"
#include "../shader_ft.hpp"
extern render_context* rctx;
@@ -44,16 +44,16 @@ namespace renderer {
shader_data.g_opacity = { alpha, 0.0f, 0.0f, 0.0f };
rctx->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->render_buffer.Bind();
shaders_ft.set(SHADER_FT_TRANSPARENCY);
rctx->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();
if (DIVA_GL_VERSION_4_3)
glCopyImageSubData(rctx->render_buffer.GetColorTex(), GL_TEXTURE_2D, 0, 0, 0, 0,
@@ -70,17 +70,17 @@ namespace renderer {
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);
if (!DIVA_GL_VERSION_4_3) {
- gl_state_disable_depth_test();
+ gl_rend_state.disable_depth_test();
uniform->arr[U_REDUCE] = 0;
shaders_ft.set(SHADER_FT_REDUCE);
- gl_state_active_bind_texture_2d(0, texture);
- gl_state_bind_sampler(0, rctx->render_samplers[1]);
+ gl_rend_state.active_bind_texture_2d(0, texture);
+ gl_rend_state.bind_sampler(0, rctx->render_samplers[1]);
render_get()->draw_quad(fbo.width, fbo.height, 1.0f, 1.0f,
0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f);
- gl_state_enable_depth_test();
+ gl_rend_state.enable_depth_test();
}
}
diff --git a/src/DivaGL/rob/rob.cpp b/src/DivaGL/rob/rob.cpp
index 65cf87f..becc0db 100644
--- a/src/DivaGL/rob/rob.cpp
+++ b/src/DivaGL/rob/rob.cpp
@@ -6,7 +6,7 @@
#include "rob.hpp"
#include "../../KKdLib/str_utils.hpp"
#include "../mdl/disp_manager.hpp"
-#include "../gl_state.hpp"
+#include "../gl_rend_state.hpp"
#include "../object.hpp"
#include "../render_manager.hpp"
#include
diff --git a/src/DivaGL/screen_shot.cpp b/src/DivaGL/screen_shot.cpp
index a78e054..5d62088 100644
--- a/src/DivaGL/screen_shot.cpp
+++ b/src/DivaGL/screen_shot.cpp
@@ -4,7 +4,7 @@
*/
#include "screen_shot.hpp"
-#include "gl_state.hpp"
+#include "gl_rend_state.hpp"
#include "render_context.hpp"
#include "shader_ft.hpp"
#include "texture.hpp"
@@ -62,9 +62,9 @@ HOOK(bool, FASTCALL, sub_1401898E0, 0x00000001401898E0, __int64 a1, texture* tex
struc_21 v9 = {};
sub_140188010(&v9, tex->width, tex->height, 1);
- gl_state_bind_texture_2d(tex->glid);
+ gl_rend_state.bind_texture_2d(tex->glid);
glGetTexImageDLL(GL_TEXTURE_2D, 0, GL_RGB, GL_UNSIGNED_BYTE, sub_140188410(&v9));
- gl_state_bind_texture_2d(0);
+ gl_rend_state.bind_texture_2d(0);
struc_21 v10 = {};
sub_140188100(&v9, sub_140189B10(&v9, &v10, false, true));
@@ -75,7 +75,7 @@ HOOK(bool, FASTCALL, sub_1401898E0, 0x00000001401898E0, __int64 a1, texture* tex
}
HOOK(void, FASTCALL, ScreenShotImpl__get_data, 0x0000000140557F50, ScreenShotImpl* impl) {
- gl_state_active_bind_texture_2d(0, impl->tex->glid);
+ gl_rend_state.active_bind_texture_2d(0, impl->tex->glid);
glCopyTexSubImage2DDLL(GL_TEXTURE_2D, 0, 0, 0, 0, 0, impl->width, impl->height);
float_t ratio = (float_t)(impl->curr_height * impl->curr_width) / (float_t)(impl->width * impl->height);
@@ -98,20 +98,20 @@ HOOK(void, FASTCALL, ScreenShotImpl__get_data, 0x0000000140557F50, ScreenShotImp
rctx->quad_ubo.WriteMemory(quad);
rctx->quad_ubo.Bind(0);
- gl_state_disable_depth_test();
- gl_state_disable_blend();
- gl_state_disable_cull_face();
- gl_state_set_viewport(0, 0, impl->curr_width, impl->curr_height);
+ gl_rend_state.disable_depth_test();
+ gl_rend_state.disable_blend();
+ gl_rend_state.disable_cull_face();
+ gl_rend_state.set_viewport(0, 0, impl->curr_width, impl->curr_height);
shaders_ft.set(SHADER_FT_REDUCE);
- 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_bind_vertex_array(0);
+ gl_rend_state.bind_vertex_array(0);
shader::unbind();
- gl_state_enable_cull_face();
- gl_state_enable_blend();
- gl_state_enable_depth_test();
+ gl_rend_state.enable_cull_face();
+ gl_rend_state.enable_blend();
+ gl_rend_state.enable_depth_test();
}
HOOK(void, FASTCALL, ScreenShotData__get_data, 0x0000000140557BE0, ScreenShotData* data) {
diff --git a/src/DivaGL/shader.cpp b/src/DivaGL/shader.cpp
index 9d9891f..7438fbf 100644
--- a/src/DivaGL/shader.cpp
+++ b/src/DivaGL/shader.cpp
@@ -9,8 +9,9 @@
#include "../KKdLib/prj/vector_pair.hpp"
#include "../KKdLib/hash.hpp"
#include "../KKdLib/str_utils.hpp"
-#include "gl_state.hpp"
+#include "gl_rend_state.hpp"
#include "print.hpp"
+#include "shared.hpp"
#include "wrap.hpp"
#include
@@ -59,7 +60,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;
}
@@ -444,7 +445,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(),
@@ -805,13 +806,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()) {
@@ -870,13 +871,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()) {
@@ -1129,7 +1130,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;
}
}
@@ -1203,13 +1204,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);
@@ -1249,11 +1250,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/DivaGL/shader_ft.cpp b/src/DivaGL/shader_ft.cpp
index 5466c2f..c67674d 100644
--- a/src/DivaGL/shader_ft.cpp
+++ b/src/DivaGL/shader_ft.cpp
@@ -6,7 +6,7 @@
#include "shader_ft.hpp"
#include "../KKdLib/str_utils.hpp"
#include "../AFTModsShared/uniform.hpp"
-#include "gl_state.hpp"
+#include "gl_rend_state.hpp"
#include "render_context.hpp"
enum shader_ft_sub_enum {
diff --git a/src/DivaGL/shadow.cpp b/src/DivaGL/shadow.cpp
index 68a8dfa..0d368ee 100644
--- a/src/DivaGL/shadow.cpp
+++ b/src/DivaGL/shadow.cpp
@@ -79,14 +79,14 @@ int32_t Shadow::init() {
return -1;
for (int32_t i = 0; i < 3; i++) {
- gl_state_bind_texture_2d(render_textures[i].GetColorTex());
+ gl_rend_state.bind_texture_2d(render_textures[i].GetColorTex());
glTexParameteriDLL(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
glTexParameteriDLL(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
static const vec4 border_color = 1.0f;
glTexParameterfvDLL(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, (GLfloat*)&border_color);
}
- gl_state_bind_texture_2d(0);
- gl_state_get_error();
+ gl_rend_state.bind_texture_2d(0);
+ gl_get_error_print();
return 0;
}
diff --git a/src/DivaGL/shared.cpp b/src/DivaGL/shared.cpp
index 0009e04..d651f1d 100644
--- a/src/DivaGL/shared.cpp
+++ b/src/DivaGL/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 = glGetErrorDLL())
+ printf_debug("GL Error: 0x%04X\n", error);
+}
+
+GLenum gl_get_error_print() {
+ GLenum error = glGetErrorDLL();
+ if (error)
+ printf_debug("GL Error: 0x%04X\n", error);
+ return error;
+}
diff --git a/src/DivaGL/shared.hpp b/src/DivaGL/shared.hpp
index 7397039..e1e1219 100644
--- a/src/DivaGL/shared.hpp
+++ b/src/DivaGL/shared.hpp
@@ -11,3 +11,6 @@
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/DivaGL/sprite.cpp b/src/DivaGL/sprite.cpp
index c7b337c..c0bb9d3 100644
--- a/src/DivaGL/sprite.cpp
+++ b/src/DivaGL/sprite.cpp
@@ -251,7 +251,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];
@@ -298,7 +298,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 = view_projection_aet;
@@ -338,12 +338,12 @@ namespace spr {
RenderData& render_data = *sprite_manager_render_data;
- 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 (auto& k : *reqlist)
if (k.sprite_draw_param_index >= 0)
draw_sprite(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)
@@ -1075,7 +1075,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(args, mat, draw_param.vtx, x_min, y_min, x_max, y_max);
combiner = 2;
}
@@ -1084,11 +1084,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;
@@ -1117,21 +1117,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);
@@ -1143,15 +1143,15 @@ namespace spr {
}
static void draw_sprite_begin() {
- gl_state_disable_blend(true);
- gl_state_active_bind_texture_2d(0, rctx->empty_texture_2d->glid, true);
- gl_state_bind_sampler(0, 0, true);
- gl_state_active_bind_texture_2d(1, rctx->empty_texture_2d->glid, true);
- gl_state_bind_sampler(1, 0, true);
- gl_state_bind_sampler(7, 0, true);
- gl_state_set_blend_func_separate(GL_ONE, GL_ZERO, GL_ONE, GL_ZERO, true);
- gl_state_bind_vertex_array(0, true);
- gl_state_bind_uniform_buffer_base(0, 0, true);
+ gl_rend_state.disable_blend(true);
+ gl_rend_state.active_bind_texture_2d(0, rctx->empty_texture_2d->glid, true);
+ gl_rend_state.bind_sampler(0, 0, true);
+ gl_rend_state.active_bind_texture_2d(1, rctx->empty_texture_2d->glid, true);
+ gl_rend_state.bind_sampler(1, 0, true);
+ gl_rend_state.bind_sampler(7, 0, true);
+ gl_rend_state.set_blend_func_separate(GL_ONE, GL_ZERO, GL_ONE, GL_ZERO, true);
+ gl_rend_state.bind_vertex_array(0, true);
+ gl_rend_state.bind_uniform_buffer_base(0, 0, true);
}
static void draw_sprite_copy_overlay_texture(const SprArgs& args, const mat4& mat,
@@ -1210,20 +1210,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);
glCopyTexSubImage2DDLL(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);
shaders_ft.set(-1);
}
diff --git a/src/DivaGL/texture.cpp b/src/DivaGL/texture.cpp
index b87101c..57e6d58 100644
--- a/src/DivaGL/texture.cpp
+++ b/src/DivaGL/texture.cpp
@@ -4,8 +4,9 @@
*/
#include "texture.hpp"
-#include "gl_state.hpp"
#include "../AFTModsShared/types.hpp"
+#include "gl_rend_state.hpp"
+#include "shared.hpp"
#include
struct texture_handler {
@@ -85,7 +86,7 @@ texture* texture_create_copy_texture_apply_color_tone(
}
else
glGetTexImageDLL(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);
@@ -159,7 +160,7 @@ HOOK(void, FASTCALL, texture_apply_color_tone, 0x00000001403B5DF0,
glTexSubImage2DDLL(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();
prj::HeapCMallocFree(prj::HeapCMallocTemp, data);
}
texture_bind(org_tex->target, 0);
@@ -259,7 +260,7 @@ HOOK(texture*, FASTCALL, texture_create_copy_texture, 0x000000014069B550,
glGetCompressedTexImage(org_tex->target, i, data);
else
glGetTexImageDLL(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);
@@ -333,10 +334,10 @@ texture_handler::texture_handler() : field_2C(), field_30(), field_34() {
inline static void texture_bind(GLenum target, GLuint texture) {
switch (target) {
case GL_TEXTURE_2D:
- gl_state_bind_texture_2d(texture);
+ gl_rend_state.bind_texture_2d(texture);
break;
case GL_TEXTURE_CUBE_MAP:
- gl_state_bind_texture_cube_map(texture);
+ gl_rend_state.bind_texture_cube_map(texture);
break;
}
}
@@ -485,7 +486,7 @@ static int32_t texture_load_pixels(GLenum target, GLenum internal_format,
glTexImage2DDLL(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,