1
0
Fork 0

Update cmake

This commit is contained in:
MrDev023 2016-10-08 18:35:02 +02:00
parent 9b1b3a5c97
commit 8f9bc0da09
7 changed files with 164 additions and 34 deletions

View file

@ -32,34 +32,40 @@ class VAO;
class VAO{
public:
static const int VERTEX_DATA = 0,COLOR_DATA = 1,TEX_COORD_DATA = 2,NORMAL_DATA = 3;
std::vector<VBO*> data;
unsigned int n;
bool isIn3DRender;
GLuint id;
GLuint typeRender;
VAO(GLuint);
VAO(GLuint,unsigned int,bool);
~VAO();
void addData(int,float*,int);
void bufferData();
void render2D();
void render3D();
void render();
};
class VBO{
private:
void render2D();
void render3D();
void bufferData2D();
void bufferData3D();
public:
GLuint id;
GLuint typeRender;
bool isIn3DRender;
std::vector<float> data;
int size;
VBO();
VBO(GLuint);
VBO(GLuint,bool);
~VBO();
void addData(float*,int);
void bufferData();
void render2D();
void render3D();
void render();
void bindBuffer();
void unBindBuffer();
};

View file

@ -1,34 +1,45 @@
#include "renderer.h"
VAO::VAO(GLuint typeRender){
VAO::VAO(GLuint typeRender,unsigned int nm,bool isIn3DRender){
glGenVertexArrays(1,&id);
glBindVertexArray(id);
this->typeRender = typeRender;
this->data.push_back(new VBO(typeRender));
this->data.push_back(new VBO(typeRender));
this->data.push_back(new VBO(typeRender));
this->data.push_back(new VBO(typeRender));
for(int i = 0;i < 4;i++){
data.push_back(new VBO(typeRender,isIn3DRender));
}
glBindVertexArray(0);
this->n = nm;
this->isIn3DRender = isIn3DRender;
}
VAO::~VAO(){
for(int i = 0;i < 4;i++){
glBindVertexArray(id);
for(int i = 0;i < this->n;i++){
delete this->data[i];
}
this->data.clear();
glBindVertexArray(0);
glDeleteVertexArrays(1,&id);
}
void VAO::addData(int type,float* data,int size){
this->data[type]->addData(data,size);
void VAO::addData(int i,float* data,int size){
glBindVertexArray(id);
this->data[i]->addData(data,size);
glBindVertexArray(0);
}
void VAO::bufferData(){
glBindVertexArray(id);
for(int i = 0;i < 4;i++){
this->data[i]->bufferData();
}
glBindVertexArray(0);
}
void VAO::render2D(){
void VAO::render(){
glBindVertexArray(id);
for(int i = 0;i < 4;i++){
this->data[i]->render();
}
glBindVertexArray(0);
}
void VAO::render3D(){
}

View file

@ -4,12 +4,14 @@ VBO::VBO(){
this->typeRender = GL_TRIANGLE_STRIP;
glGenBuffers(1,&this->id);
this->size = 0;
this->isIn3DRender = true;
}
VBO::VBO(GLuint typeRender){
VBO::VBO(GLuint typeRender,bool isIn3DRender){
this->typeRender = typeRender;
glGenBuffers(1,&this->id);
this->size = 0;
this->isIn3DRender = isIn3DRender;
}
VBO::~VBO(){
@ -17,6 +19,7 @@ VBO::~VBO(){
glDeleteBuffers(1,&this->id);
}
// 2 ou 3 vertex + 4 color (RGBA) + TexCoords + Normal
void VBO::addData(float* data,int size){
for(int i = 0;i < size;i++){
this->data.push_back(data[i]);
@ -25,8 +28,55 @@ void VBO::addData(float* data,int size){
}
void VBO::bufferData(){
if(this->isIn3DRender) bufferData3D();
else bufferData2D();
}
void VBO::bufferData2D(){
glBindBuffer(GL_ARRAY_BUFFER,this->id);
glBufferData(GL_ARRAY_BUFFER, this->size,&this->data[0], GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 2, GL_FLOAT, false, (2 + 3 + 4 + 2) * sizeof(float), 0);
glEnableVertexAttribArray(3);
glVertexAttribPointer(3, 3, GL_FLOAT, false, (2 + 3 + 4 + 2) * sizeof(float), (void*)(2 * sizeof(float)));
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 4, GL_FLOAT, false, (2 + 3 + 4 + 2) * sizeof(float), (void*)((2 + 3) * sizeof(float)));
glEnableVertexAttribArray(2);
glVertexAttribPointer(2, 2, GL_FLOAT, false, (2 + 3 + 4 + 2) * sizeof(float), (void*)((2 + 3 + 4) * sizeof(float)));
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glDisableVertexAttribArray(2);
glDisableVertexAttribArray(3);
glBindBuffer(GL_ARRAY_BUFFER,0);
}
void VBO::bufferData3D(){
glBindBuffer(GL_ARRAY_BUFFER,this->id);
glBufferData(GL_ARRAY_BUFFER, this->size,&this->data[0], GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, false, (3 + 3 + 4 + 2) * sizeof(float), 0);
glEnableVertexAttribArray(3);
glVertexAttribPointer(3, 3, GL_FLOAT, false, (3 + 3 + 4 + 2) * sizeof(float), (void*)(3 * sizeof(float)));
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 4, GL_FLOAT, false, (3 + 3 + 4 + 2) * sizeof(float), (void*)((3 + 3) * sizeof(float)));
glEnableVertexAttribArray(2);
glVertexAttribPointer(2, 2, GL_FLOAT, false, (3 + 3 + 4 + 2) * sizeof(float), (void*)((3 + 3 + 4) * sizeof(float)));
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glDisableVertexAttribArray(2);
glDisableVertexAttribArray(3);
glBindBuffer(GL_ARRAY_BUFFER,0);
}
@ -37,11 +87,45 @@ void VBO::bindBuffer(){
void VBO::unBindBuffer(){
glBindBuffer(GL_ARRAY_BUFFER,0);
}
void VBO::render(){
if(this->isIn3DRender) render3D();
else render2D();
}
void VBO::render2D(){
// Plus tard pas besoin pour l instant
glBindBuffer(GL_ARRAY_BUFFER,this->id);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glEnableVertexAttribArray(2);
glEnableVertexAttribArray(3);
glDrawArrays(GL_QUADS, 0, size/(2 + 3 + 4 + 2));
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glDisableVertexAttribArray(2);
glDisableVertexAttribArray(3);
glBindBuffer(GL_ARRAY_BUFFER,0);
}
void VBO::render3D(){
// Plus tard pas besoin pour l instant
glBindBuffer(GL_ARRAY_BUFFER,this->id);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glEnableVertexAttribArray(2);
glEnableVertexAttribArray(3);
glDrawArrays(GL_QUADS, 0, size/(3 + 3 + 4 + 2));
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glDisableVertexAttribArray(2);
glDisableVertexAttribArray(3);
glBindBuffer(GL_ARRAY_BUFFER,0);
}