I'm trying to port a game of mine from android to the pc(linux), the following code is used to draw a 2d sprite, and works in android,
this is the render code, shader is a wrapper class for shader handling.
GLfloat verts[] =
{
position.x, position.y + size.y, 0.0f, src.left, src.bottom,
position.x, position.y, 0.0f, src.left, src.top,
position.x + size.x, position.y + size.y, 0.0f, src.right, src.bottom,
position.x + size.x, position.y, 0.0f, src.right, src.top
};
GLushort indices[] = {0, 2, 1, 1, 2, 3};
Matrix4f p;
if(rotation != 0.0f)
{
Matrix4f rotmat, trans;
trans.Translate(Vector3f(-rotpos.x, -rotpos.y, 0.0f));
rotmat.RotationZ(RAD(rotation));
rotmat = trans * rotmat;
trans.Translate(Vector3f(rotpos.x, rotpos.y, 0.0f));
p = trans * rotmat;
}
Matrix4f mpv = Graphics::GetOrtho();
p = mpv * p;
shader->Use();
int loc = shader->GetUniformLocation("intexture");
texture->Use();
shader->Uniform1i(loc, 0);
loc = shader->GetUniformLocation("mpv");
shader->UniformMatrix(loc, p);
loc = shader->GetUniformLocation("color");
shader->UniformVec4(loc, color);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 5, verts);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 5, &verts[3]);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices);
vertex shader
#version 410
attribute vec4 vPosition;
attribute vec2 vTexCoord;
varying vec2 fTexCoord;
uniform mat4 mpv;
uniform vec4 color;
void main()
{
gl_Position = vPosition * mpv;
fTexCoord = vTexCoord;
}
fragment shader
#version 410
//precision mediump float;
varying vec2 fTexCoord;
uniform sampler2D intexture;
uniform vec4 color;
void main()
{
gl_FragColor = texture2D(intexture, fTexCoord) * color;
}
Any help would be gratefull.
Thanks.