mirror of
https://github.com/libretro/RetroArch
synced 2025-03-29 13:20:30 +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);
|
||||
}
|
||||
|
||||
@ -3093,7 +3097,12 @@ static bool gl_set_shader(void *data,
|
||||
|
||||
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. */
|
||||
{
|
||||
|
@ -34,20 +34,26 @@ static const shader_backend_t *shader_ctx_drivers[] = {
|
||||
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)
|
||||
{
|
||||
static const shader_backend_t *current_shader = NULL;
|
||||
static void *shader_data = NULL;
|
||||
|
||||
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:
|
||||
{
|
||||
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_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
|
||||
@ -182,13 +183,16 @@ typedef struct video_shader_ctx_ident
|
||||
const char *ident;
|
||||
} 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 hlsl_backend;
|
||||
extern const shader_backend_t gl_cg_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);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
Loading…
x
Reference in New Issue
Block a user