aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/graphics/je_mesh.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/graphics/je_mesh.cpp')
-rw-r--r--src/libjin/graphics/je_mesh.cpp68
1 files changed, 67 insertions, 1 deletions
diff --git a/src/libjin/graphics/je_mesh.cpp b/src/libjin/graphics/je_mesh.cpp
index a88abbd..4c27433 100644
--- a/src/libjin/graphics/je_mesh.cpp
+++ b/src/libjin/graphics/je_mesh.cpp
@@ -1,11 +1,77 @@
+#include "../math/je_math.h"
+
#include "je_mesh.h"
+#include "shaders/je_shader.h"
+
+using namespace JinEngine::Math;
+using namespace JinEngine::Graphics::Shaders;
namespace JinEngine
{
namespace Graphics
{
-
+ Mesh::Mesh()
+ : mGraphic(nullptr)
+ {
+ }
+
+ void Mesh::setGraphic(const Graphic* graphic)
+ {
+ mGraphic = graphic;
+ }
+
+ void Mesh::pushVertex(float x, float y, float u, float v, Color color)
+ {
+ Vertex vert;
+ vert.x = x; vert.y = y;
+ vert.u = u; vert.v = v;
+ vert.color = color;
+ pushVertex(vert);
+ }
+
+ void Mesh::pushVertex(const Vertex& vert)
+ {
+ mVertices.push_back(vert);
+ // Update bound
+ if (mVertices.size() == 2)
+ {
+ const Vertex& v0 = mVertices[0];
+ mBound.l = min(v0.x, vert.x);
+ mBound.r = max(v0.x, vert.x);
+ mBound.t = min(v0.y, vert.y);
+ mBound.b = max(v0.y, vert.y);
+ }
+ else
+ {
+ float x = vert.x, y = vert.y;
+ mBound.l = x < mBound.l ? x : mBound.l;
+ mBound.r = x > mBound.r ? x : mBound.r;
+ mBound.t = y < mBound.t ? y : mBound.t;
+ mBound.b = y > mBound.b ? y : mBound.b;
+ }
+ }
+
+ void Mesh::render(float x, float y, float sx, float sy, float r, float ox, float oy) const
+ {
+ if (mGraphic == nullptr || mVertices.size() == 0)
+ return;
+
+ Math::Matrix modelViewMatrix = gl.getModelViewMatrix(x, y, sx, sy, r, ox, oy);
+
+ Shader* shader = gl.getShader();
+ shader->sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelViewMatrix);
+ shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix());
+ shader->beginUploadAttributes();
+ shader->uploadVertices(2, GL_FLOAT, sizeof(Vertex), &(mVertices[0].x));
+ shader->uploadUV(2, GL_FLOAT, sizeof(Vertex), &(mVertices[0].u));
+ shader->uploadColor(4, GL_UNSIGNED_BYTE, sizeof(Vertex), &(mVertices[0].color), GL_TRUE);
+ shader->endUploadAttributes();
+
+ gl.bindTexture(mGraphic->getGLTexture());
+ gl.drawArrays(GL_POLYGON, 0, mVertices.size());
+ gl.bindTexture(0);
+ };
} // namespace Graphics
} // namespace JinEngine \ No newline at end of file