diff --git a/frontend/menu/disp/lakka.c b/frontend/menu/disp/lakka.c index a8c3e1144f..e8001822b8 100644 --- a/frontend/menu/disp/lakka.c +++ b/frontend/menu/disp/lakka.c @@ -199,19 +199,20 @@ static void update_tweens(float dt) static void lakka_draw_text(const char *str, float x, float y, float scale, float alpha) { gl_t *gl = (gl_t*)driver.video_data; + if (!gl) + return; + + gl_set_viewport(gl, gl->win_width, gl->win_height, false, false); struct font_params params = {0}; - params.x = x / gl->win_width; - params.y = 1.0f - y / gl->win_height; + params.x = x / gl->vp.width; + params.y = 1.0f - y / gl->vp.height; if (alpha > global_alpha) alpha = global_alpha; params.scale = scale; - params.color = FONT_COLOR_RGBA(0xff, 0xff, 0xff, (uint8_t)(255 * alpha)); - params.drop_x = -2; - params.drop_y = -2; - params.drop_mod = 0.3f; + params.color = FONT_COLOR_RGBA(255, 255, 255, (uint8_t)(255 * alpha)); if (font_driver) font_driver->render_msg(font, str, ¶ms); @@ -225,8 +226,8 @@ void lakka_draw_background(void) 0.1, 0.74, 0.61, global_alpha, 0.1, 0.74, 0.61, global_alpha, }; - gl_t *gl = (gl_t*)driver.video_data; + gl_t *gl = (gl_t*)driver.video_data; if (!gl) return; @@ -238,6 +239,8 @@ void lakka_draw_background(void) if (gl->shader && gl->shader->use) gl->shader->use(gl, GL_SHADER_STOCK_BLEND); + + gl->coords.vertices = 4; gl_shader_set_coords(gl, &gl->coords, &gl->mvp_no_rot); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); @@ -291,6 +294,7 @@ void lakka_draw_icon(GLuint texture, float x, float y, float alpha, float rotati matrix_scale(&mscal, scale, scale, 1); matrix_multiply(&mymat, &mscal, &mymat); + gl->coords.vertices = 4; gl_shader_set_coords(gl, &gl->coords, &mymat); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); diff --git a/gfx/fonts/gl_raster_font.c b/gfx/fonts/gl_raster_font.c index f119d0cb53..722db5ce58 100644 --- a/gfx/fonts/gl_raster_font.c +++ b/gfx/fonts/gl_raster_font.c @@ -111,9 +111,6 @@ static void render_message(gl_raster_t *font, const char *msg, GLfloat scale, co unsigned i; gl_t *gl = font->gl; - // Rebind shaders so attrib cache gets reset. - if (gl->shader && gl->shader->use) - gl->shader->use(gl, GL_SHADER_STOCK_BLEND); glBindTexture(GL_TEXTURE_2D, font->tex); #define MAX_MSG_LEN_CHUNK 64 @@ -136,6 +133,10 @@ static void render_message(gl_raster_t *font, const char *msg, GLfloat scale, co while (msg_len_full) { + // Rebind shaders so attrib cache gets reset. + if (gl->shader && gl->shader->use) + gl->shader->use(gl, GL_SHADER_STOCK_BLEND); + for (i = 0; i < msg_len; i++) { const struct font_glyph *gly = font->font_driver->get_glyph(font->font_data, (uint8_t)msg[i]); @@ -207,10 +208,10 @@ static void gl_render_msg(void *data, const char *msg, const struct font_params drop_y = params->drop_y; drop_mod = params->drop_mod; - color[0] = FONT_COLOR_GET_RED(params->color); - color[1] = FONT_COLOR_GET_GREEN(params->color); - color[2] = FONT_COLOR_GET_BLUE(params->color); - color[3] = FONT_COLOR_GET_ALPHA(params->color); + color[0] = FONT_COLOR_GET_RED(params->color) / 255.0f; + color[1] = FONT_COLOR_GET_GREEN(params->color) / 255.0f; + color[2] = FONT_COLOR_GET_BLUE(params->color) / 255.0f; + color[3] = FONT_COLOR_GET_ALPHA(params->color) / 255.0f; // If alpha is 0.0f, turn it into default 1.0f if (color[3] <= 0.0f)