mirror of
https://github.com/korenkonder/ReDIVA.git
synced 2026-10-10 16:18:35 +03:00
GL: Reworked Buffer (re)creation
This commit is contained in:
+63
-33
@@ -8,43 +8,66 @@
|
||||
#include "../gl_state.hpp"
|
||||
|
||||
namespace GL {
|
||||
void ArrayBuffer::Create(gl_state_struct& gl_st, size_t size) {
|
||||
if (buffer)
|
||||
void ArrayBuffer::Create(gl_state_struct& gl_st, size_t size, BufferUsage usage) {
|
||||
if (buffer || !BufferUsageCheck(usage, false))
|
||||
return;
|
||||
|
||||
if (usage != BUFFER_USAGE_STREAM) {
|
||||
if (GLAD_GL_VERSION_4_4) {
|
||||
GLbitfield flags = GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT;
|
||||
if (GLAD_GL_VERSION_4_5) {
|
||||
glCreateBuffers(1, &buffer);
|
||||
glNamedBufferStorage(buffer, (GLsizeiptr)size, 0, flags);
|
||||
}
|
||||
else {
|
||||
glGenBuffers(1, &buffer);
|
||||
gl_st.bind_array_buffer(buffer, true);
|
||||
glBufferStorage(GL_ARRAY_BUFFER, (GLsizeiptr)size, 0, flags);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (GLAD_GL_VERSION_4_5) {
|
||||
glCreateBuffers(1, &buffer);
|
||||
glNamedBufferStorage(buffer, (GLsizeiptr)size, 0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT);
|
||||
glNamedBufferData(buffer, (GLsizeiptr)size, 0, BufferUsageToGLenum(usage));
|
||||
}
|
||||
else {
|
||||
glGenBuffers(1, &buffer);
|
||||
gl_st.bind_array_buffer(buffer);
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_ARRAY_BUFFER, (GLsizeiptr)size,
|
||||
0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT);
|
||||
else
|
||||
glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)size, 0, GL_DYNAMIC_DRAW);
|
||||
gl_st.bind_array_buffer(buffer, true);
|
||||
glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)size, 0, BufferUsageToGLenum(usage));
|
||||
}
|
||||
}
|
||||
|
||||
void ArrayBuffer::Create(gl_state_struct& gl_st, size_t size, const void* data, bool dynamic) {
|
||||
if (buffer)
|
||||
void ArrayBuffer::Create(gl_state_struct& gl_st, size_t size, const void* data, BufferUsage usage) {
|
||||
if (buffer || !BufferUsageCheck(usage))
|
||||
return;
|
||||
|
||||
if (usage != BUFFER_USAGE_STREAM) {
|
||||
if (GLAD_GL_VERSION_4_4) {
|
||||
GLbitfield flags = usage == BUFFER_USAGE_DYNAMIC
|
||||
? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0;
|
||||
if (GLAD_GL_VERSION_4_5) {
|
||||
glCreateBuffers(1, &buffer);
|
||||
glNamedBufferStorage(buffer, (GLsizeiptr)size, data, flags);
|
||||
}
|
||||
else {
|
||||
glGenBuffers(1, &buffer);
|
||||
gl_st.bind_array_buffer(buffer, true);
|
||||
glBufferStorage(GL_ARRAY_BUFFER, (GLsizeiptr)size, data, flags);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (GLAD_GL_VERSION_4_5) {
|
||||
glCreateBuffers(1, &buffer);
|
||||
glNamedBufferStorage(buffer, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0);
|
||||
glNamedBufferData(buffer, (GLsizeiptr)size, data, BufferUsageToGLenum(usage));
|
||||
}
|
||||
else {
|
||||
glGenBuffers(1, &buffer);
|
||||
gl_st.bind_array_buffer(buffer);
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_ARRAY_BUFFER, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0);
|
||||
else
|
||||
glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW);
|
||||
gl_st.bind_array_buffer(buffer, true);
|
||||
glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)size, data, BufferUsageToGLenum(usage));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,32 +126,39 @@ namespace GL {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ArrayBuffer::Recreate(gl_state_struct& gl_st, size_t size) {
|
||||
if (GLAD_GL_VERSION_4_4) {
|
||||
void ArrayBuffer::Recreate(gl_state_struct& gl_st, size_t size, BufferUsage usage) {
|
||||
if (GLAD_GL_VERSION_4_4 && usage != BUFFER_USAGE_STREAM) {
|
||||
Destroy();
|
||||
Create(gl_st, size);
|
||||
Create(gl_st, size, usage);
|
||||
}
|
||||
else {
|
||||
if (!buffer)
|
||||
Create(gl_st, size);
|
||||
Create(gl_st, size, usage);
|
||||
|
||||
gl_st.bind_array_buffer(buffer, true);
|
||||
glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)size, 0, GL_DYNAMIC_DRAW);
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
glNamedBufferData(buffer, (GLsizeiptr)size, 0, BufferUsageToGLenum(usage));
|
||||
else {
|
||||
gl_st.bind_array_buffer(buffer);
|
||||
glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)size, 0, BufferUsageToGLenum(usage));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ArrayBuffer::Recreate(gl_state_struct& gl_st, size_t size, const void* data, bool dynamic) {
|
||||
if (GLAD_GL_VERSION_4_4) {
|
||||
void ArrayBuffer::Recreate(gl_state_struct& gl_st, size_t size, const void* data, BufferUsage usage) {
|
||||
if (GLAD_GL_VERSION_4_4 && usage != BUFFER_USAGE_STREAM) {
|
||||
Destroy();
|
||||
Create(gl_st, size, data, dynamic);
|
||||
Create(gl_st, size, data, usage);
|
||||
}
|
||||
else {
|
||||
if (!buffer)
|
||||
Create(gl_st, size);
|
||||
Create(gl_st, size, data, usage);
|
||||
|
||||
gl_st.bind_array_buffer(buffer, true);
|
||||
glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW);
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
glNamedBufferData(buffer, (GLsizeiptr)size, data, BufferUsageToGLenum(usage));
|
||||
else {
|
||||
gl_st.bind_array_buffer(buffer);
|
||||
glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)size, data, BufferUsageToGLenum(usage));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
#include "../../KKdLib/default.hpp"
|
||||
#include "../gl.hpp"
|
||||
#include "buffer.hpp"
|
||||
|
||||
struct gl_state_struct;
|
||||
struct p_gl_rend_state;
|
||||
@@ -29,13 +30,13 @@ namespace GL {
|
||||
|
||||
}
|
||||
|
||||
void Create(gl_state_struct& gl_st, size_t size);
|
||||
void Create(gl_state_struct& gl_st, size_t size, const void* data, bool dynamic = false);
|
||||
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);
|
||||
void Recreate(gl_state_struct& gl_st, size_t size, const void* data, bool dynamic = false);
|
||||
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);
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
by korenkonder
|
||||
GitHub/GitLab: korenkonder
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "../../KKdLib/default.hpp"
|
||||
#include "../gl.hpp"
|
||||
|
||||
namespace GL {
|
||||
enum BufferUsage {
|
||||
BUFFER_USAGE_STREAM = 0,
|
||||
BUFFER_USAGE_STATIC,
|
||||
BUFFER_USAGE_DYNAMIC,
|
||||
};
|
||||
|
||||
inline GLenum BufferUsageToGLenum(const BufferUsage usage) {
|
||||
if (usage == BUFFER_USAGE_STREAM)
|
||||
return GL_STREAM_DRAW;
|
||||
else if (usage == BUFFER_USAGE_STATIC)
|
||||
return GL_STATIC_DRAW;
|
||||
else if (usage == BUFFER_USAGE_DYNAMIC)
|
||||
return GL_DYNAMIC_DRAW;
|
||||
else
|
||||
return GL_NONE;
|
||||
}
|
||||
|
||||
inline bool BufferUsageCheck(const BufferUsage usage, bool with_static = true) {
|
||||
return usage == BUFFER_USAGE_STREAM || with_static && usage == BUFFER_USAGE_STATIC
|
||||
|| usage == BUFFER_USAGE_DYNAMIC;
|
||||
}
|
||||
}
|
||||
@@ -8,43 +8,66 @@
|
||||
#include "../gl_state.hpp"
|
||||
|
||||
namespace GL {
|
||||
void ElementArrayBuffer::Create(gl_state_struct& gl_st, size_t size) {
|
||||
if (buffer)
|
||||
void ElementArrayBuffer::Create(gl_state_struct& gl_st, size_t size, BufferUsage usage) {
|
||||
if (buffer || !BufferUsageCheck(usage, false))
|
||||
return;
|
||||
|
||||
if (usage != BUFFER_USAGE_STREAM) {
|
||||
if (GLAD_GL_VERSION_4_4) {
|
||||
GLbitfield flags = GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT;
|
||||
if (GLAD_GL_VERSION_4_5) {
|
||||
glCreateBuffers(1, &buffer);
|
||||
glNamedBufferStorage(buffer, (GLsizeiptr)size, 0, flags);
|
||||
}
|
||||
else {
|
||||
glGenBuffers(1, &buffer);
|
||||
gl_st.bind_element_array_buffer(buffer, true);
|
||||
glBufferStorage(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)size, 0, flags);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (GLAD_GL_VERSION_4_5) {
|
||||
glCreateBuffers(1, &buffer);
|
||||
glNamedBufferStorage(buffer, (GLsizeiptr)size, 0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT);
|
||||
glNamedBufferData(buffer, (GLsizeiptr)size, 0, BufferUsageToGLenum(usage));
|
||||
}
|
||||
else {
|
||||
glGenBuffers(1, &buffer);
|
||||
gl_st.bind_element_array_buffer(buffer, true);
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)size,
|
||||
0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT);
|
||||
else
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)size, 0, GL_DYNAMIC_DRAW);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)size, 0, BufferUsageToGLenum(usage));
|
||||
}
|
||||
}
|
||||
|
||||
void ElementArrayBuffer::Create(gl_state_struct& gl_st, size_t size, const void* data, bool dynamic) {
|
||||
if (buffer)
|
||||
void ElementArrayBuffer::Create(gl_state_struct& gl_st, size_t size, const void* data, BufferUsage usage) {
|
||||
if (buffer || !BufferUsageCheck(usage))
|
||||
return;
|
||||
|
||||
if (usage != BUFFER_USAGE_STREAM) {
|
||||
if (GLAD_GL_VERSION_4_4) {
|
||||
GLbitfield flags = usage == BUFFER_USAGE_DYNAMIC
|
||||
? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0;
|
||||
if (GLAD_GL_VERSION_4_5) {
|
||||
glCreateBuffers(1, &buffer);
|
||||
glNamedBufferStorage(buffer, (GLsizeiptr)size, data, flags);
|
||||
}
|
||||
else {
|
||||
glGenBuffers(1, &buffer);
|
||||
gl_st.bind_element_array_buffer(buffer, true);
|
||||
glBufferStorage(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)size, data, flags);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (GLAD_GL_VERSION_4_5) {
|
||||
glCreateBuffers(1, &buffer);
|
||||
glNamedBufferStorage(buffer, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0);
|
||||
glNamedBufferData(buffer, (GLsizeiptr)size, data, BufferUsageToGLenum(usage));
|
||||
}
|
||||
else {
|
||||
glGenBuffers(1, &buffer);
|
||||
gl_st.bind_element_array_buffer(buffer, true);
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0);
|
||||
else
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)size, data, BufferUsageToGLenum(usage));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,32 +126,39 @@ namespace GL {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ElementArrayBuffer::Recreate(gl_state_struct& gl_st, size_t size) {
|
||||
if (GLAD_GL_VERSION_4_4) {
|
||||
void ElementArrayBuffer::Recreate(gl_state_struct& gl_st, size_t size, BufferUsage usage) {
|
||||
if (GLAD_GL_VERSION_4_4 && usage != BUFFER_USAGE_STREAM) {
|
||||
Destroy();
|
||||
Create(gl_st, size);
|
||||
Create(gl_st, size, usage);
|
||||
}
|
||||
else {
|
||||
if (!buffer)
|
||||
Create(gl_st, size);
|
||||
Create(gl_st, size, usage);
|
||||
|
||||
gl_st.bind_element_array_buffer(buffer, true);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)size, 0, GL_DYNAMIC_DRAW);
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
glNamedBufferData(buffer, (GLsizeiptr)size, 0, BufferUsageToGLenum(usage));
|
||||
else {
|
||||
gl_st.bind_element_array_buffer(buffer);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)size, 0, BufferUsageToGLenum(usage));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ElementArrayBuffer::Recreate(gl_state_struct& gl_st, size_t size, const void* data, bool dynamic) {
|
||||
if (GLAD_GL_VERSION_4_4) {
|
||||
void ElementArrayBuffer::Recreate(gl_state_struct& gl_st, size_t size, const void* data, BufferUsage usage) {
|
||||
if (GLAD_GL_VERSION_4_4 && usage != BUFFER_USAGE_STREAM) {
|
||||
Destroy();
|
||||
Create(gl_st, size, data, dynamic);
|
||||
Create(gl_st, size, data, usage);
|
||||
}
|
||||
else {
|
||||
if (!buffer)
|
||||
Create(gl_st, size);
|
||||
Create(gl_st, size, data, usage);
|
||||
|
||||
gl_st.bind_element_array_buffer(buffer, true);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW);
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
glNamedBufferData(buffer, (GLsizeiptr)size, data, BufferUsageToGLenum(usage));
|
||||
else {
|
||||
gl_st.bind_element_array_buffer(buffer);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)size, data, BufferUsageToGLenum(usage));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
#include "../../KKdLib/default.hpp"
|
||||
#include "../gl.hpp"
|
||||
#include "buffer.hpp"
|
||||
|
||||
struct gl_state_struct;
|
||||
struct p_gl_rend_state;
|
||||
@@ -29,13 +30,13 @@ namespace GL {
|
||||
|
||||
}
|
||||
|
||||
void Create(gl_state_struct& gl_st, size_t size);
|
||||
void Create(gl_state_struct& gl_st, size_t size, const void* data, bool dynamic = false);
|
||||
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);
|
||||
void Recreate(gl_state_struct& gl_st, size_t size, const void* data, bool dynamic = false);
|
||||
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);
|
||||
|
||||
@@ -8,43 +8,66 @@
|
||||
#include "../gl_state.hpp"
|
||||
|
||||
namespace GL {
|
||||
void ShaderStorageBuffer::Create(gl_state_struct& gl_st, size_t size) {
|
||||
if (buffer)
|
||||
void ShaderStorageBuffer::Create(gl_state_struct& gl_st, size_t size, BufferUsage usage) {
|
||||
if (buffer || !BufferUsageCheck(usage, false))
|
||||
return;
|
||||
|
||||
if (usage != BUFFER_USAGE_STREAM) {
|
||||
if (GLAD_GL_VERSION_4_4) {
|
||||
GLbitfield flags = GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT;
|
||||
if (GLAD_GL_VERSION_4_5) {
|
||||
glCreateBuffers(1, &buffer);
|
||||
glNamedBufferStorage(buffer, (GLsizeiptr)size, 0, flags);
|
||||
}
|
||||
else {
|
||||
glGenBuffers(1, &buffer);
|
||||
gl_st.bind_shader_storage_buffer(buffer, true);
|
||||
glBufferStorage(GL_SHADER_STORAGE_BUFFER, (GLsizeiptr)size, 0, flags);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (GLAD_GL_VERSION_4_5) {
|
||||
glCreateBuffers(1, &buffer);
|
||||
glNamedBufferStorage(buffer, (GLsizeiptr)size, 0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT);
|
||||
glNamedBufferData(buffer, (GLsizeiptr)size, 0, BufferUsageToGLenum(usage));
|
||||
}
|
||||
else {
|
||||
glGenBuffers(1, &buffer);
|
||||
gl_st.bind_shader_storage_buffer(buffer, true);
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_SHADER_STORAGE_BUFFER, (GLsizeiptr)size,
|
||||
0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT);
|
||||
else
|
||||
glBufferData(GL_SHADER_STORAGE_BUFFER, (GLsizeiptr)size, 0, GL_DYNAMIC_DRAW);
|
||||
glBufferData(GL_SHADER_STORAGE_BUFFER, (GLsizeiptr)size, 0, BufferUsageToGLenum(usage));
|
||||
}
|
||||
}
|
||||
|
||||
void ShaderStorageBuffer::Create(gl_state_struct& gl_st, size_t size, const void* data, bool dynamic) {
|
||||
if (buffer)
|
||||
void ShaderStorageBuffer::Create(gl_state_struct& gl_st, size_t size, const void* data, BufferUsage usage) {
|
||||
if (buffer || !BufferUsageCheck(usage))
|
||||
return;
|
||||
|
||||
if (usage != BUFFER_USAGE_STREAM) {
|
||||
if (GLAD_GL_VERSION_4_4) {
|
||||
GLbitfield flags = usage == BUFFER_USAGE_DYNAMIC
|
||||
? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0;
|
||||
if (GLAD_GL_VERSION_4_5) {
|
||||
glCreateBuffers(1, &buffer);
|
||||
glNamedBufferStorage(buffer, (GLsizeiptr)size, data, flags);
|
||||
}
|
||||
else {
|
||||
glGenBuffers(1, &buffer);
|
||||
gl_st.bind_shader_storage_buffer(buffer, true);
|
||||
glBufferStorage(GL_SHADER_STORAGE_BUFFER, (GLsizeiptr)size, data, flags);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (GLAD_GL_VERSION_4_5) {
|
||||
glCreateBuffers(1, &buffer);
|
||||
glNamedBufferStorage(buffer, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0);
|
||||
glNamedBufferData(buffer, (GLsizeiptr)size, data, BufferUsageToGLenum(usage));
|
||||
}
|
||||
else {
|
||||
glGenBuffers(1, &buffer);
|
||||
gl_st.bind_shader_storage_buffer(buffer, true);
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_SHADER_STORAGE_BUFFER, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0);
|
||||
else
|
||||
glBufferData(GL_SHADER_STORAGE_BUFFER, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW);
|
||||
glBufferData(GL_SHADER_STORAGE_BUFFER, (GLsizeiptr)size, data, BufferUsageToGLenum(usage));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,32 +126,39 @@ namespace GL {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ShaderStorageBuffer::Recreate(gl_state_struct& gl_st, size_t size) {
|
||||
if (GLAD_GL_VERSION_4_4) {
|
||||
void ShaderStorageBuffer::Recreate(gl_state_struct& gl_st, size_t size, BufferUsage usage) {
|
||||
if (GLAD_GL_VERSION_4_4 && usage != BUFFER_USAGE_STREAM) {
|
||||
Destroy();
|
||||
Create(gl_st, size);
|
||||
Create(gl_st, size, usage);
|
||||
}
|
||||
else {
|
||||
if (!buffer)
|
||||
Create(gl_st, size);
|
||||
Create(gl_st, size, usage);
|
||||
|
||||
gl_st.bind_shader_storage_buffer(buffer, true);
|
||||
glBufferData(GL_SHADER_STORAGE_BUFFER, (GLsizeiptr)size, 0, GL_DYNAMIC_DRAW);
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
glNamedBufferData(buffer, (GLsizeiptr)size, 0, BufferUsageToGLenum(usage));
|
||||
else {
|
||||
gl_st.bind_shader_storage_buffer(buffer);
|
||||
glBufferData(GL_SHADER_STORAGE_BUFFER, (GLsizeiptr)size, 0, BufferUsageToGLenum(usage));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ShaderStorageBuffer::Recreate(gl_state_struct& gl_st, size_t size, const void* data, bool dynamic) {
|
||||
if (GLAD_GL_VERSION_4_4) {
|
||||
void ShaderStorageBuffer::Recreate(gl_state_struct& gl_st, size_t size, const void* data, BufferUsage usage) {
|
||||
if (GLAD_GL_VERSION_4_4 && usage != BUFFER_USAGE_STREAM) {
|
||||
Destroy();
|
||||
Create(gl_st, size, data, dynamic);
|
||||
Create(gl_st, size, data, usage);
|
||||
}
|
||||
else {
|
||||
if (!buffer)
|
||||
Create(gl_st, size);
|
||||
Create(gl_st, size, data, usage);
|
||||
|
||||
gl_st.bind_shader_storage_buffer(buffer, true);
|
||||
glBufferData(GL_SHADER_STORAGE_BUFFER, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW);
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
glNamedBufferData(buffer, (GLsizeiptr)size, data, BufferUsageToGLenum(usage));
|
||||
else {
|
||||
gl_st.bind_shader_storage_buffer(buffer);
|
||||
glBufferData(GL_SHADER_STORAGE_BUFFER, (GLsizeiptr)size, data, BufferUsageToGLenum(usage));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
#include "../../KKdLib/default.hpp"
|
||||
#include "../gl.hpp"
|
||||
#include "buffer.hpp"
|
||||
|
||||
struct gl_state_struct;
|
||||
struct p_gl_rend_state;
|
||||
@@ -29,13 +30,13 @@ namespace GL {
|
||||
|
||||
}
|
||||
|
||||
void Create(gl_state_struct& gl_st, size_t size);
|
||||
void Create(gl_state_struct& gl_st, size_t size, const void* data, bool dynamic = false);
|
||||
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);
|
||||
void Recreate(gl_state_struct& gl_st, size_t size, const void* data, bool dynamic = false);
|
||||
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);
|
||||
|
||||
@@ -8,43 +8,66 @@
|
||||
#include "../gl_state.hpp"
|
||||
|
||||
namespace GL {
|
||||
void UniformBuffer::Create(gl_state_struct& gl_st, size_t size) {
|
||||
if (buffer)
|
||||
void UniformBuffer::Create(gl_state_struct& gl_st, size_t size, BufferUsage usage) {
|
||||
if (buffer || !BufferUsageCheck(usage, false))
|
||||
return;
|
||||
|
||||
if (usage != BUFFER_USAGE_STREAM) {
|
||||
if (GLAD_GL_VERSION_4_4) {
|
||||
GLbitfield flags = GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT;
|
||||
if (GLAD_GL_VERSION_4_5) {
|
||||
glCreateBuffers(1, &buffer);
|
||||
glNamedBufferStorage(buffer, (GLsizeiptr)size, 0, flags);
|
||||
}
|
||||
else {
|
||||
glGenBuffers(1, &buffer);
|
||||
gl_st.bind_uniform_buffer(buffer, true);
|
||||
glBufferStorage(GL_UNIFORM_BUFFER, (GLsizeiptr)size, 0, flags);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (GLAD_GL_VERSION_4_5) {
|
||||
glCreateBuffers(1, &buffer);
|
||||
glNamedBufferStorage(buffer, (GLsizeiptr)size, 0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT);
|
||||
glNamedBufferData(buffer, (GLsizeiptr)size, 0, BufferUsageToGLenum(usage));
|
||||
}
|
||||
else {
|
||||
glGenBuffers(1, &buffer);
|
||||
gl_st.bind_uniform_buffer(buffer, true);
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_UNIFORM_BUFFER, (GLsizeiptr)size,
|
||||
0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT);
|
||||
else
|
||||
glBufferData(GL_UNIFORM_BUFFER, (GLsizeiptr)size, 0, GL_DYNAMIC_DRAW);
|
||||
glBufferData(GL_UNIFORM_BUFFER, (GLsizeiptr)size, 0, BufferUsageToGLenum(usage));
|
||||
}
|
||||
}
|
||||
|
||||
void UniformBuffer::Create(gl_state_struct& gl_st, size_t size, const void* data, bool dynamic) {
|
||||
if (buffer)
|
||||
void UniformBuffer::Create(gl_state_struct& gl_st, size_t size, const void* data, BufferUsage usage) {
|
||||
if (buffer || !BufferUsageCheck(usage))
|
||||
return;
|
||||
|
||||
if (usage != BUFFER_USAGE_STREAM) {
|
||||
if (GLAD_GL_VERSION_4_4) {
|
||||
GLbitfield flags = usage == BUFFER_USAGE_DYNAMIC
|
||||
? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0;
|
||||
if (GLAD_GL_VERSION_4_5) {
|
||||
glCreateBuffers(1, &buffer);
|
||||
glNamedBufferStorage(buffer, (GLsizeiptr)size, data, flags);
|
||||
}
|
||||
else {
|
||||
glGenBuffers(1, &buffer);
|
||||
gl_st.bind_uniform_buffer(buffer, true);
|
||||
glBufferStorage(GL_UNIFORM_BUFFER, (GLsizeiptr)size, data, flags);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (GLAD_GL_VERSION_4_5) {
|
||||
glCreateBuffers(1, &buffer);
|
||||
glNamedBufferStorage(buffer, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0);
|
||||
glNamedBufferData(buffer, (GLsizeiptr)size, data, BufferUsageToGLenum(usage));
|
||||
}
|
||||
else {
|
||||
glGenBuffers(1, &buffer);
|
||||
gl_st.bind_uniform_buffer(buffer, true);
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_UNIFORM_BUFFER, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0);
|
||||
else
|
||||
glBufferData(GL_UNIFORM_BUFFER, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW);
|
||||
glBufferData(GL_UNIFORM_BUFFER, (GLsizeiptr)size, data, BufferUsageToGLenum(usage));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,32 +126,39 @@ namespace GL {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void UniformBuffer::Recreate(gl_state_struct& gl_st, size_t size) {
|
||||
if (GLAD_GL_VERSION_4_4) {
|
||||
void UniformBuffer::Recreate(gl_state_struct& gl_st, size_t size, BufferUsage usage) {
|
||||
if (GLAD_GL_VERSION_4_4 && usage != BUFFER_USAGE_STREAM) {
|
||||
Destroy();
|
||||
Create(gl_st, size);
|
||||
Create(gl_st, size, usage);
|
||||
}
|
||||
else {
|
||||
if (!buffer)
|
||||
Create(gl_st, size);
|
||||
Create(gl_st, size, usage);
|
||||
|
||||
gl_st.bind_uniform_buffer(buffer, true);
|
||||
glBufferData(GL_UNIFORM_BUFFER, (GLsizeiptr)size, 0, GL_DYNAMIC_DRAW);
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
glNamedBufferData(buffer, (GLsizeiptr)size, 0, BufferUsageToGLenum(usage));
|
||||
else {
|
||||
gl_st.bind_uniform_buffer(buffer);
|
||||
glBufferData(GL_UNIFORM_BUFFER, (GLsizeiptr)size, 0, usage);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UniformBuffer::Recreate(gl_state_struct& gl_st, size_t size, const void* data, bool dynamic) {
|
||||
if (GLAD_GL_VERSION_4_4) {
|
||||
void UniformBuffer::Recreate(gl_state_struct& gl_st, size_t size, const void* data, BufferUsage usage) {
|
||||
if (GLAD_GL_VERSION_4_4 && usage != BUFFER_USAGE_STREAM) {
|
||||
Destroy();
|
||||
Create(gl_st, size, data, dynamic);
|
||||
Create(gl_st, size, data, usage);
|
||||
}
|
||||
else {
|
||||
if (!buffer)
|
||||
Create(gl_st, size);
|
||||
Create(gl_st, size, data, usage);
|
||||
|
||||
gl_st.bind_uniform_buffer(buffer, true);
|
||||
glBufferData(GL_UNIFORM_BUFFER, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW);
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
glNamedBufferData(buffer, (GLsizeiptr)size, data, BufferUsageToGLenum(usage));
|
||||
else {
|
||||
gl_st.bind_uniform_buffer(buffer);
|
||||
glBufferData(GL_UNIFORM_BUFFER, (GLsizeiptr)size, data, BufferUsageToGLenum(usage));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
#include "../../KKdLib/default.hpp"
|
||||
#include "../gl.hpp"
|
||||
#include "buffer.hpp"
|
||||
|
||||
struct gl_state_struct;
|
||||
struct p_gl_rend_state;
|
||||
@@ -29,13 +30,13 @@ namespace GL {
|
||||
|
||||
}
|
||||
|
||||
void Create(gl_state_struct& gl_st, size_t size);
|
||||
void Create(gl_state_struct& gl_st, size_t size, const void* data, bool dynamic = false);
|
||||
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);
|
||||
void Recreate(gl_state_struct& gl_st, size_t size, const void* data, bool dynamic = false);
|
||||
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);
|
||||
|
||||
+8
-8
@@ -43,9 +43,9 @@ struct EffectStorage {
|
||||
}
|
||||
|
||||
void Create(gl_state_struct& gl_st, size_t size, size_t count,
|
||||
const EffectStorageAttrib* attribs);
|
||||
const EffectStorageAttrib* attribs, GL::BufferUsage usage = GL::BUFFER_USAGE_STREAM);
|
||||
void Create(gl_state_struct& gl_st, size_t size, size_t count,
|
||||
const EffectStorageAttrib* attribs, const void* data, bool dynamic = false);
|
||||
const EffectStorageAttrib* attribs, const void* data, GL::BufferUsage usage = GL::BUFFER_USAGE_STATIC);
|
||||
void Destroy();
|
||||
|
||||
inline void Bind(p_gl_rend_state& p_gl_rend_st, int32_t index) {
|
||||
@@ -1767,9 +1767,9 @@ bool effect_manager_unload() {
|
||||
}
|
||||
|
||||
void EffectStorage::Create(gl_state_struct& gl_st, size_t size, size_t count,
|
||||
const EffectStorageAttrib* attribs) {
|
||||
const EffectStorageAttrib* attribs, GL::BufferUsage usage) {
|
||||
if (GLAD_GL_VERSION_4_3) {
|
||||
ssbo.Create(gl_st, size * count);
|
||||
ssbo.Create(gl_st, size * count, usage);
|
||||
return;
|
||||
}
|
||||
else if (vao || !attribs)
|
||||
@@ -1778,7 +1778,7 @@ void EffectStorage::Create(gl_state_struct& gl_st, size_t size, size_t count,
|
||||
glGenVertexArrays(1, &vao);
|
||||
gl_st.bind_vertex_array(vao, true);
|
||||
|
||||
vbo.Create(gl_st, size * count);
|
||||
vbo.Create(gl_st, size * count, usage);
|
||||
gl_st.bind_array_buffer(vbo, true);
|
||||
|
||||
const EffectStorageAttrib* attrib = attribs;
|
||||
@@ -1795,9 +1795,9 @@ void EffectStorage::Create(gl_state_struct& gl_st, size_t size, size_t count,
|
||||
}
|
||||
|
||||
void EffectStorage::Create(gl_state_struct& gl_st, size_t size, size_t count,
|
||||
const EffectStorageAttrib* attribs, const void* data, bool dynamic) {
|
||||
const EffectStorageAttrib* attribs, const void* data, GL::BufferUsage usage) {
|
||||
if (GLAD_GL_VERSION_4_3) {
|
||||
ssbo.Create(gl_st, size * count, data, dynamic);
|
||||
ssbo.Create(gl_st, size * count, data, usage);
|
||||
return;
|
||||
}
|
||||
else if (vao || !attribs)
|
||||
@@ -1806,7 +1806,7 @@ void EffectStorage::Create(gl_state_struct& gl_st, size_t size, size_t count,
|
||||
glGenVertexArrays(1, &vao);
|
||||
gl_st.bind_vertex_array(vao, true);
|
||||
|
||||
vbo.Create(gl_st, size * count, data, true);
|
||||
vbo.Create(gl_st, size * count, data, usage);
|
||||
gl_st.bind_array_buffer(vbo, true);
|
||||
|
||||
const EffectStorageAttrib* attrib = attribs;
|
||||
|
||||
+12
-11
@@ -29,7 +29,7 @@ struct BufObjMgr {
|
||||
};
|
||||
|
||||
static GLuint create_index_buffer(size_t size, const void* data);
|
||||
static GLuint create_vertex_buffer(size_t size, const void* data, bool dynamic = false);
|
||||
static GLuint create_vertex_buffer(size_t size, const void* data, GL::BufferUsage usage = GL::BUFFER_USAGE_STATIC);
|
||||
static void free_index_buffer(GLuint buffer);
|
||||
static void free_vertex_buffer(GLuint buffer);
|
||||
|
||||
@@ -171,7 +171,7 @@ GLsizeiptr obj_mesh_vertex_buffer::get_size() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool obj_mesh_vertex_buffer::load(obj_mesh& mesh, bool dynamic) {
|
||||
bool obj_mesh_vertex_buffer::load(obj_mesh& mesh, GL::BufferUsage usage) {
|
||||
if (!mesh.num_vertex || !mesh.vertex_array)
|
||||
return false;
|
||||
|
||||
@@ -194,12 +194,12 @@ bool obj_mesh_vertex_buffer::load(obj_mesh& mesh, bool dynamic) {
|
||||
mesh.size_vertex = size_vertex;
|
||||
|
||||
bool ret = load_data((size_t)size_vertex * mesh.num_vertex,
|
||||
vertex, mesh.attrib.m.double_buffer ? 2 : 1, dynamic);
|
||||
vertex, mesh.attrib.m.double_buffer ? 2 : 1, usage);
|
||||
free_def(vertex);
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool obj_mesh_vertex_buffer::load_data(size_t size, const void* data, int32_t count, bool dynamic) {
|
||||
bool obj_mesh_vertex_buffer::load_data(size_t size, const void* data, int32_t count, GL::BufferUsage usage) {
|
||||
if (!size || count > 3)
|
||||
return false;
|
||||
|
||||
@@ -210,7 +210,7 @@ bool obj_mesh_vertex_buffer::load_data(size_t size, const void* data, int32_t co
|
||||
#endif
|
||||
|
||||
for (int32_t i = 0; i < count; i++) {
|
||||
buffers[i] = create_vertex_buffer(size, data, dynamic);
|
||||
buffers[i] = create_vertex_buffer(size, data, usage);
|
||||
if (!buffers[i]) {
|
||||
unload();
|
||||
return false;
|
||||
@@ -2433,16 +2433,17 @@ static GLuint create_index_buffer(size_t size, const void* data) {
|
||||
return buffer;
|
||||
}
|
||||
|
||||
static GLuint create_vertex_buffer(size_t size, const void* data, bool dynamic) {
|
||||
static GLuint create_vertex_buffer(size_t size, const void* data, GL::BufferUsage usage) {
|
||||
GLuint buffer = 0;
|
||||
glGenBuffers(1, &buffer);
|
||||
gl_state.bind_array_buffer(buffer);
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_ARRAY_BUFFER, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0);
|
||||
if (GLAD_GL_VERSION_4_4 && usage != GL::BUFFER_USAGE_STREAM) {
|
||||
GLbitfield flags = usage == GL::BUFFER_USAGE_DYNAMIC
|
||||
? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0;
|
||||
glBufferStorage(GL_ARRAY_BUFFER, (GLsizeiptr)size, data, flags);
|
||||
}
|
||||
else
|
||||
glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW);
|
||||
glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)size, data, BufferUsageToGLenum(usage));
|
||||
gl_state.bind_array_buffer(0);
|
||||
|
||||
if (glGetError()) {
|
||||
|
||||
+3
-2
@@ -13,6 +13,7 @@
|
||||
#include "../KKdLib/obj.hpp"
|
||||
#include "../KKdLib/txp.hpp"
|
||||
#include "../KKdLib/vec.hpp"
|
||||
#include "GL/buffer.hpp"
|
||||
#include "file_handler.hpp"
|
||||
#include "static_var.hpp"
|
||||
#include "texture.hpp"
|
||||
@@ -46,8 +47,8 @@ struct obj_mesh_vertex_buffer {
|
||||
GLuint get_buffer();
|
||||
size_t get_offset();
|
||||
GLsizeiptr get_size();
|
||||
bool load(obj_mesh& mesh, bool dynamic = false);
|
||||
bool load_data(size_t size, const void* data, int32_t count, bool dynamic);
|
||||
bool load(obj_mesh& mesh, GL::BufferUsage usage = GL::BUFFER_USAGE_STATIC);
|
||||
bool load_data(size_t size, const void* data, int32_t count, GL::BufferUsage usage = GL::BUFFER_USAGE_STATIC);
|
||||
void unload();
|
||||
|
||||
static void* fill_data(void* data, obj_mesh& mesh);
|
||||
|
||||
@@ -1626,14 +1626,14 @@ void RobCloth::InitData(size_t root_count, size_t nodes_count, obj_skin_block_cl
|
||||
}
|
||||
|
||||
this->index_buffer[0] = index_buffer[mesh_name_index];
|
||||
if (!vertex_buffer[0].load(mesh[0], true))
|
||||
if (!vertex_buffer[0].load(mesh[0], GL::BUFFER_USAGE_STREAM))
|
||||
return;
|
||||
|
||||
this->index_buffer[1] = {};
|
||||
if (cls_data->backface_mesh_name && backface_mesh_name_index != -1)
|
||||
this->index_buffer[1] = index_buffer[backface_mesh_name_index];
|
||||
|
||||
if (cls_data->backface_mesh_name && !vertex_buffer[1].load(mesh[1], true))
|
||||
if (cls_data->backface_mesh_name && !vertex_buffer[1].load(mesh[1], GL::BUFFER_USAGE_STREAM))
|
||||
return;
|
||||
|
||||
flags = (((flags ^ (0x04 * loop)) & 0x04) ^ flags) | 0x03;
|
||||
|
||||
+1
-1
@@ -18838,7 +18838,7 @@ void rob_chara_age_age_object::load(object_info obj_info, int32_t count) {
|
||||
vtx_data->texcoord = vertex_array[k].texcoord0;
|
||||
}
|
||||
|
||||
obj_vert_buf.load_data(vertex_data_size, vertex_data, 2, true);
|
||||
obj_vert_buf.load_data(vertex_data_size, vertex_data, 2, GL::BUFFER_USAGE_STREAM);
|
||||
|
||||
this->num_index = num_index + 1;
|
||||
int32_t num_idx_data = (int32_t)(count * (num_index + 1));
|
||||
|
||||
Reference in New Issue
Block a user