Rendering from 3d view in local view or with unlocked layer was not
working yet, now layer is passed along to render engine, changes quite a few files because simple swapping trick no longer works with threading.
This commit is contained in:
@@ -174,6 +174,7 @@ struct Render
|
||||
Scene *scene;
|
||||
RenderData r;
|
||||
World wrld;
|
||||
unsigned int lay;
|
||||
|
||||
ListBase parts;
|
||||
|
||||
|
||||
@@ -137,7 +137,7 @@ void RE_set_customdata_names(struct ObjectRen *obr, struct CustomData *data);
|
||||
|
||||
/* convertblender.c */
|
||||
void init_render_world(Render *re);
|
||||
void RE_Database_FromScene_Vectors(Render *re, struct Scene *sce);
|
||||
void RE_Database_FromScene_Vectors(Render *re, struct Scene *sce, unsigned int lay);
|
||||
|
||||
|
||||
#endif /* RENDERDATABASE_H */
|
||||
|
||||
@@ -3859,7 +3859,7 @@ static void add_lightgroup(Render *re, Group *group, int exclusive)
|
||||
for(go= group->gobject.first; go; go= go->next) {
|
||||
go->lampren= NULL;
|
||||
|
||||
if(go->ob->lay & re->scene->lay) {
|
||||
if(go->ob->lay & re->lay) {
|
||||
if(go->ob && go->ob->type==OB_LAMP) {
|
||||
for(gol= re->lights.first; gol; gol= gol->next) {
|
||||
if(gol->ob==go->ob) {
|
||||
@@ -4721,7 +4721,7 @@ static void dupli_render_particle_set(Render *re, Object *ob, int timeoffset, in
|
||||
static int get_vector_renderlayers(Scene *sce)
|
||||
{
|
||||
SceneRenderLayer *srl;
|
||||
int lay= 0;
|
||||
unsigned int lay= 0;
|
||||
|
||||
for(srl= sce->r.layers.first; srl; srl= srl->next)
|
||||
if(srl->passflag & SCE_PASS_VECTOR)
|
||||
@@ -4805,7 +4805,7 @@ static void database_init_objects(Render *re, unsigned int renderlay, int nolamp
|
||||
}
|
||||
}
|
||||
}
|
||||
else if((base->lay & lay) || (ob->type==OB_LAMP && (base->lay & re->scene->lay)) ) {
|
||||
else if((base->lay & lay) || (ob->type==OB_LAMP && (base->lay & re->lay)) ) {
|
||||
if((ob->transflag & OB_DUPLI) && (ob->type!=OB_MBALL)) {
|
||||
DupliObject *dob;
|
||||
ListBase *lb;
|
||||
@@ -4932,15 +4932,15 @@ static void database_init_objects(Render *re, unsigned int renderlay, int nolamp
|
||||
}
|
||||
|
||||
/* used to be 'rotate scene' */
|
||||
void RE_Database_FromScene(Render *re, Scene *scene, int use_camera_view)
|
||||
void RE_Database_FromScene(Render *re, Scene *scene, unsigned int lay, int use_camera_view)
|
||||
{
|
||||
extern int slurph_opt; /* key.c */
|
||||
Scene *sce;
|
||||
float mat[4][4];
|
||||
float amb[3];
|
||||
unsigned int lay;
|
||||
|
||||
re->scene= scene;
|
||||
re->lay= lay;
|
||||
|
||||
/* per second, per object, stats print this */
|
||||
re->i.infostr= "Preparing Scene data";
|
||||
@@ -4958,8 +4958,8 @@ void RE_Database_FromScene(Render *re, Scene *scene, int use_camera_view)
|
||||
re->i.partsdone= 0; /* signal now in use for previewrender */
|
||||
|
||||
/* in localview, lamps are using normal layers, objects only local bits */
|
||||
if(re->scene->lay & 0xFF000000) lay= re->scene->lay & 0xFF000000;
|
||||
else lay= re->scene->lay;
|
||||
if(re->lay & 0xFF000000)
|
||||
lay &= 0xFF000000;
|
||||
|
||||
/* applies changes fully */
|
||||
if((re->r.scemode & R_PREVIEWBUTS)==0)
|
||||
@@ -5089,13 +5089,13 @@ void RE_DataBase_GetView(Render *re, float mat[][4])
|
||||
/* Speed Vectors */
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
static void database_fromscene_vectors(Render *re, Scene *scene, int timeoffset)
|
||||
static void database_fromscene_vectors(Render *re, Scene *scene, unsigned int lay, int timeoffset)
|
||||
{
|
||||
extern int slurph_opt; /* key.c */
|
||||
float mat[4][4];
|
||||
unsigned int lay;
|
||||
|
||||
re->scene= scene;
|
||||
re->lay= lay;
|
||||
|
||||
/* XXX add test if dbase was filled already? */
|
||||
|
||||
@@ -5107,8 +5107,8 @@ static void database_fromscene_vectors(Render *re, Scene *scene, int timeoffset)
|
||||
slurph_opt= 0;
|
||||
|
||||
/* in localview, lamps are using normal layers, objects only local bits */
|
||||
if(re->scene->lay & 0xFF000000) lay= re->scene->lay & 0xFF000000;
|
||||
else lay= re->scene->lay;
|
||||
if(re->lay & 0xFF000000)
|
||||
lay &= 0xFF000000;
|
||||
|
||||
/* applies changes fully */
|
||||
scene->r.cfra += timeoffset;
|
||||
@@ -5471,7 +5471,7 @@ static void free_dbase_object_vectors(ListBase *lb)
|
||||
BLI_freelistN(lb);
|
||||
}
|
||||
|
||||
void RE_Database_FromScene_Vectors(Render *re, Scene *sce)
|
||||
void RE_Database_FromScene_Vectors(Render *re, Scene *sce, unsigned int lay)
|
||||
{
|
||||
ObjectInstanceRen *obi, *oldobi;
|
||||
StrandSurface *mesh;
|
||||
@@ -5486,7 +5486,7 @@ void RE_Database_FromScene_Vectors(Render *re, Scene *sce)
|
||||
speedvector_project(re, NULL, NULL, NULL); /* initializes projection code */
|
||||
|
||||
/* creates entire dbase */
|
||||
database_fromscene_vectors(re, sce, -1);
|
||||
database_fromscene_vectors(re, sce, lay, -1);
|
||||
|
||||
/* copy away vertex info */
|
||||
copy_dbase_object_vectors(re, &oldtable);
|
||||
@@ -5501,7 +5501,7 @@ void RE_Database_FromScene_Vectors(Render *re, Scene *sce)
|
||||
/* creates entire dbase */
|
||||
re->i.infostr= "Calculating next frame vectors";
|
||||
|
||||
database_fromscene_vectors(re, sce, +1);
|
||||
database_fromscene_vectors(re, sce, lay, +1);
|
||||
}
|
||||
/* copy away vertex info */
|
||||
copy_dbase_object_vectors(re, &newtable);
|
||||
@@ -5513,7 +5513,7 @@ void RE_Database_FromScene_Vectors(Render *re, Scene *sce)
|
||||
re->strandsurface= strandsurface;
|
||||
|
||||
if(!re->test_break(re->tbh))
|
||||
RE_Database_FromScene(re, sce, 1);
|
||||
RE_Database_FromScene(re, sce, lay, 1);
|
||||
|
||||
if(!re->test_break(re->tbh)) {
|
||||
for(step= 0; step<2; step++) {
|
||||
@@ -5602,14 +5602,14 @@ void RE_Database_FromScene_Vectors(Render *re, Scene *sce)
|
||||
RE_BAKE_DISPLACEMENT:for baking, no lamps, only selected objects
|
||||
RE_BAKE_SHADOW: for baking, only shadows, but all objects
|
||||
*/
|
||||
void RE_Database_Baking(Render *re, Scene *scene, int type, Object *actob)
|
||||
void RE_Database_Baking(Render *re, Scene *scene, unsigned int lay, int type, Object *actob)
|
||||
{
|
||||
float mat[4][4];
|
||||
float amb[3];
|
||||
unsigned int lay;
|
||||
int onlyselected, nolamps;
|
||||
|
||||
re->scene= scene;
|
||||
re->lay= lay;
|
||||
|
||||
/* renderdata setup and exceptions */
|
||||
re->r= scene->r;
|
||||
@@ -5642,8 +5642,8 @@ void RE_Database_Baking(Render *re, Scene *scene, int type, Object *actob)
|
||||
re->lampren.first= re->lampren.last= NULL;
|
||||
|
||||
/* in localview, lamps are using normal layers, objects only local bits */
|
||||
if(re->scene->lay & 0xFF000000) lay= re->scene->lay & 0xFF000000;
|
||||
else lay= re->scene->lay;
|
||||
if(re->lay & 0xFF000000)
|
||||
lay &= 0xFF000000;
|
||||
|
||||
/* if no camera, set unit */
|
||||
if(re->scene->camera) {
|
||||
|
||||
@@ -143,6 +143,7 @@ static Render *envmap_render_copy(Render *re, EnvMap *env)
|
||||
|
||||
RE_InitState(envre, NULL, &envre->r, NULL, cuberes, cuberes, NULL);
|
||||
envre->scene= re->scene; /* unsure about this... */
|
||||
envre->lay= re->lay;
|
||||
|
||||
/* view stuff in env render */
|
||||
envre->lens= 16.0f;
|
||||
@@ -513,7 +514,7 @@ void make_envmaps(Render *re)
|
||||
if(tex->env && tex->env->object) {
|
||||
EnvMap *env= tex->env;
|
||||
|
||||
if(env->object->lay & re->scene->lay) {
|
||||
if(env->object->lay & re->lay) {
|
||||
if(env->stype==ENV_LOAD) {
|
||||
float orthmat[4][4], mat[4][4], tmat[4][4];
|
||||
|
||||
|
||||
@@ -213,7 +213,7 @@ static void occ_build_shade(Render *re, OcclusionTree *tree)
|
||||
|
||||
/* setup shade sample with correct passes */
|
||||
memset(&ssamp, 0, sizeof(ShadeSample));
|
||||
ssamp.shi[0].lay= re->scene->lay;
|
||||
ssamp.shi[0].lay= re->lay;
|
||||
ssamp.shi[0].passflag= SCE_PASS_DIFFUSE|SCE_PASS_RGBA;
|
||||
ssamp.shi[0].combinedflag= ~(SCE_PASS_SPEC);
|
||||
ssamp.tot= 1;
|
||||
|
||||
@@ -1849,9 +1849,9 @@ static void do_render_3d(Render *re)
|
||||
|
||||
/* make render verts/faces/halos/lamps */
|
||||
if(render_scene_needs_vector(re))
|
||||
RE_Database_FromScene_Vectors(re, re->scene);
|
||||
RE_Database_FromScene_Vectors(re, re->scene, re->lay);
|
||||
else
|
||||
RE_Database_FromScene(re, re->scene, 1);
|
||||
RE_Database_FromScene(re, re->scene, re->lay, 1);
|
||||
|
||||
threaded_tile_processor(re);
|
||||
|
||||
@@ -2468,7 +2468,7 @@ static void do_render_composite_fields_blur_3d(Render *re)
|
||||
R.stats_draw= re->stats_draw;
|
||||
|
||||
if (update_newframe)
|
||||
scene_update_for_newframe(re->scene, re->scene->lay);
|
||||
scene_update_for_newframe(re->scene, re->lay);
|
||||
|
||||
if(re->r.scemode & R_FULL_SAMPLE)
|
||||
do_merge_fullsample(re, ntree);
|
||||
@@ -2729,7 +2729,7 @@ static void update_physics_cache(Render *re, Scene *scene, int anim_init)
|
||||
BKE_ptcache_make_cache(&baker);
|
||||
}
|
||||
/* evaluating scene options for general Blender render */
|
||||
static int render_initialize_from_scene(Render *re, Scene *scene, SceneRenderLayer *srl, int anim, int anim_init)
|
||||
static int render_initialize_from_scene(Render *re, Scene *scene, SceneRenderLayer *srl, unsigned int lay, int anim, int anim_init)
|
||||
{
|
||||
int winx, winy;
|
||||
rcti disprect;
|
||||
@@ -2756,6 +2756,7 @@ static int render_initialize_from_scene(Render *re, Scene *scene, SceneRenderLay
|
||||
}
|
||||
|
||||
re->scene= scene;
|
||||
re->lay= lay;
|
||||
|
||||
/* not too nice, but it survives anim-border render */
|
||||
if(anim) {
|
||||
@@ -2796,7 +2797,7 @@ static int render_initialize_from_scene(Render *re, Scene *scene, SceneRenderLay
|
||||
}
|
||||
|
||||
/* general Blender frame render call */
|
||||
void RE_BlenderFrame(Render *re, Scene *scene, SceneRenderLayer *srl, int frame)
|
||||
void RE_BlenderFrame(Render *re, Scene *scene, SceneRenderLayer *srl, unsigned int lay, int frame)
|
||||
{
|
||||
/* ugly global still... is to prevent preview events and signal subsurfs etc to make full resol */
|
||||
RenderGlobal.renderingslot= re->slot;
|
||||
@@ -2805,7 +2806,7 @@ void RE_BlenderFrame(Render *re, Scene *scene, SceneRenderLayer *srl, int frame)
|
||||
|
||||
scene->r.cfra= frame;
|
||||
|
||||
if(render_initialize_from_scene(re, scene, srl, 0, 0)) {
|
||||
if(render_initialize_from_scene(re, scene, srl, lay, 0, 0)) {
|
||||
do_render_all_options(re);
|
||||
}
|
||||
|
||||
@@ -2902,15 +2903,14 @@ static int do_write_image_or_movie(Render *re, Scene *scene, bMovieHandle *mh, R
|
||||
}
|
||||
|
||||
/* saves images to disk */
|
||||
void RE_BlenderAnim(Render *re, Scene *scene, int sfra, int efra, int tfra, ReportList *reports)
|
||||
void RE_BlenderAnim(Render *re, Scene *scene, unsigned int lay, int sfra, int efra, int tfra, ReportList *reports)
|
||||
{
|
||||
bMovieHandle *mh= BKE_get_movie_handle(scene->r.imtype);
|
||||
unsigned int lay;
|
||||
int cfrao= scene->r.cfra;
|
||||
int nfra;
|
||||
|
||||
/* do not fully call for each frame, it initializes & pops output window */
|
||||
if(!render_initialize_from_scene(re, scene, NULL, 0, 1))
|
||||
if(!render_initialize_from_scene(re, scene, NULL, lay, 0, 1))
|
||||
return;
|
||||
|
||||
/* ugly global still... is to prevent renderwin events and signal subsurfs etc to make full resol */
|
||||
@@ -2945,7 +2945,7 @@ void RE_BlenderAnim(Render *re, Scene *scene, int sfra, int efra, int tfra, Repo
|
||||
char name[FILE_MAX];
|
||||
|
||||
/* only border now, todo: camera lens. (ton) */
|
||||
render_initialize_from_scene(re, scene, NULL, 1, 0);
|
||||
render_initialize_from_scene(re, scene, NULL, lay, 1, 0);
|
||||
|
||||
if(nfra!=scene->r.cfra) {
|
||||
/*
|
||||
@@ -2953,12 +2953,14 @@ void RE_BlenderAnim(Render *re, Scene *scene, int sfra, int efra, int tfra, Repo
|
||||
* From convertblender.c:
|
||||
* in localview, lamps are using normal layers, objects only local bits.
|
||||
*/
|
||||
if(scene->lay & 0xFF000000)
|
||||
lay= scene->lay & 0xFF000000;
|
||||
else
|
||||
lay= scene->lay;
|
||||
unsigned int updatelay;
|
||||
|
||||
scene_update_for_newframe(scene, lay);
|
||||
if(re->lay & 0xFF000000)
|
||||
updatelay= re->lay & 0xFF000000;
|
||||
else
|
||||
updatelay= re->lay;
|
||||
|
||||
scene_update_for_newframe(scene, updatelay);
|
||||
continue;
|
||||
}
|
||||
else
|
||||
|
||||
@@ -2652,7 +2652,7 @@ int RE_bake_shade_all_selected(Render *re, int type, Object *actob, short *do_up
|
||||
/* get the threads running */
|
||||
for(a=0; a<re->r.threads; a++) {
|
||||
/* set defaults in handles */
|
||||
handles[a].ssamp.shi[0].lay= re->scene->lay;
|
||||
handles[a].ssamp.shi[0].lay= re->lay;
|
||||
|
||||
if (type==RE_BAKE_SHADOW) {
|
||||
handles[a].ssamp.shi[0].passflag= SCE_PASS_SHADOW;
|
||||
|
||||
@@ -494,7 +494,7 @@ static void precache_setup_shadeinput(Render *re, ObjectInstanceRen *obi, Materi
|
||||
shi->har= shi->mat->har;
|
||||
shi->obi= obi;
|
||||
shi->obr= obi->obr;
|
||||
shi->lay = re->scene->lay;
|
||||
shi->lay = re->lay;
|
||||
}
|
||||
|
||||
static void precache_init_parts(Render *re, RayObject *tree, ShadeInput *shi, ObjectInstanceRen *obi, int totthread, int *parts)
|
||||
|
||||
Reference in New Issue
Block a user