void TBBitmapGL::SetData(uint32 *data) { m_renderer->FlushBitmap(this); BindBitmap(this); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, m_w, m_h, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); TB_IF_DEBUG_SETTING(RENDER_BATCHES, dbg_bitmap_validations++); }
UIBitmapGL::~UIBitmapGL() { m_renderer->FlushBitmap(this); if (m_texture == g_current_texture) BindBitmap(nullptr); glDeleteTextures(1, &m_texture); }
TBBitmapGL::~TBBitmapGL() { // Must flush and unbind before we delete the texture m_renderer->FlushBitmap(this); if (m_texture == g_current_texture) BindBitmap(nullptr); glDeleteTextures(1, &m_texture); }
void UIRendererGL::RenderBatch(Batch *batch) { BindBitmap(batch->bitmap); if (g_current_batch != batch) { g_current_batch = batch; } glBindBuffer(GL_ARRAY_BUFFER, _buffer); glBufferData(GL_ARRAY_BUFFER, sizeof(Vertex) * batch->vertex_count, batch->vertex, GL_STATIC_DRAW); glVertexAttribPointer(_shader.enableVertexAttribute("a_color"), 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(Vertex), GL_OFFSET(offsetof(Batch, vertex[0].col))); glVertexAttribPointer(_shader.enableVertexAttribute("a_texcoord"), 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), GL_OFFSET(offsetof(Batch, vertex[0].u))); glVertexAttribPointer(_shader.enableVertexAttribute("a_pos"), 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), GL_OFFSET(offsetof(Batch, vertex[0].x))); glDrawArrays(GL_TRIANGLES, 0, batch->vertex_count); GL_checkError(); }
void TBRendererGL::RenderBatch(Batch *batch) { // Bind texture and array pointers BindBitmap(batch->bitmap); if (g_current_batch != batch) { glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(Vertex), (void *) &batch->vertex[0].r); glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), (void *) &batch->vertex[0].u); glVertexPointer(2, GL_FLOAT, sizeof(Vertex), (void *) &batch->vertex[0].x); g_current_batch = batch; } // Flush glDrawArrays(GL_TRIANGLES, 0, batch->vertex_count); }
bool TBBitmapGL::Init(int width, int height, uint32 *data) { assert(width == TBGetNearestPowerOfTwo(width)); assert(height == TBGetNearestPowerOfTwo(height)); m_w = width; m_h = height; glGenTextures(1, &m_texture); BindBitmap(this); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); SetData(data); return true; }