示例#1
0
文件: gear.c 项目: OCForks/gears2
static int gear_load_shaders(gear_t* self)
{
	assert(self);
	LOGD("debug");

	// face shaders
	self->face_program = a3d_shader_make_source(FACE_VSHADER, FACE_FSHADER);
	if(self->face_program == 0)
		return 0;

	self->face_attribute_vertex = glGetAttribLocation(self->face_program, "vertex");
	self->face_uniform_color    = glGetUniformLocation(self->face_program, "color");
	self->face_uniform_mvp      = glGetUniformLocation(self->face_program, "mvp");

	// outward teeth shaders
	self->outward_program = a3d_shader_make_source(OUTWARD_VSHADER, OUTWARD_FSHADER);
	if(self->outward_program == 0)
		goto fail_outward_program;

	self->outward_attribute_vertex = glGetAttribLocation(self->outward_program, "vertex");
	self->outward_attribute_normal = glGetAttribLocation(self->outward_program, "normal");
	self->outward_uniform_color    = glGetUniformLocation(self->outward_program, "color");
	self->outward_uniform_nm       = glGetUniformLocation(self->outward_program, "nm");
	self->outward_uniform_mvp      = glGetUniformLocation(self->outward_program, "mvp");

	// cylinder shaders
	self->cylinder_program = a3d_shader_make_source(CYLINDER_VSHADER, CYLINDER_FSHADER);
	if(self->cylinder_program == 0)
		goto fail_cylinder_program;

	self->cylinder_attribute_vertex = glGetAttribLocation(self->cylinder_program, "vertex");
	self->cylinder_attribute_normal = glGetAttribLocation(self->cylinder_program, "normal");
	self->cylinder_uniform_color    = glGetUniformLocation(self->cylinder_program, "color");
	self->cylinder_uniform_nm       = glGetUniformLocation(self->cylinder_program, "nm");
	self->cylinder_uniform_mvp      = glGetUniformLocation(self->cylinder_program, "mvp");

	GLenum e = A3D_GL_GETERROR();
	if(e != GL_NO_ERROR)
		goto fail_error;

	// success
	return 1;

	// failure
	fail_error:
		glDeleteProgram(self->cylinder_program);
	fail_cylinder_program:
		glDeleteProgram(self->outward_program);
	fail_outward_program:
		glDeleteProgram(self->face_program);
	return 0;
}
示例#2
0
static int a3d_widget_shaders(a3d_widget_t* self)
{
	assert(self);
	LOGD("debug");

	self->prog = a3d_shader_make_source(VSHADER, FSHADER);
	if(self->prog == 0)
	{
		return 0;
	}

	self->prog2 = a3d_shader_make_source(VSHADER2, FSHADER2);
	if(self->prog2 == 0)
	{
		goto fail_prog2;
	}

	self->scroll_prog = a3d_shader_make_source(VSHADER_SCROLL,
	                                           FSHADER_SCROLL);
	if(self->scroll_prog == 0)
	{
		goto fail_scroll_prog;
	}

	self->attr_vertex  = glGetAttribLocation(self->prog, "vertex");
	self->unif_mvp     = glGetUniformLocation(self->prog, "mvp");
	self->unif_color   = glGetUniformLocation(self->prog, "color");
	self->attr_vertex2 = glGetAttribLocation(self->prog2, "vertex");
	self->unif_mvp2    = glGetUniformLocation(self->prog2, "mvp");
	self->unif_color2a = glGetUniformLocation(self->prog2, "colora");
	self->unif_color2b = glGetUniformLocation(self->prog2, "colorb");
	self->unif_y2      = glGetUniformLocation(self->prog2, "y");
	self->scroll_attr_vertex = glGetAttribLocation(self->scroll_prog, "xyuv");
	self->scroll_unif_mvp    = glGetUniformLocation(self->scroll_prog, "mvp");
	self->scroll_unif_color0 = glGetUniformLocation(self->scroll_prog, "color0");
	self->scroll_unif_color1 = glGetUniformLocation(self->scroll_prog, "color1");
	self->scroll_unif_a      = glGetUniformLocation(self->scroll_prog, "a");
	self->scroll_unif_b      = glGetUniformLocation(self->scroll_prog, "b");

	// success
	return 1;

	// failure
	fail_scroll_prog:
		glDeleteProgram(self->prog2);
	fail_prog2:
		glDeleteProgram(self->prog);
	return 0;
}
示例#3
0
a3d_spriteShader_t* a3d_spriteShader_new(void)
{
	LOGD("debug");

	a3d_spriteShader_t* self = (a3d_spriteShader_t*) malloc(sizeof(a3d_spriteShader_t));
	if(self == NULL)
	{
		LOGE("malloc failed");
		return 0;
	}

	self->prog = a3d_shader_make_source(VSHADER, FSHADER);
	if(self->prog == 0)
	{
		goto fail_prog;
	}

	self->attr_vertex  = glGetAttribLocation(self->prog, "vertex");
	self->attr_coords  = glGetAttribLocation(self->prog, "coords");
	self->unif_color   = glGetUniformLocation(self->prog, "color");
	self->unif_mvp     = glGetUniformLocation(self->prog, "mvp");
	self->unif_sampler = glGetUniformLocation(self->prog, "sampler");

	// success
	return self;

	// failure
	fail_prog:
		free(self);
	return NULL;
}