diff --git a/engine/include/fishbone/draw.h b/engine/include/fishbone/draw.h index 5d52a2d..d01a57e 100644 --- a/engine/include/fishbone/draw.h +++ b/engine/include/fishbone/draw.h @@ -77,6 +77,16 @@ namespace fishbone { this->triangle(v, t, n); } void triangle(std::vector vertices, std::vector texcoords, std::vector normals); + void quad(std::vector vertices, std::vector texcoords) { + std::vector v; + std::vector t; + + v = fishbone::quadToTriangle(vertices); + t = fishbone::quadToTriangle(texcoords); + + this->triangle(v, t); + } + void triangle(std::vector vertices, std::vector texcoords); }; static float maxDistance = 64; diff --git a/engine/src/draw/opengl.cc b/engine/src/draw/opengl.cc index 0270d2a..9289620 100644 --- a/engine/src/draw/opengl.cc +++ b/engine/src/draw/opengl.cc @@ -276,4 +276,33 @@ void fishbone::Renderer::triangle(std::vector vertices delete[] t; delete[] v; } + +void fishbone::Renderer::triangle(std::vector vertices, std::vector texcoords) { + GLfloat* v = new GLfloat[vertices.size() * 2]; + GLfloat* t = new GLfloat[texcoords.size() * 2]; + + for(int i = 0; i < vertices.size(); i++) { + v[i * 2 + 0] = vertices[i].x; + v[i * 2 + 1] = vertices[i].y; + } + + for(int i = 0; i < texcoords.size(); i++) { + t[i * 2 + 0] = texcoords[i].x; + t[i * 2 + 1] = texcoords[i].y; + } + + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + + glVertexPointer(2, GL_FLOAT, 0, v); + glTexCoordPointer(2, GL_FLOAT, 0, t); + + glDrawArrays(GL_TRIANGLES, 0, vertices.size()); + + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + glDisableClientState(GL_VERTEX_ARRAY); + + delete[] t; + delete[] v; +} #endif