X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fcode.git;a=blobdiff_plain;f=src%2Fscreen.cpp;h=6d67820126f5ab24cee9dab9a5ca40934c8a5417;hp=78174825b8be5a38586baf475f31925e8e7604ff;hb=57c3c69cbc7d9b3724874fd83cd001984ac21b6a;hpb=070e5e119baa62352418dbc2dd1b0670b4da8dca diff --git a/src/screen.cpp b/src/screen.cpp index 7817482..6d67820 100644 --- a/src/screen.cpp +++ b/src/screen.cpp @@ -5,6 +5,7 @@ #include // for access(2) #include // for access(2) +#include "bufferbuilder.h" #include "shaderprogram.h" #define BASICTEX_VERT \ @@ -308,7 +309,7 @@ void Screen::RenderBMP(const char * filename) const int w = bmp->w; int h = bmp->h; - GLenum texture_format; + GLenum texture_format = GL_RGBA; switch (bmp->format->BytesPerPixel) { case 4: //contains alpha @@ -415,8 +416,8 @@ void Screen::DebugFontFlush() glEnableVertexAttribArray(1); glEnable(GL_PRIMITIVE_RESTART); glPrimitiveRestartIndex(65535); - glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 4*sizeof(float), (void*)(2*sizeof(float))); - glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 4*sizeof(float), 0); + glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 4*sizeof(float), 0); + glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 4*sizeof(float), (void*)(2*sizeof(float))); glDrawElements(GL_TRIANGLE_STRIP, m_debug_font_index_head, GL_UNSIGNED_SHORT, 0); glDisable(GL_PRIMITIVE_RESTART); glDisableVertexAttribArray(1); @@ -424,6 +425,8 @@ void Screen::DebugFontFlush() glDisable(GL_BLEND); + m_debug_font_vertices.Invalidate(); + m_debug_font_indices.Invalidate(); m_debug_font_vertex_head = 0; m_debug_font_index_head = 0; } @@ -432,11 +435,17 @@ void Screen::DebugFontPrint(const char* str) { if (!m_debug_font_atlas) return; - float *vertexData = (float*)m_debug_font_vertices.MapRange(m_debug_font_vertex_head*sizeof(float), m_debug_font_vertices.GetSize() - m_debug_font_vertex_head*sizeof(float), false, true, true); - uint16_t *indexData = (uint16_t*)m_debug_font_indices.MapRange(m_debug_font_index_head*sizeof(uint16_t), m_debug_font_indices.GetSize() - m_debug_font_index_head*sizeof(uint16_t), false, true, true); + struct fontvertex + { + float x, y, s, t; + }; + + BufferBuilder vertexData(m_debug_font_vertices.MapRange(m_debug_font_vertex_head*sizeof(float), m_debug_font_vertices.GetSize() - m_debug_font_vertex_head*sizeof(float), false, true, true), m_debug_font_vertices.GetSize() - m_debug_font_vertex_head*sizeof(float)); + BufferBuilder indexData(m_debug_font_indices.MapRange(m_debug_font_index_head*sizeof(uint16_t), m_debug_font_indices.GetSize() - m_debug_font_index_head*sizeof(uint16_t), false, true, true), m_debug_font_indices.GetSize() - m_debug_font_index_head*sizeof(uint16_t)); + + size_t baseVertex = m_debug_font_vertex_head/4; while (*str) { - if ((m_debug_font_vertex_head*sizeof(float) + 16*sizeof(float) >= m_debug_font_vertices.GetSize() ) || - (m_debug_font_index_head*sizeof(uint16_t) + 5*sizeof(uint16_t) >= m_debug_font_indices.GetSize())) + if (!vertexData.Free(4) || !indexData.Free(5)) { m_debug_font_indices.UnMap(); m_debug_font_vertices.UnMap(); @@ -444,31 +453,22 @@ void Screen::DebugFontPrint(const char* str) DebugFontPrint(str); return; } - if (*str >= 32 && *str < 128) { + if (*str >= 32 && (unsigned char)(*str) < 128) { stbtt_aligned_quad q; stbtt_GetBakedQuad(m_debug_font_rects, 1024,1024, *str-32, &m_debug_font_x,&m_debug_font_y,&q,1); - *vertexData = q.s0; vertexData++; - *vertexData = q.t0; vertexData++; - *vertexData = q.x0; vertexData++; - *vertexData = q.y0; vertexData++; - *vertexData = q.s1; vertexData++; - *vertexData = q.t0; vertexData++; - *vertexData = q.x1; vertexData++; - *vertexData = q.y0; vertexData++; - *vertexData = q.s1; vertexData++; - *vertexData = q.t1; vertexData++; - *vertexData = q.x1; vertexData++; - *vertexData = q.y1; vertexData++; - *vertexData = q.s0; vertexData++; - *vertexData = q.t1; vertexData++; - *vertexData = q.x0; vertexData++; - *vertexData = q.y1; vertexData++; - - *indexData = m_debug_font_vertex_head/4; indexData++; - *indexData = m_debug_font_vertex_head/4+1; indexData++; - *indexData = m_debug_font_vertex_head/4+3; indexData++; - *indexData = m_debug_font_vertex_head/4+2; indexData++; - *indexData = 65535; indexData++; + size_t index = vertexData.Add({q.x0, q.y0, q.s0, q.t0}); + index += baseVertex; + indexData.Add(index); + index = vertexData.Add({q.x1, q.y0, q.s1, q.t0}); + index += baseVertex; + indexData.Add(index); + index = vertexData.Add({q.x0, q.y1, q.s0, q.t1}); + index += baseVertex; + indexData.Add(index); + index = vertexData.Add({q.x1, q.y1, q.s1, q.t1}); + index += baseVertex; + indexData.Add(index); + indexData.Add(65535); m_debug_font_vertex_head += 16; m_debug_font_index_head += 5;