Vertex Buffer Object
This commit is contained in:
@@ -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;
|
||||
|
@@ -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);
|
||||
};
|
@@ -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);
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
@@ -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;
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,5 +0,0 @@
|
||||
#include <types/vertex.h>
|
||||
void VertexBufferObject::load(const VertexArray *vArray) {
|
||||
if (vbo == NULL) {
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user