mirror of
https://github.com/libretro/RetroArch
synced 2025-03-03 04:14:00 +00:00
Start going through renderchain driver interface for GL
This commit is contained in:
parent
9c6edaff30
commit
a7cd8d94b0
@ -958,9 +958,7 @@ static void d3d_set_osd_msg(void *data,
|
||||
font_driver_render_msg(video_info, NULL, msg, params);
|
||||
}
|
||||
|
||||
/* Delay constructor due to lack of exceptions. */
|
||||
|
||||
static bool d3d_construct(d3d_video_t *d3d,
|
||||
static bool d3d_init_internal(d3d_video_t *d3d,
|
||||
const video_info_t *info, const input_driver_t **input,
|
||||
void **input_data)
|
||||
{
|
||||
@ -1168,7 +1166,7 @@ static void *d3d_init(const video_info_t *info,
|
||||
|
||||
video_context_driver_set((const gfx_ctx_driver_t*)ctx_driver);
|
||||
|
||||
if (!d3d_construct(d3d, info, input, input_data))
|
||||
if (!d3d_init_internal(d3d, info, input, input_data))
|
||||
{
|
||||
RARCH_ERR("[D3D]: Failed to init D3D.\n");
|
||||
goto error;
|
||||
|
@ -1213,10 +1213,13 @@ static bool gl_frame(void *data, const void *frame,
|
||||
/* Render to texture in first pass. */
|
||||
if (gl->fbo_inited)
|
||||
{
|
||||
gl2_renderchain_recompute_pass_sizes(
|
||||
gl, frame_width, frame_height,
|
||||
gl->vp_out_width, gl->vp_out_height);
|
||||
gl2_renderchain_start_render(gl, video_info);
|
||||
if (gl->renderchain_driver->recompute_pass_sizes)
|
||||
gl->renderchain_driver->recompute_pass_sizes(
|
||||
gl, frame_width, frame_height,
|
||||
gl->vp_out_width, gl->vp_out_height);
|
||||
|
||||
if (gl->renderchain_driver->start_render)
|
||||
gl->renderchain_driver->start_render(gl, video_info);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -1234,11 +1237,13 @@ static bool gl_frame(void *data, const void *frame,
|
||||
#ifdef HAVE_FBO
|
||||
if (gl->fbo_inited)
|
||||
{
|
||||
gl2_renderchain_check_fbo_dimensions(gl);
|
||||
if (gl->renderchain_driver->check_fbo_dimensions)
|
||||
gl->renderchain_driver->check_fbo_dimensions(gl);
|
||||
|
||||
/* Go back to what we're supposed to do,
|
||||
* render to FBO #0. */
|
||||
gl2_renderchain_start_render(gl, video_info);
|
||||
if (gl->renderchain_driver->start_render)
|
||||
gl->renderchain_driver->start_render(gl, video_info);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
@ -1348,8 +1353,8 @@ static bool gl_frame(void *data, const void *frame,
|
||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||
|
||||
#ifdef HAVE_FBO
|
||||
if (gl->fbo_inited)
|
||||
gl2_renderchain_render(gl, video_info,
|
||||
if (gl->fbo_inited && gl->renderchain_driver)
|
||||
gl->renderchain_driver->renderchain_render(gl, video_info,
|
||||
frame_count, &gl->tex_info, &feedback_info);
|
||||
#endif
|
||||
|
||||
@ -1476,6 +1481,18 @@ static void gl_destroy_resources(gl_t *gl)
|
||||
gl_query_core_context_unset();
|
||||
}
|
||||
|
||||
static void gl_deinit_chain(gl_t *gl)
|
||||
{
|
||||
if (!gl || !gl->renderchain_driver)
|
||||
return;
|
||||
|
||||
if (gl->renderchain_driver->chain_free)
|
||||
gl->renderchain_driver->chain_free(gl->renderchain_data);
|
||||
|
||||
gl->renderchain_driver = NULL;
|
||||
gl->renderchain_data = NULL;
|
||||
}
|
||||
|
||||
static void gl_free(void *data)
|
||||
{
|
||||
gl_t *gl = (gl_t*)data;
|
||||
@ -1533,7 +1550,9 @@ static void gl_free(void *data)
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_FBO
|
||||
gl2_renderchain_free(gl);
|
||||
if (gl->renderchain_driver->free)
|
||||
gl->renderchain_driver->free(gl);
|
||||
gl_deinit_chain(gl);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_OPENGLES
|
||||
@ -2173,10 +2192,19 @@ static void *gl_init(const video_info_t *video, const input_driver_t **input, vo
|
||||
gl_init_textures_data(gl);
|
||||
|
||||
#ifdef HAVE_FBO
|
||||
gl2_renderchain_init(gl, gl->tex_w, gl->tex_h);
|
||||
if (!renderchain_gl_init_first(&gl->renderchain_driver,
|
||||
&gl->renderchain_data))
|
||||
{
|
||||
RARCH_ERR("[GL]: Renderchain could not be initialized.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (gl->renderchain_driver->init)
|
||||
gl->renderchain_driver->init(gl, gl->tex_w, gl->tex_h);
|
||||
|
||||
if (gl->hw_render_use &&
|
||||
!gl2_renderchain_init_hw_render(gl, gl->tex_w, gl->tex_h))
|
||||
gl->renderchain_driver->init_hw_render &&
|
||||
!gl->renderchain_driver->init_hw_render(gl, gl->tex_w, gl->tex_h))
|
||||
{
|
||||
RARCH_ERR("[GL]: Hardware rendering context initialization failed.\n");
|
||||
goto error;
|
||||
@ -2376,7 +2404,8 @@ static bool gl_set_shader(void *data,
|
||||
if (textures > gl->textures) /* Have to reinit a bit. */
|
||||
{
|
||||
#if defined(HAVE_FBO)
|
||||
gl2_renderchain_deinit_hw_render(gl);
|
||||
if (gl->renderchain_driver->deinit_hw_render)
|
||||
gl->renderchain_driver->deinit_hw_render(gl);
|
||||
#endif
|
||||
|
||||
glDeleteTextures(gl->textures, gl->texture);
|
||||
@ -2391,13 +2420,14 @@ static bool gl_set_shader(void *data,
|
||||
gl_init_textures_data(gl);
|
||||
|
||||
#if defined(HAVE_FBO)
|
||||
if (gl->hw_render_use)
|
||||
gl2_renderchain_init_hw_render(gl, gl->tex_w, gl->tex_h);
|
||||
if (gl->hw_render_use && gl->renderchain_driver->init_hw_render)
|
||||
gl->renderchain_driver->init_hw_render(gl, gl->tex_w, gl->tex_h);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef HAVE_FBO
|
||||
gl2_renderchain_init(gl, gl->tex_w, gl->tex_h);
|
||||
if (gl->renderchain_driver)
|
||||
gl->renderchain_driver->init(gl, gl->tex_w, gl->tex_h);
|
||||
#endif
|
||||
|
||||
/* Apparently need to set viewport for passes when we aren't using FBOs. */
|
||||
|
@ -190,7 +190,7 @@ static void gl_check_fbo_dimension(gl_t *gl, unsigned i,
|
||||
/* On resize, we might have to recreate our FBOs
|
||||
* due to "Viewport" scale, and set a new viewport. */
|
||||
|
||||
void gl2_renderchain_check_fbo_dimensions(void *data)
|
||||
static void gl2_renderchain_check_fbo_dimensions(void *data)
|
||||
{
|
||||
int i;
|
||||
gl_t *gl = (gl_t*)data;
|
||||
@ -211,7 +211,7 @@ void gl2_renderchain_check_fbo_dimensions(void *data)
|
||||
}
|
||||
}
|
||||
|
||||
void gl2_renderchain_render(
|
||||
static void gl2_renderchain_render(
|
||||
void *data,
|
||||
video_frame_info_t *video_info,
|
||||
uint64_t frame_count,
|
||||
@ -417,7 +417,7 @@ void gl2_renderchain_deinit_fbo(void *data)
|
||||
gl->fbo_feedback = 0;
|
||||
}
|
||||
|
||||
void gl2_renderchain_deinit_hw_render(void *data)
|
||||
static void gl2_renderchain_deinit_hw_render(void *data)
|
||||
{
|
||||
gl_t *gl = (gl_t*)data;
|
||||
if (!gl)
|
||||
@ -624,7 +624,7 @@ static void gl_create_fbo_textures(gl_t *gl)
|
||||
* When width/height changes or window sizes change,
|
||||
* we have to recalculate geometry of our FBO. */
|
||||
|
||||
void gl2_renderchain_recompute_pass_sizes(
|
||||
static void gl2_renderchain_recompute_pass_sizes(
|
||||
void *data,
|
||||
unsigned width, unsigned height,
|
||||
unsigned vp_width, unsigned vp_height)
|
||||
@ -687,7 +687,8 @@ void gl2_renderchain_recompute_pass_sizes(
|
||||
}
|
||||
}
|
||||
|
||||
void gl2_renderchain_start_render(void *data, video_frame_info_t *video_info)
|
||||
static void gl2_renderchain_start_render(void *data,
|
||||
video_frame_info_t *video_info)
|
||||
{
|
||||
/* Used when rendering to an FBO.
|
||||
* Texture coords have to be aligned
|
||||
@ -827,7 +828,8 @@ void gl2_renderchain_init(
|
||||
gl->fbo_inited = true;
|
||||
}
|
||||
|
||||
bool gl2_renderchain_init_hw_render(void *data,
|
||||
static bool gl2_renderchain_init_hw_render(
|
||||
void *data,
|
||||
unsigned width, unsigned height)
|
||||
{
|
||||
GLenum status;
|
||||
|
@ -48,33 +48,8 @@ void gl_load_texture_data(
|
||||
unsigned width, unsigned height,
|
||||
const void *frame, unsigned base_size);
|
||||
|
||||
void gl2_renderchain_render(void *data,
|
||||
video_frame_info_t *video_info,
|
||||
uint64_t frame_count,
|
||||
const struct video_tex_info *tex_info,
|
||||
const struct video_tex_info *feedback_info);
|
||||
|
||||
void gl2_renderchain_init(
|
||||
void *data, unsigned fbo_width, unsigned fbo_height);
|
||||
|
||||
void gl2_renderchain_deinit_hw_render(void *data);
|
||||
|
||||
void gl2_renderchain_recompute_pass_sizes(void *data,
|
||||
unsigned width, unsigned height,
|
||||
unsigned vp_width, unsigned vp_height);
|
||||
|
||||
void gl2_renderchain_deinit_fbo(void *data);
|
||||
|
||||
void gl2_renderchain_start_render(void *data,
|
||||
video_frame_info_t *video_info);
|
||||
|
||||
void gl2_renderchain_check_fbo_dimensions(void *data);
|
||||
|
||||
void gl2_renderchain_free(void *data);
|
||||
|
||||
bool gl2_renderchain_init_hw_render(void *data,
|
||||
unsigned width, unsigned height);
|
||||
|
||||
void gl_renderchain_viewport_info(
|
||||
void *data, struct video_viewport *vp);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user