From 2ac75f98ae29609bd8b70eb8f2e58f7698a27925 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 15 Nov 2017 14:02:41 +0100 Subject: [PATCH] (renderchain) Start implementing set_coords/set_mvp --- gfx/drivers_renderchain/gl1_renderchain.c | 32 +++++++++++++++++++++++ gfx/drivers_renderchain/gl2_renderchain.c | 2 ++ gfx/video_driver.h | 4 +++ 3 files changed, 38 insertions(+) diff --git a/gfx/drivers_renderchain/gl1_renderchain.c b/gfx/drivers_renderchain/gl1_renderchain.c index 17ebffd6ea..04e8fa6199 100644 --- a/gfx/drivers_renderchain/gl1_renderchain.c +++ b/gfx/drivers_renderchain/gl1_renderchain.c @@ -261,7 +261,39 @@ static void gl1_renderchain_readback(void *data, (GLenum)fmt, (GLenum)type, (GLvoid*)src); } +static void gl1_renderchain_set_mvp(void *data, + void *shader_data, const void *mat_data) +{ + math_matrix_4x4 ident; + const math_matrix_4x4 *mat = (const math_matrix_4x4*)mat_data; + + /* Fall back to fixed function-style if needed and possible. */ + glMatrixMode(GL_PROJECTION); + glLoadMatrixf(mat->data); + glMatrixMode(GL_MODELVIEW); + matrix_4x4_identity(ident); + glLoadMatrixf(ident.data); +} + +static void gl1_renderchain_set_coords(void *handle_data, + void *shader_data, const struct video_coords *coords) +{ + /* Fall back to fixed function-style if needed and possible. */ + glClientActiveTexture(GL_TEXTURE1); + glTexCoordPointer(2, GL_FLOAT, 0, coords->lut_tex_coord); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glClientActiveTexture(GL_TEXTURE0); + glVertexPointer(2, GL_FLOAT, 0, coords->vertex); + glEnableClientState(GL_VERTEX_ARRAY); + glColorPointer(4, GL_FLOAT, 0, coords->color); + glEnableClientState(GL_COLOR_ARRAY); + glTexCoordPointer(2, GL_FLOAT, 0, coords->tex_coord); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); +} + gl_renderchain_driver_t gl2_renderchain = { + gl1_renderchain_set_coords, + gl1_renderchain_set_mvp, NULL, /* init_textures_reference */ NULL, /* fence_iterate */ NULL, /* fence_free */ diff --git a/gfx/drivers_renderchain/gl2_renderchain.c b/gfx/drivers_renderchain/gl2_renderchain.c index dd29e353fe..fc18a0823b 100644 --- a/gfx/drivers_renderchain/gl2_renderchain.c +++ b/gfx/drivers_renderchain/gl2_renderchain.c @@ -1437,6 +1437,8 @@ static void gl2_renderchain_init_textures_reference( } gl_renderchain_driver_t gl2_renderchain = { + NULL, /* set_coords */ + NULL, /* set_mvp */ gl2_renderchain_init_textures_reference, #ifdef HAVE_OPENGLES NULL, diff --git a/gfx/video_driver.h b/gfx/video_driver.h index 90cc0484cf..acb80d5b47 100644 --- a/gfx/video_driver.h +++ b/gfx/video_driver.h @@ -833,6 +833,10 @@ typedef struct d3d_renderchain_driver typedef struct gl_renderchain_driver { + void (*set_coords)(void *handle_data, + void *shader_data, const struct video_coords *coords); + void (*set_mvp)(void *data, void *shader_data, + const void *mat_data); void (*init_texture_reference)( void *data, unsigned i, unsigned internal_fmt, unsigned texture_fmt,