From 5c6b71e3a1b2f09155ea04263c268e3279e5c943 Mon Sep 17 00:00:00 2001 From: Clownacy Date: Thu, 17 Sep 2020 18:15:24 +0100 Subject: [PATCH] Optimise a little when using OpenGL3 --- src/Backends/Rendering/OpenGL3.cpp | 39 ++++++++++++++++++------------ 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/src/Backends/Rendering/OpenGL3.cpp b/src/Backends/Rendering/OpenGL3.cpp index 68255594..26af370d 100644 --- a/src/Backends/Rendering/OpenGL3.cpp +++ b/src/Backends/Rendering/OpenGL3.cpp @@ -933,25 +933,34 @@ void RenderBackend_DestroyGlyphAtlas(RenderBackend_GlyphAtlas *atlas) void RenderBackend_UploadGlyph(RenderBackend_GlyphAtlas *atlas, size_t x, size_t y, const unsigned char *pixels, size_t width, size_t height, size_t pitch) { +#ifdef USE_OPENGLES2 unsigned char *buffer = (unsigned char*)malloc(width * height); - if (buffer != NULL) - { - for (size_t y = 0; y < height; ++y) - memcpy (&buffer[y * width], &pixels[y * pitch], width); + if (buffer == NULL) + return; - SetTextureUploadAlignment(width); - glBindTexture(GL_TEXTURE_2D, atlas->texture_id); - #ifdef USE_OPENGLES2 - glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, width, height, GL_LUMINANCE, GL_UNSIGNED_BYTE, buffer); - #else - glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, width, height, GL_RED, GL_UNSIGNED_BYTE, buffer); - #endif - glBindTexture(GL_TEXTURE_2D, last_source_texture); - glPixelStorei(GL_UNPACK_ALIGNMENT, 4); + for (size_t y = 0; y < height; ++y) + memcpy (&buffer[y * width], &pixels[y * pitch], width); +#else + const unsigned char *buffer = pixels; - free(buffer); - } + glPixelStorei(GL_UNPACK_ROW_LENGTH, pitch); +#endif + + SetTextureUploadAlignment(width); + glBindTexture(GL_TEXTURE_2D, atlas->texture_id); +#ifdef USE_OPENGLES2 + glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, width, height, GL_LUMINANCE, GL_UNSIGNED_BYTE, buffer); +#else + glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, width, height, GL_RED, GL_UNSIGNED_BYTE, buffer); +#endif + glBindTexture(GL_TEXTURE_2D, last_source_texture); + +#ifdef USE_OPENGLES2 + free(buffer); +#else + glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); +#endif } void RenderBackend_PrepareToDrawGlyphs(RenderBackend_GlyphAtlas *atlas, RenderBackend_Surface *destination_surface, unsigned char red, unsigned char green, unsigned char blue)