Index Rendering
This commit is contained in:
parent
017bf6057a
commit
07f75966f2
@ -13,15 +13,18 @@ GameLayer::GameLayer() :model(0,0) //Platzhalter, echtes Model kommt in onAttach
|
|||||||
void GameLayer::onAttach()
|
void GameLayer::onAttach()
|
||||||
{
|
{
|
||||||
std::vector<float> vertices = {
|
std::vector<float> vertices = {
|
||||||
-0.5f, 0.5f, 0.f,
|
-0.5f, 0.5f, 0.f,//v0
|
||||||
-0.5f, -0.5f, 0.f,
|
-0.5f, -0.5f, 0.f,//v1
|
||||||
0.5f, -0.5f, 0.f,
|
0.5f, -0.5f, 0.f,//v2
|
||||||
0.5f, -0.5f, 0.f,
|
0.5f, 0.5f, 0.f,//v3
|
||||||
0.5f, 0.5f, 0.f,
|
|
||||||
-0.5f, 0.5f, 0.f
|
|
||||||
};
|
};
|
||||||
|
|
||||||
model = loader.loadToVAO(vertices);
|
std::vector<int> indices = {
|
||||||
|
0,1,3,
|
||||||
|
3,1,2
|
||||||
|
};
|
||||||
|
|
||||||
|
model = loader.loadToVAO(vertices, indices);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameLayer::onDetach()
|
void GameLayer::onDetach()
|
||||||
|
|||||||
@ -19,7 +19,7 @@ void Renderer::renderFrame(const RawModel& model) {
|
|||||||
void Renderer::renderRawModel(const RawModel& model) {
|
void Renderer::renderRawModel(const RawModel& model) {
|
||||||
glBindVertexArray(model.vaoID);
|
glBindVertexArray(model.vaoID);
|
||||||
glEnableVertexAttribArray(0);
|
glEnableVertexAttribArray(0);
|
||||||
glDrawArrays(GL_TRIANGLES,0 , model.vertexCount);
|
glDrawElements(GL_TRIANGLES , model.vertexCount, GL_UNSIGNED_INT, 0);
|
||||||
glDisableVertexAttribArray(0);
|
glDisableVertexAttribArray(0);
|
||||||
glBindVertexArray(0);
|
glBindVertexArray(0);
|
||||||
|
|
||||||
|
|||||||
@ -4,11 +4,12 @@
|
|||||||
|
|
||||||
#include "Loader.h"
|
#include "Loader.h"
|
||||||
|
|
||||||
RawModel Loader::loadToVAO(std::vector<float> vertices){
|
RawModel Loader::loadToVAO(const std::vector<float>& vertices, const std::vector<int>& indices){
|
||||||
GLuint vaoID = createVAO();
|
GLuint vaoID = createVAO();
|
||||||
storeDataInAttributeList(0, vertices);
|
storeDataInAttributeList(0, vertices);
|
||||||
|
bindIndicesBuffer(indices);
|
||||||
unbindVAO();
|
unbindVAO();
|
||||||
return {vaoID, static_cast<int>(vertices.size() / 3)};
|
return {vaoID, static_cast<int>(indices.size())};
|
||||||
}
|
}
|
||||||
|
|
||||||
Loader::~Loader() {
|
Loader::~Loader() {
|
||||||
@ -44,6 +45,16 @@ void Loader::storeDataInAttributeList(int attributeNumber, const std::vector<flo
|
|||||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Loader::bindIndicesBuffer(const std::vector<int>& indices) {
|
||||||
|
GLuint vboID;
|
||||||
|
glGenBuffers(1, &vboID);
|
||||||
|
vboIDs.push_back(vboID);
|
||||||
|
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboID);
|
||||||
|
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size() * sizeof(int), indices.data(), GL_STATIC_DRAW);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void Loader::unbindVAO() {
|
void Loader::unbindVAO() {
|
||||||
glBindVertexArray(0);
|
glBindVertexArray(0);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,13 +13,14 @@
|
|||||||
class Loader
|
class Loader
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RawModel loadToVAO(std::vector<float> vertices);
|
RawModel loadToVAO(const std::vector<float>& vertices, const std::vector<int>& indices);
|
||||||
~Loader();
|
~Loader();
|
||||||
void cleanUp();
|
void cleanUp();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
GLuint createVAO();
|
GLuint createVAO();
|
||||||
void storeDataInAttributeList(int attributeNumber, const std::vector<float> &data);
|
void storeDataInAttributeList(int attributeNumber, const std::vector<float> &data);
|
||||||
|
void bindIndicesBuffer(const std::vector<int> &indices);
|
||||||
void unbindVAO();
|
void unbindVAO();
|
||||||
|
|
||||||
std::vector<GLuint> vaoIDs;
|
std::vector<GLuint> vaoIDs;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user