static void ep_compile_annotations(struct darray *ep_annotations, struct darray *gsp_annotations, struct effect_parser *ep) { darray_resize(sizeof(struct gs_effect_param), gsp_annotations, ep_annotations->num); size_t i; for (i = 0; i < ep_annotations->num; i++) { struct gs_effect_param *param = ((struct gs_effect_param *) gsp_annotations->array)+i; struct ep_param *param_in = ((struct ep_param *) ep_annotations->array)+i; param->name = bstrdup(param_in->name); param->section = EFFECT_ANNOTATION; param->effect = ep->effect; da_move(param->default_val, param_in->default_val); param->type = get_effect_param_type(param_in->type); } }
static bool gl_add_param(struct gs_shader *shader, struct shader_var *var, GLint *texture_id) { struct shader_param param = {0}; param.array_count = var->array_count; param.name = bstrdup(var->name); param.shader = shader; param.type = get_shader_param_type(var->type); if (param.type == SHADER_PARAM_TEXTURE) { param.sampler_id = var->gl_sampler_id; param.texture_id = (*texture_id)++; } else { param.changed = true; } da_move(param.def_value, var->default_val); da_copy(param.cur_value, param.def_value); param.param = glGetUniformLocation(shader->program, param.name); if (!gl_success("glGetUniformLocation")) goto fail; if (param.type == SHADER_PARAM_TEXTURE) { glProgramUniform1i(shader->program, param.param, param.texture_id); if (!gl_success("glProgramUniform1i")) goto fail; } da_push_back(shader->params, ¶m); return true; fail: shader_param_free(¶m); return false; }
static void ep_compile_param(struct effect_parser *ep, size_t idx) { struct gs_effect_param *param; struct ep_param *param_in; param = ep->effect->params.array+idx; param_in = ep->params.array+idx; param_in->param = param; param->name = bstrdup(param_in->name); param->section = EFFECT_PARAM; param->effect = ep->effect; da_move(param->default_val, param_in->default_val); param->type = get_effect_param_type(param_in->type); if (strcmp(param_in->name, "ViewProj") == 0) ep->effect->view_proj = param; else if (strcmp(param_in->name, "World") == 0) ep->effect->world = param; ep_compile_param_annotations(param_in, param, ep); }
static void ep_compile_param(struct effect_parser *ep, size_t idx) { struct gs_effect_param *param; struct ep_param *param_in; param = ep->effect->params.array+idx; param_in = ep->params.array+idx; param_in->param = param; param->name = bstrdup(param_in->name); param->section = EFFECT_PARAM; param->effect = ep->effect; da_move(param->default_val, param_in->default_val); if (strcmp(param_in->type, "bool") == 0) param->type = GS_SHADER_PARAM_BOOL; else if (strcmp(param_in->type, "float") == 0) param->type = GS_SHADER_PARAM_FLOAT; else if (strcmp(param_in->type, "int") == 0) param->type = GS_SHADER_PARAM_INT; else if (strcmp(param_in->type, "float2") == 0) param->type = GS_SHADER_PARAM_VEC2; else if (strcmp(param_in->type, "float3") == 0) param->type = GS_SHADER_PARAM_VEC3; else if (strcmp(param_in->type, "float4") == 0) param->type = GS_SHADER_PARAM_VEC4; else if (strcmp(param_in->type, "float4x4") == 0) param->type = GS_SHADER_PARAM_MATRIX4X4; else if (param_in->is_texture) param->type = GS_SHADER_PARAM_TEXTURE; if (strcmp(param_in->name, "ViewProj") == 0) ep->effect->view_proj = param; else if (strcmp(param_in->name, "World") == 0) ep->effect->world = param; }