Moved begin and end of Query and writes to Buffer to GL State

This commit is contained in:
korenkonder
2026-05-22 14:13:15 +03:00
parent acd42f7bc1
commit ceedc3a3e9
29 changed files with 777 additions and 567 deletions
-96
View File
@@ -78,54 +78,6 @@ namespace GL {
}
}
void* ArrayBuffer::MapMemory(gl_state_struct& gl_st) {
if (!buffer)
return 0;
void* data;
if (GLAD_GL_VERSION_4_5)
data = glMapNamedBuffer(buffer, GL_WRITE_ONLY);
else {
gl_st.bind_array_buffer(buffer);
data = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
}
if (data)
return data;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_ARRAY_BUFFER);
gl_st.bind_array_buffer(0);
}
return 0;
}
void* ArrayBuffer::MapMemory(p_gl_rend_state& p_gl_rend_st) {
if (!buffer)
return 0;
void* data;
if (GLAD_GL_VERSION_4_5)
data = glMapNamedBuffer(buffer, GL_WRITE_ONLY);
else {
p_gl_rend_st.bind_array_buffer(buffer);
data = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
}
if (data)
return data;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_ARRAY_BUFFER);
p_gl_rend_st.bind_array_buffer(0);
}
return 0;
}
void ArrayBuffer::Recreate(gl_state_struct& gl_st, size_t size, BufferUsage usage) {
if (GLAD_GL_VERSION_4_4 && usage != BUFFER_USAGE_STREAM) {
Destroy();
@@ -161,52 +113,4 @@ namespace GL {
}
}
}
void ArrayBuffer::UnmapMemory(gl_state_struct& gl_st) {
if (!buffer)
return;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_ARRAY_BUFFER);
gl_st.bind_array_buffer(0);
}
}
void ArrayBuffer::UnmapMemory(p_gl_rend_state& p_gl_rend_st) {
if (!buffer)
return;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_ARRAY_BUFFER);
p_gl_rend_st.bind_array_buffer(0);
}
}
void ArrayBuffer::WriteMemory(gl_state_struct& gl_st, size_t offset, size_t size, const void* data) {
if (!buffer || !size)
return;
if (GLAD_GL_VERSION_4_5)
glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data);
else {
gl_st.bind_array_buffer(buffer);
glBufferSubData(GL_ARRAY_BUFFER, (GLsizeiptr)offset, (GLsizeiptr)size, data);
}
}
void ArrayBuffer::WriteMemory(p_gl_rend_state& p_gl_rend_st, size_t offset, size_t size, const void* data) {
if (!buffer || !size)
return;
if (GLAD_GL_VERSION_4_5)
glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data);
else {
p_gl_rend_st.bind_array_buffer(buffer);
glBufferSubData(GL_ARRAY_BUFFER, (GLsizeiptr)offset, (GLsizeiptr)size, data);
}
}
}
-16
View File
@@ -33,14 +33,8 @@ namespace GL {
void Create(gl_state_struct& gl_st, size_t size, BufferUsage usage = BUFFER_USAGE_STREAM);
void Create(gl_state_struct& gl_st, size_t size, const void* data, BufferUsage usage = BUFFER_USAGE_STATIC);
void Destroy();
void* MapMemory(gl_state_struct& gl_st);
void* MapMemory(p_gl_rend_state& p_gl_rend_st);
void Recreate(gl_state_struct& gl_st, size_t size, BufferUsage usage = BUFFER_USAGE_STREAM);
void Recreate(gl_state_struct& gl_st, size_t size, const void* data, BufferUsage usage = BUFFER_USAGE_STATIC);
void UnmapMemory(gl_state_struct& gl_st);
void UnmapMemory(p_gl_rend_state& p_gl_rend_st);
void WriteMemory(gl_state_struct& gl_st, size_t offset, size_t size, const void* data);
void WriteMemory(p_gl_rend_state& p_gl_rend_st, size_t offset, size_t size, const void* data);
inline bool IsNull() {
return !buffer;
@@ -50,16 +44,6 @@ namespace GL {
return !!buffer;
}
template<typename T>
inline void WriteMemory(gl_state_struct& gl_st, T& data) {
WriteMemory(gl_st, 0, sizeof(T), &data);
}
template<typename T>
inline void WriteMemory(p_gl_rend_state& p_gl_rend_st, T& data) {
WriteMemory(p_gl_rend_st, 0, sizeof(T), &data);
}
inline operator GLuint() const {
return buffer;
}
-96
View File
@@ -78,54 +78,6 @@ namespace GL {
}
}
void* ElementArrayBuffer::MapMemory(gl_state_struct& gl_st) {
if (!buffer)
return 0;
void* data;
if (GLAD_GL_VERSION_4_5)
data = glMapNamedBuffer(buffer, GL_WRITE_ONLY);
else {
gl_st.bind_element_array_buffer(buffer);
data = glMapBuffer(GL_ELEMENT_ARRAY_BUFFER, GL_WRITE_ONLY);
}
if (data)
return data;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER);
gl_st.bind_element_array_buffer(0);
}
return 0;
}
void* ElementArrayBuffer::MapMemory(p_gl_rend_state& p_gl_rend_st) {
if (!buffer)
return 0;
void* data;
if (GLAD_GL_VERSION_4_5)
data = glMapNamedBuffer(buffer, GL_WRITE_ONLY);
else {
p_gl_rend_st.bind_element_array_buffer(buffer);
data = glMapBuffer(GL_ELEMENT_ARRAY_BUFFER, GL_WRITE_ONLY);
}
if (data)
return data;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER);
p_gl_rend_st.bind_element_array_buffer(0);
}
return 0;
}
void ElementArrayBuffer::Recreate(gl_state_struct& gl_st, size_t size, BufferUsage usage) {
if (GLAD_GL_VERSION_4_4 && usage != BUFFER_USAGE_STREAM) {
Destroy();
@@ -161,52 +113,4 @@ namespace GL {
}
}
}
void ElementArrayBuffer::UnmapMemory(gl_state_struct& gl_st) {
if (!buffer)
return;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER);
gl_st.bind_element_array_buffer(0);
}
}
void ElementArrayBuffer::UnmapMemory(p_gl_rend_state& p_gl_rend_st) {
if (!buffer)
return;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER);
p_gl_rend_st.bind_element_array_buffer(0);
}
}
void ElementArrayBuffer::WriteMemory(gl_state_struct& gl_st, size_t offset, size_t size, const void* data) {
if (!buffer || !size)
return;
if (GLAD_GL_VERSION_4_5)
glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data);
else {
gl_st.bind_element_array_buffer(buffer);
glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)offset, (GLsizeiptr)size, data);
}
}
void ElementArrayBuffer::WriteMemory(p_gl_rend_state& p_gl_rend_st, size_t offset, size_t size, const void* data) {
if (!buffer || !size)
return;
if (GLAD_GL_VERSION_4_5)
glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data);
else {
p_gl_rend_st.bind_element_array_buffer(buffer);
glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)offset, (GLsizeiptr)size, data);
}
}
}
-16
View File
@@ -33,14 +33,8 @@ namespace GL {
void Create(gl_state_struct& gl_st, size_t size, BufferUsage usage = BUFFER_USAGE_STREAM);
void Create(gl_state_struct& gl_st, size_t size, const void* data, BufferUsage usage = BUFFER_USAGE_STATIC);
void Destroy();
void* MapMemory(gl_state_struct& gl_st);
void* MapMemory(p_gl_rend_state& p_gl_rend_st);
void Recreate(gl_state_struct& gl_st, size_t size, BufferUsage usage = BUFFER_USAGE_STREAM);
void Recreate(gl_state_struct& gl_st, size_t size, const void* data, BufferUsage usage = BUFFER_USAGE_STATIC);
void UnmapMemory(gl_state_struct& gl_st);
void UnmapMemory(p_gl_rend_state& p_gl_rend_st);
void WriteMemory(gl_state_struct& gl_st, size_t offset, size_t size, const void* data);
void WriteMemory(p_gl_rend_state& p_gl_rend_st, size_t offset, size_t size, const void* data);
inline bool IsNull() {
return !buffer;
@@ -50,16 +44,6 @@ namespace GL {
return !!buffer;
}
template<typename T>
inline void WriteMemory(gl_state_struct& gl_st, T& data) {
WriteMemory(gl_st, 0, sizeof(T), &data);
}
template<typename T>
inline void WriteMemory(p_gl_rend_state& p_gl_rend_st, T& data) {
WriteMemory(p_gl_rend_st, 0, sizeof(T), &data);
}
inline operator GLuint() const {
return buffer;
}
-96
View File
@@ -78,54 +78,6 @@ namespace GL {
}
}
void* ShaderStorageBuffer::MapMemory(gl_state_struct& gl_st) {
if (!buffer)
return 0;
void* data;
if (GLAD_GL_VERSION_4_5)
data = glMapNamedBuffer(buffer, GL_WRITE_ONLY);
else {
gl_st.bind_shader_storage_buffer(buffer);
data = glMapBuffer(GL_SHADER_STORAGE_BUFFER, GL_WRITE_ONLY);
}
if (data)
return data;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_SHADER_STORAGE_BUFFER);
gl_st.bind_shader_storage_buffer(0);
}
return 0;
}
void* ShaderStorageBuffer::MapMemory(p_gl_rend_state& p_gl_rend_st) {
if (!buffer)
return 0;
void* data;
if (GLAD_GL_VERSION_4_5)
data = glMapNamedBuffer(buffer, GL_WRITE_ONLY);
else {
p_gl_rend_st.bind_shader_storage_buffer(buffer);
data = glMapBuffer(GL_SHADER_STORAGE_BUFFER, GL_WRITE_ONLY);
}
if (data)
return data;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_SHADER_STORAGE_BUFFER);
p_gl_rend_st.bind_shader_storage_buffer(0);
}
return 0;
}
void ShaderStorageBuffer::Recreate(gl_state_struct& gl_st, size_t size, BufferUsage usage) {
if (GLAD_GL_VERSION_4_4 && usage != BUFFER_USAGE_STREAM) {
Destroy();
@@ -161,52 +113,4 @@ namespace GL {
}
}
}
void ShaderStorageBuffer::UnmapMemory(gl_state_struct& gl_st) {
if (!buffer)
return;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_SHADER_STORAGE_BUFFER);
gl_st.bind_shader_storage_buffer(0);
}
}
void ShaderStorageBuffer::UnmapMemory(p_gl_rend_state& p_gl_rend_st) {
if (!buffer)
return;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_SHADER_STORAGE_BUFFER);
p_gl_rend_st.bind_shader_storage_buffer(0);
}
}
void ShaderStorageBuffer::WriteMemory(gl_state_struct& gl_st, size_t offset, size_t size, const void* data) {
if (!buffer || !size)
return;
if (GLAD_GL_VERSION_4_5)
glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data);
else {
gl_st.bind_shader_storage_buffer(buffer);
glBufferSubData(GL_SHADER_STORAGE_BUFFER, (GLsizeiptr)offset, (GLsizeiptr)size, data);
}
}
void ShaderStorageBuffer::WriteMemory(p_gl_rend_state& p_gl_rend_st, size_t offset, size_t size, const void* data) {
if (!buffer || !size)
return;
if (GLAD_GL_VERSION_4_5)
glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data);
else {
p_gl_rend_st.bind_shader_storage_buffer(buffer);
glBufferSubData(GL_SHADER_STORAGE_BUFFER, (GLsizeiptr)offset, (GLsizeiptr)size, data);
}
}
}
-16
View File
@@ -33,14 +33,8 @@ namespace GL {
void Create(gl_state_struct& gl_st, size_t size, BufferUsage usage = BUFFER_USAGE_STREAM);
void Create(gl_state_struct& gl_st, size_t size, const void* data, BufferUsage usage = BUFFER_USAGE_STATIC);
void Destroy();
void* MapMemory(gl_state_struct& gl_st);
void* MapMemory(p_gl_rend_state& p_gl_rend_st);
void Recreate(gl_state_struct& gl_st, size_t size, BufferUsage usage = BUFFER_USAGE_STREAM);
void Recreate(gl_state_struct& gl_st, size_t size, const void* data, BufferUsage usage = BUFFER_USAGE_STATIC);
void UnmapMemory(gl_state_struct& gl_st);
void UnmapMemory(p_gl_rend_state& p_gl_rend_st);
void WriteMemory(gl_state_struct& gl_st, size_t offset, size_t size, const void* data);
void WriteMemory(p_gl_rend_state& p_gl_rend_st, size_t offset, size_t size, const void* data);
inline bool IsNull() {
return !buffer;
@@ -50,16 +44,6 @@ namespace GL {
return !!buffer;
}
template<typename T>
inline void WriteMemory(gl_state_struct& gl_st, T& data) {
WriteMemory(gl_st, 0, sizeof(T), &data);
}
template<typename T>
inline void WriteMemory(p_gl_rend_state& p_gl_rend_st, T& data) {
WriteMemory(p_gl_rend_st, 0, sizeof(T), &data);
}
inline operator GLuint() const {
return buffer;
}
-96
View File
@@ -78,54 +78,6 @@ namespace GL {
}
}
void* UniformBuffer::MapMemory(gl_state_struct& gl_st) {
if (!buffer)
return 0;
void* data;
if (GLAD_GL_VERSION_4_5)
data = glMapNamedBuffer(buffer, GL_WRITE_ONLY);
else {
gl_st.bind_uniform_buffer(buffer);
data = glMapBuffer(GL_UNIFORM_BUFFER, GL_WRITE_ONLY);
}
if (data)
return data;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_UNIFORM_BUFFER);
gl_st.bind_uniform_buffer(0);
}
return 0;
}
void* UniformBuffer::MapMemory(p_gl_rend_state& p_gl_rend_st) {
if (!buffer)
return 0;
void* data;
if (GLAD_GL_VERSION_4_5)
data = glMapNamedBuffer(buffer, GL_WRITE_ONLY);
else {
p_gl_rend_st.bind_uniform_buffer(buffer);
data = glMapBuffer(GL_UNIFORM_BUFFER, GL_WRITE_ONLY);
}
if (data)
return data;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_UNIFORM_BUFFER);
p_gl_rend_st.bind_uniform_buffer(0);
}
return 0;
}
void UniformBuffer::Recreate(gl_state_struct& gl_st, size_t size, BufferUsage usage) {
if (GLAD_GL_VERSION_4_4 && usage != BUFFER_USAGE_STREAM) {
Destroy();
@@ -161,52 +113,4 @@ namespace GL {
}
}
}
void UniformBuffer::UnmapMemory(gl_state_struct& gl_st) {
if (!buffer)
return;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_UNIFORM_BUFFER);
gl_st.bind_uniform_buffer(0);
}
}
void UniformBuffer::UnmapMemory(p_gl_rend_state& p_gl_rend_st) {
if (!buffer)
return;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_UNIFORM_BUFFER);
p_gl_rend_st.bind_uniform_buffer(0);
}
}
void UniformBuffer::WriteMemory(gl_state_struct& gl_st, size_t offset, size_t size, const void* data) {
if (!buffer || !size)
return;
if (GLAD_GL_VERSION_4_5)
glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data);
else {
gl_st.bind_uniform_buffer(buffer);
glBufferSubData(GL_UNIFORM_BUFFER, (GLsizeiptr)offset, (GLsizeiptr)size, data);
}
}
void UniformBuffer::WriteMemory(p_gl_rend_state& p_gl_rend_st, size_t offset, size_t size, const void* data) {
if (!buffer || !size)
return;
if (GLAD_GL_VERSION_4_5)
glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data);
else {
p_gl_rend_st.bind_uniform_buffer(buffer);
glBufferSubData(GL_UNIFORM_BUFFER, (GLsizeiptr)offset, (GLsizeiptr)size, data);
}
}
};
-16
View File
@@ -33,14 +33,8 @@ namespace GL {
void Create(gl_state_struct& gl_st, size_t size, BufferUsage usage = BUFFER_USAGE_STREAM);
void Create(gl_state_struct& gl_st, size_t size, const void* data, BufferUsage usage = BUFFER_USAGE_STATIC);
void Destroy();
void* MapMemory(gl_state_struct& gl_st);
void* MapMemory(p_gl_rend_state& p_gl_rend_st);
void Recreate(gl_state_struct& gl_st, size_t size, BufferUsage usage = BUFFER_USAGE_STREAM);
void Recreate(gl_state_struct& gl_st, size_t size, const void* data, BufferUsage usage = BUFFER_USAGE_STATIC);
void UnmapMemory(gl_state_struct& gl_st);
void UnmapMemory(p_gl_rend_state& p_gl_rend_st);
void WriteMemory(gl_state_struct& gl_st, size_t offset, size_t size, const void* data);
void WriteMemory(p_gl_rend_state& p_gl_rend_st, size_t offset, size_t size, const void* data);
inline bool IsNull() {
return !buffer;
@@ -50,16 +44,6 @@ namespace GL {
return !!buffer;
}
template<typename T>
inline void WriteMemory(gl_state_struct& gl_st, T& data) {
WriteMemory(gl_st, 0, sizeof(T), &data);
}
template<typename T>
inline void WriteMemory(p_gl_rend_state& p_gl_rend_st, T& data) {
WriteMemory(p_gl_rend_st, 0, sizeof(T), &data);
}
inline operator GLuint() const {
return buffer;
}
+19 -10
View File
@@ -5,6 +5,7 @@
#include "glitter.hpp"
#include "../gl_rend_state.hpp"
#include "../gl_state.hpp"
#include "../render_context.hpp"
#include "../shader.hpp"
#include "../shader_ft.hpp"
@@ -307,7 +308,8 @@ namespace Glitter {
rend_group->disp = disp;
#if !SHARED_GLITTER_BUFFER
rend_group->vbo.WriteMemory(gl_state, 0, (buf - rend_group->buffer) * sizeof(Buffer), rend_group->buffer);
gl_state.write_array_buffer(rend_group->vbo,
0, (buf - rend_group->buffer) * sizeof(Buffer), rend_group->buffer);
#endif
}
@@ -458,7 +460,8 @@ namespace Glitter {
rend_group->disp = disp;
#if !SHARED_GLITTER_BUFFER
rend_group->vbo.WriteMemory(gl_state, 0, (buf - rend_group->buffer) * sizeof(Buffer), rend_group->buffer);
gl_state.write_array_buffer(rend_group->vbo,
0, (buf - rend_group->buffer) * sizeof(Buffer), rend_group->buffer);
#endif
}
@@ -652,7 +655,8 @@ namespace Glitter {
rend_group->disp = disp;
#if !SHARED_GLITTER_BUFFER
rend_group->vbo.WriteMemory(gl_state, 0, (buf - rend_group->buffer) * sizeof(Buffer), rend_group->buffer);
gl_state.write_array_buffer(rend_group->vbo,
0, (buf - rend_group->buffer) * sizeof(Buffer), rend_group->buffer);
#endif
}
@@ -875,7 +879,8 @@ namespace Glitter {
rend_group->disp = disp;
#if !SHARED_GLITTER_BUFFER
rend_group->vbo.WriteMemory(gl_state, 0, (buf - rend_group->buffer) * sizeof(Buffer), rend_group->buffer);
gl_state.write_array_buffer(rend_group->vbo,
0, (buf - rend_group->buffer) * sizeof(Buffer), rend_group->buffer);
#endif
}
@@ -986,7 +991,7 @@ namespace Glitter {
shader_data.g_glitter_blend_color = 1.0f;
shader_data.g_state_material_diffuse = 0.0f;
shader_data.g_state_material_emission = { emission, emission, emission, 1.0f };
rctx_ptr->glitter_batch_ubo.WriteMemory(rend_data_ctx.state, shader_data);
rend_data_ctx.state.write_uniform_buffer(rctx_ptr->glitter_batch_ubo, shader_data);
GLenum blend_src;
GLenum blend_dst;
@@ -1303,7 +1308,8 @@ namespace Glitter {
rend_group->disp = disp;
#if !SHARED_GLITTER_BUFFER
rend_group->vbo.WriteMemory(gl_state, 0, (buf - rend_group->buffer) * sizeof(Buffer), rend_group->buffer);
gl_state.write_array_buffer(rend_group->vbo,
0, (buf - rend_group->buffer) * sizeof(Buffer), rend_group->buffer);
#endif
}
@@ -1452,7 +1458,8 @@ namespace Glitter {
rend_group->disp = disp;
#if !SHARED_GLITTER_BUFFER
rend_group->vbo.WriteMemory(gl_state, 0, (buf - rend_group->buffer) * sizeof(Buffer), rend_group->buffer);
gl_state.write_array_buffer(rend_group->vbo,
0, (buf - rend_group->buffer) * sizeof(Buffer), rend_group->buffer);
#endif
}
@@ -1639,7 +1646,8 @@ namespace Glitter {
rend_group->disp = disp;
#if !SHARED_GLITTER_BUFFER
rend_group->vbo.WriteMemory(gl_state, 0, (buf - rend_group->buffer) * sizeof(Buffer), rend_group->buffer);
gl_state.write_array_buffer(rend_group->vbo,
0, (buf - rend_group->buffer) * sizeof(Buffer), rend_group->buffer);
#endif
}
@@ -1853,7 +1861,8 @@ namespace Glitter {
rend_group->disp = disp;
#if !SHARED_GLITTER_BUFFER
rend_group->vbo.WriteMemory(gl_state, 0, (buf - rend_group->buffer) * sizeof(Buffer), rend_group->buffer);
gl_state.write_array_buffer(rend_group->vbo,
0, (buf - rend_group->buffer) * sizeof(Buffer), rend_group->buffer);
#endif
}
@@ -1980,7 +1989,7 @@ namespace Glitter {
shader_data.g_glitter_blend_color = 1.0f;
shader_data.g_state_material_diffuse = 0.0f;
shader_data.g_state_material_emission = { emission, emission, emission, 1.0f };
rctx_ptr->glitter_batch_ubo.WriteMemory(rend_data_ctx.state, shader_data);
rend_data_ctx.state.write_uniform_buffer(rctx_ptr->glitter_batch_ubo, shader_data);
GLenum blend_src;
GLenum blend_dst;
+2 -1
View File
@@ -79,7 +79,8 @@ namespace Glitter {
}
if (disp)
effect_group->vbo.WriteMemory(gl_state, 0, effect_group->max_count * sizeof(Buffer), effect_group->buffer);
gl_state.write_array_buffer(effect_group->vbo,
0, effect_group->max_count * sizeof(Buffer), effect_group->buffer);
#endif
}
+102 -1
View File
@@ -146,11 +146,14 @@ namespace Vulkan {
static GLenum gl_wrap_manager_check_framebuffer_status(GLenum target);
static void gl_wrap_manager_clear(GLbitfield mask);
static void gl_wrap_manager_clear_buffer(GLenum buffer, GLint drawbuffer, const GLfloat* value);
static void gl_wrap_manager_clear_buffer(GLenum buffer, GLint drawbuffer, const GLint* value);
static void gl_wrap_manager_clear_color(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
static void gl_wrap_manager_clear_depth(GLfloat depth);
static void gl_wrap_manager_clear_stencil(GLint s);
static void gl_wrap_manager_clear_named_framebuffer(GLuint framebuffer,
GLenum buffer, GLint drawbuffer, const GLfloat* value);
static void gl_wrap_manager_clear_named_framebuffer(GLuint framebuffer,
GLenum buffer, GLint drawbuffer, const GLint* value);
static void gl_wrap_manager_color_mask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
static void gl_wrap_manager_compressed_tex_image_2d(GLenum target, GLint level,
GLenum internal_format, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data);
@@ -1461,6 +1464,7 @@ namespace Vulkan {
glCheckFramebufferStatus = gl_wrap_manager_check_framebuffer_status;
glClear = gl_wrap_manager_clear;
glClearBufferfv = gl_wrap_manager_clear_buffer;
glClearBufferiv = gl_wrap_manager_clear_buffer;
glClearColor = gl_wrap_manager_clear_color;
glClearDepthf = gl_wrap_manager_clear_depth;
glClearStencil = gl_wrap_manager_clear_stencil;
@@ -4289,6 +4293,10 @@ namespace Vulkan {
gl_wrap_manager_clear_named_framebuffer(gl_state.draw_framebuffer_binding, buffer, drawbuffer, value);
}
static void gl_wrap_manager_clear_buffer(GLenum buffer, GLint drawbuffer, const GLint* value) {
gl_wrap_manager_clear_named_framebuffer(gl_state.draw_framebuffer_binding, buffer, drawbuffer, value);
}
static void gl_wrap_manager_clear_color(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) {
gl_state.clear_color.x = red;
gl_state.clear_color.y = green;
@@ -4388,7 +4396,100 @@ namespace Vulkan {
case GL_DEPTH: {
VkClearDepthStencilValue clear_depth_stencil_value;
clear_depth_stencil_value.depth = value[0];
clear_depth_stencil_value.stencil = 0;
clear_depth_stencil_value.stencil = gl_state.clear_stencil;
vkCmdClearDepthStencilImage(Vulkan::current_command_buffer, image,
new_layout, &clear_depth_stencil_value, 1, &range);
} break;
}
Vulkan::Image::PipelineBarrierSingle(Vulkan::current_command_buffer, image,
aspect_mask, 0, 0, new_layout, old_layout);
}
static void gl_wrap_manager_clear_named_framebuffer(GLuint framebuffer,
GLenum buffer, GLint drawbuffer, const GLint* value) {
VkImageAspectFlags aspect_mask;
switch (buffer) {
case GL_COLOR:
aspect_mask = VK_IMAGE_ASPECT_COLOR_BIT;
if (drawbuffer < 0 || drawbuffer >= Vulkan::MAX_COLOR_ATTACHMENTS) {
gl_wrap_manager_ptr->push_error(GL_INVALID_VALUE);
return;
}
break;
case GL_STENCIL:
aspect_mask = VK_IMAGE_ASPECT_STENCIL_BIT;
if (drawbuffer) {
gl_wrap_manager_ptr->push_error(GL_INVALID_VALUE);
return;
}
break;
default:
gl_wrap_manager_ptr->push_error(GL_INVALID_OPERATION);
return;
}
gl_framebuffer* vk_fbo = gl_framebuffer::get(framebuffer);
if (framebuffer && !vk_fbo) {
gl_wrap_manager_ptr->push_error(GL_INVALID_OPERATION);
return;
}
VkImage image;
VkImageLayout old_layout;
if (!vk_fbo) {
if (buffer != GL_COLOR)
return;
image = Vulkan::current_swapchain_image;
old_layout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
}
else {
if (buffer == GL_STENCIL) {
GLuint texture = vk_fbo->depth_attachment;
if (!texture)
return;
Vulkan::Image& vk_image = gl_texture::get(texture)->image;
image = vk_image;
old_layout = vk_image.GetImageLayout(0, 0);
}
else {
GLuint texture = vk_fbo->get_draw_buffer_texture(drawbuffer);
if (!texture)
return;
Vulkan::Image& vk_image = gl_texture::get(texture)->image;
image = vk_image;
old_layout = vk_image.GetImageLayout(0, 0);
}
}
VkImageSubresourceRange range;
range.aspectMask = aspect_mask;
range.baseMipLevel = 0;
range.levelCount = 1;
range.baseArrayLayer = 0;
range.layerCount = 1;
const VkImageLayout new_layout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL;
Vulkan::Image::PipelineBarrierSingle(Vulkan::current_command_buffer, image,
aspect_mask, 0, 0, old_layout, new_layout);
switch (buffer) {
case GL_COLOR: {
VkClearColorValue clear_color_value;
clear_color_value.float32[0] = (float_t)value[0];
clear_color_value.float32[1] = (float_t)value[1];
clear_color_value.float32[2] = (float_t)value[2];
clear_color_value.float32[3] = (float_t)value[3];
vkCmdClearColorImage(Vulkan::current_command_buffer, image,
new_layout, &clear_color_value, 1, &range);
} break;
case GL_STENCIL: {
VkClearDepthStencilValue clear_depth_stencil_value;
clear_depth_stencil_value.depth = gl_state.clear_depth;
clear_depth_stencil_value.stencil = value[0];
vkCmdClearDepthStencilImage(Vulkan::current_command_buffer, image,
new_layout, &clear_depth_stencil_value, 1, &range);
} break;
+46 -45
View File
@@ -63,46 +63,46 @@ struct EffectStorage {
p_gl_rend_st.draw_arrays_instanced(mode, first, 6, count / 6);
}
inline void* MapMemory(gl_state_struct& gl_st) {
inline void* map_buffer(gl_state_struct& gl_st) {
if (GLAD_GL_VERSION_4_3)
return ssbo.MapMemory(gl_st);
return gl_st.map_shader_storage_buffer(ssbo);
else
return vbo.MapMemory(gl_st);
return gl_st.map_array_buffer(vbo);
}
inline void* MapMemory(p_gl_rend_state& p_gl_rend_st) {
inline void* map_buffer(p_gl_rend_state& p_gl_rend_st) {
if (GLAD_GL_VERSION_4_3)
return ssbo.MapMemory(p_gl_rend_st);
return p_gl_rend_st.map_shader_storage_buffer(ssbo);
else
return vbo.MapMemory(p_gl_rend_st);
return p_gl_rend_st.map_array_buffer(vbo);
}
inline void UnmapMemory(gl_state_struct& gl_st) {
inline void unmap_buffer(gl_state_struct& gl_st) {
if (GLAD_GL_VERSION_4_3)
ssbo.UnmapMemory(gl_st);
gl_st.unmap_shader_storage_buffer(ssbo);
else
vbo.UnmapMemory(gl_st);
gl_st.unmap_array_buffer(vbo);
}
inline void UnmapMemory(p_gl_rend_state& p_gl_rend_st) {
inline void unmap_buffer(p_gl_rend_state& p_gl_rend_st) {
if (GLAD_GL_VERSION_4_3)
ssbo.UnmapMemory(p_gl_rend_st);
p_gl_rend_st.unmap_shader_storage_buffer(ssbo);
else
vbo.UnmapMemory(p_gl_rend_st);
p_gl_rend_st.unmap_array_buffer(vbo);
}
inline void WriteMemory(gl_state_struct& gl_st, size_t offset, size_t size, const void* data) {
inline void write_buffer(gl_state_struct& gl_st, size_t offset, size_t size, const void* data) {
if (GLAD_GL_VERSION_4_3)
ssbo.WriteMemory(gl_st, offset, size, data);
gl_st.write_shader_storage_buffer(ssbo, offset, size, data);
else
vbo.WriteMemory(gl_st, offset, size, data);
gl_st.write_array_buffer(vbo, offset, size, data);
}
inline void WriteMemory(p_gl_rend_state& p_gl_rend_st, size_t offset, size_t size, const void* data) {
inline void write_buffer(p_gl_rend_state& p_gl_rend_st, size_t offset, size_t size, const void* data) {
if (GLAD_GL_VERSION_4_3)
ssbo.WriteMemory(p_gl_rend_st, offset, size, data);
p_gl_rend_st.write_shader_storage_buffer(ssbo, offset, size, data);
else
vbo.WriteMemory(p_gl_rend_st, offset, size, data);
p_gl_rend_st.write_array_buffer(vbo, offset, size, data);
}
};
@@ -1372,7 +1372,7 @@ void leaf_particle_draw(render_data_context& rend_data_ctx, const cam_data& cam)
rend_data_ctx.get_scene_light(&shader_data.g_light_env_stage_diffuse,
&shader_data.g_light_env_stage_specular,
&shader_data.g_lit_dir, &shader_data.g_lit_luce, 0, 0);
leaf_particle_scene_ubo.WriteMemory(rend_data_ctx.state, shader_data);
rend_data_ctx.state.write_uniform_buffer(leaf_particle_scene_ubo, shader_data);
rend_data_ctx.state.active_bind_texture_2d(0, tex->glid);
shaders_ft.set(rend_data_ctx.state, rend_data_ctx.shader_flags, SHADER_FT_LEAF_PT);
@@ -1410,7 +1410,7 @@ void rain_particle_draw(render_data_context& rend_data_ctx, const cam_data& cam)
scene_shader_data.g_proj[3] = temp.row3;
scene_shader_data.g_range_scale = { range_scale.x, range_scale.y, range_scale.z, 0.0f };
scene_shader_data.g_range_offset = { range_offset.x, range_offset.y, range_offset.z, 0.0f };
rain_particle_scene_ubo.WriteMemory(rend_data_ctx.state, scene_shader_data);
rend_data_ctx.state.write_uniform_buffer(rain_particle_scene_ubo, scene_shader_data);
rend_data_ctx.state.enable_blend();
rend_data_ctx.state.set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
@@ -1441,7 +1441,7 @@ void rain_particle_draw(render_data_context& rend_data_ctx, const cam_data& cam)
batch_shader_data.g_pos_offset = { pos_offset.x, pos_offset.y, pos_offset.z, 0.075f };
batch_shader_data.g_tangent = { tangent.x, tangent.y, tangent.z, tangent_sign };
batch_shader_data.g_color = color;
rain_particle_batch_ubo.WriteMemory(rend_data_ctx.state, batch_shader_data);
rend_data_ctx.state.write_uniform_buffer(rain_particle_batch_ubo, batch_shader_data);
rain_storage.Draw(rend_data_ctx.state, GL_TRIANGLES, first, count);
}
rend_data_ctx.state.bind_vertex_array(0);
@@ -1458,7 +1458,7 @@ void particle_draw(render_data_context& rend_data_ctx, const cam_data& cam) {
if (!count)
return;
ptcl_vbo.WriteMemory(rend_data_ctx.state, 0, sizeof(particle_vertex_data) * count, ptcl_vertex_data);
rend_data_ctx.state.write_array_buffer(ptcl_vbo, 0, sizeof(particle_vertex_data) * count, ptcl_vertex_data);
const light_data& light_chara = rctx_ptr->light_set[LIGHT_SET_MAIN].lights[LIGHT_CHARA];
@@ -1472,7 +1472,7 @@ void particle_draw(render_data_context& rend_data_ctx, const cam_data& cam) {
rctx_ptr->camera->get_view_point(shader_data.g_view_pos);
light_chara.get_diffuse(shader_data.g_light_env_chara_diffuse);
light_chara.get_specular(shader_data.g_light_env_chara_specular);
particle_scene_ubo.WriteMemory(rend_data_ctx.state, shader_data);
rend_data_ctx.state.write_uniform_buffer(particle_scene_ubo, shader_data);
shaders_ft.set(rend_data_ctx.state, rend_data_ctx.shader_flags, SHADER_FT_PARTICL);
rend_data_ctx.state.bind_uniform_buffer_base(0, particle_scene_ubo);
@@ -1520,12 +1520,12 @@ void snow_particle_draw(render_data_context& rend_data_ctx, const cam_data& cam)
snow_scene.g_range_offset.x = snow->offset_gpu.x - snow->range_gpu.x * 0.5f;
snow_scene.g_range_offset.y = snow->offset_gpu.y;
snow_scene.g_range_offset.z = snow->offset_gpu.z - snow->range_gpu.z * 0.5f;
snow_particle_scene_ubo.WriteMemory(rend_data_ctx.state, snow_scene);
rend_data_ctx.state.write_uniform_buffer(snow_particle_scene_ubo, snow_scene);
snow_particle_batch_shader_data snow_batch = {};
snow_batch.g_color = snow->color;
snow_batch.start_vertex_location.x = 0;
snow_particle_batch_ubo.WriteMemory(rend_data_ctx.state, snow_batch);
rend_data_ctx.state.write_uniform_buffer(snow_particle_batch_ubo, snow_batch);
rend_data_ctx.state.active_bind_texture_2d(0, tex->glid);
rend_data_ctx.state.active_bind_texture_2d(1, rctx_ptr->render.rend_texture[0].get_depth_texture_glid());
@@ -1550,7 +1550,7 @@ void snow_particle_draw(render_data_context& rend_data_ctx, const cam_data& cam)
point_attenuation = powf(tanf(cam.get_fov() * 0.5f) * 3.4f, 2.0f) * 0.06f;
snow_scene.g_state_point_attenuation = { 0.0f, 0.0f, point_attenuation, 0.0f };
snow_particle_scene_ubo.WriteMemory(rend_data_ctx.state, snow_scene);
rend_data_ctx.state.write_uniform_buffer(snow_particle_scene_ubo, snow_scene);
snow_gpu_storage.Bind(rend_data_ctx.state, 0);
@@ -1567,7 +1567,7 @@ void snow_particle_draw(render_data_context& rend_data_ctx, const cam_data& cam)
snow_batch.g_pos_offset = { pos_offset.x, pos_offset.y, pos_offset.z, 0.0f };
snow_batch.g_color = color;
snow_batch.start_vertex_location.x = first;
snow_particle_batch_ubo.WriteMemory(rend_data_ctx.state, snow_batch);
rend_data_ctx.state.write_uniform_buffer(snow_particle_batch_ubo, snow_batch);
snow_gpu_storage.Draw(rend_data_ctx.state, GL_TRIANGLES, 0, count);
first += count;
@@ -2365,7 +2365,7 @@ void EffectFogRing::calc_vert() {
float_t density = this->density;
fog_ring_data* ptcl_data = this->ptcl_data;
fog_ring_vertex_data* ptcl_vtx_data = (fog_ring_vertex_data*)storage.MapMemory(gl_state);
fog_ring_vertex_data* ptcl_vtx_data = (fog_ring_vertex_data*)storage.map_buffer(gl_state);
if (!ptcl_vtx_data) {
num_vtx = 0;
return;
@@ -2384,7 +2384,7 @@ void EffectFogRing::calc_vert() {
ptcl_vtx_data->size = size;
}
storage.UnmapMemory(gl_state);
storage.unmap_buffer(gl_state);
num_vtx = (int32_t)(num_ptcls * 6LL);
}
@@ -4237,7 +4237,7 @@ void water_particle::draw(render_data_context& rend_data_ctx, const cam_data& ca
if (count <= 0)
return;
storage.WriteMemory(rend_data_ctx.state, 0, sizeof(water_particle_vertex_data) * count, ptcl_data.data());
storage.write_buffer(rend_data_ctx.state, 0, sizeof(water_particle_vertex_data) * count, ptcl_data.data());
water_particle_scene_shader_data scene_shader_data = {};
mat4 temp;
@@ -4257,7 +4257,7 @@ void water_particle::draw(render_data_context& rend_data_ctx, const cam_data& ca
scene_shader_data.g_size_in_projection.y = (float_t)(1.0 / 720.0);
scene_shader_data.g_size_in_projection.z = 1.0;
scene_shader_data.g_size_in_projection.w = 60.0;
water_particle_scene_ubo.WriteMemory(rend_data_ctx.state, scene_shader_data);
rend_data_ctx.state.write_uniform_buffer(water_particle_scene_ubo, scene_shader_data);
rend_data_ctx.state.disable_cull_face();
shaders_ft.set(rend_data_ctx.state, rend_data_ctx.shader_flags, SHADER_FT_W_PTCL);
@@ -5218,7 +5218,7 @@ void star_catalog_milky_way::draw(render_data_context& rend_data_ctx,
scene_shader_data.g_transform[1] = temp.row1;
scene_shader_data.g_transform[2] = temp.row2;
scene_shader_data.g_transform[3] = temp.row3;
scene_ubo.WriteMemory(rend_data_ctx.state, scene_shader_data);
rend_data_ctx.state.write_uniform_buffer(scene_ubo, scene_shader_data);
rend_data_ctx.state.enable_cull_face();
rend_data_ctx.state.disable_blend();
@@ -5312,7 +5312,7 @@ void star_catalog::draw(render_data_context& rend_data_ctx, const cam_data& cam)
scene_shader_data.g_transform[1] = temp.row1;
scene_shader_data.g_transform[2] = temp.row2;
scene_shader_data.g_transform[3] = temp.row3;
scene_ubo.WriteMemory(rend_data_ctx.state, scene_shader_data);
rend_data_ctx.state.write_uniform_buffer(scene_ubo, scene_shader_data);
rend_data_ctx.shader_flags.arr[U_STAR] = 0;
shaders_ft.set(rend_data_ctx.state, rend_data_ctx.shader_flags, SHADER_FT_STAR);
@@ -5333,7 +5333,7 @@ void star_catalog::draw(render_data_context& rend_data_ctx, const cam_data& cam)
modifiers.pos_scale, modifiers.pos_scale * modifiers.offset_scale
};
batch_shader_data.g_thresholds = { modifiers.threshold * modifiers.pos_scale, 0.0f, 0.0f, 0.0f };
batch_ubo.WriteMemory(rend_data_ctx.state, batch_shader_data);
rend_data_ctx.state.write_uniform_buffer(batch_ubo, batch_shader_data);
rend_data_ctx.state.bind_uniform_buffer_base(0, scene_ubo);
rend_data_ctx.state.bind_uniform_buffer_base(1, batch_ubo);
@@ -5789,7 +5789,7 @@ static void draw_ripple_particles(render_data_context& rend_data_ctx,
if (data->count > 5000)
return;
vec3* vtx_data = (vec3*)ripple_emit_storage.MapMemory(rend_data_ctx.state);
vec3* vtx_data = (vec3*)ripple_emit_storage.map_buffer(rend_data_ctx.state);
if (!vtx_data)
return;
@@ -5799,7 +5799,7 @@ static void draw_ripple_particles(render_data_context& rend_data_ctx,
for (size_t i = data->count; i; i--, vtx_data++, position++, color++)
*vtx_data = { position->x, -position->z, (float_t)color->a * (float_t)(1.0 / 255.0) };
ripple_emit_storage.UnmapMemory(rend_data_ctx.state);
ripple_emit_storage.unmap_buffer(rend_data_ctx.state);
int32_t size = (int32_t)(data->size + 0.5f);
@@ -5822,7 +5822,7 @@ static void draw_ripple_particles(render_data_context& rend_data_ctx,
1.0f / (float_t)width,
1.0f / (float_t)height,
0.0f, 0.0f };
ripple_emit_scene_ubo.WriteMemory(rend_data_ctx.state, shader_data);
rend_data_ctx.state.write_uniform_buffer(ripple_emit_scene_ubo, shader_data);
rend_data_ctx.shader_flags.arr[U_RIPPLE] = data->ripple_uniform;
rend_data_ctx.shader_flags.arr[U_RIPPLE_EMIT] = data->ripple_emit_uniform;
@@ -5996,7 +5996,8 @@ static int32_t leaf_particle_disp(render_data_context& rend_data_ctx) {
normal[2] = sub_1406427A0(vec3(-0.2f, -0.2f, 1.0f), vec3(0.0f, 1.0f, 0.0f)).first;
normal[3] = sub_1406427A0(vec3( 0.4f, -0.4f, 1.0f), vec3(0.0f, 1.0f, 0.0f)).first;
leaf_particle_vertex_data* vtx_data = (leaf_particle_vertex_data*)leaf_ptcl_vbo.MapMemory(rend_data_ctx.state);
leaf_particle_vertex_data* vtx_data
= (leaf_particle_vertex_data*)rend_data_ctx.state.map_array_buffer(leaf_ptcl_vbo);
if (!vtx_data)
return 0;
@@ -6074,7 +6075,7 @@ static int32_t leaf_particle_disp(render_data_context& rend_data_ctx) {
}
}
leaf_ptcl_vbo.UnmapMemory(rend_data_ctx.state);
rend_data_ctx.state.unmap_array_buffer(leaf_ptcl_vbo);
return vtx_count;
}
@@ -6644,7 +6645,7 @@ static void snow_particle_ctrl() {
snow_particle_data_kill_fallen(snow_ptcl_fallen, true);
}
snow_particle_vertex_data* vtx_data = (snow_particle_vertex_data*)snow_storage.MapMemory(gl_state);
snow_particle_vertex_data* vtx_data = (snow_particle_vertex_data*)snow_storage.map_buffer(gl_state);
if (vtx_data) {
particle_data* snow_ptcl = snow_ptcl_data;
for (int32_t i = snow->num_snow; i; i--, snow_ptcl++, vtx_data++) {
@@ -6653,9 +6654,9 @@ static void snow_particle_ctrl() {
vtx_data->alpha = snow_ptcl->alpha;
}
}
snow_storage.UnmapMemory(gl_state);
snow_storage.unmap_buffer(gl_state);
snow_particle_vertex_data* fallen_vtx_data = (snow_particle_vertex_data*)snow_fallen_storage.MapMemory(gl_state);
snow_particle_vertex_data* fallen_vtx_data = (snow_particle_vertex_data*)snow_fallen_storage.map_buffer(gl_state);
if (fallen_vtx_data) {
particle_data* snow_ptcl_fallen = snow_ptcl_fallen_data;
for (size_t i = snow_ptcl_fallen_count; i; i--, snow_ptcl_fallen++, fallen_vtx_data++) {
@@ -6664,7 +6665,7 @@ static void snow_particle_ctrl() {
fallen_vtx_data->alpha = snow_ptcl_fallen->alpha;
}
}
snow_fallen_storage.UnmapMemory(gl_state);
snow_fallen_storage.unmap_buffer(gl_state);
}
static void snow_particle_data_init() {
@@ -6803,11 +6804,11 @@ static void ripple_propagate_sub(render_data_context& rend_data_ctx,
(float_t)width / (float_t)(width - 2), (float_t)height / (float_t)(height - 2)
};
ripple_scene.g_texcoord = { 1.0f, 0.0f, 0.0f, 0.0f };
ripple_scene_ubo.WriteMemory(rend_data_ctx.state, ripple_scene);
rend_data_ctx.state.write_uniform_buffer(ripple_scene_ubo, ripple_scene);
ripple_batch_shader_data ripple_batch = {};
ripple_batch.g_params = { params.wake_attn, 0.0f, 0.0f, 0.0f };
ripple_batch_ubo.WriteMemory(rend_data_ctx.state, ripple_batch);
rend_data_ctx.state.write_uniform_buffer(ripple_batch_ubo, ripple_batch);
rend_data_ctx.state.bind_vertex_array(rctx_ptr->common_vao);
shaders_ft.set(rend_data_ctx.state, rend_data_ctx.shader_flags, SHADER_FT_RIPPLE);
+291 -4
View File
@@ -181,6 +181,7 @@ struct gl_rend_state {
void active_bind_texture_cube_map(int32_t index, GLuint texture);
void active_texture(int32_t index);
void begin_event(const char* message, int32_t length);
void begin_query(GLenum target, GLuint id);
void bind_framebuffer(GLuint framebuffer);
void bind_read_framebuffer(GLuint framebuffer);
void bind_draw_framebuffer(GLuint framebuffer);
@@ -203,6 +204,7 @@ struct gl_rend_state {
GLenum check_framebuffer_status(GLenum target);
void clear(GLbitfield mask);
void clear_buffer(GLenum buffer, GLint drawbuffer, const GLfloat* value);
void clear_buffer(GLenum buffer, GLint drawbuffer, const GLint* value);
void clear_color(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
void clear_depth(GLfloat depth);
void clear_stencil(GLint stencil);
@@ -232,6 +234,7 @@ struct gl_rend_state {
void enable_scissor_test();
void enable_stencil_test();
void end_event();
void end_query(GLenum target);
void finish();
void generate_mipmap(GLenum target);
void generate_texture_mipmap(GLuint texture);
@@ -242,6 +245,10 @@ struct gl_rend_state {
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* map_array_buffer(GLuint buffer);
void* map_element_array_buffer(GLuint buffer);
void* map_uniform_buffer(GLuint buffer);
void* map_shader_storage_buffer(GLuint buffer);
void set_blend_func(GLenum src, GLenum dst);
void set_blend_func_separate(GLenum src_rgb, GLenum dst_rgb,
GLenum src_alpha, GLenum dst_alpha);
@@ -263,6 +270,10 @@ struct gl_rend_state {
void set_viewport(GLint x, GLint y, GLsizei width, GLsizei height);
void tex_sub_image_2d(GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels);
void unmap_array_buffer(GLuint buffer);
void unmap_element_array_buffer(GLuint buffer);
void unmap_uniform_buffer(GLuint buffer);
void unmap_shader_storage_buffer(GLuint buffer);
void update();
void update_program();
void update_active_texture();
@@ -298,6 +309,10 @@ struct gl_rend_state {
void update_clear_depth();
void update_clear_stencil();
void use_program(GLuint program);
void write_array_buffer(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data);
void write_element_array_buffer(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data);
void write_uniform_buffer(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data);
void write_shader_storage_buffer(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data);
};
gl_rend_state gl_rend_state_data[GL_REND_STATE_COUNT] = {
@@ -327,6 +342,10 @@ void p_gl_rend_state::begin_event(const char* message, int32_t length) {
ptr.begin_event(message, length);
}
void p_gl_rend_state::begin_query(GLenum target, GLuint id) {
ptr.begin_query(target, id);
}
void p_gl_rend_state::bind_framebuffer(GLuint framebuffer) {
ptr.bind_framebuffer(framebuffer);
}
@@ -406,6 +425,10 @@ void p_gl_rend_state::clear_buffer(GLenum buffer, GLint drawbuffer, const GLfloa
ptr.clear_buffer(buffer, drawbuffer, value);
}
void p_gl_rend_state::clear_buffer(GLenum buffer, GLint drawbuffer, const GLint* value) {
ptr.clear_buffer(buffer, drawbuffer, value);
}
void p_gl_rend_state::clear_color(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) {
ptr.clear_color(red, green, blue, alpha);
}
@@ -508,6 +531,10 @@ void p_gl_rend_state::end_event() {
ptr.end_event();
}
void p_gl_rend_state::end_query(GLenum target) {
ptr.end_query(target);
}
void p_gl_rend_state::finish() {
ptr.finish();
}
@@ -548,6 +575,22 @@ void p_gl_rend_state::get_viewport(GLint& x, GLint& y, GLsizei& width, GLsizei&
ptr.get_viewport(x, y, width, height);
}
void* p_gl_rend_state::map_array_buffer(GLuint buffer) {
return ptr.map_array_buffer(buffer);
}
void* p_gl_rend_state::map_element_array_buffer(GLuint buffer) {
return ptr.map_element_array_buffer(buffer);
}
void* p_gl_rend_state::map_uniform_buffer(GLuint buffer) {
return ptr.map_uniform_buffer(buffer);
}
void* p_gl_rend_state::map_shader_storage_buffer(GLuint buffer) {
return ptr.map_shader_storage_buffer(buffer);
}
void p_gl_rend_state::set_blend_func(GLenum src, GLenum dst) {
ptr.set_blend_func(src, dst);
}
@@ -627,6 +670,38 @@ void p_gl_rend_state::use_program(GLuint program) {
ptr.use_program(program);
}
void p_gl_rend_state::unmap_array_buffer(GLuint buffer) {
return ptr.unmap_array_buffer(buffer);
}
void p_gl_rend_state::unmap_element_array_buffer(GLuint buffer) {
return ptr.unmap_element_array_buffer(buffer);
}
void p_gl_rend_state::unmap_uniform_buffer(GLuint buffer) {
return ptr.unmap_uniform_buffer(buffer);
}
void p_gl_rend_state::unmap_shader_storage_buffer(GLuint buffer) {
return ptr.unmap_shader_storage_buffer(buffer);
}
void p_gl_rend_state::write_array_buffer(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data) {
ptr.write_array_buffer(buffer, offset, size, data);
}
void p_gl_rend_state::write_element_array_buffer(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data) {
ptr.write_element_array_buffer(buffer, offset, size, data);
}
void p_gl_rend_state::write_uniform_buffer(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data) {
ptr.write_uniform_buffer(buffer, offset, size, data);
}
void p_gl_rend_state::write_shader_storage_buffer(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data) {
ptr.write_shader_storage_buffer(buffer, offset, size, data);
}
inline void gl_rend_state::active_bind_texture_2d(int32_t index, GLuint texture) {
active_texture(index);
bind_texture_2d(texture);
@@ -647,6 +722,10 @@ inline void gl_rend_state::begin_event(const char* message, int32_t length) {
glPushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0, (GLsizei)length, message);
}
inline void gl_rend_state::begin_query(GLenum target, GLuint id) {
glBeginQuery(target, id);
}
inline void gl_rend_state::bind_framebuffer(GLuint framebuffer) {
read_framebuffer_binding = framebuffer;
draw_framebuffer_binding = framebuffer;
@@ -837,12 +916,25 @@ inline void gl_rend_state::clear_buffer(GLenum buffer, GLint drawbuffer, const G
update_scissor_test();
update_scissor();
glClearBufferfv(buffer, drawbuffer, value);
enum_or(flags, GL_REND_STATE_EXECUTE);
}
inline void gl_rend_state::clear_buffer(GLenum buffer, GLint drawbuffer, const GLint* value) {
update_draw_framebuffer();
if (buffer == GL_COLOR)
update_color_mask();
update_scissor_test();
update_scissor();
if (buffer == GL_STENCIL) {
update_stencil_test();
update_stencil_mask();
}
glClearBufferfv(buffer, drawbuffer, value);
glClearBufferiv(buffer, drawbuffer, value);
enum_or(flags, GL_REND_STATE_EXECUTE);
}
@@ -1032,6 +1124,10 @@ inline void gl_rend_state::end_event() {
glPopDebugGroup();
}
inline void gl_rend_state::end_query(GLenum target) {
glEndQuery(target);
}
inline void gl_rend_state::finish() {
bind_vertex_array(0);
update_vertex_array();
@@ -1272,6 +1368,102 @@ inline void gl_rend_state::get_viewport(GLint& x, GLint& y, GLsizei& width, GLsi
height = viewport.height;
}
inline void* gl_rend_state::map_array_buffer(GLuint buffer) {
if (!buffer)
return 0;
void* data;
if (GLAD_GL_VERSION_4_5)
data = glMapNamedBuffer(buffer, GL_WRITE_ONLY);
else {
bind_array_buffer(buffer);
data = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
}
if (data)
return data;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_ARRAY_BUFFER);
bind_array_buffer(0);
}
return 0;
}
inline void* gl_rend_state::map_element_array_buffer(GLuint buffer) {
if (!buffer)
return 0;
void* data;
if (GLAD_GL_VERSION_4_5)
data = glMapNamedBuffer(buffer, GL_WRITE_ONLY);
else {
bind_element_array_buffer(buffer);
data = glMapBuffer(GL_ELEMENT_ARRAY_BUFFER, GL_WRITE_ONLY);
}
if (data)
return data;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER);
bind_element_array_buffer(0);
}
return 0;
}
inline void* gl_rend_state::map_uniform_buffer(GLuint buffer) {
if (!buffer)
return 0;
void* data;
if (GLAD_GL_VERSION_4_5)
data = glMapNamedBuffer(buffer, GL_WRITE_ONLY);
else {
bind_uniform_buffer(buffer);
data = glMapBuffer(GL_UNIFORM_BUFFER, GL_WRITE_ONLY);
}
if (data)
return data;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_UNIFORM_BUFFER);
bind_uniform_buffer(0);
}
return 0;
}
inline void* gl_rend_state::map_shader_storage_buffer(GLuint buffer) {
if (!buffer)
return 0;
void* data;
if (GLAD_GL_VERSION_4_5)
data = glMapNamedBuffer(buffer, GL_WRITE_ONLY);
else {
bind_shader_storage_buffer(buffer);
data = glMapBuffer(GL_SHADER_STORAGE_BUFFER, GL_WRITE_ONLY);
}
if (data)
return data;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_SHADER_STORAGE_BUFFER);
bind_shader_storage_buffer(0);
}
return 0;
}
inline void gl_rend_state::set_blend_func(GLenum src, GLenum dst) {
blend_src_rgb = src;
blend_dst_rgb = dst;
@@ -1379,6 +1571,54 @@ inline void gl_rend_state::set_viewport(GLint x, GLint y, GLsizei width, GLsizei
enum_or(update_flags, GL_REND_STATE_UPDATE_VIEWPORT);
}
inline void gl_rend_state::unmap_array_buffer(GLuint buffer) {
if (!buffer)
return;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_ARRAY_BUFFER);
bind_array_buffer(0);
}
}
inline void gl_rend_state::unmap_element_array_buffer(GLuint buffer) {
if (!buffer)
return;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER);
bind_element_array_buffer(0);
}
}
inline void gl_rend_state::unmap_uniform_buffer(GLuint buffer) {
if (!buffer)
return;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_UNIFORM_BUFFER);
bind_uniform_buffer(0);
}
}
inline void gl_rend_state::unmap_shader_storage_buffer(GLuint buffer) {
if (!buffer)
return;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_SHADER_STORAGE_BUFFER);
bind_shader_storage_buffer(0);
}
}
inline void gl_rend_state::tex_sub_image_2d(GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels) {
update_curr_active_texture();
@@ -1450,7 +1690,7 @@ inline void gl_rend_state::update_curr_active_texture() {
GLuint index = curr_active_texture_index;
bool bind = false;
if (curr_texture_binding_2d[index] != texture_binding_2d[index]) {
glBindTexture(GL_TEXTURE_2D, texture_binding_2d[curr_active_texture_index]);
glBindTexture(GL_TEXTURE_2D, texture_binding_2d[index]);
curr_texture_binding_2d[index] = texture_binding_2d[index];
bind = true;
}
@@ -1730,7 +1970,6 @@ inline void gl_rend_state::update_multisample() {
(multisample ? glEnable : glDisable)(GL_MULTISAMPLE);
curr_multisample = multisample;
}
enum_and(update_flags, ~GL_REND_STATE_UPDATE_MULTISAMPLE);
}
}
@@ -1799,7 +2038,7 @@ inline void gl_rend_state::update_stencil_func() {
if (curr_stencil_test && (update_flags & GL_REND_STATE_UPDATE_STENCIL_FUNC)) {
if (curr_stencil_func != stencil_func || curr_stencil_ref != stencil_ref
|| curr_stencil_value_mask != stencil_value_mask) {
glStencilFunc(stencil_func, stencil_ref, stencil_ref);
glStencilFunc(stencil_func, stencil_ref, stencil_value_mask);
curr_stencil_func = stencil_func;
curr_stencil_ref = stencil_ref;
curr_stencil_value_mask = stencil_value_mask;
@@ -1872,3 +2111,51 @@ inline void gl_rend_state::use_program(GLuint program) {
this->program = program;
enum_or(update_flags, GL_REND_STATE_UPDATE_PROGRAM);
}
inline void gl_rend_state::write_array_buffer(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data) {
if (!buffer || !size)
return;
if (GLAD_GL_VERSION_4_5)
glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data);
else {
bind_array_buffer(buffer);
glBufferSubData(GL_ARRAY_BUFFER, (GLsizeiptr)offset, (GLsizeiptr)size, data);
}
}
inline void gl_rend_state::write_element_array_buffer(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data) {
if (!buffer || !size)
return;
if (GLAD_GL_VERSION_4_5)
glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data);
else {
bind_element_array_buffer(buffer);
glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)offset, (GLsizeiptr)size, data);
}
}
inline void gl_rend_state::write_uniform_buffer(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data) {
if (!buffer || !size)
return;
if (GLAD_GL_VERSION_4_5)
glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data);
else {
bind_uniform_buffer(buffer);
glBufferSubData(GL_UNIFORM_BUFFER, (GLsizeiptr)offset, (GLsizeiptr)size, data);
}
}
inline void gl_rend_state::write_shader_storage_buffer(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data) {
if (!buffer || !size)
return;
if (GLAD_GL_VERSION_4_5)
glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data);
else {
bind_shader_storage_buffer(buffer);
glBufferSubData(GL_SHADER_STORAGE_BUFFER, (GLsizeiptr)offset, (GLsizeiptr)size, data);
}
}
+35
View File
@@ -32,6 +32,7 @@ struct p_gl_rend_state {
void active_bind_texture_cube_map(int32_t index, GLuint texture);
void active_texture(int32_t index);
void begin_event(const char* message, int32_t length);
void begin_query(GLenum target, GLuint id);
void bind_framebuffer(GLuint framebuffer);
void bind_read_framebuffer(GLuint framebuffer);
void bind_draw_framebuffer(GLuint framebuffer);
@@ -54,6 +55,7 @@ struct p_gl_rend_state {
GLenum check_framebuffer_status(GLenum target);
void clear(GLbitfield mask);
void clear_buffer(GLenum buffer, GLint drawbuffer, const GLfloat* value);
void clear_buffer(GLenum buffer, GLint drawbuffer, const GLint* value);
void clear_color(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
void clear_depth(GLfloat depth);
void clear_stencil(GLint stencil);
@@ -83,6 +85,7 @@ struct p_gl_rend_state {
void enable_scissor_test();
void enable_stencil_test();
void end_event();
void end_query(GLenum target);
void finish();
void generate_mipmap(GLenum target);
void generate_texture_mipmap(GLuint texture);
@@ -93,6 +96,10 @@ struct p_gl_rend_state {
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* map_array_buffer(GLuint buffer);
void* map_element_array_buffer(GLuint buffer);
void* map_uniform_buffer(GLuint buffer);
void* map_shader_storage_buffer(GLuint buffer);
void set_blend_func(GLenum src, GLenum dst);
void set_blend_func_separate(GLenum src_rgb, GLenum dst_rgb,
GLenum src_alpha, GLenum dst_alpha);
@@ -114,10 +121,38 @@ struct p_gl_rend_state {
void tex_sub_image_2d(GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels);
void set_viewport(GLint x, GLint y, GLsizei width, GLsizei height);
void unmap_array_buffer(GLuint buffer);
void unmap_element_array_buffer(GLuint buffer);
void unmap_uniform_buffer(GLuint buffer);
void unmap_shader_storage_buffer(GLuint buffer);
void use_program(GLuint program);
void write_array_buffer(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data);
void write_element_array_buffer(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data);
void write_uniform_buffer(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data);
void write_shader_storage_buffer(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data);
template <size_t size>
inline void begin_event(const char(&str)[size]) {
begin_event(str, (GLsizei)(size - 1));
}
template<typename T>
inline void write_array_buffer(GLuint buffer, const T& data) {
write_array_buffer(buffer, 0, sizeof(T), &data);
}
template<typename T>
inline void write_element_array_buffer(GLuint buffer, const T& data) {
write_element_array_buffer(buffer, 0, sizeof(T), &data);
}
template<typename T>
inline void write_uniform_buffer(GLuint buffer, const T& data) {
write_uniform_buffer(buffer, 0, sizeof(T), &data);
}
template<typename T>
inline void write_shader_storage_buffer(GLuint buffer, const T& data) {
write_shader_storage_buffer(buffer, 0, sizeof(T), &data);
}
};
+192
View File
@@ -111,3 +111,195 @@ void gl_state_struct::get() {
glGetIntegerv(GL_UNIFORM_BUFFER_BINDING, (GLint*)&uniform_buffer_binding);
glGetIntegerv(GL_SHADER_STORAGE_BUFFER_BINDING, (GLint*)&shader_storage_buffer_binding);
}
void* gl_state_struct::map_array_buffer(GLuint buffer) {
if (!buffer)
return 0;
void* data;
if (GLAD_GL_VERSION_4_5)
data = glMapNamedBuffer(buffer, GL_WRITE_ONLY);
else {
bind_array_buffer(buffer);
data = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
}
if (data)
return data;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_ARRAY_BUFFER);
bind_array_buffer(0);
}
return 0;
}
void* gl_state_struct::map_element_array_buffer(GLuint buffer) {
if (!buffer)
return 0;
void* data;
if (GLAD_GL_VERSION_4_5)
data = glMapNamedBuffer(buffer, GL_WRITE_ONLY);
else {
bind_element_array_buffer(buffer);
data = glMapBuffer(GL_ELEMENT_ARRAY_BUFFER, GL_WRITE_ONLY);
}
if (data)
return data;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER);
bind_element_array_buffer(0);
}
return 0;
}
void* gl_state_struct::map_uniform_buffer(GLuint buffer) {
if (!buffer)
return 0;
void* data;
if (GLAD_GL_VERSION_4_5)
data = glMapNamedBuffer(buffer, GL_WRITE_ONLY);
else {
bind_uniform_buffer(buffer);
data = glMapBuffer(GL_UNIFORM_BUFFER, GL_WRITE_ONLY);
}
if (data)
return data;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_UNIFORM_BUFFER);
bind_uniform_buffer(0);
}
return 0;
}
void* gl_state_struct::map_shader_storage_buffer(GLuint buffer) {
if (!buffer)
return 0;
void* data;
if (GLAD_GL_VERSION_4_5)
data = glMapNamedBuffer(buffer, GL_WRITE_ONLY);
else {
bind_shader_storage_buffer(buffer);
data = glMapBuffer(GL_SHADER_STORAGE_BUFFER, GL_WRITE_ONLY);
}
if (data)
return data;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_SHADER_STORAGE_BUFFER);
bind_shader_storage_buffer(0);
}
return 0;
}
void gl_state_struct::unmap_array_buffer(GLuint buffer) {
if (!buffer)
return;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_ARRAY_BUFFER);
bind_array_buffer(0);
}
}
void gl_state_struct::unmap_element_array_buffer(GLuint buffer) {
if (!buffer)
return;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER);
bind_element_array_buffer(0);
}
}
void gl_state_struct::unmap_uniform_buffer(GLuint buffer) {
if (!buffer)
return;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_UNIFORM_BUFFER);
bind_uniform_buffer(0);
}
}
void gl_state_struct::unmap_shader_storage_buffer(GLuint buffer) {
if (!buffer)
return;
if (GLAD_GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_SHADER_STORAGE_BUFFER);
bind_shader_storage_buffer(0);
}
}
void gl_state_struct::write_array_buffer(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data) {
if (!buffer || !size)
return;
if (GLAD_GL_VERSION_4_5)
glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data);
else {
bind_array_buffer(buffer);
glBufferSubData(GL_ARRAY_BUFFER, (GLsizeiptr)offset, (GLsizeiptr)size, data);
}
}
void gl_state_struct::write_element_array_buffer(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data) {
if (!buffer || !size)
return;
if (GLAD_GL_VERSION_4_5)
glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data);
else {
bind_element_array_buffer(buffer);
glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)offset, (GLsizeiptr)size, data);
}
}
void gl_state_struct::write_uniform_buffer(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data) {
if (!buffer || !size)
return;
if (GLAD_GL_VERSION_4_5)
glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data);
else {
bind_uniform_buffer(buffer);
glBufferSubData(GL_UNIFORM_BUFFER, (GLsizeiptr)offset, (GLsizeiptr)size, data);
}
}
void gl_state_struct::write_shader_storage_buffer(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data) {
if (!buffer || !size)
return;
if (GLAD_GL_VERSION_4_5)
glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data);
else {
bind_shader_storage_buffer(buffer);
glBufferSubData(GL_SHADER_STORAGE_BUFFER, (GLsizeiptr)offset, (GLsizeiptr)size, data);
}
}
+32
View File
@@ -34,6 +34,38 @@ struct gl_state_struct {
bool check_texture_binding_2d();
bool check_texture_binding_cube_map();
void get();
void* map_array_buffer(GLuint buffer);
void* map_element_array_buffer(GLuint buffer);
void* map_uniform_buffer(GLuint buffer);
void* map_shader_storage_buffer(GLuint buffer);
void unmap_array_buffer(GLuint buffer);
void unmap_element_array_buffer(GLuint buffer);
void unmap_uniform_buffer(GLuint buffer);
void unmap_shader_storage_buffer(GLuint buffer);
void write_array_buffer(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data);
void write_element_array_buffer(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data);
void write_uniform_buffer(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data);
void write_shader_storage_buffer(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data);
template<typename T>
inline void write_array_buffer(GLuint buffer, const T& data) {
write_array_buffer(buffer, 0, sizeof(T), &data);
}
template<typename T>
inline void write_element_array_buffer(GLuint buffer, const T& data) {
write_element_array_buffer(buffer, 0, sizeof(T), &data);
}
template<typename T>
inline void write_uniform_buffer(GLuint buffer, const T& data) {
write_uniform_buffer(buffer, 0, sizeof(T), &data);
}
template<typename T>
inline void write_shader_storage_buffer(GLuint buffer, const T& data) {
write_shader_storage_buffer(buffer, 0, sizeof(T), &data);
}
};
extern gl_state_struct gl_state;
+2 -2
View File
@@ -1030,7 +1030,7 @@ namespace mdl {
gl_state.bind_element_array_buffer(0);
}
vbo.WriteMemory(gl_state, 0, vertex_buffer.size(), vertex_buffer.data());
gl_state.write_array_buffer(vbo, 0, vertex_buffer.size(), vertex_buffer.data());
if (ebo_index_count < index_buffer.size()) {
if (!ebo_index_count)
@@ -1048,7 +1048,7 @@ namespace mdl {
gl_state.bind_element_array_buffer(0);
}
ebo.WriteMemory(gl_state, 0, sizeof(uint32_t) * index_buffer.size(), index_buffer.data());
gl_state.write_element_array_buffer(ebo, 0, sizeof(uint32_t) * index_buffer.size(), index_buffer.data());
gl_state.bind_array_buffer(0);
gl_state.bind_element_array_buffer(0);
+18 -18
View File
@@ -220,7 +220,7 @@ namespace rndr {
shader_data.g_transform[1] = mat.row1;
shader_data.g_transform[2] = mat.row2;
shader_data.g_transform[3] = mat.row3;
rctx->camera_blur_ubo.WriteMemory(rend_data_ctx.state, shader_data);
rend_data_ctx.state.write_uniform_buffer(rctx->camera_blur_ubo, shader_data);
rend_data_ctx.state.bind_uniform_buffer_base(1, rctx->camera_blur_ubo);
}
else {
@@ -345,11 +345,11 @@ namespace rndr {
shader_data.g_transform[2] = mat.row2;
shader_data.g_transform[3] = mat.row3;
shader_data.g_emission = 0.0f;
rctx_ptr->sun_quad_ubo.WriteMemory(rend_data_ctx.state, shader_data);
rend_data_ctx.state.write_uniform_buffer(rctx_ptr->sun_quad_ubo, shader_data);
glBeginQuery(GL_SAMPLES_PASSED, chara_data->query[next_query_index]);
rend_data_ctx.state.begin_query(GL_SAMPLES_PASSED, chara_data->query[next_query_index]);
rend_data_ctx.state.draw_arrays(GL_TRIANGLE_STRIP, 0, 4);
glEndQuery(GL_SAMPLES_PASSED);
rend_data_ctx.state.end_query(GL_SAMPLES_PASSED);
if (chara_data->query_data[next_query_index] == -1)
chara_data->query_data[next_query_index] = 0;
@@ -466,11 +466,11 @@ namespace rndr {
shader_data.g_transform[1] = mat.row1;
shader_data.g_transform[2] = mat.row2;
shader_data.g_transform[3] = mat.row3;
rctx_ptr->sun_quad_ubo.WriteMemory(rend_data_ctx.state, shader_data);
rend_data_ctx.state.write_uniform_buffer(rctx_ptr->sun_quad_ubo, shader_data);
glBeginQuery(GL_SAMPLES_PASSED, lens_shaft_query[next_query_index]);
rend_data_ctx.state.begin_query(GL_SAMPLES_PASSED, lens_shaft_query[next_query_index]);
rend_data_ctx.state.draw_arrays(GL_TRIANGLE_STRIP, 0, 4);
glEndQuery(GL_SAMPLES_PASSED);
rend_data_ctx.state.end_query(GL_SAMPLES_PASSED);
mat4_mul_translate(&cam.get_view_mat(), (vec3*)&v44, &mat);
mat4_clear_rot(&mat, &mat);
@@ -482,11 +482,11 @@ namespace rndr {
shader_data.g_transform[1] = mat.row1;
shader_data.g_transform[2] = mat.row2;
shader_data.g_transform[3] = mat.row3;
rctx_ptr->sun_quad_ubo.WriteMemory(rend_data_ctx.state, shader_data);
rend_data_ctx.state.write_uniform_buffer(rctx_ptr->sun_quad_ubo, shader_data);
glBeginQuery(GL_SAMPLES_PASSED, lens_flare_query[next_query_index]);
rend_data_ctx.state.begin_query(GL_SAMPLES_PASSED, lens_flare_query[next_query_index]);
rend_data_ctx.state.draw_arrays(GL_TRIANGLE_STRIP, 0, 4);
glEndQuery(GL_SAMPLES_PASSED);
rend_data_ctx.state.end_query(GL_SAMPLES_PASSED);
rend_data_ctx.state.set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
rend_data_ctx.state.set_depth_mask(GL_TRUE);
@@ -521,7 +521,7 @@ namespace rndr {
shader_data.g_transform[1] = mat.row1;
shader_data.g_transform[2] = mat.row2;
shader_data.g_transform[3] = mat.row3;
rctx_ptr->sun_quad_ubo.WriteMemory(rend_data_ctx.state, shader_data);
rend_data_ctx.state.write_uniform_buffer(rctx_ptr->sun_quad_ubo, shader_data);
rend_data_ctx.state.draw_arrays(GL_TRIANGLE_STRIP, 0, 4);
@@ -589,7 +589,7 @@ namespace rndr {
quad.g_color = { param_x, param_y, param_z, param_w };
quad.g_texture_lod = 0.0f;
rctx_ptr->quad_ubo.WriteMemory(rend_data_ctx.state, quad);
rend_data_ctx.state.write_uniform_buffer(rctx_ptr->quad_ubo, quad);
rend_data_ctx.state.bind_uniform_buffer_base(0, rctx_ptr->quad_ubo);
rend_data_ctx.state.bind_vertex_array(rctx_ptr->common_vao);
rend_data_ctx.state.draw_arrays(GL_TRIANGLE_STRIP, 0, 4);
@@ -644,7 +644,7 @@ namespace rndr {
(float_t)(-(max_distance * min_distance) * (1.0 / (max_distance - min_distance))),
(float_t)min_distance, (float_t)max_distance
};
rctx->contour_coef_ubo.WriteMemory(rend_data_ctx.state, shader_data);
rend_data_ctx.state.write_uniform_buffer(rctx->contour_coef_ubo, shader_data);
shaders_ft.set(rend_data_ctx.state, rend_data_ctx.shader_flags, SHADER_FT_CONTOUR);
rend_data_ctx.state.bind_uniform_buffer_base(2, rctx->contour_coef_ubo);
@@ -1875,7 +1875,7 @@ namespace rndr {
shader_data.g_tone_offset.w = gamma > 0.0f ? 2.0f / (gamma * 3.0f) : 0.0f;
memcpy(shader_data.g_texcoord_transforms, texcoord_transforms, sizeof(vec4) * 4);
rctx->tone_map_ubo.WriteMemory(rend_data_ctx.state, shader_data);
rend_data_ctx.state.write_uniform_buffer(rctx->tone_map_ubo, shader_data);
rend_data_ctx.state.set_viewport(0, 0, render_width, render_height);
taa_buffer[2].begin_render(rend_data_ctx.state);
@@ -1991,7 +1991,7 @@ namespace rndr {
for (int32_t i = 0; i < 4 && i < ROB_ID_MAX; i++, chara_data++)
for (int32_t j = 0; j < 8; j++)
exposure_measure.g_spot_coefficients[i * 8 + j] = chara_data->spot_coefficients[j];
rctx->exposure_measure_ubo.WriteMemory(rend_data_ctx.state, exposure_measure);
rend_data_ctx.state.write_uniform_buffer(rctx->exposure_measure_ubo, exposure_measure);
rend_data_ctx.state.set_viewport(0, 0, 32, 1);
downsample_texture.begin_render(rend_data_ctx.state);
@@ -2061,7 +2061,7 @@ namespace rndr {
*(vec3*)&gaussian_coef.g_coef[i] = gauss[i] * intensity;
gaussian_coef.g_coef[i].w = 0.0f;
}
rctx_ptr->gaussian_coef_ubo.WriteMemory(rend_data_ctx.state, gaussian_coef);
rend_data_ctx.state.write_uniform_buffer(rctx_ptr->gaussian_coef_ubo, gaussian_coef);
}
void Render::calc_taa_blend() {
@@ -2182,7 +2182,7 @@ namespace rndr {
const float_t angle_sin = sinf(angle);
const float_t angle_cos = cosf(angle);
float_t* data = (float_t*)rctx_ptr->lens_ghost_vbo.MapMemory(rend_data_ctx.state);
float_t* data = (float_t*)rend_data_ctx.state.map_array_buffer(rctx_ptr->lens_ghost_vbo);
if (!data)
return;
@@ -2200,7 +2200,7 @@ namespace rndr {
make_ghost_quad((uint8_t)(i & 0x03), opacity, &mat, data);
}
rctx_ptr->lens_ghost_vbo.UnmapMemory(rend_data_ctx.state);
rend_data_ctx.state.unmap_array_buffer(rctx_ptr->lens_ghost_vbo);
rend_data_ctx.state.set_viewport(0, 0, render_width[0], render_height[0]);
rend_texture[0].begin_render(rend_data_ctx.state);
+11 -11
View File
@@ -431,10 +431,10 @@ void render_data::init() {
inv_view_mat = mat4_identity;
if (GLAD_GL_VERSION_4_3)
buffer_skinning.WriteMemory(gl_state,
gl_state.write_shader_storage_buffer(buffer_skinning,
0, sizeof(obj_skinning_data), &buffer_skinning_data);
else
buffer_skinning_ubo.WriteMemory(gl_state,
gl_state.write_uniform_buffer(buffer_skinning_ubo,
0, sizeof(obj_skinning_data), &buffer_skinning_data);
}
@@ -495,10 +495,10 @@ void render_data::set_skinning_data(p_gl_rend_state& p_gl_rend_st, const mat4* m
}
if (GLAD_GL_VERSION_4_3)
buffer_skinning.WriteMemory(p_gl_rend_st,
p_gl_rend_st.write_shader_storage_buffer(buffer_skinning,
0, sizeof(vec4) * 3 * count, &buffer_skinning_data);
else
buffer_skinning_ubo.WriteMemory(p_gl_rend_st,
p_gl_rend_st.write_uniform_buffer(buffer_skinning_ubo,
0, sizeof(vec4) * 3 * count, &buffer_skinning_data);
}
}
@@ -507,12 +507,12 @@ void render_data::set_state(p_gl_rend_state& p_gl_rend_st) {
shaders_ft.set(p_gl_rend_st, shader_flags, shader_index);
if (flags & RENDER_DATA_SHADER_UPDATE) {
buffer_shader.WriteMemory(p_gl_rend_st, buffer_shader_data);
p_gl_rend_st.write_uniform_buffer(buffer_shader, buffer_shader_data);
enum_and(flags, ~RENDER_DATA_SHADER_UPDATE);
}
if (flags & RENDER_DATA_SCENE_UPDATE) {
buffer_scene.WriteMemory(p_gl_rend_st, buffer_scene_data);
p_gl_rend_st.write_uniform_buffer(buffer_scene, buffer_scene_data);
enum_and(flags, ~RENDER_DATA_SCENE_UPDATE);
}
@@ -559,7 +559,7 @@ void render_data::set_state(p_gl_rend_state& p_gl_rend_st) {
buffer_batch_data.g_joint_inverse[1] = temp.row1;
buffer_batch_data.g_joint_inverse[2] = temp.row2;
buffer_batch.WriteMemory(p_gl_rend_st, buffer_batch_data);
p_gl_rend_st.write_uniform_buffer(buffer_batch, buffer_batch_data);
enum_and(flags, ~RENDER_DATA_BATCH_UPDATE);
}
@@ -767,11 +767,11 @@ void render_data_context::set_batch_worlds(const mat4& mat) {
void render_data_context::set_glitter_render_data_state() {
data.buffer_shader_data.set_shader_flags(data.shader_flags.arr);
data.buffer_shader.WriteMemory(state, data.buffer_shader_data);
state.write_uniform_buffer(data.buffer_shader, data.buffer_shader_data);
state.bind_uniform_buffer_base(0, data.buffer_shader);
if (data.flags & RENDER_DATA_SCENE_UPDATE) {
data.buffer_scene.WriteMemory(state, data.buffer_scene_data);
state.write_uniform_buffer(data.buffer_scene, data.buffer_scene_data);
enum_and(data.flags, ~RENDER_DATA_SCENE_UPDATE);
}
state.bind_uniform_buffer_base(1, data.buffer_scene);
@@ -1670,7 +1670,7 @@ void render_context::pre_proc() {
const size_t align = size - i.offset;
if (align)
memset((void*)((size_t)i.data + i.offset), 0, align);
i.buffer.WriteMemory(gl_state, 0, size, i.data);
gl_state.write_uniform_buffer(i.buffer, 0, size, i.data);
}
for (render_context::shared_uniform_buffer& i : shared_uniform_buffers) {
@@ -1681,7 +1681,7 @@ void render_context::pre_proc() {
const size_t align = size - i.offset;
if (align)
memset((void*)((size_t)i.data + i.offset), 0, align);
i.buffer.WriteMemory(gl_state, 0, size, i.data);
gl_state.write_uniform_buffer(i.buffer, 0, size, i.data);
}
for (render_context::texture_skinning_buffer& i : texture_skinning_buffers) {
+12 -12
View File
@@ -1204,7 +1204,7 @@ namespace rndr {
quad_shader_data quad_data = {};
quad_data.g_texcoord_modifier = { 0.5f, 0.5f, 0.5f, 0.5f };
rctx->quad_ubo.WriteMemory(rend_data_ctx.state, quad_data);
rend_data_ctx.state.write_uniform_buffer(rctx->quad_ubo, quad_data);
contour_params_shader_data contour_params_data = {};
const double_t max_distance = cam.get_max_distance();
@@ -1214,7 +1214,7 @@ namespace rndr {
(float_t)(-(max_distance * min_distance) * (1.0 / (max_distance - min_distance))),
(float_t)min_distance, (float_t)max_distance
};
rctx->contour_params_ubo.WriteMemory(rend_data_ctx.state, contour_params_data);
rend_data_ctx.state.write_uniform_buffer(rctx->contour_params_ubo, contour_params_data);
shaders_ft.set(rend_data_ctx.state, rend_data_ctx.shader_flags, SHADER_FT_CONTOUR_NPR);
rend_data_ctx.state.active_bind_texture_2d(14, rt->get_depth_texture_glid());
@@ -1271,13 +1271,13 @@ void image_filter_scale(render_data_context& rend_data_ctx,
image_filter_scene_shader_data filter_scene = {};
filter_scene.g_transform = { 1.0f, 1.0f, 0.0f, 0.0f };
filter_scene.g_texcoord = { 1.0f, 1.0f, 0.0f, 0.0f };
rctx->image_filter_scene_ubo.WriteMemory(rend_data_ctx.state, filter_scene);
rend_data_ctx.state.write_uniform_buffer(rctx->image_filter_scene_ubo, filter_scene);
image_filter_batch_shader_data image_filter_batch = {};
image_filter_batch.g_color_scale = scale;
image_filter_batch.g_color_offset = 0.0f;
image_filter_batch.g_texture_lod = 0.0f;
rctx->image_filter_batch_ubo.WriteMemory(rend_data_ctx.state, image_filter_batch);
rend_data_ctx.state.write_uniform_buffer(rctx->image_filter_batch_ubo, image_filter_batch);
rend_data_ctx.shader_flags.arr[U_IMAGE_FILTER] = 5;
shaders_ft.set(rend_data_ctx.state, rend_data_ctx.shader_flags, SHADER_FT_IMGFILT);
@@ -1421,7 +1421,7 @@ static void apply_esm_filter(render_data_context& rend_data_ctx,
esm_filter_scene_shader_data filter_scene = {};
filter_scene.g_transform = 0.0f;
filter_scene.g_texcoord = { 1.0f, 1.0f, 0.0f, 0.0f };
rctx->esm_filter_scene_ubo.WriteMemory(rend_data_ctx.state, filter_scene);
rend_data_ctx.state.write_uniform_buffer(rctx->esm_filter_scene_ubo, filter_scene);
esm_filter_batch_shader_data esm_filter_batch = {};
double_t v6 = 1.0 / (sqrt(M_PI * 2.0) * sigma);
@@ -1438,7 +1438,7 @@ static void apply_esm_filter(render_data_context& rend_data_ctx,
buf->begin_render(rend_data_ctx.state);
esm_filter_batch.g_params = { 1.0f / (float_t)dst_tex->width, 0.0f, far_texel_offset, far_texel_offset };
rctx->esm_filter_batch_ubo.WriteMemory(rend_data_ctx.state, esm_filter_batch);
rend_data_ctx.state.write_uniform_buffer(rctx->esm_filter_batch_ubo, esm_filter_batch);
rend_data_ctx.state.active_bind_texture_2d(0, src_tex->glid);
rend_data_ctx.state.bind_sampler(0, rctx->render_samplers[0]);
@@ -1447,7 +1447,7 @@ static void apply_esm_filter(render_data_context& rend_data_ctx,
dst->begin_render(rend_data_ctx.state);
esm_filter_batch.g_params = { 0.0f, 1.0f / (float_t)dst_tex->height, far_texel_offset, far_texel_offset };
rctx->esm_filter_batch_ubo.WriteMemory(rend_data_ctx.state, esm_filter_batch);
rend_data_ctx.state.write_uniform_buffer(rctx->esm_filter_batch_ubo, esm_filter_batch);
rend_data_ctx.state.active_bind_texture_2d(0, buf_tex->glid);
rend_data_ctx.state.bind_sampler(0, rctx->render_samplers[0]);
@@ -1474,7 +1474,7 @@ static void apply_esm_min_filter(render_data_context& rend_data_ctx,
esm_filter_scene_shader_data filter_scene = {};
filter_scene.g_transform = 0.0f;
filter_scene.g_texcoord = { 1.0f, 1.0f, 0.0f, 0.0f };
rctx->esm_filter_scene_ubo.WriteMemory(rend_data_ctx.state, filter_scene);
rend_data_ctx.state.write_uniform_buffer(rctx->esm_filter_scene_ubo, filter_scene);
esm_filter_batch_shader_data esm_filter_batch = {};
esm_filter_batch.g_gauss[0] = 0.0f;
@@ -1488,7 +1488,7 @@ static void apply_esm_min_filter(render_data_context& rend_data_ctx,
buf->begin_render(rend_data_ctx.state);
esm_filter_batch.g_params = { 1.0f / (float_t)src_tex->width,
1.0f / (float_t)src_tex->height, 0.0f, 0.0f };
rctx->esm_filter_batch_ubo.WriteMemory(rend_data_ctx.state, esm_filter_batch);
rend_data_ctx.state.write_uniform_buffer(rctx->esm_filter_batch_ubo, esm_filter_batch);
rend_data_ctx.shader_flags.arr[U_ESM_FILTER] = 0;
shaders_ft.set(rend_data_ctx.state, rend_data_ctx.shader_flags, SHADER_FT_ESMFILT);
@@ -1502,7 +1502,7 @@ static void apply_esm_min_filter(render_data_context& rend_data_ctx,
dst->begin_render(rend_data_ctx.state);
esm_filter_batch.g_params = { 0.75f / (float_t)buf_tex->width,
0.75f / (float_t)buf_tex->height, 0.0f, 0.0f };
rctx->esm_filter_batch_ubo.WriteMemory(rend_data_ctx.state, esm_filter_batch);
rend_data_ctx.state.write_uniform_buffer(rctx->esm_filter_batch_ubo, esm_filter_batch);
rend_data_ctx.shader_flags.arr[U_ESM_FILTER] = 1;
shaders_ft.set(rend_data_ctx.state, rend_data_ctx.shader_flags, SHADER_FT_ESMFILT);
@@ -1992,7 +1992,7 @@ static void apply_blur_filter_sub(render_data_context& rend_data_ctx, RenderText
float_t h = res_scale.y / (float_t)src->get_height();
filter_scene.g_transform = { w, h, 0.0f, 0.0f };
filter_scene.g_texcoord = { 1.0f, 1.0f, 0.0f, 0.0f };
rctx->image_filter_scene_ubo.WriteMemory(rend_data_ctx.state, filter_scene);
rend_data_ctx.state.write_uniform_buffer(rctx->image_filter_scene_ubo, filter_scene);
image_filter_batch_shader_data image_filter_batch = {};
if (filter == BLUR_FILTER_32)
@@ -2001,7 +2001,7 @@ static void apply_blur_filter_sub(render_data_context& rend_data_ctx, RenderText
image_filter_batch.g_color_scale = scale * (float_t)(1.0 / 4.0);
image_filter_batch.g_color_offset = offset;
image_filter_batch.g_texture_lod = 0.0f;
rctx->image_filter_batch_ubo.WriteMemory(rend_data_ctx.state, image_filter_batch);
rend_data_ctx.state.write_uniform_buffer(rctx->image_filter_batch_ubo, image_filter_batch);
rend_data_ctx.shader_flags.arr[U_IMAGE_FILTER] = filter == BLUR_FILTER_32 ? 1 : 0;
rend_data_ctx.state.bind_vertex_array(rctx->box_vao);
+1 -1
View File
@@ -386,7 +386,7 @@ namespace renderer {
shader_data.g_dof_param.y = dof_param_prefilter_tap_num;
shader_data.g_dof_param.z = dof_param_sample_division;
shader_data.g_dof_param.w = dof_param_upsample_tap_num;
common_ubo.WriteMemory(rend_data_ctx.state, shader_data);
rend_data_ctx.state.write_uniform_buffer(common_ubo, shader_data);
}
template <int32_t sample_division>
+1 -1
View File
@@ -42,7 +42,7 @@ namespace renderer {
void Transparency::combine(render_data_context& rend_data_ctx, RenderTexture* rt, float_t alpha) {
transparency_batch_shader_data shader_data = {};
shader_data.g_opacity = { alpha, 0.0f, 0.0f, 0.0f };
rctx_ptr->transparency_batch_ubo.WriteMemory(rend_data_ctx.state, shader_data);
rend_data_ctx.state.write_uniform_buffer(rctx_ptr->transparency_batch_ubo, shader_data);
rend_data_ctx.state.disable_blend();
rend_data_ctx.state.disable_depth_test();
+3 -3
View File
@@ -4331,8 +4331,8 @@ static void modify_cloth_object(obj_mesh* mesh, VertexBuffer* vb,
return;
vb->flip();
GL::ArrayBuffer glvb = vb->get_glvb();
size_t data = (size_t)glvb.MapMemory(gl_state);
GLuint glvb = vb->get_glvb();
size_t data = (size_t)gl_state.map_array_buffer(glvb);
if (!data)
return;
@@ -4468,5 +4468,5 @@ static void modify_cloth_object(obj_mesh* mesh, VertexBuffer* vb,
break;
}
glvb.UnmapMemory(gl_state);
gl_state.unmap_array_buffer(glvb);
}
+3 -3
View File
@@ -18110,8 +18110,8 @@ void rob_chara_age_age_object::disp(render_context* rctx, size_t id,
vb.flip();
GL::ArrayBuffer glvb = vb.get_glvb();
size_t vtx_data = (size_t)glvb.MapMemory(gl_state);
GLuint glvb = vb.get_glvb();
size_t vtx_data = (size_t)gl_state.map_array_buffer(glvb);
if (!vtx_data)
return;
@@ -18120,7 +18120,7 @@ void rob_chara_age_age_object::disp(render_context* rctx, size_t id,
memmove((void*)(vtx_data + vertex_array_size * i),
(void*)((size_t)vertex_data + vertex_array_size * v44[i].second), vertex_array_size);
glvb.UnmapMemory(gl_state);
gl_state.unmap_array_buffer(glvb);
mesh.num_vertex = disp_count * num_vertex;
sub_mesh.num_index = disp_count * num_index;
+1 -1
View File
@@ -2886,7 +2886,7 @@ static void glass_eye_set(p_gl_rend_state& p_gl_rend_st, glass_eye_struct* glass
glass_eye_batch.g_tex_scale.w = glass_eye->lens_depth;
extern render_context* rctx_ptr;
rctx_ptr->glass_eye_batch_ubo.WriteMemory(p_gl_rend_st, glass_eye_batch);
p_gl_rend_st.write_uniform_buffer(rctx_ptr->glass_eye_batch_ubo, glass_eye_batch);
p_gl_rend_st.bind_uniform_buffer_base(3, rctx_ptr->glass_eye_batch_ubo);
}
+3 -3
View File
@@ -1734,7 +1734,7 @@ namespace spr {
gl_state.bind_vertex_array(0);
}
vbo.WriteMemory(gl_state, 0, vertex_buffer.size(), vertex_buffer.data());
gl_state.write_element_array_buffer(vbo, 0, vertex_buffer.size(), vertex_buffer.data());
if (ebo_index_count < index_buffer.size()) {
while (ebo_index_count < index_buffer.size())
@@ -1753,7 +1753,7 @@ namespace spr {
gl_state.bind_element_array_buffer(0);
}
ebo.WriteMemory(gl_state, 0, sizeof(uint32_t) * index_buffer.size(), index_buffer.data());
gl_state.write_element_array_buffer(ebo, 0, sizeof(uint32_t) * index_buffer.size(), index_buffer.data());
gl_state.bind_array_buffer(0);
gl_state.bind_element_array_buffer(0);
@@ -1955,7 +1955,7 @@ namespace spr {
1.0f / (float_t)overlay_tex->height, 0.0f, 0.0f
};
mat4_transpose(&view_projection, &shader_data.g_transform);
rctx_ptr->sprite_scene_ubo.WriteMemory(rend_data_ctx.state, shader_data);
rend_data_ctx.state.write_uniform_buffer(rctx_ptr->sprite_scene_ubo, shader_data);
rend_data_ctx.state.bind_uniform_buffer_base(0, rctx_ptr->sprite_scene_ubo);
for (uint32_t j = SPR_PRIO_MAX; j; j--, obj_list++)
+1 -1
View File
@@ -78,7 +78,7 @@ void sss_data::apply_filter(struct render_data_context& rend_data_ctx) {
sss_calc_coef(1.0, sss_count, reflect_draw ? sss_inverse_scale_reflect : sss_inverse_scale,
3, weights, r_radius, g_radius, b_radius, shader_data.g_coef);
rctx->sss_filter_gaussian_coef_ubo.WriteMemory(rend_data_ctx.state, shader_data);
rend_data_ctx.state.write_uniform_buffer(rctx->sss_filter_gaussian_coef_ubo, shader_data);
textures[reflect_draw ? 3 : 1].begin_render(rend_data_ctx.state);
rend_data_ctx.state.set_viewport(0, 0, 320, 180);
rend_data_ctx.shader_flags.arr[U_SSS_FILTER] = 3;
+1 -1
View File
@@ -1242,7 +1242,7 @@ static void render_context_disp(render_context* rctx) {
shader_data.g_vp[3] = mat.row3;
shader_data.g_texture_lod.x = ibl_index == 1 ? 1.0f : 0.0f;
shader_data.g_texture_lod.y = 1.0f / (float_t)ibl_scale;
rctx_ptr->glitter_batch_ubo.WriteMemory(post_rend_data_ctx.state, shader_data);
post_rend_data_ctx.state.write_uniform_buffer(rctx_ptr->glitter_batch_ubo, shader_data);
post_rend_data_ctx.state.bind_uniform_buffer_base(3, rctx_ptr->glitter_batch_ubo);
shaders_dev.set(post_rend_data_ctx.state, post_rend_data_ctx.shader_flags, SHADER_DEV_CUBEMAP_DISPLAY);
+1 -1
View File
@@ -7969,7 +7969,7 @@ void x_pv_game::post() {
quad.g_color = 1.0f;
quad.g_texture_lod = 0.0f;
rctx_ptr->quad_ubo.WriteMemory(rend_data_ctx.state, quad);
rend_data_ctx.state.write_uniform_buffer(rctx_ptr->quad_ubo, quad);
rend_data_ctx.state.bind_uniform_buffer_base(0, rctx_ptr->quad_ubo);
rend_data_ctx.state.bind_vertex_array(rctx_ptr->common_vao);
rend_data_ctx.state.draw_arrays(GL_TRIANGLE_STRIP, 0, 4);