mirror of
https://github.com/korenkonder/ReDIVA.git
synced 2026-10-11 08:38:18 +03:00
Moved begin and end of Query and writes to Buffer to GL State
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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);
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user