Mpeg2 *glueMpeg2_open(char *filename, int stream_from_disk) { Mpeg2 *mpg=malloc(sizeof(Mpeg2)); memset(mpg, 0, sizeof(Mpeg2)); mpg->decoder = mpeg2_init(); if (mpg->decoder == NULL) { glueError("Could not allocate a decoder object (libmpeg2)"); } mpg->info = mpeg2_info(mpg->decoder); if (stream_from_disk) { mpg->f = fopen(filename, "rb"); mpg->stream_from_disk=1; } else { mpg->data = glueLoadfile(filename); mpg->stream_from_disk=0; } mpg->whereami = 0; mpg->framenum = 0; mpg->prevtime = 0; mpg->end = 0; glueLoading(); return mpg; }
void meshlodder(Mesh *mesh) { Mvert *mv; int x; int group, lod; if (mesh->numgroups>MAX_GROUPS) glueError("too many groups in mesh!"); loddermesh=mesh; // loop mesh groups for (group=0; group<mesh->numgroups; group++) { Object *obu=mesh->groups[group]; int vc=obu->vc; // if (obu->orig_indices) glueError("object contains splitted shit, no way jose!"); mv=malloc(sizeof(Mvert)*vc); for (x=0; x<vc; x++) { mv[x].pos=obu->vertices[x]; mv[x].parent=NPAR; } // fix parents for splitted vertices if (obu->orig_indices) { for (x=0; x<obu->linkcnt; x++) { int splitted, parent; splitted=obu->vertex_links[x*2+0]; parent=obu->vertex_links[x*2+1]; mv[splitted].parent=parent; } } // loop lods for (lod=0; lod<MAX_LOD_REDUCTION; lod++) { int killed; //int mergevertices(Mvert *data, int vc, int *indices, int fc) { killed=mergevertices(mv, vc, obu->indices, obu->fc); #ifdef DEBUG_LODDER glueNoticef("mergevertices group %i lod %i, vc=%i killed=%i", group, lod, vc, killed); #endif lodder_vertices[group][lod]=unpack_mvbuffer(mv, vc); #ifdef DEBUG_LODDER dump_obj(lodder_vertices[group][lod], vc, obu->indices, obu->fc); #endif //lodder_normals[group][lod]=calc_lodder_normals(lodder_vertices[group][lod], vc, i2, fc2); } // lod-loop free(mv); glueLoading(); } // mesh group loop }
glue_static Framebuffer *glueCubemap(int res) { Framebuffer *fbo; int x; fbo=malloc(sizeof(Framebuffer)); fbo->xres=res; fbo->yres=res; glGenFramebuffersEXT(1, &fbo->num); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo->num); // depth glGenRenderbuffersEXT(1, &fbo->depthbuffer); glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, fbo->depthbuffer); glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, res, res); glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, fbo->depthbuffer); // colortexture glGenTextures(1, &fbo->texnum); glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, fbo->texnum); glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST); for (x=0; x<6; x++) { glTexImage2D(cubesides[x], 0, GL_RGBA, res, res, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, cubesides[x], fbo->texnum, 0); } checkfbostatus(); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); fbo->texnum2=0; glueLoading(); return fbo; }