diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 80500d043c..47593c81b0 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -546,25 +546,6 @@ static void gl_init_textures_data(gl_t *gl) } } -static void gl_init_textures_reference(gl_t *gl, unsigned i, - GLenum internal_fmt, GLenum texture_fmt, GLenum texture_type) -{ -#ifdef HAVE_PSGL - glTextureReferenceSCE(GL_TEXTURE_2D, 1, - gl->tex_w, gl->tex_h, 0, - internal_fmt, - gl->tex_w * gl->base_size, - gl->tex_w * gl->tex_h * i * gl->base_size); -#else - if (gl->egl_images) - return; - - gl_load_texture_image(GL_TEXTURE_2D, - 0, internal_fmt, gl->tex_w, gl->tex_h, 0, texture_type, - texture_fmt, gl->empty_buf ? gl->empty_buf : NULL); -#endif -} - static void gl_init_textures(gl_t *gl, const video_info_t *video) { unsigned i; @@ -620,8 +601,10 @@ static void gl_init_textures(gl_t *gl, const video_info_t *video) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl->tex_mag_filter); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl->tex_min_filter); - gl_init_textures_reference(gl, i, internal_fmt, - texture_fmt, texture_type); + if (gl->renderchain_driver->init_texture_reference) + gl->renderchain_driver->init_texture_reference( + gl, i, internal_fmt, + texture_fmt, texture_type); } glBindTexture(GL_TEXTURE_2D, gl->texture[gl->tex_index]); diff --git a/gfx/drivers_renderchain/gl2_renderchain.c b/gfx/drivers_renderchain/gl2_renderchain.c index 0d54dac2ec..95d2d67f4a 100644 --- a/gfx/drivers_renderchain/gl2_renderchain.c +++ b/gfx/drivers_renderchain/gl2_renderchain.c @@ -1432,7 +1432,34 @@ static void gl2_renderchain_fence_free(void *data) } #endif +static void gl2_renderchain_init_textures_reference( + void *data, unsigned i, + unsigned internal_fmt, unsigned texture_fmt, + unsigned texture_type) +{ + gl_t *gl = (gl_t*)data; +#ifdef HAVE_PSGL + glTextureReferenceSCE(GL_TEXTURE_2D, 1, + gl->tex_w, gl->tex_h, 0, + (GLenum)internal_fmt, + gl->tex_w * gl->base_size, + gl->tex_w * gl->tex_h * i * gl->base_size); +#else + if (gl->egl_images) + return; + + gl_load_texture_image(GL_TEXTURE_2D, + 0, + (GLenum)internal_fmt, + gl->tex_w, gl->tex_h, 0, + (GLenum)texture_type, + (GLenum)texture_fmt, + gl->empty_buf ? gl->empty_buf : NULL); +#endif +} + gl_renderchain_driver_t gl2_renderchain = { + gl2_renderchain_init_textures_reference, #ifdef HAVE_OPENGLES NULL, NULL, diff --git a/gfx/video_driver.h b/gfx/video_driver.h index bb2863ec53..de143d1fbf 100644 --- a/gfx/video_driver.h +++ b/gfx/video_driver.h @@ -827,6 +827,10 @@ typedef struct d3d_renderchain_driver typedef struct gl_renderchain_driver { + void (*init_texture_reference)( + void *data, unsigned i, + unsigned internal_fmt, unsigned texture_fmt, + unsigned texture_type); void (*fence_iterate)(void *data, unsigned hard_sync_frames); void (*fence_free)(void *data); void (*readback)(void *data,