From fe2bf47b982012ba421baba2aabb36824cf0d0db Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 7 Nov 2017 20:56:08 +0100 Subject: [PATCH] Add more to renderchain driver --- gfx/drivers/gl.c | 13 ++++++++++--- gfx/drivers_renderchain/gl2_renderchain.c | 20 +++++++++++++++++--- gfx/drivers_renderchain/gl2_renderchain.h | 18 ------------------ gfx/video_driver.h | 7 +++++++ 4 files changed, 34 insertions(+), 24 deletions(-) diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 1ba273e1c1..e88aac883d 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -1359,7 +1359,8 @@ static bool gl_frame(void *data, const void *frame, #endif /* Set prev textures. */ - gl2_renderchain_bind_prev_texture(gl, &gl->tex_info); + if (gl->renderchain_driver->bind_prev_texture) + gl->renderchain_driver->bind_prev_texture(gl, &gl->tex_info); #if defined(HAVE_MENU) if (gl->menu_texture_enable) @@ -2449,12 +2450,18 @@ error: static void gl_viewport_info(void *data, struct video_viewport *vp) { - gl_renderchain_viewport_info(data, vp); + gl_t *gl = (gl_t*)data; + if (!gl->renderchain_driver || !gl->renderchain_driver->viewport_info) + return; + gl->renderchain_driver->viewport_info(data, vp); } static bool gl_read_viewport(void *data, uint8_t *buffer, bool is_idle) { - return gl_renderchain_read_viewport(data, buffer, is_idle); + gl_t *gl = (gl_t*)data; + if (!gl->renderchain_driver || !gl->renderchain_driver->read_viewport) + return false; + return gl->renderchain_driver->read_viewport(data, buffer, is_idle); } #if 0 diff --git a/gfx/drivers_renderchain/gl2_renderchain.c b/gfx/drivers_renderchain/gl2_renderchain.c index c71c081d72..0f9340221d 100644 --- a/gfx/drivers_renderchain/gl2_renderchain.c +++ b/gfx/drivers_renderchain/gl2_renderchain.c @@ -72,6 +72,15 @@ typedef struct gl2_renderchain /* Prototypes */ GLenum min_filter_to_mag(GLenum type); + +void gl_load_texture_data( + uint32_t id_data, + enum gfx_wrap_type wrap_type, + enum texture_filter_type filter_type, + unsigned alignment, + unsigned width, unsigned height, + const void *frame, unsigned base_size); + void gl_set_viewport( void *data, video_frame_info_t *video_info, unsigned viewport_width, @@ -927,7 +936,7 @@ static bool gl2_renderchain_init_hw_render( #endif -void gl2_renderchain_bind_prev_texture( +static void gl2_renderchain_bind_prev_texture( void *data, const struct video_tex_info *tex_info) { @@ -997,7 +1006,8 @@ bool gl2_renderchain_add_lut( return true; } -void gl_renderchain_viewport_info(void *data, struct video_viewport *vp) +static void gl2_renderchain_viewport_info( + void *data, struct video_viewport *vp) { unsigned width, height; unsigned top_y, top_dist; @@ -1015,7 +1025,8 @@ void gl_renderchain_viewport_info(void *data, struct video_viewport *vp) vp->y = top_dist; } -bool gl_renderchain_read_viewport(void *data, uint8_t *buffer, bool is_idle) +static bool gl2_renderchain_read_viewport( + void *data, uint8_t *buffer, bool is_idle) { #ifndef NO_GL_READ_PIXELS unsigned num_pixels = 0; @@ -1137,6 +1148,9 @@ static void *gl2_renderchain_new(void) #ifdef HAVE_FBO gl_renderchain_driver_t gl2_renderchain = { + gl2_renderchain_viewport_info, + gl2_renderchain_read_viewport, + gl2_renderchain_bind_prev_texture, gl2_renderchain_free_internal, gl2_renderchain_new, gl2_renderchain_init, diff --git a/gfx/drivers_renderchain/gl2_renderchain.h b/gfx/drivers_renderchain/gl2_renderchain.h index 6a3f36e05d..c8bcf95d00 100644 --- a/gfx/drivers_renderchain/gl2_renderchain.h +++ b/gfx/drivers_renderchain/gl2_renderchain.h @@ -25,29 +25,11 @@ RETRO_BEGIN_DECLS -void gl2_renderchain_bind_prev_texture( - void *data, - const struct video_tex_info *tex_info); - bool gl2_renderchain_add_lut(const struct video_shader *shader, unsigned i, void *textures_lut); -void gl_load_texture_data( - uint32_t id_data, - enum gfx_wrap_type wrap_type, - enum texture_filter_type filter_type, - unsigned alignment, - unsigned width, unsigned height, - const void *frame, unsigned base_size); - void gl2_renderchain_deinit_fbo(void *data); -void gl_renderchain_viewport_info( - void *data, struct video_viewport *vp); - -bool gl_renderchain_read_viewport( - void *data, uint8_t *buffer, bool is_idle); - void context_bind_hw_render(bool enable); RETRO_END_DECLS diff --git a/gfx/video_driver.h b/gfx/video_driver.h index feb53cec26..bab70fc250 100644 --- a/gfx/video_driver.h +++ b/gfx/video_driver.h @@ -827,6 +827,13 @@ typedef struct d3d_renderchain_driver typedef struct gl_renderchain_driver { + void (*viewport_info)( + void *data, struct video_viewport *vp); + bool (*read_viewport)( + void *data, uint8_t *buffer, bool is_idle); + void (*bind_prev_texture)( + void *data, + const struct video_tex_info *tex_info); void (*chain_free)(void *data); void *(*chain_new)(void); void (*init)(void *data, unsigned fbo_width, unsigned fbo_height);