示例#1
0
static VALUE
program_initialize(int argc, VALUE *argv, VALUE self)
{
    VALUE source;

    rb_scan_args(argc, argv, "01", &source);
    if (source != Qnil) {
        program_compile(self, source);
    }

    return self;
}
示例#2
0
bool lprogram_set_shaders(lua_State *L, const char *vs_text, const char *fs_text)
{
	struct program *program = lua_touserdata(L, -1);
	if ((vs_text && fs_text) && (strcmp(program->vertex_text, vs_text) || strcmp(program->fragment_text, fs_text))) {
		program->linked = false;
		program->vertex_text = strdup(vs_text);
		program->fragment_text = strdup(fs_text);
		if (!program_compile(program)) {
			return false;
		}
		glBindAttribLocation(program->program, ATTRIBUTE_VERTEX, "vertex");
		glBindAttribLocation(program->program, ATTRIBUTE_NORMAL, "normal");
		glBindAttribLocation(program->program, ATTRIBUTE_UV, "uv");
		glBindAttribLocation(program->program, ATTRIBUTE_TANGENT, "tangent");
		glBindAttribLocation(program->program, ATTRIBUTE_WEIGHT0, "weights[0]");
		glBindAttribLocation(program->program, ATTRIBUTE_WEIGHT1, "weights[1]");
		glBindAttribLocation(program->program, ATTRIBUTE_WEIGHT2, "weights[2]");
		glBindAttribLocation(program->program, ATTRIBUTE_WEIGHT3, "weights[3]");
		glBindAttribLocation(program->program, ATTRIBUTE_WEIGHT4, "weights[4]");
		glBindAttribLocation(program->program, ATTRIBUTE_WEIGHT5, "weights[5]");
		program_link(program);
	}
	return program->linked;
}