diff options
author | xbmc <fernetmenta@online.de> | 2013-02-21 18:09:07 +0100 |
---|---|---|
committer | S. Davilla <davilla@4pi.com> | 2013-02-25 12:56:16 -0500 |
commit | 32942b26aad801432f42fdc78f9ea25d3f45b729 (patch) | |
tree | f07e2fc71db54021674124d0d390052bfcda9981 | |
parent | 84fef541dfe46dd34dfad0c8b5865de6c529b385 (diff) |
fix ass subs for GLES
-rw-r--r-- | xbmc/cores/VideoRenderers/OverlayRendererGL.cpp | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/xbmc/cores/VideoRenderers/OverlayRendererGL.cpp b/xbmc/cores/VideoRenderers/OverlayRendererGL.cpp index 4375d19cae..ed8e48d487 100644 --- a/xbmc/cores/VideoRenderers/OverlayRendererGL.cpp +++ b/xbmc/cores/VideoRenderers/OverlayRendererGL.cpp @@ -359,7 +359,7 @@ COverlayGlyphGL::~COverlayGlyphGL() void COverlayGlyphGL::Render(SRenderState& state) { - if (m_texture == 0) + if ((m_texture == 0) || (m_count == 0)) return; glEnable(GL_TEXTURE_2D); @@ -418,21 +418,32 @@ void COverlayGlyphGL::Render(SRenderState& state) GLint colLoc = g_Windowing.GUIShaderGetCol(); GLint tex0Loc = g_Windowing.GUIShaderGetCoord0(); - glVertexAttribPointer(posLoc, 3, GL_FLOAT, GL_FALSE, sizeof(VERTEX), (char*)m_vertex + offsetof(VERTEX, x)); - glVertexAttribPointer(colLoc, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(VERTEX), (char*)m_vertex + offsetof(VERTEX, r)); - glVertexAttribPointer(tex0Loc, 2, GL_FLOAT, GL_FALSE, sizeof(VERTEX), (char*)m_vertex + offsetof(VERTEX, u)); + // stack object until VBOs will be used + std::vector<VERTEX> vecVertices( 6 * m_count); + VERTEX *vertices = &vecVertices[0]; + + for (int i=0; i<m_count*4; i+=4) + { + *vertices++ = m_vertex[i]; + *vertices++ = m_vertex[i+1]; + *vertices++ = m_vertex[i+2]; + + *vertices++ = m_vertex[i+1]; + *vertices++ = m_vertex[i+3]; + *vertices++ = m_vertex[i+2]; + } + + vertices = &vecVertices[0]; + + glVertexAttribPointer(posLoc, 3, GL_FLOAT, GL_FALSE, sizeof(VERTEX), (char*)vertices + offsetof(VERTEX, x)); + glVertexAttribPointer(colLoc, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(VERTEX), (char*)vertices + offsetof(VERTEX, r)); + glVertexAttribPointer(tex0Loc, 2, GL_FLOAT, GL_FALSE, sizeof(VERTEX), (char*)vertices + offsetof(VERTEX, u)); glEnableVertexAttribArray(posLoc); glEnableVertexAttribArray(colLoc); glEnableVertexAttribArray(tex0Loc); - // GLES2 version - // As using triangle strips, have to do in sets of 4. - // This is due to limitations of ES, in that tex/col has to be same size as ver! - for (int i=0; i<(m_count*4); i+=4) - { - glDrawArrays(GL_TRIANGLE_STRIP, i, 4); - } + glDrawArrays(GL_TRIANGLES, 0, vecVertices.size()); glDisableVertexAttribArray(posLoc); glDisableVertexAttribArray(colLoc); |