Exemplo n.º 1
0
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);
	}
}
Exemplo n.º 2
0
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, &param);
	return true;

fail:
	shader_param_free(&param);
	return false;
}
Exemplo n.º 3
0
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);
}
Exemplo n.º 4
0
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;
}