libobs/graphics: Add ability to set shader texture sampler
(Note: This also modifies libobs-d3d11 and libobs-opengl) Allows overriding the sampler for a specific shader parameter.
This commit is contained in:
@@ -125,6 +125,8 @@ void gs_technique_end(gs_technique_t *tech)
|
||||
|
||||
da_free(param->cur_val);
|
||||
param->changed = false;
|
||||
if (param->next_sampler)
|
||||
param->next_sampler = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -147,6 +149,9 @@ static void upload_shader_params(struct darray *pass_params, bool changed_only)
|
||||
struct gs_effect_param *eparam = param->eparam;
|
||||
gs_sparam_t *sparam = param->sparam;
|
||||
|
||||
if (eparam->next_sampler)
|
||||
gs_shader_set_next_sampler(sparam, eparam->next_sampler);
|
||||
|
||||
if (changed_only && !eparam->changed)
|
||||
continue;
|
||||
|
||||
@@ -378,3 +383,14 @@ void gs_effect_set_default(gs_eparam_t *param)
|
||||
effect_setval_inline(param, param->default_val.array,
|
||||
param->default_val.num);
|
||||
}
|
||||
|
||||
void gs_effect_set_next_sampler(gs_eparam_t *param, gs_samplerstate_t *sampler)
|
||||
{
|
||||
if (!param) {
|
||||
blog(LOG_ERROR, "gs_effect_set_next_sampler: invalid param");
|
||||
return;
|
||||
}
|
||||
|
||||
if (param->type == GS_SHADER_PARAM_TEXTURE)
|
||||
param->next_sampler = sampler;
|
||||
}
|
||||
|
@@ -57,6 +57,7 @@ struct gs_effect_param {
|
||||
DARRAY(uint8_t) default_val;
|
||||
|
||||
gs_effect_t *effect;
|
||||
gs_samplerstate_t *next_sampler;
|
||||
|
||||
/*char *full_name;
|
||||
float scroller_min, scroller_max, scroller_inc, scroller_mul;*/
|
||||
|
@@ -167,6 +167,7 @@ bool load_graphics_imports(struct gs_exports *exports, void *module,
|
||||
GRAPHICS_IMPORT(gs_shader_set_texture);
|
||||
GRAPHICS_IMPORT(gs_shader_set_val);
|
||||
GRAPHICS_IMPORT(gs_shader_set_default);
|
||||
GRAPHICS_IMPORT(gs_shader_set_next_sampler);
|
||||
|
||||
/* OSX/Cocoa specific functions */
|
||||
#ifdef __APPLE__
|
||||
|
@@ -225,6 +225,8 @@ struct gs_exports {
|
||||
void (*gs_shader_set_val)(gs_sparam_t *param, const void *val,
|
||||
size_t size);
|
||||
void (*gs_shader_set_default)(gs_sparam_t *param);
|
||||
void (*gs_shader_set_next_sampler)(gs_sparam_t *param,
|
||||
gs_samplerstate_t *sampler);
|
||||
|
||||
#ifdef __APPLE__
|
||||
/* OSX/Cocoa specific functions */
|
||||
|
@@ -2089,6 +2089,16 @@ void gs_shader_set_default(gs_sparam_t *param)
|
||||
graphics->exports.gs_shader_set_default(param);
|
||||
}
|
||||
|
||||
void gs_shader_set_next_sampler(gs_sparam_t *param, gs_samplerstate_t *sampler)
|
||||
{
|
||||
graphics_t *graphics = thread_graphics;
|
||||
|
||||
if (!gs_valid_p("gs_shader_set_next_sampler", param))
|
||||
return;
|
||||
|
||||
graphics->exports.gs_shader_set_next_sampler(param, sampler);
|
||||
}
|
||||
|
||||
void gs_texture_destroy(gs_texture_t *tex)
|
||||
{
|
||||
graphics_t *graphics = thread_graphics;
|
||||
|
@@ -325,6 +325,8 @@ EXPORT void gs_shader_set_vec4(gs_sparam_t *param, const struct vec4 *val);
|
||||
EXPORT void gs_shader_set_texture(gs_sparam_t *param, gs_texture_t *val);
|
||||
EXPORT void gs_shader_set_val(gs_sparam_t *param, const void *val, size_t size);
|
||||
EXPORT void gs_shader_set_default(gs_sparam_t *param);
|
||||
EXPORT void gs_shader_set_next_sampler(gs_sparam_t *param,
|
||||
gs_samplerstate_t *sampler);
|
||||
|
||||
/* ---------------------------------------------------
|
||||
* effect functions
|
||||
@@ -393,6 +395,8 @@ EXPORT void gs_effect_set_vec4(gs_eparam_t *param, const struct vec4 *val);
|
||||
EXPORT void gs_effect_set_texture(gs_eparam_t *param, gs_texture_t *val);
|
||||
EXPORT void gs_effect_set_val(gs_eparam_t *param, const void *val, size_t size);
|
||||
EXPORT void gs_effect_set_default(gs_eparam_t *param);
|
||||
EXPORT void gs_effect_set_next_sampler(gs_eparam_t *param,
|
||||
gs_samplerstate_t *sampler);
|
||||
|
||||
/* ---------------------------------------------------
|
||||
* texture render helper functions
|
||||
|
Reference in New Issue
Block a user