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; }
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; }