diff options
Diffstat (limited to 'source/blender/render')
-rw-r--r-- | source/blender/render/extern/include/RE_pipeline.h | 6 | ||||
-rw-r--r-- | source/blender/render/intern/source/convertblender.c | 56 | ||||
-rw-r--r-- | source/blender/render/intern/source/envmap.c | 6 | ||||
-rw-r--r-- | source/blender/render/intern/source/initrender.c | 2 | ||||
-rw-r--r-- | source/blender/render/intern/source/pipeline.c | 50 | ||||
-rw-r--r-- | source/blender/render/intern/source/rayshade.c | 6 | ||||
-rw-r--r-- | source/blender/render/intern/source/texture.c | 8 |
7 files changed, 69 insertions, 65 deletions
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h index 60557403143..97ef371af76 100644 --- a/source/blender/render/extern/include/RE_pipeline.h +++ b/source/blender/render/extern/include/RE_pipeline.h @@ -124,10 +124,11 @@ typedef struct RenderResult { typedef struct RenderStats { + int cfra; int totface, totvert, totstrand, tothalo, totlamp, totpart; short curfield, curblur, curpart, partsdone, convertdone; double starttime, lastframetime; - char *infostr; + char *infostr, scenename[32]; } RenderStats; @@ -195,7 +196,7 @@ struct RenderResult *RE_MultilayerConvert(void *exrhandle, int rectx, int recty) void RE_MergeFullSample(struct Render *re, struct Scene *sce, struct bNodeTree *ntree); /* ancient stars function... go away! */ -void RE_make_stars(struct Render *re, void (*initfunc)(void), +void RE_make_stars(struct Render *re, struct Scene *scenev3d, void (*initfunc)(void), void (*vertexfunc)(float*), void (*termfunc)(void)); /* display and event callbacks */ @@ -226,6 +227,7 @@ void RE_Database_Baking(struct Render *re, struct Scene *scene, int type, struct void RE_DataBase_GetView(struct Render *re, float mat[][4]); void RE_GetCameraWindow(struct Render *re, struct Object *camera, int frame, float mat[][4]); +struct Scene *RE_GetScene(struct Render *re); #endif /* RE_PIPELINE_H */ diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index 8fd566da30f..b36f4337235 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -163,7 +163,7 @@ static HaloRen *initstar(Render *re, ObjectRen *obr, float *vec, float hasize) * differ in clarity/color */ -void RE_make_stars(Render *re, void (*initfunc)(void), +void RE_make_stars(Render *re, Scene *scenev3d, void (*initfunc)(void), void (*vertexfunc)(float*), void (*termfunc)(void)) { extern unsigned char hash[512]; @@ -179,8 +179,8 @@ void RE_make_stars(Render *re, void (*initfunc)(void), int x, y, z, sx, sy, sz, ex, ey, ez, done = 0; if(initfunc) { - scene= G.scene; - wrld= G.scene->world; + scene= scenev3d; + wrld= scene->world; } else { scene= re->scene; @@ -870,7 +870,7 @@ static float *get_object_orco(Render *re, Object *ob) if (!orco) { if (ELEM(ob->type, OB_CURVE, OB_FONT)) { - orco = make_orco_curve(ob); + orco = make_orco_curve(re->scene, ob); } else if (ob->type==OB_SURF) { orco = make_orco_surf(ob); } else if (ob->type==OB_MBALL) { @@ -1473,7 +1473,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem MCol *mcol= 0; float loc[3],loc1[3],loc0[3],vel[3],mat[4][4],nmat[3][3],co[3],nor[3],time; float *orco=0,*surfnor=0,*uvco=0, strandlen=0.0f, curlen=0.0f; - float hasize, pa_size, pa_time, r_tilt, cfra=bsystem_time(ob,(float)re->scene->r.cfra,0.0); + float hasize, pa_size, pa_time, r_tilt, cfra=bsystem_time(re->scene, ob, (float)re->scene->r.cfra, 0.0); float adapt_angle=0.0, adapt_pix=0.0, random, simplify[2]; int i, a, k, max_k=0, totpart, totuv=0, totcol=0, override_uv=-1, dosimplify = 0, dosurfacecache = 0; int path_possible=0, keys_possible=0, baked_keys=0, totchild=0; @@ -1570,7 +1570,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem } if(part->flag&PART_GLOB_TIME) - cfra=bsystem_time(0,(float)re->scene->r.cfra,0.0); + cfra=bsystem_time(re->scene, 0, (float)re->scene->r.cfra, 0.0); if(part->type==PART_REACTOR){ psys_get_reactor_target(ob, psys, &tob, &tpsys); @@ -1674,7 +1674,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem } if(path_nbr==0) - psys->lattice=psys_get_lattice(ob,psys); + psys->lattice= psys_get_lattice(re->scene, ob, psys); /* 3. start creating renderable things */ for(a=0,pa=pars; a<totpart+totchild; a++, pa++, seed++) { @@ -1958,7 +1958,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem else{ time=0.0f; state.time=cfra; - if(psys_get_particle_state(ob,psys,a,&state,0)==0) + if(psys_get_particle_state(re->scene, ob, psys, a, &state, 0)==0) continue; } @@ -2022,7 +2022,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem strandbuf->surface= cache_strand_surface(re, obr, psmd->dm, mat, timeoffset); /* 4. clean up */ - if(ma) do_mat_ipo(ma); + if(ma) do_mat_ipo(re->scene, ma); if(orco1) MEM_freeN(orco); @@ -2348,7 +2348,7 @@ static void init_render_mball(Render *re, ObjectRen *obr) float *data, *nors, *orco, mat[4][4], imat[3][3], xn, yn, zn; int a, need_orco, vlakindex, *index; - if (ob!=find_basis_mball(ob)) + if (ob!=find_basis_mball(re->scene, ob)) return; MTC_Mat4MulMat4(mat, ob->obmat, re->viewmat); @@ -2362,7 +2362,7 @@ static void init_render_mball(Render *re, ObjectRen *obr) need_orco= 1; } - makeDispListMBall(ob); + makeDispListMBall(re->scene, ob); dl= ob->disp.first; if(dl==0) return; @@ -2634,7 +2634,7 @@ static void init_render_surf(Render *re, ObjectRen *obr) if(need_orco) orcobase= orco= get_object_orco(re, ob); displist.first= displist.last= 0; - makeDispListSurf(ob, &displist, 1); + makeDispListSurf(re->scene, ob, &displist, 1); dl= displist.first; /* walk along displaylist and create rendervertices/-faces */ @@ -2674,7 +2674,7 @@ static void init_render_curve(Render *re, ObjectRen *obr, int timeoffset) /* test displist */ if(cu->disp.first==NULL) - makeDispListCurveTypes(ob, 0); + makeDispListCurveTypes(re->scene, ob, 0); dl= cu->disp.first; if(cu->disp.first==NULL) return; @@ -3084,7 +3084,7 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset) me->mr->flag &= ~MULTIRES_NO_RENDER; } - dm= mesh_create_derived_render(ob, mask); + dm= mesh_create_derived_render(re->scene, ob, mask); if(dm==NULL) return; /* in case duplicated object fails? */ if(mask & CD_MASK_ORCO) { @@ -4233,7 +4233,7 @@ static void init_render_object_data(Render *re, ObjectRen *obr, int timeoffset) /* the emitter mesh wasn't rendered so the modifier stack wasn't * evaluated with render settings */ DerivedMesh *dm; - dm = mesh_create_derived_render(ob, CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL); + dm = mesh_create_derived_render(re->scene, ob, CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL); dm->release(dm); } @@ -4529,7 +4529,7 @@ static void dupli_render_particle_set(Render *re, Object *ob, int timeoffset, in /* this is to make sure we get render level duplis in groups: * the derivedmesh must be created before init_render_mesh, * since object_duplilist does dupliparticles before that */ - dm = mesh_create_derived_render(ob, CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL); + dm = mesh_create_derived_render(re->scene, ob, CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL); dm->release(dm); for(psys=ob->particlesystem.first; psys; psys=psys->next) @@ -4769,7 +4769,9 @@ void RE_Database_FromScene(Render *re, Scene *scene, int use_camera_view) /* per second, per object, stats print this */ re->i.infostr= "Preparing Scene data"; - + re->i.cfra= scene->r.cfra; + strncpy(re->i.scenename, scene->id.name+2, 20); + /* XXX add test if dbase was filled already? */ re->memArena = BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE); @@ -4834,7 +4836,7 @@ void RE_Database_FromScene(Render *re, Scene *scene, int use_camera_view) tothalo= re->tothalo; if(!re->test_break()) if(re->wrld.mode & WO_STARS) - RE_make_stars(re, NULL, NULL, NULL); + RE_make_stars(re, NULL, NULL, NULL, NULL); sort_halos(re, tothalo); re->i.infostr= "Creating Shadowbuffers"; @@ -4922,8 +4924,8 @@ static void database_fromscene_vectors(Render *re, Scene *scene, int timeoffset) if(re->scene->lay & 0xFF000000) lay= re->scene->lay & 0xFF000000; else lay= re->scene->lay; - /* applies changes fully, still using G.scene for timing... */ - G.scene->r.cfra+=timeoffset; + /* applies changes fully */ + scene->r.cfra += timeoffset; scene_update_for_newframe(re->scene, lay); /* if no camera, viewmat should have been set! */ @@ -4940,7 +4942,7 @@ static void database_fromscene_vectors(Render *re, Scene *scene, int timeoffset) project_renderdata(re, projectverto, re->r.mode & R_PANORAMA, 0, 1); /* do this in end, particles for example need cfra */ - G.scene->r.cfra-=timeoffset; + scene->r.cfra -= timeoffset; } /* choose to use static, to prevent giving too many args to this call */ @@ -5528,7 +5530,7 @@ void RE_make_sticky(Scene *scene, View3D *v3d) return; } - if(G.scene->camera==NULL) { + if(scene->camera==NULL) { printf("Need camera to make sticky\n"); return; } @@ -5538,14 +5540,14 @@ void RE_make_sticky(Scene *scene, View3D *v3d) } re= RE_NewRender("_make sticky_"); - RE_InitState(re, NULL, &G.scene->r, G.scene->r.xsch, G.scene->r.ysch, NULL); + RE_InitState(re, NULL, &scene->r, scene->r.xsch, scene->r.ysch, NULL); /* use renderdata and camera to set viewplane */ - RE_SetCamera(re, G.scene->camera); + RE_SetCamera(re, scene->camera); /* and set view matrix */ - Mat4Ortho(G.scene->camera->obmat); - Mat4Invert(mat, G.scene->camera->obmat); + Mat4Ortho(scene->camera->obmat); + Mat4Invert(mat, scene->camera->obmat); RE_SetView(re, mat); for(base= FIRSTBASE; base; base= base->next) { @@ -5560,7 +5562,7 @@ void RE_make_sticky(Scene *scene, View3D *v3d) me->msticky= CustomData_add_layer(&me->vdata, CD_MSTICKY, CD_CALLOC, NULL, me->totvert); - where_is_object(ob); + where_is_object(scene, ob); Mat4MulMat4(mat, ob->obmat, re->viewmat); ms= me->msticky; diff --git a/source/blender/render/intern/source/envmap.c b/source/blender/render/intern/source/envmap.c index 13fa9b17b71..5cf03272b9f 100644 --- a/source/blender/render/intern/source/envmap.c +++ b/source/blender/render/intern/source/envmap.c @@ -369,7 +369,7 @@ static void env_set_imats(Render *re) Base *base; float mat[4][4]; - base= G.scene->base.first; + base= re->scene->base.first; while(base) { MTC_Mat4MulMat4(mat, base->object->obmat, re->viewmat); MTC_Mat4Invert(base->object->imat, mat); @@ -463,7 +463,7 @@ static void render_envmap(Render *re, EnvMap *env) else { if(envre->r.mode & R_OSA) env->ok= ENV_OSA; else env->ok= ENV_NORMAL; - env->lastframe= G.scene->r.cfra; /* hurmf */ + env->lastframe= re->scene->r.cfra; } /* restore */ @@ -496,7 +496,7 @@ void make_envmaps(Render *re) if(tex->env && tex->env->object) { EnvMap *env= tex->env; - if(env->object->lay & G.scene->lay) { + if(env->object->lay & re->scene->lay) { if(env->stype==ENV_LOAD) { float orthmat[4][4], mat[4][4], tmat[4][4]; diff --git a/source/blender/render/intern/source/initrender.c b/source/blender/render/intern/source/initrender.c index 40c0edb6e5f..eb1e80948f6 100644 --- a/source/blender/render/intern/source/initrender.c +++ b/source/blender/render/intern/source/initrender.c @@ -459,7 +459,7 @@ void RE_SetCamera(Render *re, Object *camera) * and other stuff BEFORE the animation update loop is done * */ if(cam->ipo) { - calc_ipo(cam->ipo, frame_to_float(re->r.cfra)); + calc_ipo(cam->ipo, frame_to_float(re->scene, re->r.cfra)); execute_ipo(&cam->id, cam->ipo); } lens= cam->lens; diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 21a06fdd794..729013c9cb4 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -141,7 +141,7 @@ static void stats_background(RenderStats *rs) float megs_used_memory= mem_in_use/(1024.0*1024.0); char str[400], *spos= str; - spos+= sprintf(spos, "Fra:%d Mem:%.2fM ", G.scene->r.cfra, megs_used_memory); + spos+= sprintf(spos, "Fra:%d Mem:%.2fM ", rs->cfra, megs_used_memory); if(rs->curfield) spos+= sprintf(spos, "Field %d ", rs->curfield); @@ -153,9 +153,9 @@ static void stats_background(RenderStats *rs) } else { if(rs->tothalo) - spos+= sprintf(spos, "Sce: %s Ve:%d Fa:%d Ha:%d La:%d", G.scene->id.name+2, rs->totvert, rs->totface, rs->tothalo, rs->totlamp); + spos+= sprintf(spos, "Sce: %s Ve:%d Fa:%d Ha:%d La:%d", rs->scenename, rs->totvert, rs->totface, rs->tothalo, rs->totlamp); else - spos+= sprintf(spos, "Sce: %s Ve:%d Fa:%d La:%d", G.scene->id.name+2, rs->totvert, rs->totface, rs->totlamp); + spos+= sprintf(spos, "Sce: %s Ve:%d Fa:%d La:%d", rs->scenename, rs->totvert, rs->totface, rs->totlamp); } printf("%s\n", str); } @@ -922,6 +922,14 @@ RenderResult *RE_GetResult(Render *re) return NULL; } +/* displist.c util.... */ +Scene *RE_GetScene(Render *re) +{ + if(re) + return re->scene; + return NULL; +} + RenderLayer *render_get_active_layer(Render *re, RenderResult *rr) { RenderLayer *rl= BLI_findlink(&rr->layers, re->r.actlay); @@ -991,7 +999,6 @@ RenderStats *RE_GetStats(Render *re) return &re->i; } -/* Note, when rendering from a scene, ALWAYS use G.scene->id.name, else compositing wont work */ Render *RE_NewRender(const char *name) { Render *re; @@ -1839,7 +1846,7 @@ static void load_backbuffer(Render *re) BKE_image_signal(re->backbuf, NULL, IMA_SIGNAL_RELOAD); } - re->backbuf= BKE_add_image_file(name); + re->backbuf= BKE_add_image_file(name, re->r.cfra); ibuf= BKE_image_get_ibuf(re->backbuf, NULL); if(ibuf==NULL) { // error() doesnt work with render window open @@ -1933,7 +1940,7 @@ static void render_scene(Render *re, Scene *sce, int cfra) /* still unsure entity this... */ resc->scene= sce; - /* ensure scene has depsgraph, base flags etc OK. Warning... also sets G.scene */ + /* ensure scene has depsgraph, base flags etc OK */ set_scene_bg(sce); /* copy callbacks */ @@ -1989,11 +1996,6 @@ static void ntree_render_scenes(Render *re) } } } - - /* still the global... */ - if(G.scene!=re->scene) - set_scene_bg(re->scene); - } /* helper call to detect if theres a composite with render-result node */ @@ -2121,8 +2123,8 @@ void RE_MergeFullSample(Render *re, Scene *sce, bNodeTree *ntree) } /* own render result should be read/allocated */ - if(G.scene->id.flag & LIB_DOIT) - RE_ReadRenderResult(G.scene, G.scene); + if(re->scene->id.flag & LIB_DOIT) + RE_ReadRenderResult(re->scene, re->scene); /* and now we can draw (result is there) */ re->display_init(re->result); @@ -2251,12 +2253,12 @@ static void yafrayRender(Render *re) #endif /* disable yafray */ -static void renderresult_stampinfo() +static void renderresult_stampinfo(Scene *scene) { RenderResult rres; /* this is the basic trick to get the displayed float or char rect from render result */ - RE_GetResultImage(RE_GetRender(G.scene->id.name), &rres); - BKE_stamp_buf((unsigned char *)rres.rect32, rres.rectf, rres.rectx, rres.recty, 4); + RE_GetResultImage(RE_GetRender(scene->id.name), &rres); + BKE_stamp_buf(scene, (unsigned char *)rres.rect32, rres.rectf, rres.rectx, rres.recty, 4); } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ @@ -2297,8 +2299,8 @@ static void do_render_all_options(Render *re) re->stats_draw(&re->i); /* stamp image info here */ - if((G.scene->r.scemode & R_STAMP_INFO) && (G.scene->r.stamp & R_STAMP_DRAW)) { - renderresult_stampinfo(); + if((re->r.scemode & R_STAMP_INFO) && (re->r.stamp & R_STAMP_DRAW)) { + renderresult_stampinfo(re->scene); re->display_draw(re->result, NULL); } } @@ -2508,7 +2510,7 @@ static void do_write_image_or_movie(Render *re, Scene *scene, bMovieHandle *mh) printf("Append frame %d", scene->r.cfra); } else { - BKE_makepicstring(name, scene->r.pic, scene->r.cfra, scene->r.imtype); + BKE_makepicstring(scene, name, scene->r.pic, scene->r.cfra, scene->r.imtype); if(re->r.imtype==R_MULTILAYER) { if(re->result) { @@ -2528,7 +2530,7 @@ static void do_write_image_or_movie(Render *re, Scene *scene, bMovieHandle *mh) /* float factor for random dither, imbuf takes care of it */ ibuf->dither= scene->r.dither_intensity; - ok= BKE_write_ibuf(ibuf, name, scene->r.imtype, scene->r.subimtype, scene->r.quality); + ok= BKE_write_ibuf(scene, ibuf, name, scene->r.imtype, scene->r.subimtype, scene->r.quality); if(ok==0) { printf("Render error: cannot save %s\n", name); @@ -2540,9 +2542,9 @@ static void do_write_image_or_movie(Render *re, Scene *scene, bMovieHandle *mh) if(ok && scene->r.imtype==R_OPENEXR && (scene->r.subimtype & R_PREVIEW_JPG)) { if(BLI_testextensie(name, ".exr")) name[strlen(name)-4]= 0; - BKE_add_image_extension(name, R_JPEG90); + BKE_add_image_extension(scene, name, R_JPEG90); ibuf->depth= 24; - BKE_write_ibuf(ibuf, name, R_JPEG90, scene->r.subimtype, scene->r.quality); + BKE_write_ibuf(scene, ibuf, name, R_JPEG90, scene->r.subimtype, scene->r.quality); printf("\nSaved: %s", name); } @@ -2577,7 +2579,7 @@ void RE_BlenderAnim(Render *re, Scene *scene, int sfra, int efra, int tfra) if (mh->get_next_frame) { while (!(G.afbreek == 1)) { - int nf = mh->get_next_frame(); + int nf = mh->get_next_frame(&re->r); if (nf >= 0 && nf >= scene->r.sfra && nf <= scene->r.efra) { scene->r.cfra = re->r.cfra = nf; @@ -2615,7 +2617,7 @@ void RE_BlenderAnim(Render *re, Scene *scene, int sfra, int efra, int tfra) nfra+= tfra; if (scene->r.mode & (R_NO_OVERWRITE | R_TOUCH) ) { - BKE_makepicstring(name, scene->r.pic, scene->r.cfra, scene->r.imtype); + BKE_makepicstring(scene, name, scene->r.pic, scene->r.cfra, scene->r.imtype); } if (scene->r.mode & R_NO_OVERWRITE && BLI_exist(name)) { diff --git a/source/blender/render/intern/source/rayshade.c b/source/blender/render/intern/source/rayshade.c index 13be83a6b7b..a54afafc8c9 100644 --- a/source/blender/render/intern/source/rayshade.c +++ b/source/blender/render/intern/source/rayshade.c @@ -1536,8 +1536,8 @@ static void ray_ao_qmc(ShadeInput *shi, float *shadfac) float maxdist = R.wrld.aodist; float fac=0.0f, prev=0.0f; - float adapt_thresh = G.scene->world->ao_adapt_thresh; - float adapt_speed_fac = G.scene->world->ao_adapt_speed_fac; + float adapt_thresh = R.wrld.ao_adapt_thresh; + float adapt_speed_fac = R.wrld.ao_adapt_speed_fac; int samples=0; int max_samples = R.wrld.aosamp*R.wrld.aosamp; @@ -1684,7 +1684,7 @@ static void ray_ao_spheresamp(ShadeInput *shi, float *shadfac) /* bias prevents smoothed faces to appear flat */ if(shi->vlr->flag & R_SMOOTH) { - bias= G.scene->world->aobias; + bias= R.wrld.aobias; nrm= shi->vn; } else { diff --git a/source/blender/render/intern/source/texture.c b/source/blender/render/intern/source/texture.c index 61e9d9cf412..19973e972d2 100644 --- a/source/blender/render/intern/source/texture.c +++ b/source/blender/render/intern/source/texture.c @@ -79,11 +79,9 @@ extern struct Render R; -/* note; this is called WITH RENDER IS NULL in src/drawview.c for animated - background image, option should move to kernel */ void init_render_texture(Render *re, Tex *tex) { - int cfra= G.scene->r.cfra; + int cfra= re->scene->r.cfra; if(re) cfra= re->r.cfra; @@ -95,7 +93,7 @@ void init_render_texture(Render *re, Tex *tex) if(tex->type==TEX_PLUGIN) { if(tex->plugin && tex->plugin->doit) { if(tex->plugin->cfra) { - *(tex->plugin->cfra)= frame_to_float(cfra); + *(tex->plugin->cfra)= frame_to_float(re->scene, cfra); } } } @@ -718,7 +716,7 @@ static int evalnodes(Tex *tex, float *texvec, TexResult *texres, short thread, s short rv = TEX_INT; bNodeTree *nodes = tex->nodetree; - ntreeTexExecTree(nodes, texres, texvec, 0, thread, tex, which_output); + ntreeTexExecTree(nodes, texres, texvec, 0, thread, tex, which_output, R.r.cfra); if(texres->nor) rv |= TEX_NOR; rv |= TEX_RGB; |