mirror of
https://github.com/libretro/RetroArch
synced 2025-03-29 13:20:30 +00:00
Context-ize GL font rendering.
This commit is contained in:
parent
fcb31db218
commit
b239785038
2
Makefile
2
Makefile
@ -162,7 +162,7 @@ ifeq ($(HAVE_SDL), 1)
|
||||
endif
|
||||
|
||||
ifeq ($(HAVE_OPENGL), 1)
|
||||
OBJ += gfx/gl.o gfx/gfx_context.o gfx/fonts/gl_font.o gfx/math/matrix.o
|
||||
OBJ += gfx/gl.o gfx/gfx_context.o gfx/gl_font.o gfx/fonts/gl_font.o gfx/math/matrix.o
|
||||
|
||||
ifeq ($(HAVE_KMS), 1)
|
||||
OBJ += gfx/context/drm_egl_ctx.o
|
||||
|
@ -16,10 +16,10 @@
|
||||
|
||||
#include "../gl_common.h"
|
||||
|
||||
void gl_init_font(void *data, const char *font_path, unsigned font_size)
|
||||
static bool gl_init_font(void *data, const char *font_path, unsigned font_size)
|
||||
{
|
||||
if (!g_settings.video.font_enable)
|
||||
return;
|
||||
return false;
|
||||
|
||||
gl_t *gl = (gl_t*)data;
|
||||
|
||||
@ -34,7 +34,10 @@ void gl_init_font(void *data, const char *font_path, unsigned font_size)
|
||||
glBindTexture(GL_TEXTURE_2D, gl->texture[gl->tex_index]);
|
||||
}
|
||||
else
|
||||
{
|
||||
RARCH_WARN("Couldn't init font renderer.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
for (unsigned i = 0; i < 4; i++)
|
||||
{
|
||||
@ -50,6 +53,8 @@ void gl_init_font(void *data, const char *font_path, unsigned font_size)
|
||||
gl->font_color_dark[4 * i + j] = 0.3 * gl->font_color[4 * i + j];
|
||||
gl->font_color_dark[4 * i + 3] = 1.0;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void gl_deinit_font(void *data)
|
||||
@ -291,7 +296,7 @@ static void setup_font(void *data, const char *msg, GLfloat scale, GLfloat pos_x
|
||||
gl_set_projection(gl, &ortho, true);
|
||||
}
|
||||
|
||||
void gl_render_msg(void *data, const char *msg)
|
||||
static void gl_render_msg(void *data, const char *msg)
|
||||
{
|
||||
(void)data;
|
||||
(void)msg;
|
||||
@ -302,7 +307,7 @@ void gl_render_msg(void *data, const char *msg)
|
||||
g_settings.video.msg_pos_x, g_settings.video.msg_pos_y);
|
||||
}
|
||||
|
||||
void gl_render_msg_place(void *data, float pos_x, float pos_y, float scale, uint32_t color, const char *msg)
|
||||
static void gl_render_msg_place(void *data, float pos_x, float pos_y, float scale, uint32_t color, const char *msg)
|
||||
{
|
||||
(void)data;
|
||||
(void)msg;
|
||||
@ -312,3 +317,12 @@ void gl_render_msg_place(void *data, float pos_x, float pos_y, float scale, uint
|
||||
setup_font(data, msg, scale, pos_x, pos_y);
|
||||
#endif
|
||||
}
|
||||
|
||||
const gl_font_renderer_t gl_raster_font = {
|
||||
gl_init_font,
|
||||
gl_deinit_font,
|
||||
gl_render_msg,
|
||||
gl_render_msg_place,
|
||||
"GL raster",
|
||||
};
|
||||
|
||||
|
13
gfx/gl.c
13
gfx/gl.c
@ -1174,12 +1174,13 @@ static bool gl_frame(void *data, const void *frame, unsigned width, unsigned hei
|
||||
{
|
||||
char fps_txt[128];
|
||||
gfx_fps_title(fps_txt, sizeof(fps_txt));
|
||||
gl_render_msg_place(gl, g_settings.video.msg_pos_x, 0.56f, 1.04f, WHITE, fps_txt);
|
||||
if (gl->font_ctx)
|
||||
gl->font_ctx->render_msg_place(gl, g_settings.video.msg_pos_x, 0.56f, 1.04f, WHITE, fps_txt);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (msg)
|
||||
gl_render_msg(gl, msg);
|
||||
if (msg && gl->font_ctx)
|
||||
gl->font_ctx->render_msg(gl, msg);
|
||||
|
||||
#if !defined(RARCH_CONSOLE)
|
||||
context_update_window_title_func(false);
|
||||
@ -1223,7 +1224,8 @@ static void gl_free(void *data)
|
||||
|
||||
gl_t *gl = (gl_t*)data;
|
||||
|
||||
gl_deinit_font(gl);
|
||||
if (gl->font_ctx)
|
||||
gl->font_ctx->deinit(gl);
|
||||
gl_shader_deinit(gl);
|
||||
|
||||
#ifndef NO_GL_FF_VERTEX
|
||||
@ -1541,7 +1543,8 @@ static void *gl_init(const video_info_t *video, const input_driver_t **input, vo
|
||||
gl_init_textures_data(gl);
|
||||
|
||||
context_input_driver_func(input, input_data);
|
||||
gl_init_font(gl, g_settings.video.font_path, g_settings.video.font_size);
|
||||
|
||||
gl->font_ctx = gl_font_init_first(gl, g_settings.video.font_path, g_settings.video.font_size);
|
||||
|
||||
gl_init_pbo_readback(gl);
|
||||
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "math/matrix.h"
|
||||
#include "gfx_context.h"
|
||||
#include "scaler/scaler.h"
|
||||
#include "gl_font.h"
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "../config.h"
|
||||
@ -266,6 +267,7 @@ typedef struct gl
|
||||
|
||||
// Fonts
|
||||
void *font;
|
||||
const gl_font_renderer_t *font_ctx;
|
||||
const font_renderer_driver_t *font_driver;
|
||||
GLuint font_tex;
|
||||
int font_tex_w, font_tex_h;
|
||||
|
33
gfx/gl_font.c
Normal file
33
gfx/gl_font.c
Normal file
@ -0,0 +1,33 @@
|
||||
/* RetroArch - A frontend for libretro.
|
||||
* Copyright (C) 2010-2012 - Hans-Kristian Arntzen
|
||||
*
|
||||
* RetroArch is free software: you can redistribute it and/or modify it under the terms
|
||||
* of the GNU General Public License as published by the Free Software Found-
|
||||
* ation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
* PURPOSE. See the GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with RetroArch.
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "gl_font.h"
|
||||
#include "../general.h"
|
||||
|
||||
static const gl_font_renderer_t *backends[] = {
|
||||
&gl_raster_font,
|
||||
};
|
||||
|
||||
const gl_font_renderer_t *gl_font_init_first(void *data, const char *font_path, unsigned font_size)
|
||||
{
|
||||
for (unsigned i = 0; i < ARRAY_SIZE(backends); i++)
|
||||
{
|
||||
if (backends[i]->init(data, font_path, font_size))
|
||||
return backends[i];
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
@ -16,12 +16,23 @@
|
||||
#ifndef GL_FONT_H__
|
||||
#define GL_FONT_H__
|
||||
|
||||
#include "gl_common.h"
|
||||
#include <stdint.h>
|
||||
#include "../boolean.h"
|
||||
|
||||
void gl_init_font(void *data, const char *font_path, unsigned font_size);
|
||||
void gl_deinit_font(void *data);
|
||||
void gl_render_msg(void *data, const char *msg);
|
||||
void gl_render_msg_place(void *data, float x, float y, float scale, uint32_t color, const char *msg);
|
||||
typedef struct gl_font_renderer
|
||||
{
|
||||
bool (*init)(void *data, const char *font_path, unsigned font_size);
|
||||
void (*deinit)(void *data);
|
||||
void (*render_msg)(void *data, const char *msg);
|
||||
void (*render_msg_place)(void *data, float x, float y,
|
||||
float scale, uint32_t color, const char *msg);
|
||||
const char *ident;
|
||||
} gl_font_renderer_t;
|
||||
|
||||
extern const gl_font_renderer_t gl_raster_font;
|
||||
|
||||
const gl_font_renderer_t *gl_font_init_first(void *data,
|
||||
const char *font_path, unsigned font_size);
|
||||
|
||||
#endif
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user