mirror of
https://github.com/korenkonder/ReDIVA.git
synced 2026-10-11 16:48:24 +03:00
Added wrappers for VBO and EBO
This commit is contained in:
@@ -0,0 +1,141 @@
|
||||
/*
|
||||
by korenkonder
|
||||
GitHub/GitLab: korenkonder
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include <glad/glad.h>
|
||||
#include "../gl_state.hpp"
|
||||
|
||||
namespace GL {
|
||||
struct ArrayBuffer {
|
||||
private:
|
||||
GLuint buffer;
|
||||
|
||||
public:
|
||||
inline ArrayBuffer() : buffer() {
|
||||
|
||||
}
|
||||
|
||||
inline ~ArrayBuffer() {
|
||||
|
||||
}
|
||||
|
||||
inline void Bind(bool force = false) {
|
||||
gl_state_bind_array_buffer(buffer, force);
|
||||
}
|
||||
|
||||
inline void Create(size_t size) {
|
||||
if (buffer)
|
||||
return;
|
||||
|
||||
if (GLAD_GL_VERSION_4_5) {
|
||||
glCreateBuffers(1, &buffer);
|
||||
glNamedBufferStorage(buffer, (GLsizeiptr)size, 0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT);
|
||||
}
|
||||
else {
|
||||
glGenBuffers(1, &buffer);
|
||||
gl_state_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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
inline void Create(size_t size, const void* data, bool dynamic = false) {
|
||||
if (buffer)
|
||||
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);
|
||||
}
|
||||
else {
|
||||
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);
|
||||
else
|
||||
glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW);
|
||||
}
|
||||
}
|
||||
|
||||
inline void Destroy() {
|
||||
if (buffer) {
|
||||
glDeleteBuffers(1, &buffer);
|
||||
buffer = 0;
|
||||
}
|
||||
}
|
||||
|
||||
inline bool IsNull() {
|
||||
return !buffer;
|
||||
}
|
||||
|
||||
inline void* MapMemory() {
|
||||
if (!buffer)
|
||||
return 0;
|
||||
|
||||
void* data;
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
data = glMapNamedBuffer(buffer, GL_WRITE_ONLY);
|
||||
else {
|
||||
gl_state_bind_array_buffer(buffer);
|
||||
data = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
|
||||
}
|
||||
|
||||
if (data)
|
||||
return data;
|
||||
|
||||
if (!GLAD_GL_VERSION_4_5)
|
||||
gl_state_bind_array_buffer(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline bool NotNull() {
|
||||
return !!buffer;
|
||||
}
|
||||
|
||||
inline void UnmapMemory() {
|
||||
if (!buffer)
|
||||
return;
|
||||
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
glUnmapNamedBuffer(buffer);
|
||||
else {
|
||||
glUnmapBuffer(GL_ARRAY_BUFFER);
|
||||
gl_state_bind_array_buffer(0);
|
||||
}
|
||||
}
|
||||
|
||||
inline void WriteMemory(size_t offset, size_t size, const void* data) {
|
||||
if (!buffer)
|
||||
return;
|
||||
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data);
|
||||
else {
|
||||
gl_state_bind_array_buffer(buffer);
|
||||
glBufferSubData(GL_ARRAY_BUFFER, (GLsizeiptr)offset, (GLsizeiptr)size, data);
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline void WriteMemory(T& data) {
|
||||
if (!buffer)
|
||||
return;
|
||||
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
glNamedBufferSubData(buffer, 0, sizeof(T), &data);
|
||||
else {
|
||||
gl_state_bind_array_buffer(buffer);
|
||||
glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(T), &data);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,141 @@
|
||||
/*
|
||||
by korenkonder
|
||||
GitHub/GitLab: korenkonder
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include <glad/glad.h>
|
||||
#include "../gl_state.hpp"
|
||||
|
||||
namespace GL {
|
||||
struct ElementArrayBuffer {
|
||||
private:
|
||||
GLuint buffer;
|
||||
|
||||
public:
|
||||
inline ElementArrayBuffer() : buffer() {
|
||||
|
||||
}
|
||||
|
||||
inline ~ElementArrayBuffer() {
|
||||
|
||||
}
|
||||
|
||||
inline void Bind(bool force = false) {
|
||||
gl_state_bind_element_array_buffer(buffer, force);
|
||||
}
|
||||
|
||||
inline void Create(size_t size) {
|
||||
if (buffer)
|
||||
return;
|
||||
|
||||
if (GLAD_GL_VERSION_4_5) {
|
||||
glCreateBuffers(1, &buffer);
|
||||
glNamedBufferStorage(buffer, (GLsizeiptr)size, 0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT);
|
||||
}
|
||||
else {
|
||||
glGenBuffers(1, &buffer);
|
||||
gl_state_bind_element_array_buffer(buffer);
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
inline void Create(size_t size, const void* data, bool dynamic = false) {
|
||||
if (buffer)
|
||||
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);
|
||||
}
|
||||
else {
|
||||
glGenBuffers(1, &buffer);
|
||||
gl_state_bind_element_array_buffer(buffer);
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
inline void Destroy() {
|
||||
if (buffer) {
|
||||
glDeleteBuffers(1, &buffer);
|
||||
buffer = 0;
|
||||
}
|
||||
}
|
||||
|
||||
inline bool IsNull() {
|
||||
return !buffer;
|
||||
}
|
||||
|
||||
inline void* MapMemory() {
|
||||
if (!buffer)
|
||||
return 0;
|
||||
|
||||
void* data;
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
data = glMapNamedBuffer(buffer, GL_WRITE_ONLY);
|
||||
else {
|
||||
gl_state_bind_element_array_buffer(buffer);
|
||||
data = glMapBuffer(GL_ELEMENT_ARRAY_BUFFER, GL_WRITE_ONLY);
|
||||
}
|
||||
|
||||
if (data)
|
||||
return data;
|
||||
|
||||
if (!GLAD_GL_VERSION_4_5)
|
||||
gl_state_bind_element_array_buffer(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline bool NotNull() {
|
||||
return !!buffer;
|
||||
}
|
||||
|
||||
inline void UnmapMemory() {
|
||||
if (!buffer)
|
||||
return;
|
||||
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
glUnmapNamedBuffer(buffer);
|
||||
else {
|
||||
glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER);
|
||||
gl_state_bind_element_array_buffer(0);
|
||||
}
|
||||
}
|
||||
|
||||
inline void WriteMemory(size_t offset, size_t size, const void* data) {
|
||||
if (!buffer)
|
||||
return;
|
||||
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data);
|
||||
else {
|
||||
gl_state_bind_element_array_buffer(buffer);
|
||||
glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)offset, (GLsizeiptr)size, data);
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline void WriteMemory(T& data) {
|
||||
if (!buffer)
|
||||
return;
|
||||
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
glNamedBufferSubData(buffer, 0, sizeof(T), &data);
|
||||
else {
|
||||
gl_state_bind_element_array_buffer(buffer);
|
||||
glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, sizeof(T), &data);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -21,13 +21,17 @@ namespace GL {
|
||||
|
||||
}
|
||||
|
||||
inline void Bind(int32_t index, bool force = false) {
|
||||
gl_state_bind_shader_storage_buffer_base(index, buffer, force);
|
||||
}
|
||||
|
||||
inline void Create(size_t size) {
|
||||
if (buffer)
|
||||
return;
|
||||
|
||||
if (GLAD_GL_VERSION_4_5) {
|
||||
glCreateBuffers(1, &buffer);
|
||||
glNamedBufferStorage(buffer, size, 0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT);
|
||||
glNamedBufferStorage(buffer, (GLsizeiptr)size, 0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT);
|
||||
}
|
||||
else {
|
||||
glGenBuffers(1, &buffer);
|
||||
@@ -41,28 +45,27 @@ namespace GL {
|
||||
|
||||
}
|
||||
|
||||
inline void Create(size_t size, const void* data) {
|
||||
inline void Create(size_t size, const void* data, bool dynamic = false) {
|
||||
if (buffer)
|
||||
return;
|
||||
|
||||
if (GLAD_GL_VERSION_4_5) {
|
||||
glCreateBuffers(1, &buffer);
|
||||
glNamedBufferStorage(buffer, (GLsizeiptr)size, data, 0);
|
||||
glNamedBufferStorage(buffer, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0);
|
||||
}
|
||||
else {
|
||||
glGenBuffers(1, &buffer);
|
||||
gl_state_bind_shader_storage_buffer(buffer);
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_SHADER_STORAGE_BUFFER, (GLsizeiptr)size, data, 0);
|
||||
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, GL_STATIC_DRAW);
|
||||
glBufferData(GL_SHADER_STORAGE_BUFFER, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW);
|
||||
}
|
||||
}
|
||||
|
||||
inline void Bind(int32_t index) {
|
||||
gl_state_bind_shader_storage_buffer_base(index, buffer);
|
||||
}
|
||||
|
||||
inline void Destroy() {
|
||||
if (buffer) {
|
||||
glDeleteBuffers(1, &buffer);
|
||||
@@ -70,6 +73,10 @@ namespace GL {
|
||||
}
|
||||
}
|
||||
|
||||
inline bool IsNull() {
|
||||
return !buffer;
|
||||
}
|
||||
|
||||
inline void* MapMemory() {
|
||||
if (!buffer)
|
||||
return 0;
|
||||
@@ -90,6 +97,10 @@ namespace GL {
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline bool NotNull() {
|
||||
return !!buffer;
|
||||
}
|
||||
|
||||
inline void UnmapMemory() {
|
||||
if (!buffer)
|
||||
return;
|
||||
|
||||
@@ -21,13 +21,17 @@ namespace GL {
|
||||
|
||||
}
|
||||
|
||||
inline void Bind(int32_t index, bool force = false) {
|
||||
gl_state_bind_uniform_buffer_base(index, buffer, force);
|
||||
}
|
||||
|
||||
inline void Create(size_t size) {
|
||||
if (buffer)
|
||||
return;
|
||||
|
||||
if (GLAD_GL_VERSION_4_5) {
|
||||
glCreateBuffers(1, &buffer);
|
||||
glNamedBufferStorage(buffer, size, 0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT);
|
||||
glNamedBufferStorage(buffer, (GLsizeiptr)size, 0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT);
|
||||
}
|
||||
else {
|
||||
glGenBuffers(1, &buffer);
|
||||
@@ -41,28 +45,27 @@ namespace GL {
|
||||
|
||||
}
|
||||
|
||||
inline void Create(size_t size, const void* data) {
|
||||
inline void Create(size_t size, const void* data, bool dynamic = false) {
|
||||
if (buffer)
|
||||
return;
|
||||
|
||||
if (GLAD_GL_VERSION_4_5) {
|
||||
glCreateBuffers(1, &buffer);
|
||||
glNamedBufferStorage(buffer, (GLsizeiptr)size, data, 0);
|
||||
glNamedBufferStorage(buffer, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0);
|
||||
}
|
||||
else {
|
||||
glGenBuffers(1, &buffer);
|
||||
gl_state_bind_uniform_buffer(buffer);
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_UNIFORM_BUFFER, (GLsizeiptr)size, data, 0);
|
||||
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, GL_STATIC_DRAW);
|
||||
glBufferData(GL_UNIFORM_BUFFER, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW);
|
||||
}
|
||||
}
|
||||
|
||||
inline void Bind(int32_t index) {
|
||||
gl_state_bind_uniform_buffer_base(index, buffer);
|
||||
}
|
||||
|
||||
inline void Destroy() {
|
||||
if (buffer) {
|
||||
glDeleteBuffers(1, &buffer);
|
||||
@@ -70,6 +73,10 @@ namespace GL {
|
||||
}
|
||||
}
|
||||
|
||||
inline bool IsNull() {
|
||||
return !buffer;
|
||||
}
|
||||
|
||||
inline void* MapMemory() {
|
||||
if (!buffer)
|
||||
return 0;
|
||||
@@ -90,6 +97,10 @@ namespace GL {
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline bool NotNull() {
|
||||
return !!buffer;
|
||||
}
|
||||
|
||||
inline void UnmapMemory() {
|
||||
if (!buffer)
|
||||
return;
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
#include "../../KKdLib/mat.hpp"
|
||||
#include "../../KKdLib/txp.hpp"
|
||||
#include "../../KKdLib/vec.hpp"
|
||||
#include "../GL/array_buffer.hpp"
|
||||
#include "../GL/element_array_buffer.hpp"
|
||||
#include "../GL/uniform_buffer.hpp"
|
||||
#include "../color.hpp"
|
||||
#include "../file_handler.hpp"
|
||||
@@ -759,8 +761,8 @@ namespace Glitter {
|
||||
DispType disp_type;
|
||||
FogType fog_type;
|
||||
GLuint vao;
|
||||
GLuint vbo;
|
||||
GLuint ebo;
|
||||
GL::ArrayBuffer vbo;
|
||||
GL::ElementArrayBuffer ebo;
|
||||
float_t emission;
|
||||
prj::vector_pair<GLint, GLsizei> draw_list;
|
||||
|
||||
|
||||
@@ -82,17 +82,10 @@ namespace Glitter {
|
||||
glGenVertexArrays(1, &vao);
|
||||
gl_state_bind_vertex_array(vao, true);
|
||||
|
||||
glGenBuffers(1, &vbo);
|
||||
gl_state_bind_array_buffer(vbo, true);
|
||||
|
||||
static const GLsizei buffer_size = sizeof(Buffer);
|
||||
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_ARRAY_BUFFER,
|
||||
(GLsizeiptr)(buffer_size * max_count), 0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT);
|
||||
else
|
||||
glBufferData(GL_ARRAY_BUFFER,
|
||||
(GLsizeiptr)(buffer_size * max_count), 0, GL_DYNAMIC_DRAW);
|
||||
vbo.Create(buffer_size * max_count);
|
||||
vbo.Bind();
|
||||
|
||||
if (is_quad) {
|
||||
size_t count = max_count / 4 * 5;
|
||||
@@ -105,14 +98,8 @@ namespace Glitter {
|
||||
ebo_data[i + 4] = (uint16_t)0xFFFFFFFF;
|
||||
}
|
||||
|
||||
glGenBuffers(1, &ebo);
|
||||
gl_state_bind_element_array_buffer(ebo, true);
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_ELEMENT_ARRAY_BUFFER,
|
||||
(GLsizeiptr)(sizeof(uint16_t) * count), ebo_data, 0);
|
||||
else
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER,
|
||||
(GLsizeiptr)(sizeof(uint16_t) * count), ebo_data, GL_STATIC_DRAW);
|
||||
ebo.Create(sizeof(uint16_t) * count, ebo_data);
|
||||
ebo.Bind();
|
||||
free_def(ebo_data);
|
||||
}
|
||||
|
||||
@@ -267,15 +254,8 @@ namespace Glitter {
|
||||
particle = 0;
|
||||
}
|
||||
|
||||
if (ebo) {
|
||||
glDeleteBuffers(1, &ebo);
|
||||
ebo = 0;
|
||||
}
|
||||
|
||||
if (vbo) {
|
||||
glDeleteBuffers(1, &vbo);
|
||||
vbo = 0;
|
||||
}
|
||||
ebo.Destroy();
|
||||
vbo.Destroy();
|
||||
|
||||
if (vao) {
|
||||
glDeleteVertexArrays(1, &vao);
|
||||
@@ -426,17 +406,10 @@ namespace Glitter {
|
||||
glGenVertexArrays(1, &vao);
|
||||
gl_state_bind_vertex_array(vao, true);
|
||||
|
||||
glGenBuffers(1, &vbo);
|
||||
gl_state_bind_array_buffer(vbo, true);
|
||||
|
||||
static const GLsizei buffer_size = sizeof(Buffer);
|
||||
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_ARRAY_BUFFER,
|
||||
(GLsizeiptr)(buffer_size * max_count), 0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT);
|
||||
else
|
||||
glBufferData(GL_ARRAY_BUFFER,
|
||||
(GLsizeiptr)(buffer_size * max_count), 0, GL_DYNAMIC_DRAW);
|
||||
vbo.Create(buffer_size * max_count);
|
||||
vbo.Bind();
|
||||
|
||||
if (is_quad) {
|
||||
size_t count = max_count / 4 * 5;
|
||||
@@ -449,14 +422,8 @@ namespace Glitter {
|
||||
ebo_data[i + 4] = (uint16_t)0xFFFFFFFF;
|
||||
}
|
||||
|
||||
glGenBuffers(1, &ebo);
|
||||
gl_state_bind_element_array_buffer(ebo, true);
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_ELEMENT_ARRAY_BUFFER,
|
||||
(GLsizeiptr)(sizeof(uint16_t) * count), ebo_data, 0);
|
||||
else
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER,
|
||||
(GLsizeiptr)(sizeof(uint16_t) * count), ebo_data, GL_STATIC_DRAW);
|
||||
ebo.Create(sizeof(uint16_t) * count, ebo_data);
|
||||
ebo.Bind();
|
||||
free_def(ebo_data);
|
||||
}
|
||||
|
||||
@@ -630,15 +597,8 @@ namespace Glitter {
|
||||
particle = 0;
|
||||
}
|
||||
|
||||
if (ebo) {
|
||||
glDeleteBuffers(1, &ebo);
|
||||
ebo = 0;
|
||||
}
|
||||
|
||||
if (vbo) {
|
||||
glDeleteBuffers(1, &vbo);
|
||||
vbo = 0;
|
||||
}
|
||||
ebo.Destroy();
|
||||
vbo.Destroy();
|
||||
|
||||
if (vao) {
|
||||
glDeleteVertexArrays(1, &vao);
|
||||
|
||||
@@ -232,7 +232,7 @@ namespace Glitter {
|
||||
}
|
||||
|
||||
void F2RenderScene::CalcDispLine(F2RenderGroup* rend_group) {
|
||||
if (!rend_group->elements || !rend_group->vbo || rend_group->ctrl < 1)
|
||||
if (!rend_group->elements || rend_group->vbo.IsNull() || rend_group->ctrl < 1)
|
||||
return;
|
||||
|
||||
size_t count = 0;
|
||||
@@ -267,19 +267,9 @@ namespace Glitter {
|
||||
else
|
||||
rend_group->mat_draw = mat4_identity;
|
||||
|
||||
Buffer* buf;
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
buf = (Buffer*)glMapNamedBuffer(rend_group->vbo, GL_WRITE_ONLY);
|
||||
else {
|
||||
gl_state_bind_array_buffer(rend_group->vbo);
|
||||
buf = (Buffer*)glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
|
||||
}
|
||||
|
||||
if (!buf) {
|
||||
if (!GLAD_GL_VERSION_4_5)
|
||||
gl_state_bind_array_buffer(0);
|
||||
Buffer* buf = (Buffer*)rend_group->vbo.MapMemory();
|
||||
if (!buf)
|
||||
return;
|
||||
}
|
||||
|
||||
elem = rend_group->elements;
|
||||
size_t disp = 0;
|
||||
@@ -322,16 +312,11 @@ namespace Glitter {
|
||||
}
|
||||
rend_group->disp = disp;
|
||||
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
glUnmapNamedBuffer(rend_group->vbo);
|
||||
else {
|
||||
glUnmapBuffer(GL_ARRAY_BUFFER);
|
||||
gl_state_bind_array_buffer(0);
|
||||
}
|
||||
rend_group->vbo.UnmapMemory();
|
||||
}
|
||||
|
||||
void F2RenderScene::CalcDispLocus(GPM, F2RenderGroup* rend_group) {
|
||||
if (!rend_group->elements || !rend_group->vbo || rend_group->ctrl < 1)
|
||||
if (!rend_group->elements || rend_group->vbo.IsNull() || rend_group->ctrl < 1)
|
||||
return;
|
||||
|
||||
size_t count = 0;
|
||||
@@ -385,19 +370,9 @@ namespace Glitter {
|
||||
|
||||
mat3_transform_vector(&GPM_VAL->cam.inv_view_mat3, &x_vec, &x_vec);
|
||||
|
||||
Buffer* buf;
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
buf = (Buffer*)glMapNamedBuffer(rend_group->vbo, GL_WRITE_ONLY);
|
||||
else {
|
||||
gl_state_bind_array_buffer(rend_group->vbo);
|
||||
buf = (Buffer*)glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
|
||||
}
|
||||
|
||||
if (!buf) {
|
||||
if (!GLAD_GL_VERSION_4_5)
|
||||
gl_state_bind_array_buffer(0);
|
||||
Buffer* buf = (Buffer*)rend_group->vbo.MapMemory();
|
||||
if (!buf)
|
||||
return;
|
||||
}
|
||||
|
||||
elem = rend_group->elements;
|
||||
vec2 split_uv = rend_group->split_uv;
|
||||
@@ -481,16 +456,11 @@ namespace Glitter {
|
||||
}
|
||||
rend_group->disp = disp;
|
||||
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
glUnmapNamedBuffer(rend_group->vbo);
|
||||
else {
|
||||
glUnmapBuffer(GL_ARRAY_BUFFER);
|
||||
gl_state_bind_array_buffer(0);
|
||||
}
|
||||
rend_group->vbo.UnmapMemory();
|
||||
}
|
||||
|
||||
void F2RenderScene::CalcDispQuad(GPM, F2RenderGroup* rend_group) {
|
||||
if (!rend_group->elements || !rend_group->vbo || rend_group->ctrl < 1)
|
||||
if (!rend_group->elements || rend_group->vbo.IsNull() || rend_group->ctrl < 1)
|
||||
return;
|
||||
|
||||
mat4 model_mat;
|
||||
@@ -589,19 +559,9 @@ namespace Glitter {
|
||||
vec3 scale;
|
||||
mat4_get_scale(model_mat, &scale);
|
||||
|
||||
Buffer* buf;
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
buf = (Buffer*)glMapNamedBuffer(rend_group->vbo, GL_WRITE_ONLY);
|
||||
else {
|
||||
gl_state_bind_array_buffer(rend_group->vbo);
|
||||
buf = (Buffer*)glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
|
||||
}
|
||||
|
||||
if (!buf) {
|
||||
if (!GLAD_GL_VERSION_4_5)
|
||||
gl_state_bind_array_buffer(0);
|
||||
Buffer* buf = (Buffer*)rend_group->vbo.MapMemory();
|
||||
if (!buf)
|
||||
return;
|
||||
}
|
||||
|
||||
bool use_scale = rend_group->flags & PARTICLE_SCALE ? true : false;
|
||||
RenderElement* elem = rend_group->elements;
|
||||
@@ -683,12 +643,7 @@ namespace Glitter {
|
||||
}
|
||||
rend_group->disp = disp;
|
||||
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
glUnmapNamedBuffer(rend_group->vbo);
|
||||
else {
|
||||
glUnmapBuffer(GL_ARRAY_BUFFER);
|
||||
gl_state_bind_array_buffer(0);
|
||||
}
|
||||
rend_group->vbo.UnmapMemory();
|
||||
}
|
||||
|
||||
void F2RenderScene::CalcDispQuadNormal(GPM,
|
||||
@@ -753,19 +708,9 @@ namespace Glitter {
|
||||
mat4_transform_vector(&inv_model_mat, &x_vec, &x_vec);
|
||||
mat4_transform_vector(&inv_model_mat, &y_vec, &y_vec);
|
||||
|
||||
Buffer* buf;
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
buf = (Buffer*)glMapNamedBuffer(rend_group->vbo, GL_WRITE_ONLY);
|
||||
else {
|
||||
gl_state_bind_array_buffer(rend_group->vbo);
|
||||
buf = (Buffer*)glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
|
||||
}
|
||||
|
||||
if (!buf) {
|
||||
if (!GLAD_GL_VERSION_4_5)
|
||||
gl_state_bind_array_buffer(0);
|
||||
Buffer* buf = (Buffer*)rend_group->vbo.MapMemory();
|
||||
if (!buf)
|
||||
return;
|
||||
}
|
||||
|
||||
RenderElement* elem = rend_group->elements;
|
||||
vec2 split_uv = rend_group->split_uv;
|
||||
@@ -919,12 +864,7 @@ namespace Glitter {
|
||||
}
|
||||
rend_group->disp = disp;
|
||||
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
glUnmapNamedBuffer(rend_group->vbo);
|
||||
else {
|
||||
glUnmapBuffer(GL_ARRAY_BUFFER);
|
||||
gl_state_bind_array_buffer(0);
|
||||
}
|
||||
rend_group->vbo.UnmapMemory();
|
||||
}
|
||||
|
||||
void F2RenderScene::Ctrl(GLT, float_t delta_frame) {
|
||||
@@ -1256,7 +1196,7 @@ namespace Glitter {
|
||||
}
|
||||
|
||||
void XRenderScene::CalcDispLine(XRenderGroup* rend_group) {
|
||||
if (!rend_group->elements || !rend_group->vbo || rend_group->ctrl < 1)
|
||||
if (!rend_group->elements || rend_group->vbo.IsNull() || rend_group->ctrl < 1)
|
||||
return;
|
||||
|
||||
size_t count = 0;
|
||||
@@ -1290,19 +1230,9 @@ namespace Glitter {
|
||||
else
|
||||
rend_group->mat_draw = mat4_identity;
|
||||
|
||||
Buffer* buf;
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
buf = (Buffer*)glMapNamedBuffer(rend_group->vbo, GL_WRITE_ONLY);
|
||||
else {
|
||||
gl_state_bind_array_buffer(rend_group->vbo);
|
||||
buf = (Buffer*)glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
|
||||
}
|
||||
|
||||
if (!buf) {
|
||||
if (!GLAD_GL_VERSION_4_5)
|
||||
gl_state_bind_array_buffer(0);
|
||||
Buffer* buf = (Buffer*)rend_group->vbo.MapMemory();
|
||||
if (!buf)
|
||||
return;
|
||||
}
|
||||
|
||||
elem = rend_group->elements;
|
||||
size_t disp = 0;
|
||||
@@ -1344,17 +1274,11 @@ namespace Glitter {
|
||||
}
|
||||
}
|
||||
rend_group->disp = disp;
|
||||
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
glUnmapNamedBuffer(rend_group->vbo);
|
||||
else {
|
||||
glUnmapBuffer(GL_ARRAY_BUFFER);
|
||||
gl_state_bind_array_buffer(0);
|
||||
}
|
||||
rend_group->vbo.UnmapMemory();
|
||||
}
|
||||
|
||||
void XRenderScene::CalcDispLocus(GPM, XRenderGroup* rend_group) {
|
||||
if (!rend_group->elements || !rend_group->vbo || rend_group->ctrl < 1)
|
||||
if (!rend_group->elements || rend_group->vbo.IsNull() || rend_group->ctrl < 1)
|
||||
return;
|
||||
|
||||
size_t count = 0;
|
||||
@@ -1406,19 +1330,9 @@ namespace Glitter {
|
||||
|
||||
mat3_transform_vector(&GPM_VAL->cam.inv_view_mat3, &x_vec, &x_vec);
|
||||
|
||||
Buffer* buf;
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
buf = (Buffer*)glMapNamedBuffer(rend_group->vbo, GL_WRITE_ONLY);
|
||||
else {
|
||||
gl_state_bind_array_buffer(rend_group->vbo);
|
||||
buf = (Buffer*)glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
|
||||
}
|
||||
|
||||
if (!buf) {
|
||||
if (!GLAD_GL_VERSION_4_5)
|
||||
gl_state_bind_array_buffer(0);
|
||||
Buffer* buf = (Buffer*)rend_group->vbo.MapMemory();
|
||||
if (!buf)
|
||||
return;
|
||||
}
|
||||
|
||||
elem = rend_group->elements;
|
||||
vec2 split_uv = rend_group->split_uv;
|
||||
@@ -1502,12 +1416,7 @@ namespace Glitter {
|
||||
}
|
||||
rend_group->disp = disp;
|
||||
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
glUnmapNamedBuffer(rend_group->vbo);
|
||||
else {
|
||||
glUnmapBuffer(GL_ARRAY_BUFFER);
|
||||
gl_state_bind_array_buffer(0);
|
||||
}
|
||||
rend_group->vbo.UnmapMemory();
|
||||
}
|
||||
|
||||
void XRenderScene::CalcDispMesh(GPM, XRenderGroup* rend_group) {
|
||||
@@ -1701,7 +1610,7 @@ namespace Glitter {
|
||||
}
|
||||
|
||||
void XRenderScene::CalcDispQuad(GPM, XRenderGroup* rend_group) {
|
||||
if (!rend_group->elements || !rend_group->vbo || rend_group->ctrl < 1)
|
||||
if (!rend_group->elements || rend_group->vbo.IsNull() || rend_group->ctrl < 1)
|
||||
return;
|
||||
|
||||
mat4 model_mat;
|
||||
@@ -1796,19 +1705,9 @@ namespace Glitter {
|
||||
y_vec_base.y *= scale.y;
|
||||
}
|
||||
|
||||
Buffer* buf;
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
buf = (Buffer*)glMapNamedBuffer(rend_group->vbo, GL_WRITE_ONLY);
|
||||
else {
|
||||
gl_state_bind_array_buffer(rend_group->vbo);
|
||||
buf = (Buffer*)glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
|
||||
}
|
||||
|
||||
if (!buf) {
|
||||
if (!GLAD_GL_VERSION_4_5)
|
||||
gl_state_bind_array_buffer(0);
|
||||
Buffer* buf = (Buffer*)rend_group->vbo.MapMemory();
|
||||
if (!buf)
|
||||
return;
|
||||
}
|
||||
|
||||
RenderElement* elem = rend_group->elements;
|
||||
vec2 split_uv = rend_group->split_uv;
|
||||
@@ -1888,12 +1787,7 @@ namespace Glitter {
|
||||
}
|
||||
rend_group->disp = disp;
|
||||
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
glUnmapNamedBuffer(rend_group->vbo);
|
||||
else {
|
||||
glUnmapBuffer(GL_ARRAY_BUFFER);
|
||||
gl_state_bind_array_buffer(0);
|
||||
}
|
||||
rend_group->vbo.UnmapMemory();
|
||||
}
|
||||
|
||||
void XRenderScene::CalcDispQuadNormal(XRenderGroup* rend_group, mat4* model_mat, mat4* dir_mat) {
|
||||
@@ -1955,19 +1849,9 @@ namespace Glitter {
|
||||
mat4_transform_vector(&inv_model_mat, &x_vec, &x_vec);
|
||||
mat4_transform_vector(&inv_model_mat, &y_vec, &y_vec);
|
||||
|
||||
Buffer* buf;
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
buf = (Buffer*)glMapNamedBuffer(rend_group->vbo, GL_WRITE_ONLY);
|
||||
else {
|
||||
gl_state_bind_array_buffer(rend_group->vbo);
|
||||
buf = (Buffer*)glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
|
||||
}
|
||||
|
||||
if (!buf) {
|
||||
if (!GLAD_GL_VERSION_4_5)
|
||||
gl_state_bind_array_buffer(0);
|
||||
Buffer* buf = (Buffer*)rend_group->vbo.MapMemory();
|
||||
if (!buf)
|
||||
return;
|
||||
}
|
||||
|
||||
RenderElement* elem = rend_group->elements;
|
||||
vec2 split_uv = rend_group->split_uv;
|
||||
@@ -2115,12 +1999,7 @@ namespace Glitter {
|
||||
}
|
||||
rend_group->disp = disp;
|
||||
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
glUnmapNamedBuffer(rend_group->vbo);
|
||||
else {
|
||||
glUnmapBuffer(GL_ARRAY_BUFFER);
|
||||
gl_state_bind_array_buffer(0);
|
||||
}
|
||||
rend_group->vbo.UnmapMemory();
|
||||
}
|
||||
|
||||
bool XRenderScene::CanDisp(DispType disp_type, bool a3) {
|
||||
|
||||
@@ -83,13 +83,8 @@ screen_x_offset(), screen_y_offset(), screen_width(), screen_height(), mag_filte
|
||||
glGenVertexArrays(1, &lens_ghost_vao);
|
||||
gl_state_bind_vertex_array(lens_ghost_vao);
|
||||
|
||||
glGenBuffers(1, &lens_ghost_vbo);
|
||||
gl_state_bind_array_buffer(lens_ghost_vbo, true);
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_ARRAY_BUFFER, sizeof(float_t) * 5 * (6 * 16),
|
||||
0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT);
|
||||
else
|
||||
glBufferData(GL_ARRAY_BUFFER, sizeof(float_t) * 5 * (6 * 16), 0, GL_DYNAMIC_DRAW);
|
||||
lens_ghost_vbo.Create(sizeof(float_t) * 5 * (6 * 16));
|
||||
lens_ghost_vbo.Bind();
|
||||
|
||||
glEnableVertexAttribArray(0);
|
||||
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float_t) * 5, (void*)0);
|
||||
@@ -166,10 +161,7 @@ post_process::~post_process() {
|
||||
lens_ghost_vao = 0;
|
||||
}
|
||||
|
||||
if (lens_ghost_vbo) {
|
||||
glDeleteBuffers(1, &lens_ghost_vbo);
|
||||
lens_ghost_vbo = 0;
|
||||
}
|
||||
lens_ghost_vbo.Destroy();
|
||||
|
||||
if (lens_shaft_query[0]) {
|
||||
glDeleteQueries(3, lens_shaft_query);
|
||||
@@ -618,23 +610,9 @@ void post_process::draw_lens_ghost(RenderTexture* rt) {
|
||||
const float_t angle_sin = sinf(angle);
|
||||
const float_t angle_cos = cosf(angle);
|
||||
|
||||
float_t* data;
|
||||
if (GLAD_GL_VERSION_4_5) {
|
||||
data = (float_t*)glMapNamedBuffer(lens_ghost_vbo, GL_WRITE_ONLY);
|
||||
if (!data) {
|
||||
glUnmapNamedBuffer(lens_ghost_vbo);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
gl_state_bind_array_buffer(lens_ghost_vbo);
|
||||
data = (float_t*)glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
|
||||
if (!data) {
|
||||
glUnmapBuffer(GL_ARRAY_BUFFER);
|
||||
gl_state_bind_array_buffer(0);
|
||||
return;
|
||||
}
|
||||
}
|
||||
float_t* data = (float_t*)lens_ghost_vbo.MapMemory();
|
||||
if (!data)
|
||||
return;
|
||||
|
||||
const float_t lens_ghost = tone_map->lens_ghost;
|
||||
const int32_t lens_ghost_count = this->lens_ghost_count;
|
||||
@@ -650,12 +628,7 @@ void post_process::draw_lens_ghost(RenderTexture* rt) {
|
||||
make_ghost_quad((uint8_t)(i & 0x03), opacity, &mat, data);
|
||||
}
|
||||
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
glUnmapNamedBuffer(lens_ghost_vbo);
|
||||
else {
|
||||
glUnmapBuffer(GL_ARRAY_BUFFER);
|
||||
gl_state_bind_array_buffer(0);
|
||||
}
|
||||
lens_ghost_vbo.UnmapMemory();
|
||||
|
||||
rt->Bind();
|
||||
rt->SetViewport();
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
#include "../KKdLib/default.hpp"
|
||||
#include "../KKdLib/vec.hpp"
|
||||
#include "GL/array_buffer.hpp"
|
||||
#include "GL/uniform_buffer.hpp"
|
||||
#include "post_process/blur.hpp"
|
||||
#include "post_process/dof.hpp"
|
||||
@@ -78,7 +79,7 @@ struct post_process {
|
||||
GLuint samplers[3];
|
||||
GLuint query_vao;
|
||||
GLuint lens_ghost_vao;
|
||||
GLuint lens_ghost_vbo;
|
||||
GL::ArrayBuffer lens_ghost_vbo;
|
||||
RenderTexture mlaa_buffer;
|
||||
RenderTexture temp_buffer;
|
||||
GLuint mlaa_area_texture;
|
||||
|
||||
+20
-50
@@ -479,15 +479,8 @@ namespace mdl {
|
||||
for (DispManager::etc_vertex_array& i : etc_vertex_array_cache) {
|
||||
glDeleteVertexArrays(1, &i.vertex_array);
|
||||
|
||||
if (i.vertex_buffer) {
|
||||
glDeleteBuffers(1, &i.vertex_buffer);
|
||||
i.vertex_buffer = 0;
|
||||
}
|
||||
|
||||
if (i.index_buffer) {
|
||||
glDeleteBuffers(1, &i.index_buffer);
|
||||
i.index_buffer = 0;
|
||||
}
|
||||
i.vertex_buffer.Destroy();
|
||||
i.index_buffer.Destroy();
|
||||
}
|
||||
etc_vertex_array_cache.clear();
|
||||
|
||||
@@ -1799,7 +1792,7 @@ namespace mdl {
|
||||
|
||||
DispManager::etc_vertex_array* etc_vertex_array = 0;
|
||||
for (DispManager::etc_vertex_array& i : etc_vertex_array_cache) {
|
||||
if (i.alive_time <= 0 || i.type != type || !i.vertex_buffer)
|
||||
if (i.alive_time <= 0 || i.type != type || i.vertex_buffer.IsNull())
|
||||
continue;
|
||||
|
||||
if (type == mdl::ETC_OBJ_TEAPOT
|
||||
@@ -1996,57 +1989,34 @@ namespace mdl {
|
||||
if (etc_vertex_array->max_vtx < vtx_data.size()) {
|
||||
etc_vertex_array->max_vtx = vtx_data.size();
|
||||
|
||||
if (etc_vertex_array->vertex_buffer) {
|
||||
glDeleteBuffers(1, &etc_vertex_array->vertex_buffer);
|
||||
etc_vertex_array->vertex_buffer = 0;
|
||||
}
|
||||
etc_vertex_array->vertex_buffer.Destroy();
|
||||
}
|
||||
|
||||
if (etc_vertex_array->max_idx < vtx_indices.size()) {
|
||||
etc_vertex_array->max_idx = vtx_indices.size();
|
||||
|
||||
if (etc_vertex_array->index_buffer) {
|
||||
glDeleteBuffers(1, &etc_vertex_array->index_buffer);
|
||||
etc_vertex_array->index_buffer = 0;
|
||||
}
|
||||
etc_vertex_array->index_buffer.Destroy();
|
||||
}
|
||||
|
||||
GLsizei size_vertex = sizeof(vec3) * 2;
|
||||
|
||||
gl_state_bind_vertex_array(etc_vertex_array->vertex_array);
|
||||
|
||||
if (!etc_vertex_array->vertex_buffer) {
|
||||
glGenBuffers(1, &etc_vertex_array->vertex_buffer);
|
||||
gl_state_bind_array_buffer(etc_vertex_array->vertex_buffer);
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_ARRAY_BUFFER, sizeof(float_t)
|
||||
* vtx_data.size(), vtx_data.data(), GL_DYNAMIC_STORAGE_BIT);
|
||||
else
|
||||
glBufferData(GL_ARRAY_BUFFER, sizeof(float_t)
|
||||
* vtx_data.size(), vtx_data.data(), GL_DYNAMIC_DRAW);
|
||||
}
|
||||
else {
|
||||
gl_state_bind_array_buffer(etc_vertex_array->vertex_buffer);
|
||||
glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(float_t)
|
||||
* vtx_data.size(), vtx_data.data());
|
||||
}
|
||||
if (etc_vertex_array->vertex_buffer.IsNull())
|
||||
etc_vertex_array->vertex_buffer.Create(sizeof(float_t) * vtx_data.size());
|
||||
|
||||
if (indexed)
|
||||
if (!etc_vertex_array->index_buffer) {
|
||||
glGenBuffers(1, &etc_vertex_array->index_buffer);
|
||||
gl_state_bind_element_array_buffer(etc_vertex_array->index_buffer);
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_ELEMENT_ARRAY_BUFFER, sizeof(uint32_t)
|
||||
* vtx_indices.size(), vtx_indices.data(), GL_DYNAMIC_STORAGE_BIT);
|
||||
else
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(uint32_t)
|
||||
* vtx_indices.size(), vtx_indices.data(), GL_DYNAMIC_DRAW);
|
||||
}
|
||||
else {
|
||||
gl_state_bind_element_array_buffer(etc_vertex_array->index_buffer);
|
||||
glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, sizeof(uint32_t)
|
||||
* vtx_indices.size(), vtx_indices.data());
|
||||
}
|
||||
etc_vertex_array->vertex_buffer.Bind();
|
||||
glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(float_t)
|
||||
* vtx_data.size(), vtx_data.data());
|
||||
|
||||
if (indexed) {
|
||||
if (etc_vertex_array->index_buffer.IsNull())
|
||||
etc_vertex_array->index_buffer.Create(sizeof(uint32_t) * vtx_indices.size());
|
||||
|
||||
etc_vertex_array->index_buffer.Bind();
|
||||
glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, sizeof(uint32_t)
|
||||
* vtx_indices.size(), vtx_indices.data());
|
||||
}
|
||||
|
||||
glEnableVertexAttribArray(POSITION_INDEX);
|
||||
glVertexAttribPointer(POSITION_INDEX,
|
||||
@@ -3840,8 +3810,8 @@ render_context::~render_context() {
|
||||
contour_params_ubo.Destroy();
|
||||
contour_coef_ubo.Destroy();
|
||||
|
||||
glDeleteVertexArrays(1, &box_vao);
|
||||
glDeleteBuffers(1, &box_vbo);
|
||||
glDeleteVertexArrays(1, &box_vao);
|
||||
|
||||
if (camera) {
|
||||
delete camera;
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
#include "../KKdLib/default.hpp"
|
||||
#include "../KKdLib/time.hpp"
|
||||
#include "../KKdLib/vec.hpp"
|
||||
#include "GL/array_buffer.hpp"
|
||||
#include "GL/element_array_buffer.hpp"
|
||||
#include "GL/uniform_buffer.hpp"
|
||||
#include "light_param/face.hpp"
|
||||
#include "light_param/fog.hpp"
|
||||
@@ -521,8 +523,8 @@ namespace mdl {
|
||||
};
|
||||
|
||||
struct etc_vertex_array {
|
||||
GLuint vertex_buffer;
|
||||
GLuint index_buffer;
|
||||
GL::ArrayBuffer vertex_buffer;
|
||||
GL::ElementArrayBuffer index_buffer;
|
||||
int32_t alive_time;
|
||||
GLuint vertex_array;
|
||||
EtcObj::Data data;
|
||||
|
||||
+23
-70
@@ -7,6 +7,8 @@
|
||||
#include "../KKdLib/prj/shared_ptr.hpp"
|
||||
#include "../KKdLib/prj/stack_allocator.hpp"
|
||||
#include "../KKdLib/txp.hpp"
|
||||
#include "GL/array_buffer.hpp"
|
||||
#include "GL/element_array_buffer.hpp"
|
||||
#include "data.hpp"
|
||||
#include "file_handler.hpp"
|
||||
#include "shader_ft.hpp"
|
||||
@@ -122,9 +124,9 @@ namespace spr {
|
||||
std::vector<sprite_draw_vertex> vertex_buffer;
|
||||
std::vector<uint32_t> index_buffer;
|
||||
GLuint vao;
|
||||
GLuint vbo;
|
||||
GL::ArrayBuffer vbo;
|
||||
size_t vbo_vertex_count;
|
||||
GLuint ebo;
|
||||
GL::ElementArrayBuffer ebo;
|
||||
size_t ebo_index_count;
|
||||
|
||||
RenderData();
|
||||
@@ -590,23 +592,16 @@ void sprite_manager_free() {
|
||||
}
|
||||
|
||||
namespace spr {
|
||||
SpriteManager::RenderData::RenderData() {
|
||||
SpriteManager::RenderData::RenderData() : vao() {
|
||||
glGenVertexArrays(1, &vao);
|
||||
gl_state_bind_vertex_array(vao, true);
|
||||
|
||||
glGenBuffers(1, &vbo);
|
||||
gl_state_bind_array_buffer(vbo, true);
|
||||
|
||||
vbo_vertex_count = 4096;
|
||||
|
||||
static const GLsizei buffer_size = sizeof(sprite_draw_vertex);
|
||||
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_ARRAY_BUFFER,
|
||||
(GLsizeiptr)(buffer_size * vbo_vertex_count), 0, GL_DYNAMIC_STORAGE_BIT);
|
||||
else
|
||||
glBufferData(GL_ARRAY_BUFFER,
|
||||
(GLsizeiptr)(buffer_size * vbo_vertex_count), 0, GL_DYNAMIC_DRAW);
|
||||
vbo.Create(buffer_size * vbo_vertex_count);
|
||||
vbo.Bind();
|
||||
|
||||
glEnableVertexAttribArray(0);
|
||||
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, buffer_size,
|
||||
@@ -621,17 +616,10 @@ namespace spr {
|
||||
glVertexAttribPointer(3, 2, GL_FLOAT, GL_FALSE, buffer_size,
|
||||
(void*)offsetof(sprite_draw_vertex, uv[1]));
|
||||
|
||||
glGenBuffers(1, &ebo);
|
||||
gl_state_bind_element_array_buffer(ebo, true);
|
||||
|
||||
ebo_index_count = 4096;
|
||||
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_ELEMENT_ARRAY_BUFFER,
|
||||
(GLsizeiptr)(sizeof(uint32_t) * ebo_index_count), 0, GL_DYNAMIC_STORAGE_BIT);
|
||||
else
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER,
|
||||
(GLsizeiptr)(sizeof(uint32_t) * ebo_index_count), 0, GL_DYNAMIC_DRAW);
|
||||
ebo.Create(sizeof(uint32_t) * ebo_index_count);
|
||||
ebo.Bind();
|
||||
|
||||
gl_state_bind_array_buffer(0);
|
||||
gl_state_bind_vertex_array(0);
|
||||
@@ -639,15 +627,8 @@ namespace spr {
|
||||
}
|
||||
|
||||
SpriteManager::RenderData::~RenderData() {
|
||||
if (ebo) {
|
||||
glDeleteBuffers(1, &ebo);
|
||||
ebo = 0;
|
||||
}
|
||||
|
||||
if (vbo) {
|
||||
glDeleteBuffers(1, &vbo);
|
||||
vbo = 0;
|
||||
}
|
||||
ebo.Destroy();
|
||||
vbo.Destroy();
|
||||
|
||||
if (vao) {
|
||||
glDeleteVertexArrays(1, &vao);
|
||||
@@ -668,18 +649,13 @@ namespace spr {
|
||||
while (vbo_vertex_count < vertex_buffer.size())
|
||||
vbo_vertex_count *= 2;
|
||||
|
||||
glDeleteBuffers(1, &vbo);
|
||||
glGenBuffers(1, &vbo);
|
||||
vbo.Destroy();
|
||||
|
||||
gl_state_bind_vertex_array(vao, true);
|
||||
gl_state_bind_array_buffer(vbo, true);
|
||||
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_ARRAY_BUFFER,
|
||||
(GLsizeiptr)(buffer_size * vbo_vertex_count), 0, GL_DYNAMIC_STORAGE_BIT);
|
||||
else
|
||||
glBufferData(GL_ARRAY_BUFFER,
|
||||
(GLsizeiptr)(buffer_size * vbo_vertex_count), 0, GL_DYNAMIC_DRAW);
|
||||
vbo.Create(buffer_size * vbo_vertex_count);
|
||||
vbo.Bind();
|
||||
|
||||
glBufferSubData(GL_ARRAY_BUFFER, 0, (GLsizeiptr)(buffer_size
|
||||
* vertex_buffer.size()), vertex_buffer.data());
|
||||
|
||||
@@ -699,51 +675,28 @@ namespace spr {
|
||||
gl_state_bind_array_buffer(0);
|
||||
gl_state_bind_vertex_array(0);
|
||||
}
|
||||
else {
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
glNamedBufferSubData(vbo, 0, (GLsizeiptr)(buffer_size
|
||||
* vertex_buffer.size()), vertex_buffer.data());
|
||||
else {
|
||||
gl_state_bind_array_buffer(vbo);
|
||||
glBufferSubData(GL_ARRAY_BUFFER, 0, (GLsizeiptr)(buffer_size
|
||||
* vertex_buffer.size()), vertex_buffer.data());
|
||||
gl_state_bind_array_buffer(0);
|
||||
}
|
||||
}
|
||||
else
|
||||
vbo.WriteMemory(0, buffer_size * vertex_buffer.size(), vertex_buffer.data());
|
||||
|
||||
if (ebo_index_count < index_buffer.size()) {
|
||||
while (ebo_index_count < index_buffer.size())
|
||||
ebo_index_count *= 2;
|
||||
|
||||
glDeleteBuffers(1, &ebo);
|
||||
glGenBuffers(1, &ebo);
|
||||
ebo.Destroy();
|
||||
|
||||
gl_state_bind_vertex_array(vao, true);
|
||||
gl_state_bind_element_array_buffer(ebo, true);
|
||||
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_ELEMENT_ARRAY_BUFFER,
|
||||
(GLsizeiptr)(sizeof(uint32_t) * ebo_index_count), 0, GL_DYNAMIC_STORAGE_BIT);
|
||||
else
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER,
|
||||
(GLsizeiptr)(sizeof(uint32_t) * ebo_index_count), 0, GL_DYNAMIC_DRAW);
|
||||
ebo.Create(sizeof(uint32_t) * ebo_index_count);
|
||||
ebo.Bind();
|
||||
|
||||
glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, (GLsizeiptr)(sizeof(uint32_t)
|
||||
* index_buffer.size()), index_buffer.data());
|
||||
|
||||
gl_state_bind_vertex_array(0);
|
||||
gl_state_bind_element_array_buffer(0);
|
||||
}
|
||||
else {
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
glNamedBufferSubData(ebo, 0, (GLsizeiptr)(sizeof(uint32_t)
|
||||
* index_buffer.size()), index_buffer.data());
|
||||
else {
|
||||
gl_state_bind_array_buffer(ebo);
|
||||
glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, (GLsizeiptr)(sizeof(uint32_t)
|
||||
* index_buffer.size()), index_buffer.data());
|
||||
gl_state_bind_array_buffer(0);
|
||||
}
|
||||
}
|
||||
else
|
||||
ebo.WriteMemory(0, sizeof(uint32_t) * index_buffer.size(), index_buffer.data());
|
||||
}
|
||||
|
||||
SpriteManager::SpriteManager() : aspect(), index(), set_counter() {
|
||||
|
||||
+35
-132
@@ -6,6 +6,7 @@
|
||||
#include "task_effect.hpp"
|
||||
#include "../KKdLib/prj/algorithm.hpp"
|
||||
#include "../KKdLib/hash.hpp"
|
||||
#include "GL/element_array_buffer.hpp"
|
||||
#include "auth_3d.hpp"
|
||||
#include "data.hpp"
|
||||
#include "gl_state.hpp"
|
||||
@@ -154,8 +155,8 @@ struct star_catalog_batch_shader_data {
|
||||
};
|
||||
|
||||
struct star_catalog_milky_way {
|
||||
GLuint vbo;
|
||||
GLuint ebo;
|
||||
GL::ArrayBuffer vbo;
|
||||
GL::ElementArrayBuffer ebo;
|
||||
GLuint vao;
|
||||
GLuint sampler;
|
||||
uint16_t restart_index;
|
||||
@@ -352,8 +353,8 @@ static int32_t leaf_particle_num_ptcls;
|
||||
static uint32_t leaf_particle_tex_id;
|
||||
static leaf_particle_data* leaf_ptcl_data;
|
||||
static GLuint leaf_ptcl_vao;
|
||||
static GLuint leaf_ptcl_vbo;
|
||||
static GLuint leaf_ptcl_ebo;
|
||||
static GL::ArrayBuffer leaf_ptcl_vbo;
|
||||
static GL::ElementArrayBuffer leaf_ptcl_ebo;
|
||||
static GL::UniformBuffer leaf_particle_scene_ubo;
|
||||
static const size_t leaf_ptcl_count = 0x800;
|
||||
|
||||
@@ -371,7 +372,7 @@ static int32_t particle_count;
|
||||
static vec3 particle_wind;
|
||||
static particle_rot_data* ptcl_data;
|
||||
static GLuint ptcl_vao;
|
||||
static GLuint ptcl_vbo;
|
||||
static GL::ElementArrayBuffer ptcl_vbo;
|
||||
static GL::UniformBuffer particle_scene_ubo;
|
||||
static const size_t ptcl_count = 0x400;
|
||||
|
||||
@@ -2848,31 +2849,13 @@ void particle_draw() {
|
||||
if (!ptcl_data)
|
||||
return;
|
||||
|
||||
particle_vertex_data* vtx_data;
|
||||
if (GLAD_GL_VERSION_4_5) {
|
||||
vtx_data = (particle_vertex_data*)glMapNamedBuffer(ptcl_vbo, GL_WRITE_ONLY);
|
||||
if (!vtx_data) {
|
||||
glUnmapNamedBuffer(ptcl_vbo);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
gl_state_bind_array_buffer(ptcl_vbo);
|
||||
vtx_data = (particle_vertex_data*)glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
|
||||
if (!vtx_data) {
|
||||
glUnmapBuffer(GL_ARRAY_BUFFER);
|
||||
gl_state_bind_array_buffer(0);
|
||||
return;
|
||||
}
|
||||
}
|
||||
particle_vertex_data* vtx_data = (particle_vertex_data*)ptcl_vbo.MapMemory();
|
||||
if (!vtx_data)
|
||||
return;
|
||||
|
||||
int32_t count = particle_disp(vtx_data, ptcl_data, ptcl_count);
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
glUnmapNamedBuffer(ptcl_vbo);
|
||||
else {
|
||||
glUnmapBuffer(GL_ARRAY_BUFFER);
|
||||
gl_state_bind_array_buffer(0);
|
||||
}
|
||||
|
||||
ptcl_vbo.UnmapMemory();
|
||||
|
||||
if (!count)
|
||||
return;
|
||||
@@ -3324,8 +3307,8 @@ particle_data::particle_data() : size(), alpha(), life_time() {
|
||||
|
||||
}
|
||||
|
||||
star_catalog_milky_way::star_catalog_milky_way() : vbo(), ebo(), vao(), sampler(),
|
||||
restart_index(), idx_count(), longitude_degs_10(), latitude_degs_10(), longitude_offset_degs_10(),
|
||||
star_catalog_milky_way::star_catalog_milky_way() : vao(), sampler(), restart_index(),
|
||||
idx_count(), longitude_degs_10(), latitude_degs_10(), longitude_offset_degs_10(),
|
||||
latitude_offset_degs_10(), latitude(), longitude(), uv_rec_scale_u(), uv_rec_scale_v() {
|
||||
reset();
|
||||
}
|
||||
@@ -3347,12 +3330,6 @@ void star_catalog_milky_way::create_buffers(int32_t subdivs, float_t uv_rec_scal
|
||||
gl_state_bind_array_buffer(0);
|
||||
gl_state_bind_element_array_buffer(0);
|
||||
|
||||
if (!vao)
|
||||
glGenVertexArrays(1, &vao);
|
||||
|
||||
if (!vbo)
|
||||
glGenBuffers(1, &vbo);
|
||||
|
||||
const float_t rec_longitude_degs_10 = 1.0f / (float_t)longitude_degs_10;
|
||||
const float_t rec_latitude_degs_10 = 1.0f / (float_t)latitude_degs_10;
|
||||
|
||||
@@ -3385,13 +3362,11 @@ void star_catalog_milky_way::create_buffers(int32_t subdivs, float_t uv_rec_scal
|
||||
vtx_data[vtx].texcoord.x = 1.0f;
|
||||
vtx_data[vtx].texcoord.y = (latitude_offset_degs_10 - (1.0f / uv_rec_scale_v) * 90.0f) * rec_latitude_degs_10;
|
||||
|
||||
gl_state_bind_array_buffer(vbo, true);
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_ARRAY_BUFFER,
|
||||
(GLsizeiptr)(sizeof(star_catalog_vertex) * vtx_count), vtx_data, 0);
|
||||
else
|
||||
glBufferData(GL_ARRAY_BUFFER,
|
||||
(GLsizeiptr)(sizeof(star_catalog_vertex) * vtx_count), vtx_data, GL_STATIC_DRAW);
|
||||
if (!vao)
|
||||
glGenVertexArrays(1, &vao);
|
||||
|
||||
vbo.Create(sizeof(star_catalog_vertex) * vtx_count, vtx_data);
|
||||
vbo.Bind();
|
||||
free_def(vtx_data);
|
||||
|
||||
static const GLsizei buffer_size = sizeof(star_catalog_vertex);
|
||||
@@ -3435,16 +3410,8 @@ void star_catalog_milky_way::create_buffers(int32_t subdivs, float_t uv_rec_scal
|
||||
ebo_data[idx + 3] = restart_index;
|
||||
}
|
||||
|
||||
if (!ebo)
|
||||
glGenBuffers(1, &ebo);
|
||||
|
||||
gl_state_bind_element_array_buffer(ebo, true);
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_ELEMENT_ARRAY_BUFFER,
|
||||
(GLsizeiptr)(sizeof(uint16_t) * ebo_count), ebo_data, 0);
|
||||
else
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER,
|
||||
(GLsizeiptr)(sizeof(uint16_t) * ebo_count), ebo_data, GL_STATIC_DRAW);
|
||||
ebo.Create(sizeof(uint16_t) * ebo_count, ebo_data);
|
||||
ebo.Bind();
|
||||
free_def(ebo_data);
|
||||
|
||||
if (!sampler)
|
||||
@@ -3470,15 +3437,8 @@ void star_catalog_milky_way::delete_buffers() {
|
||||
sampler = 0;
|
||||
}
|
||||
|
||||
if (vbo) {
|
||||
glDeleteBuffers(1, &vbo);
|
||||
vbo = 0;
|
||||
}
|
||||
|
||||
if (ebo) {
|
||||
glDeleteBuffers(1, &ebo);
|
||||
ebo = 0;
|
||||
}
|
||||
vbo.Destroy();
|
||||
ebo.Destroy();
|
||||
|
||||
if (vao) {
|
||||
glDeleteVertexArrays(1, &vao);
|
||||
@@ -4178,20 +4138,10 @@ static void leaf_particle_init(bool change_stage) {
|
||||
if (!leaf_ptcl_vao)
|
||||
glGenVertexArrays(1, &leaf_ptcl_vao);
|
||||
|
||||
if (!leaf_ptcl_vbo)
|
||||
glGenBuffers(1, &leaf_ptcl_vbo);
|
||||
|
||||
static const GLsizei buffer_size = sizeof(leaf_particle_vertex_data);
|
||||
|
||||
gl_state_bind_array_buffer(leaf_ptcl_vbo, true);
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_ARRAY_BUFFER,
|
||||
(GLsizeiptr)(buffer_size * leaf_ptcl_vtx_count),
|
||||
0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT);
|
||||
else
|
||||
glBufferData(GL_ARRAY_BUFFER,
|
||||
(GLsizeiptr)(buffer_size * leaf_ptcl_vtx_count),
|
||||
0, GL_DYNAMIC_DRAW);
|
||||
leaf_ptcl_vbo.Create(buffer_size * leaf_ptcl_vtx_count);
|
||||
leaf_ptcl_vbo.Bind();
|
||||
|
||||
gl_state_bind_vertex_array(leaf_ptcl_vao);
|
||||
glEnableVertexAttribArray(0);
|
||||
@@ -4215,16 +4165,8 @@ static void leaf_particle_init(bool change_stage) {
|
||||
ebo_data[i + 5] = (uint32_t)(j + 3);
|
||||
}
|
||||
|
||||
if (!leaf_ptcl_ebo)
|
||||
glGenBuffers(1, &leaf_ptcl_ebo);
|
||||
|
||||
gl_state_bind_element_array_buffer(leaf_ptcl_ebo, true);
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_ELEMENT_ARRAY_BUFFER,
|
||||
(GLsizeiptr)(sizeof(uint32_t) * ebo_count), ebo_data, 0);
|
||||
else
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER,
|
||||
(GLsizeiptr)(sizeof(uint32_t) * ebo_count), ebo_data, GL_STATIC_DRAW);
|
||||
leaf_ptcl_ebo.Create(sizeof(uint32_t) * ebo_count, ebo_data);
|
||||
leaf_ptcl_ebo.Bind();
|
||||
free_def(ebo_data);
|
||||
|
||||
gl_state_bind_vertex_array(0);
|
||||
@@ -4319,23 +4261,9 @@ static int32_t leaf_particle_disp() {
|
||||
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;
|
||||
if (GLAD_GL_VERSION_4_5) {
|
||||
vtx_data = (leaf_particle_vertex_data*)glMapNamedBuffer(leaf_ptcl_vbo, GL_WRITE_ONLY);
|
||||
if (!vtx_data) {
|
||||
glUnmapNamedBuffer(leaf_ptcl_vbo);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
gl_state_bind_array_buffer(leaf_ptcl_vbo);
|
||||
vtx_data = (leaf_particle_vertex_data*)glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
|
||||
if (!vtx_data) {
|
||||
glUnmapBuffer(GL_ARRAY_BUFFER);
|
||||
gl_state_bind_array_buffer(0);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
leaf_particle_vertex_data* vtx_data = (leaf_particle_vertex_data*)leaf_ptcl_vbo.MapMemory();
|
||||
if (!vtx_data)
|
||||
return 0;
|
||||
|
||||
int32_t vtx_count = 0;
|
||||
leaf_particle_data* data = leaf_ptcl_data;
|
||||
@@ -4411,12 +4339,7 @@ static int32_t leaf_particle_disp() {
|
||||
}
|
||||
}
|
||||
|
||||
if (GLAD_GL_VERSION_4_5)
|
||||
glUnmapNamedBuffer(leaf_ptcl_vbo);
|
||||
else {
|
||||
glUnmapBuffer(GL_ARRAY_BUFFER);
|
||||
gl_state_bind_array_buffer(0);
|
||||
}
|
||||
leaf_ptcl_vbo.UnmapMemory();
|
||||
return vtx_count;
|
||||
}
|
||||
|
||||
@@ -4431,15 +4354,8 @@ static void leaf_particle_free() {
|
||||
leaf_ptcl_vao = 0;
|
||||
}
|
||||
|
||||
if (leaf_ptcl_vbo) {
|
||||
glDeleteBuffers(1, &leaf_ptcl_vbo);
|
||||
leaf_ptcl_vbo = 0;
|
||||
}
|
||||
|
||||
if (leaf_ptcl_ebo) {
|
||||
glDeleteBuffers(1, &leaf_ptcl_ebo);
|
||||
leaf_ptcl_ebo = 0;
|
||||
}
|
||||
leaf_ptcl_vbo.Destroy();
|
||||
leaf_ptcl_ebo.Destroy();
|
||||
|
||||
leaf_particle_scene_ubo.Destroy();
|
||||
}
|
||||
@@ -4466,20 +4382,10 @@ static void particle_init(vec3* offset) {
|
||||
if (!ptcl_vao)
|
||||
glGenVertexArrays(1, &ptcl_vao);
|
||||
|
||||
if (!ptcl_vbo)
|
||||
glGenBuffers(1, &ptcl_vbo);
|
||||
|
||||
static const GLsizei buffer_size = sizeof(particle_vertex_data);
|
||||
|
||||
gl_state_bind_array_buffer(ptcl_vbo, true);
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_ARRAY_BUFFER,
|
||||
(GLsizeiptr)(buffer_size * ptcl_vtx_count),
|
||||
0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT);
|
||||
else
|
||||
glBufferData(GL_ARRAY_BUFFER,
|
||||
(GLsizeiptr)(buffer_size * ptcl_vtx_count),
|
||||
0, GL_DYNAMIC_DRAW);
|
||||
ptcl_vbo.Create(buffer_size * ptcl_vtx_count);
|
||||
ptcl_vbo.Bind();
|
||||
|
||||
gl_state_bind_vertex_array(ptcl_vao);
|
||||
glEnableVertexAttribArray(0);
|
||||
@@ -4694,10 +4600,7 @@ static void particle_free() {
|
||||
ptcl_vao = 0;
|
||||
}
|
||||
|
||||
if (ptcl_vbo) {
|
||||
glDeleteBuffers(1, &ptcl_vbo);
|
||||
ptcl_vbo = 0;
|
||||
}
|
||||
ptcl_vbo.Destroy();
|
||||
|
||||
particle_scene_ubo.Destroy();
|
||||
}
|
||||
|
||||
+5
-14
@@ -101,7 +101,7 @@ struct common_data_struct {
|
||||
|
||||
struct render_data {
|
||||
GLuint grid_vao;
|
||||
GLuint grid_vbo;
|
||||
GL::ArrayBuffer grid_vbo;
|
||||
|
||||
render_data();
|
||||
~render_data();
|
||||
@@ -355,7 +355,7 @@ void draw_pass_3d_grid(render_context* rctx) {
|
||||
|
||||
float_t rob_frame = 0.0f;
|
||||
|
||||
render_data::render_data() : grid_vao(), grid_vbo() {
|
||||
render_data::render_data() : grid_vao() {
|
||||
|
||||
}
|
||||
|
||||
@@ -433,14 +433,8 @@ void render_data::load_common_data() {
|
||||
glGenVertexArrays(1, &grid_vao);
|
||||
gl_state_bind_vertex_array(grid_vao);
|
||||
|
||||
glGenBuffers(1, &grid_vbo);
|
||||
gl_state_bind_array_buffer(grid_vbo);
|
||||
if (GLAD_GL_VERSION_4_4)
|
||||
glBufferStorage(GL_ARRAY_BUFFER, sizeof(float_t) * 3
|
||||
* grid_vertex_count, grid_verts, 0);
|
||||
else
|
||||
glBufferData(GL_ARRAY_BUFFER, sizeof(float_t) * 3
|
||||
* grid_vertex_count, grid_verts, GL_STATIC_DRAW);
|
||||
grid_vbo.Create(sizeof(float_t) * 3 * grid_vertex_count, grid_verts);
|
||||
grid_vbo.Bind();
|
||||
|
||||
glVertexAttrib4f(0, 0.0f, 0.0f, 0.0f, 1.0f);
|
||||
glVertexAttribI1i(1, 2);
|
||||
@@ -459,10 +453,7 @@ void render_data::load_common_data() {
|
||||
}
|
||||
|
||||
void render_data::unload_common_data() {
|
||||
if (grid_vbo) {
|
||||
glDeleteBuffers(1, &grid_vbo);
|
||||
grid_vbo = 0;
|
||||
}
|
||||
grid_vbo.Destroy();
|
||||
|
||||
if (grid_vao) {
|
||||
glDeleteVertexArrays(1, &grid_vao);
|
||||
|
||||
Reference in New Issue
Block a user