Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2009-01-04 17:14:06 +0300
committerTon Roosendaal <ton@blender.org>2009-01-04 17:14:06 +0300
commitf7cb86df3a9ceccc4d649e42735732a608169157 (patch)
tree558a9ba43708a2213b1afa8f46d79f5daa140bc6 /source/blender/render
parent74f9e98c828c17910405092785633373d4ae88e8 (diff)
2.5
Think global, act local! The old favorite G.scene gone! Man... that took almost 2 days. Also removed G.curscreen and G.edbo. Not everything could get solved; here's some notes. - modifiers now store current scene in ModifierData. This is not meant for permanent, but it can probably stick there until we cleaned the anim system and depsgraph to cope better with timing issues. - Game engine G.scene should become an argument for staring it. Didn't solve this yet. - Texture nodes should get scene cfra, but the current implementation is too tightly wrapped to do it easily.
Diffstat (limited to 'source/blender/render')
-rw-r--r--source/blender/render/extern/include/RE_pipeline.h6
-rw-r--r--source/blender/render/intern/source/convertblender.c56
-rw-r--r--source/blender/render/intern/source/envmap.c6
-rw-r--r--source/blender/render/intern/source/initrender.c2
-rw-r--r--source/blender/render/intern/source/pipeline.c50
-rw-r--r--source/blender/render/intern/source/rayshade.c6
-rw-r--r--source/blender/render/intern/source/texture.c8
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;