Create SHADER_CTL_GET_PREV_TEXTURES

This commit is contained in:
twinaphex 2016-02-14 22:22:40 +01:00
parent 5a2816c6da
commit 954ac39b91
3 changed files with 34 additions and 15 deletions

View File

@ -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. */
{

View File

@ -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;

View File

@ -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