Vertex Buffer Object

This commit is contained in:
2024-01-26 14:11:36 -05:00
parent 690270b63d
commit 0ee14e5482
7 changed files with 30 additions and 16 deletions

View File

@@ -25,7 +25,7 @@ public:
//float tickDelta = NULL;
bool fullscreen;
bool debug = true;
bool useVBO = false;
bool useVBO = true;
uint64_t tickCount = 0;
uint64_t frameCount = 0;
float frameDelta = NULL;

View File

@@ -24,10 +24,5 @@ public:
void load(const std::string& filename);
void drawWireframe();
void draw();
};
class VertexBufferObject {
std::string name;
GLuint vbo = NULL;
void load(const VertexArray* vArray);
};

View File

@@ -44,10 +44,12 @@ void Engine::initGL()
glDepthFunc(GL_LESS);
glDepthMask(GL_TRUE);
glClearDepth(1.0f);
//glEnable(GL_BLEND);
glEnable(GL_CULL_FACE);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_VERTEX_ARRAY);
//glDepthRange(-0.5f,0.5f);
}

View File

@@ -74,7 +74,6 @@ void Render::render_loop() {
auto stop = std::chrono::high_resolution_clock::now();
float dT = (std::chrono::duration_cast<std::chrono::microseconds>(stop - start).count());
/*
//If we have more than 1000 fps.
if (dT < 1000 && engine->window->getFlag(RWindowFlags::IN_FOCUS)) {
int remaining = 1000 - dT;
@@ -87,7 +86,6 @@ void Render::render_loop() {
std::this_thread::sleep_for(std::chrono::microseconds(remaining));
dT += remaining;
}
*/
engine->frameDelta = (dT / 1000000);
}
}

View File

@@ -65,7 +65,7 @@ void Player::loadTexture() {
VertexArray *Player::getGeometry() {
if (engine->world->geometryList.empty())
loadTexture();
loadGeometry();
for (auto& vArray : engine->world->geometryList)
if (vArray.name == "player")
return &vArray;

View File

@@ -47,6 +47,22 @@ void VertexArray::load (const std::string& filename) {
}
}
file.close();
if (engine->useVBO) {
if (vbo == NULL) {
GLfloat verts[vertices.size() * 3];
size_t index = 0;
for (const auto &vertex: vertices) {
verts[index++] = vertex.x;
verts[index++] = vertex.y;
verts[index++] = vertex.z;
}
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(verts), &verts, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
}
}
}
//TODO: Render queue
@@ -57,11 +73,19 @@ void VertexArray::draw() {
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glVertexPointer(3, GL_FLOAT, sizeof(Vertex), &vertices[0].x);
glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &vertices[0].u);
if (!engine->useVBO)
glVertexPointer(3, GL_FLOAT, sizeof(Vertex), &vertices[0].x);
if (engine->useVBO) {
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glVertexPointer(3, GL_FLOAT, 0, 0);
}
glDrawElements(GL_TRIANGLES, indices.size(), GL_UNSIGNED_INT, &indices[0]);
if (engine->useVBO)
glBindBuffer(GL_ARRAY_BUFFER, 0);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
glDisable(GL_TEXTURE_2D);
@@ -126,4 +150,4 @@ void VertexArray::rotate(const LinearAlgebra::Vector3& angle) {
vertex.y = newY;
vertex.z = newZ;
}
}
}

View File

@@ -1,5 +0,0 @@
#include <types/vertex.h>
void VertexBufferObject::load(const VertexArray *vArray) {
if (vbo == NULL) {
}
}