From 11bbad7372539841811bffad257e425283ecc79d Mon Sep 17 00:00:00 2001 From: Clownacy Date: Tue, 15 Sep 2020 19:40:10 +0100 Subject: [PATCH] Cleanup Now RenderBackend_DrawGlyph doesn't pass an unnecessary parameter --- src/Backends/Rendering.h | 2 +- src/Backends/Rendering/OpenGL3.cpp | 32 +++++++++++++-------------- src/Backends/Rendering/SDLSurface.cpp | 10 +++++---- src/Backends/Rendering/SDLTexture.cpp | 8 ++++--- src/Backends/Rendering/Software.cpp | 10 ++++----- src/Backends/Rendering/WiiU.cpp | 16 +++++++------- src/Font.cpp | 2 +- 7 files changed, 41 insertions(+), 39 deletions(-) diff --git a/src/Backends/Rendering.h b/src/Backends/Rendering.h index f1ecbf5c..d142a066 100644 --- a/src/Backends/Rendering.h +++ b/src/Backends/Rendering.h @@ -27,6 +27,6 @@ RenderBackend_GlyphAtlas* RenderBackend_CreateGlyphAtlas(size_t width, size_t he 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); void RenderBackend_PrepareToDrawGlyphs(RenderBackend_GlyphAtlas *atlas, RenderBackend_Surface *destination_surface, unsigned char red, unsigned char green, unsigned char blue); -void RenderBackend_DrawGlyph(RenderBackend_GlyphAtlas *atlas, long x, long y, size_t glyph_x, size_t glyph_y, size_t glyph_width, size_t glyph_height); +void RenderBackend_DrawGlyph(long x, long y, size_t glyph_x, size_t glyph_y, size_t glyph_width, size_t glyph_height); void RenderBackend_HandleRenderTargetLoss(void); void RenderBackend_HandleWindowResize(size_t width, size_t height); diff --git a/src/Backends/Rendering/OpenGL3.cpp b/src/Backends/Rendering/OpenGL3.cpp index cbaf1df3..2724c43a 100644 --- a/src/Backends/Rendering/OpenGL3.cpp +++ b/src/Backends/Rendering/OpenGL3.cpp @@ -65,8 +65,8 @@ static struct GLuint id; struct { - GLint texture_coordinate_transform; GLint vertex_transform; + GLint texture_coordinate_transform; } uniforms; } program_texture; @@ -75,8 +75,8 @@ static struct GLuint id; struct { - GLint texture_coordinate_transform; GLint vertex_transform; + GLint texture_coordinate_transform; } uniforms; } program_texture_colour_key; @@ -95,8 +95,8 @@ static struct GLuint id; struct { - GLint texture_coordinate_transform; GLint vertex_transform; + GLint texture_coordinate_transform; GLint colour; } uniforms; } program_glyph; @@ -118,8 +118,6 @@ static GLuint last_destination_texture; static RenderBackend_Surface framebuffer; -static RenderBackend_Surface *glyph_destination_surface; - static size_t actual_screen_width; static size_t actual_screen_height; @@ -196,7 +194,9 @@ void main() \ gl_FragColor = colour * vec4(1.0, 1.0, 1.0, texture2D(tex, texture_coordinates).r); \ } \ "; + #else + static const GLchar *vertex_shader_plain = " \ #version 150 core\n \ uniform mat4 vertex_transform; \ @@ -270,6 +270,8 @@ void main() \ } \ "; #endif + +// This was used back when CSE2 used GLEW instead of glad /* static void GLAPIENTRY MessageCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *message, const void* userParam) { @@ -283,6 +285,7 @@ static void GLAPIENTRY MessageCallback(GLenum source, GLenum type, GLuint id, GL Backend_PrintInfo("OpenGL debug: %s", message); } */ + //////////////////////// // Shader compilation // //////////////////////// @@ -677,7 +680,6 @@ void RenderBackend_DrawScreen(void) vertex_buffer_slot->vertices[1][1].texture.y = 0.0f; vertex_buffer_slot->vertices[1][2].texture.x = 0.0f; vertex_buffer_slot->vertices[1][2].texture.y = 0.0f; - } FlushVertexBuffer(); @@ -979,29 +981,25 @@ void RenderBackend_UploadGlyph(RenderBackend_GlyphAtlas *atlas, size_t x, size_t void RenderBackend_PrepareToDrawGlyphs(RenderBackend_GlyphAtlas *atlas, RenderBackend_Surface *destination_surface, unsigned char red, unsigned char green, unsigned char blue) { - (void)atlas; - static unsigned char last_red; static unsigned char last_green; static unsigned char last_blue; - glyph_destination_surface = destination_surface; - // Flush vertex data if a context-change is needed - if (last_render_mode != MODE_DRAW_GLYPH || last_destination_texture != glyph_destination_surface->texture_id || last_source_texture != atlas->texture_id || last_red != red || last_green != green || last_blue != blue) + if (last_render_mode != MODE_DRAW_GLYPH || last_destination_texture != destination_surface->texture_id || last_source_texture != atlas->texture_id || last_red != red || last_green != green || last_blue != blue) { FlushVertexBuffer(); last_render_mode = MODE_DRAW_GLYPH; - last_destination_texture = glyph_destination_surface->texture_id; + last_destination_texture = destination_surface->texture_id; last_source_texture = atlas->texture_id; last_red = red; last_green = green; last_blue = blue; const GLfloat vertex_transform[4 * 4] = { - 2.0f / glyph_destination_surface->width, 0.0f, 0.0f, -1.0f, - 0.0f, 2.0f / glyph_destination_surface->height, 0.0f, -1.0f, + 2.0f / destination_surface->width, 0.0f, 0.0f, -1.0f, + 0.0f, 2.0f / destination_surface->height, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, }; @@ -1012,8 +1010,8 @@ void RenderBackend_PrepareToDrawGlyphs(RenderBackend_GlyphAtlas *atlas, RenderBa glUniformMatrix4fv(program_glyph.uniforms.vertex_transform, 1, GL_FALSE, vertex_transform); // Point our framebuffer to the destination texture - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, glyph_destination_surface->texture_id, 0); - glViewport(0, 0, glyph_destination_surface->width, glyph_destination_surface->height); + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, destination_surface->texture_id, 0); + glViewport(0, 0, destination_surface->width, destination_surface->height); glEnable(GL_BLEND); @@ -1024,7 +1022,7 @@ void RenderBackend_PrepareToDrawGlyphs(RenderBackend_GlyphAtlas *atlas, RenderBa } } -void RenderBackend_DrawGlyph(RenderBackend_GlyphAtlas *atlas, long x, long y, size_t glyph_x, size_t glyph_y, size_t glyph_width, size_t glyph_height) +void RenderBackend_DrawGlyph(long x, long y, size_t glyph_x, size_t glyph_y, size_t glyph_width, size_t glyph_height) { // Add data to the vertex queue VertexBufferSlot *vertex_buffer_slot = GetVertexBufferSlot(); diff --git a/src/Backends/Rendering/SDLSurface.cpp b/src/Backends/Rendering/SDLSurface.cpp index 0f8486a4..2f97b55a 100644 --- a/src/Backends/Rendering/SDLSurface.cpp +++ b/src/Backends/Rendering/SDLSurface.cpp @@ -26,7 +26,8 @@ static SDL_Surface *window_sdlsurface; static RenderBackend_Surface framebuffer; -static SDL_Surface *glyph_destination_sdlsurface; +static RenderBackend_GlyphAtlas *glyph_atlas; +static RenderBackend_Surface *glyph_destination_surface; static void RectToSDLRect(const RenderBackend_Rect *rect, SDL_Rect *sdl_rect) { @@ -230,13 +231,14 @@ void RenderBackend_UploadGlyph(RenderBackend_GlyphAtlas *atlas, size_t x, size_t void RenderBackend_PrepareToDrawGlyphs(RenderBackend_GlyphAtlas *atlas, RenderBackend_Surface *destination_surface, unsigned char red, unsigned char green, unsigned char blue) { - glyph_destination_sdlsurface = destination_surface->sdlsurface; + glyph_atlas = atlas; + glyph_destination_surface = destination_surface; if (SDL_SetSurfaceColorMod(atlas->sdlsurface, red, green, blue) < 0) Backend_PrintError("Couldn't set color value: %s", SDL_GetError()); } -void RenderBackend_DrawGlyph(RenderBackend_GlyphAtlas *atlas, long x, long y, size_t glyph_x, size_t glyph_y, size_t glyph_width, size_t glyph_height) +void RenderBackend_DrawGlyph(long x, long y, size_t glyph_x, size_t glyph_y, size_t glyph_width, size_t glyph_height) { SDL_Rect source_rect; source_rect.x = glyph_x; @@ -250,7 +252,7 @@ void RenderBackend_DrawGlyph(RenderBackend_GlyphAtlas *atlas, long x, long y, si destination_rect.w = glyph_width; destination_rect.h = glyph_height; - if (SDL_BlitSurface(atlas->sdlsurface, &source_rect, glyph_destination_sdlsurface, &destination_rect) < 0) + if (SDL_BlitSurface(glyph_atlas->sdlsurface, &source_rect, glyph_destination_surface->sdlsurface, &destination_rect) < 0) Backend_PrintError("Couldn't blit glyph indivual surface to final glyph surface: %s", SDL_GetError()); } diff --git a/src/Backends/Rendering/SDLTexture.cpp b/src/Backends/Rendering/SDLTexture.cpp index 59323166..5c7c1ad6 100644 --- a/src/Backends/Rendering/SDLTexture.cpp +++ b/src/Backends/Rendering/SDLTexture.cpp @@ -43,6 +43,8 @@ static SDL_Rect window_rect; static RenderBackend_Surface *surface_list_head; +static RenderBackend_GlyphAtlas *glyph_atlas; + static void RectToSDLRect(const RenderBackend_Rect *rect, SDL_Rect *sdl_rect) { sdl_rect->x = (int)rect->left; @@ -371,7 +373,7 @@ void RenderBackend_UploadGlyph(RenderBackend_GlyphAtlas *atlas, size_t x, size_t void RenderBackend_PrepareToDrawGlyphs(RenderBackend_GlyphAtlas *atlas, RenderBackend_Surface *destination_surface, unsigned char red, unsigned char green, unsigned char blue) { - (void)atlas; + glyph_atlas = atlas; if (SDL_SetRenderTarget(renderer, destination_surface->texture) < 0) Backend_PrintError("Couldn't set texture as current rendering target: %s", SDL_GetError()); @@ -386,7 +388,7 @@ void RenderBackend_PrepareToDrawGlyphs(RenderBackend_GlyphAtlas *atlas, RenderBa } -void RenderBackend_DrawGlyph(RenderBackend_GlyphAtlas *atlas, long x, long y, size_t glyph_x, size_t glyph_y, size_t glyph_width, size_t glyph_height) +void RenderBackend_DrawGlyph(long x, long y, size_t glyph_x, size_t glyph_y, size_t glyph_width, size_t glyph_height) { SDL_Rect source_rect; source_rect.x = glyph_x; @@ -400,7 +402,7 @@ void RenderBackend_DrawGlyph(RenderBackend_GlyphAtlas *atlas, long x, long y, si destination_rect.w = glyph_width; destination_rect.h = glyph_height; - if (SDL_RenderCopy(renderer, atlas->texture, &source_rect, &destination_rect) < 0) + if (SDL_RenderCopy(renderer, glyph_atlas->texture, &source_rect, &destination_rect) < 0) Backend_PrintError("Couldn't copy glyph texture portion to renderer: %s", SDL_GetError()); } diff --git a/src/Backends/Rendering/Software.cpp b/src/Backends/Rendering/Software.cpp index 6bcc84fd..8c683d90 100644 --- a/src/Backends/Rendering/Software.cpp +++ b/src/Backends/Rendering/Software.cpp @@ -28,8 +28,9 @@ typedef struct RenderBackend_GlyphAtlas static RenderBackend_Surface framebuffer; -static unsigned char glyph_colour_channels[3]; +static RenderBackend_GlyphAtlas *glyph_atlas; static RenderBackend_Surface *glyph_destination_surface; +static unsigned char glyph_colour_channels[3]; RenderBackend_Surface* RenderBackend_Init(const char *window_title, size_t screen_width, size_t screen_height, bool fullscreen) { @@ -272,8 +273,7 @@ void RenderBackend_UploadGlyph(RenderBackend_GlyphAtlas *atlas, size_t x, size_t void RenderBackend_PrepareToDrawGlyphs(RenderBackend_GlyphAtlas *atlas, RenderBackend_Surface *destination_surface, unsigned char red, unsigned char green, unsigned char blue) { - (void)atlas; - + glyph_atlas = atlas; glyph_destination_surface = destination_surface; glyph_colour_channels[0] = red; @@ -281,13 +281,13 @@ void RenderBackend_PrepareToDrawGlyphs(RenderBackend_GlyphAtlas *atlas, RenderBa glyph_colour_channels[2] = blue; } -void RenderBackend_DrawGlyph(RenderBackend_GlyphAtlas *atlas, long x, long y, size_t glyph_x, size_t glyph_y, size_t glyph_width, size_t glyph_height) +void RenderBackend_DrawGlyph(long x, long y, size_t glyph_x, size_t glyph_y, size_t glyph_width, size_t glyph_height) { for (unsigned int iy = MAX(-y, 0); y + iy < MIN(y + glyph_height, glyph_destination_surface->height); ++iy) { for (unsigned int ix = MAX(-x, 0); x + ix < MIN(x + glyph_width, glyph_destination_surface->width); ++ix) { - const unsigned char alpha_int = atlas->pixels[(glyph_y + iy) * atlas->width + (glyph_x + ix)]; + const unsigned char alpha_int = glyph_atlas->pixels[(glyph_y + iy) * glyph_atlas->width + (glyph_x + ix)]; if (alpha_int != 0) { diff --git a/src/Backends/Rendering/WiiU.cpp b/src/Backends/Rendering/WiiU.cpp index 89b91261..c5aa5493 100644 --- a/src/Backends/Rendering/WiiU.cpp +++ b/src/Backends/Rendering/WiiU.cpp @@ -86,6 +86,7 @@ static RenderBackend_Surface *framebuffer_surface; static GX2ContextState *gx2_context; +static RenderBackend_GlyphAtlas *glyph_atlas; static RenderBackend_Surface *glyph_destination_surface; static Viewport tv_viewport; @@ -774,16 +775,15 @@ void RenderBackend_UploadGlyph(RenderBackend_GlyphAtlas *atlas, size_t x, size_t void RenderBackend_PrepareToDrawGlyphs(RenderBackend_GlyphAtlas *atlas, RenderBackend_Surface *destination_surface, unsigned char red, unsigned char green, unsigned char blue) { - (void)atlas; - static unsigned char last_red; static unsigned char last_green; static unsigned char last_blue; + glyph_atlas = atlas; glyph_destination_surface = destination_surface; // Flush vertex data if a context-change is needed - if (last_render_mode != MODE_DRAW_GLYPH || last_destination_texture != &glyph_destination_surface->texture || last_source_texture != &atlas->texture || last_red != red || last_green != green || last_blue != blue) + if (last_render_mode != MODE_DRAW_GLYPH || last_destination_texture != &destination_surface->texture || last_source_texture != &atlas->texture || last_red != red || last_green != green || last_blue != blue) { FlushVertexBuffer(); @@ -819,7 +819,7 @@ void RenderBackend_PrepareToDrawGlyphs(RenderBackend_GlyphAtlas *atlas, RenderBa } } -void RenderBackend_DrawGlyph(RenderBackend_GlyphAtlas *atlas, long x, long y, size_t glyph_x, size_t glyph_y, size_t glyph_width, size_t glyph_height) +void RenderBackend_DrawGlyph(long x, long y, size_t glyph_x, size_t glyph_y, size_t glyph_width, size_t glyph_height) { VertexBufferSlot *vertex_buffer_slot = GetVertexBufferSlot(); @@ -840,10 +840,10 @@ void RenderBackend_DrawGlyph(RenderBackend_GlyphAtlas *atlas, long x, long y, si vertex_buffer_slot->vertices[3].position.x = vertex_left; vertex_buffer_slot->vertices[3].position.y = vertex_bottom; - const float texture_left = glyph_x / (float)atlas->texture.surface.width; - const float texture_top = glyph_y / (float)atlas->texture.surface.height; - const float texture_right = (glyph_x + glyph_width) / (float)atlas->texture.surface.width; - const float texture_bottom = (glyph_y + glyph_height) / (float)atlas->texture.surface.height; + const float texture_left = glyph_x / (float)glyph_atlas->texture.surface.width; + const float texture_top = glyph_y / (float)glyph_atlas->texture.surface.height; + const float texture_right = (glyph_x + glyph_width) / (float)glyph_atlas->texture.surface.width; + const float texture_bottom = (glyph_y + glyph_height) / (float)glyph_atlas->texture.surface.height; // Set texture coordinate buffer vertex_buffer_slot->vertices[0].texture.x = texture_left; diff --git a/src/Font.cpp b/src/Font.cpp index db7d3c77..467306f7 100644 --- a/src/Font.cpp +++ b/src/Font.cpp @@ -1162,7 +1162,7 @@ void DrawText(Font *font, RenderBackend_Surface *surface, int x, int y, unsigned const long letter_x = x + pen_x + glyph->x_offset; const long letter_y = y + glyph->y_offset; - RenderBackend_DrawGlyph(font->atlas, letter_x, letter_y, glyph->x, glyph->y, glyph->width, glyph->height); + RenderBackend_DrawGlyph(letter_x, letter_y, glyph->x, glyph->y, glyph->width, glyph->height); pen_x += glyph->x_advance; }