void Sprite::Draw(RenderTarget& target) { Shader& shader = target.GetShader(); if (m_texture) { m_texture->Bind(); shader.SetUniform("useTexture", 1.f); shader.SetUniform("unifSampler", 0); } else { shader.SetUniform("useTexture", 0.f); } m_vertexBuffer.bindArrayBuffer(); // (position + uv + color) * sizeof(float) const int posOffset = (3 + 2 + 4)*sizeof(float); // position * sizeof(float) const int uvStart = 3*sizeof(float); // (position + uv) * sizeof(float) const int colorStart = (3 + 2)*sizeof(float); // Attribute name, number of components, datatype, bytes between first elements, // offset of first element in buffer shader.setAttributeData("attrPosition", 3, FLOAT_TYPE, posOffset, (void*)0); shader.setAttributeData("attrUV", 2, FLOAT_TYPE, posOffset, (void*)uvStart); shader.setAttributeData("attrColor", 4, FLOAT_TYPE, posOffset, (void*)colorStart); m_vertexBuffer.bindElementBuffer(); uth::Graphics::DrawElements(TRIANGLES, m_vertexBuffer.getIndices().size(), UNSIGNED_SHORT_TYPE, (void*)0); uth::Graphics::BindBuffer(ARRAY_BUFFER, 0); }