mirror of
https://github.com/libretro/RetroArch
synced 2025-04-10 06:44:27 +00:00
Create SHADER_CTL_GET_PREV_TEXTURES
This commit is contained in:
parent
5a2816c6da
commit
954ac39b91
@ -2804,7 +2804,11 @@ static void *gl_init(const video_info_t *video, const input_driver_t **input, vo
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
unsigned minimum = video_shader_driver_get_prev_textures();
|
video_shader_ctx_texture_t texture_info;
|
||||||
|
|
||||||
|
video_shader_driver_ctl(SHADER_CTL_GET_PREV_TEXTURES, &texture_info);
|
||||||
|
|
||||||
|
unsigned minimum = texture_info.id;
|
||||||
gl->textures = max(minimum + 1, gl->textures);
|
gl->textures = max(minimum + 1, gl->textures);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3093,7 +3097,12 @@ static bool gl_set_shader(void *data,
|
|||||||
|
|
||||||
if (shader)
|
if (shader)
|
||||||
{
|
{
|
||||||
unsigned textures = video_shader_driver_get_prev_textures() + 1;
|
unsigned textures;
|
||||||
|
video_shader_ctx_texture_t texture_info;
|
||||||
|
|
||||||
|
video_shader_driver_ctl(SHADER_CTL_GET_PREV_TEXTURES, &texture_info);
|
||||||
|
|
||||||
|
textures = texture_info.id + 1;
|
||||||
|
|
||||||
if (textures > gl->textures) /* Have to reinit a bit. */
|
if (textures > gl->textures) /* Have to reinit a bit. */
|
||||||
{
|
{
|
||||||
|
@ -34,20 +34,26 @@ static const shader_backend_t *shader_ctx_drivers[] = {
|
|||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
static const shader_backend_t *current_shader;
|
|
||||||
static void *shader_data;
|
|
||||||
|
|
||||||
unsigned video_shader_driver_get_prev_textures(void)
|
|
||||||
{
|
|
||||||
if (!current_shader)
|
|
||||||
return 0;
|
|
||||||
return current_shader->get_prev_textures(shader_data);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool video_shader_driver_ctl(enum video_shader_driver_ctl_state state, void *data)
|
bool video_shader_driver_ctl(enum video_shader_driver_ctl_state state, void *data)
|
||||||
{
|
{
|
||||||
|
static const shader_backend_t *current_shader = NULL;
|
||||||
|
static void *shader_data = NULL;
|
||||||
|
|
||||||
switch (state)
|
switch (state)
|
||||||
{
|
{
|
||||||
|
case SHADER_CTL_GET_PREV_TEXTURES:
|
||||||
|
{
|
||||||
|
video_shader_ctx_texture_t *texture = (video_shader_ctx_texture_t*)data;
|
||||||
|
if (!!texture)
|
||||||
|
return false;
|
||||||
|
if (!current_shader)
|
||||||
|
{
|
||||||
|
texture->id = 0;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
texture->id = current_shader->get_prev_textures(shader_data);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case SHADER_CTL_GET_IDENT:
|
case SHADER_CTL_GET_IDENT:
|
||||||
{
|
{
|
||||||
video_shader_ctx_ident_t *ident = (video_shader_ctx_ident_t*)data;
|
video_shader_ctx_ident_t *ident = (video_shader_ctx_ident_t*)data;
|
||||||
|
@ -72,7 +72,8 @@ enum video_shader_driver_ctl_state
|
|||||||
SHADER_CTL_WRAP_TYPE,
|
SHADER_CTL_WRAP_TYPE,
|
||||||
SHADER_CTL_GET_CURRENT_SHADER,
|
SHADER_CTL_GET_CURRENT_SHADER,
|
||||||
SHADER_CTL_DIRECT_GET_CURRENT_SHADER,
|
SHADER_CTL_DIRECT_GET_CURRENT_SHADER,
|
||||||
SHADER_CTL_GET_IDENT
|
SHADER_CTL_GET_IDENT,
|
||||||
|
SHADER_CTL_GET_PREV_TEXTURES
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct shader_backend
|
typedef struct shader_backend
|
||||||
@ -182,13 +183,16 @@ typedef struct video_shader_ctx_ident
|
|||||||
const char *ident;
|
const char *ident;
|
||||||
} video_shader_ctx_ident_t;
|
} video_shader_ctx_ident_t;
|
||||||
|
|
||||||
|
typedef struct video_shader_ctx_texture
|
||||||
|
{
|
||||||
|
unsigned id;
|
||||||
|
} video_shader_ctx_texture_t;
|
||||||
|
|
||||||
extern const shader_backend_t gl_glsl_backend;
|
extern const shader_backend_t gl_glsl_backend;
|
||||||
extern const shader_backend_t hlsl_backend;
|
extern const shader_backend_t hlsl_backend;
|
||||||
extern const shader_backend_t gl_cg_backend;
|
extern const shader_backend_t gl_cg_backend;
|
||||||
extern const shader_backend_t shader_null_backend;
|
extern const shader_backend_t shader_null_backend;
|
||||||
|
|
||||||
unsigned video_shader_driver_get_prev_textures(void);
|
|
||||||
|
|
||||||
bool video_shader_driver_ctl(enum video_shader_driver_ctl_state state, void *data);
|
bool video_shader_driver_ctl(enum video_shader_driver_ctl_state state, void *data);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
Loading…
x
Reference in New Issue
Block a user