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
path: root/source
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
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')
-rw-r--r--source/blender/blenkernel/BKE_DerivedMesh.h27
-rw-r--r--source/blender/blenkernel/BKE_action.h9
-rw-r--r--source/blender/blenkernel/BKE_armature.h3
-rw-r--r--source/blender/blenkernel/BKE_cloth.h6
-rw-r--r--source/blender/blenkernel/BKE_collision.h3
-rw-r--r--source/blender/blenkernel/BKE_constraint.h4
-rw-r--r--source/blender/blenkernel/BKE_curve.h5
-rw-r--r--source/blender/blenkernel/BKE_displist.h15
-rw-r--r--source/blender/blenkernel/BKE_effect.h12
-rw-r--r--source/blender/blenkernel/BKE_exotic.h11
-rw-r--r--source/blender/blenkernel/BKE_fluidsim.h4
-rw-r--r--source/blender/blenkernel/BKE_font.h3
-rw-r--r--source/blender/blenkernel/BKE_global.h19
-rw-r--r--source/blender/blenkernel/BKE_group.h3
-rw-r--r--source/blender/blenkernel/BKE_image.h17
-rw-r--r--source/blender/blenkernel/BKE_ipo.h19
-rw-r--r--source/blender/blenkernel/BKE_key.h3
-rw-r--r--source/blender/blenkernel/BKE_lattice.h9
-rw-r--r--source/blender/blenkernel/BKE_material.h2
-rw-r--r--source/blender/blenkernel/BKE_mball.h7
-rw-r--r--source/blender/blenkernel/BKE_modifier.h3
-rw-r--r--source/blender/blenkernel/BKE_multires.h4
-rw-r--r--source/blender/blenkernel/BKE_node.h4
-rw-r--r--source/blender/blenkernel/BKE_object.h27
-rw-r--r--source/blender/blenkernel/BKE_particle.h29
-rw-r--r--source/blender/blenkernel/BKE_pointcache.h5
-rw-r--r--source/blender/blenkernel/BKE_scene.h2
-rw-r--r--source/blender/blenkernel/BKE_shrinkwrap.h34
-rw-r--r--source/blender/blenkernel/BKE_softbody.h5
-rw-r--r--source/blender/blenkernel/BKE_text.h2
-rw-r--r--source/blender/blenkernel/BKE_texture.h3
-rw-r--r--source/blender/blenkernel/BKE_writeavi.h2
-rw-r--r--source/blender/blenkernel/BKE_writeffmpeg.h2
-rw-r--r--source/blender/blenkernel/BKE_writeframeserver.h2
-rw-r--r--source/blender/blenkernel/intern/BME_conversions.c4
-rw-r--r--source/blender/blenkernel/intern/DerivedMesh.c74
-rw-r--r--source/blender/blenkernel/intern/action.c40
-rw-r--r--source/blender/blenkernel/intern/anim.c89
-rw-r--r--source/blender/blenkernel/intern/armature.c20
-rw-r--r--source/blender/blenkernel/intern/blender.c6
-rw-r--r--source/blender/blenkernel/intern/cdderivedmesh.c7
-rw-r--r--source/blender/blenkernel/intern/cloth.c7
-rw-r--r--source/blender/blenkernel/intern/collision.c8
-rw-r--r--source/blender/blenkernel/intern/constraint.c15
-rw-r--r--source/blender/blenkernel/intern/curve.c27
-rw-r--r--source/blender/blenkernel/intern/depsgraph.c42
-rw-r--r--source/blender/blenkernel/intern/displist.c70
-rw-r--r--source/blender/blenkernel/intern/effect.c31
-rw-r--r--source/blender/blenkernel/intern/exotic.c193
-rw-r--r--source/blender/blenkernel/intern/fluidsim.c10
-rw-r--r--source/blender/blenkernel/intern/font.c4
-rw-r--r--source/blender/blenkernel/intern/group.c12
-rw-r--r--source/blender/blenkernel/intern/image.c132
-rw-r--r--source/blender/blenkernel/intern/implicit.c12
-rw-r--r--source/blender/blenkernel/intern/ipo.c80
-rw-r--r--source/blender/blenkernel/intern/key.c38
-rw-r--r--source/blender/blenkernel/intern/lattice.c20
-rw-r--r--source/blender/blenkernel/intern/library.c2
-rw-r--r--source/blender/blenkernel/intern/material.c10
-rw-r--r--source/blender/blenkernel/intern/mball.c16
-rw-r--r--source/blender/blenkernel/intern/mesh.c14
-rw-r--r--source/blender/blenkernel/intern/modifier.c106
-rw-r--r--source/blender/blenkernel/intern/multires-firstlevel.c12
-rw-r--r--source/blender/blenkernel/intern/multires.c19
-rw-r--r--source/blender/blenkernel/intern/node.c4
-rw-r--r--source/blender/blenkernel/intern/object.c106
-rw-r--r--source/blender/blenkernel/intern/particle.c68
-rw-r--r--source/blender/blenkernel/intern/particle_system.c178
-rw-r--r--source/blender/blenkernel/intern/pointcache.c10
-rw-r--r--source/blender/blenkernel/intern/scene.c34
-rw-r--r--source/blender/blenkernel/intern/shrinkwrap.c151
-rw-r--r--source/blender/blenkernel/intern/softbody.c149
-rw-r--r--source/blender/blenkernel/intern/subsurf_ccg.c2
-rw-r--r--source/blender/blenkernel/intern/text.c6
-rw-r--r--source/blender/blenkernel/intern/texture.c6
-rw-r--r--source/blender/blenkernel/intern/writeavi.c2
-rw-r--r--source/blender/blenkernel/intern/writeffmpeg.c102
-rw-r--r--source/blender/blenkernel/intern/writeframeserver.c12
-rw-r--r--source/blender/blenloader/intern/readfile.c6
-rw-r--r--source/blender/blenloader/intern/writefile.c9
-rw-r--r--source/blender/editors/animation/anim_deps.c2
-rw-r--r--source/blender/editors/animation/keyframing.c39
-rw-r--r--source/blender/editors/include/ED_view3d.h5
-rw-r--r--source/blender/editors/mesh/editface.c12
-rw-r--r--source/blender/editors/mesh/editmesh.c1
-rw-r--r--source/blender/editors/mesh/editmesh_add.c22
-rw-r--r--source/blender/editors/mesh/editmesh_loop.c4
-rw-r--r--source/blender/editors/mesh/editmesh_mods.c62
-rw-r--r--source/blender/editors/mesh/editmesh_tools.c109
-rw-r--r--source/blender/editors/mesh/meshtools.c7
-rw-r--r--source/blender/editors/object/object_edit.c85
-rw-r--r--source/blender/editors/screen/screen_edit.c8
-rw-r--r--source/blender/editors/screen/screen_intern.h3
-rw-r--r--source/blender/editors/screen/screen_ops.c2
-rw-r--r--source/blender/editors/space_buttons/buttons_scene.c153
-rw-r--r--source/blender/editors/space_node/drawnode.c14
-rw-r--r--source/blender/editors/space_node/node_edit.c10
-rw-r--r--source/blender/editors/space_outliner/outliner.c6
-rw-r--r--source/blender/editors/space_view3d/drawarmature.c24
-rw-r--r--source/blender/editors/space_view3d/drawmesh.c2
-rw-r--r--source/blender/editors/space_view3d/drawobject.c88
-rw-r--r--source/blender/editors/space_view3d/view3d_draw.c14
-rw-r--r--source/blender/editors/space_view3d/view3d_edit.c2
-rw-r--r--source/blender/editors/space_view3d/view3d_header.c2
-rw-r--r--source/blender/editors/space_view3d/view3d_intern.h4
-rw-r--r--source/blender/editors/space_view3d/view3d_select.c12
-rw-r--r--source/blender/editors/space_view3d/view3d_view.c169
-rw-r--r--source/blender/editors/transform/transform.c10
-rw-r--r--source/blender/editors/transform/transform_conversions.c33
-rw-r--r--source/blender/editors/transform/transform_generics.c6
-rw-r--r--source/blender/editors/transform/transform_orientations.c4
-rw-r--r--source/blender/editors/transform/transform_snap.c14
-rw-r--r--source/blender/gpu/intern/gpu_draw.c2
-rw-r--r--source/blender/imbuf/intern/cineon/cineon_dpx.c18
-rw-r--r--source/blender/makesdna/DNA_image_types.h3
-rw-r--r--source/blender/makesdna/DNA_modifier_types.h16
-rw-r--r--source/blender/makesdna/DNA_scene_types.h7
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_composite.c6
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_curves.c7
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_defocus.c2
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_image.c7
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_outputFile.c26
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_texture.c10
-rw-r--r--source/blender/nodes/intern/TEX_nodes/TEX_curves.c9
-rw-r--r--source/blender/nodes/intern/TEX_util.c5
-rw-r--r--source/blender/nodes/intern/TEX_util.h3
-rw-r--r--source/blender/quicktime/apple/quicktime_export.c65
-rw-r--r--source/blender/quicktime/quicktime_export.h4
-rw-r--r--source/blender/radiosity/extern/include/radio.h25
-rw-r--r--source/blender/radiosity/intern/source/raddisplay.c8
-rw-r--r--source/blender/radiosity/intern/source/radio.c52
-rw-r--r--source/blender/radiosity/intern/source/radpostprocess.c11
-rw-r--r--source/blender/radiosity/intern/source/radpreprocess.c14
-rw-r--r--source/blender/radiosity/intern/source/radrender.c10
-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
-rw-r--r--source/blender/windowmanager/intern/wm_files.c72
-rw-r--r--source/blender/windowmanager/intern/wm_init_exit.c4
-rw-r--r--source/blender/windowmanager/intern/wm_subwindow.c43
-rw-r--r--source/blender/windowmanager/wm_event_types.h1
-rw-r--r--source/blender/yafray/intern/export_File.cpp6
-rw-r--r--source/blender/yafray/intern/export_Plugin.cpp6
-rw-r--r--source/blender/yafray/intern/yafray_Render.cpp2
-rw-r--r--source/creator/creator.c89
-rw-r--r--source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp14
-rw-r--r--source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h6
-rw-r--r--source/gameengine/Converter/BL_ArmatureObject.cpp2
-rw-r--r--source/gameengine/GamePlayer/common/GPC_Engine.cpp2
-rw-r--r--source/gameengine/GamePlayer/ghost/GPG_Application.cpp6
154 files changed, 1916 insertions, 1979 deletions
diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h
index dc932af6518..60d7c09c7a3 100644
--- a/source/blender/blenkernel/BKE_DerivedMesh.h
+++ b/source/blender/blenkernel/BKE_DerivedMesh.h
@@ -50,6 +50,7 @@ struct MEdge;
struct MFace;
struct MTFace;
struct Object;
+struct Scene;
struct Mesh;
struct EditMesh;
struct ModifierData;
@@ -418,36 +419,38 @@ void vDM_ColorBand_store(struct ColorBand *coba);
/* Simple function to get me->totvert amount of vertices/normals,
correctly deformed and subsurfered. Needed especially when vertexgroups are involved.
In use now by vertex/weigt paint and particles */
-float *mesh_get_mapped_verts_nors(struct Object *ob);
+float *mesh_get_mapped_verts_nors(struct Scene *scene, struct Object *ob);
/* */
-DerivedMesh *mesh_get_derived_final(struct Object *ob,
+DerivedMesh *mesh_get_derived_final(struct Scene *scene, struct Object *ob,
CustomDataMask dataMask);
-DerivedMesh *mesh_get_derived_deform(struct Object *ob,
+DerivedMesh *mesh_get_derived_deform(struct Scene *scene, struct Object *ob,
CustomDataMask dataMask);
-DerivedMesh *mesh_create_derived_for_modifier(struct Object *ob, struct ModifierData *md);
+DerivedMesh *mesh_create_derived_for_modifier(struct Scene *scene, struct Object *ob, struct ModifierData *md);
-DerivedMesh *mesh_create_derived_render(struct Object *ob,
+DerivedMesh *mesh_create_derived_render(struct Scene *scene, struct Object *ob,
CustomDataMask dataMask);
-DerivedMesh *mesh_create_derived_index_render(struct Object *ob, CustomDataMask dataMask, int index);
+DerivedMesh *mesh_create_derived_index_render(struct Scene *scene, struct Object *ob, CustomDataMask dataMask, int index);
/* same as above but wont use render settings */
-DerivedMesh *mesh_create_derived_view(struct Object *ob,
+DerivedMesh *mesh_create_derived_view(struct Scene *scene, struct Object *ob,
CustomDataMask dataMask);
-DerivedMesh *mesh_create_derived_no_deform(struct Object *ob,
+DerivedMesh *mesh_create_derived_no_deform(struct Scene *scene, struct Object *ob,
float (*vertCos)[3],
CustomDataMask dataMask);
-DerivedMesh *mesh_create_derived_no_deform_render(struct Object *ob,
+DerivedMesh *mesh_create_derived_no_deform_render(struct Scene *scene, struct Object *ob,
float (*vertCos)[3],
CustomDataMask dataMask);
DerivedMesh *editmesh_get_derived_base(struct Object *, struct EditMesh *em);
-DerivedMesh *editmesh_get_derived_cage(struct Object *, struct EditMesh *em, CustomDataMask dataMask);
-DerivedMesh *editmesh_get_derived_cage_and_final(struct Object *, struct EditMesh *em, DerivedMesh **final_r,
+DerivedMesh *editmesh_get_derived_cage(struct Scene *scene, struct Object *,
+ struct EditMesh *em, CustomDataMask dataMask);
+DerivedMesh *editmesh_get_derived_cage_and_final(struct Scene *scene, struct Object *,
+ struct EditMesh *em, DerivedMesh **final_r,
CustomDataMask dataMask);
-void makeDerivedMesh(struct Object *ob, struct EditMesh *em, CustomDataMask dataMask);
+void makeDerivedMesh(struct Scene *scene, struct Object *ob, struct EditMesh *em, CustomDataMask dataMask);
/* returns an array of deform matrices for crazyspace correction, and the
number of modifiers left */
diff --git a/source/blender/blenkernel/BKE_action.h b/source/blender/blenkernel/BKE_action.h
index 574d4154e86..11e2b828436 100644
--- a/source/blender/blenkernel/BKE_action.h
+++ b/source/blender/blenkernel/BKE_action.h
@@ -44,6 +44,7 @@ struct bActionChannel;
struct bPose;
struct bPoseChannel;
struct Object;
+struct Scene;
struct ID;
/* Kernel prototypes */
@@ -80,11 +81,9 @@ void free_action(struct bAction * id);
void make_local_action(struct bAction *act);
/* only for armatures, doing pose actions only too */
-void do_all_pose_actions(struct Object *);
+void do_all_pose_actions(struct Scene *scene, struct Object *);
/* only for objects, doing only 1 channel */
-void do_all_object_actions(struct Object *);
-/* only for Mesh, Curve, Surface, Lattice, doing only Shape channel */
-void do_all_shape_actions(struct Object *);
+void do_all_object_actions(struct Scene *scene, struct Object *);
/**
@@ -134,7 +133,7 @@ void extract_pose_from_action(struct bPose *pose, struct bAction *act, float cti
/**
* Get the effects of the given action using a workob
*/
-void what_does_obaction(struct Object *ob, struct Object *workob, struct bAction *act, float cframe);
+void what_does_obaction(struct Scene *scene, struct Object *ob, struct Object *workob, struct bAction *act, float cframe);
/**
* Iterate through the action channels of the action
diff --git a/source/blender/blenkernel/BKE_armature.h b/source/blender/blenkernel/BKE_armature.h
index 62061238131..6faa6ad5301 100644
--- a/source/blender/blenkernel/BKE_armature.h
+++ b/source/blender/blenkernel/BKE_armature.h
@@ -37,6 +37,7 @@ struct bArmature;
struct bPose;
struct bPoseChannel;
struct bConstraint;
+struct Scene;
struct Object;
struct MDeformVert;
struct Mesh;
@@ -87,7 +88,7 @@ float distfactor_to_bone (float vec[3], float b1[3], float b2[3], float rad1, fl
void where_is_armature (struct bArmature *arm);
void where_is_armature_bone(struct Bone *bone, struct Bone *prevbone);
void armature_rebuild_pose(struct Object *ob, struct bArmature *arm);
-void where_is_pose (struct Object *ob);
+void where_is_pose (struct Scene *scene, struct Object *ob);
/* get_objectspace_bone_matrix has to be removed still */
void get_objectspace_bone_matrix (struct Bone* bone, float M_accumulatedMatrix[][4], int root, int posed);
diff --git a/source/blender/blenkernel/BKE_cloth.h b/source/blender/blenkernel/BKE_cloth.h
index f3c13d3d820..791cf40f8a0 100644
--- a/source/blender/blenkernel/BKE_cloth.h
+++ b/source/blender/blenkernel/BKE_cloth.h
@@ -50,7 +50,7 @@
#include "BKE_collision.h"
struct Object;
-
+struct Scene;
struct MFace;
struct DerivedMesh;
struct ClothModifierData;
@@ -208,7 +208,7 @@ typedef enum
////////////////////////////////////////////////
// needed for implicit.c
-int cloth_bvh_objcollision ( Object *ob, ClothModifierData * clmd, float step, float dt );
+int cloth_bvh_objcollision (Object *ob, ClothModifierData * clmd, float step, float dt );
////////////////////////////////////////////////
@@ -236,7 +236,7 @@ void clmdSetInterruptCallBack ( int ( *f ) ( void ) );
void cloth_free_modifier_extern ( ClothModifierData *clmd );
void cloth_free_modifier ( Object *ob, ClothModifierData *clmd );
void cloth_init ( ClothModifierData *clmd );
-DerivedMesh *clothModifier_do ( ClothModifierData *clmd,Object *ob, DerivedMesh *dm, int useRenderParams, int isFinalCalc );
+DerivedMesh *clothModifier_do ( ClothModifierData *clmd, struct Scene *scene, Object *ob, DerivedMesh *dm, int useRenderParams, int isFinalCalc );
void cloth_update_normals ( ClothVertex *verts, int nVerts, MFace *face, int totface );
diff --git a/source/blender/blenkernel/BKE_collision.h b/source/blender/blenkernel/BKE_collision.h
index c483148e4de..2518c1d6939 100644
--- a/source/blender/blenkernel/BKE_collision.h
+++ b/source/blender/blenkernel/BKE_collision.h
@@ -50,6 +50,7 @@
#include "BLI_kdopbvh.h"
struct Object;
+struct Scene;
struct Cloth;
struct MFace;
struct DerivedMesh;
@@ -138,7 +139,7 @@ void interpolateOnTriangle ( float to[3], float v1[3], float v2[3], float v3[3],
/////////////////////////////////////////////////
// used in effect.c
/////////////////////////////////////////////////
-CollisionModifierData **get_collisionobjects(Object *self, int *numcollobj);
+CollisionModifierData **get_collisionobjects(struct Scene *scene, Object *self, int *numcollobj);
/////////////////////////////////////////////////
diff --git a/source/blender/blenkernel/BKE_constraint.h b/source/blender/blenkernel/BKE_constraint.h
index 2f92fadd5ee..8fe71673a98 100644
--- a/source/blender/blenkernel/BKE_constraint.h
+++ b/source/blender/blenkernel/BKE_constraint.h
@@ -34,6 +34,7 @@ struct bConstraint;
struct bConstraintTarget;
struct ListBase;
struct Object;
+struct Scene;
struct bConstraintChannel;
struct bPoseChannel;
@@ -41,6 +42,7 @@ struct bPoseChannel;
/* special struct for use in constraint evaluation */
typedef struct bConstraintOb {
+ struct Scene *scene; /* for system time, part of deglobalization, code nicer later with local time (ton) */
struct Object *ob; /* if pchan, then armature that it comes from, otherwise constraint owner */
struct bPoseChannel *pchan; /* pose channel that owns the constraints being evaluated */
@@ -128,7 +130,7 @@ void free_constraint_channels(struct ListBase *chanbase);
/* Constraint Evaluation function prototypes */
-struct bConstraintOb *constraints_make_evalob(struct Object *ob, void *subdata, short datatype);
+struct bConstraintOb *constraints_make_evalob(struct Scene *scene, struct Object *ob, void *subdata, short datatype);
void constraints_clear_evalob(struct bConstraintOb *cob);
void constraint_mat_convertspace(struct Object *ob, struct bPoseChannel *pchan, float mat[][4], short from, short to);
diff --git a/source/blender/blenkernel/BKE_curve.h b/source/blender/blenkernel/BKE_curve.h
index 25d6d78c4aa..49e39f287f5 100644
--- a/source/blender/blenkernel/BKE_curve.h
+++ b/source/blender/blenkernel/BKE_curve.h
@@ -34,6 +34,7 @@
struct Curve;
struct ListBase;
struct Object;
+struct Scene;
struct Nurb;
struct ListBase;
struct BezTriple;
@@ -68,9 +69,9 @@ void makeknots( struct Nurb *nu, short uv, short type);
void makeNurbfaces(struct Nurb *nu, float *coord_array, int rowstride);
void makeNurbcurve(struct Nurb *nu, float *coord_array, float *tilt_array, float *radius_array, int resolu);
void forward_diff_bezier(float q0, float q1, float q2, float q3, float *p, int it, int stride);
-float *make_orco_curve( struct Object *ob);
+float *make_orco_curve(struct Scene *scene, struct Object *ob);
float *make_orco_surf( struct Object *ob);
-void makebevelcurve( struct Object *ob, struct ListBase *disp);
+void makebevelcurve(struct Scene *scene, struct Object *ob, struct ListBase *disp);
void makeBevelList( struct Object *ob);
diff --git a/source/blender/blenkernel/BKE_displist.h b/source/blender/blenkernel/BKE_displist.h
index 64a451f3b19..c3555c9dd8a 100644
--- a/source/blender/blenkernel/BKE_displist.h
+++ b/source/blender/blenkernel/BKE_displist.h
@@ -54,6 +54,7 @@
/* prototypes */
struct Base;
+struct Scene;
struct Object;
struct Curve;
struct ListBase;
@@ -86,20 +87,20 @@ extern void count_displist(struct ListBase *lb, int *totvert, int *totface);
extern void freedisplist(struct ListBase *lb);
extern int displist_has_faces(struct ListBase *lb);
-extern void makeDispListSurf(struct Object *ob, struct ListBase *dispbase, int forRender);
-extern void makeDispListCurveTypes(struct Object *ob, int forOrco);
-extern void makeDispListMBall(struct Object *ob);
-extern void shadeDispList(struct Base *base);
-extern void shadeMeshMCol(struct Object *ob, struct Mesh *me);
+extern void makeDispListSurf(struct Scene *scene, struct Object *ob, struct ListBase *dispbase, int forRender);
+extern void makeDispListCurveTypes(struct Scene *scene, struct Object *ob, int forOrco);
+extern void makeDispListMBall(struct Scene *scene, struct Object *ob);
+extern void shadeDispList(struct Scene *scene, struct Base *base);
+extern void shadeMeshMCol(struct Scene *scene, struct Object *ob, struct Mesh *me);
int surfindex_displist(DispList *dl, int a, int *b, int *p1, int *p2, int *p3, int *p4);
void imagestodisplist(void);
-void reshadeall_displist(void);
+void reshadeall_displist(struct Scene *scene);
void filldisplist(struct ListBase *dispbase, struct ListBase *to);
void fastshade_free_render(void);
-float calc_taper(struct Object *taperobj, int cur, int tot);
+float calc_taper(struct Scene *scene, struct Object *taperobj, int cur, int tot);
#endif
diff --git a/source/blender/blenkernel/BKE_effect.h b/source/blender/blenkernel/BKE_effect.h
index 6475f7a71ac..fd065978800 100644
--- a/source/blender/blenkernel/BKE_effect.h
+++ b/source/blender/blenkernel/BKE_effect.h
@@ -33,6 +33,8 @@
#include "DNA_object_types.h"
+struct Object;
+struct Scene;
struct Effect;
struct ListBase;
struct Particle;
@@ -61,12 +63,16 @@ void deselectall_eff(struct Object *ob);
#define PE_WIND_AS_SPEED 0x00000001
struct PartEff *give_parteff(struct Object *ob);
-struct ListBase *pdInitEffectors(struct Object *obsrc, struct Group *group);
+struct ListBase *pdInitEffectors(struct Scene *scene, struct Object *obsrc, struct Group *group);
void pdEndEffectors(struct ListBase *lb);
-void pdDoEffectors(struct ListBase *lb, float *opco, float *force, float *speed, float cur_time, float loc_time, unsigned int flags);
+void pdDoEffectors(struct Scene *scene, struct ListBase *lb, float *opco, float *force,
+ float *speed, float cur_time, float loc_time, unsigned int flags);
/* required for particle_system.c */
-void do_physical_effector(Object *ob, float *opco, short type, float force_val, float distance, float falloff, float size, float damp, float *eff_velocity, float *vec_to_part, float *velocity, float *field, int planar, struct RNG *rng, float noise_factor, float charge, float pa_size);
+void do_physical_effector(struct Scene *scene, struct Object *ob, float *opco, short type, float force_val, float distance,
+ float falloff, float size, float damp, float *eff_velocity, float *vec_to_part,
+ float *velocity, float *field, int planar, struct RNG *rng, float noise_factor,
+ float charge, float pa_size);
float effector_falloff(struct PartDeflect *pd, float *eff_velocity, float *vec_to_part);
diff --git a/source/blender/blenkernel/BKE_exotic.h b/source/blender/blenkernel/BKE_exotic.h
index 3814518a9e7..11dc1f41109 100644
--- a/source/blender/blenkernel/BKE_exotic.h
+++ b/source/blender/blenkernel/BKE_exotic.h
@@ -32,6 +32,7 @@
#define BKE_EXOTIC_H
struct Mesh;
+struct Scene;
void mcol_to_rgba(unsigned int col, float *r, float *g, float *b, float *a);
unsigned int *mcol_to_vcol(struct Mesh *me); // used in py_main.c
@@ -42,12 +43,12 @@ unsigned int *mcol_to_vcol(struct Mesh *me); // used in py_main.c
* @retval 1 The file was read succesfully.
* @attention Used in filesel.c
*/
-int BKE_read_exotic(char *name);
+int BKE_read_exotic(struct Scene *scene, char *name);
-void write_dxf(char *str);
-void write_vrml(char *str);
-void write_videoscape(char *str);
-void write_stl(char *str);
+void write_dxf(struct Scene *scene, char *str);
+void write_vrml(struct Scene *scene, char *str);
+void write_videoscape(struct Scene *scene, char *str);
+void write_stl(struct Scene *scene, char *str);
#endif
diff --git a/source/blender/blenkernel/BKE_fluidsim.h b/source/blender/blenkernel/BKE_fluidsim.h
index 4aac5eafa00..93358fcf7e8 100644
--- a/source/blender/blenkernel/BKE_fluidsim.h
+++ b/source/blender/blenkernel/BKE_fluidsim.h
@@ -37,7 +37,7 @@
/* old interface */
FluidsimSettings *fluidsimSettingsNew(Object *srcob);
-void initElbeemMesh(Object *ob, int *numVertices, float **vertices, int *numTriangles, int **triangles, int useGlobalCoords, int modifierIndex);
+void initElbeemMesh(Scene *scene, Object *ob, int *numVertices, float **vertices, int *numTriangles, int **triangles, int useGlobalCoords, int modifierIndex);
/* new fluid-modifier interface */
@@ -46,7 +46,7 @@ void fluidsim_free(FluidsimModifierData *fluidmd);
DerivedMesh *fluidsim_read_cache(Object *ob, DerivedMesh *orgdm, FluidsimModifierData *fluidmd, int framenr, int useRenderParams);
void fluidsim_read_vel_cache(FluidsimModifierData *fluidmd, DerivedMesh *dm, char *filename);
-DerivedMesh *fluidsimModifier_do(FluidsimModifierData *fluidmd, Object *ob, DerivedMesh *dm, int useRenderParams, int isFinalCalc);
+DerivedMesh *fluidsimModifier_do(FluidsimModifierData *fluidmd, Scene *scene, Object *ob, DerivedMesh *dm, int useRenderParams, int isFinalCalc);
// get bounding box of mesh
void fluid_get_bb(MVert *mvert, int totvert, float obmat[][4],
diff --git a/source/blender/blenkernel/BKE_font.h b/source/blender/blenkernel/BKE_font.h
index caeddf60638..3445e5b1ce2 100644
--- a/source/blender/blenkernel/BKE_font.h
+++ b/source/blender/blenkernel/BKE_font.h
@@ -38,6 +38,7 @@ extern "C" {
#include <wchar.h>
struct VFont;
+struct Scene;
struct Object;
struct Curve;
struct objfnt;
@@ -63,7 +64,7 @@ void free_ttfont(void);
struct VFont *load_vfont(char *name);
struct TmpFont *vfont_find_tmpfont(struct VFont *vfont);
-struct chartrans *text_to_curve(struct Object *ob, int mode);
+struct chartrans *text_to_curve(struct Scene *scene, struct Object *ob, int mode);
int style_to_sel(int style, int toggle);
int mat_to_sel(void);
diff --git a/source/blender/blenkernel/BKE_global.h b/source/blender/blenkernel/BKE_global.h
index ea0c021652a..99ce091621e 100644
--- a/source/blender/blenkernel/BKE_global.h
+++ b/source/blender/blenkernel/BKE_global.h
@@ -42,21 +42,7 @@ extern "C" {
#endif
/* forwards */
-struct View3D;
-struct View2D;
-struct SpaceIpo;
-struct SpaceButs;
-struct SpaceImage;
-struct SpaceOops;
-struct SpaceText;
-struct SpaceSound;
-struct SpaceAction;
-struct SpaceNla;
struct Main;
-struct Scene;
-struct bScreen;
-struct ScrArea;
-struct ARegion;
struct Object;
struct bSoundListener;
struct BMF_Font;
@@ -66,8 +52,6 @@ typedef struct Global {
/* active pointers */
struct Main *main;
- struct Scene *scene; /* denk aan file.c */
- struct bScreen *curscreen;
char editModeTitleExtra[64];
/* fonts, allocated global data */
@@ -103,9 +87,6 @@ typedef struct Global {
/* Frank's variables */
int save_over;
- /* Reevan's __NLA variables */
- struct ListBase edbo; /* Armature Editmode bones */
-
/* Rob's variables (keep here for WM recode) */
int have_quicktime;
int ui_international;
diff --git a/source/blender/blenkernel/BKE_group.h b/source/blender/blenkernel/BKE_group.h
index 764bdf5d910..35084aabadf 100644
--- a/source/blender/blenkernel/BKE_group.h
+++ b/source/blender/blenkernel/BKE_group.h
@@ -35,6 +35,7 @@ struct Group;
struct GroupObject;
struct Object;
struct bAction;
+struct Scene;
void free_group_object(struct GroupObject *go);
void free_group(struct Group *group);
@@ -47,7 +48,7 @@ int object_in_group(struct Object *ob, struct Group *group);
int group_is_animated(struct Object *parent, struct Group *group);
void group_tag_recalc(struct Group *group);
-void group_handle_recalc_and_update(struct Object *parent, struct Group *group);
+void group_handle_recalc_and_update(struct Scene *scene, struct Object *parent, struct Group *group);
struct Object *group_get_member_with_action(struct Group *group, struct bAction *act);
void group_relink_nla_objects(struct Object *ob);
diff --git a/source/blender/blenkernel/BKE_image.h b/source/blender/blenkernel/BKE_image.h
index 8dac282eedf..b0cf58d8216 100644
--- a/source/blender/blenkernel/BKE_image.h
+++ b/source/blender/blenkernel/BKE_image.h
@@ -39,15 +39,16 @@ struct Image;
struct ImBuf;
struct Tex;
struct anim;
+struct Scene;
/* call from library */
void free_image(struct Image *me);
-void BKE_stamp_info(struct ImBuf *ibuf);
-void BKE_stamp_buf(unsigned char *rect, float *rectf, int width, int height, int channels);
-int BKE_write_ibuf(struct ImBuf *ibuf, char *name, int imtype, int subimtype, int quality);
-void BKE_makepicstring(char *string, char *base, int frame, int imtype);
-void BKE_add_image_extension(char *string, int imtype);
+void BKE_stamp_info(struct Scene *scene, struct ImBuf *ibuf);
+void BKE_stamp_buf(struct Scene *scene, unsigned char *rect, float *rectf, int width, int height, int channels);
+int BKE_write_ibuf(struct Scene *scene, struct ImBuf *ibuf, char *name, int imtype, int subimtype, int quality);
+void BKE_makepicstring(struct Scene *scene, char *string, char *base, int frame, int imtype);
+void BKE_add_image_extension(struct Scene *scene, char *string, int imtype);
int BKE_ftype_to_imtype(int ftype);
int BKE_imtype_to_ftype(int imtype);
int BKE_imtype_is_movie(int imtype);
@@ -107,8 +108,8 @@ struct RenderResult;
/* always call to make signals work */
struct ImBuf *BKE_image_get_ibuf(struct Image *ima, struct ImageUser *iuser);
-/* returns existing Image when filename/type is same */
-struct Image *BKE_add_image_file(const char *name);
+/* returns existing Image when filename/type is same (frame optional) */
+struct Image *BKE_add_image_file(const char *name, int frame);
/* adds image, adds ibuf, generates color or pattern */
struct Image *BKE_add_image_size(int width, int height, char *name, int floatbuf, short uvtestgrid, float color[4]);
@@ -132,7 +133,7 @@ void BKE_image_user_new_image(struct Image *ima, struct ImageUser *iuser);
struct RenderPass *BKE_image_multilayer_index(struct RenderResult *rr, struct ImageUser *iuser);
/* for multilayer images as well as for render-viewer */
-struct RenderResult *BKE_image_get_renderresult(struct Image *ima);
+struct RenderResult *BKE_image_get_renderresult(struct Scene *scene, struct Image *ima);
/* goes over all textures that use images */
void BKE_image_free_all_textures(void);
diff --git a/source/blender/blenkernel/BKE_ipo.h b/source/blender/blenkernel/BKE_ipo.h
index f0c530808a7..21e80708113 100644
--- a/source/blender/blenkernel/BKE_ipo.h
+++ b/source/blender/blenkernel/BKE_ipo.h
@@ -45,6 +45,7 @@ struct Ipo;
struct IpoCurve;
struct MTex;
struct Material;
+struct Scene;
struct Object;
struct Sequence;
struct ListBase;
@@ -56,16 +57,16 @@ struct rctf;
/* ------------ Time Management ------------ */
-float frame_to_float(int cfra);
+float frame_to_float(struct Scene *scene, int cfra);
/* ------------ IPO Management ---------- */
void free_ipo_curve(struct IpoCurve *icu);
void free_ipo(struct Ipo *ipo);
-void ipo_default_v2d_cur(int blocktype, struct rctf *cur);
+void ipo_default_v2d_cur(struct Scene *scene, int blocktype, struct rctf *cur);
-struct Ipo *add_ipo(char *name, int idcode);
+struct Ipo *add_ipo(struct Scene *scene, char *name, int idcode);
struct Ipo *copy_ipo(struct Ipo *ipo);
void ipo_idnew(struct Ipo *ipo);
@@ -126,14 +127,14 @@ void set_icu_vars(struct IpoCurve *icu);
void execute_ipo(struct ID *id, struct Ipo *ipo);
void execute_action_ipo(struct bActionChannel *achan, struct bPoseChannel *pchan);
-void do_ipo_nocalc(struct Ipo *ipo);
-void do_ipo(struct Ipo *ipo);
-void do_mat_ipo(struct Material *ma);
-void do_ob_ipo(struct Object *ob);
-void do_seq_ipo(struct Sequence *seq, int cfra);
+void do_ipo_nocalc(struct Scene *scene, struct Ipo *ipo);
+void do_ipo(struct Scene *scene, struct Ipo *ipo);
+void do_mat_ipo(struct Scene *scene, struct Material *ma);
+void do_ob_ipo(struct Scene *scene, struct Object *ob);
+void do_seq_ipo(struct Scene *scene, struct Sequence *seq, int cfra);
void do_ob_ipodrivers(struct Object *ob, struct Ipo *ipo, float ctime);
-void do_all_data_ipos(void);
+void do_all_data_ipos(struct Scene *scene);
short calc_ipo_spec(struct Ipo *ipo, int adrcode, float *ctime);
void clear_delta_obipo(struct Ipo *ipo);
diff --git a/source/blender/blenkernel/BKE_key.h b/source/blender/blenkernel/BKE_key.h
index 0557120a3aa..e2f9dff6226 100644
--- a/source/blender/blenkernel/BKE_key.h
+++ b/source/blender/blenkernel/BKE_key.h
@@ -37,6 +37,7 @@ struct ID;
struct ListBase;
struct Curve;
struct Object;
+struct Scene;
struct Lattice;
struct Mesh;
@@ -57,7 +58,7 @@ void set_afgeleide_four_ipo(float d, float *data, int type);
/* only exported to curve.c! */
void cp_cu_key(struct Curve *cu, struct KeyBlock *kb, int start, int end);
-int do_ob_key(struct Object *ob);
+int do_ob_key(struct Scene *scene, struct Object *ob);
struct Key *ob_get_key(struct Object *ob);
struct KeyBlock *ob_get_keyblock(struct Object *ob);
diff --git a/source/blender/blenkernel/BKE_lattice.h b/source/blender/blenkernel/BKE_lattice.h
index dc7c9dcd5e5..181c0cec45a 100644
--- a/source/blender/blenkernel/BKE_lattice.h
+++ b/source/blender/blenkernel/BKE_lattice.h
@@ -33,6 +33,7 @@
struct Lattice;
struct Object;
+struct Scene;
struct DerivedMesh;
struct BPoint;
struct MDeformVert;
@@ -51,10 +52,11 @@ void calc_latt_deform(float *co, float weight);
void end_latt_deform(void);
int object_deform_mball(struct Object *ob);
void outside_lattice(struct Lattice *lt);
-void curve_deform_verts(struct Object *cuOb, struct Object *target,
+
+void curve_deform_verts(struct Scene *scene, struct Object *cuOb, struct Object *target,
struct DerivedMesh *dm, float (*vertexCos)[3],
int numVerts, char *vgroup, short defaxis);
-void curve_deform_vector(struct Object *cuOb, struct Object *target,
+void curve_deform_vector(struct Scene *scene, struct Object *cuOb, struct Object *target,
float *orco, float *vec, float mat[][3], int no_rot_axis);
void lattice_deform_verts(struct Object *laOb, struct Object *target,
@@ -64,9 +66,10 @@ void armature_deform_verts(struct Object *armOb, struct Object *target,
struct DerivedMesh *dm, float (*vertexCos)[3],
float (*defMats)[3][3], int numVerts, int deformflag,
float (*prevCos)[3], const char *defgrp_name);
+
float (*lattice_getVertexCos(struct Object *ob, int *numVerts_r))[3];
void lattice_applyVertexCos(struct Object *ob, float (*vertexCos)[3]);
-void lattice_calc_modifiers(struct Object *ob);
+void lattice_calc_modifiers(struct Scene *scene, struct Object *ob);
struct MDeformVert* lattice_get_deform_verts(struct Object *lattice);
diff --git a/source/blender/blenkernel/BKE_material.h b/source/blender/blenkernel/BKE_material.h
index efb64fbf0a3..38a1d9b13b7 100644
--- a/source/blender/blenkernel/BKE_material.h
+++ b/source/blender/blenkernel/BKE_material.h
@@ -65,7 +65,7 @@ void end_render_materials(void);
int material_in_material(struct Material *parmat, struct Material *mat);
void automatname(struct Material *);
-void delete_material_index(void);
+void delete_material_index(struct Object *ob);
void ramp_blend(int type, float *r, float *g, float *b, float fac, float *col);
diff --git a/source/blender/blenkernel/BKE_mball.h b/source/blender/blenkernel/BKE_mball.h
index 0dfc8ae6b28..ba78aa0682d 100644
--- a/source/blender/blenkernel/BKE_mball.h
+++ b/source/blender/blenkernel/BKE_mball.h
@@ -33,6 +33,7 @@
struct MetaBall;
struct Object;
+struct Scene;
struct MetaElem;
typedef struct point { /* a three-dimensional point */
@@ -154,7 +155,7 @@ void subdivide_metaball_octal_node(octal_node *node, float size_x, float size_y,
void free_metaball_octal_node(octal_node *node);
void init_metaball_octal_tree(int depth);
void polygonize(PROCESS *mbproc, struct MetaBall *mb);
-float init_meta(struct Object *ob);
+float init_meta(struct Scene *scene, struct Object *ob);
void unlink_mball(struct MetaBall *mb);
void free_mball(struct MetaBall *mb);
@@ -163,9 +164,9 @@ struct MetaBall *copy_mball(struct MetaBall *mb);
void make_local_mball(struct MetaBall *mb);
void tex_space_mball(struct Object *ob);
float *make_orco_mball(struct Object *ob);
-struct Object *find_basis_mball( struct Object *ob);
+struct Object *find_basis_mball(struct Scene *scene, struct Object *ob);
int is_basis_mball(struct Object *ob);
-void metaball_polygonize(struct Object *ob);
+void metaball_polygonize(struct Scene *scene, struct Object *ob);
void calc_mballco(struct MetaElem *ml, float *vec);
float densfunc(struct MetaElem *ball, float x, float y, float z);
float metaball(float x, float y, float z);
diff --git a/source/blender/blenkernel/BKE_modifier.h b/source/blender/blenkernel/BKE_modifier.h
index a41716ed1ff..d486a5dc665 100644
--- a/source/blender/blenkernel/BKE_modifier.h
+++ b/source/blender/blenkernel/BKE_modifier.h
@@ -38,6 +38,7 @@ struct DerivedMesh;
struct DagForest;
struct DagNode;
struct Object;
+struct Scene;
struct ListBase;
struct LinkNode;
struct bArmature;
@@ -226,7 +227,7 @@ typedef struct ModifierTypeInfo {
*
* This function is optional.
*/
- void (*updateDepgraph)(struct ModifierData *md, struct DagForest *forest,
+ void (*updateDepgraph)(struct ModifierData *md, struct DagForest *forest, struct Scene *scene,
struct Object *ob, struct DagNode *obNode);
/* Should return true if the modifier needs to be recalculated on time
diff --git a/source/blender/blenkernel/BKE_multires.h b/source/blender/blenkernel/BKE_multires.h
index df565ddc7fe..64221897680 100644
--- a/source/blender/blenkernel/BKE_multires.h
+++ b/source/blender/blenkernel/BKE_multires.h
@@ -50,8 +50,8 @@ struct Multires *multires_copy(struct Multires *orig);
void multires_create(struct Object *ob, struct Mesh *me);
/* CustomData */
-void multires_delete_layer(struct Mesh *me, struct CustomData *cd, const int type, int n);
-void multires_add_layer(struct Mesh *me, struct CustomData *cd, const int type, const int n);
+void multires_delete_layer(struct Object *ob, struct CustomData *cd, const int type, int n);
+void multires_add_layer(struct Object *ob, struct CustomData *cd, const int type, const int n);
void multires_del_lower_customdata(struct Multires *mr, struct MultiresLevel *cr_lvl);
void multires_to_mcol(struct MultiresColFace *f, MCol mcol[4]);
/* After adding or removing vcolor layers, run this */
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 1c5b6b124b2..669ee11926b 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -376,7 +376,7 @@ struct CompBuf;
void ntreeCompositTagRender(struct Scene *sce);
int ntreeCompositTagAnimated(struct bNodeTree *ntree);
void ntreeCompositTagGenerators(struct bNodeTree *ntree);
-void ntreeCompositForceHidden(struct bNodeTree *ntree);
+void ntreeCompositForceHidden(struct bNodeTree *ntree, struct Scene *scene);
void free_compbuf(struct CompBuf *cbuf); /* internal...*/
@@ -413,7 +413,7 @@ extern struct ListBase node_all_textures;
/* API */
int ntreeTexTagAnimated(struct bNodeTree *ntree);
void ntreeTexUpdatePreviews( struct bNodeTree* nodetree );
-void ntreeTexExecTree(struct bNodeTree *ntree, struct TexResult *target, float *coord, char do_preview, short thread, struct Tex *tex, short which_output);
+void ntreeTexExecTree(struct bNodeTree *ntree, struct TexResult *target, float *coord, char do_preview, short thread, struct Tex *tex, short which_output, int cfra);
void ntreeTexCheckCyclics(struct bNodeTree *ntree);
void ntreeTexAssignIndex(struct bNodeTree *ntree, struct bNode *node);
char* ntreeTexOutputMenu(struct bNodeTree *ntree);
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index 6d46aad5296..38eee2e4db1 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -36,6 +36,7 @@ extern "C" {
#endif
struct Base;
+struct Scene;
struct Object;
struct Camera;
struct BoundBox;
@@ -46,10 +47,10 @@ struct Group;
struct bAction;
void clear_workob(struct Object *workob);
-void what_does_parent(struct Object *ob, struct Object *workob);
+void what_does_parent(struct Scene *scene, struct Object *ob, struct Object *workob);
-void copy_baseflags(void);
-void copy_objectflags(void);
+void copy_baseflags(struct Scene *scene);
+void copy_objectflags(struct Scene *scene);
struct SoftBody *copy_softbody(struct SoftBody *sb);
struct BulletSoftBody *copy_bulletsoftbody(struct BulletSoftBody *sb);
void copy_object_particlesystems(struct Object *obn, struct Object *ob);
@@ -57,7 +58,7 @@ void copy_object_softbody(struct Object *obn, struct Object *ob);
void object_free_particlesystems(struct Object *ob);
void object_free_softbody(struct Object *ob);
void object_free_bulletsoftbody(struct Object *ob);
-void update_base_layer(struct Object *ob);
+void update_base_layer(struct Scene *scene, struct Object *ob);
void free_object(struct Object *ob);
void object_free_display(struct Object *ob);
@@ -65,7 +66,7 @@ void object_free_modifiers(struct Object *ob);
void object_make_proxy(struct Object *ob, struct Object *target, struct Object *gob);
-void unlink_object(struct Object *ob);
+void unlink_object(struct Scene *scene, struct Object *ob);
int exist_object(struct Object *obtest);
void *add_camera(char *name);
struct Camera *copy_camera(struct Camera *cam);
@@ -79,8 +80,8 @@ void free_lamp(struct Lamp *la);
void *add_wave(void);
struct Object *add_only_object(int type, char *name);
-struct Object *add_object(int type);
-void base_init_from_view3d(struct Base *base, struct View3D *v3d);
+struct Object *add_object(struct Scene *scene, int type);
+void base_init_from_view3d(struct Base *base, struct View3D *v3d, struct Scene *scene);
struct Object *copy_object(struct Object *ob);
void expand_local_object(struct Object *ob);
@@ -89,7 +90,7 @@ void set_mblur_offs(float blur);
void set_field_offs(float field);
void disable_speed_curve(int val);
-float bsystem_time(struct Object *ob, float cfra, float ofs);
+float bsystem_time(struct Scene *scene, struct Object *ob, float cfra, float ofs);
void object_scale_to_mat3(struct Object *ob, float mat[][3]);
void object_rot_to_mat3(struct Object *ob, float mat[][3]);
void object_to_mat3(struct Object *ob, float mat[][3]);
@@ -102,20 +103,20 @@ int during_script(void);
void disable_where_scriptlink(short on);
int during_scriptlink(void);
-void where_is_object_time(struct Object *ob, float ctime);
-void where_is_object(struct Object *ob);
-void where_is_object_simul(struct Object *ob);
+void where_is_object_time(struct Scene *scene, struct Object *ob, float ctime);
+void where_is_object(struct Scene *scene, struct Object *ob);
+void where_is_object_simul(struct Scene *scene, struct Object *ob);
struct BoundBox *unit_boundbox(void);
void boundbox_set_from_min_max(struct BoundBox *bb, float min[3], float max[3]);
struct BoundBox *object_get_boundbox(struct Object *ob);
void object_boundbox_flag(struct Object *ob, int flag, int set);
void minmax_object(struct Object *ob, float *min, float *max);
-void minmax_object_duplis(struct Object *ob, float *min, float *max);
+void minmax_object_duplis(struct Scene *scene, struct Object *ob, float *min, float *max);
void solve_tracking (struct Object *ob, float targetmat[][4]);
int ray_hit_boundbox(struct BoundBox *bb, float ray_start[3], float ray_normal[3]);
-void object_handle_update(struct Object *ob);
+void object_handle_update(struct Scene *scene, struct Object *ob);
float give_timeoffset(struct Object *ob);
int give_obdata_texspace(struct Object *ob, int **texflag, float **loc, float **size, float **rot);
diff --git a/source/blender/blenkernel/BKE_particle.h b/source/blender/blenkernel/BKE_particle.h
index caba63ef8ce..40120e2b61a 100644
--- a/source/blender/blenkernel/BKE_particle.h
+++ b/source/blender/blenkernel/BKE_particle.h
@@ -44,6 +44,7 @@ struct HairKey;
struct Main;
struct Group;
struct Object;
+struct Scene;
struct DerivedMesh;
struct ModifierData;
struct MTFace;
@@ -201,11 +202,11 @@ short psys_get_current_num(struct Object *ob);
struct ParticleData *psys_get_selected_particle(struct ParticleSystem *psys, int *index);
struct ParticleKey *psys_get_selected_key(struct ParticleSystem *psys, int pa_index, int *key_index);
void psys_change_act(void *ob_v, void *act_v);
-struct Object *psys_get_lattice(struct Object *ob, struct ParticleSystem *psys);
+struct Object *psys_get_lattice(struct Scene *scene, struct Object *ob, struct ParticleSystem *psys);
void psys_disable_all(struct Object *ob);
void psys_enable_all(struct Object *ob);
int psys_ob_has_hair(struct Object *ob);
-int psys_in_edit_mode(struct ParticleSystem *psys);
+int psys_in_edit_mode(struct Scene *scene, struct ParticleSystem *psys);
int psys_check_enabled(struct Object *ob, struct ParticleSystem *psys);
void psys_free_settings(struct ParticleSettings *part);
@@ -231,30 +232,30 @@ struct ParticleSystemModifierData *psys_get_modifier(struct Object *ob, struct P
struct ParticleSettings *psys_new_settings(char *name, struct Main *main);
struct ParticleSettings *psys_copy_settings(struct ParticleSettings *part);
-void psys_flush_settings(struct ParticleSettings *part, int event, int hair_recalc);
+void psys_flush_settings(struct Scene *scene, struct ParticleSettings *part, int event, int hair_recalc);
void make_local_particlesettings(struct ParticleSettings *part);
-struct LinkNode *psys_using_settings(struct ParticleSettings *part, int flush_update);
+struct LinkNode *psys_using_settings(struct Scene *scene, struct ParticleSettings *part, int flush_update);
void psys_changed_type(struct ParticleSystem *psys);
void psys_reset(struct ParticleSystem *psys, int mode);
void psys_find_parents(struct Object *ob, struct ParticleSystemModifierData *psmd, struct ParticleSystem *psys);
-void psys_cache_paths(struct Object *ob, struct ParticleSystem *psys, float cfra, int editupdate);
-void psys_cache_child_paths(struct Object *ob, struct ParticleSystem *psys, float cfra, int editupdate);
+void psys_cache_paths(struct Scene *scene, struct Object *ob, struct ParticleSystem *psys, float cfra, int editupdate);
+void psys_cache_child_paths(struct Scene *scene, struct Object *ob, struct ParticleSystem *psys, float cfra, int editupdate);
int do_guide(struct ParticleKey *state, int pa_num, float time, struct ListBase *lb);
float psys_get_size(struct Object *ob, struct Material *ma, struct ParticleSystemModifierData *psmd, struct IpoCurve *icu_size, struct ParticleSystem *psys, struct ParticleSettings *part, struct ParticleData *pa, float *vg_size);
float psys_get_timestep(struct ParticleSettings *part);
float psys_get_child_time(struct ParticleSystem *psys, struct ChildParticle *cpa, float cfra);
float psys_get_child_size(struct ParticleSystem *psys, struct ChildParticle *cpa, float cfra, float *pa_time);
-void psys_get_particle_on_path(struct Object *ob, struct ParticleSystem *psys, int pa_num, struct ParticleKey *state, int vel);
-int psys_get_particle_state(struct Object *ob, struct ParticleSystem *psys, int p, struct ParticleKey *state, int always);
+void psys_get_particle_on_path(struct Scene *scene, struct Object *ob, struct ParticleSystem *psys, int pa_num, struct ParticleKey *state, int vel);
+int psys_get_particle_state(struct Scene *scene, struct Object *ob, struct ParticleSystem *psys, int p, struct ParticleKey *state, int always);
void psys_get_dupli_texture(struct Object *ob, struct ParticleSettings *part, struct ParticleSystemModifierData *psmd, struct ParticleData *pa, struct ChildParticle *cpa, float *uv, float *orco);
void psys_get_dupli_path_transform(struct Object *ob, struct ParticleSystem *psys, struct ParticleSystemModifierData *psmd, struct ParticleData *pa, struct ChildParticle *cpa, struct ParticleCacheKey *cache, float mat[][4], float *scale);
-ParticleThread *psys_threads_create(struct Object *ob, struct ParticleSystem *psys);
-int psys_threads_init_distribution(ParticleThread *threads, struct DerivedMesh *dm, int from);
-int psys_threads_init_path(ParticleThread *threads, float cfra, int editupdate);
+ParticleThread *psys_threads_create(struct Scene *scene, struct Object *ob, struct ParticleSystem *psys);
+int psys_threads_init_distribution(ParticleThread *threads, struct Scene *scene, struct DerivedMesh *dm, int from);
+int psys_threads_init_path(ParticleThread *threads, struct Scene *scene, float cfra, int editupdate);
void psys_threads_free(ParticleThread *threads);
void psys_thread_distribute_particle(ParticleThread *thread, struct ParticleData *pa, struct ChildParticle *cpa, int p);
@@ -264,10 +265,10 @@ void psys_thread_create_path(ParticleThread *thread, struct ChildParticle *cpa,
int psys_count_keyed_targets(struct Object *ob, struct ParticleSystem *psys);
void psys_get_reactor_target(struct Object *ob, struct ParticleSystem *psys, struct Object **target_ob, struct ParticleSystem **target_psys);
-void psys_init_effectors(struct Object *obsrc, struct Group *group, struct ParticleSystem *psys);
+void psys_init_effectors(struct Scene *scene, struct Object *obsrc, struct Group *group, struct ParticleSystem *psys);
void psys_end_effectors(struct ParticleSystem *psys);
-void particle_system_update(struct Object *ob, struct ParticleSystem *psys);
+void particle_system_update(struct Scene *scene, struct Object *ob, struct ParticleSystem *psys);
/* ----------- functions needed only inside particlesystem ------------ */
/* particle.c */
@@ -288,7 +289,7 @@ float psys_particle_value_from_verts(struct DerivedMesh *dm, short from, struct
float psys_interpolate_value_from_verts(struct DerivedMesh *dm, short from, int index, float *fw, float *values);
void psys_get_from_key(struct ParticleKey *key, float *loc, float *vel, float *rot, float *time);
-int psys_intersect_dm(struct Object *ob, struct DerivedMesh *dm, float *vert_cos, float *co1, float* co2, float *min_d, int *min_face, float *min_uv, float *face_minmax, float *pa_minmax, float radius, float *ipoint);
+int psys_intersect_dm(struct Scene *scene, struct Object *ob, struct DerivedMesh *dm, float *vert_cos, float *co1, float* co2, float *min_d, int *min_face, float *min_uv, float *face_minmax, float *pa_minmax, float radius, float *ipoint);
void psys_particle_on_dm(struct DerivedMesh *dm, int from, int index, int index_dmcache, float *fw, float foffset, float *vec, float *nor, float *utan, float *vtan, float *orco, float *ornor);
/* particle_system.c */
diff --git a/source/blender/blenkernel/BKE_pointcache.h b/source/blender/blenkernel/BKE_pointcache.h
index 5bc467465a8..cce085f3077 100644
--- a/source/blender/blenkernel/BKE_pointcache.h
+++ b/source/blender/blenkernel/BKE_pointcache.h
@@ -58,6 +58,7 @@
/* Structs */
struct Object;
+struct Scene *scene;
struct SoftBody;
struct ParticleSystem;
struct ClothModifierData;
@@ -93,7 +94,7 @@ void BKE_ptcache_remove(void);
void BKE_ptcache_id_clear(PTCacheID *id, int mode, int cfra);
int BKE_ptcache_id_exist(PTCacheID *id, int cfra);
int BKE_ptcache_id_reset(PTCacheID *id, int mode);
-void BKE_ptcache_id_time(PTCacheID *pid, float cfra, int *startframe, int *endframe, float *timescale);
+void BKE_ptcache_id_time(PTCacheID *pid, struct Scene *scene, float cfra, int *startframe, int *endframe, float *timescale);
int BKE_ptcache_object_reset(struct Object *ob, int mode);
/* File reading/writing */
@@ -103,7 +104,7 @@ int BKE_ptcache_file_read_floats(PTCacheFile *pf, float *f, int tot);
int BKE_ptcache_file_write_floats(PTCacheFile *pf, float *f, int tot);
/* Continue physics */
-void BKE_ptcache_set_continue_physics(int enable);
+void BKE_ptcache_set_continue_physics(struct Scene *scene, int enable);
int BKE_ptcache_get_continue_physics(void);
/* Point Cache */
diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h
index 4f951129842..2c58c5d6d8c 100644
--- a/source/blender/blenkernel/BKE_scene.h
+++ b/source/blender/blenkernel/BKE_scene.h
@@ -54,7 +54,7 @@ struct Base *object_in_scene(struct Object *ob, struct Scene *sce);
void set_scene_bg(struct Scene *sce);
void set_scene_name(char *name);
-int next_object(int val, struct Base **base, struct Object **ob);
+int next_object(struct Scene *scene, int val, struct Base **base, struct Object **ob);
struct Object *scene_find_camera(struct Scene *sc);
struct Base *scene_add_base(struct Scene *sce, struct Object *ob);
diff --git a/source/blender/blenkernel/BKE_shrinkwrap.h b/source/blender/blenkernel/BKE_shrinkwrap.h
index eed22ff9d8e..103b78f0d6e 100644
--- a/source/blender/blenkernel/BKE_shrinkwrap.h
+++ b/source/blender/blenkernel/BKE_shrinkwrap.h
@@ -30,12 +30,11 @@
#define BKE_SHRINKWRAP_H
/* mesh util */
+
//TODO: move this somewhere else
#include "BKE_customdata.h"
struct DerivedMesh;
struct Object;
-struct DerivedMesh *object_get_derived_final(struct Object *ob, CustomDataMask dataMask);
-
/* SpaceTransform stuff */
/*
@@ -60,7 +59,7 @@ struct DerivedMesh *object_get_derived_final(struct Object *ob, CustomDataMask d
* space_transform_invert_normal(&data, &no);
*
*/
-struct Object;
+
typedef struct SpaceTransform
{
@@ -69,14 +68,11 @@ typedef struct SpaceTransform
} SpaceTransform;
-void space_transform_from_matrixs(SpaceTransform *data, float local[][4], float target[][4]);
-#define space_transform_setup(data, local, target) space_transform_from_matrixs(data, (local)->obmat, (target)->obmat)
-
-void space_transform_apply (const SpaceTransform *data, float *co);
-void space_transform_invert(const SpaceTransform *data, float *co);
+void space_transform_from_matrixs(struct SpaceTransform *data, float local[4][4], float target[4][4]);
+void space_transform_apply(const struct SpaceTransform *data, float *co);
+void space_transform_invert(const struct SpaceTransform *data, float *co);
-void space_transform_apply_normal (const SpaceTransform *data, float *no);
-void space_transform_invert_normal(const SpaceTransform *data, float *no);
+#define space_transform_setup(data, local, target) space_transform_from_matrixs(data, (local)->obmat, (target)->obmat)
/* Shrinkwrap stuff */
#include "BKE_bvhutils.h"
@@ -94,6 +90,7 @@ void space_transform_invert_normal(const SpaceTransform *data, float *no);
*/
struct Object;
+struct Scene;
struct DerivedMesh;
struct ShrinkwrapModifierData;
struct MDeformVert;
@@ -120,22 +117,7 @@ typedef struct ShrinkwrapCalcData
} ShrinkwrapCalcData;
-void shrinkwrap_calc_nearest_vertex(ShrinkwrapCalcData *data);
-void shrinkwrap_calc_normal_projection(ShrinkwrapCalcData *data);
-void shrinkwrap_calc_nearest_surface_point(ShrinkwrapCalcData *data);
-
-void shrinkwrapModifier_deform(struct ShrinkwrapModifierData *smd, struct Object *ob, struct DerivedMesh *dm, float (*vertexCos)[3], int numVerts);
-
-/*
- * This function casts a ray in the given BVHTree.. but it takes into consideration the space_transform, that is:
- *
- * if transf was configured with "space_transform_setup( &transf, ob1, ob2 )"
- * then the input (vert, dir, BVHTreeRayHit) must be defined in ob1 coordinates space
- * and the BVHTree must be built in ob2 coordinate space.
- *
- * Thus it provides an easy way to cast the same ray across several trees (where each tree was built on its own coords space)
- */
-int normal_projection_project_vertex(char options, const float *vert, const float *dir, const SpaceTransform *transf, BVHTree *tree, BVHTreeRayHit *hit, BVHTree_RayCastCallback callback, void *userdata);
+void shrinkwrapModifier_deform(struct ShrinkwrapModifierData *smd, struct Scene *scene, struct Object *ob, struct DerivedMesh *dm, float (*vertexCos)[3], int numVerts);
/*
* NULL initializers to local data
diff --git a/source/blender/blenkernel/BKE_softbody.h b/source/blender/blenkernel/BKE_softbody.h
index 1756734813b..05a9bfb0ca9 100644
--- a/source/blender/blenkernel/BKE_softbody.h
+++ b/source/blender/blenkernel/BKE_softbody.h
@@ -32,6 +32,7 @@
#define BKE_SOFTBODY_H
struct Object;
+struct Scene;
struct SoftBody;
typedef struct BodyPoint {
@@ -47,7 +48,7 @@ typedef struct BodyPoint {
} BodyPoint;
/* allocates and initializes general main data */
-extern struct SoftBody *sbNew(void);
+extern struct SoftBody *sbNew(struct Scene *scene);
/* frees internal data and softbody itself */
extern void sbFree(struct SoftBody *sb);
@@ -56,7 +57,7 @@ extern void sbFree(struct SoftBody *sb);
extern void sbFreeSimulation(struct SoftBody *sb);
/* do one simul step, reading and writing vertex locs from given array */
-extern void sbObjectStep(struct Object *ob, float framnr, float (*vertexCos)[3], int numVerts);
+extern void sbObjectStep(struct Scene *scene, struct Object *ob, float framnr, float (*vertexCos)[3], int numVerts);
/* makes totally fresh start situation, resets time */
extern void sbObjectToSoftbody(struct Object *ob);
diff --git a/source/blender/blenkernel/BKE_text.h b/source/blender/blenkernel/BKE_text.h
index 002c804f17f..856abf74011 100644
--- a/source/blender/blenkernel/BKE_text.h
+++ b/source/blender/blenkernel/BKE_text.h
@@ -44,7 +44,7 @@ void txt_set_undostate (int u);
int txt_get_undostate (void);
struct Text* add_empty_text (char *name);
int reopen_text (struct Text *text);
-struct Text* add_text (char *file);
+struct Text* add_text (char *file, const char *relpath);
struct Text* copy_text (struct Text *ta);
void txt_free_cut_buffer (void);
diff --git a/source/blender/blenkernel/BKE_texture.h b/source/blender/blenkernel/BKE_texture.h
index cfcae3c44bc..a1600ce5473 100644
--- a/source/blender/blenkernel/BKE_texture.h
+++ b/source/blender/blenkernel/BKE_texture.h
@@ -31,6 +31,7 @@
#ifndef BKE_TEXTURE_H
#define BKE_TEXTURE_H
+struct Scene;
struct Tex;
struct MTex;
struct PluginTex;
@@ -63,7 +64,7 @@ struct Tex *copy_texture(struct Tex *tex);
void make_local_texture(struct Tex *tex);
void autotexname(struct Tex *tex);
struct Tex *give_current_texture(struct Object *ob, int act);
-struct Tex *give_current_world_texture(void);
+struct Tex *give_current_world_texture(struct Scene *scene);
struct TexMapping *add_mapping(void);
void init_mapping(struct TexMapping *texmap);
diff --git a/source/blender/blenkernel/BKE_writeavi.h b/source/blender/blenkernel/BKE_writeavi.h
index 83b9b57b3bc..e8294069908 100644
--- a/source/blender/blenkernel/BKE_writeavi.h
+++ b/source/blender/blenkernel/BKE_writeavi.h
@@ -46,7 +46,7 @@ typedef struct bMovieHandle {
void (*start_movie)(struct RenderData *rd, int rectx, int recty);
void (*append_movie)(int frame, int *pixels, int rectx, int recty);
void (*end_movie)(void);
- int (*get_next_frame)(void); /* can be null */
+ int (*get_next_frame)(struct RenderData *rd); /* optional */
} bMovieHandle;
bMovieHandle *BKE_get_movie_handle(int imtype);
diff --git a/source/blender/blenkernel/BKE_writeffmpeg.h b/source/blender/blenkernel/BKE_writeffmpeg.h
index 02f7ba6f860..dba3944a58d 100644
--- a/source/blender/blenkernel/BKE_writeffmpeg.h
+++ b/source/blender/blenkernel/BKE_writeffmpeg.h
@@ -57,7 +57,7 @@ struct RenderData;
extern void start_ffmpeg(struct RenderData *rd, int rectx, int recty);
extern void end_ffmpeg(void);
-extern void append_ffmpeg(int frame, int *pixels, int rectx, int recty);
+extern void append_ffmpeg(struct RenderData *rd, int frame, int *pixels, int rectx, int recty);
#ifdef __cplusplus
}
diff --git a/source/blender/blenkernel/BKE_writeframeserver.h b/source/blender/blenkernel/BKE_writeframeserver.h
index 4774906a2fa..097a7e2f9b0 100644
--- a/source/blender/blenkernel/BKE_writeframeserver.h
+++ b/source/blender/blenkernel/BKE_writeframeserver.h
@@ -37,7 +37,7 @@ struct RenderData;
extern void start_frameserver(struct RenderData *rd, int rectx, int recty);
extern void end_frameserver(void);
extern void append_frameserver(int frame, int *pixels, int rectx, int recty);
-extern int frameserver_loop(void);
+extern int frameserver_loop(struct RenderData *rd);
#ifdef __cplusplus
}
diff --git a/source/blender/blenkernel/intern/BME_conversions.c b/source/blender/blenkernel/intern/BME_conversions.c
index da6ab7ea816..58bd4b59181 100644
--- a/source/blender/blenkernel/intern/BME_conversions.c
+++ b/source/blender/blenkernel/intern/BME_conversions.c
@@ -56,6 +56,8 @@
//XXX #include "BSE_edit.h"
+/* XXX IMPORTANT: editmesh stuff doesn't belong in kernel! (ton) */
+
/*merge these functions*/
static void BME_DMcorners_to_loops(BME_Mesh *bm, CustomData *facedata, int index, BME_Poly *f, int numCol, int numTex){
int i, j;
@@ -397,7 +399,7 @@ void BME_bmesh_to_editmesh(BME_Mesh *bm, BME_TransData_Head *td, EditMesh *em) {
if(e->flag & SELECT) eed->f |= SELECT;
//XXX if(e->flag & ME_FGON) eed->h= EM_FGON; // 2 different defines!
if(e->flag & ME_HIDE) eed->h |= 1;
- if(G.scene->selectmode==SCE_SELECT_EDGE)
+ if(em->selectmode==SCE_SELECT_EDGE)
; //XXX EM_select_edge(eed, eed->f & SELECT);
CustomData_em_copy_data(&bm->edata, &em->edata, e->data, &eed->data);
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index 9c8e88aceb5..2aeef91538c 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -1957,12 +1957,14 @@ DerivedMesh *derivedmesh_from_versemesh(VNode *vnode, float (*vertexCos)[3])
/***/
-DerivedMesh *mesh_create_derived_for_modifier(Object *ob, ModifierData *md)
+DerivedMesh *mesh_create_derived_for_modifier(Scene *scene, Object *ob, ModifierData *md)
{
Mesh *me = ob->data;
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
DerivedMesh *dm;
+ md->scene= scene;
+
if (!(md->mode&eModifierMode_Realtime)) return NULL;
if (mti->isDisabled && mti->isDisabled(md)) return NULL;
@@ -2099,7 +2101,7 @@ static void add_orco_dm(Object *ob, EditMesh *em, DerivedMesh *dm, DerivedMesh *
DM_add_vert_layer(dm, CD_ORCO, CD_ASSIGN, orco);
}
-static void mesh_calc_modifiers(Object *ob, float (*inputVertexCos)[3],
+static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos)[3],
DerivedMesh **deform_r, DerivedMesh **final_r,
int useRenderParams, int useDeform,
int needMapping, CustomDataMask dataMask, int index)
@@ -2130,13 +2132,15 @@ static void mesh_calc_modifiers(Object *ob, float (*inputVertexCos)[3],
else required_mode = eModifierMode_Realtime;
if(useDeform) {
- if(do_ob_key(ob)) /* shape key makes deform verts */
+ if(do_ob_key(scene, ob)) /* shape key makes deform verts */
deformedVerts = mesh_getVertexCos(me, &numVerts);
/* Apply all leading deforming modifiers */
for(;md; md = md->next, curr = curr->next) {
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
+ md->scene= scene;
+
if((md->mode & required_mode) != required_mode) continue;
if(mti->isDisabled && mti->isDisabled(md)) continue;
@@ -2201,6 +2205,8 @@ static void mesh_calc_modifiers(Object *ob, float (*inputVertexCos)[3],
for(;md; md = md->next, curr = curr->next) {
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
+ md->scene= scene;
+
if((md->mode & required_mode) != required_mode) continue;
if(mti->type == eModifierTypeType_OnlyDeform && !useDeform) continue;
if((mti->flags & eModifierTypeFlag_RequiresOriginalData) && dm) {
@@ -2396,7 +2402,7 @@ static int editmesh_modifier_is_enabled(ModifierData *md, DerivedMesh *dm)
return 1;
}
-static void editmesh_calc_modifiers(Object *ob, EditMesh *em, DerivedMesh **cage_r,
+static void editmesh_calc_modifiers(Scene *scene, Object *ob, EditMesh *em, DerivedMesh **cage_r,
DerivedMesh **final_r,
CustomDataMask dataMask)
{
@@ -2415,7 +2421,7 @@ static void editmesh_calc_modifiers(Object *ob, EditMesh *em, DerivedMesh **cage
dm = NULL;
md = ob->modifiers.first;
-
+
/* we always want to keep original indices */
dataMask |= CD_MASK_ORIGINDEX;
@@ -2425,6 +2431,8 @@ static void editmesh_calc_modifiers(Object *ob, EditMesh *em, DerivedMesh **cage
for(i = 0; md; i++, md = md->next, curr = curr->next) {
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
+ md->scene= scene;
+
if(!editmesh_modifier_is_enabled(md, dm))
continue;
@@ -2689,7 +2697,7 @@ static void clear_mesh_caches(Object *ob)
}
}
-static void mesh_build_data(Object *ob, CustomDataMask dataMask)
+static void mesh_build_data(Scene *scene, Object *ob, CustomDataMask dataMask)
{
Mesh *me = ob->data;
float min[3], max[3];
@@ -2713,7 +2721,7 @@ static void mesh_build_data(Object *ob, CustomDataMask dataMask)
CustomData_set_layer_active(&me->fdata, CD_MCOL, layernum);
CustomData_set_layer_render(&me->fdata, CD_MCOL, layernum);
- mesh_calc_modifiers(ob, NULL, &ob->derivedDeform,
+ mesh_calc_modifiers(scene, ob, NULL, &ob->derivedDeform,
&ob->derivedFinal, 0, 1,
needMapping, dataMask, -1);
@@ -2722,7 +2730,7 @@ static void mesh_build_data(Object *ob, CustomDataMask dataMask)
CustomData_set_layer_render(&me->fdata, CD_MCOL, prevrender);
}
else {
- mesh_calc_modifiers(ob, NULL, &ob->derivedDeform,
+ mesh_calc_modifiers(scene, ob, NULL, &ob->derivedDeform,
&ob->derivedFinal, G.rendering, 1,
needMapping, dataMask, -1);
}
@@ -2741,7 +2749,7 @@ static void mesh_build_data(Object *ob, CustomDataMask dataMask)
}
-static void editmesh_build_data(Object *obedit, EditMesh *em, CustomDataMask dataMask)
+static void editmesh_build_data(Scene *scene, Object *obedit, EditMesh *em, CustomDataMask dataMask)
{
float min[3], max[3];
@@ -2760,7 +2768,7 @@ static void editmesh_build_data(Object *obedit, EditMesh *em, CustomDataMask dat
em->derivedCage = NULL;
}
- editmesh_calc_modifiers(obedit, em, &em->derivedCage, &em->derivedFinal, dataMask);
+ editmesh_calc_modifiers(scene, obedit, em, &em->derivedCage, &em->derivedFinal, dataMask);
em->lastDataMask = dataMask;
INIT_MINMAX(min, max);
@@ -2775,35 +2783,35 @@ static void editmesh_build_data(Object *obedit, EditMesh *em, CustomDataMask dat
em->derivedCage->needsFree = 0;
}
-void makeDerivedMesh(Object *ob, EditMesh *em, CustomDataMask dataMask)
+void makeDerivedMesh(Scene *scene, Object *ob, EditMesh *em, CustomDataMask dataMask)
{
if (em) {
- editmesh_build_data(ob, em, dataMask);
+ editmesh_build_data(scene, ob, em, dataMask);
} else {
- mesh_build_data(ob, dataMask);
+ mesh_build_data(scene, ob, dataMask);
}
}
/***/
-DerivedMesh *mesh_get_derived_final(Object *ob, CustomDataMask dataMask)
+DerivedMesh *mesh_get_derived_final(Scene *scene, Object *ob, CustomDataMask dataMask)
{
/* if there's no derived mesh or the last data mask used doesn't include
* the data we need, rebuild the derived mesh
*/
if(!ob->derivedFinal || (dataMask & ob->lastDataMask) != dataMask)
- mesh_build_data(ob, dataMask);
+ mesh_build_data(scene, ob, dataMask);
return ob->derivedFinal;
}
-DerivedMesh *mesh_get_derived_deform(Object *ob, CustomDataMask dataMask)
+DerivedMesh *mesh_get_derived_deform(Scene *scene, Object *ob, CustomDataMask dataMask)
{
/* if there's no derived mesh or the last data mask used doesn't include
* the data we need, rebuild the derived mesh
*/
if(!ob->derivedDeform || (dataMask & ob->lastDataMask) != dataMask)
- mesh_build_data(ob, dataMask);
+ mesh_build_data(scene, ob, dataMask);
return ob->derivedDeform;
}
@@ -2885,7 +2893,7 @@ void multires_render_final(Object *ob, Mesh *me, DerivedMesh **dm, float *vert_c
/* Multires note - if mesh has multires enabled, mesh is first set to the Pin level,
where all modifiers are applied, then if the topology hasn't changed, the changes
from modifiers are propagated up to the Render level. */
-DerivedMesh *mesh_create_derived_render(Object *ob, CustomDataMask dataMask)
+DerivedMesh *mesh_create_derived_render(Scene *scene, Object *ob, CustomDataMask dataMask)
{
DerivedMesh *final;
Mesh *me= get_mesh(ob);
@@ -2893,13 +2901,13 @@ DerivedMesh *mesh_create_derived_render(Object *ob, CustomDataMask dataMask)
int orig_lvl= 0;
vert_copy= multires_render_pin(ob, me, &orig_lvl);
- mesh_calc_modifiers(ob, NULL, NULL, &final, 1, 1, 0, dataMask, -1);
+ mesh_calc_modifiers(scene, ob, NULL, NULL, &final, 1, 1, 0, dataMask, -1);
multires_render_final(ob, me, &final, vert_copy, orig_lvl, dataMask);
return final;
}
-DerivedMesh *mesh_create_derived_index_render(Object *ob, CustomDataMask dataMask, int index)
+DerivedMesh *mesh_create_derived_index_render(Scene *scene, Object *ob, CustomDataMask dataMask, int index)
{
DerivedMesh *final;
Mesh *me= get_mesh(ob);
@@ -2907,32 +2915,32 @@ DerivedMesh *mesh_create_derived_index_render(Object *ob, CustomDataMask dataMas
int orig_lvl= 0;
vert_copy= multires_render_pin(ob, me, &orig_lvl);
- mesh_calc_modifiers(ob, NULL, NULL, &final, 1, 1, 0, dataMask, index);
+ mesh_calc_modifiers(scene, ob, NULL, NULL, &final, 1, 1, 0, dataMask, index);
multires_render_final(ob, me, &final, vert_copy, orig_lvl, dataMask);
return final;
}
-DerivedMesh *mesh_create_derived_view(Object *ob, CustomDataMask dataMask)
+DerivedMesh *mesh_create_derived_view(Scene *scene, Object *ob, CustomDataMask dataMask)
{
DerivedMesh *final;
- mesh_calc_modifiers(ob, NULL, NULL, &final, 0, 1, 0, dataMask, -1);
+ mesh_calc_modifiers(scene, ob, NULL, NULL, &final, 0, 1, 0, dataMask, -1);
return final;
}
-DerivedMesh *mesh_create_derived_no_deform(Object *ob, float (*vertCos)[3],
+DerivedMesh *mesh_create_derived_no_deform(Scene *scene, Object *ob, float (*vertCos)[3],
CustomDataMask dataMask)
{
DerivedMesh *final;
- mesh_calc_modifiers(ob, vertCos, NULL, &final, 0, 0, 0, dataMask, -1);
+ mesh_calc_modifiers(scene, ob, vertCos, NULL, &final, 0, 0, 0, dataMask, -1);
return final;
}
-DerivedMesh *mesh_create_derived_no_deform_render(Object *ob,
+DerivedMesh *mesh_create_derived_no_deform_render(Scene *scene, Object *ob,
float (*vertCos)[3],
CustomDataMask dataMask)
{
@@ -2942,7 +2950,7 @@ DerivedMesh *mesh_create_derived_no_deform_render(Object *ob,
int orig_lvl= 0;
vert_copy= multires_render_pin(ob, me, &orig_lvl);
- mesh_calc_modifiers(ob, vertCos, NULL, &final, 1, 0, 0, dataMask, -1);
+ mesh_calc_modifiers(scene, ob, vertCos, NULL, &final, 1, 0, 0, dataMask, -1);
multires_render_final(ob, me, &final, vert_copy, orig_lvl, dataMask);
return final;
@@ -2950,7 +2958,7 @@ DerivedMesh *mesh_create_derived_no_deform_render(Object *ob,
/***/
-DerivedMesh *editmesh_get_derived_cage_and_final(Object *obedit, EditMesh *em, DerivedMesh **final_r,
+DerivedMesh *editmesh_get_derived_cage_and_final(Scene *scene, Object *obedit, EditMesh *em, DerivedMesh **final_r,
CustomDataMask dataMask)
{
/* if there's no derived mesh or the last data mask used doesn't include
@@ -2958,20 +2966,20 @@ DerivedMesh *editmesh_get_derived_cage_and_final(Object *obedit, EditMesh *em, D
*/
if(!em->derivedCage ||
(em->lastDataMask & dataMask) != dataMask)
- editmesh_build_data(obedit, em, dataMask);
+ editmesh_build_data(scene, obedit, em, dataMask);
*final_r = em->derivedFinal;
return em->derivedCage;
}
-DerivedMesh *editmesh_get_derived_cage(Object *obedit, EditMesh *em, CustomDataMask dataMask)
+DerivedMesh *editmesh_get_derived_cage(Scene *scene, Object *obedit, EditMesh *em, CustomDataMask dataMask)
{
/* if there's no derived mesh or the last data mask used doesn't include
* the data we need, rebuild the derived mesh
*/
if(!em->derivedCage ||
(em->lastDataMask & dataMask) != dataMask)
- editmesh_build_data(obedit, em, dataMask);
+ editmesh_build_data(scene, obedit, em, dataMask);
return em->derivedCage;
}
@@ -3008,7 +3016,7 @@ static void make_vertexcosnos__mapFunc(void *userData, int index, float *co, flo
/* it stores the normals as floats, but they can still be scaled as shorts (32767 = unit) */
/* in use now by vertex/weight paint and particle generating */
-float *mesh_get_mapped_verts_nors(Object *ob)
+float *mesh_get_mapped_verts_nors(Scene *scene, Object *ob)
{
Mesh *me= ob->data;
DerivedMesh *dm;
@@ -3018,7 +3026,7 @@ float *mesh_get_mapped_verts_nors(Object *ob)
if(ob->type!=OB_MESH || me->totvert==0)
return NULL;
- dm= mesh_get_derived_final(ob, CD_MASK_BAREMESH);
+ dm= mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH);
vertexcosnos= MEM_callocN(6*sizeof(float)*me->totvert, "vertexcosnos map");
if(dm->foreachMappedVert) {
diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c
index f2a92b9024f..31669cc212a 100644
--- a/source/blender/blenkernel/intern/action.c
+++ b/source/blender/blenkernel/intern/action.c
@@ -1070,7 +1070,7 @@ int execute_ipochannels(ListBase *lb)
/* this now only used for repeating cycles, to enable fields and blur. */
/* the whole time control in blender needs serious thinking... */
-static float nla_time(float cfra, float unit)
+static float nla_time(Scene *scene, float cfra, float unit)
{
extern float bluroffs; // bad construct, borrowed from object.c for now
extern float fieldoffs;
@@ -1079,7 +1079,7 @@ static float nla_time(float cfra, float unit)
cfra+= unit*(bluroffs+fieldoffs);
/* global time */
- cfra*= G.scene->r.framelen;
+ cfra*= scene->r.framelen;
return cfra;
}
@@ -1236,7 +1236,7 @@ static Object *get_parent_path(Object *ob)
/* For the calculation of the effects of an action at the given frame on an object
* This is currently only used for the action constraint
*/
-void what_does_obaction (Object *ob, Object *workob, bAction *act, float cframe)
+void what_does_obaction (Scene *scene, Object *ob, Object *workob, bAction *act, float cframe)
{
ListBase tchanbase= {NULL, NULL};
@@ -1264,7 +1264,7 @@ void what_does_obaction (Object *ob, Object *workob, bAction *act, float cframe)
/* extract_ipochannels_from_action needs id's! */
workob->action= act;
- extract_ipochannels_from_action(&tchanbase, &workob->id, act, "Object", bsystem_time(workob, cframe, 0.0));
+ extract_ipochannels_from_action(&tchanbase, &workob->id, act, "Object", bsystem_time(scene, workob, cframe, 0.0));
if (tchanbase.first) {
execute_ipochannels(&tchanbase);
@@ -1274,7 +1274,7 @@ void what_does_obaction (Object *ob, Object *workob, bAction *act, float cframe)
/* ----- nla, etc. --------- */
-static void do_nla(Object *ob, int blocktype)
+static void do_nla(Scene *scene, Object *ob, int blocktype)
{
bPose *tpose= NULL;
Key *key= NULL;
@@ -1282,7 +1282,7 @@ static void do_nla(Object *ob, int blocktype)
bActionStrip *strip, *striplast=NULL, *stripfirst=NULL;
float striptime, frametime, length, actlength;
float blendfac, stripframe;
- float scene_cfra= frame_to_float(G.scene->r.cfra);
+ float scene_cfra= frame_to_float(scene, scene->r.cfra);
int doit, dostride;
if(blocktype==ID_AR) {
@@ -1348,11 +1348,11 @@ static void do_nla(Object *ob, int blocktype)
if (cu->flag & CU_PATH){
/* Ensure we have a valid path */
- if(cu->path==NULL || cu->path->data==NULL) makeDispListCurveTypes(parent, 0);
+ if(cu->path==NULL || cu->path->data==NULL) makeDispListCurveTypes(scene, parent, 0);
if(cu->path) {
/* Find the position on the path */
- ctime= bsystem_time(ob, scene_cfra, 0.0);
+ ctime= bsystem_time(scene, ob, scene_cfra, 0.0);
if(calc_ipo_spec(cu->ipo, CU_SPEED, &ctime)==0) {
/* correct for actions not starting on zero */
@@ -1374,7 +1374,7 @@ static void do_nla(Object *ob, int blocktype)
}
frametime = (striptime * actlength) + strip->actstart;
- frametime= bsystem_time(ob, frametime, 0.0);
+ frametime= bsystem_time(scene, ob, frametime, 0.0);
if(blocktype==ID_AR) {
extract_pose_from_action (tpose, strip->act, frametime);
@@ -1404,7 +1404,7 @@ static void do_nla(Object *ob, int blocktype)
}
frametime = (striptime * actlength) + strip->actstart;
- frametime= nla_time(frametime, (float)strip->repeat);
+ frametime= nla_time(scene, frametime, (float)strip->repeat);
if(blocktype==ID_AR) {
extract_pose_from_action (tpose, strip->act, frametime);
@@ -1425,7 +1425,7 @@ static void do_nla(Object *ob, int blocktype)
frametime = actlength * (strip->repeat-(int)strip->repeat);
if(frametime<=0.000001f) frametime= actlength; /* rounding errors... */
- frametime= bsystem_time(ob, frametime+strip->actstart, 0.0);
+ frametime= bsystem_time(scene, ob, frametime+strip->actstart, 0.0);
if(blocktype==ID_AR)
extract_pose_from_action (tpose, strip->act, frametime);
@@ -1490,7 +1490,7 @@ static void do_nla(Object *ob, int blocktype)
BLI_freelistN(&chanbase);
}
-void do_all_pose_actions(Object *ob)
+void do_all_pose_actions(Scene *scene, Object *ob)
{
/* only to have safe calls from editor */
if(ob==NULL) return;
@@ -1501,14 +1501,14 @@ void do_all_pose_actions(Object *ob)
ob->pose->flag &= ~(POSE_LOCKED|POSE_DO_UNLOCK);
}
else if(ob->action && ((ob->nlaflag & OB_NLA_OVERRIDE)==0 || ob->nlastrips.first==NULL) ) {
- float cframe= (float) G.scene->r.cfra;
+ float cframe= (float) scene->r.cfra;
cframe= get_action_frame(ob, cframe);
- extract_pose_from_action (ob->pose, ob->action, bsystem_time(ob, cframe, 0.0));
+ extract_pose_from_action (ob->pose, ob->action, bsystem_time(scene, ob, cframe, 0.0));
}
else if(ob->nlastrips.first) {
- do_nla(ob, ID_AR);
+ do_nla(scene, ob, ID_AR);
}
/* clear POSE_DO_UNLOCK flags that might have slipped through (just in case) */
@@ -1516,7 +1516,7 @@ void do_all_pose_actions(Object *ob)
}
/* called from where_is_object */
-void do_all_object_actions(Object *ob)
+void do_all_object_actions(Scene *scene, Object *ob)
{
if(ob==NULL) return;
if(ob->dup_group) return; /* prevent conflicts, might add smarter check later */
@@ -1525,13 +1525,13 @@ void do_all_object_actions(Object *ob)
if(ob->action && ((ob->nlaflag & OB_NLA_OVERRIDE)==0 || ob->nlastrips.first==NULL) ) {
ListBase tchanbase= {NULL, NULL};
Key *key= ob_get_key(ob);
- float cframe= (float) G.scene->r.cfra;
+ float cframe= (float) scene->r.cfra;
cframe= get_action_frame(ob, cframe);
- extract_ipochannels_from_action(&tchanbase, &ob->id, ob->action, "Object", bsystem_time(ob, cframe, 0.0));
+ extract_ipochannels_from_action(&tchanbase, &ob->id, ob->action, "Object", bsystem_time(scene, ob, cframe, 0.0));
if(key)
- extract_ipochannels_from_action(&tchanbase, &key->id, ob->action, "Shape", bsystem_time(ob, cframe, 0.0));
+ extract_ipochannels_from_action(&tchanbase, &key->id, ob->action, "Shape", bsystem_time(scene, ob, cframe, 0.0));
if(tchanbase.first) {
execute_ipochannels(&tchanbase);
@@ -1539,6 +1539,6 @@ void do_all_object_actions(Object *ob)
}
}
else if(ob->nlastrips.first) {
- do_nla(ob, ID_OB);
+ do_nla(scene, ob, ID_OB);
}
}
diff --git a/source/blender/blenkernel/intern/anim.c b/source/blender/blenkernel/intern/anim.c
index bf88ad16bdf..2845867b920 100644
--- a/source/blender/blenkernel/intern/anim.c
+++ b/source/blender/blenkernel/intern/anim.c
@@ -72,7 +72,7 @@
#include <config.h>
#endif
-static void object_duplilist_recursive(ID *id, Object *ob, Object *obedit, ListBase *duplilist, float par_space_mat[][4], int level, int animated);
+static void object_duplilist_recursive(ID *id, Scene *scene, Object *ob, ListBase *duplilist, float par_space_mat[][4], int level, int animated);
void free_path(Path *path)
{
@@ -299,7 +299,7 @@ static DupliObject *new_dupli_object(ListBase *lb, Object *ob, float mat[][4], i
return dob;
}
-static void group_duplilist(ListBase *lb, Object *ob, Object *obedit, int level, int animated)
+static void group_duplilist(ListBase *lb, Scene *scene, Object *ob, int level, int animated)
{
DupliObject *dob;
Group *group;
@@ -314,7 +314,7 @@ static void group_duplilist(ListBase *lb, Object *ob, Object *obedit, int level,
/* handles animated groups, and */
/* we need to check update for objects that are not in scene... */
- group_handle_recalc_and_update(ob, group);
+ group_handle_recalc_and_update(scene, ob, group);
animated= animated || group_is_animated(ob, group);
for(go= group->gobject.first; go; go= go->next) {
@@ -335,14 +335,14 @@ static void group_duplilist(ListBase *lb, Object *ob, Object *obedit, int level,
if(go->ob->transflag & OB_DUPLI) {
Mat4CpyMat4(dob->ob->obmat, dob->mat);
- object_duplilist_recursive((ID *)group, go->ob, obedit, lb, ob->obmat, level+1, animated);
+ object_duplilist_recursive((ID *)group, scene, go->ob, lb, ob->obmat, level+1, animated);
Mat4CpyMat4(dob->ob->obmat, dob->omat);
}
}
}
}
-static void frames_duplilist(ListBase *lb, Object *ob, int level, int animated)
+static void frames_duplilist(ListBase *lb, Scene *scene, Object *ob, int level, int animated)
{
extern int enable_cu_speed; /* object.c */
Object copyob;
@@ -352,31 +352,31 @@ static void frames_duplilist(ListBase *lb, Object *ob, int level, int animated)
/* simple preventing of too deep nested groups */
if(level>MAX_DUPLI_RECUR) return;
- cfrao= G.scene->r.cfra;
+ cfrao= scene->r.cfra;
if(ob->parent==NULL && ob->track==NULL && ob->ipo==NULL && ob->constraints.first==NULL) return;
if(ob->transflag & OB_DUPLINOSPEED) enable_cu_speed= 0;
copyob= *ob; /* store transform info */
- for(G.scene->r.cfra= ob->dupsta; G.scene->r.cfra<=ob->dupend; G.scene->r.cfra++) {
+ for(scene->r.cfra= ob->dupsta; scene->r.cfra<=ob->dupend; scene->r.cfra++) {
ok= 1;
if(ob->dupoff) {
- ok= G.scene->r.cfra - ob->dupsta;
+ ok= scene->r.cfra - ob->dupsta;
ok= ok % (ob->dupon+ob->dupoff);
if(ok < ob->dupon) ok= 1;
else ok= 0;
}
if(ok) {
- do_ob_ipo(ob);
- where_is_object_time(ob, (float)G.scene->r.cfra);
- dob= new_dupli_object(lb, ob, ob->obmat, ob->lay, G.scene->r.cfra, OB_DUPLIFRAMES, animated);
+ do_ob_ipo(scene, ob);
+ where_is_object_time(scene, ob, (float)scene->r.cfra);
+ dob= new_dupli_object(lb, ob, ob->obmat, ob->lay, scene->r.cfra, OB_DUPLIFRAMES, animated);
Mat4CpyMat4(dob->omat, copyob.obmat);
}
}
*ob= copyob; /* restore transform info */
- G.scene->r.cfra= cfrao;
+ scene->r.cfra= cfrao;
enable_cu_speed= 1;
}
@@ -387,7 +387,8 @@ struct vertexDupliData {
ListBase *lb;
float pmat[4][4];
float obmat[4][4]; /* Only used for dupliverts inside dupligroups, where the ob->obmat is modified */
- Object *ob, *par, *obedit;
+ Scene *scene;
+ Object *ob, *par;
float (*orco)[3];
};
@@ -427,12 +428,12 @@ static void vertex_dupli__mapFunc(void *userData, int index, float *co, float *n
float tmpmat[4][4];
Mat4CpyMat4(tmpmat, vdd->ob->obmat);
Mat4CpyMat4(vdd->ob->obmat, obmat); /* pretend we are really this mat */
- object_duplilist_recursive((ID *)vdd->id, vdd->ob, vdd->obedit, vdd->lb, obmat, vdd->level+1, vdd->animated);
+ object_duplilist_recursive((ID *)vdd->id, vdd->scene, vdd->ob, vdd->lb, obmat, vdd->level+1, vdd->animated);
Mat4CpyMat4(vdd->ob->obmat, tmpmat);
}
}
-static void vertex_duplilist(ListBase *lb, ID *id, Object *obedit, Object *par, float par_space_mat[][4], int level, int animated)
+static void vertex_duplilist(ListBase *lb, ID *id, Scene *scene, Object *par, float par_space_mat[][4], int level, int animated)
{
Object *ob, *ob_iter;
Mesh *me= par->data;
@@ -451,9 +452,9 @@ static void vertex_duplilist(ListBase *lb, ID *id, Object *obedit, Object *par,
if(level>MAX_DUPLI_RECUR) return;
if(me->edit_mesh)
- dm= editmesh_get_derived_cage(par, me->edit_mesh, CD_MASK_BAREMESH);
+ dm= editmesh_get_derived_cage(scene, par, me->edit_mesh, CD_MASK_BAREMESH);
else
- dm= mesh_get_derived_deform(par, CD_MASK_BAREMESH);
+ dm= mesh_get_derived_deform(scene, par, CD_MASK_BAREMESH);
if(G.rendering) {
vdd.orco= (float(*)[3])get_mesh_orco_verts(par);
@@ -485,7 +486,7 @@ static void vertex_duplilist(ListBase *lb, ID *id, Object *obedit, Object *par,
oblay = ob_iter->lay;
}
- if (lay & oblay && obedit!=ob_iter) {
+ if (lay & oblay && scene->obedit!=ob_iter) {
ob=ob_iter->parent;
while(ob) {
if(ob==par) {
@@ -506,14 +507,14 @@ static void vertex_duplilist(ListBase *lb, ID *id, Object *obedit, Object *par,
vdd.animated= animated;
vdd.lb= lb;
vdd.ob= ob;
- vdd.obedit= obedit;
+ vdd.scene= scene;
vdd.par= par;
Mat4CpyMat4(vdd.pmat, pmat);
/* mballs have a different dupli handling */
if(ob->type!=OB_MBALL) ob->flag |= OB_DONE; /* doesnt render */
- if(par==obedit) {
+ if(par==scene->obedit) {
dm->foreachMappedVert(dm, vertex_dupli__mapFunc, (void*) &vdd);
}
else {
@@ -539,7 +540,7 @@ static void vertex_duplilist(ListBase *lb, ID *id, Object *obedit, Object *par,
dm->release(dm);
}
-static void face_duplilist(ListBase *lb, ID *id, Object *obedit, Object *par, float par_space_mat[][4], int level, int animated)
+static void face_duplilist(ListBase *lb, ID *id, Scene *scene, Object *par, float par_space_mat[][4], int level, int animated)
{
Object *ob, *ob_iter;
Base *base = NULL;
@@ -564,7 +565,7 @@ static void face_duplilist(ListBase *lb, ID *id, Object *obedit, Object *par, fl
if(me->edit_mesh) {
int totvert;
- dm= editmesh_get_derived_cage(par, me->edit_mesh, CD_MASK_BAREMESH);
+ dm= editmesh_get_derived_cage(scene, par, me->edit_mesh, CD_MASK_BAREMESH);
totface= dm->getNumFaces(dm);
mface= MEM_mallocN(sizeof(MFace)*totface, "mface temp");
@@ -574,7 +575,7 @@ static void face_duplilist(ListBase *lb, ID *id, Object *obedit, Object *par, fl
dm->copyVertArray(dm, mvert);
}
else {
- dm = mesh_get_derived_deform(par, CD_MASK_BAREMESH);
+ dm = mesh_get_derived_deform(scene, par, CD_MASK_BAREMESH);
totface= dm->getNumFaces(dm);
mface= dm->getFaceArray(dm);
@@ -613,7 +614,7 @@ static void face_duplilist(ListBase *lb, ID *id, Object *obedit, Object *par, fl
oblay = ob_iter->lay;
}
- if (lay & oblay && obedit!=ob_iter) {
+ if (lay & oblay && scene->obedit!=ob_iter) {
ob=ob_iter->parent;
while(ob) {
if(ob==par) {
@@ -706,7 +707,7 @@ static void face_duplilist(ListBase *lb, ID *id, Object *obedit, Object *par, fl
float tmpmat[4][4];
Mat4CpyMat4(tmpmat, ob->obmat);
Mat4CpyMat4(ob->obmat, obmat); /* pretend we are really this mat */
- object_duplilist_recursive((ID *)id, ob, obedit, lb, ob->obmat, level+1, animated);
+ object_duplilist_recursive((ID *)id, scene, ob, lb, ob->obmat, level+1, animated);
Mat4CpyMat4(ob->obmat, tmpmat);
}
}
@@ -720,7 +721,7 @@ static void face_duplilist(ListBase *lb, ID *id, Object *obedit, Object *par, fl
else go= go->next; /* group loop */
}
- if(par==obedit) {
+ if(par==scene->obedit) {
MEM_freeN(mface);
MEM_freeN(mvert);
}
@@ -731,7 +732,7 @@ static void face_duplilist(ListBase *lb, ID *id, Object *obedit, Object *par, fl
dm->release(dm);
}
-static void new_particle_duplilist(ListBase *lb, ID *id, Object *par, float par_space_mat[][4], ParticleSystem *psys, int level, int animated)
+static void new_particle_duplilist(ListBase *lb, ID *id, Scene *scene, Object *par, float par_space_mat[][4], ParticleSystem *psys, int level, int animated)
{
GroupObject *go;
Object *ob=0, **oblist=0, obcopy, *obcopylist=0;
@@ -762,14 +763,14 @@ static void new_particle_duplilist(ListBase *lb, ID *id, Object *par, float par_
if(!psys_check_enabled(par, psys))
return;
- ctime = bsystem_time(par, (float)G.scene->r.cfra, 0.0);
+ ctime = bsystem_time(scene, par, (float)scene->r.cfra, 0.0);
totpart = psys->totpart;
totchild = psys->totchild;
BLI_srandom(31415926 + psys->seed);
- lay= G.scene->lay;
+ lay= scene->lay;
if((part->draw_as == PART_DRAW_OB && part->dup_ob) ||
(part->draw_as == PART_DRAW_GR && part->dup_group && part->dup_group->gobject.first)) {
@@ -790,11 +791,11 @@ static void new_particle_duplilist(ListBase *lb, ID *id, Object *par, float par_
totpart = psys->totcached;
}
- psys->lattice = psys_get_lattice(par, psys);
+ psys->lattice = psys_get_lattice(scene, par, psys);
/* gather list of objects or single object */
if(part->draw_as==PART_DRAW_GR) {
- group_handle_recalc_and_update(par, part->dup_group);
+ group_handle_recalc_and_update(scene, par, part->dup_group);
for(go=part->dup_group->gobject.first; go; go=go->next)
totgroup++;
@@ -876,7 +877,7 @@ static void new_particle_duplilist(ListBase *lb, ID *id, Object *par, float par_
else if(step_nbr) {
/* other keys */
state.time = (float)k / (float)step_nbr;
- psys_get_particle_on_path(par, psys, a, &state, 0);
+ psys_get_particle_on_path(scene, par, psys, a, &state, 0);
QuatToMat4(state.rot, pamat);
VECCOPY(pamat[3], state.co);
@@ -885,7 +886,7 @@ static void new_particle_duplilist(ListBase *lb, ID *id, Object *par, float par_
else {
/* first key */
state.time = -1.0;
- if(psys_get_particle_state(par, psys, a, &state, 0) == 0)
+ if(psys_get_particle_state(scene, par, psys, a, &state, 0) == 0)
continue;
QuatToMat4(state.rot, pamat);
@@ -910,7 +911,7 @@ static void new_particle_duplilist(ListBase *lb, ID *id, Object *par, float par_
}
else {
/* to give ipos in object correct offset */
- where_is_object_time(ob, ctime-pa_time);
+ where_is_object_time(scene, ob, ctime-pa_time);
Mat4CpyMat4(mat, pamat);
@@ -973,7 +974,7 @@ static Object *find_family_object(Object **obar, char *family, char ch)
}
-static void font_duplilist(ListBase *lb, Object *par, int level, int animated)
+static void font_duplilist(ListBase *lb, Scene *scene, Object *par, int level, int animated)
{
Object *ob, *obar[256];
Curve *cu;
@@ -988,7 +989,7 @@ static void font_duplilist(ListBase *lb, Object *par, int level, int animated)
/* in par the family name is stored, use this to find the other objects */
- chartransdata= text_to_curve(par, FO_DUPLI);
+ chartransdata= text_to_curve(scene, par, FO_DUPLI);
if(chartransdata==0) return;
memset(obar, 0, 256*sizeof(void *));
@@ -1022,7 +1023,7 @@ static void font_duplilist(ListBase *lb, Object *par, int level, int animated)
}
/* ***************************** */
-static void object_duplilist_recursive(ID *id, Object *ob, Object *obedit, ListBase *duplilist, float par_space_mat[][4], int level, int animated)
+static void object_duplilist_recursive(ID *id, Scene *scene, Object *ob, ListBase *duplilist, float par_space_mat[][4], int level, int animated)
{
if((ob->transflag & OB_DUPLI)==0)
return;
@@ -1041,30 +1042,30 @@ static void object_duplilist_recursive(ID *id, Object *ob, Object *obedit, ListB
if(ob->transflag & OB_DUPLIPARTS) {
ParticleSystem *psys = ob->particlesystem.first;
for(; psys; psys=psys->next)
- new_particle_duplilist(duplilist, id, ob, par_space_mat, psys, level+1, animated);
+ new_particle_duplilist(duplilist, id, scene, ob, par_space_mat, psys, level+1, animated);
}
else if(ob->transflag & OB_DUPLIVERTS) {
if(ob->type==OB_MESH) {
- vertex_duplilist(duplilist, id, obedit, ob, par_space_mat, level+1, animated);
+ vertex_duplilist(duplilist, id, scene, ob, par_space_mat, level+1, animated);
}
else if(ob->type==OB_FONT) {
if (GS(id->name)==ID_SCE) { /* TODO - support dupligroups */
- font_duplilist(duplilist, ob, level+1, animated);
+ font_duplilist(duplilist, scene, ob, level+1, animated);
}
}
}
else if(ob->transflag & OB_DUPLIFACES) {
if(ob->type==OB_MESH)
- face_duplilist(duplilist, id, obedit, ob, par_space_mat, level+1, animated);
+ face_duplilist(duplilist, id, scene, ob, par_space_mat, level+1, animated);
}
else if(ob->transflag & OB_DUPLIFRAMES) {
if (GS(id->name)==ID_SCE) { /* TODO - support dupligroups */
- frames_duplilist(duplilist, ob, level+1, animated);
+ frames_duplilist(duplilist, scene, ob, level+1, animated);
}
} else if(ob->transflag & OB_DUPLIGROUP) {
DupliObject *dob;
- group_duplilist(duplilist, ob, obedit, level+1, animated); /* now recursive */
+ group_duplilist(duplilist, scene, ob, level+1, animated); /* now recursive */
if (level==0) {
for(dob= duplilist->first; dob; dob= dob->next)
@@ -1080,7 +1081,7 @@ ListBase *object_duplilist(Scene *sce, Object *ob)
{
ListBase *duplilist= MEM_mallocN(sizeof(ListBase), "duplilist");
duplilist->first= duplilist->last= NULL;
- object_duplilist_recursive((ID *)sce, ob, sce->obedit, duplilist, NULL, 0, 0);
+ object_duplilist_recursive((ID *)sce, sce, ob, duplilist, NULL, 0, 0);
return duplilist;
}
diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c
index e7ae7997e9f..ce5921a701d 100644
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@ -2032,11 +2032,11 @@ static void where_is_ik_bone(bPoseChannel *pchan, float ik_mat[][3]) // nr = t
}
/* NLA strip modifiers */
-static void do_strip_modifiers(Object *armob, Bone *bone, bPoseChannel *pchan)
+static void do_strip_modifiers(Scene *scene, Object *armob, Bone *bone, bPoseChannel *pchan)
{
bActionModifier *amod;
bActionStrip *strip, *strip2;
- float scene_cfra= G.scene->r.cfra;
+ float scene_cfra= scene->r.cfra;
int do_modif;
for (strip=armob->nlastrips.first; strip; strip=strip->next) {
@@ -2085,7 +2085,7 @@ static void do_strip_modifiers(Object *armob, Bone *bone, bPoseChannel *pchan)
if( strcmp(pchan->name, amod->channel)==0 ) {
float mat4[4][4], mat3[3][3];
- curve_deform_vector(amod->ob, armob, bone->arm_mat[3], pchan->pose_mat[3], mat3, amod->no_rot_axis);
+ curve_deform_vector(scene, amod->ob, armob, bone->arm_mat[3], pchan->pose_mat[3], mat3, amod->no_rot_axis);
Mat4CpyMat4(mat4, pchan->pose_mat);
Mat4MulMat34(pchan->pose_mat, mat3, mat4);
@@ -2156,7 +2156,7 @@ static void do_strip_modifiers(Object *armob, Bone *bone, bPoseChannel *pchan)
/* The main armature solver, does all constraints excluding IK */
/* pchan is validated, as having bone and parent pointer */
-static void where_is_pose_bone(Object *ob, bPoseChannel *pchan, float ctime)
+static void where_is_pose_bone(Scene *scene, Object *ob, bPoseChannel *pchan, float ctime)
{
Bone *bone, *parbone;
bPoseChannel *parchan;
@@ -2226,7 +2226,7 @@ static void where_is_pose_bone(Object *ob, bPoseChannel *pchan, float ctime)
}
/* do NLA strip modifiers - i.e. curve follow */
- do_strip_modifiers(ob, bone, pchan);
+ do_strip_modifiers(scene, ob, bone, pchan);
/* Do constraints */
if (pchan->constraints.first) {
@@ -2241,7 +2241,7 @@ static void where_is_pose_bone(Object *ob, bPoseChannel *pchan, float ctime)
/* prepare PoseChannel for Constraint solving
* - makes a copy of matrix, and creates temporary struct to use
*/
- cob= constraints_make_evalob(ob, pchan, CONSTRAINT_OBTYPE_BONE);
+ cob= constraints_make_evalob(scene, ob, pchan, CONSTRAINT_OBTYPE_BONE);
/* Solve PoseChannel's Constraints */
solve_constraints(&pchan->constraints, cob, ctime); // ctime doesnt alter objects
@@ -2267,13 +2267,13 @@ static void where_is_pose_bone(Object *ob, bPoseChannel *pchan, float ctime)
/* This only reads anim data from channels, and writes to channels */
/* This is the only function adding poses */
-void where_is_pose (Object *ob)
+void where_is_pose (Scene *scene, Object *ob)
{
bArmature *arm;
Bone *bone;
bPoseChannel *pchan;
float imat[4][4];
- float ctime= bsystem_time(ob, (float)G.scene->r.cfra, 0.0); /* not accurate... */
+ float ctime= bsystem_time(scene, ob, (float)scene->r.cfra, 0.0); /* not accurate... */
arm = get_armature(ob);
@@ -2315,7 +2315,7 @@ void where_is_pose (Object *ob)
/* 4. walk over the tree for regular solving */
for(a=0; a<tree->totchannel; a++) {
if(!(tree->pchan[a]->flag & POSE_DONE)) // successive trees can set the flag
- where_is_pose_bone(ob, tree->pchan[a], ctime);
+ where_is_pose_bone(scene, ob, tree->pchan[a], ctime);
}
/* 5. execute the IK solver */
execute_posetree(ob, tree);
@@ -2335,7 +2335,7 @@ void where_is_pose (Object *ob)
}
}
else if(!(pchan->flag & POSE_DONE)) {
- where_is_pose_bone(ob, pchan, ctime);
+ where_is_pose_bone(scene, ob, pchan, ctime);
}
}
}
diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c
index ef740038e57..e6fd3cc8612 100644
--- a/source/blender/blenkernel/intern/blender.c
+++ b/source/blender/blenkernel/intern/blender.c
@@ -224,8 +224,6 @@ static void clear_global(void)
// free_vertexpaint();
- G.curscreen= NULL;
- G.scene= NULL;
G.main= NULL;
G.f &= ~(G_WEIGHTPAINT + G_VERTEXPAINT + G_FACESELECT + G_PARTICLEEDIT);
@@ -351,10 +349,12 @@ static void setup_app_data(bContext *C, BlendFileData *bfd, char *filename)
CTX_wm_screen_set(C, bfd->curscreen);
CTX_data_scene_set(C, bfd->curscreen->scene);
}
+
/* this can happen when active scene was lib-linked, and doesnt exist anymore */
if(CTX_data_scene(C)==NULL) {
CTX_data_scene_set(C, G.main->scene.first);
CTX_wm_screen(C)->scene= CTX_data_scene(C);
+ curscene= CTX_data_scene(C);
}
/* special cases, override loaded flags: */
@@ -378,7 +378,7 @@ static void setup_app_data(bContext *C, BlendFileData *bfd, char *filename)
/* last stage of do_versions actually, that sets recalc flags for recalc poses */
for(ob= G.main->object.first; ob; ob= ob->id.next) {
if(ob->type==OB_ARMATURE)
- if(ob->recalc) object_handle_update(ob);
+ if(ob->recalc) object_handle_update(curscene, ob);
}
/* now tag update flags, to ensure deformers get calculated on redraw */
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index 2c1b5ced614..aca25237337 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -925,9 +925,10 @@ DerivedMesh *CDDM_from_mesh(Mesh *mesh, Object *ob)
/* works in conjunction with hack during modifier calc, where active mcol
layer with weight paint colors is temporarily added */
- if ((G.f & G_WEIGHTPAINT) &&
- (ob && ob==(G.scene->basact?G.scene->basact->object:NULL)))
- CustomData_duplicate_referenced_layer(&dm->faceData, CD_MCOL);
+ /* XXX make this real but temporary layer */
+// if ((G.f & G_WEIGHTPAINT) &&
+// (ob && ob==(scene->basact?scene->basact->object:NULL)))
+// CustomData_duplicate_referenced_layer(&dm->faceData, CD_MCOL);
return dm;
}
diff --git a/source/blender/blenkernel/intern/cloth.c b/source/blender/blenkernel/intern/cloth.c
index dbc94571cad..6c9dfe4bf0a 100644
--- a/source/blender/blenkernel/intern/cloth.c
+++ b/source/blender/blenkernel/intern/cloth.c
@@ -479,7 +479,7 @@ static int do_step_cloth(Object *ob, ClothModifierData *clmd, DerivedMesh *resul
/************************************************
* clothModifier_do - main simulation function
************************************************/
-DerivedMesh *clothModifier_do(ClothModifierData *clmd, Object *ob, DerivedMesh *dm, int useRenderParams, int isFinalCalc)
+DerivedMesh *clothModifier_do(ClothModifierData *clmd, Scene *scene, Object *ob, DerivedMesh *dm, int useRenderParams, int isFinalCalc)
{
DerivedMesh *result;
PointCache *cache;
@@ -487,12 +487,13 @@ DerivedMesh *clothModifier_do(ClothModifierData *clmd, Object *ob, DerivedMesh *
float timescale;
int framedelta, framenr, startframe, endframe;
- framenr= (int)G.scene->r.cfra;
+ clmd->scene= scene; /* nice to pass on later :) */
+ framenr= (int)scene->r.cfra;
cache= clmd->point_cache;
result = CDDM_copy(dm);
BKE_ptcache_id_from_cloth(&pid, ob, clmd);
- BKE_ptcache_id_time(&pid, framenr, &startframe, &endframe, &timescale);
+ BKE_ptcache_id_time(&pid, scene, framenr, &startframe, &endframe, &timescale);
clmd->sim_parms->timescale= timescale;
if(!result) {
diff --git a/source/blender/blenkernel/intern/collision.c b/source/blender/blenkernel/intern/collision.c
index 4f8068ac252..9e57fef41f7 100644
--- a/source/blender/blenkernel/intern/collision.c
+++ b/source/blender/blenkernel/intern/collision.c
@@ -1296,7 +1296,7 @@ int cloth_collision_moving ( ClothModifierData *clmd, CollisionModifierData *col
// return all collision objects in scene
// collision object will exclude self
-CollisionModifierData **get_collisionobjects(Object *self, int *numcollobj)
+CollisionModifierData **get_collisionobjects(Scene *scene, Object *self, int *numcollobj)
{
Base *base=NULL;
CollisionModifierData **objs = NULL;
@@ -1306,7 +1306,7 @@ CollisionModifierData **get_collisionobjects(Object *self, int *numcollobj)
objs = MEM_callocN(sizeof(CollisionModifierData *)*maxobj, "CollisionObjectsArray");
// check all collision objects
- for ( base = G.scene->base.first; base; base = base->next )
+ for ( base = scene->base.first; base; base = base->next )
{
/*Only proceed for mesh object in same layer */
if(!(base->object->type==OB_MESH && (base->lay & self->lay)))
@@ -1451,7 +1451,7 @@ int cloth_bvh_objcollisions_resolve ( ClothModifierData * clmd, CollisionModifie
}
// cloth - object collisions
-int cloth_bvh_objcollision ( Object *ob, ClothModifierData * clmd, float step, float dt )
+int cloth_bvh_objcollision (Object *ob, ClothModifierData * clmd, float step, float dt )
{
Cloth *cloth=NULL;
BVHTree *cloth_bvh=NULL;
@@ -1481,7 +1481,7 @@ int cloth_bvh_objcollision ( Object *ob, ClothModifierData * clmd, float step, f
bvhtree_update_from_cloth ( clmd, 1 ); // 0 means STATIC, 1 means MOVING (see later in this function)
bvhselftree_update_from_cloth ( clmd, 0 ); // 0 means STATIC, 1 means MOVING (see later in this function)
- collobjs = get_collisionobjects(ob, &numcollobj);
+ collobjs = get_collisionobjects(clmd->scene, ob, &numcollobj);
if(!collobjs)
return 0;
diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c
index 82b1c71e56a..52448fca8d6 100644
--- a/source/blender/blenkernel/intern/constraint.c
+++ b/source/blender/blenkernel/intern/constraint.c
@@ -250,13 +250,16 @@ void unique_constraint_name (bConstraint *con, ListBase *list)
/* package an object/bone for use in constraint evaluation */
/* This function MEM_calloc's a bConstraintOb struct, that will need to be freed after evaluation */
-bConstraintOb *constraints_make_evalob (Object *ob, void *subdata, short datatype)
+bConstraintOb *constraints_make_evalob (Scene *scene, Object *ob, void *subdata, short datatype)
{
bConstraintOb *cob;
/* create regardless of whether we have any data! */
cob= MEM_callocN(sizeof(bConstraintOb), "bConstraintOb");
+ /* for system time, part of deglobalization, code nicer later with local time (ton) */
+ cob->scene= scene;
+
/* based on type of available data */
switch (datatype) {
case CONSTRAINT_OBTYPE_OBJECT:
@@ -1295,10 +1298,10 @@ static void followpath_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstr
/* only happens on reload file, but violates depsgraph still... fix! */
if (cu->path==NULL || cu->path->data==NULL)
- makeDispListCurveTypes(ct->tar, 0);
+ makeDispListCurveTypes(cob->scene, ct->tar, 0);
if (cu->path && cu->path->data) {
- curvetime= bsystem_time(ct->tar, (float)ctime, 0.0) - data->offset;
+ curvetime= bsystem_time(cob->scene, ct->tar, (float)ctime, 0.0) - data->offset;
if (calc_ipo_spec(cu->ipo, CU_SPEED, &curvetime)==0) {
curvetime /= cu->pathlen;
@@ -1883,7 +1886,7 @@ static void pycon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraintT
/* this check is to make sure curve objects get updated on file load correctly.*/
if (cu->path==NULL || cu->path->data==NULL) /* only happens on reload file, but violates depsgraph still... fix! */
- makeDispListCurveTypes(ct->tar, 0);
+ makeDispListCurveTypes(cob->scene, ct->tar, 0);
}
/* firstly calculate the matrix the normal way, then let the py-function override
@@ -2050,7 +2053,7 @@ static void actcon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraint
else if (cob->type == CONSTRAINT_OBTYPE_OBJECT) {
Object workob;
/* evaluate using workob */
- what_does_obaction(cob->ob, &workob, data->act, t);
+ what_does_obaction(cob->scene, cob->ob, &workob, data->act, t);
object_to_mat4(&workob, ct->matrix);
}
else {
@@ -2965,7 +2968,7 @@ static void clampto_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstrain
/* only happens on reload file, but violates depsgraph still... fix! */
if (cu->path==NULL || cu->path->data==NULL)
- makeDispListCurveTypes(ct->tar, 0);
+ makeDispListCurveTypes(cob->scene, ct->tar, 0);
}
/* technically, this isn't really needed for evaluation, but we don't know what else
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c
index 0a58ae59386..ccb7811cbb9 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -48,21 +48,22 @@
/* for dereferencing pointers */
#include "DNA_ID.h"
-#include "DNA_vfont_types.h"
#include "DNA_key_types.h"
#include "DNA_ipo_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_vfont_types.h"
-#include "BKE_global.h"
-#include "BKE_main.h"
-#include "BKE_utildefines.h" // VECCOPY
-#include "BKE_object.h"
-#include "BKE_mesh.h"
+#include "BKE_anim.h"
#include "BKE_curve.h"
#include "BKE_displist.h"
+#include "BKE_global.h"
#include "BKE_ipo.h"
-#include "BKE_anim.h"
-#include "BKE_library.h"
#include "BKE_key.h"
+#include "BKE_library.h"
+#include "BKE_main.h"
+#include "BKE_mesh.h"
+#include "BKE_object.h"
+#include "BKE_utildefines.h" // VECCOPY
/* globals */
@@ -1033,7 +1034,7 @@ float *make_orco_surf(Object *ob)
/* NOTE: This routine is tied to the order of vertex
* built by displist and as passed to the renderer.
*/
-float *make_orco_curve(Object *ob)
+float *make_orco_curve(Scene *scene, Object *ob)
{
Curve *cu = ob->data;
DispList *dl;
@@ -1043,7 +1044,7 @@ float *make_orco_curve(Object *ob)
if (!(cu->flag&CU_UV_ORCO) && cu->key && cu->key->refkey) {
cp_cu_key(cu, cu->key->refkey, 0, count_curveverts(&cu->nurb));
- makeDispListCurveTypes(ob, 1);
+ makeDispListCurveTypes(scene, ob, 1);
remakeDisp = 1;
}
@@ -1116,7 +1117,7 @@ float *make_orco_curve(Object *ob)
}
if (remakeDisp) {
- makeDispListCurveTypes(ob, 0);
+ makeDispListCurveTypes(scene, ob, 0);
}
return coord_array;
@@ -1125,7 +1126,7 @@ float *make_orco_curve(Object *ob)
/* ***************** BEVEL ****************** */
-void makebevelcurve(Object *ob, ListBase *disp)
+void makebevelcurve(Scene *scene, Object *ob, ListBase *disp)
{
DispList *dl, *dlnew;
Curve *bevcu, *cu;
@@ -1147,7 +1148,7 @@ void makebevelcurve(Object *ob, ListBase *disp)
dl= bevcu->disp.first;
if(dl==0) {
- makeDispListCurveTypes(cu->bevobj, 0);
+ makeDispListCurveTypes(scene, cu->bevobj, 0);
dl= bevcu->disp.first;
}
while(dl) {
diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c
index e090a2e4cae..01dd6c0c657 100644
--- a/source/blender/blenkernel/intern/depsgraph.c
+++ b/source/blender/blenkernel/intern/depsgraph.c
@@ -349,14 +349,14 @@ static void dag_add_driver_relation(Ipo *ipo, DagForest *dag, DagNode *node, int
}
}
-static void dag_add_collision_field_relation(DagForest *dag, Object *ob, DagNode *node)
+static void dag_add_collision_field_relation(DagForest *dag, Scene *scene, Object *ob, DagNode *node)
{
Base *base;
DagNode *node2;
// would be nice to have a list of colliders here
// so for now walk all objects in scene check 'same layer rule'
- for(base = G.scene->base.first; base; base= base->next) {
+ for(base = scene->base.first; base; base= base->next) {
if((base->lay & ob->lay) && base->object->pd) {
Object *ob1= base->object;
if((ob1->pd->deflect || ob1->pd->forcefield) && (ob1 != ob)) {
@@ -367,7 +367,7 @@ static void dag_add_collision_field_relation(DagForest *dag, Object *ob, DagNode
}
}
-static void build_dag_object(DagForest *dag, DagNode *scenenode, Object *ob, int mask)
+static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, Object *ob, int mask)
{
bConstraint *con;
bConstraintChannel *conchan;
@@ -471,7 +471,7 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Object *ob, int
for(md=ob->modifiers.first; md; md=md->next) {
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
- if (mti->updateDepgraph) mti->updateDepgraph(md, dag, ob, node);
+ if (mti->updateDepgraph) mti->updateDepgraph(md, dag, scene, ob, node);
}
}
if (ob->parent) {
@@ -546,10 +546,10 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Object *ob, int
/* softbody collision */
if((ob->type==OB_MESH) || (ob->type==OB_CURVE) || (ob->type==OB_LATTICE))
if(modifiers_isSoftbodyEnabled(ob) || modifiers_isClothEnabled(ob))
- dag_add_collision_field_relation(dag, ob, node);
+ dag_add_collision_field_relation(dag, scene, ob, node);
if (ob->type==OB_MBALL) {
- Object *mom= find_basis_mball(ob);
+ Object *mom= find_basis_mball(scene, ob);
if(mom!=ob) {
node2 = dag_get_node(dag, mom);
dag_add_relation(dag,node,node2,DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Metaball"); // mom depends on children!
@@ -612,7 +612,7 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Object *ob, int
if(psys->effectors.first)
psys_end_effectors(psys);
- psys_init_effectors(ob,psys->part->eff_group,psys);
+ psys_init_effectors(scene, ob, psys->part->eff_group, psys);
if(psys->effectors.first) {
for(nec= psys->effectors.first; nec; nec= nec->next) {
@@ -707,9 +707,9 @@ struct DagForest *build_dag(struct Scene *sce, short mask)
for(base = sce->base.first; base; base= base->next) {
ob= base->object;
- build_dag_object(dag, scenenode, ob, mask);
+ build_dag_object(dag, scenenode, sce, ob, mask);
if(ob->proxy)
- build_dag_object(dag, scenenode, ob->proxy, mask);
+ build_dag_object(dag, scenenode, sce, ob->proxy, mask);
/* handled in next loop */
if(ob->dup_group)
@@ -720,7 +720,7 @@ struct DagForest *build_dag(struct Scene *sce, short mask)
for(group= G.main->group.first; group; group= group->id.next) {
if(group->id.flag & LIB_DOIT) {
for(go= group->gobject.first; go; go= go->next) {
- build_dag_object(dag, scenenode, go->ob, mask);
+ build_dag_object(dag, scenenode, sce, go->ob, mask);
}
group->id.flag &= ~LIB_DOIT;
}
@@ -2137,22 +2137,6 @@ void DAG_scene_update_flags(Scene *scene, unsigned int lay)
}
-/* for depgraph updating, all layers visible in a screen */
-/* this is a copy from editscreen.c... I need to think over a more proper solution for this */
-/* probably the DAG_object_flush_update() should give layer too? */
-/* or some kind of dag context... (DAG_set_layer) */
-static unsigned int dag_screen_view3d_layers(void)
-{
- ScrArea *sa;
- int layer= 0;
-
- for(sa= G.curscreen->areabase.first; sa; sa= sa->next) {
- if(sa->spacetype==SPACE_VIEW3D)
- layer |= ((View3D *)sa->spacedata.first)->lay;
- }
- return layer;
-}
-
/* flag this object and all its relations to recalc */
/* if you need to do more objects, tag object yourself and
@@ -2186,9 +2170,9 @@ void DAG_object_flush_update(Scene *sce, Object *ob, short flag)
}
}
- if(G.curscreen)
- DAG_scene_flush_update(sce, dag_screen_view3d_layers(), 0);
- else
+// XXX if(G.curscreen)
+// DAG_scene_flush_update(sce, dag_screen_view3d_layers(), 0);
+// else
DAG_scene_flush_update(sce, sce->lay, 0);
}
diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c
index 52ec529b82a..952c49ea12a 100644
--- a/source/blender/blenkernel/intern/displist.c
+++ b/source/blender/blenkernel/intern/displist.c
@@ -304,22 +304,22 @@ int surfindex_displist(DispList *dl, int a, int *b, int *p1, int *p2, int *p3, i
/* create default shade input... save cpu cycles with ugly global */
/* XXXX bad code warning: local ShadeInput initialize... */
static ShadeInput shi;
-static void init_fastshade_shadeinput(void)
+static void init_fastshade_shadeinput(Render *re)
{
memset(&shi, 0, sizeof(ShadeInput));
- shi.lay= G.scene->lay;
+ shi.lay= RE_GetScene(re)->lay;
shi.view[2]= -1.0f;
shi.passflag= SCE_PASS_COMBINED;
shi.combinedflag= -1;
}
-static Render *fastshade_get_render(void)
+static Render *fastshade_get_render(Scene *scene)
{
Render *re= RE_GetRender("_Shade View_");
if(re==NULL) {
re= RE_NewRender("_Shade View_");
- RE_Database_Baking(re, G.scene, 0, 0); /* 0= no faces */
+ RE_Database_Baking(re, scene, 0, 0); /* 0= no faces */
}
return re;
}
@@ -462,7 +462,7 @@ static void init_fastshade_for_ob(Render *re, Object *ob, int *need_orco_r, floa
RE_shade_external(re, NULL, NULL);
/* initialize global here */
- init_fastshade_shadeinput();
+ init_fastshade_shadeinput(re);
RE_DataBase_GetView(re, tmat);
Mat4MulMat4(mat, ob->obmat, tmat);
@@ -515,9 +515,9 @@ static void mesh_create_shadedColors(Render *re, Object *ob, int onlyForMesh, un
dataMask |= CD_MASK_ORCO;
if (onlyForMesh)
- dm = mesh_get_derived_deform(ob, dataMask);
+ dm = mesh_get_derived_deform(RE_GetScene(re), ob, dataMask);
else
- dm = mesh_get_derived_final(ob, dataMask);
+ dm = mesh_get_derived_final(RE_GetScene(re), ob, dataMask);
mvert = dm->getVertArray(dm);
mface = dm->getFaceArray(dm);
@@ -609,13 +609,13 @@ static void mesh_create_shadedColors(Render *re, Object *ob, int onlyForMesh, un
end_fastshade_for_ob(ob);
}
-void shadeMeshMCol(Object *ob, Mesh *me)
+void shadeMeshMCol(Scene *scene, Object *ob, Mesh *me)
{
int a;
char *cp;
unsigned int *mcol= (unsigned int*)me->mcol;
- Render *re= fastshade_get_render();
+ Render *re= fastshade_get_render(scene);
mesh_create_shadedColors(re, ob, 1, &mcol, NULL);
me->mcol= (MCol*)mcol;
@@ -628,7 +628,7 @@ void shadeMeshMCol(Object *ob, Mesh *me)
/* has base pointer, to check for layer */
/* called from drawobject.c */
-void shadeDispList(Base *base)
+void shadeDispList(Scene *scene, Base *base)
{
Object *ob= base->object;
DispList *dl, *dlob;
@@ -640,7 +640,7 @@ void shadeDispList(Base *base)
unsigned int *col1;
int a, need_orco;
- re= fastshade_get_render();
+ re= fastshade_get_render(scene);
dl = find_displist(&ob->disp, DL_VERTCOL);
if (dl) {
@@ -779,22 +779,22 @@ void shadeDispList(Base *base)
/* frees render and shade part of displists */
/* note: dont do a shade again, until a redraw happens */
-void reshadeall_displist(void)
+void reshadeall_displist(Scene *scene)
{
Base *base;
Object *ob;
fastshade_free_render();
- for(base= G.scene->base.first; base; base= base->next) {
+ for(base= scene->base.first; base; base= base->next) {
ob= base->object;
if(ELEM5(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL))
freedisplist(&ob->disp);
- if(base->lay & G.scene->lay) {
+ if(base->lay & scene->lay) {
/* Metaballs have standard displist at the Object */
- if(ob->type==OB_MBALL) shadeDispList(base);
+ if(ob->type==OB_MBALL) shadeDispList(scene, base);
}
}
}
@@ -1130,7 +1130,7 @@ void curve_to_filledpoly(Curve *cu, ListBase *nurb, ListBase *dispbase)
- first point left, last point right
- based on subdivided points in original curve, not on points in taper curve (still)
*/
-float calc_taper(Object *taperobj, int cur, int tot)
+float calc_taper(Scene *scene, Object *taperobj, int cur, int tot)
{
Curve *cu;
DispList *dl;
@@ -1140,7 +1140,7 @@ float calc_taper(Object *taperobj, int cur, int tot)
cu= taperobj->data;
dl= cu->disp.first;
if(dl==NULL) {
- makeDispListCurveTypes(taperobj, 0);
+ makeDispListCurveTypes(scene, taperobj, 0);
dl= cu->disp.first;
}
if(dl) {
@@ -1173,15 +1173,15 @@ float calc_taper(Object *taperobj, int cur, int tot)
return 1.0;
}
-void makeDispListMBall(Object *ob)
+void makeDispListMBall(Scene *scene, Object *ob)
{
if(!ob || ob->type!=OB_MBALL) return;
freedisplist(&(ob->disp));
if(ob->type==OB_MBALL) {
- if(ob==find_basis_mball(ob)) {
- metaball_polygonize(ob);
+ if(ob==find_basis_mball(scene, ob)) {
+ metaball_polygonize(scene, ob);
tex_space_mball(ob);
object_deform_mball(ob);
@@ -1217,7 +1217,7 @@ static ModifierData *curve_get_tesselate_point(Object *ob, int forRender, int ed
return preTesselatePoint;
}
-static void curve_calc_modifiers_pre(Object *ob, int forRender, float (**originalVerts_r)[3], float (**deformedVerts_r)[3], int *numVerts_r)
+static void curve_calc_modifiers_pre(Scene *scene, Object *ob, int forRender, float (**originalVerts_r)[3], float (**deformedVerts_r)[3], int *numVerts_r)
{
ModifierData *md = modifiers_getVirtualModifierList(ob);
ModifierData *preTesselatePoint;
@@ -1236,7 +1236,7 @@ static void curve_calc_modifiers_pre(Object *ob, int forRender, float (**origina
if(editmode) required_mode |= eModifierMode_Editmode;
- if(cu->editnurb==NULL && do_ob_key(ob)) {
+ if(cu->editnurb==NULL && do_ob_key(scene, ob)) {
deformedVerts = curve_getVertexCos(ob->data, nurb, &numVerts);
originalVerts = MEM_dupallocN(deformedVerts);
}
@@ -1245,6 +1245,8 @@ static void curve_calc_modifiers_pre(Object *ob, int forRender, float (**origina
for (; md; md=md->next) {
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
+ md->scene= scene;
+
if ((md->mode & required_mode) != required_mode) continue;
if (mti->isDisabled && mti->isDisabled(md)) continue;
if (mti->type!=eModifierTypeType_OnlyDeform) continue;
@@ -1270,7 +1272,7 @@ static void curve_calc_modifiers_pre(Object *ob, int forRender, float (**origina
*numVerts_r = numVerts;
}
-static void curve_calc_modifiers_post(Object *ob, ListBase *dispbase, int forRender, float (*originalVerts)[3], float (*deformedVerts)[3])
+static void curve_calc_modifiers_post(Scene *scene, Object *ob, ListBase *dispbase, int forRender, float (*originalVerts)[3], float (*deformedVerts)[3])
{
ModifierData *md = modifiers_getVirtualModifierList(ob);
ModifierData *preTesselatePoint;
@@ -1294,6 +1296,8 @@ static void curve_calc_modifiers_post(Object *ob, ListBase *dispbase, int forRen
for (; md; md=md->next) {
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
+ md->scene= scene;
+
if ((md->mode & required_mode) != required_mode) continue;
if (mti->isDisabled && mti->isDisabled(md)) continue;
if (mti->type!=eModifierTypeType_OnlyDeform && mti->type!=eModifierTypeType_DeformOrConstruct) continue;
@@ -1367,7 +1371,7 @@ static void displist_surf_indices(DispList *dl)
}
-void makeDispListSurf(Object *ob, ListBase *dispbase, int forRender)
+void makeDispListSurf(Scene *scene, Object *ob, ListBase *dispbase, int forRender)
{
ListBase *nubase;
Nurb *nu;
@@ -1384,7 +1388,7 @@ void makeDispListSurf(Object *ob, ListBase *dispbase, int forRender)
else
nubase= &cu->nurb;
- curve_calc_modifiers_pre(ob, forRender, &originalVerts, &deformedVerts, &numVerts);
+ curve_calc_modifiers_pre(scene, ob, forRender, &originalVerts, &deformedVerts, &numVerts);
for (nu=nubase->first; nu; nu=nu->next) {
if(forRender || nu->hide==0) {
@@ -1438,10 +1442,10 @@ void makeDispListSurf(Object *ob, ListBase *dispbase, int forRender)
tex_space_curve(cu);
}
- curve_calc_modifiers_post(ob, dispbase, forRender, originalVerts, deformedVerts);
+ curve_calc_modifiers_post(scene, ob, dispbase, forRender, originalVerts, deformedVerts);
}
-void makeDispListCurveTypes(Object *ob, int forOrco)
+void makeDispListCurveTypes(Scene *scene, Object *ob, int forOrco)
{
Curve *cu = ob->data;
ListBase *dispbase;
@@ -1454,7 +1458,7 @@ void makeDispListCurveTypes(Object *ob, int forOrco)
freedisplist(dispbase);
if(ob->type==OB_SURF) {
- makeDispListSurf(ob, dispbase, 0);
+ makeDispListSurf(scene, ob, dispbase, 0);
}
else if (ELEM(ob->type, OB_CURVE, OB_FONT)) {
ListBase dlbev;
@@ -1473,14 +1477,14 @@ void makeDispListCurveTypes(Object *ob, int forOrco)
if(cu->path) free_path(cu->path);
cu->path= NULL;
- if(ob->type==OB_FONT) text_to_curve(ob, 0);
+ if(ob->type==OB_FONT) text_to_curve(scene, ob, 0);
- if(!forOrco) curve_calc_modifiers_pre(ob, 0, &originalVerts, &deformedVerts, &numVerts);
+ if(!forOrco) curve_calc_modifiers_pre(scene, ob, 0, &originalVerts, &deformedVerts, &numVerts);
makeBevelList(ob);
/* If curve has no bevel will return nothing */
- makebevelcurve(ob, &dlbev);
+ makebevelcurve(scene, ob, &dlbev);
/* no bevel or extrude, and no width correction? */
if (!dlbev.first && cu->width==1.0f) {
@@ -1558,7 +1562,7 @@ void makeDispListCurveTypes(Object *ob, int forOrco)
if ( (cu->bevobj!=NULL) || !((cu->flag & CU_FRONT) || (cu->flag & CU_BACK)) )
fac = bevp->radius;
} else {
- fac = calc_taper(cu->taperobj, a, bl->nr);
+ fac = calc_taper(scene, cu->taperobj, a, bl->nr);
}
if (bevp->f1) {
@@ -1603,7 +1607,7 @@ void makeDispListCurveTypes(Object *ob, int forOrco)
if(cu->flag & CU_PATH) calc_curvepath(ob);
- if(!forOrco) curve_calc_modifiers_post(ob, &cu->disp, 0, originalVerts, deformedVerts);
+ if(!forOrco) curve_calc_modifiers_post(scene, ob, &cu->disp, 0, originalVerts, deformedVerts);
tex_space_curve(cu);
}
diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c
index 66e8a039dda..6c959f2190e 100644
--- a/source/blender/blenkernel/intern/effect.c
+++ b/source/blender/blenkernel/intern/effect.c
@@ -140,7 +140,7 @@ void free_effects(ListBase *lb)
/* -------------------------- Effectors ------------------ */
-static void add_to_effectorcache(ListBase *lb, Object *ob, Object *obsrc)
+static void add_to_effectorcache(ListBase *lb, Scene *scene, Object *ob, Object *obsrc)
{
pEffectorCache *ec;
PartDeflect *pd= ob->pd;
@@ -150,7 +150,7 @@ static void add_to_effectorcache(ListBase *lb, Object *ob, Object *obsrc)
Curve *cu= ob->data;
if(cu->flag & CU_PATH) {
if(cu->path==NULL || cu->path->data==NULL)
- makeDispListCurveTypes(ob, 0);
+ makeDispListCurveTypes(scene, ob, 0);
if(cu->path && cu->path->data) {
ec= MEM_callocN(sizeof(pEffectorCache), "effector cache");
ec->ob= ob;
@@ -174,7 +174,7 @@ static void add_to_effectorcache(ListBase *lb, Object *ob, Object *obsrc)
}
/* returns ListBase handle with objects taking part in the effecting */
-ListBase *pdInitEffectors(Object *obsrc, Group *group)
+ListBase *pdInitEffectors(Scene *scene, Object *obsrc, Group *group)
{
static ListBase listb={NULL, NULL};
pEffectorCache *ec;
@@ -186,14 +186,14 @@ ListBase *pdInitEffectors(Object *obsrc, Group *group)
for(go= group->gobject.first; go; go= go->next) {
if( (go->ob->lay & layer) && go->ob->pd && go->ob!=obsrc) {
- add_to_effectorcache(&listb, go->ob, obsrc);
+ add_to_effectorcache(&listb, scene, go->ob, obsrc);
}
}
}
else {
- for(base = G.scene->base.first; base; base= base->next) {
+ for(base = scene->base.first; base; base= base->next) {
if( (base->lay & layer) && base->object->pd && base->object!=obsrc) {
- add_to_effectorcache(&listb, base->object, obsrc);
+ add_to_effectorcache(&listb, scene, base->object, obsrc);
}
}
}
@@ -240,14 +240,14 @@ static void eff_tri_ray_hit(void *userdata, int index, const BVHTreeRay *ray, BV
}
// get visibility of a wind ray
-static float eff_calc_visibility(Object *ob, float *co, float *dir)
+static float eff_calc_visibility(Scene *scene, Object *ob, float *co, float *dir)
{
CollisionModifierData **collobjs = NULL;
int numcollobj = 0, i;
float norm[3], len = 0.0;
float visibility = 1.0;
- collobjs = get_collisionobjects(ob, &numcollobj);
+ collobjs = get_collisionobjects(scene, ob, &numcollobj);
if(!collobjs)
return 0;
@@ -374,7 +374,7 @@ float effector_falloff(PartDeflect *pd, float *eff_velocity, float *vec_to_part)
return falloff;
}
-void do_physical_effector(Object *ob, float *opco, short type, float force_val, float distance, float falloff, float size, float damp, float *eff_velocity, float *vec_to_part, float *velocity, float *field, int planar, struct RNG *rng, float noise_factor, float charge, float pa_size)
+void do_physical_effector(Scene *scene, Object *ob, float *opco, short type, float force_val, float distance, float falloff, float size, float damp, float *eff_velocity, float *vec_to_part, float *velocity, float *field, int planar, struct RNG *rng, float noise_factor, float charge, float pa_size)
{
float mag_vec[3]={0,0,0};
float temp[3], temp2[3];
@@ -382,7 +382,7 @@ void do_physical_effector(Object *ob, float *opco, short type, float force_val,
float noise = 0, visibility;
// calculate visibility
- visibility = eff_calc_visibility(ob, opco, vec_to_part);
+ visibility = eff_calc_visibility(scene, ob, opco, vec_to_part);
if(visibility <= 0.0)
return;
falloff *= visibility;
@@ -499,6 +499,7 @@ void do_physical_effector(Object *ob, float *opco, short type, float force_val,
/* -------- pdDoEffectors() --------
generic force/speed system, now used for particles and softbodies
+ scene = scene where it runs in, for time and stuff
lb = listbase with objects that take part in effecting
opco = global coord, as input
force = force accumulator
@@ -510,7 +511,7 @@ void do_physical_effector(Object *ob, float *opco, short type, float force_val,
guide = old speed of particle
*/
-void pdDoEffectors(ListBase *lb, float *opco, float *force, float *speed, float cur_time, float loc_time, unsigned int flags)
+void pdDoEffectors(Scene *scene, ListBase *lb, float *opco, float *force, float *speed, float cur_time, float loc_time, unsigned int flags)
{
/*
Modifies the force on a particle according to its
@@ -541,7 +542,7 @@ void pdDoEffectors(ListBase *lb, float *opco, float *force, float *speed, float
pd= ob->pd;
/* Get IPO force strength and fall off values here */
- where_is_object_time(ob,cur_time);
+ where_is_object_time(scene, ob, cur_time);
/* use center of object for distance calculus */
VecSubf(vec_to_part, opco, ob->obmat[3]);
@@ -554,9 +555,9 @@ void pdDoEffectors(ListBase *lb, float *opco, float *force, float *speed, float
else {
float field[3]={0,0,0}, tmp[3];
VECCOPY(field, force);
- do_physical_effector(ob, opco, pd->forcefield,pd->f_strength,distance,
- falloff,pd->f_dist,pd->f_damp,ob->obmat[2],vec_to_part,
- speed,force,pd->flag&PFIELD_PLANAR, pd->rng, pd->f_noise, 0.0f, 0.0f);
+ do_physical_effector(scene, ob, opco, pd->forcefield,pd->f_strength,distance,
+ falloff, pd->f_dist, pd->f_damp, ob->obmat[2], vec_to_part,
+ speed,force, pd->flag&PFIELD_PLANAR, pd->rng, pd->f_noise, 0.0f, 0.0f);
// for softbody backward compatibility
if(flags & PE_WIND_AS_SPEED){
diff --git a/source/blender/blenkernel/intern/exotic.c b/source/blender/blenkernel/intern/exotic.c
index 911efda21bd..43056d7f98b 100644
--- a/source/blender/blenkernel/intern/exotic.c
+++ b/source/blender/blenkernel/intern/exotic.c
@@ -115,6 +115,7 @@
#include "BKE_object.h"
#include "BKE_material.h"
#include "BKE_exotic.h"
+
/* #include "BKE_error.h" */
#include "BKE_screen.h"
#include "BKE_displist.h"
@@ -129,7 +130,7 @@
#include "zlib.h"
static int is_dxf(char *str);
-static void dxf_read(char *filename);
+static void dxf_read(Scene *scene, char *filename);
static int is_stl(char *str);
static int is_stl_ascii(char *str)
@@ -233,7 +234,7 @@ static void mesh_add_normals_flags(Mesh *me)
}
}
-static void read_stl_mesh_binary(char *str)
+static void read_stl_mesh_binary(Scene *scene, char *str)
{
FILE *fpSTL;
Object *ob;
@@ -295,7 +296,7 @@ static void read_stl_mesh_binary(char *str)
fseek(fpSTL, 2, SEEK_CUR);
}
- ob= add_object(OB_MESH);
+ ob= add_object(scene, OB_MESH);
me= ob->data;
me->totvert = totvert;
me->totface = totface;
@@ -344,7 +345,7 @@ static void read_stl_mesh_binary(char *str)
STLBAILOUT("Bad vertex!"); \
++totvert; \
}
-static void read_stl_mesh_ascii(char *str)
+static void read_stl_mesh_ascii(Scene *scene, char *str)
{
FILE *fpSTL;
char buffer[2048], *cp;
@@ -436,7 +437,7 @@ static void read_stl_mesh_ascii(char *str)
fclose(fpSTL);
/* OK, lets create our mesh */
- ob = add_object(OB_MESH);
+ ob = add_object(scene, OB_MESH);
me = ob->data;
me->totface = totface;
@@ -481,7 +482,7 @@ static void read_stl_mesh_ascii(char *str)
#undef STLREADLINE
#undef STLREADVERT
-static void read_videoscape_mesh(char *str)
+static void read_videoscape_mesh(Scene *scene, char *str)
{
Object *ob;
Mesh *me;
@@ -555,7 +556,7 @@ static void read_videoscape_mesh(char *str)
}
/* new object */
- ob= add_object(OB_MESH);
+ ob= add_object(scene, OB_MESH);
me= ob->data;
me->totvert= verts;
me->totface= totedge+tottria+totquad;
@@ -688,7 +689,7 @@ static void read_videoscape_mesh(char *str)
//XXX waitcursor(1);
}
-static void read_videoscape_lamp(char *str)
+static void read_videoscape_lamp(Scene *scene, char *str)
{
Object *ob;
Lamp *la;
@@ -707,7 +708,7 @@ static void read_videoscape_lamp(char *str)
fscanf(fp, "%d\n", &tot);
while(tot--) {
- ob= add_object(OB_LAMP);
+ ob= add_object(scene, OB_LAMP);
la= ob->data;
fscanf(fp, "%d\n", &val);
@@ -730,7 +731,7 @@ static void read_videoscape_lamp(char *str)
fclose(fp);
}
-static void read_videoscape_nurbs(char *str)
+static void read_videoscape_nurbs(Scene *scene, char *str)
{
Object *ob;
Curve *cu;
@@ -751,8 +752,8 @@ static void read_videoscape_nurbs(char *str)
fscanf(fp, "%40s", s);
fscanf(fp, "%d\n", &type);
- if(type==5) ob= add_object(OB_SURF);
- else ob= add_object(OB_CURVE);
+ if(type==5) ob= add_object(scene, OB_SURF);
+ else ob= add_object(scene, OB_CURVE);
cu= ob->data;
fscanf(fp, "%d\n", &tot);
@@ -832,7 +833,7 @@ static void read_videoscape_nurbs(char *str)
fclose(fp);
}
-static void read_videoscape(char *str)
+static void read_videoscape(Scene *scene, char *str)
{
int file, type;
unsigned int val;
@@ -848,9 +849,9 @@ static void read_videoscape(char *str)
read(file, &type, 4);
close(file);
- if(type==DDG1) read_videoscape_mesh(name);
- else if(type==DDG2) read_videoscape_lamp(name);
- else if(type==DDG3) read_videoscape_nurbs(name);
+ if(type==DDG1) read_videoscape_mesh(scene, name);
+ else if(type==DDG2) read_videoscape_lamp(scene, name);
+ else if(type==DDG3) read_videoscape_nurbs(scene, name);
}
val = BLI_stringdec(name, head, tail, &numlen);
@@ -1043,7 +1044,7 @@ static void read_iv_index(float *data, float *baseadr, float *index, int nr, int
-static void read_inventor(char *str, struct ListBase *listb)
+static void read_inventor(Scene *scene, char *str, struct ListBase *listb)
{
struct IvNode *iv, *ivp, *ivn;
char *maindata, *md, *cpa;
@@ -1641,7 +1642,7 @@ static void read_inventor(char *str, struct ListBase *listb)
BPoint *bp;
if(ivsurf==0) {
- ob= add_object(OB_SURF);
+ ob= add_object(scene, OB_SURF);
ivsurf= ob;
}
else ob= ivsurf;
@@ -1724,7 +1725,7 @@ static void read_inventor(char *str, struct ListBase *listb)
/* ************************************************************ */
-static void displist_to_mesh(DispList *dlfirst)
+static void displist_to_mesh(Scene *scene, DispList *dlfirst)
{
Object *ob;
Mesh *me;
@@ -1841,9 +1842,9 @@ static void displist_to_mesh(DispList *dlfirst)
vec[1]= (min[1]+max[1])/2;
vec[2]= (min[2]+max[2])/2;
- ob= add_object(OB_MESH);
+ ob= add_object(scene, OB_MESH);
VECCOPY(ob->loc, vec);
- where_is_object(ob);
+ where_is_object(scene, ob);
me= ob->data;
@@ -2063,7 +2064,7 @@ static void displist_to_mesh(DispList *dlfirst)
make_edges(me, 0);
}
-static void displist_to_objects(ListBase *lbase)
+static void displist_to_objects(Scene *scene, ListBase *lbase)
{
DispList *dl, *first, *prev, *next;
ListBase tempbase;
@@ -2071,7 +2072,7 @@ static void displist_to_objects(ListBase *lbase)
/* irst this: is still active */
if(ivsurf) {
- where_is_object(ivsurf);
+ where_is_object(scene, ivsurf);
// XXX docenter_new();
}
@@ -2152,12 +2153,12 @@ static void displist_to_objects(ListBase *lbase)
totvert+= vert;
if(totvert > maxaantal || dl->next==0) {
if(dl->next==0) {
- displist_to_mesh(first);
+ displist_to_mesh(scene, first);
}
else if(dl->prev) {
prev= dl->prev;
prev->next= 0;
- displist_to_mesh(first);
+ displist_to_mesh(scene, first);
prev->next= dl;
first= dl;
totvert= 0;
@@ -2172,13 +2173,13 @@ static void displist_to_objects(ListBase *lbase)
curcol++;
}
}
- else displist_to_mesh(lbase->first);
+ else displist_to_mesh(scene, lbase->first);
freedisplist(lbase);
}
-int BKE_read_exotic(char *name)
+int BKE_read_exotic(Scene *scene, char *name)
{
ListBase lbase={0, 0};
int len;
@@ -2208,33 +2209,33 @@ int BKE_read_exotic(char *name)
if(0) { // XXX obedit) {
//XXX error("Unable to perform function in EditMode");
} else {
- read_videoscape(name);
+ read_videoscape(scene, name);
retval = 1;
}
}
else if(strncmp(str, "#Inventor V1.0", 14)==0) {
if( strncmp(str+15, "ascii", 5)==0) {
- read_inventor(name, &lbase);
- displist_to_objects(&lbase);
+ read_inventor(scene, name, &lbase);
+ displist_to_objects(scene, &lbase);
retval = 1;
} else {
//XXX error("Can only read Inventor 1.0 ascii");
}
}
else if((strncmp(str, "#VRML V1.0 asc", 14)==0)) {
- read_inventor(name, &lbase);
- displist_to_objects(&lbase);
+ read_inventor(scene, name, &lbase);
+ displist_to_objects(scene, &lbase);
retval = 1;
}
else if(is_dxf(name)) {
- dxf_read(name);
+ dxf_read(scene, name);
retval = 1;
}
else if(is_stl(name)) {
if (is_stl_ascii(name))
- read_stl_mesh_ascii(name);
+ read_stl_mesh_ascii(scene, name);
else
- read_stl_mesh_binary(name);
+ read_stl_mesh_binary(scene, name);
retval = 1;
}
#ifndef DISABLE_PYTHON
@@ -2306,10 +2307,10 @@ static int write_derivedmesh_stl(FILE *fpSTL, Object *ob, DerivedMesh *dm)
return numfacets;
}
-static int write_object_stl(FILE *fpSTL, Object *ob, Mesh *me)
+static int write_object_stl(FILE *fpSTL, Scene *scene, Object *ob, Mesh *me)
{
int numfacets = 0;
- DerivedMesh *dm = mesh_get_derived_final(ob, CD_MASK_BAREMESH);
+ DerivedMesh *dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH);
numfacets += write_derivedmesh_stl(fpSTL, ob, dm);
@@ -2318,7 +2319,7 @@ static int write_object_stl(FILE *fpSTL, Object *ob, Mesh *me)
return numfacets;
}
-void write_stl(char *str)
+void write_stl(Scene *scene, char *str)
{
Object *ob;
Mesh *me;
@@ -2356,14 +2357,14 @@ void write_stl(char *str)
fprintf(fpSTL, "Binary STL output from Blender: %-48.48s ", str);
/* Write all selected mesh objects */
- base= G.scene->base.first;
+ base= scene->base.first;
while(base) {
if (base->flag & SELECT) {
ob = base->object;
if (ob->type == OB_MESH) {
me = ob->data;
if (me)
- numfacets += write_object_stl(fpSTL, ob, me);
+ numfacets += write_object_stl(fpSTL, scene, ob, me);
}
}
base= base->next;
@@ -2384,7 +2385,7 @@ void write_stl(char *str)
//XXX waitcursor(0);
}
-static void write_videoscape_mesh(Object *ob, char *str)
+static void write_videoscape_mesh(Scene *scene, Object *ob, char *str)
{
Mesh *me;
EditMesh *em = me->edit_mesh;
@@ -2463,7 +2464,7 @@ static void write_videoscape_mesh(Object *ob, char *str)
}
}
else {
- DerivedMesh *dm = mesh_get_derived_deform(ob, CD_MASK_BAREMESH);
+ DerivedMesh *dm = mesh_get_derived_deform(scene, ob, CD_MASK_BAREMESH);
me= ob->data;
@@ -2492,7 +2493,7 @@ static void write_videoscape_mesh(Object *ob, char *str)
}
-void write_videoscape(char *str)
+void write_videoscape(Scene *scene, char *str)
{
Base *base;
int file, val, lampdone=0;
@@ -2511,11 +2512,11 @@ void write_videoscape(char *str)
strcpy(temp_dir, str);
- base= G.scene->base.first;
+ base= scene->base.first;
while(base) {
- if((base->flag & SELECT) && (base->lay & G.scene->lay)) {
+ if((base->flag & SELECT) && (base->lay & scene->lay)) {
if(base->object->type==OB_MESH) {
- write_videoscape_mesh(base->object, str);
+ write_videoscape_mesh(scene, base->object, str);
val = BLI_stringdec(str, head, tail, &numlen);
BLI_stringenc(str, head, tail, numlen, val + 1);
}
@@ -2812,7 +2813,7 @@ static void write_object_vrml(FILE *fp, Object *ob)
}
-void write_vrml(char *str)
+void write_vrml(Scene *scene, char *str)
{
Mesh *me;
Material *ma;
@@ -2851,7 +2852,7 @@ void write_vrml(char *str)
/* only write meshes we're using in this scene */
flag_listbase_ids(&G.main->mesh, LIB_DOIT, 0);
- for(base= G.scene->base.first; base; base= base->next)
+ for(base= scene->base.first; base; base= base->next)
if(base->object->type== OB_MESH)
((ID *)base->object->data)->flag |= LIB_DOIT;
@@ -2865,10 +2866,10 @@ void write_vrml(char *str)
/* THEN:Hidden Objects */
fprintf(fp, "\n\t# Hidden Objects, in invisible layers\n\n");
- base= G.scene->base.first;
+ base= scene->base.first;
while(base) {
if(base->object->type== OB_MESH) {
- if( (base->lay & G.scene->lay)==0 ) {
+ if( (base->lay & scene->lay)==0 ) {
write_object_vrml(fp, base->object);
}
}
@@ -2881,14 +2882,14 @@ void write_vrml(char *str)
/* The camera */
- write_camera_vrml(fp, G.scene->camera);
+ write_camera_vrml(fp, scene->camera);
/* THEN:The Objects */
- base= G.scene->base.first;
+ base= scene->base.first;
while(base) {
if(base->object->type== OB_MESH) {
- if(base->lay & G.scene->lay) {
+ if(base->lay & scene->lay) {
write_object_vrml(fp, base->object);
}
}
@@ -3123,7 +3124,7 @@ static void write_object_dxf(FILE *fp, Object *ob, int layer)
fprintf (fp, "50\n%f\n", (float) ob->rot[2]*180/M_PI); /* Can only write the Z rot */
}
-void write_dxf(char *str)
+void write_dxf(struct Scene *scene, char *str)
{
Mesh *me;
Base *base;
@@ -3164,7 +3165,7 @@ void write_dxf(char *str)
/* only write meshes we're using in this scene */
flag_listbase_ids(&G.main->mesh, LIB_DOIT, 0);
- for(base= G.scene->base.first; base; base= base->next)
+ for(base= scene->base.first; base; base= base->next)
if(base->object->type== OB_MESH)
((ID *)base->object->data)->flag |= LIB_DOIT;
@@ -3185,7 +3186,7 @@ void write_dxf(char *str)
write_group(2, "ENTITIES");
/* Write all the mesh objects */
- base= G.scene->base.first;
+ base= scene->base.first;
while(base) {
if(base->object->type== OB_MESH) {
write_object_dxf(fp, base->object, base->lay);
@@ -3255,12 +3256,12 @@ static int dxf_get_layer_col(char *layer)
return 1;
}
-static int dxf_get_layer_num(char *layer)
+static int dxf_get_layer_num(Scene *scene, char *layer)
{
int ret = 0;
if (all_digits(layer) && atoi(layer)<(1<<20)) ret= atoi(layer);
- if (ret == 0) ret = G.scene->lay;
+ if (ret == 0) ret = scene->lay;
return ret;
}
@@ -3432,22 +3433,22 @@ static float zerovec[3]= {0.0, 0.0, 0.0};
#define reset_vars cent[0]= cent[1]= cent[2]=0.0; strcpy(layname, ""); color[0]= color[1]= color[2]= -1.0
-static void dxf_get_mesh(Mesh** m, Object** o, int noob)
+static void dxf_get_mesh(Scene *scene, Mesh** m, Object** o, int noob)
{
Mesh *me = NULL;
Object *ob;
if (!noob) {
- *o = add_object(OB_MESH);
+ *o = add_object(scene, OB_MESH);
ob = *o;
if (strlen(entname)) new_id(&G.main->object, (ID *)ob, entname);
else if (strlen(layname)) new_id(&G.main->object, (ID *)ob, layname);
- if (strlen(layname)) ob->lay= dxf_get_layer_num(layname);
- else ob->lay= G.scene->lay;
+ if (strlen(layname)) ob->lay= dxf_get_layer_num(scene, layname);
+ else ob->lay= scene->lay;
// not nice i know... but add_object() sets active base, which needs layer setting too (ton)
- G.scene->basact->lay= ob->lay;
+ scene->basact->lay= ob->lay;
*m = ob->data;
me= *m;
@@ -3474,7 +3475,7 @@ static void dxf_get_mesh(Mesh** m, Object** o, int noob)
me->mface= CustomData_add_layer(&me->fdata, CD_MFACE, CD_CALLOC, NULL, 0);
}
-static void dxf_read_point(int noob) {
+static void dxf_read_point(Scene *scene, int noob) {
/* Blender vars */
Object *ob;
Mesh *me;
@@ -3503,7 +3504,7 @@ static void dxf_read_point(int noob) {
read_group(id, val);
}
- dxf_get_mesh(&me, &ob, noob);
+ dxf_get_mesh(scene, &me, &ob, noob);
me->totvert= 1;
me->mvert= MEM_callocN(me->totvert*sizeof(MVert), "mverts");
CustomData_set_layer(&me->vdata, CD_MVERT, me->mvert);
@@ -3533,7 +3534,7 @@ static void dxf_close_line(void)
linehold=NULL;
}
-static void dxf_read_line(int noob) {
+static void dxf_read_line(Scene *scene, int noob) {
/* Entity specific vars */
float epoint[3]={0.0, 0.0, 0.0};
short vspace=0; /* Whether or not coords are relative */
@@ -3583,7 +3584,7 @@ static void dxf_read_line(int noob) {
dxf_close_line();
if (linemhold==NULL) {
- dxf_get_mesh(&me, &ob, noob);
+ dxf_get_mesh(scene, &me, &ob, noob);
if(ob) VECCOPY(ob->loc, cent);
@@ -3645,7 +3646,7 @@ static void dxf_close_2dpoly(void)
p2dhold=NULL;
}
-static void dxf_read_ellipse(int noob)
+static void dxf_read_ellipse(Scene *scene, int noob)
{
/*
@@ -3791,7 +3792,7 @@ static void dxf_read_ellipse(int noob)
cent[2]= center[2];
#endif
- dxf_get_mesh(&me, &ob, noob);
+ dxf_get_mesh(scene, &me, &ob, noob);
strcpy(oldllay, layname);
if(ob) VECCOPY(ob->loc, cent);
dxf_add_mat (ob, me, color, layname);
@@ -3841,7 +3842,7 @@ static void dxf_read_ellipse(int noob)
}
}
-static void dxf_read_arc(int noob)
+static void dxf_read_arc(Scene *scene, int noob)
{
/* Entity specific vars */
float epoint[3]={0.0, 0.0, 0.0};
@@ -3919,7 +3920,7 @@ static void dxf_read_arc(int noob)
cent[1]= center[1]+dia*cos(phi);
cent[2]= center[2];
- dxf_get_mesh(&me, &ob, noob);
+ dxf_get_mesh(scene, &me, &ob, noob);
strcpy(oldllay, layname);
if(ob) VECCOPY(ob->loc, cent);
dxf_add_mat (ob, me, color, layname);
@@ -3964,7 +3965,7 @@ static void dxf_read_arc(int noob)
}
}
-static void dxf_read_polyline(int noob) {
+static void dxf_read_polyline(Scene *scene, int noob) {
/* Entity specific vars */
short vspace=0; /* Whether or not coords are relative */
int flag=0;
@@ -4013,7 +4014,7 @@ static void dxf_read_polyline(int noob) {
dxf_close_2dpoly();
if (p2dmhold==NULL) {
- dxf_get_mesh(&me, &ob, noob);
+ dxf_get_mesh(scene, &me, &ob, noob);
strcpy(oldplay, layname);
@@ -4089,7 +4090,7 @@ static void dxf_read_polyline(int noob) {
lwasp2d=1;
}
else if (flag&64) {
- dxf_get_mesh(&me, &ob, noob);
+ dxf_get_mesh(scene, &me, &ob, noob);
if(ob) VECCOPY(ob->loc, cent);
@@ -4190,7 +4191,7 @@ static void dxf_read_polyline(int noob) {
}
}
-static void dxf_read_lwpolyline(int noob) {
+static void dxf_read_lwpolyline(Scene *scene, int noob) {
/* Entity specific vars */
short vspace=0; /* Whether or not coords are relative */
int flag=0;
@@ -4240,7 +4241,7 @@ static void dxf_read_lwpolyline(int noob) {
if (nverts == 0)
return;
- dxf_get_mesh(&me, &ob, noob);
+ dxf_get_mesh(scene, &me, &ob, noob);
strcpy(oldllay, layname);
if(ob) VECCOPY(ob->loc, cent);
dxf_add_mat (ob, me, color, layname);
@@ -4314,7 +4315,7 @@ static void dxf_close_3dface(void)
f3dhold=NULL;
}
-static void dxf_read_3dface(int noob)
+static void dxf_read_3dface(Scene *scene, int noob)
{
/* Entity specific vars */
float vert2[3]={0.0, 0.0, 0.0};
@@ -4410,7 +4411,7 @@ static void dxf_read_3dface(int noob)
}
if (f3dmhold==NULL) {
- dxf_get_mesh(&me, &ob, noob);
+ dxf_get_mesh(scene, &me, &ob, noob);
strcpy(oldflay, layname);
@@ -4477,7 +4478,7 @@ static void dxf_read_3dface(int noob)
hasbumped=1;
}
-static void dxf_read(char *filename)
+static void dxf_read(Scene *scene, char *filename)
{
Mesh *lastMe = G.main->mesh.last;
@@ -4525,7 +4526,7 @@ static void dxf_read(char *filename)
read_group(id, val);
if(group_is(0, "POLYLINE")) {
- dxf_read_polyline(1);
+ dxf_read_polyline(scene, 1);
if(error_exit) return;
lwasf3d=0;
lwasline=0;
@@ -4533,7 +4534,7 @@ static void dxf_read(char *filename)
while(group_isnt(0, "SEQEND")) read_group(id, val);
} else if(group_is(0, "LWPOLYLINE")) {
- dxf_read_lwpolyline(1);
+ dxf_read_lwpolyline(scene, 1);
if(error_exit) return;
lwasf3d=0;
lwasline=0;
@@ -4545,27 +4546,27 @@ static void dxf_read(char *filename)
lwasp2d=0;
lwasline=0;
} else if(group_is(0, "POINT")) {
- dxf_read_point(1);
+ dxf_read_point(scene, 1);
if(error_exit) return;
lwasf3d=0;
lwasp2d=0;
lwasline=0;
} else if(group_is(0, "LINE")) {
- dxf_read_line(1);
+ dxf_read_line(scene, 1);
if(error_exit) return;
lwasline=1;
lwasp2d=0;
lwasf3d=0;
} else if(group_is(0, "3DFACE")) {
- dxf_read_3dface(1);
+ dxf_read_3dface(scene, 1);
if(error_exit) return;
lwasf3d=1;
lwasp2d=0;
lwasline=0;
} else if (group_is(0, "CIRCLE")) {
- dxf_read_arc(1);
+ dxf_read_arc(scene, 1);
} else if (group_is(0, "ELLIPSE")) {
- dxf_read_ellipse(1);
+ dxf_read_ellipse(scene, 1);
} else if (group_is(0, "ENDBLK")) {
break;
}
@@ -4667,12 +4668,12 @@ static void dxf_read(char *filename)
I leave it commented out here as warning (ton) */
//for (i=0; i<ob->totcol; i++) ob->mat[i]= ((Mesh*)ob->data)->mat[i];
- if (strlen(layname)) ob->lay= dxf_get_layer_num(layname);
- else ob->lay= G.scene->lay;
+ if (strlen(layname)) ob->lay= dxf_get_layer_num(scene, layname);
+ else ob->lay= scene->lay;
/* link to scene */
base= MEM_callocN( sizeof(Base), "add_base");
- BLI_addhead(&G.scene->base, base);
+ BLI_addhead(&scene->base, base);
base->lay= ob->lay;
@@ -4685,7 +4686,7 @@ static void dxf_read(char *filename)
lwasp2d=0;
lwasline=0;
} else if(group_is(0, "POLYLINE")) {
- dxf_read_polyline(0);
+ dxf_read_polyline(scene, 0);
if(error_exit) return;
lwasf3d=0;
lwasline=0;
@@ -4693,7 +4694,7 @@ static void dxf_read(char *filename)
while(group_isnt(0, "SEQEND")) read_group(id, val);
} else if(group_is(0, "LWPOLYLINE")) {
- dxf_read_lwpolyline(0);
+ dxf_read_lwpolyline(scene, 0);
if(error_exit) return;
lwasf3d=0;
lwasline=0;
@@ -4705,27 +4706,27 @@ static void dxf_read(char *filename)
lwasp2d=0;
lwasline=0;
} else if(group_is(0, "POINT")) {
- dxf_read_point(0);
+ dxf_read_point(scene, 0);
if(error_exit) return;
lwasf3d=0;
lwasp2d=0;
lwasline=0;
} else if(group_is(0, "LINE")) {
- dxf_read_line(0);
+ dxf_read_line(scene, 0);
if(error_exit) return;
lwasline=1;
lwasp2d=0;
lwasf3d=0;
} else if(group_is(0, "3DFACE")) {
- dxf_read_3dface(0);
+ dxf_read_3dface(scene, 0);
if(error_exit) return;
lwasline=0;
lwasp2d=0;
lwasf3d=1;
} else if (group_is(0, "CIRCLE") || group_is(0, "ARC")) {
- dxf_read_arc(0);
+ dxf_read_arc(scene, 0);
} else if (group_is(0, "ELLIPSE")) {
- dxf_read_ellipse(0);
+ dxf_read_ellipse(scene, 0);
} else if(group_is(0, "ENDSEC")) {
break;
}
diff --git a/source/blender/blenkernel/intern/fluidsim.c b/source/blender/blenkernel/intern/fluidsim.c
index 29c4e0f2fb5..060f9208796 100644
--- a/source/blender/blenkernel/intern/fluidsim.c
+++ b/source/blender/blenkernel/intern/fluidsim.c
@@ -167,14 +167,14 @@ void fluidsim_free(FluidsimModifierData *fluidmd)
return;
}
-DerivedMesh *fluidsimModifier_do(FluidsimModifierData *fluidmd, Object *ob, DerivedMesh *dm, int useRenderParams, int isFinalCalc)
+DerivedMesh *fluidsimModifier_do(FluidsimModifierData *fluidmd, Scene *scene, Object *ob, DerivedMesh *dm, int useRenderParams, int isFinalCalc)
{
#ifndef DISABLE_ELBEEM
DerivedMesh *result = NULL;
int framenr;
FluidsimSettings *fss = NULL;
- framenr= (int)G.scene->r.cfra;
+ framenr= (int)scene->r.cfra;
// only handle fluidsim domains
if(fluidmd && fluidmd->fss && (fluidmd->fss->type != OB_FLUIDSIM_DOMAIN))
@@ -396,7 +396,7 @@ static DerivedMesh *fluidsim_read_obj(char *filename)
DerivedMesh *fluidsim_read_cache(Object *ob, DerivedMesh *orgdm, FluidsimModifierData *fluidmd, int framenr, int useRenderParams)
{
int displaymode = 0;
- int curFrame = framenr - 1 /*G.scene->r.sfra*/; /* start with 0 at start frame */
+ int curFrame = framenr - 1 /*scene->r.sfra*/; /* start with 0 at start frame */
char targetDir[FILE_MAXFILE+FILE_MAXDIR], targetFile[FILE_MAXFILE+FILE_MAXDIR];
FluidsimSettings *fss = fluidmd->fss;
DerivedMesh *dm = NULL;
@@ -598,7 +598,7 @@ void fluid_get_bb(MVert *mvert, int totvert, float obmat[][4],
// file handling
//-------------------------------------------------------------------------------
-void initElbeemMesh(struct Object *ob,
+void initElbeemMesh(struct Scene *scene, struct Object *ob,
int *numVertices, float **vertices,
int *numTriangles, int **triangles,
int useGlobalCoords, int modifierIndex)
@@ -610,7 +610,7 @@ void initElbeemMesh(struct Object *ob,
float *verts;
int *tris;
- dm = mesh_create_derived_index_render(ob, CD_MASK_BAREMESH, modifierIndex);
+ dm = mesh_create_derived_index_render(scene, ob, CD_MASK_BAREMESH, modifierIndex);
//dm = mesh_create_derived_no_deform(ob,NULL);
mvert = dm->getVertArray(dm);
diff --git a/source/blender/blenkernel/intern/font.c b/source/blender/blenkernel/intern/font.c
index 529d4cc5268..80670bf1228 100644
--- a/source/blender/blenkernel/intern/font.c
+++ b/source/blender/blenkernel/intern/font.c
@@ -641,7 +641,7 @@ int getselection(Object *ob, int *start, int *end)
}
}
-struct chartrans *text_to_curve(Object *ob, int mode)
+struct chartrans *text_to_curve(Scene *scene, Object *ob, int mode)
{
VFont *vfont, *oldvfont;
VFontData *vfd= NULL;
@@ -973,7 +973,7 @@ struct chartrans *text_to_curve(Object *ob, int mode)
oldflag= cucu->flag;
cucu->flag |= (CU_PATH+CU_FOLLOW);
- if(cucu->path==NULL) makeDispListCurveTypes(cu->textoncurve, 0);
+ if(cucu->path==NULL) makeDispListCurveTypes(scene, cu->textoncurve, 0);
if(cucu->path) {
float imat[4][4], imat3[3][3];
Mat4Invert(imat, ob->obmat);
diff --git a/source/blender/blenkernel/intern/group.c b/source/blender/blenkernel/intern/group.c
index 0d2f86bb151..6fffbd794ef 100644
--- a/source/blender/blenkernel/intern/group.c
+++ b/source/blender/blenkernel/intern/group.c
@@ -280,7 +280,7 @@ static void group_replaces_nla(Object *parent, Object *target, char mode)
you can draw everything, leaves tags in objects to signal it needs further updating */
/* note: does not work for derivedmesh and render... it recreates all again in convertblender.c */
-void group_handle_recalc_and_update(Object *parent, Group *group)
+void group_handle_recalc_and_update(Scene *scene, Object *parent, Group *group)
{
GroupObject *go;
@@ -289,8 +289,8 @@ void group_handle_recalc_and_update(Object *parent, Group *group)
int cfrao;
/* switch to local time */
- cfrao= G.scene->r.cfra;
- G.scene->r.cfra -= (int)give_timeoffset(parent);
+ cfrao= scene->r.cfra;
+ scene->r.cfra -= (int)give_timeoffset(parent);
/* we need a DAG per group... */
for(go= group->gobject.first; go; go= go->next) {
@@ -298,7 +298,7 @@ void group_handle_recalc_and_update(Object *parent, Group *group)
go->ob->recalc= go->recalc;
group_replaces_nla(parent, go->ob, 's');
- object_handle_update(go->ob);
+ object_handle_update(scene, go->ob);
group_replaces_nla(parent, go->ob, 'e');
/* leave recalc tags in case group members are in normal scene */
@@ -307,14 +307,14 @@ void group_handle_recalc_and_update(Object *parent, Group *group)
}
/* restore */
- G.scene->r.cfra= cfrao;
+ scene->r.cfra= cfrao;
}
else {
/* only do existing tags, as set by regular depsgraph */
for(go= group->gobject.first; go; go= go->next) {
if(go->ob) {
if(go->ob->recalc) {
- object_handle_update(go->ob);
+ object_handle_update(scene, go->ob);
}
}
}
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index 93109b6d0ef..597687101b0 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -21,9 +21,7 @@
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
* All rights reserved.
*
- * The Original Code is: all of this file.
- *
- * Contributor(s): Blender Foundation, 2006
+ * Contributor(s): Blender Foundation, 2006, full recode
*
* ***** END GPL LICENSE BLOCK *****
*/
@@ -337,7 +335,8 @@ static void image_assign_ibuf(Image *ima, ImBuf *ibuf, int index, int frame)
/* checks if image was already loaded, then returns same image */
/* otherwise creates new. */
/* does not load ibuf itself */
-Image *BKE_add_image_file(const char *name)
+/* pass on optional frame for #name images */
+Image *BKE_add_image_file(const char *name, int frame)
{
Image *ima;
int file, len;
@@ -353,7 +352,7 @@ Image *BKE_add_image_file(const char *name)
BLI_strncpy(str, name, sizeof(str));
BLI_convertstringcode(str, G.sce);
- BLI_convertstringframe(str, G.scene->r.cfra); /* TODO - should this realy be here? */
+ BLI_convertstringframe(str, frame);
/* exists? */
file= open(str, O_BINARY|O_RDONLY);
@@ -365,7 +364,7 @@ Image *BKE_add_image_file(const char *name)
if(ima->source!=IMA_SRC_VIEWER && ima->source!=IMA_SRC_GENERATED) {
BLI_strncpy(strtest, ima->name, sizeof(ima->name));
BLI_convertstringcode(strtest, G.sce);
- BLI_convertstringframe(strtest, G.scene->r.cfra); /* TODO - should this be here? */
+ BLI_convertstringframe(strtest, frame);
if( strcmp(strtest, str)==0 ) {
if(ima->anim==NULL || ima->id.us==0) {
@@ -821,11 +820,11 @@ int BKE_imtype_is_movie(int imtype)
return 0;
}
-void BKE_add_image_extension(char *string, int imtype)
+void BKE_add_image_extension(Scene *scene, char *string, int imtype)
{
char *extension="";
- if(G.scene->r.imtype== R_IRIS) {
+ if(scene->r.imtype== R_IRIS) {
if(!BLI_testextensie(string, ".rgb"))
extension= ".rgb";
}
@@ -898,7 +897,7 @@ typedef struct StampData {
char strip[64];
} StampData;
-static void stampdata(StampData *stamp_data, int do_prefix)
+static void stampdata(Scene *scene, StampData *stamp_data, int do_prefix)
{
char text[256];
@@ -909,7 +908,7 @@ static void stampdata(StampData *stamp_data, int do_prefix)
char sdate[9];
#endif /* WIN32 */
- if (G.scene->r.stamp & R_STAMP_FILENAME) {
+ if (scene->r.stamp & R_STAMP_FILENAME) {
if (G.relbase_valid) {
if (do_prefix) sprintf(stamp_data->file, "File %s", G.sce);
else sprintf(stamp_data->file, "%s", G.sce);
@@ -922,14 +921,14 @@ static void stampdata(StampData *stamp_data, int do_prefix)
stamp_data->file[0] = '\0';
}
- if (G.scene->r.stamp & R_STAMP_NOTE) {
+ if (scene->r.stamp & R_STAMP_NOTE) {
/* Never do prefix for Note */
- sprintf(stamp_data->note, "%s", G.scene->r.stamp_udata);
+ sprintf(stamp_data->note, "%s", scene->r.stamp_udata);
} else {
stamp_data->note[0] = '\0';
}
- if (G.scene->r.stamp & R_STAMP_DATE) {
+ if (scene->r.stamp & R_STAMP_DATE) {
#ifdef WIN32
_strdate (sdate);
sprintf (text, "%s", sdate);
@@ -944,8 +943,8 @@ static void stampdata(StampData *stamp_data, int do_prefix)
stamp_data->date[0] = '\0';
}
- if (G.scene->r.stamp & R_STAMP_MARKER) {
- TimeMarker *marker = NULL; // XXX get_frame_marker(G.scene->r.cfra);
+ if (scene->r.stamp & R_STAMP_MARKER) {
+ TimeMarker *marker = NULL; // XXX get_frame_marker(scene->r.cfra);
if (marker) strcpy(text, marker->name);
else strcpy(text, "<none>");
@@ -956,11 +955,11 @@ static void stampdata(StampData *stamp_data, int do_prefix)
stamp_data->marker[0] = '\0';
}
- if (G.scene->r.stamp & R_STAMP_TIME) {
+ if (scene->r.stamp & R_STAMP_TIME) {
int h, m, s, f;
h= m= s= f= 0;
- f = (int)(G.scene->r.cfra % G.scene->r.frs_sec);
- s = (int)(G.scene->r.cfra / G.scene->r.frs_sec);
+ f = (int)(scene->r.cfra % scene->r.frs_sec);
+ s = (int)(scene->r.cfra / scene->r.frs_sec);
if (s) {
m = (int)(s / 60);
@@ -972,7 +971,7 @@ static void stampdata(StampData *stamp_data, int do_prefix)
}
}
- if (G.scene->r.frs_sec < 100)
+ if (scene->r.frs_sec < 100)
sprintf (text, "%02d:%02d:%02d.%02d", h, m, s, f);
else
sprintf (text, "%02d:%02d:%02d.%03d", h, m, s, f);
@@ -983,17 +982,17 @@ static void stampdata(StampData *stamp_data, int do_prefix)
stamp_data->time[0] = '\0';
}
- if (G.scene->r.stamp & R_STAMP_FRAME) {
+ if (scene->r.stamp & R_STAMP_FRAME) {
char format[32];
- if (do_prefix) sprintf(format, "Frame %%0%di\n", 1 + (int) log10(G.scene->r.efra));
- else sprintf(format, "%%0%di\n", 1 + (int) log10(G.scene->r.efra));
- sprintf (stamp_data->frame, format, G.scene->r.cfra);
+ if (do_prefix) sprintf(format, "Frame %%0%di\n", 1 + (int) log10(scene->r.efra));
+ else sprintf(format, "%%0%di\n", 1 + (int) log10(scene->r.efra));
+ sprintf (stamp_data->frame, format, scene->r.cfra);
} else {
stamp_data->frame[0] = '\0';
}
- if (G.scene->r.stamp & R_STAMP_CAMERA) {
- if (G.scene->camera) strcpy(text, ((Camera *) G.scene->camera)->id.name+2);
+ if (scene->r.stamp & R_STAMP_CAMERA) {
+ if (scene->camera) strcpy(text, ((Camera *) scene->camera)->id.name+2);
else strcpy(text, "<none>");
if (do_prefix) sprintf(stamp_data->camera, "Camera %s", text);
@@ -1002,15 +1001,15 @@ static void stampdata(StampData *stamp_data, int do_prefix)
stamp_data->camera[0] = '\0';
}
- if (G.scene->r.stamp & R_STAMP_SCENE) {
- if (do_prefix) sprintf(stamp_data->scene, "Scene %s", G.scene->id.name+2);
- else sprintf(stamp_data->scene, "%s", G.scene->id.name+2);
+ if (scene->r.stamp & R_STAMP_SCENE) {
+ if (do_prefix) sprintf(stamp_data->scene, "Scene %s", scene->id.name+2);
+ else sprintf(stamp_data->scene, "%s", scene->id.name+2);
} else {
stamp_data->scene[0] = '\0';
}
- if (G.scene->r.stamp & R_STAMP_SEQSTRIP) {
- Sequence *seq; //XXX = get_forground_frame_seq(G.scene->r.cfra);
+ if (scene->r.stamp & R_STAMP_SEQSTRIP) {
+ Sequence *seq; //XXX = get_forground_frame_seq(scene->r.cfra);
if (seq) strcpy(text, seq->name+2);
else strcpy(text, "<none>");
@@ -1022,7 +1021,7 @@ static void stampdata(StampData *stamp_data, int do_prefix)
}
}
-void BKE_stamp_buf(unsigned char *rect, float *rectf, int width, int height, int channels)
+void BKE_stamp_buf(Scene *scene, unsigned char *rect, float *rectf, int width, int height, int channels)
{
struct StampData stamp_data;
@@ -1035,9 +1034,9 @@ void BKE_stamp_buf(unsigned char *rect, float *rectf, int width, int height, int
if (!rect && !rectf)
return;
- stampdata(&stamp_data, 1);
+ stampdata(scene, &stamp_data, 1);
- switch (G.scene->r.stamp_font_id) {
+ switch (scene->r.stamp_font_id) {
case 1: /* tiny */
font = BMF_GetFont(BMF_kHelveticaBold8);
break;
@@ -1069,24 +1068,24 @@ void BKE_stamp_buf(unsigned char *rect, float *rectf, int width, int height, int
if (stamp_data.file[0]) {
/* Top left corner */
text_width = BMF_GetStringWidth(font, stamp_data.file);
- buf_rectfill_area(rect, rectf, width, height, G.scene->r.bg_stamp, x-1, y-1, x+text_width+text_pad+1, y+font_height+1);
- BMF_DrawStringBuf(font, stamp_data.file, x+(text_pad/2), y, G.scene->r.fg_stamp, rect, rectf, width, height, channels);
+ buf_rectfill_area(rect, rectf, width, height, scene->r.bg_stamp, x-1, y-1, x+text_width+text_pad+1, y+font_height+1);
+ BMF_DrawStringBuf(font, stamp_data.file, x+(text_pad/2), y, scene->r.fg_stamp, rect, rectf, width, height, channels);
y -= font_height+2; /* Top and bottom 1 pix padding each */
}
/* Top left corner, below File */
if (stamp_data.note[0]) {
text_width = BMF_GetStringWidth(font, stamp_data.note);
- buf_rectfill_area(rect, rectf, width, height, G.scene->r.bg_stamp, x-1, y-1, x+text_width+text_pad+1, y+font_height+1);
- BMF_DrawStringBuf(font, stamp_data.note, x+(text_pad/2), y, G.scene->r.fg_stamp, rect, rectf, width, height, channels);
+ buf_rectfill_area(rect, rectf, width, height, scene->r.bg_stamp, x-1, y-1, x+text_width+text_pad+1, y+font_height+1);
+ BMF_DrawStringBuf(font, stamp_data.note, x+(text_pad/2), y, scene->r.fg_stamp, rect, rectf, width, height, channels);
y -= font_height+2; /* Top and bottom 1 pix padding each */
}
/* Top left corner, below File (or Note) */
if (stamp_data.date[0]) {
text_width = BMF_GetStringWidth(font, stamp_data.date);
- buf_rectfill_area(rect, rectf, width, height, G.scene->r.bg_stamp, x-1, y-1, x+text_width+text_pad+1, y+font_height+1);
- BMF_DrawStringBuf(font, stamp_data.date, x+(text_pad/2), y, G.scene->r.fg_stamp, rect, rectf, width, height, channels);
+ buf_rectfill_area(rect, rectf, width, height, scene->r.bg_stamp, x-1, y-1, x+text_width+text_pad+1, y+font_height+1);
+ BMF_DrawStringBuf(font, stamp_data.date, x+(text_pad/2), y, scene->r.fg_stamp, rect, rectf, width, height, channels);
}
/* Bottom left corner, leaving space for timing */
@@ -1094,8 +1093,8 @@ void BKE_stamp_buf(unsigned char *rect, float *rectf, int width, int height, int
x = 1;
y = font_height+2+1; /* 2 for padding in TIME|FRAME fields below and 1 for padding in this one */
text_width = BMF_GetStringWidth(font, stamp_data.marker);
- buf_rectfill_area(rect, rectf, width, height, G.scene->r.bg_stamp, x-1, y-1, x+text_width+text_pad+1, y+font_height+1);
- BMF_DrawStringBuf(font, stamp_data.marker, x+(text_pad/2), y, G.scene->r.fg_stamp, rect, rectf, width, height, channels);
+ buf_rectfill_area(rect, rectf, width, height, scene->r.bg_stamp, x-1, y-1, x+text_width+text_pad+1, y+font_height+1);
+ BMF_DrawStringBuf(font, stamp_data.marker, x+(text_pad/2), y, scene->r.fg_stamp, rect, rectf, width, height, channels);
}
/* Left bottom corner */
@@ -1103,8 +1102,8 @@ void BKE_stamp_buf(unsigned char *rect, float *rectf, int width, int height, int
x = 1;
y = 1;
text_width = BMF_GetStringWidth(font, stamp_data.time);
- buf_rectfill_area(rect, rectf, width, height, G.scene->r.bg_stamp, x-1, y-1, x+text_width+text_pad+1, y+font_height+1);
- BMF_DrawStringBuf(font, stamp_data.time, x+(text_pad/2), y, G.scene->r.fg_stamp, rect, rectf, width, height, channels);
+ buf_rectfill_area(rect, rectf, width, height, scene->r.bg_stamp, x-1, y-1, x+text_width+text_pad+1, y+font_height+1);
+ BMF_DrawStringBuf(font, stamp_data.time, x+(text_pad/2), y, scene->r.fg_stamp, rect, rectf, width, height, channels);
x += text_width+text_pad+2; /* Both sides have 1 pix additional padding each */
}
@@ -1113,8 +1112,8 @@ void BKE_stamp_buf(unsigned char *rect, float *rectf, int width, int height, int
/* Left bottom corner (after SMPTE if exists) */
if (!stamp_data.time[0]) x = 1;
y = 1;
- buf_rectfill_area(rect, rectf, width, height, G.scene->r.bg_stamp, x-1, y-1, x+text_width+text_pad+1, y+font_height+1);
- BMF_DrawStringBuf(font, stamp_data.frame, x+(text_pad/2), y, G.scene->r.fg_stamp, rect, rectf, width, height, channels);
+ buf_rectfill_area(rect, rectf, width, height, scene->r.bg_stamp, x-1, y-1, x+text_width+text_pad+1, y+font_height+1);
+ BMF_DrawStringBuf(font, stamp_data.frame, x+(text_pad/2), y, scene->r.fg_stamp, rect, rectf, width, height, channels);
}
if (stamp_data.camera[0]) {
@@ -1122,8 +1121,8 @@ void BKE_stamp_buf(unsigned char *rect, float *rectf, int width, int height, int
/* Center of bottom edge */
x = (width/2) - (BMF_GetStringWidth(font, stamp_data.camera)/2);
y = 1;
- buf_rectfill_area(rect, rectf, width, height, G.scene->r.bg_stamp, x-1, y-1, x+text_width+text_pad+1, y+font_height+1);
- BMF_DrawStringBuf(font, stamp_data.camera, x+(text_pad/2), y, G.scene->r.fg_stamp, rect, rectf, width, height, channels);
+ buf_rectfill_area(rect, rectf, width, height, scene->r.bg_stamp, x-1, y-1, x+text_width+text_pad+1, y+font_height+1);
+ BMF_DrawStringBuf(font, stamp_data.camera, x+(text_pad/2), y, scene->r.fg_stamp, rect, rectf, width, height, channels);
}
if (stamp_data.scene[0]) {
@@ -1131,8 +1130,8 @@ void BKE_stamp_buf(unsigned char *rect, float *rectf, int width, int height, int
/* Bottom right corner */
x = width - (text_width+1+text_pad);
y = 1;
- buf_rectfill_area(rect, rectf, width, height, G.scene->r.bg_stamp, x-1, y-1, x+text_width+text_pad+1, y+font_height+1);
- BMF_DrawStringBuf(font, stamp_data.scene, x+(text_pad/2), y, G.scene->r.fg_stamp, rect, rectf, width, height, channels);
+ buf_rectfill_area(rect, rectf, width, height, scene->r.bg_stamp, x-1, y-1, x+text_width+text_pad+1, y+font_height+1);
+ BMF_DrawStringBuf(font, stamp_data.scene, x+(text_pad/2), y, scene->r.fg_stamp, rect, rectf, width, height, channels);
}
if (stamp_data.strip[0]) {
@@ -1140,20 +1139,20 @@ void BKE_stamp_buf(unsigned char *rect, float *rectf, int width, int height, int
/* Top right corner */
x = width - (text_width+1+text_pad);
y = height - font_height - 1;
- buf_rectfill_area(rect, rectf, width, height, G.scene->r.bg_stamp, x-1, y-1, x+text_width+text_pad+1, y+font_height+1);
- BMF_DrawStringBuf(font, stamp_data.strip, x+(text_pad/2), y, G.scene->r.fg_stamp, rect, rectf, width, height, channels);
+ buf_rectfill_area(rect, rectf, width, height, scene->r.bg_stamp, x-1, y-1, x+text_width+text_pad+1, y+font_height+1);
+ BMF_DrawStringBuf(font, stamp_data.strip, x+(text_pad/2), y, scene->r.fg_stamp, rect, rectf, width, height, channels);
}
}
-void BKE_stamp_info(struct ImBuf *ibuf)
+void BKE_stamp_info(Scene *scene, struct ImBuf *ibuf)
{
struct StampData stamp_data;
if (!ibuf) return;
/* fill all the data values, no prefix */
- stampdata(&stamp_data, 0);
+ stampdata(scene, &stamp_data, 0);
if (stamp_data.file[0]) IMB_imginfo_change_field (ibuf, "File", stamp_data.file);
if (stamp_data.note[0]) IMB_imginfo_change_field (ibuf, "Note", stamp_data.note);
@@ -1166,7 +1165,7 @@ void BKE_stamp_info(struct ImBuf *ibuf)
if (stamp_data.strip[0]) IMB_imginfo_change_field (ibuf, "Strip", stamp_data.strip);
}
-int BKE_write_ibuf(ImBuf *ibuf, char *name, int imtype, int subimtype, int quality)
+int BKE_write_ibuf(Scene *scene, ImBuf *ibuf, char *name, int imtype, int subimtype, int quality)
{
int ok;
@@ -1229,8 +1228,8 @@ int BKE_write_ibuf(ImBuf *ibuf, char *name, int imtype, int subimtype, int quali
BLI_make_existing_file(name);
- if(G.scene->r.scemode & R_STAMP_INFO)
- BKE_stamp_info(ibuf);
+ if(scene->r.scemode & R_STAMP_INFO)
+ BKE_stamp_info(scene, ibuf);
ok = IMB_saveiff(ibuf, name, IB_rect | IB_zbuf | IB_zbuffloat);
if (ok == 0) {
@@ -1241,7 +1240,7 @@ int BKE_write_ibuf(ImBuf *ibuf, char *name, int imtype, int subimtype, int quali
}
-void BKE_makepicstring(char *string, char *base, int frame, int imtype)
+void BKE_makepicstring(struct Scene *scene, char *string, char *base, int frame, int imtype)
{
if (string==NULL) return;
@@ -1254,8 +1253,8 @@ void BKE_makepicstring(char *string, char *base, int frame, int imtype)
BLI_convertstringcode(string, G.sce);
BLI_convertstringframe(string, frame);
- if(G.scene->r.scemode & R_EXTENSION)
- BKE_add_image_extension(string, imtype);
+ if(scene->r.scemode & R_EXTENSION)
+ BKE_add_image_extension(scene, string, imtype);
}
@@ -1426,12 +1425,12 @@ RenderPass *BKE_image_multilayer_index(RenderResult *rr, ImageUser *iuser)
return rpass;
}
-RenderResult *BKE_image_get_renderresult(Image *ima)
+RenderResult *BKE_image_get_renderresult(struct Scene *scene, Image *ima)
{
if(ima->rr)
return ima->rr;
if(ima->type==IMA_TYPE_R_RESULT)
- return RE_GetResult(RE_GetRender(G.scene->id.name));
+ return RE_GetResult(RE_GetRender(scene->id.name));
return NULL;
}
@@ -1736,7 +1735,10 @@ static ImBuf *image_get_ibuf_multilayer(Image *ima, ImageUser *iuser)
like exr, using layers etc */
static ImBuf *image_get_render_result(Image *ima, ImageUser *iuser)
{
- RenderResult *rr= RE_GetResult(RE_GetRender(G.scene->id.name));
+ RenderResult *rr= NULL;
+
+ if(iuser->scene)
+ rr= RE_GetResult(RE_GetRender(iuser->scene->id.name));
if(rr) {
RenderResult rres;
@@ -1750,10 +1752,10 @@ static ImBuf *image_get_render_result(Image *ima, ImageUser *iuser)
pass= (iuser)? iuser->pass: 0;
/* this gives active layer, composite or seqence result */
- RE_GetResultImage(RE_GetRender(G.scene->id.name), &rres);
+ RE_GetResultImage(RE_GetRender(iuser->scene->id.name), &rres);
rect= (unsigned int *)rres.rect32;
rectf= rres.rectf;
- dither= G.scene->r.dither_intensity;
+ dither= iuser->scene->r.dither_intensity;
/* get compo/seq result by default */
if(rr->rectf && layer==0);
@@ -1928,7 +1930,7 @@ ImBuf *BKE_image_get_ibuf(Image *ima, ImageUser *iuser)
else if(ima->source==IMA_SRC_FILE) {
if(ima->type==IMA_TYPE_IMAGE)
- ibuf= image_load_image_file(ima, iuser, G.scene->r.cfra); /* cfra only for '#', this global is OK */
+ ibuf= image_load_image_file(ima, iuser, frame); /* cfra only for '#', this global is OK */
/* no else; on load the ima type can change */
if(ima->type==IMA_TYPE_MULTILAYER)
/* keeps render result, stores ibufs in listbase, allows saving */
diff --git a/source/blender/blenkernel/intern/implicit.c b/source/blender/blenkernel/intern/implicit.c
index 93e35a4db06..40c98c1d9cc 100644
--- a/source/blender/blenkernel/intern/implicit.c
+++ b/source/blender/blenkernel/intern/implicit.c
@@ -1393,7 +1393,7 @@ float calculateVertexWindForce(float wind[3], float vertexnormal[3])
return (INPR(wind, vertexnormal));
}
-void cloth_calc_force(ClothModifierData *clmd, lfVector *lF, lfVector *lX, lfVector *lV, fmatrix3x3 *dFdV, fmatrix3x3 *dFdX, ListBase *effectors, float time, fmatrix3x3 *M)
+static void cloth_calc_force(ClothModifierData *clmd, float frame, lfVector *lF, lfVector *lX, lfVector *lV, fmatrix3x3 *dFdV, fmatrix3x3 *dFdX, ListBase *effectors, float time, fmatrix3x3 *M)
{
/* Collect forces and derivatives: F,dFdX,dFdV */
Cloth *cloth = clmd->clothObject;
@@ -1442,7 +1442,7 @@ void cloth_calc_force(ClothModifierData *clmd, lfVector *lF, lfVector *lX, lfVec
{
float speed[3] = {0.0f, 0.0f,0.0f};
- pdDoEffectors(effectors, lX[i], winvec[i], speed, (float)G.scene->r.cfra, 0.0f, 0);
+ pdDoEffectors(clmd->scene, effectors, lX[i], winvec[i], speed, frame, 0.0f, 0);
}
for(i = 0; i < cloth->numfaces; i++)
@@ -1570,8 +1570,8 @@ int implicit_solver (Object *ob, float frame, ClothModifierData *clmd, ListBase
while(step < tf)
{
// calculate forces
- effectors= pdInitEffectors(ob,NULL);
- cloth_calc_force(clmd, id->F, id->X, id->V, id->dFdV, id->dFdX, effectors, step, id->M);
+ effectors= pdInitEffectors(clmd->scene, ob, NULL);
+ cloth_calc_force(clmd, frame, id->F, id->X, id->V, id->dFdV, id->dFdX, effectors, step, id->M);
if(effectors) pdEndEffectors(effectors);
// calculate new velocity
@@ -1648,8 +1648,8 @@ int implicit_solver (Object *ob, float frame, ClothModifierData *clmd, ListBase
cp_lfvector(id->V, id->Vnew, numverts);
// calculate
- effectors= pdInitEffectors(ob,NULL);
- cloth_calc_force(clmd, id->F, id->X, id->V, id->dFdV, id->dFdX, effectors, step+dt, id->M);
+ effectors= pdInitEffectors(clmd->scene, ob, NULL);
+ cloth_calc_force(clmd, frame, id->F, id->X, id->V, id->dFdV, id->dFdX, effectors, step+dt, id->M);
if(effectors) pdEndEffectors(effectors);
simulate_implicit_euler(id->Vnew, id->X, id->V, id->F, id->dFdV, id->dFdX, dt / 2.0f, id->A, id->B, id->dV, id->S, id->z, id->olddV, id->P, id->Pinv, id->M, id->bigI);
diff --git a/source/blender/blenkernel/intern/ipo.c b/source/blender/blenkernel/intern/ipo.c
index e5c58860cf5..de374587f4e 100644
--- a/source/blender/blenkernel/intern/ipo.c
+++ b/source/blender/blenkernel/intern/ipo.c
@@ -233,27 +233,27 @@ void free_ipo (Ipo *ipo)
/* ---------------------- Init --------------------------- */
/* on adding new ipos, or for empty views */
-void ipo_default_v2d_cur (int blocktype, rctf *cur)
+void ipo_default_v2d_cur (Scene *scene, int blocktype, rctf *cur)
{
switch (blocktype) {
case ID_CA:
- cur->xmin= (float)G.scene->r.sfra;
- cur->xmax= (float)G.scene->r.efra;
+ cur->xmin= (float)scene->r.sfra;
+ cur->xmax= (float)scene->r.efra;
cur->ymin= 0.0f;
cur->ymax= 100.0f;
break;
case ID_MA: case ID_WO: case ID_LA:
case ID_CU: case ID_CO:
- cur->xmin= (float)(G.scene->r.sfra - 0.1f);
- cur->xmax= (float)G.scene->r.efra;
+ cur->xmin= (float)(scene->r.sfra - 0.1f);
+ cur->xmax= (float)scene->r.efra;
cur->ymin= (float)-0.1f;
cur->ymax= (float)+1.1f;
break;
case ID_TE:
- cur->xmin= (float)(G.scene->r.sfra - 0.1f);
- cur->xmax= (float)G.scene->r.efra;
+ cur->xmin= (float)(scene->r.sfra - 0.1f);
+ cur->xmax= (float)scene->r.efra;
cur->ymin= (float)-0.1f;
cur->ymax= (float)+1.1f;
break;
@@ -266,15 +266,15 @@ void ipo_default_v2d_cur (int blocktype, rctf *cur)
break;
case ID_KE:
- cur->xmin= (float)(G.scene->r.sfra - 0.1f);
- cur->xmax= (float)G.scene->r.efra;
+ cur->xmin= (float)(scene->r.sfra - 0.1f);
+ cur->xmax= (float)scene->r.efra;
cur->ymin= (float)-0.1f;
cur->ymax= (float)+2.1f;
break;
default: /* ID_OB and everything else */
- cur->xmin= (float)G.scene->r.sfra;
- cur->xmax= (float)G.scene->r.efra;
+ cur->xmin= (float)scene->r.sfra;
+ cur->xmax= (float)scene->r.efra;
cur->ymin= -5.0f;
cur->ymax= +5.0f;
break;
@@ -282,13 +282,13 @@ void ipo_default_v2d_cur (int blocktype, rctf *cur)
}
/* create a new IPO block (allocates the block) */
-Ipo *add_ipo (char name[], int blocktype)
+Ipo *add_ipo (Scene *scene, char name[], int blocktype)
{
Ipo *ipo;
ipo= alloc_libblock(&G.main->ipo, ID_IP, name);
ipo->blocktype= blocktype;
- ipo_default_v2d_cur(blocktype, &ipo->cur);
+ if(scene) ipo_default_v2d_cur(scene, blocktype, &ipo->cur);
return ipo;
}
@@ -572,7 +572,7 @@ void make_cfra_list (Ipo *ipo, ListBase *elems)
* rendering. Thus, the use of ugly globals from object.c
*/
// BAD... EVIL... JUJU...!!!!
-float frame_to_float (int cfra) /* see also bsystem_time in object.c */
+float frame_to_float (Scene *scene, int cfra) /* see also bsystem_time in object.c */
{
extern float bluroffs; /* bad stuff borrowed from object.c */
extern float fieldoffs;
@@ -580,7 +580,7 @@ float frame_to_float (int cfra) /* see also bsystem_time in object.c */
ctime= (float)cfra;
ctime+= bluroffs+fieldoffs;
- ctime*= G.scene->r.framelen;
+ ctime*= scene->r.framelen;
return ctime;
}
@@ -1513,26 +1513,26 @@ void execute_action_ipo (bActionChannel *achan, bPoseChannel *pchan)
/* Calculate values for given IPO block, then flush to all of block's users
* - for general usage
*/
-void do_ipo (Ipo *ipo)
+void do_ipo (Scene *scene, Ipo *ipo)
{
if (ipo) {
- float ctime= frame_to_float(G.scene->r.cfra);
+ float ctime= frame_to_float(scene, scene->r.cfra);
/* calculate values, then flush to all users of this IPO block */
calc_ipo(ipo, ctime);
- do_ipo_nocalc(ipo);
+ do_ipo_nocalc(scene, ipo);
}
}
/* Calculate values for given Material's IPO block, then flush to given Material only */
-void do_mat_ipo (Material *ma)
+void do_mat_ipo (Scene *scene, Material *ma)
{
float ctime;
if (ELEM(NULL, ma, ma->ipo))
return;
- ctime= frame_to_float(G.scene->r.cfra);
+ ctime= frame_to_float(scene, scene->r.cfra);
/* if(ob->ipoflag & OB_OFFS_OB) ctime-= ob->sf; */
/* calculate values for current time, then flush values to given material only */
@@ -1543,7 +1543,7 @@ void do_mat_ipo (Material *ma)
/* Calculate values for given Object's IPO block, then flush to given Object only
* - there's also some funky stuff that looks like it's for scene layers
*/
-void do_ob_ipo (Object *ob)
+void do_ob_ipo (Scene *scene, Object *ob)
{
float ctime;
unsigned int lay;
@@ -1552,7 +1552,7 @@ void do_ob_ipo (Object *ob)
return;
/* do not set ob->ctime here: for example when parent in invisible layer */
- ctime= bsystem_time(ob, (float) G.scene->r.cfra, 0.0);
+ ctime= bsystem_time(scene, ob, (float) scene->r.cfra, 0.0);
/* calculate values of */
calc_ipo(ob->ipo, ctime);
@@ -1566,8 +1566,8 @@ void do_ob_ipo (Object *ob)
/* hack: for layer animation??? - is this what this is? (Aligorith, 28Sep2008) */
ob->lay |= lay;
if ((ob->id.name[2]=='S') && (ob->id.name[3]=='C') && (ob->id.name[4]=='E')) {
- if (strcmp(G.scene->id.name+2, ob->id.name+6)==0) {
- G.scene->lay= ob->lay;
+ if (strcmp(scene->id.name+2, ob->id.name+6)==0) {
+ scene->lay= ob->lay;
//XXX copy_view3d_lock(0);
/* no redraw here! creates too many calls */
}
@@ -1594,18 +1594,18 @@ void do_ob_ipodrivers (Object *ob, Ipo *ipo, float ctime)
}
/* Special variation to calculate IPO values for Sequence + perform other stuff */
-void do_seq_ipo (Sequence *seq, int cfra)
+void do_seq_ipo (Scene *scene, Sequence *seq, int cfra)
{
float ctime, div;
/* seq_ipo has an exception: calc both fields immediately */
if (seq->ipo) {
if ((seq->flag & SEQ_IPO_FRAME_LOCKED) != 0) {
- ctime = frame_to_float(cfra);
+ ctime = frame_to_float(scene, cfra);
div = 1.0;
}
else {
- ctime= frame_to_float(cfra - seq->startdisp);
+ ctime= frame_to_float(scene, cfra - seq->startdisp);
div= (seq->enddisp - seq->startdisp) / 100.0f;
if (div == 0.0) return;
}
@@ -1629,7 +1629,7 @@ void do_seq_ipo (Sequence *seq, int cfra)
/* exception: it does calc for objects...
* now find out why this routine was used anyway!
*/
-void do_ipo_nocalc (Ipo *ipo)
+void do_ipo_nocalc (struct Scene *scene, Ipo *ipo)
{
Object *ob;
Material *ma;
@@ -1648,7 +1648,7 @@ void do_ipo_nocalc (Ipo *ipo)
switch (ipo->blocktype) {
case ID_OB:
for (ob= G.main->object.first; ob; ob= ob->id.next) {
- if (ob->ipo == ipo) do_ob_ipo(ob);
+ if (ob->ipo == ipo) do_ob_ipo(scene, ob);
}
break;
case ID_MA:
@@ -1688,7 +1688,7 @@ void do_ipo_nocalc (Ipo *ipo)
* with datablocks being calculated in alphabetical order
* - called on scene_update_for_newframe() only
*/
-void do_all_data_ipos ()
+void do_all_data_ipos (Scene *scene)
{
Material *ma;
Tex *tex;
@@ -1703,26 +1703,26 @@ void do_all_data_ipos ()
Base *base;
float ctime;
- ctime= frame_to_float(G.scene->r.cfra);
+ ctime= frame_to_float(scene, scene->r.cfra);
/* this exception cannot be depgraphed yet... what todo with objects in other layers?... */
- for (base= G.scene->base.first; base; base= base->next) {
+ for (base= scene->base.first; base; base= base->next) {
Object *ob= base->object;
/* only update layer when an ipo */
if (has_ipo_code(ob->ipo, OB_LAY)) {
- do_ob_ipo(ob);
+ do_ob_ipo(scene, ob);
base->lay= ob->lay;
}
}
/* layers for the set...*/
- if (G.scene->set) {
- for (base= G.scene->set->base.first; base; base= base->next) {
+ if (scene->set) {
+ for (base= scene->set->base.first; base; base= base->next) {
Object *ob= base->object;
if (has_ipo_code(ob->ipo, OB_LAY)) {
- do_ob_ipo(ob);
+ do_ob_ipo(scene, ob);
base->lay= ob->lay;
}
}
@@ -1771,15 +1771,15 @@ void do_all_data_ipos ()
}
/* Sequencer: process FAC Ipos used as volume envelopes */
- ed= G.scene->ed;
+ ed= scene->ed;
if (ed) {
for (seq= ed->seqbasep->first; seq; seq= seq->next) {
if ( ((seq->type == SEQ_RAM_SOUND) || (seq->type == SEQ_HD_SOUND)) &&
- (seq->startdisp <= G.scene->r.cfra+2) &&
- (seq->enddisp>G.scene->r.cfra) &&
+ (seq->startdisp <= scene->r.cfra+2) &&
+ (seq->enddisp>scene->r.cfra) &&
(seq->ipo) )
{
- do_seq_ipo(seq, G.scene->r.cfra);
+ do_seq_ipo(scene, seq, scene->r.cfra);
}
}
}
diff --git a/source/blender/blenkernel/intern/key.c b/source/blender/blenkernel/intern/key.c
index 5540a262a1d..baf6e4630ee 100644
--- a/source/blender/blenkernel/intern/key.c
+++ b/source/blender/blenkernel/intern/key.c
@@ -993,7 +993,7 @@ static float *get_weights_array(Object *ob, char *vgroup)
return NULL;
}
-static int do_mesh_key(Object *ob, Mesh *me)
+static int do_mesh_key(Scene *scene, Object *ob, Mesh *me)
{
KeyBlock *k[4];
float cfra, ctime, t[4], delta, loc[3], size[3];
@@ -1017,11 +1017,11 @@ static int do_mesh_key(Object *ob, Mesh *me)
/* in do_key and cp_key the case a>tot is handled */
}
- cfra= G.scene->r.cfra;
+ cfra= scene->r.cfra;
for(a=0; a<me->totvert; a+=step, cfra+= delta) {
- ctime= bsystem_time(0, cfra, 0.0);
+ ctime= bsystem_time(scene, 0, cfra, 0.0);
if(calc_ipo_spec(me->key->ipo, KEY_SPEED, &ctime)==0) {
ctime /= 100.0;
CLAMP(ctime, 0.0, 1.0);
@@ -1056,7 +1056,7 @@ static int do_mesh_key(Object *ob, Mesh *me)
}
}
else {
- ctime= bsystem_time(ob, G.scene->r.cfra, 0.0);
+ ctime= bsystem_time(scene, ob, scene->r.cfra, 0.0);
if(calc_ipo_spec(me->key->ipo, KEY_SPEED, &ctime)==0) {
ctime /= 100.0;
@@ -1149,7 +1149,7 @@ static void do_rel_cu_key(Curve *cu, float ctime)
}
}
-static int do_curve_key(Curve *cu)
+static int do_curve_key(Scene *scene, Curve *cu)
{
KeyBlock *k[4];
float cfra, ctime, t[4], delta;
@@ -1172,11 +1172,11 @@ static int do_curve_key(Curve *cu)
/* in do_key and cp_key the case a>tot has been handled */
}
- cfra= G.scene->r.cfra;
+ cfra= scene->r.cfra;
for(a=0; a<tot; a+=step, cfra+= delta) {
- ctime= bsystem_time(0, cfra, 0.0);
+ ctime= bsystem_time(scene, 0, cfra, 0.0);
if(calc_ipo_spec(cu->key->ipo, KEY_SPEED, &ctime)==0) {
ctime /= 100.0;
CLAMP(ctime, 0.0, 1.0);
@@ -1198,7 +1198,7 @@ static int do_curve_key(Curve *cu)
}
else {
- ctime= bsystem_time(NULL, (float)G.scene->r.cfra, 0.0);
+ ctime= bsystem_time(scene, NULL, (float)scene->r.cfra, 0.0);
if(cu->key->type==KEY_RELATIVE) {
do_rel_cu_key(cu, ctime);
@@ -1221,7 +1221,7 @@ static int do_curve_key(Curve *cu)
return 1;
}
-static int do_latt_key(Object *ob, Lattice *lt)
+static int do_latt_key(Scene *scene, Object *ob, Lattice *lt)
{
KeyBlock *k[4];
float delta, cfra, ctime, t[4];
@@ -1236,11 +1236,11 @@ static int do_latt_key(Object *ob, Lattice *lt)
delta= lt->key->slurph;
delta/= (float)tot;
- cfra= G.scene->r.cfra;
+ cfra= scene->r.cfra;
for(a=0; a<tot; a++, cfra+= delta) {
- ctime= bsystem_time(0, cfra, 0.0);
+ ctime= bsystem_time(scene, 0, cfra, 0.0);
if(calc_ipo_spec(lt->key->ipo, KEY_SPEED, &ctime)==0) {
ctime /= 100.0;
CLAMP(ctime, 0.0, 1.0);
@@ -1257,7 +1257,7 @@ static int do_latt_key(Object *ob, Lattice *lt)
}
}
else {
- ctime= bsystem_time(NULL, (float)G.scene->r.cfra, 0.0);
+ ctime= bsystem_time(scene, NULL, (float)scene->r.cfra, 0.0);
if(lt->key->type==KEY_RELATIVE) {
KeyBlock *kb;
@@ -1294,7 +1294,7 @@ static int do_latt_key(Object *ob, Lattice *lt)
}
/* returns 1 when key applied */
-int do_ob_key(Object *ob)
+int do_ob_key(Scene *scene, Object *ob)
{
Key *key= ob_get_key(ob);
@@ -1339,16 +1339,16 @@ int do_ob_key(Object *ob)
}
else {
if(ob->ipoflag & OB_ACTION_KEY)
- do_all_object_actions(ob);
+ do_all_object_actions(scene, ob);
else {
- calc_ipo(key->ipo, bsystem_time(ob, G.scene->r.cfra, 0.0));
+ calc_ipo(key->ipo, bsystem_time(scene, ob, scene->r.cfra, 0.0));
execute_ipo((ID *)key, key->ipo);
}
- if(ob->type==OB_MESH) return do_mesh_key(ob, ob->data);
- else if(ob->type==OB_CURVE) return do_curve_key( ob->data);
- else if(ob->type==OB_SURF) return do_curve_key( ob->data);
- else if(ob->type==OB_LATTICE) return do_latt_key(ob, ob->data);
+ if(ob->type==OB_MESH) return do_mesh_key(scene, ob, ob->data);
+ else if(ob->type==OB_CURVE) return do_curve_key(scene, ob->data);
+ else if(ob->type==OB_SURF) return do_curve_key(scene, ob->data);
+ else if(ob->type==OB_LATTICE) return do_latt_key(scene, ob, ob->data);
}
return 0;
diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c
index d397279e63e..48e931229b6 100644
--- a/source/blender/blenkernel/intern/lattice.c
+++ b/source/blender/blenkernel/intern/lattice.c
@@ -517,7 +517,7 @@ static int where_on_path_deform(Object *ob, float ctime, float *vec, float *dir)
/* co: local coord, result local too */
/* returns quaternion for rotation, using cd->no_rot_axis */
/* axis is using another define!!! */
-static int calc_curve_deform(Object *par, float *co, short axis, CurveDeform *cd, float *quatp)
+static int calc_curve_deform(Scene *scene, Object *par, float *co, short axis, CurveDeform *cd, float *quatp)
{
Curve *cu= par->data;
float fac, loc[4], dir[3], cent[3];
@@ -546,7 +546,7 @@ static int calc_curve_deform(Object *par, float *co, short axis, CurveDeform *cd
}
/* to be sure, mostly after file load */
if(cu->path==NULL) {
- makeDispListCurveTypes(par, 0);
+ makeDispListCurveTypes(scene, par, 0);
if(cu->path==NULL) return 0; // happens on append...
}
@@ -607,7 +607,7 @@ static int calc_curve_deform(Object *par, float *co, short axis, CurveDeform *cd
return 0;
}
-void curve_deform_verts(Object *cuOb, Object *target, DerivedMesh *dm, float (*vertexCos)[3], int numVerts, char *vgroup, short defaxis)
+void curve_deform_verts(Scene *scene, Object *cuOb, Object *target, DerivedMesh *dm, float (*vertexCos)[3], int numVerts, char *vgroup, short defaxis)
{
Curve *cu;
int a, flag;
@@ -673,7 +673,7 @@ void curve_deform_verts(Object *cuOb, Object *target, DerivedMesh *dm, float (*v
for(j = 0; j < dvert->totweight; j++) {
if(dvert->dw[j].def_nr == index) {
VECCOPY(vec, vertexCos[a]);
- calc_curve_deform(cuOb, vec, defaxis, &cd, NULL);
+ calc_curve_deform(scene, cuOb, vec, defaxis, &cd, NULL);
VecLerpf(vertexCos[a], vertexCos[a], vec,
dvert->dw[j].weight);
Mat4MulVecfl(cd.objectspace, vertexCos[a]);
@@ -691,7 +691,7 @@ void curve_deform_verts(Object *cuOb, Object *target, DerivedMesh *dm, float (*v
}
for(a = 0; a < numVerts; a++) {
- calc_curve_deform(cuOb, vertexCos[a], defaxis, &cd, NULL);
+ calc_curve_deform(scene, cuOb, vertexCos[a], defaxis, &cd, NULL);
Mat4MulVecfl(cd.objectspace, vertexCos[a]);
}
}
@@ -701,7 +701,7 @@ void curve_deform_verts(Object *cuOb, Object *target, DerivedMesh *dm, float (*v
/* input vec and orco = local coord in armature space */
/* orco is original not-animated or deformed reference point */
/* result written in vec and mat */
-void curve_deform_vector(Object *cuOb, Object *target, float *orco, float *vec, float mat[][3], int no_rot_axis)
+void curve_deform_vector(Scene *scene, Object *cuOb, Object *target, float *orco, float *vec, float mat[][3], int no_rot_axis)
{
CurveDeform cd;
float quat[4];
@@ -719,7 +719,7 @@ void curve_deform_vector(Object *cuOb, Object *target, float *orco, float *vec,
Mat4MulVecfl(cd.curvespace, vec);
- if(calc_curve_deform(cuOb, vec, target->trackflag+1, &cd, quat)) {
+ if(calc_curve_deform(scene, cuOb, vec, target->trackflag+1, &cd, quat)) {
float qmat[3][3];
QuatToMat3(quat, qmat);
@@ -895,7 +895,7 @@ void lattice_applyVertexCos(struct Object *ob, float (*vertexCos)[3])
}
}
-void lattice_calc_modifiers(Object *ob)
+void lattice_calc_modifiers(Scene *scene, Object *ob)
{
Lattice *lt= ob->data;
ModifierData *md = modifiers_getVirtualModifierList(ob);
@@ -905,12 +905,14 @@ void lattice_calc_modifiers(Object *ob)
freedisplist(&ob->disp);
if (!editmode) {
- do_ob_key(ob);
+ do_ob_key(scene, ob);
}
for (; md; md=md->next) {
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
+ md->scene= scene;
+
if (!(md->mode&eModifierMode_Realtime)) continue;
if (editmode && !(md->mode&eModifierMode_Editmode)) continue;
if (mti->isDisabled && mti->isDisabled(md)) continue;
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index 4fd36806393..317ec5b4659 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -556,7 +556,7 @@ void free_libblock_us(ListBase *lb, void *idv) /* test users */
else printf("ERROR block %s users %d\n", id->name, id->us);
}
if(id->us==0) {
- if( GS(id->name)==ID_OB ) unlink_object((Object *)id);
+ if( GS(id->name)==ID_OB ) unlink_object(NULL, (Object *)id);
free_libblock(lb, id);
}
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index ccbc1cc17a1..d34bd02cbcd 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -849,21 +849,15 @@ void automatname(Material *ma)
}
-void delete_material_index()
+void delete_material_index(Object *ob)
{
Material *mao, ***matarar;
- Object *ob, *obt;
+ Object *obt;
Curve *cu;
Nurb *nu;
short *totcolp;
int a, actcol;
- // if(obedit) {
- //XXX error("Unable to perform function in EditMode");
- // return;
- // }
-
- ob= ((G.scene->basact)? (G.scene->basact->object) : 0) ;
if(ob==NULL || ob->totcol==0) return;
/* take a mesh/curve/mball as starting point, remove 1 index,
diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c
index 8914ebac4e0..3e881f2d871 100644
--- a/source/blender/blenkernel/intern/mball.c
+++ b/source/blender/blenkernel/intern/mball.c
@@ -285,7 +285,7 @@ int is_basis_mball(Object *ob)
* blended. MetaBalls with different basic name can't be
* blended.
*/
-Object *find_basis_mball(Object *basis)
+Object *find_basis_mball(Scene *scene, Object *basis)
{
Base *base;
Object *ob,*bob= basis;
@@ -296,8 +296,8 @@ Object *find_basis_mball(Object *basis)
splitIDname(basis->id.name+2, basisname, &basisnr);
totelem= 0;
- next_object(0, 0, 0);
- while(next_object(1, &base, &ob)) {
+ next_object(scene, 0, 0, 0);
+ while(next_object(scene, 1, &base, &ob)) {
if (ob->type==OB_MBALL) {
if(ob==bob){
@@ -1451,7 +1451,7 @@ void polygonize(PROCESS *mbproc, MetaBall *mb)
}
}
-float init_meta(Object *ob) /* return totsize */
+float init_meta(Scene *scene, Object *ob) /* return totsize */
{
Base *base;
Object *bob;
@@ -1470,8 +1470,8 @@ float init_meta(Object *ob) /* return totsize */
/* make main array */
- next_object(0, 0, 0);
- while(next_object(1, &base, &bob)) {
+ next_object(scene, 0, 0, 0);
+ while(next_object(scene, 1, &base, &bob)) {
if(bob->type==OB_MBALL) {
zero_size= 0;
@@ -2034,7 +2034,7 @@ void init_metaball_octal_tree(int depth)
subdivide_metaball_octal_node(node, size[0], size[1], size[2], metaball_tree->depth);
}
-void metaball_polygonize(Object *ob)
+void metaball_polygonize(Scene *scene, Object *ob)
{
PROCESS mbproc;
MetaBall *mb;
@@ -2057,7 +2057,7 @@ void metaball_polygonize(Object *ob)
mainb= MEM_mallocN(sizeof(void *)*totelem, "mainb");
/* initialize all mainb (MetaElems) */
- totsize= init_meta(ob);
+ totsize= init_meta(scene, ob);
if(metaball_tree){
free_metaball_octal_node(metaball_tree->first);
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index f531c2c5337..b41f82bbcf8 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -24,9 +24,7 @@
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
* All rights reserved.
*
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
+ * Contributor(s): Blender Foundation
*
* ***** END GPL LICENSE BLOCK *****
*/
@@ -952,7 +950,8 @@ void nurbs_to_mesh(Object *ob)
}
-void mesh_delete_material_index(Mesh *me, int index) {
+void mesh_delete_material_index(Mesh *me, int index)
+{
int i;
for (i=0; i<me->totface; i++) {
@@ -962,7 +961,8 @@ void mesh_delete_material_index(Mesh *me, int index) {
}
}
-void mesh_set_smooth_flag(Object *meshOb, int enableSmooth) {
+void mesh_set_smooth_flag(Object *meshOb, int enableSmooth)
+{
Mesh *me = meshOb->data;
int i;
@@ -976,7 +976,7 @@ void mesh_set_smooth_flag(Object *meshOb, int enableSmooth) {
}
}
- DAG_object_flush_update(G.scene, meshOb, OB_RECALC_DATA);
+// XXX do this in caller DAG_object_flush_update(scene, meshOb, OB_RECALC_DATA);
}
void mesh_calc_normals(MVert *mverts, int numVerts, MFace *mfaces, int numFaces, float **faceNors_r)
@@ -1246,7 +1246,7 @@ void mesh_pmv_revert(Object *ob, Mesh *me)
MEM_freeN(me->pv->vert_map);
me->pv->vert_map= NULL;
- DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
+// XXX do this in caller DAG_object_flush_update(scene, ob, OB_RECALC_DATA);
}
}
diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c
index 30f065a40a0..fc016f0f130 100644
--- a/source/blender/blenkernel/intern/modifier.c
+++ b/source/blender/blenkernel/intern/modifier.c
@@ -20,8 +20,6 @@
* The Original Code is Copyright (C) 2005 by the Blender Foundation.
* All rights reserved.
*
-* The Original Code is: all of this file.
-*
* Contributor(s): Daniel Dunbar
* Ton Roosendaal,
* Ben Batt,
@@ -170,7 +168,7 @@ static void curveModifier_foreachObjectLink(
}
static void curveModifier_updateDepgraph(
- ModifierData *md, DagForest *forest,
+ ModifierData *md, DagForest *forest, Scene *scene,
Object *ob, DagNode *obNode)
{
CurveModifierData *cmd = (CurveModifierData*) md;
@@ -189,7 +187,7 @@ static void curveModifier_deformVerts(
{
CurveModifierData *cmd = (CurveModifierData*) md;
- curve_deform_verts(cmd->object, ob, derivedData, vertexCos, numVerts,
+ curve_deform_verts(md->scene, cmd->object, ob, derivedData, vertexCos, numVerts,
cmd->name, cmd->defaxis);
}
@@ -245,7 +243,7 @@ static void latticeModifier_foreachObjectLink(
walk(userData, ob, &lmd->object);
}
-static void latticeModifier_updateDepgraph(ModifierData *md, DagForest *forest,
+static void latticeModifier_updateDepgraph(ModifierData *md, DagForest *forest, Scene *scene,
Object *ob, DagNode *obNode)
{
LatticeModifierData *lmd = (LatticeModifierData*) md;
@@ -421,10 +419,10 @@ static DerivedMesh *buildModifier_applyModifier(ModifierData *md, Object *ob,
for(i = 0; i < maxFaces; ++i) faceMap[i] = i;
if (ob) {
- frac = bsystem_time(ob, (float)G.scene->r.cfra,
+ frac = bsystem_time(md->scene, ob, md->scene->r.cfra,
bmd->start - 1.0f) / bmd->length;
} else {
- frac = G.scene->r.cfra - bmd->start / bmd->length;
+ frac = md->scene->r.cfra - bmd->start / bmd->length;
}
CLAMP(frac, 0.0, 1.0);
@@ -614,7 +612,7 @@ static void maskModifier_foreachObjectLink(
walk(userData, ob, &mmd->ob_arm);
}
-static void maskModifier_updateDepgraph(ModifierData *md, DagForest *forest,
+static void maskModifier_updateDepgraph(ModifierData *md, DagForest *forest, Scene *scene,
Object *ob, DagNode *obNode)
{
MaskModifierData *mmd = (MaskModifierData *)md;
@@ -1000,7 +998,7 @@ static void arrayModifier_foreachObjectLink(
walk(userData, ob, &amd->offset_ob);
}
-static void arrayModifier_updateDepgraph(ModifierData *md, DagForest *forest,
+static void arrayModifier_updateDepgraph(ModifierData *md, DagForest *forest, Scene *scene,
Object *ob, DagNode *obNode)
{
ArrayModifierData *amd = (ArrayModifierData*) md;
@@ -1089,7 +1087,7 @@ static int calc_mapping(IndexMapEntry *indexMap, int oldIndex, int copyNum)
}
static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd,
- Object *ob, DerivedMesh *dm,
+ Scene *scene, Object *ob, DerivedMesh *dm,
int initFlags)
{
int i, j;
@@ -1113,9 +1111,9 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd,
/* need to avoid infinite recursion here */
if(amd->start_cap && amd->start_cap != ob)
- start_cap = mesh_get_derived_final(amd->start_cap, CD_MASK_MESH);
+ start_cap = mesh_get_derived_final(scene, amd->start_cap, CD_MASK_MESH);
if(amd->end_cap && amd->end_cap != ob)
- end_cap = mesh_get_derived_final(amd->end_cap, CD_MASK_MESH);
+ end_cap = mesh_get_derived_final(scene, amd->end_cap, CD_MASK_MESH);
MTC_Mat4One(offset);
@@ -1160,7 +1158,7 @@ static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd,
if(!cu->path) {
cu->flag |= CU_PATH; // needed for path & bevlist
- makeDispListCurveTypes(amd->curve_ob, 0);
+ makeDispListCurveTypes(scene, amd->curve_ob, 0);
}
if(cu->path)
length = scale*cu->path->totdist;
@@ -1636,7 +1634,7 @@ static DerivedMesh *arrayModifier_applyModifier(
DerivedMesh *result;
ArrayModifierData *amd = (ArrayModifierData*) md;
- result = arrayModifier_doArray(amd, ob, derivedData, 0);
+ result = arrayModifier_doArray(amd, md->scene, ob, derivedData, 0);
if(result != derivedData)
CDDM_calc_normals(result);
@@ -1683,7 +1681,7 @@ static void mirrorModifier_foreachObjectLink(
walk(userData, ob, &mmd->mirror_ob);
}
-static void mirrorModifier_updateDepgraph(ModifierData *md, DagForest *forest,
+static void mirrorModifier_updateDepgraph(ModifierData *md, DagForest *forest, Scene *scene,
Object *ob, DagNode *obNode)
{
MirrorModifierData *mmd = (MirrorModifierData*) md;
@@ -3462,7 +3460,7 @@ static int displaceModifier_isDisabled(ModifierData *md)
}
static void displaceModifier_updateDepgraph(
- ModifierData *md, DagForest *forest,
+ ModifierData *md, DagForest *forest, Scene *scene,
Object *ob, DagNode *obNode)
{
DisplaceModifierData *dmd = (DisplaceModifierData*) md;
@@ -3783,7 +3781,7 @@ static void uvprojectModifier_foreachIDLink(ModifierData *md, Object *ob,
}
static void uvprojectModifier_updateDepgraph(ModifierData *md,
- DagForest *forest, Object *ob, DagNode *obNode)
+ DagForest *forest, Scene *scene, Object *ob, DagNode *obNode)
{
UVProjectModifierData *umd = (UVProjectModifierData*) md;
int i;
@@ -4465,7 +4463,7 @@ static void castModifier_foreachObjectLink(
}
static void castModifier_updateDepgraph(
- ModifierData *md, DagForest *forest, Object *ob,
+ ModifierData *md, DagForest *forest, Scene *scene, Object *ob,
DagNode *obNode)
{
CastModifierData *cmd = (CastModifierData*) md;
@@ -5054,7 +5052,7 @@ static void waveModifier_foreachIDLink(ModifierData *md, Object *ob,
}
static void waveModifier_updateDepgraph(
- ModifierData *md, DagForest *forest, Object *ob,
+ ModifierData *md, DagForest *forest, Scene *scene, Object *ob,
DagNode *obNode)
{
WaveModifierData *wmd = (WaveModifierData*) md;
@@ -5179,15 +5177,15 @@ static void wavemod_get_texture_coords(WaveModifierData *wmd, Object *ob,
}
}
-static void waveModifier_do(
- WaveModifierData *md, Object *ob, DerivedMesh *dm,
+static void waveModifier_do(WaveModifierData *md,
+ Scene *scene, Object *ob, DerivedMesh *dm,
float (*vertexCos)[3], int numVerts)
{
WaveModifierData *wmd = (WaveModifierData*) md;
MVert *mvert = NULL;
MDeformVert *dvert = NULL;
int defgrp_index;
- float ctime = bsystem_time(ob, (float)G.scene->r.cfra, 0.0);
+ float ctime = bsystem_time(scene, ob, (float)scene->r.cfra, 0.0);
float minfac =
(float)(1.0 / exp(wmd->width * wmd->narrow * wmd->width * wmd->narrow));
float lifefac = wmd->height;
@@ -5365,7 +5363,7 @@ static void waveModifier_deformVerts(
CDDM_calc_normals(dm);
}
- waveModifier_do(wmd, ob, dm, vertexCos, numVerts);
+ waveModifier_do(wmd, md->scene, ob, dm, vertexCos, numVerts);
if(dm != derivedData) dm->release(dm);
}
@@ -5387,7 +5385,7 @@ static void waveModifier_deformVertsEM(
CDDM_calc_normals(dm);
}
- waveModifier_do(wmd, ob, dm, vertexCos, numVerts);
+ waveModifier_do(wmd, md->scene, ob, dm, vertexCos, numVerts);
if(dm != derivedData) dm->release(dm);
}
@@ -5439,7 +5437,7 @@ static void armatureModifier_foreachObjectLink(
}
static void armatureModifier_updateDepgraph(
- ModifierData *md, DagForest *forest, Object *ob,
+ ModifierData *md, DagForest *forest, Scene *scene, Object *ob,
DagNode *obNode)
{
ArmatureModifierData *amd = (ArmatureModifierData*) md;
@@ -5560,7 +5558,7 @@ static void hookModifier_foreachObjectLink(
walk(userData, ob, &hmd->object);
}
-static void hookModifier_updateDepgraph(ModifierData *md, DagForest *forest,
+static void hookModifier_updateDepgraph(ModifierData *md, DagForest *forest, Scene *scene,
Object *ob, DagNode *obNode)
{
HookModifierData *hmd = (HookModifierData*) md;
@@ -5707,7 +5705,7 @@ static void softbodyModifier_deformVerts(
ModifierData *md, Object *ob, DerivedMesh *derivedData,
float (*vertexCos)[3], int numVerts)
{
- sbObjectStep(ob, (float)G.scene->r.cfra, vertexCos, numVerts);
+ sbObjectStep(md->scene, ob, (float)md->scene->r.cfra, vertexCos, numVerts);
}
static int softbodyModifier_dependsOnTime(ModifierData *md)
@@ -5748,7 +5746,7 @@ static DerivedMesh *clothModifier_applyModifier(ModifierData *md, Object *ob,
return derivedData;
}
- result = clothModifier_do(clmd, ob, derivedData, useRenderParams, isFinalCalc);
+ result = clothModifier_do(clmd, md->scene, ob, derivedData, useRenderParams, isFinalCalc);
if(result)
{
@@ -5759,7 +5757,7 @@ static DerivedMesh *clothModifier_applyModifier(ModifierData *md, Object *ob,
}
static void clothModifier_updateDepgraph(
- ModifierData *md, DagForest *forest, Object *ob,
+ ModifierData *md, DagForest *forest, Scene *scene, Object *ob,
DagNode *obNode)
{
ClothModifierData *clmd = (ClothModifierData*) md;
@@ -5768,7 +5766,7 @@ static void clothModifier_updateDepgraph(
if(clmd)
{
- for(base = G.scene->base.first; base; base= base->next)
+ for(base = scene->base.first; base; base= base->next)
{
Object *ob1= base->object;
if(ob1 != ob)
@@ -5916,7 +5914,7 @@ static void collisionModifier_deformVerts(
CDDM_apply_vert_coords(dm, vertexCos);
CDDM_calc_normals(dm);
- current_time = bsystem_time ( ob, ( float ) G.scene->r.cfra, 0.0 );
+ current_time = bsystem_time (md->scene, ob, ( float ) md->scene->r.cfra, 0.0 );
if(G.rt > 0)
printf("current_time %f, collmd->time %f\n", current_time, collmd->time);
@@ -6049,7 +6047,7 @@ static void booleanModifier_foreachObjectLink(
}
static void booleanModifier_updateDepgraph(
- ModifierData *md, DagForest *forest, Object *ob,
+ ModifierData *md, DagForest *forest, Scene *scene, Object *ob,
DagNode *obNode)
{
BooleanModifierData *bmd = (BooleanModifierData*) md;
@@ -6215,7 +6213,7 @@ static void particleSystemModifier_deformVerts(
/* copies the data */
tmpobj->data = copy_curve( (Curve *) ob->data );
- makeDispListCurveTypes( tmpobj, 1 );
+ makeDispListCurveTypes(md->scene, tmpobj, 1 );
nurbs_to_mesh( tmpobj );
dm = CDDM_from_mesh((Mesh*)(tmpobj->data), tmpobj);
@@ -6265,7 +6263,7 @@ static void particleSystemModifier_deformVerts(
}
if(psys){
- particle_system_update(ob,psys);
+ particle_system_update(md->scene, ob, psys);
psmd->flag |= eParticleSystemFlag_psys_updated;
psmd->flag &= ~eParticleSystemFlag_DM_changed;
}
@@ -6313,7 +6311,7 @@ static int particleInstanceModifier_dependsOnTime(ModifierData *md)
return 0;
}
static void particleInstanceModifier_updateDepgraph(ModifierData *md, DagForest *forest,
- Object *ob, DagNode *obNode)
+ Scene *scene,Object *ob, DagNode *obNode)
{
ParticleInstanceModifierData *pimd = (ParticleInstanceModifierData*) md;
@@ -6381,7 +6379,7 @@ static DerivedMesh * particleInstanceModifier_applyModifier(
maxvert=totvert*totpart;
maxface=totface*totpart;
- psys->lattice=psys_get_lattice(ob, psys);
+ psys->lattice=psys_get_lattice(md->scene, ob, psys);
if(psys->flag & (PSYS_HAIR_DONE|PSYS_KEYED)){
float co[3];
@@ -6424,7 +6422,7 @@ static DerivedMesh * particleInstanceModifier_applyModifier(
state.time=(mv->co[0]-min_co)/(max_co-min_co);
if(trackneg)
state.time=1.0f-state.time;
- psys_get_particle_on_path(pimd->ob,psys,first_particle + i/totvert,&state,1);
+ psys_get_particle_on_path(md->scene, pimd->ob, psys,first_particle + i/totvert, &state,1);
mv->co[0] = 0.0;
@@ -6446,7 +6444,7 @@ static DerivedMesh * particleInstanceModifier_applyModifier(
}
else{
state.time=-1.0;
- psys_get_particle_state(pimd->ob,psys,i/totvert,&state,1);
+ psys_get_particle_state(md->scene, pimd->ob, psys, i/totvert, &state,1);
}
QuatMulVecf(state.rot,mv->co);
@@ -7117,7 +7115,7 @@ static DerivedMesh * explodeModifier_splitEdges(ExplodeModifierData *emd, Derive
}
static DerivedMesh * explodeModifier_explodeMesh(ExplodeModifierData *emd,
- ParticleSystemModifierData *psmd, Object *ob,
+ ParticleSystemModifierData *psmd, Scene *scene, Object *ob,
DerivedMesh *to_explode)
{
DerivedMesh *explode, *dm=to_explode;
@@ -7141,9 +7139,9 @@ static DerivedMesh * explodeModifier_explodeMesh(ExplodeModifierData *emd,
timestep= psys_get_timestep(part);
if(part->flag & PART_GLOB_TIME)
- cfra=bsystem_time(0,(float)G.scene->r.cfra,0.0);
+ cfra=bsystem_time(scene, 0,(float)scene->r.cfra,0.0);
else
- cfra=bsystem_time(ob,(float)G.scene->r.cfra,0.0);
+ cfra=bsystem_time(scene, ob,(float)scene->r.cfra,0.0);
/* hash table for vertice <-> particle relations */
vertpahash= BLI_edgehash_new();
@@ -7181,7 +7179,7 @@ static DerivedMesh * explodeModifier_explodeMesh(ExplodeModifierData *emd,
/* getting back to object space */
Mat4Invert(imat,ob->obmat);
- psmd->psys->lattice = psys_get_lattice(ob, psmd->psys);
+ psmd->psys->lattice = psys_get_lattice(scene, ob, psmd->psys);
/* duplicate & displace vertices */
ehi= BLI_edgehashIterator_new(vertpahash);
@@ -7209,7 +7207,7 @@ static DerivedMesh * explodeModifier_explodeMesh(ExplodeModifierData *emd,
Mat4MulVecfl(ob->obmat,loc0);
state.time=cfra;
- psys_get_particle_state(ob,psmd->psys,i,&state,1);
+ psys_get_particle_state(scene, ob, psmd->psys, i, &state,1);
vertco=CDDM_get_vert(explode,v)->co;
@@ -7325,7 +7323,7 @@ static DerivedMesh * explodeModifier_applyModifier(
if(emd->flag & eExplodeFlag_EdgeSplit){
int *facepa = emd->facepa;
DerivedMesh *splitdm=explodeModifier_splitEdges(emd,dm);
- DerivedMesh *explode=explodeModifier_explodeMesh(emd,psmd,ob,splitdm);
+ DerivedMesh *explode=explodeModifier_explodeMesh(emd, psmd, scene, ob, splitdm);
MEM_freeN(emd->facepa);
emd->facepa=facepa;
@@ -7333,7 +7331,7 @@ static DerivedMesh * explodeModifier_applyModifier(
return explode;
}
else
- return explodeModifier_explodeMesh(emd,psmd,ob,derivedData);
+ return explodeModifier_explodeMesh(emd, psmd, scene, ob, derivedData);
}
return derivedData;
}
@@ -7379,7 +7377,7 @@ static DerivedMesh * fluidsimModifier_applyModifier(
return derivedData;
}
- result = fluidsimModifier_do(fluidmd, ob, derivedData, useRenderParams, isFinalCalc);
+ result = fluidsimModifier_do(fluidmd, md->scene, ob, derivedData, useRenderParams, isFinalCalc);
if(result)
{
@@ -7390,7 +7388,7 @@ static DerivedMesh * fluidsimModifier_applyModifier(
}
static void fluidsimModifier_updateDepgraph(
- ModifierData *md, DagForest *forest,
+ ModifierData *md, DagForest *forest, Scene *scene,
Object *ob, DagNode *obNode)
{
FluidsimModifierData *fluidmd= (FluidsimModifierData*) md;
@@ -7400,7 +7398,7 @@ static void fluidsimModifier_updateDepgraph(
{
if(fluidmd->fss->type == OB_FLUIDSIM_DOMAIN)
{
- for(base = G.scene->base.first; base; base= base->next)
+ for(base = scene->base.first; base; base= base->next)
{
Object *ob1= base->object;
if(ob1 != ob)
@@ -7482,7 +7480,7 @@ static void meshdeformModifier_foreachObjectLink(
}
static void meshdeformModifier_updateDepgraph(
- ModifierData *md, DagForest *forest, Object *ob,
+ ModifierData *md, DagForest *forest, Scene *scene, Object *ob,
DagNode *obNode)
{
MeshDeformModifierData *mmd = (MeshDeformModifierData*) md;
@@ -7567,7 +7565,7 @@ static void meshdeformModifier_do(
/* get cage derivedmesh */
if(me->edit_mesh) {
- tmpdm= editmesh_get_derived_cage_and_final(ob, me->edit_mesh, &cagedm, 0);
+ tmpdm= editmesh_get_derived_cage_and_final(md->scene, ob, me->edit_mesh, &cagedm, 0);
if(tmpdm)
tmpdm->release(tmpdm);
}
@@ -7819,7 +7817,7 @@ static void shrinkwrapModifier_deformVerts(ModifierData *md, Object *ob, Derived
}
}
- shrinkwrapModifier_deform((ShrinkwrapModifierData*)md, ob, dm, vertexCos, numVerts);
+ shrinkwrapModifier_deform((ShrinkwrapModifierData*)md, md->scene, ob, dm, vertexCos, numVerts);
if(dm)
dm->release(dm);
@@ -7844,13 +7842,13 @@ static void shrinkwrapModifier_deformVertsEM(ModifierData *md, Object *ob, EditM
}
}
- shrinkwrapModifier_deform((ShrinkwrapModifierData*)md, ob, dm, vertexCos, numVerts);
+ shrinkwrapModifier_deform((ShrinkwrapModifierData*)md, md->scene, ob, dm, vertexCos, numVerts);
if(dm)
dm->release(dm);
}
-static void shrinkwrapModifier_updateDepgraph(ModifierData *md, DagForest *forest, Object *ob, DagNode *obNode)
+static void shrinkwrapModifier_updateDepgraph(ModifierData *md, DagForest *forest, Scene *scene, Object *ob, DagNode *obNode)
{
ShrinkwrapModifierData *smd = (ShrinkwrapModifierData*) md;
@@ -7905,7 +7903,7 @@ static void simpledeformModifier_foreachObjectLink(ModifierData *md, Object *ob,
walk(userData, ob, &smd->origin);
}
-static void simpledeformModifier_updateDepgraph(ModifierData *md, DagForest *forest, Object *ob, DagNode *obNode)
+static void simpledeformModifier_updateDepgraph(ModifierData *md, DagForest *forest, Scene *scene, Object *ob, DagNode *obNode)
{
SimpleDeformModifierData *smd = (SimpleDeformModifierData*)md;
diff --git a/source/blender/blenkernel/intern/multires-firstlevel.c b/source/blender/blenkernel/intern/multires-firstlevel.c
index 0c21cefa9a0..30bb8c9c28d 100644
--- a/source/blender/blenkernel/intern/multires-firstlevel.c
+++ b/source/blender/blenkernel/intern/multires-firstlevel.c
@@ -376,8 +376,10 @@ MTFace *subdivide_mtfaces(MTFace *src, MultiresLevel *lvl)
return NULL;
}
-void multires_delete_layer(Mesh *me, CustomData *cd, const int type, int n)
+void multires_delete_layer(Object *ob, CustomData *cd, const int type, int n)
{
+ Mesh *me= ob->data;
+
if(me && me->mr && cd) {
MultiresLevel *lvl1= me->mr->levels.first;
@@ -386,12 +388,14 @@ void multires_delete_layer(Mesh *me, CustomData *cd, const int type, int n)
CustomData_set_layer_active(cd, type, n);
CustomData_free_layer_active(cd, type, lvl1->totface);
- multires_level_to_mesh((G.scene->basact)->object, me, 0);
+ multires_level_to_mesh(ob, me, 0);
}
}
-void multires_add_layer(Mesh *me, CustomData *cd, const int type, const int n)
+void multires_add_layer(Object *ob, CustomData *cd, const int type, const int n)
{
+ Mesh *me= ob->data;
+
if(me && me->mr && cd) {
multires_update_levels(me, 0);
@@ -402,6 +406,6 @@ void multires_add_layer(Mesh *me, CustomData *cd, const int type, const int n)
CustomData_add_layer(cd, type, CD_DEFAULT, NULL, current_level(me->mr)->totface);
CustomData_set_layer_active(cd, type, n);
- multires_level_to_mesh((G.scene->basact)->object, me, 0);
+ multires_level_to_mesh(ob, me, 0);
}
}
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c
index a1566b1a0ed..7b9711f48de 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -42,6 +42,7 @@
#include "BKE_customdata.h"
#include "BKE_depsgraph.h"
#include "BKE_global.h"
+#include "BKE_mesh.h"
#include "BKE_multires.h"
//XXX #include "editmesh.h"
@@ -215,7 +216,7 @@ static void multires_get_face(MultiresFace *f, CustomData *fdata, int findex, Ed
tmp.v3= efa->v3->tmp.l;
tmp.v4= 0;
if(efa->v4) tmp.v4= efa->v4->tmp.l;
- //XXX test_index_face(&tmp, fdata, findex, efa->v4?4:3);
+ test_index_face(&tmp, fdata, findex, efa->v4?4:3);
for(j=0; j<4; ++j) f->v[j]= (&tmp.v1)[j];
/* Flags */
@@ -354,7 +355,7 @@ void multires_create(Object *ob, Mesh *me)
lvl= MEM_callocN(sizeof(MultiresLevel), "multires level");
- //XXX if(me->pv) mesh_pmv_off(ob, me);
+ if(me->pv) mesh_pmv_off(ob, me);
me->mr= MEM_callocN(sizeof(Multires), "multires data");
@@ -1034,7 +1035,7 @@ void multires_level_to_mesh(Object *ob, Mesh *me, const int render)
CustomData_add_layer(&me->vdata, CD_MVERT, CD_CALLOC, NULL, me->totvert);
CustomData_add_layer(&me->edata, CD_MEDGE, CD_CALLOC, NULL, me->totedge);
CustomData_add_layer(&me->fdata, CD_MFACE, CD_CALLOC, NULL, me->totface);
- //XXX mesh_update_customdata_pointers(me);
+ mesh_update_customdata_pointers(me);
/* Vertices/Edges/Faces */
@@ -1089,11 +1090,11 @@ void multires_level_to_mesh(Object *ob, Mesh *me, const int render)
}
- //XXX mesh_update_customdata_pointers(me);
+ mesh_update_customdata_pointers(me);
multires_edge_level_update(ob,me);
- DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
- //XXX mesh_calc_normals(me->mvert, me->totvert, me->mface, me->totface, NULL);
+// XXX do this in caller DAG_object_flush_update(scene, ob, OB_RECALC_DATA);
+ mesh_calc_normals(me->mvert, me->totvert, me->mface, me->totface, NULL);
}
void multires_add_level(Object *ob, Mesh *me, const char subdiv_type)
@@ -1104,7 +1105,7 @@ void multires_add_level(Object *ob, Mesh *me, const char subdiv_type)
MVert *oldverts= NULL;
lvl= MEM_callocN(sizeof(MultiresLevel), "multireslevel");
- //XXX if(me->pv) mesh_pmv_off(ob, me);
+ if(me->pv) mesh_pmv_off(ob, me);
check_colors(me);
multires_update_levels(me, 0);
@@ -1270,7 +1271,7 @@ void multires_add_level(Object *ob, Mesh *me, const char subdiv_type)
void multires_set_level(Object *ob, Mesh *me, const int render)
{
- //XXX if(me->pv) mesh_pmv_off(ob, me);
+ if(me->pv) mesh_pmv_off(ob, me);
check_colors(me);
multires_update_levels(me, render);
@@ -1301,6 +1302,6 @@ void multires_edge_level_update(Object *ob, Mesh *me)
}
}
- DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
+// XXX do this in caller DAG_object_flush_update(scene, ob, OB_RECALC_DATA);
}
}
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index 0e43ecd61e1..50eb9534a40 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -2628,7 +2628,7 @@ static void force_hidden_passes(bNode *node, int passflag)
}
/* based on rules, force sockets hidden always */
-void ntreeCompositForceHidden(bNodeTree *ntree)
+void ntreeCompositForceHidden(bNodeTree *ntree, Scene *curscene)
{
bNode *node;
@@ -2636,7 +2636,7 @@ void ntreeCompositForceHidden(bNodeTree *ntree)
for(node= ntree->nodes.first; node; node= node->next) {
if( node->type==CMP_NODE_R_LAYERS) {
- Scene *sce= node->id?(Scene *)node->id:G.scene; /* G.scene is WEAK! */
+ Scene *sce= node->id?(Scene *)node->id:curscene;
SceneRenderLayer *srl= BLI_findlink(&sce->r.layers, node->custom1);
if(srl)
force_hidden_passes(node, srl->passflag);
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index d9101feb204..7f3f21e106a 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -129,9 +129,9 @@ void clear_workob(Object *workob)
}
-void copy_baseflags()
+void copy_baseflags(struct Scene *scene)
{
- Base *base= G.scene->base.first;
+ Base *base= scene->base.first;
while(base) {
base->object->flag= base->flag;
@@ -139,9 +139,9 @@ void copy_baseflags()
}
}
-void copy_objectflags()
+void copy_objectflags(struct Scene *scene)
{
- Base *base= G.scene->base.first;
+ Base *base= scene->base.first;
while(base) {
base->flag= base->object->flag;
@@ -149,9 +149,9 @@ void copy_objectflags()
}
}
-void update_base_layer(Object *ob)
+void update_base_layer(struct Scene *scene, Object *ob)
{
- Base *base= G.scene->base.first;
+ Base *base= scene->base.first;
while (base) {
if (base->object == ob) base->lay= ob->lay;
@@ -291,7 +291,7 @@ static void unlink_object__unlinkModifierLinks(void *userData, Object *ob, Objec
ob->recalc |= OB_RECALC;
}
}
-void unlink_object(Object *ob)
+void unlink_object(Scene *scene, Object *ob)
{
Object *obt;
Material *mat;
@@ -493,9 +493,9 @@ void unlink_object(Object *ob)
tex= tex->id.next;
}
- /* mballs */
- if(ob->type==OB_MBALL) {
- obt= find_basis_mball(ob);
+ /* mballs (scene==NULL when called from library.c) */
+ if(scene && ob->type==OB_MBALL) {
+ obt= find_basis_mball(scene, ob);
if(obt) freedisplist(&obt->disp);
}
@@ -987,9 +987,9 @@ Object *add_only_object(int type, char *name)
return ob;
}
-/* general add: to G.scene, with layer from area and default name */
+/* general add: to scene, with layer from area and default name */
/* creates minimum required data, but without vertices etc. */
-Object *add_object(int type)
+Object *add_object(struct Scene *scene, int type)
{
Object *ob;
Base *base;
@@ -1000,23 +1000,23 @@ Object *add_object(int type)
ob->data= add_obdata_from_type(type);
- ob->lay= G.scene->lay;
+ ob->lay= scene->lay;
- base= scene_add_base(G.scene, ob);
- scene_select_base(G.scene, base);
+ base= scene_add_base(scene, ob);
+ scene_select_base(scene, base);
ob->recalc |= OB_RECALC;
return ob;
}
-void base_init_from_view3d(Base *base, View3D *v3d)
+void base_init_from_view3d(Base *base, View3D *v3d, struct Scene *scene)
{
Object *ob= base->object;
if (!v3d) {
/* no 3d view, this wont happen often */
base->lay = 1;
- VECCOPY(ob->loc, G.scene->cursor);
+ VECCOPY(ob->loc, scene->cursor);
/* return now because v3d->viewquat isnt available */
return;
@@ -1025,7 +1025,7 @@ void base_init_from_view3d(Base *base, View3D *v3d)
VECCOPY(ob->loc, v3d->cursor);
} else {
base->lay= ob->lay= v3d->layact;
- VECCOPY(ob->loc, G.scene->cursor);
+ VECCOPY(ob->loc, scene->cursor);
}
if (U.flag & USER_ADD_VIEWALIGNED) {
@@ -1462,7 +1462,7 @@ void disable_speed_curve(int val)
}
/* ob can be NULL */
-float bsystem_time(Object *ob, float cfra, float ofs)
+float bsystem_time(struct Scene *scene, Object *ob, float cfra, float ofs)
{
/* returns float ( see frame_to_float in ipo.c) */
@@ -1470,7 +1470,7 @@ float bsystem_time(Object *ob, float cfra, float ofs)
cfra+= bluroffs+fieldoffs;
/* global time */
- cfra*= G.scene->r.framelen;
+ cfra*= scene->r.framelen;
if (ob) {
if (no_speed_curve==0 && ob->ipo)
@@ -1558,7 +1558,7 @@ void object_to_mat4(Object *ob, float mat[][4])
int enable_cu_speed= 1;
-static void ob_parcurve(Object *ob, Object *par, float mat[][4])
+static void ob_parcurve(Scene *scene, Object *ob, Object *par, float mat[][4])
{
Curve *cu;
float q[4], vec[4], dir[3], quat[4], x1, ctime;
@@ -1568,7 +1568,7 @@ static void ob_parcurve(Object *ob, Object *par, float mat[][4])
cu= par->data;
if(cu->path==NULL || cu->path->data==NULL) /* only happens on reload file, but violates depsgraph still... fix! */
- makeDispListCurveTypes(par, 0);
+ makeDispListCurveTypes(scene, par, 0);
if(cu->path==NULL) return;
/* exception, timeoffset is regarded as distance offset */
@@ -1583,7 +1583,7 @@ static void ob_parcurve(Object *ob, Object *par, float mat[][4])
}
/* catch exceptions: curve paths used as a duplicator */
else if(enable_cu_speed) {
- ctime= bsystem_time(ob, (float)G.scene->r.cfra, 0.0);
+ ctime= bsystem_time(scene, ob, (float)scene->r.cfra, 0.0);
if(calc_ipo_spec(cu->ipo, CU_SPEED, &ctime)==0) {
ctime /= cu->pathlen;
@@ -1591,7 +1591,7 @@ static void ob_parcurve(Object *ob, Object *par, float mat[][4])
}
}
else {
- ctime= G.scene->r.cfra - give_timeoffset(ob);
+ ctime= scene->r.cfra - give_timeoffset(ob);
ctime /= cu->pathlen;
CLAMP(ctime, 0.0, 1.0);
@@ -1831,7 +1831,7 @@ int during_scriptlink(void) {
return during_scriptlink_flag;
}
-void where_is_object_time(Object *ob, float ctime)
+void where_is_object_time(Scene *scene, Object *ob, float ctime)
{
float *fp1, *fp2, slowmat[4][4] = MAT4_UNITY;
float stime, fac1, fac2, vec[3];
@@ -1845,7 +1845,7 @@ void where_is_object_time(Object *ob, float ctime)
if(ob==NULL) return;
/* this is needed to be able to grab objects with ipos, otherwise it always freezes them */
- stime= bsystem_time(ob, ctime, 0.0);
+ stime= bsystem_time(scene, ob, ctime, 0.0);
if(stime != ob->ctime) {
ob->ctime= stime;
@@ -1855,7 +1855,7 @@ void where_is_object_time(Object *ob, float ctime)
execute_ipo((ID *)ob, ob->ipo);
}
else
- do_all_object_actions(ob);
+ do_all_object_actions(scene, ob);
/* do constraint ipos ..., note it needs stime (0 = all ipos) */
do_constraint_channels(&ob->constraints, &ob->constraintChannels, stime, 0);
@@ -1882,7 +1882,7 @@ void where_is_object_time(Object *ob, float ctime)
pop= 1;
if(par->proxy_from); // was a copied matrix, no where_is! bad...
- else where_is_object_time(par, ctime);
+ else where_is_object_time(scene, par, ctime);
}
solve_parenting(ob, par, ob->obmat, slowmat, 0);
@@ -1912,7 +1912,7 @@ void where_is_object_time(Object *ob, float ctime)
/* Handle tracking */
if(ob->track) {
- if( ctime != ob->track->ctime) where_is_object_time(ob->track, ctime);
+ if( ctime != ob->track->ctime) where_is_object_time(scene, ob->track, ctime);
solve_tracking (ob, ob->track->obmat);
}
@@ -1921,7 +1921,7 @@ void where_is_object_time(Object *ob, float ctime)
if (ob->constraints.first) {
bConstraintOb *cob;
- cob= constraints_make_evalob(ob, NULL, CONSTRAINT_OBTYPE_OBJECT);
+ cob= constraints_make_evalob(scene, ob, NULL, CONSTRAINT_OBTYPE_OBJECT);
/* constraints need ctime, not stime. Some call where_is_object_time and bsystem_time */
solve_constraints (&ob->constraints, cob, ctime);
@@ -1958,7 +1958,7 @@ static void solve_parenting (Object *ob, Object *par, float obmat[][4], float sl
ok= 0;
if(par->type==OB_CURVE) {
if( ((Curve *)par->data)->flag & CU_PATH ) {
- ob_parcurve(ob, par, tmat);
+ ob_parcurve(scene, ob, par, tmat);
ok= 1;
}
}
@@ -2047,13 +2047,13 @@ void solve_tracking (Object *ob, float targetmat[][4])
}
-void where_is_object(Object *ob)
+void where_is_object(struct Scene *scene, Object *ob)
{
- where_is_object_time(ob, (float)G.scene->r.cfra);
+ where_is_object_time(scene, ob, (float)scene->r.cfra);
}
-void where_is_object_simul(Object *ob)
+void where_is_object_simul(Scene *scene, Object *ob)
/* was written for the old game engine (until 2.04) */
/* It seems that this function is only called
for a lamp that is the child of another object */
@@ -2099,8 +2099,8 @@ for a lamp that is the child of another object */
if (ob->constraints.first) {
bConstraintOb *cob;
- cob= constraints_make_evalob(ob, NULL, CONSTRAINT_OBTYPE_OBJECT);
- solve_constraints (&ob->constraints, cob, G.scene->r.cfra);
+ cob= constraints_make_evalob(scene, ob, NULL, CONSTRAINT_OBTYPE_OBJECT);
+ solve_constraints (&ob->constraints, cob, scene->r.cfra);
constraints_clear_evalob(cob);
}
@@ -2109,7 +2109,7 @@ for a lamp that is the child of another object */
}
/* for calculation of the inverse parent transform, only used for editor */
-void what_does_parent(Object *ob, Object *workob)
+void what_does_parent(Scene *scene, Object *ob, Object *workob)
{
clear_workob(workob);
@@ -2132,7 +2132,7 @@ void what_does_parent(Object *ob, Object *workob)
strcpy(workob->parsubstr, ob->parsubstr);
- where_is_object(workob);
+ where_is_object(scene, workob);
}
BoundBox *unit_boundbox()
@@ -2251,7 +2251,7 @@ void minmax_object(Object *ob, float *min, float *max)
}
/* TODO - use dupli objects bounding boxes */
-void minmax_object_duplis(Object *ob, float *min, float *max)
+void minmax_object_duplis(Scene *scene, Object *ob, float *min, float *max)
{
if ((ob->transflag & OB_DUPLI)==0) {
return;
@@ -2259,7 +2259,7 @@ void minmax_object_duplis(Object *ob, float *min, float *max)
ListBase *lb;
DupliObject *dob;
- lb= object_duplilist(G.scene, ob);
+ lb= object_duplilist(scene, ob);
for(dob= lb->first; dob; dob= dob->next) {
if(dob->no_draw);
else {
@@ -2279,7 +2279,7 @@ void minmax_object_duplis(Object *ob, float *min, float *max)
/* the main object update call, for object matrix, constraints, keys and displist (modifiers) */
/* requires flags to be set! */
-void object_handle_update(Object *ob)
+void object_handle_update(Scene *scene, Object *ob)
{
if(ob->recalc & OB_RECALC) {
@@ -2299,7 +2299,7 @@ void object_handle_update(Object *ob)
Mat4CpyMat4(ob->obmat, ob->proxy_from->obmat);
}
else
- where_is_object(ob);
+ where_is_object(scene, ob);
#ifndef DISABLE_PYTHON
if (G.f & G_DOSCRIPTLINKS) BPY_do_pyscript((ID *)ob, SCRIPT_OBJECTUPDATE);
#endif
@@ -2311,25 +2311,25 @@ void object_handle_update(Object *ob)
/* includes all keys and modifiers */
if(ob->type==OB_MESH) {
- makeDerivedMesh(ob, NULL, get_viewedit_datamask());
+ makeDerivedMesh(scene, ob, NULL, get_viewedit_datamask());
}
else if(ob->type==OB_MBALL) {
- makeDispListMBall(ob);
+ makeDispListMBall(scene, ob);
}
else if(ELEM3(ob->type, OB_CURVE, OB_SURF, OB_FONT)) {
- makeDispListCurveTypes(ob, 0);
+ makeDispListCurveTypes(scene, ob, 0);
}
else if(ob->type==OB_LATTICE) {
- lattice_calc_modifiers(ob);
+ lattice_calc_modifiers(scene, ob);
}
else if(ob->type==OB_CAMERA) {
Camera *cam = (Camera *)ob->data;
- calc_ipo(cam->ipo, frame_to_float(G.scene->r.cfra));
+ calc_ipo(cam->ipo, frame_to_float(scene, scene->r.cfra));
execute_ipo(&cam->id, cam->ipo);
}
else if(ob->type==OB_LAMP) {
Lamp *la = (Lamp *)ob->data;
- calc_ipo(la->ipo, frame_to_float(G.scene->r.cfra));
+ calc_ipo(la->ipo, frame_to_float(scene, scene->r.cfra));
execute_ipo(&la->id, la->ipo);
}
else if(ob->type==OB_ARMATURE) {
@@ -2342,8 +2342,8 @@ void object_handle_update(Object *ob)
// printf("pose proxy copy, lib ob %s proxy %s\n", ob->id.name, ob->proxy_from->id.name);
}
else {
- do_all_pose_actions(ob);
- where_is_pose(ob);
+ do_all_pose_actions(scene, ob);
+ where_is_pose(scene, ob);
}
}
@@ -2354,7 +2354,7 @@ void object_handle_update(Object *ob)
psys= ob->particlesystem.first;
while(psys) {
if(psys_check_enabled(ob, psys)) {
- particle_system_update(ob, psys);
+ particle_system_update(scene, ob, psys);
psys= psys->next;
}
else if(psys->flag & PSYS_DELETE) {
@@ -2371,7 +2371,7 @@ void object_handle_update(Object *ob)
/* 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(scene, ob, CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL);
dm->release(dm);
for(psys=ob->particlesystem.first; psys; psys=psys->next)
@@ -2388,7 +2388,7 @@ void object_handle_update(Object *ob)
/* set pointer in library proxy target, for copying, but restore it */
ob->proxy->proxy_from= ob;
// printf("call update, lib ob %s proxy %s\n", ob->proxy->id.name, ob->id.name);
- object_handle_update(ob->proxy);
+ object_handle_update(scene, ob->proxy);
}
ob->recalc &= ~OB_RECALC;
diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c
index 32da154321e..ff4d934ab3d 100644
--- a/source/blender/blenkernel/intern/particle.c
+++ b/source/blender/blenkernel/intern/particle.c
@@ -240,11 +240,11 @@ void psys_change_act(void *ob_v, void *act_v)
npsys->flag |= PSYS_CURRENT;
}
}
-Object *psys_get_lattice(Object *ob, ParticleSystem *psys)
+Object *psys_get_lattice(Scene *scene, Object *ob, ParticleSystem *psys)
{
Object *lattice=0;
- if(psys_in_edit_mode(psys)==0){
+ if(psys_in_edit_mode(scene, psys)==0){
ModifierData *md = (ModifierData*)psys_get_modifier(ob,psys);
@@ -285,9 +285,9 @@ int psys_ob_has_hair(Object *ob)
return 0;
}
-int psys_in_edit_mode(ParticleSystem *psys)
+int psys_in_edit_mode(Scene *scene, ParticleSystem *psys)
{
- return ((G.f & G_PARTICLEEDIT) && psys==psys_get_current((G.scene->basact)->object) && psys->edit);
+ return ((G.f & G_PARTICLEEDIT) && psys==psys_get_current((scene->basact)->object) && psys->edit);
}
int psys_check_enabled(Object *ob, ParticleSystem *psys)
{
@@ -1642,7 +1642,7 @@ int do_guide(ParticleKey *state, int pa_num, float time, ListBase *lb)
/* curve taper */
if(cu->taperobj)
- VecMulf(pa_loc,calc_taper(cu->taperobj,(int)(f_force*guidetime*100.0),100));
+ VecMulf(pa_loc, calc_taper(scene, cu->taperobj, (int)(f_force*guidetime*100.0), 100));
/* TODO */
//else{
///* curve size*/
@@ -1851,20 +1851,20 @@ static void get_strand_normal(Material *ma, float *surfnor, float surfdist, floa
VECCOPY(nor, vnor);
}
-int psys_threads_init_path(ParticleThread *threads, float cfra, int editupdate)
+int psys_threads_init_path(ParticleThread *threads, Scene *scene, float cfra, int editupdate)
{
ParticleThreadContext *ctx= threads[0].ctx;
Object *ob= ctx->ob;
ParticleSystem *psys= ctx->psys;
ParticleSettings *part = psys->part;
- ParticleEditSettings *pset = &G.scene->toolsettings->particle;
+ ParticleEditSettings *pset = &scene->toolsettings->particle;
int totparent=0, between=0;
int steps = (int)pow(2.0,(double)part->draw_step);
int totchild = psys->totchild;
int i, seed, totthread= threads[0].tot;
/*---start figuring out what is actually wanted---*/
- if(psys_in_edit_mode(psys))
+ if(psys_in_edit_mode(scene, psys))
if(psys->renderdata==0 && (psys->edit==NULL || pset->flag & PE_SHOW_CHILD)==0)
totchild=0;
@@ -1904,7 +1904,7 @@ int psys_threads_init_path(ParticleThread *threads, float cfra, int editupdate)
ctx->totparent= totparent;
ctx->cfra= cfra;
- psys->lattice = psys_get_lattice(ob, psys);
+ psys->lattice = psys_get_lattice(scene, ob, psys);
/* cache all relevant vertex groups if they exist */
if(part->from!=PART_FROM_PARTICLE){
@@ -2256,7 +2256,7 @@ static void *exec_child_path_cache(void *data)
return 0;
}
-void psys_cache_child_paths(Object *ob, ParticleSystem *psys, float cfra, int editupdate)
+void psys_cache_child_paths(Scene *scene, Object *ob, ParticleSystem *psys, float cfra, int editupdate)
{
ParticleSettings *part = psys->part;
ParticleThread *pthreads;
@@ -2265,9 +2265,9 @@ void psys_cache_child_paths(Object *ob, ParticleSystem *psys, float cfra, int ed
ListBase threads;
int i, totchild, totparent, totthread;
- pthreads= psys_threads_create(ob, psys);
+ pthreads= psys_threads_create(scene, ob, psys);
- if(!psys_threads_init_path(pthreads, cfra, editupdate)) {
+ if(!psys_threads_init_path(pthreads, scene, cfra, editupdate)) {
psys_threads_free(pthreads);
return;
}
@@ -2306,11 +2306,11 @@ void psys_cache_child_paths(Object *ob, ParticleSystem *psys, float cfra, int ed
/* -Usefull for making use of opengl vertex arrays for super fast strand drawing. */
/* -Makes child strands possible and creates them too into the cache. */
/* -Cached path data is also used to determine cut position for the editmode tool. */
-void psys_cache_paths(Object *ob, ParticleSystem *psys, float cfra, int editupdate)
+void psys_cache_paths(Scene *scene, Object *ob, ParticleSystem *psys, float cfra, int editupdate)
{
ParticleCacheKey *ca, **cache=psys->pathcache;
ParticleSystemModifierData *psmd = psys_get_modifier(ob, psys);
- ParticleEditSettings *pset = &G.scene->toolsettings->particle;
+ ParticleEditSettings *pset = &scene->toolsettings->particle;
ParticleSettings *part = psys->part;
ParticleData *pa;
@@ -2326,7 +2326,7 @@ void psys_cache_paths(Object *ob, ParticleSystem *psys, float cfra, int editupda
Material *ma;
float birthtime = 0.0, dietime = 0.0;
- float t, time = 0.0, keytime = 0.0, dfra = 1.0, frs_sec = G.scene->r.frs_sec;
+ float t, time = 0.0, keytime = 0.0, dfra = 1.0, frs_sec = scene->r.frs_sec;
float col[3] = {0.5f, 0.5f, 0.5f};
float prev_tangent[3], hairmat[4][4];
int k,i;
@@ -2346,7 +2346,7 @@ void psys_cache_paths(Object *ob, ParticleSystem *psys, float cfra, int editupda
if(psys->renderdata)
steps = (int)pow(2.0, (double)psys->part->ren_step);
- else if(psys_in_edit_mode(psys)){
+ else if(psys_in_edit_mode(scene, psys)){
edit=psys->edit;
//timed = edit->draw_timed;
@@ -2382,7 +2382,7 @@ void psys_cache_paths(Object *ob, ParticleSystem *psys, float cfra, int editupda
soft= NULL;
}
- psys->lattice = psys_get_lattice(ob, psys);
+ psys->lattice = psys_get_lattice(scene, ob, psys);
ma= give_current_material(ob, psys->part->omat);
if(ma && (psys->part->draw & PART_DRAW_MAT_COL))
VECCOPY(col, &ma->r)
@@ -3009,7 +3009,7 @@ void make_local_particlesettings(ParticleSettings *part)
}
/* should be integrated to depgraph signals */
-void psys_flush_settings(ParticleSettings *part, int event, int hair_recalc)
+void psys_flush_settings(struct Scene *scene, ParticleSettings *part, int event, int hair_recalc)
{
Base *base;
Object *ob, *tob;
@@ -3017,7 +3017,7 @@ void psys_flush_settings(ParticleSettings *part, int event, int hair_recalc)
int flush;
/* update all that have same particle settings */
- for(base = G.scene->base.first; base; base= base->next) {
+ for(base = scene->base.first; base; base= base->next) {
if(base->object->particlesystem.first) {
ob=base->object;
flush=0;
@@ -3042,12 +3042,12 @@ void psys_flush_settings(ParticleSettings *part, int event, int hair_recalc)
}
}
if(flush)
- DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
+ DAG_object_flush_update(scene, ob, OB_RECALC_DATA);
}
}
}
-LinkNode *psys_using_settings(ParticleSettings *part, int flush_update)
+LinkNode *psys_using_settings(struct Scene *scene, ParticleSettings *part, int flush_update)
{
Object *ob, *tob;
ParticleSystem *psys, *tpsys;
@@ -3075,7 +3075,7 @@ LinkNode *psys_using_settings(ParticleSettings *part, int flush_update)
}
if(flush_update && found)
- DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
+ DAG_object_flush_update(scene, ob, OB_RECALC_DATA);
}
return node;
@@ -3323,7 +3323,7 @@ float psys_get_child_size(ParticleSystem *psys, ChildParticle *cpa, float cfra,
return size;
}
/* get's hair (or keyed) particles state at the "path time" specified in state->time */
-void psys_get_particle_on_path(Object *ob, ParticleSystem *psys, int p, ParticleKey *state, int vel)
+void psys_get_particle_on_path(Scene *scene, Object *ob, ParticleSystem *psys, int p, ParticleKey *state, int vel)
{
ParticleSettings *part = psys->part;
ParticleSystemModifierData *psmd = psys_get_modifier(ob, psys);
@@ -3335,7 +3335,7 @@ void psys_get_particle_on_path(Object *ob, ParticleSystem *psys, int p, Particle
HairKey *hkey[2] = {NULL, NULL};
ParticleKey *par=0, keys[4];
- float t, real_t, dfra, keytime, frs_sec = G.scene->r.frs_sec;
+ float t, real_t, dfra, keytime, frs_sec = scene->r.frs_sec;
float co[3], orco[3];
float hairmat[4][4];
float pa_clump = 0.0, pa_kink = 0.0;
@@ -3346,7 +3346,7 @@ void psys_get_particle_on_path(Object *ob, ParticleSystem *psys, int p, Particle
float *cpa_fuv; int cpa_num; short cpa_from;
- //if(psys_in_edit_mode(psys)){
+ //if(psys_in_edit_mode(scene, psys)){
// if((psys->edit_path->flag & PSYS_EP_SHOW_CHILD)==0)
// totchild=0;
// edit=1;
@@ -3430,7 +3430,7 @@ void psys_get_particle_on_path(Object *ob, ParticleSystem *psys, int p, Particle
}
//}
- //psys_get_particle_on_path(bsys,p,t,bkey,ckey[0]);
+ //psys_get_particle_on_path(scene, bsys,p,t,bkey,ckey[0]);
//if(part->rotfrom==PART_ROT_KEYS)
// QuatInterpol(state->rot,k2.rot,k3.rot,keytime);
@@ -3494,7 +3494,7 @@ void psys_get_particle_on_path(Object *ob, ParticleSystem *psys, int p, Particle
/* get parent states */
while(w<4 && cpa->pa[w]>=0){
keys[w].time = t;
- psys_get_particle_on_path(ob, psys, cpa->pa[w], keys+w, 1);
+ psys_get_particle_on_path(scene, ob, psys, cpa->pa[w], keys+w, 1);
w++;
}
@@ -3520,7 +3520,7 @@ void psys_get_particle_on_path(Object *ob, ParticleSystem *psys, int p, Particle
/* get the parent state */
keys->time = t;
- psys_get_particle_on_path(ob,psys,cpa->parent,keys,1);
+ psys_get_particle_on_path(scene, ob, psys, cpa->parent, keys,1);
/* get the original coordinates (orco) for texture usage */
pa=psys->particles+cpa->parent;
@@ -3606,19 +3606,19 @@ void psys_get_particle_on_path(Object *ob, ParticleSystem *psys, int p, Particle
//if(vel){
// if(t>=0.001f){
// tstate.time=t-0.001f;
- // psys_get_particle_on_path(ob,psys,p,&tstate,0);
+ // psys_get_particle_on_path(scene,ob,psys,p,&tstate,0);
// VECSUB(state->vel,state->co,tstate.co);
// }
// else{
// tstate.time=t+0.001f;
- // psys_get_particle_on_path(ob,psys,p,&tstate,0);
+ // psys_get_particle_on_path(scene, ob,psys,p,&tstate,0);
// VECSUB(state->vel,tstate.co,state->co);
// }
//}
}
}
/* gets particle's state at a time, returns 1 if particle exists and can be seen and 0 if not */
-int psys_get_particle_state(Object *ob, ParticleSystem *psys, int p, ParticleKey *state, int always){
+int psys_get_particle_state(struct Scene *scene, Object *ob, ParticleSystem *psys, int p, ParticleKey *state, int always){
ParticleSettings *part=psys->part;
ParticleData *pa=0;
float cfra;
@@ -3628,7 +3628,7 @@ int psys_get_particle_state(Object *ob, ParticleSystem *psys, int p, ParticleKey
if(state->time>0)
cfra=state->time;
else
- cfra=bsystem_time(0,(float)G.scene->r.cfra,0.0);
+ cfra= bsystem_time(scene, 0, (float)scene->r.cfra,0.0);
if(psys->totchild && p>=totpart){
if(part->from!=PART_FROM_PARTICLE && part->childtype==PART_CHILD_FACES){
@@ -3664,7 +3664,7 @@ int psys_get_particle_state(Object *ob, ParticleSystem *psys, int p, ParticleKey
else
state->time= (cfra-pa->time)/(pa->dietime-pa->time);
- psys_get_particle_on_path(ob,psys,p,state,1);
+ psys_get_particle_on_path(scene, ob, psys, p, state,1);
return 1;
}
else{
@@ -3708,7 +3708,7 @@ int psys_get_particle_state(Object *ob, ParticleSystem *psys, int p, ParticleKey
/* let's interpolate to try to be as accurate as possible */
if(pa->state.time + 1.0f > state->time && pa->prev_state.time - 1.0f < state->time) {
ParticleKey keys[4];
- float dfra, keytime, frs_sec = G.scene->r.frs_sec;
+ float dfra, keytime, frs_sec = scene->r.frs_sec;
if(pa->prev_state.time >= pa->state.time) {
/* prev_state is wrong so let's not use it, this can happen at frame 1 or particle birth */
diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c
index 3ad17790f45..336b7037600 100644
--- a/source/blender/blenkernel/intern/particle_system.c
+++ b/source/blender/blenkernel/intern/particle_system.c
@@ -216,7 +216,7 @@ static void realloc_particles(Object *ob, ParticleSystem *psys, int new_totpart)
psys->totpart=totpart;
}
-static int get_psys_child_number(ParticleSystem *psys)
+static int get_psys_child_number(struct Scene *scene, ParticleSystem *psys)
{
int nbr;
@@ -225,15 +225,15 @@ static int get_psys_child_number(ParticleSystem *psys)
if(psys->renderdata) {
nbr= psys->part->ren_child_nbr;
- return get_render_child_particle_number(&G.scene->r, nbr);
+ return get_render_child_particle_number(&scene->r, nbr);
}
else
return psys->part->child_nbr;
}
-static int get_psys_tot_child(ParticleSystem *psys)
+static int get_psys_tot_child(struct Scene *scene, ParticleSystem *psys)
{
- return psys->totpart*get_psys_child_number(psys);
+ return psys->totpart*get_psys_child_number(scene, psys);
}
static void alloc_child_particles(ParticleSystem *psys, int tot)
@@ -929,7 +929,7 @@ static int compare_orig_index(const void *p1, const void *p2)
/* 6. and we're done! */
/* This is to denote functionality that does not yet work with mesh - only derived mesh */
-int psys_threads_init_distribution(ParticleThread *threads, DerivedMesh *finaldm, int from)
+int psys_threads_init_distribution(ParticleThread *threads, Scene *scene, DerivedMesh *finaldm, int from)
{
ParticleThreadContext *ctx= threads[0].ctx;
Object *ob= ctx->ob;
@@ -982,7 +982,7 @@ int psys_threads_init_distribution(ParticleThread *threads, DerivedMesh *finaldm
BLI_kdtree_balance(tree);
- totpart=get_psys_tot_child(psys);
+ totpart=get_psys_tot_child(scene, psys);
cfrom=from=PART_FROM_FACE;
if(part->flag&PART_CHILD_SEAMS){
@@ -1031,9 +1031,9 @@ int psys_threads_init_distribution(ParticleThread *threads, DerivedMesh *finaldm
}
else{
/* no need to figure out distribution */
- int child_nbr= get_psys_child_number(psys);
+ int child_nbr= get_psys_child_number(scene, psys);
- totpart= get_psys_tot_child(psys);
+ totpart= get_psys_tot_child(scene, psys);
alloc_child_particles(psys, totpart);
cpa=psys->child;
for(i=0; i<child_nbr; i++){
@@ -1365,16 +1365,16 @@ int psys_threads_init_distribution(ParticleThread *threads, DerivedMesh *finaldm
return 1;
}
-static void distribute_particles_on_dm(DerivedMesh *finaldm, Object *ob, ParticleSystem *psys, int from)
+static void distribute_particles_on_dm(DerivedMesh *finaldm, Scene *scene, Object *ob, ParticleSystem *psys, int from)
{
ListBase threads;
ParticleThread *pthreads;
ParticleThreadContext *ctx;
int i, totthread;
- pthreads= psys_threads_create(ob, psys);
+ pthreads= psys_threads_create(scene, ob, psys);
- if(!psys_threads_init_distribution(pthreads, finaldm, from)) {
+ if(!psys_threads_init_distribution(pthreads, scene, finaldm, from)) {
psys_threads_free(pthreads);
return;
}
@@ -1414,7 +1414,7 @@ static void distribute_particles_on_shape(Object *ob, ParticleSystem *psys, int
pa->num= -1;
}
}
-static void distribute_particles(Object *ob, ParticleSystem *psys, int from)
+static void distribute_particles(Scene *scene, Object *ob, ParticleSystem *psys, int from)
{
ParticleSystemModifierData *psmd=0;
int distr_error=0;
@@ -1422,7 +1422,7 @@ static void distribute_particles(Object *ob, ParticleSystem *psys, int from)
if(psmd){
if(psmd->dm)
- distribute_particles_on_dm(psmd->dm,ob,psys,from);
+ distribute_particles_on_dm(psmd->dm, scene, ob, psys, from);
else
distr_error=1;
}
@@ -1444,14 +1444,14 @@ static void distribute_particles(Object *ob, ParticleSystem *psys, int from)
}
/* threaded child particle distribution and path caching */
-ParticleThread *psys_threads_create(struct Object *ob, struct ParticleSystem *psys)
+ParticleThread *psys_threads_create(struct Scene *scene, struct Object *ob, struct ParticleSystem *psys)
{
ParticleThread *threads;
ParticleThreadContext *ctx;
int i, totthread;
- if(G.scene->r.mode & R_FIXED_THREADS)
- totthread= G.scene->r.threads;
+ if(scene->r.mode & R_FIXED_THREADS)
+ totthread= scene->r.threads;
else
totthread= BLI_system_thread_count();
@@ -1714,7 +1714,7 @@ void reset_particle(ParticleData *pa, ParticleSystem *psys, ParticleSystemModifi
if(pa->num == -1)
memset(&state, 0, sizeof(state));
else
- psys_get_particle_state(tob,tpsys,pa->num,&state,1);
+ psys_get_particle_state(scene, tob,tpsys,pa->num,&state,1);
psys_get_from_key(&state,loc,nor,rot,0);
QuatMulVecf(rot,vtan);
@@ -1733,7 +1733,7 @@ void reset_particle(ParticleData *pa, ParticleSystem *psys, ParticleSystemModifi
else{
/* get precise emitter matrix if particle is born */
if(part->type!=PART_HAIR && pa->time < cfra && pa->time >= psys->cfra)
- where_is_object_time(ob,pa->time);
+ where_is_object_time(scene, ob,pa->time);
/* get birth location from object */
psys_particle_on_emitter(psmd,part->from,pa->num, pa->num_dmcache, pa->fuv,pa->foffset,loc,nor,utan,vtan,0,0);
@@ -2027,7 +2027,7 @@ static void set_keyed_keys(Object *ob, ParticleSystem *psys)
for(k=0; k<totkeys; k++) {
for(i=0,pa=psys->particles; i<totpart; i++, pa++) {
if(kpsys->totpart > 0)
- psys_get_particle_state(kob, kpsys, i%kpsys->totpart, pa->keys + k, 1);
+ psys_get_particle_state(scene, kob, kpsys, i%kpsys->totpart, pa->keys + k, 1);
if(k==0)
pa->keys->time = pa->time;
@@ -2303,7 +2303,7 @@ static void add_to_effectors(ListBase *lb, Object *ob, Object *obsrc, ParticleSy
Curve *cu= ob->data;
if(cu->flag & CU_PATH) {
if(cu->path==NULL || cu->path->data==NULL)
- makeDispListCurveTypes(ob, 0);
+ makeDispListCurveTypes(scene, ob, 0);
if(cu->path && cu->path->data) {
type |= PSYS_EC_EFFECTOR;
}
@@ -2394,7 +2394,7 @@ static void psys_init_effectors_recurs(Object *ob, Object *obsrc, ParticleSystem
}
}
-void psys_init_effectors(Object *obsrc, Group *group, ParticleSystem *psys)
+void psys_init_effectors(Scene *scene, Object *obsrc, Group *group, ParticleSystem *psys)
{
ListBase *listb= &psys->effectors;
Base *base;
@@ -2408,7 +2408,7 @@ void psys_init_effectors(Object *obsrc, Group *group, ParticleSystem *psys)
psys_init_effectors_recurs(go->ob, obsrc, psys, listb, 0);
}
else {
- for(base = G.scene->base.first; base; base= base->next)
+ for(base = scene->base.first; base; base= base->next)
psys_init_effectors_recurs(base->object, obsrc, psys, listb, 0);
}
}
@@ -2505,7 +2505,7 @@ static void precalc_effectors(Object *ob, ParticleSystem *psys, ParticleSystemMo
ec->tree=tree;
for(p=0, epa=epsys->particles; p<totepart; p++,epa++)
- if(epa->alive==PARS_ALIVE && psys_get_particle_state(eob,epsys,p,&state,0))
+ if(epa->alive==PARS_ALIVE && psys_get_particle_state(scene, eob,epsys,p,&state,0))
BLI_kdtree_insert(tree, p, state.co, NULL);
BLI_kdtree_balance(tree);
@@ -2556,7 +2556,7 @@ void do_effectors(int pa_no, ParticleData *pa, ParticleKey *state, Object *ob, P
if(ec->type & PSYS_EC_EFFECTOR){
pd=eob->pd;
if(psys->part->type!=PART_HAIR && psys->part->integrator)
- where_is_object_time(eob,cfra);
+ where_is_object_time(scene, eob,cfra);
/* use center of object for distance calculus */
VecSubf(vec_to_part, state->co, eob->obmat[3]);
@@ -2571,7 +2571,7 @@ void do_effectors(int pa_no, ParticleData *pa, ParticleKey *state, Object *ob, P
pd->flag & PFIELD_TEX_OBJECT, (pd->flag & PFIELD_TEX_ROOTCO) ? rootco : state->co, eob->obmat,
pd->f_strength, falloff, force_field);
} else {
- do_physical_effector(eob, state->co, pd->forcefield,pd->f_strength,distance,
+ do_physical_effector(scene, eob, state->co, pd->forcefield,pd->f_strength,distance,
falloff,0.0,pd->f_damp,eob->obmat[2],vec_to_part,
state->vel,force_field,pd->flag&PFIELD_PLANAR,ec->rng,pd->f_noise,charge,pa->size);
}
@@ -2595,7 +2595,7 @@ void do_effectors(int pa_no, ParticleData *pa, ParticleKey *state, Object *ob, P
p=0;
}
- epsys->lattice=psys_get_lattice(ob,psys);
+ epsys->lattice= psys_get_lattice(scene, ob, psys);
for(; p<totepart; p++){
/* particle skips itself as effector */
@@ -2603,7 +2603,7 @@ void do_effectors(int pa_no, ParticleData *pa, ParticleKey *state, Object *ob, P
epa = epsys->particles + p;
estate.time=cfra;
- if(psys_get_particle_state(eob,epsys,p,&estate,0)){
+ if(psys_get_particle_state(scene, eob,epsys,p,&estate,0)){
VECSUB(vec_to_part, state->co, estate.co);
distance = VecLength(vec_to_part);
@@ -2615,14 +2615,14 @@ void do_effectors(int pa_no, ParticleData *pa, ParticleKey *state, Object *ob, P
if(falloff<=0.0f)
; /* don't do anything */
else
- do_physical_effector(eob, state->co, pd->forcefield,pd->f_strength,distance,
+ do_physical_effector(scene, eob, state->co, pd->forcefield,pd->f_strength,distance,
falloff,epart->size,pd->f_damp,estate.vel,vec_to_part,
state->vel,force_field,0, ec->rng, pd->f_noise,charge,pa->size);
}
}
else if(pd && pd->forcefield==PFIELD_HARMONIC && cfra-framestep <= epa->dietime && cfra>epa->dietime){
/* first step after key release */
- psys_get_particle_state(eob,epsys,p,&estate,1);
+ psys_get_particle_state(scene, eob,epsys,p,&estate,1);
VECADD(vel,vel,estate.vel);
/* TODO: add rotation handling here too */
}
@@ -2842,7 +2842,7 @@ static void intersect_dm_quad_weights(float *v1, float *v2, float *v3, float *v4
}
/* check intersection with a derivedmesh */
-int psys_intersect_dm(Object *ob, DerivedMesh *dm, float *vert_cos, float *co1, float* co2, float *min_d, int *min_face, float *min_w,
+int psys_intersect_dm(Scene *scene, Object *ob, DerivedMesh *dm, float *vert_cos, float *co1, float* co2, float *min_d, int *min_face, float *min_w,
float *face_minmax, float *pa_minmax, float radius, float *ipoint)
{
MFace *mface=0;
@@ -2854,9 +2854,9 @@ int psys_intersect_dm(Object *ob, DerivedMesh *dm, float *vert_cos, float *co1,
if(dm==0){
psys_disable_all(ob);
- dm=mesh_get_derived_final(ob,0);
+ dm=mesh_get_derived_final(scene, ob, 0);
if(dm==0)
- dm=mesh_get_derived_deform(ob,0);
+ dm=mesh_get_derived_deform(scene, ob, 0);
psys_enable_all(ob);
@@ -3087,7 +3087,7 @@ static void deflect_particle(Object *pob, ParticleSystemModifierData *psmd, Part
ob= ec->ob;
if(part->type!=PART_HAIR)
- where_is_object_time(ob,cfra);
+ where_is_object_time(scene, ob,cfra);
/* particles should not collide with emitter at birth */
if(ob==pob && pa->time < cfra && pa->time >= psys->cfra)
@@ -3280,7 +3280,7 @@ static int boid_see_mesh(ListBase *lb, Object *pob, ParticleSystem *psys, float
ob= ec->ob;
if(psys->part->type!=PART_HAIR)
- where_is_object_time(ob,cfra);
+ where_is_object_time(scene, ob,cfra);
if(ob==pob)
dm=psmd->dm;
@@ -3298,7 +3298,7 @@ static int boid_see_mesh(ListBase *lb, Object *pob, ParticleSystem *psys, float
Mat4MulVecfl(imat,co2);
}
- if(psys_intersect_dm(ob,dm,ec->vert_cos,co1,co2,&min_d,&min_face,min_w,ec->face_minmax,0,0,0))
+ if(psys_intersect_dm(scene,ob,dm,ec->vert_cos,co1,co2,&min_d,&min_face,min_w,ec->face_minmax,0,0,0))
min_ob=ob;
}
}
@@ -3311,9 +3311,9 @@ static int boid_see_mesh(ListBase *lb, Object *pob, ParticleSystem *psys, float
else{
psys_disable_all(ob);
- dm=mesh_get_derived_final(ob,0);
+ dm=mesh_get_derived_final(scene, ob, 0);
if(dm==0)
- dm=mesh_get_derived_deform(ob,0);
+ dm=mesh_get_derived_deform(scene, ob, 0);
psys_enable_all(ob);
}
@@ -3416,7 +3416,7 @@ static int add_boid_acc(BoidVecFunc *bvf, float lat_max, float tan_max, float *l
}
}
/* determines the acceleration that the boid tries to acchieve */
-static void boid_brain(BoidVecFunc *bvf, ParticleData *pa, Object *ob, ParticleSystem *psys, ParticleSettings *part, KDTree *tree, float timestep, float cfra, float *acc)
+static void boid_brain(BoidVecFunc *bvf, ParticleData *pa, Scene *scene, Object *ob, ParticleSystem *psys, ParticleSettings *part, KDTree *tree, float timestep, float cfra, float *acc)
{
ParticleData *pars=psys->particles;
KDTreeNearest ptn[MAX_BOIDNEIGHBOURS+1];
@@ -3516,7 +3516,7 @@ static void boid_brain(BoidVecFunc *bvf, ParticleData *pa, Object *ob, ParticleS
count=BLI_kdtree_find_n_nearest(ec->tree,epart->boidneighbours,pa->prev_state.co,NULL,ptn2);
for(p=0; p<count; p++){
state.time=-1.0;
- if(psys_get_particle_state(eob,epsys,ptn2[p].index,&state,0)){
+ if(psys_get_particle_state(scene, eob,epsys,ptn2[p].index,&state,0)){
VECSUB(dvec, state.co, pa->prev_state.co);
distance = Normalize(dvec);
@@ -3663,7 +3663,7 @@ static void boid_brain(BoidVecFunc *bvf, ParticleData *pa, Object *ob, ParticleS
count=BLI_kdtree_find_n_nearest(ec->tree,epart->boidneighbours,pa->prev_state.co,NULL,ptn2);
for(p=0; p<count; p++){
state.time=-1.0;
- if(psys_get_particle_state(eob,epsys,ptn2[p].index,&state,0)){
+ if(psys_get_particle_state(scene, eob,epsys,ptn2[p].index,&state,0)){
VECSUB(dvec, state.co, pa->prev_state.co);
distance = Normalize(dvec);
@@ -3823,14 +3823,14 @@ static void boid_body(BoidVecFunc *bvf, ParticleData *pa, ParticleSystem *psys,
Mat4MulVecfl(imat,co1);
Mat4MulVecfl(imat,co2);
- if(psys_intersect_dm(zob,0,0,co1,co2,&min_d,&min_face,min_w,0,0,0,0)){
+ if(psys_intersect_dm(scene,zob,0,0,co1,co2,&min_d,&min_face,min_w,0,0,0,0)){
DerivedMesh *dm;
MFace *mface;
MVert *mvert;
float loc[3],nor[3],q1[4];
psys_disable_all(zob);
- dm=mesh_get_derived_final(zob,0);
+ dm=mesh_get_derived_final(scene, zob, 0);
psys_enable_all(zob);
mface=dm->getFaceDataArray(dm,CD_MFACE);
@@ -3872,7 +3872,7 @@ static void boid_body(BoidVecFunc *bvf, ParticleData *pa, ParticleSystem *psys,
/************************************************/
/* Hair */
/************************************************/
-static void save_hair(Object *ob, ParticleSystem *psys, ParticleSystemModifierData *psmd, float cfra){
+static void save_hair(Scene *scene, Object *ob, ParticleSystem *psys, ParticleSystemModifierData *psmd, float cfra){
ParticleData *pa;
HairKey *key;
int totpart;
@@ -3880,7 +3880,7 @@ static void save_hair(Object *ob, ParticleSystem *psys, ParticleSystemModifierDa
Mat4Invert(ob->imat,ob->obmat);
- psys->lattice=psys_get_lattice(ob,psys);
+ psys->lattice= psys_get_lattice(scene, ob, psys);
if(psys->totpart==0) return;
@@ -3998,7 +3998,7 @@ static void dynamics_step(Object *ob, ParticleSystem *psys, ParticleSystemModifi
if(psys->effectors.first)
psys_end_effectors(psys);
- psys_init_effectors(ob,part->eff_group,psys);
+ psys_init_effectors(scene, ob, part->eff_group, psys);
if(psys->effectors.first)
precalc_effectors(ob,psys,psmd,cfra);
@@ -4080,7 +4080,7 @@ static void dynamics_step(Object *ob, ParticleSystem *psys, ParticleSystemModifi
case PART_PHYS_BOIDS:
{
float acc[3];
- boid_brain(&bvf,pa,ob,psys,part,tree,timestep,cfra,acc);
+ boid_brain(&bvf, pa, scene, ob, psys, part, tree, timestep,cfra,acc);
if(pa->alive != PARS_DYING)
boid_body(&bvf,pa,psys,part,timestep,acc);
break;
@@ -4118,13 +4118,13 @@ static void dynamics_step(Object *ob, ParticleSystem *psys, ParticleSystemModifi
}
/* check if path cache or children need updating and do it if needed */
-static void psys_update_path_cache(Object *ob, ParticleSystemModifierData *psmd, ParticleSystem *psys, float cfra)
+static void psys_update_path_cache(Scene *scene, Object *ob, ParticleSystemModifierData *psmd, ParticleSystem *psys, float cfra)
{
ParticleSettings *part=psys->part;
- ParticleEditSettings *pset=&G.scene->toolsettings->particle;
+ ParticleEditSettings *pset=&scene->toolsettings->particle;
int distr=0,alloc=0;
- if((psys->part->childtype && psys->totchild != get_psys_tot_child(psys)) || psys->recalc&PSYS_ALLOC)
+ if((psys->part->childtype && psys->totchild != get_psys_tot_child(scene, psys)) || psys->recalc&PSYS_ALLOC)
alloc=1;
if(alloc || psys->recalc&PSYS_DISTR || (psys->vgroup[PSYS_VG_DENSITY] && (G.f & G_WEIGHTPAINT)))
@@ -4134,10 +4134,10 @@ static void psys_update_path_cache(Object *ob, ParticleSystemModifierData *psmd,
if(alloc)
realloc_particles(ob,psys,psys->totpart);
- if(get_psys_tot_child(psys)) {
+ if(get_psys_tot_child(scene, psys)) {
/* don't generate children while computing the hair keys */
if(!(psys->part->type == PART_HAIR) || (psys->flag & PSYS_HAIR_DONE)) {
- distribute_particles(ob,psys,PART_FROM_CHILD);
+ distribute_particles(scene, ob, psys, PART_FROM_CHILD);
if(part->from!=PART_FROM_PARTICLE && part->childtype==PART_CHILD_FACES && part->parents!=0.0)
psys_find_parents(ob,psmd,psys);
@@ -4145,22 +4145,22 @@ static void psys_update_path_cache(Object *ob, ParticleSystemModifierData *psmd,
}
}
- if((part->type==PART_HAIR || psys->flag&PSYS_KEYED) && (psys_in_edit_mode(psys)
+ if((part->type==PART_HAIR || psys->flag&PSYS_KEYED) && (psys_in_edit_mode(scene, psys)
|| (part->type==PART_HAIR || part->draw_as==PART_DRAW_PATH))){
- psys_cache_paths(ob, psys, cfra, 0);
+ psys_cache_paths(scene, ob, psys, cfra, 0);
/* for render, child particle paths are computed on the fly */
if(part->childtype) {
- if(((psys->totchild!=0)) || (psys_in_edit_mode(psys) && (pset->flag&PE_SHOW_CHILD)))
+ if(((psys->totchild!=0)) || (psys_in_edit_mode(scene, psys) && (pset->flag&PE_SHOW_CHILD)))
if(!(psys->part->type == PART_HAIR) || (psys->flag & PSYS_HAIR_DONE))
- psys_cache_child_paths(ob, psys, cfra, 0);
+ psys_cache_child_paths(scene, ob, psys, cfra, 0);
}
}
else if(psys->pathcache)
psys_free_path_cache(psys);
}
-static void hair_step(Object *ob, ParticleSystemModifierData *psmd, ParticleSystem *psys, float cfra)
+static void hair_step(Scene *scene, Object *ob, ParticleSystemModifierData *psmd, ParticleSystem *psys, float cfra)
{
ParticleSettings *part = psys->part;
ParticleData *pa;
@@ -4181,18 +4181,18 @@ static void hair_step(Object *ob, ParticleSystemModifierData *psmd, ParticleSyst
if(psys->effectors.first)
psys_end_effectors(psys);
- psys_init_effectors(ob,part->eff_group,psys);
+ psys_init_effectors(scene, ob, part->eff_group, psys);
if(psys->effectors.first)
precalc_effectors(ob,psys,psmd,cfra);
- if(psys_in_edit_mode(psys))
+ if(psys_in_edit_mode(scene, psys))
; //XXX PE_recalc_world_cos(ob, psys);
- psys_update_path_cache(ob,psmd,psys,cfra);
+ psys_update_path_cache(scene, ob,psmd,psys,cfra);
}
/* updates cached particles' alive & other flags etc..*/
-static void cached_step(Object *ob, ParticleSystemModifierData *psmd, ParticleSystem *psys, float cfra)
+static void cached_step(Scene *scene, Object *ob, ParticleSystemModifierData *psmd, ParticleSystem *psys, float cfra)
{
ParticleSettings *part=psys->part;
ParticleData *pa;
@@ -4209,7 +4209,7 @@ static void cached_step(Object *ob, ParticleSystemModifierData *psmd, ParticleSy
psys_end_effectors(psys);
//if(part->flag & (PART_BAKED_GUIDES+PART_BAKED_DEATHS)){
- psys_init_effectors(ob,part->eff_group,psys);
+ psys_init_effectors(scene, ob, part->eff_group, psys);
if(psys->effectors.first)
precalc_effectors(ob,psys,psmd,cfra);
//}
@@ -4224,7 +4224,7 @@ static void cached_step(Object *ob, ParticleSystemModifierData *psmd, ParticleSy
}
pa->size= psys_get_size(ob,ma,psmd,icu_esize,psys,part,pa,vg_size);
- psys->lattice=psys_get_lattice(ob,psys);
+ psys->lattice= psys_get_lattice(scene, ob, psys);
if(part->flag & PART_LOOP && part->type!=PART_HAIR)
pa->loop = (short)((cfra - pa->time) / pa->lifetime);
@@ -4240,7 +4240,7 @@ static void cached_step(Object *ob, ParticleSystemModifierData *psmd, ParticleSy
else if(dietime <= cfra){
if(dietime > psys->cfra){
state.time = pa->dietime;
- psys_get_particle_state(ob,psys,p,&state,1);
+ psys_get_particle_state(scene, ob,psys,p,&state,1);
push_reaction(ob,psys,p,PART_EVENT_DEATH,&state);
}
pa->alive = PARS_DEAD;
@@ -4248,7 +4248,7 @@ static void cached_step(Object *ob, ParticleSystemModifierData *psmd, ParticleSy
else{
pa->alive = PARS_ALIVE;
state.time = cfra;
- psys_get_particle_state(ob,psys,p,&state,1);
+ psys_get_particle_state(scene, ob,psys,p,&state,1);
state.time = cfra;
push_reaction(ob,psys,p,PART_EVENT_NEAR,&state);
}
@@ -4265,9 +4265,9 @@ static void cached_step(Object *ob, ParticleSystemModifierData *psmd, ParticleSy
}
/* make sure that children are up to date */
- if(psys->part->childtype && psys->totchild != get_psys_tot_child(psys)) {
+ if(psys->part->childtype && psys->totchild != get_psys_tot_child(scene, psys)) {
realloc_particles(ob, psys, psys->totpart);
- distribute_particles(ob, psys, PART_FROM_CHILD);
+ distribute_particles(scene, ob, psys, PART_FROM_CHILD);
}
if(vg_size)
@@ -4308,7 +4308,7 @@ void psys_changed_type(ParticleSystem *psys)
psys_reset(psys, PSYS_RESET_ALL);
}
-static void particles_fluid_step(Object *ob, ParticleSystem *psys, int cfra)
+static void particles_fluid_step(Scene *scene, Object *ob, ParticleSystem *psys, int cfra)
{
if(psys->particles){
MEM_freeN(psys->particles);
@@ -4329,7 +4329,7 @@ static void particles_fluid_step(Object *ob, ParticleSystem *psys, int cfra)
char *suffix2 = ".gz";
char filename[256];
char debugStrBuffer[256];
- int curFrame = G.scene->r.cfra -1; // warning - sync with derived mesh fsmesh loading
+ int curFrame = scene->r.cfra -1; // warning - sync with derived mesh fsmesh loading
int p, j, numFileParts, totpart;
int readMask, activeParts = 0, fileParts = 0;
gzFile gzf;
@@ -4357,7 +4357,7 @@ static void particles_fluid_step(Object *ob, ParticleSystem *psys, int cfra)
part->totpart= totpart;
part->sta=part->end = 1.0f;
- part->lifetime = G.scene->r.efra + 1;
+ part->lifetime = scene->r.efra + 1;
/* initialize particles */
realloc_particles(ob, psys, part->totpart);
@@ -4415,7 +4415,7 @@ static void particles_fluid_step(Object *ob, ParticleSystem *psys, int cfra)
/* Calculates the next state for all particles of the system */
/* In particles code most fra-ending are frames, time-ending are fra*timestep (seconds)*/
-static void system_step(Object *ob, ParticleSystem *psys, ParticleSystemModifierData *psmd, float cfra)
+static void system_step(Scene *scene, Object *ob, ParticleSystem *psys, ParticleSystemModifierData *psmd, float cfra)
{
ParticleSettings *part;
ParticleData *pa;
@@ -4429,11 +4429,11 @@ static void system_step(Object *ob, ParticleSystem *psys, ParticleSystemModifier
part= psys->part;
cache= psys->pointcache;
- framenr= (int)G.scene->r.cfra;
+ framenr= (int)scene->r.cfra;
framedelta= framenr - cache->simframe;
BKE_ptcache_id_from_particles(&pid, ob, psys);
- BKE_ptcache_id_time(&pid, 0.0f, &startframe, &endframe, NULL);
+ BKE_ptcache_id_time(&pid, scene, 0.0f, &startframe, &endframe, NULL);
/* update ipo's */
if((part->flag & PART_ABS_TIME) && part->ipo) {
@@ -4443,14 +4443,14 @@ static void system_step(Object *ob, ParticleSystem *psys, ParticleSystemModifier
/* hair if it's already done is handled separate */
if(part->type == PART_HAIR && (psys->flag & PSYS_HAIR_DONE)) {
- hair_step(ob, psmd, psys, cfra);
+ hair_step(scene, ob, psmd, psys, cfra);
psys->cfra = cfra;
psys->recalc = 0;
return;
}
/* fluid is also handled separate */
else if(part->type == PART_FLUID) {
- particles_fluid_step(ob, psys, framenr);
+ particles_fluid_step(scene, ob, psys, framenr);
psys->cfra = cfra;
psys->recalc = 0;
return;
@@ -4485,7 +4485,7 @@ static void system_step(Object *ob, ParticleSystem *psys, ParticleSystemModifier
totpart = part->grid_res*part->grid_res*part->grid_res;
else
totpart = psys->part->totpart;
- totchild = get_psys_tot_child(psys);
+ totchild = get_psys_tot_child(scene, psys);
if(oldtotpart != totpart || (psys->part->childtype && oldtotchild != totchild)) {
only_children_changed = (oldtotpart == totpart);
@@ -4505,13 +4505,13 @@ static void system_step(Object *ob, ParticleSystem *psys, ParticleSystemModifier
if(alloc)
realloc_particles(ob, psys, totpart);
- distribute_particles(ob, psys, part->from);
+ distribute_particles(scene, ob, psys, part->from);
if((psys->part->type == PART_HAIR) && !(psys->flag & PSYS_HAIR_DONE))
/* don't generate children while growing hair - waste of time */
psys_free_children(psys);
- else if(get_psys_tot_child(psys))
- distribute_particles(ob, psys, PART_FROM_CHILD);
+ else if(get_psys_tot_child(scene, psys))
+ distribute_particles(scene, ob, psys, PART_FROM_CHILD);
}
if(only_children_changed==0) {
@@ -4533,12 +4533,12 @@ static void system_step(Object *ob, ParticleSystem *psys, ParticleSystemModifier
set_keyed_keys(ob, psys);
}
- cached_step(ob,psmd,psys,cfra);
+ cached_step(scene, ob, psmd, psys, cfra);
psys->cfra=cfra;
psys->recalc = 0;
if(part->phystype==PART_PHYS_KEYED && psys->flag&PSYS_FIRST_KEYED) {
- psys_update_path_cache(ob,psmd,psys,framenr);
+ psys_update_path_cache(scene, ob, psmd, psys, framenr);
}
cache->simframe= framenr;
@@ -4618,7 +4618,7 @@ static void system_step(Object *ob, ParticleSystem *psys, ParticleSystemModifier
/* for keyed particles the path is allways known so it can be drawn */
if(part->phystype==PART_PHYS_KEYED && psys->flag&PSYS_FIRST_KEYED){
set_keyed_keys(ob, psys);
- psys_update_path_cache(ob,psmd,psys,(int)cfra);
+ psys_update_path_cache(scene, ob, psmd, psys,(int)cfra);
}
else if(psys->pathcache)
psys_free_path_cache(psys);
@@ -4635,7 +4635,7 @@ static void system_step(Object *ob, ParticleSystem *psys, ParticleSystemModifier
}
}
-static void psys_to_softbody(Object *ob, ParticleSystem *psys)
+static void psys_to_softbody(Scene *scene, Object *ob, ParticleSystem *psys)
{
SoftBody *sb;
short softflag;
@@ -4655,7 +4655,7 @@ static void psys_to_softbody(Object *ob, ParticleSystem *psys)
ob->softflag= psys->softflag;
/* do softbody */
- sbObjectStep(ob, (float)G.scene->r.cfra, NULL, psys_count_keys(psys));
+ sbObjectStep(scene, ob, (float)scene->r.cfra, NULL, psys_count_keys(psys));
/* return things back to normal */
psys->soft= ob->soft;
@@ -4677,7 +4677,7 @@ static int hair_needs_recalc(ParticleSystem *psys)
}
/* main particle update call, checks that things are ok on the large scale before actual particle calculations */
-void particle_system_update(Object *ob, ParticleSystem *psys)
+void particle_system_update(Scene *scene, Object *ob, ParticleSystem *psys)
{
ParticleSystemModifierData *psmd;
float cfra;
@@ -4685,7 +4685,7 @@ void particle_system_update(Object *ob, ParticleSystem *psys)
if(!psys_check_enabled(ob, psys))
return;
- cfra= bsystem_time(ob, (float)G.scene->r.cfra, 0.0f);
+ cfra= bsystem_time(scene, ob, (float)scene->r.cfra, 0.0f);
psmd= psys_get_modifier(ob, psys);
/* system was already updated from modifier stack */
@@ -4711,8 +4711,8 @@ void particle_system_update(Object *ob, ParticleSystem *psys)
for(i=0; i<=psys->part->hair_step; i++){
hcfra=100.0f*(float)i/(float)psys->part->hair_step;
- system_step(ob, psys, psmd, hcfra);
- save_hair(ob, psys, psmd, hcfra);
+ system_step(scene, ob, psys, psmd, hcfra);
+ save_hair(scene, ob, psys, psmd, hcfra);
}
psys->flag |= PSYS_HAIR_DONE;
@@ -4720,10 +4720,10 @@ void particle_system_update(Object *ob, ParticleSystem *psys)
/* handle softbody hair */
if(psys->part->type==PART_HAIR && psys->soft)
- psys_to_softbody(ob, psys);
+ psys_to_softbody(scene, ob, psys);
/* the main particle system step */
- system_step(ob, psys, psmd, cfra);
+ system_step(scene, ob, psys, psmd, cfra);
/* save matrix for duplicators */
Mat4Invert(psys->imat, ob->obmat);
diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c
index 596ac882d24..059aeadb24f 100644
--- a/source/blender/blenkernel/intern/pointcache.c
+++ b/source/blender/blenkernel/intern/pointcache.c
@@ -375,7 +375,7 @@ int BKE_ptcache_id_exist(PTCacheID *pid, int cfra)
return BLI_exists(filename);
}
-void BKE_ptcache_id_time(PTCacheID *pid, float cfra, int *startframe, int *endframe, float *timescale)
+void BKE_ptcache_id_time(PTCacheID *pid, Scene *scene, float cfra, int *startframe, int *endframe, float *timescale)
{
Object *ob;
PointCache *cache;
@@ -394,8 +394,8 @@ void BKE_ptcache_id_time(PTCacheID *pid, float cfra, int *startframe, int *endfr
cache= pid->cache;
if(timescale) {
- time= bsystem_time(ob, cfra, 0.0f);
- nexttime= bsystem_time(ob, cfra+1.0f, 0.0f);
+ time= bsystem_time(scene, ob, cfra, 0.0f);
+ nexttime= bsystem_time(scene, ob, cfra+1.0f, 0.0f);
*timescale= MAX2(nexttime - time, 0.0f);
}
@@ -552,7 +552,7 @@ void BKE_ptcache_remove(void)
static int CONTINUE_PHYSICS = 0;
-void BKE_ptcache_set_continue_physics(int enable)
+void BKE_ptcache_set_continue_physics(Scene *scene, int enable)
{
Object *ob;
@@ -562,7 +562,7 @@ void BKE_ptcache_set_continue_physics(int enable)
if(CONTINUE_PHYSICS == 0) {
for(ob=G.main->object.first; ob; ob=ob->id.next)
if(BKE_ptcache_object_reset(ob, PTCACHE_RESET_OUTDATED))
- DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
+ DAG_object_flush_update(scene, ob, OB_RECALC_DATA);
}
}
}
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index d7df27d9c35..a59f1872263 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -317,21 +317,17 @@ Base *object_in_scene(Object *ob, Scene *sce)
return NULL;
}
-void set_scene_bg(Scene *sce)
+void set_scene_bg(Scene *scene)
{
+ Scene *sce;
Base *base;
Object *ob;
Group *group;
GroupObject *go;
int flag;
- // Note: this here is defined in editseq.c (BIF_editseq.h), NOT in blenkernel!
- //XXX clear_last_seq();
-
- G.scene= sce;
-
/* check for cyclic sets, for reading old files but also for definite security (py?) */
- scene_check_setscene(G.scene);
+ scene_check_setscene(scene);
/* deselect objects (for dataselect) */
for(ob= G.main->object.first; ob; ob= ob->id.next)
@@ -347,15 +343,15 @@ void set_scene_bg(Scene *sce)
}
/* sort baselist */
- DAG_scene_sort(sce);
+ DAG_scene_sort(scene);
/* ensure dags are built for sets */
- for(sce= sce->set; sce; sce= sce->set)
+ for(sce= scene->set; sce; sce= sce->set)
if(sce->theDag==NULL)
DAG_scene_sort(sce);
/* copy layers and flags from bases to objects */
- for(base= G.scene->base.first; base; base= base->next) {
+ for(base= scene->base.first; base; base= base->next) {
ob= base->object;
ob->lay= base->lay;
@@ -394,7 +390,7 @@ void set_scene_name(char *name)
/* used by metaballs
* doesnt return the original duplicated object, only dupli's
*/
-int next_object(int val, Base **base, Object **ob)
+int next_object(Scene *scene, int val, Base **base, Object **ob)
{
static ListBase *duplilist= NULL;
static DupliObject *dupob;
@@ -414,15 +410,15 @@ int next_object(int val, Base **base, Object **ob)
/* the first base */
if(fase==F_START) {
- *base= G.scene->base.first;
+ *base= scene->base.first;
if(*base) {
*ob= (*base)->object;
fase= F_SCENE;
}
else {
/* exception: empty scene */
- if(G.scene->set && G.scene->set->base.first) {
- *base= G.scene->set->base.first;
+ if(scene->set && scene->set->base.first) {
+ *base= scene->set->base.first;
*ob= (*base)->object;
fase= F_SET;
}
@@ -435,8 +431,8 @@ int next_object(int val, Base **base, Object **ob)
else {
if(fase==F_SCENE) {
/* scene is finished, now do the set */
- if(G.scene->set && G.scene->set->base.first) {
- *base= G.scene->set->base.first;
+ if(scene->set && scene->set->base.first) {
+ *base= scene->set->base.first;
*ob= (*base)->object;
fase= F_SET;
}
@@ -453,7 +449,7 @@ int next_object(int val, Base **base, Object **ob)
this enters eternal loop because of
makeDispListMBall getting called inside of group_duplilist */
if((*base)->object->dup_group == NULL) {
- duplilist= object_duplilist(G.scene, (*base)->object);
+ duplilist= object_duplilist(scene, (*base)->object);
dupob= duplilist->first;
@@ -573,7 +569,7 @@ static void scene_update(Scene *sce, unsigned int lay)
for(base= sce->base.first; base; base= base->next) {
ob= base->object;
- object_handle_update(ob); // bke_object.h
+ object_handle_update(sce, ob); // bke_object.h
/* only update layer when an ipo */
if(ob->ipo && has_ipo_code(ob->ipo, OB_LAY) ) {
@@ -591,7 +587,7 @@ void scene_update_for_newframe(Scene *sce, unsigned int lay)
framechange_poses_clear_unkeyed();
/* object ipos are calculated in where_is_object */
- do_all_data_ipos();
+ do_all_data_ipos(sce);
#ifndef DISABLE_PYTHON
if (G.f & G_DOSCRIPTLINKS) BPY_do_all_scripts(SCRIPT_FRAMECHANGED, 0);
#endif
diff --git a/source/blender/blenkernel/intern/shrinkwrap.c b/source/blender/blenkernel/intern/shrinkwrap.c
index 3b29409d75c..f2197c932c9 100644
--- a/source/blender/blenkernel/intern/shrinkwrap.c
+++ b/source/blender/blenkernel/intern/shrinkwrap.c
@@ -91,18 +91,18 @@ typedef void ( *Shrinkwrap_ForeachVertexCallback) (DerivedMesh *target, float *c
/* get derived mesh */
//TODO is anyfunction that does this? returning the derivedFinal witouth we caring if its in edit mode or not?
-DerivedMesh *object_get_derived_final(Object *ob, CustomDataMask dataMask)
+static DerivedMesh *object_get_derived_final(struct Scene *scene, Object *ob, CustomDataMask dataMask)
{
Mesh *me= ob->data;
if (me->edit_mesh)
{
DerivedMesh *final = NULL;
- editmesh_get_derived_cage_and_final(ob, me->edit_mesh, &final, dataMask);
+ editmesh_get_derived_cage_and_final(scene, ob, me->edit_mesh, &final, dataMask);
return final;
}
else
- return mesh_get_derived_final(ob, dataMask);
+ return mesh_get_derived_final(scene, ob, dataMask);
}
/* Space transform */
@@ -124,13 +124,13 @@ void space_transform_invert(const SpaceTransform *data, float *co)
VecMat4MulVecfl(co, ((SpaceTransform*)data)->target2local, co);
}
-void space_transform_apply_normal(const SpaceTransform *data, float *no)
+static void space_transform_apply_normal(const SpaceTransform *data, float *no)
{
Mat4Mul3Vecfl( ((SpaceTransform*)data)->local2target, no);
Normalize(no); // TODO: could we just determine de scale value from the matrix?
}
-void space_transform_invert_normal(const SpaceTransform *data, float *no)
+static void space_transform_invert_normal(const SpaceTransform *data, float *no)
{
Mat4Mul3Vecfl(((SpaceTransform*)data)->target2local, no);
Normalize(no); // TODO: could we just determine de scale value from the matrix?
@@ -146,72 +146,6 @@ static float squared_dist(const float *a, const float *b)
return INPR(tmp, tmp);
}
-/* Main shrinkwrap function */
-void shrinkwrapModifier_deform(ShrinkwrapModifierData *smd, Object *ob, DerivedMesh *dm, float (*vertexCos)[3], int numVerts)
-{
-
- ShrinkwrapCalcData calc = NULL_ShrinkwrapCalcData;
-
- //remove loop dependencies on derived meshs (TODO should this be done elsewhere?)
- if(smd->target == ob) smd->target = NULL;
- if(smd->auxTarget == ob) smd->auxTarget = NULL;
-
-
- //Configure Shrinkwrap calc data
- calc.smd = smd;
- calc.ob = ob;
- calc.original = dm;
- calc.numVerts = numVerts;
- calc.vertexCos = vertexCos;
-
- //DeformVertex
- calc.vgroup = get_named_vertexgroup_num(calc.ob, calc.smd->vgroup_name);
- if(calc.original)
- {
- calc.dvert = calc.original->getVertDataArray(calc.original, CD_MDEFORMVERT);
- }
- else if(calc.ob->type == OB_LATTICE)
- {
- calc.dvert = lattice_get_deform_verts(calc.ob);
- }
-
-
- if(smd->target)
- {
- //TODO currently we need a copy in case object_get_derived_final returns an emDM that does not defines getVertArray or getFace array
- calc.target = CDDM_copy( object_get_derived_final(smd->target, CD_MASK_BAREMESH) );
-
- //TODO there might be several "bugs" on non-uniform scales matrixs.. because it will no longer be nearest surface, not sphere projection
- //because space has been deformed
- space_transform_setup(&calc.local2target, ob, smd->target);
-
- calc.keepDist = smd->keepDist; //TODO: smd->keepDist is in global units.. must change to local
- }
-
-
- //Projecting target defined - lets work!
- if(calc.target)
- {
- switch(smd->shrinkType)
- {
- case MOD_SHRINKWRAP_NEAREST_SURFACE:
- BENCH(shrinkwrap_calc_nearest_surface_point(&calc));
- break;
-
- case MOD_SHRINKWRAP_PROJECT:
- BENCH(shrinkwrap_calc_normal_projection(&calc));
- break;
-
- case MOD_SHRINKWRAP_NEAREST_VERTEX:
- BENCH(shrinkwrap_calc_nearest_vertex(&calc));
- break;
- }
- }
-
- //free memory
- if(calc.target)
- calc.target->release( calc.target );
-}
/*
* Shrinkwrap to the nearest vertex
@@ -219,7 +153,7 @@ void shrinkwrapModifier_deform(ShrinkwrapModifierData *smd, Object *ob, DerivedM
* it builds a kdtree of vertexs we can attach to and then
* for each vertex performs a nearest vertex search on the tree
*/
-void shrinkwrap_calc_nearest_vertex(ShrinkwrapCalcData *calc)
+static void shrinkwrap_calc_nearest_vertex(ShrinkwrapCalcData *calc)
{
int i;
@@ -346,7 +280,7 @@ int normal_projection_project_vertex(char options, const float *vert, const floa
}
-void shrinkwrap_calc_normal_projection(ShrinkwrapCalcData *calc)
+static void shrinkwrap_calc_normal_projection(ShrinkwrapCalcData *calc, struct Scene *scene)
{
int i;
@@ -435,7 +369,7 @@ do
{
space_transform_setup( &local2aux, calc->ob, calc->smd->auxTarget);
- aux_mesh = CDDM_copy( object_get_derived_final(calc->smd->auxTarget, CD_MASK_BAREMESH) ); //TODO currently we need a copy in case object_get_derived_final returns an emDM that does not defines getVertArray or getFace array
+ aux_mesh = CDDM_copy( object_get_derived_final(scene, calc->smd->auxTarget, CD_MASK_BAREMESH) ); //TODO currently we need a copy in case object_get_derived_final returns an emDM that does not defines getVertArray or getFace array
if(aux_mesh)
BENCH(bvhtree_from_mesh_faces(&auxData, aux_mesh, 0.0, 4, 6));
else
@@ -527,7 +461,7 @@ do
* it builds a BVHTree from the target mesh and then performs a
* NN matchs for each vertex
*/
-void shrinkwrap_calc_nearest_surface_point(ShrinkwrapCalcData *calc)
+static void shrinkwrap_calc_nearest_surface_point(ShrinkwrapCalcData *calc)
{
int i;
@@ -604,3 +538,70 @@ void shrinkwrap_calc_nearest_surface_point(ShrinkwrapCalcData *calc)
free_bvhtree_from_mesh(&treeData);
}
+/* Main shrinkwrap function */
+void shrinkwrapModifier_deform(ShrinkwrapModifierData *smd, struct Scene *scene, Object *ob, DerivedMesh *dm, float (*vertexCos)[3], int numVerts)
+{
+
+ ShrinkwrapCalcData calc = NULL_ShrinkwrapCalcData;
+
+ //remove loop dependencies on derived meshs (TODO should this be done elsewhere?)
+ if(smd->target == ob) smd->target = NULL;
+ if(smd->auxTarget == ob) smd->auxTarget = NULL;
+
+
+ //Configure Shrinkwrap calc data
+ calc.smd = smd;
+ calc.ob = ob;
+ calc.original = dm;
+ calc.numVerts = numVerts;
+ calc.vertexCos = vertexCos;
+
+ //DeformVertex
+ calc.vgroup = get_named_vertexgroup_num(calc.ob, calc.smd->vgroup_name);
+ if(calc.original)
+ {
+ calc.dvert = calc.original->getVertDataArray(calc.original, CD_MDEFORMVERT);
+ }
+ else if(calc.ob->type == OB_LATTICE)
+ {
+ calc.dvert = lattice_get_deform_verts(calc.ob);
+ }
+
+
+ if(smd->target)
+ {
+ //TODO currently we need a copy in case object_get_derived_final returns an emDM that does not defines getVertArray or getFace array
+ calc.target = CDDM_copy( object_get_derived_final(scene, smd->target, CD_MASK_BAREMESH) );
+
+ //TODO there might be several "bugs" on non-uniform scales matrixs.. because it will no longer be nearest surface, not sphere projection
+ //because space has been deformed
+ space_transform_setup(&calc.local2target, ob, smd->target);
+
+ calc.keepDist = smd->keepDist; //TODO: smd->keepDist is in global units.. must change to local
+ }
+
+
+ //Projecting target defined - lets work!
+ if(calc.target)
+ {
+ switch(smd->shrinkType)
+ {
+ case MOD_SHRINKWRAP_NEAREST_SURFACE:
+ BENCH(shrinkwrap_calc_nearest_surface_point(&calc));
+ break;
+
+ case MOD_SHRINKWRAP_PROJECT:
+ BENCH(shrinkwrap_calc_normal_projection(&calc, scene));
+ break;
+
+ case MOD_SHRINKWRAP_NEAREST_VERTEX:
+ BENCH(shrinkwrap_calc_nearest_vertex(&calc));
+ break;
+ }
+ }
+
+ //free memory
+ if(calc.target)
+ calc.target->release( calc.target );
+}
+
diff --git a/source/blender/blenkernel/intern/softbody.c b/source/blender/blenkernel/intern/softbody.c
index 1ae547ba7b8..422218e2957 100644
--- a/source/blender/blenkernel/intern/softbody.c
+++ b/source/blender/blenkernel/intern/softbody.c
@@ -120,7 +120,8 @@ typedef struct SBScratch {
float aabbmin[3],aabbmax[3];
}SBScratch;
-typedef struct SB_thread_context{
+typedef struct SB_thread_context {
+ Scene *scene;
Object *ob;
float forcetime;
float timenow;
@@ -196,7 +197,7 @@ static float sb_time_scale(Object *ob)
/*
this would be frames/sec independant timing assuming 25 fps is default
but does not work very well with NLA
- return (25.0f/G.scene->r.frs_sec)
+ return (25.0f/scene->r.frs_sec)
*/
}
/*--- frame based timing ---*/
@@ -484,12 +485,11 @@ static void ccd_mesh_free(ccd_Mesh *ccdm)
}
}
-static void ccd_build_deflector_hache(Object *vertexowner,GHash *hash)
+static void ccd_build_deflector_hash(Scene *scene, Object *vertexowner, GHash *hash)
{
- Base *base;
+ Base *base= scene->base.first;
Object *ob;
- base= G.scene->base.first;
- base= G.scene->base.first;
+
if (!hash) return;
while (base) {
/*Only proceed for mesh object in same layer */
@@ -516,9 +516,9 @@ static void ccd_build_deflector_hache(Object *vertexowner,GHash *hash)
}
else {
if(ob->softflag & OB_SB_COLLFINAL) /* so maybe someone wants overkill to collide with subsurfed */
- dm = mesh_get_derived_final(ob, CD_MASK_BAREMESH);
+ dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH);
else
- dm = mesh_get_derived_deform(ob, CD_MASK_BAREMESH);
+ dm = mesh_get_derived_deform(scene, ob, CD_MASK_BAREMESH);
}
if(dm){
@@ -536,12 +536,11 @@ static void ccd_build_deflector_hache(Object *vertexowner,GHash *hash)
} /* while (base) */
}
-static void ccd_update_deflector_hache(Object *vertexowner,GHash *hash)
+static void ccd_update_deflector_hash(Scene *scene, Object *vertexowner, GHash *hash)
{
- Base *base;
+ Base *base= scene->base.first;
Object *ob;
- base= G.scene->base.first;
- base= G.scene->base.first;
+
if ((!hash) || (!vertexowner)) return;
while (base) {
/*Only proceed for mesh object in same layer */
@@ -558,9 +557,9 @@ static void ccd_update_deflector_hache(Object *vertexowner,GHash *hash)
DerivedMesh *dm= NULL;
if(ob->softflag & OB_SB_COLLFINAL) { /* so maybe someone wants overkill to collide with subsurfed */
- dm = mesh_get_derived_final(ob, CD_MASK_BAREMESH);
+ dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH);
} else {
- dm = mesh_get_derived_deform(ob, CD_MASK_BAREMESH);
+ dm = mesh_get_derived_deform(scene, ob, CD_MASK_BAREMESH);
}
if(dm){
ccd_Mesh *ccdmesh = BLI_ghash_lookup(hash,ob);
@@ -830,12 +829,12 @@ static void calculate_collision_balls(Object *ob)
/* creates new softbody if didn't exist yet, makes new points and springs arrays */
-static void renew_softbody(Object *ob, int totpoint, int totspring)
+static void renew_softbody(Scene *scene, Object *ob, int totpoint, int totspring)
{
SoftBody *sb;
int i;
short softflag;
- if(ob->soft==NULL) ob->soft= sbNew();
+ if(ob->soft==NULL) ob->soft= sbNew(scene);
else free_softbody_intern(ob->soft);
sb= ob->soft;
softflag=ob->softflag;
@@ -970,11 +969,11 @@ static void Vec3PlusStVec(float *v, float s, float *v1)
/* +++ dependancy information functions*/
-static int are_there_deflectors(unsigned int layer)
+static int are_there_deflectors(Scene *scene, unsigned int layer)
{
Base *base;
- for(base = G.scene->base.first; base; base= base->next) {
+ for(base = scene->base.first; base; base= base->next) {
if( (base->lay & layer) && base->object->pd) {
if(base->object->pd->deflect)
return 1;
@@ -983,9 +982,9 @@ static int are_there_deflectors(unsigned int layer)
return 0;
}
-static int query_external_colliders(Object *me)
+static int query_external_colliders(Scene *scene, Object *me)
{
- return(are_there_deflectors(me->lay));
+ return(are_there_deflectors(scene, me->lay));
}
/* --- dependancy information functions*/
@@ -1528,9 +1527,7 @@ static int sb_detect_edge_collisionCached(float edge_v1[3],float edge_v2[3],floa
return deflected;
}
-
-
-static void _scan_for_ext_spring_forces(Object *ob,float timenow,int ifirst,int ilast, struct ListBase *do_effector)
+static void _scan_for_ext_spring_forces(Scene *scene, Object *ob, float timenow, int ifirst, int ilast, struct ListBase *do_effector)
{
SoftBody *sb = ob->soft;
int a;
@@ -1569,7 +1566,7 @@ static void _scan_for_ext_spring_forces(Object *ob,float timenow,int ifirst,int
float pos[3];
VecMidf(pos, sb->bpoint[bs->v1].pos , sb->bpoint[bs->v2].pos);
VecMidf(vel, sb->bpoint[bs->v1].vec , sb->bpoint[bs->v2].vec);
- pdDoEffectors(do_effector, pos, force, speed, (float)G.scene->r.cfra, 0.0f, PE_WIND_AS_SPEED);
+ pdDoEffectors(scene, do_effector, pos, force, speed, (float)scene->r.cfra, 0.0f, PE_WIND_AS_SPEED);
VecMulf(speed,windfactor);
VecAddf(vel,vel,speed);
}
@@ -1601,26 +1598,27 @@ static void _scan_for_ext_spring_forces(Object *ob,float timenow,int ifirst,int
}
-static void scan_for_ext_spring_forces(Object *ob,float timenow)
+static void scan_for_ext_spring_forces(Scene *scene, Object *ob, float timenow)
{
SoftBody *sb = ob->soft;
ListBase *do_effector= NULL;
- do_effector= pdInitEffectors(ob,NULL);
+
+ do_effector= pdInitEffectors(scene, ob,NULL);
if (sb){
- _scan_for_ext_spring_forces(ob,timenow,0,sb->totspring,do_effector);
+ _scan_for_ext_spring_forces(scene, ob, timenow, 0, sb->totspring, do_effector);
}
if(do_effector)
- pdEndEffectors(do_effector);
+ pdEndEffectors(do_effector);
}
static void *exec_scan_for_ext_spring_forces(void *data)
{
SB_thread_context *pctx = (SB_thread_context*)data;
- _scan_for_ext_spring_forces(pctx->ob,pctx->timenow,pctx->ifirst,pctx->ilast,pctx->do_effector);
+ _scan_for_ext_spring_forces(pctx->scene, pctx->ob, pctx->timenow, pctx->ifirst, pctx->ilast, pctx->do_effector);
return 0;
}
-static void sb_sfesf_threads_run(struct Object *ob, float timenow,int totsprings,int *ptr_to_break_func())
+static void sb_sfesf_threads_run(Scene *scene, struct Object *ob, float timenow,int totsprings,int *ptr_to_break_func())
{
ListBase *do_effector = NULL;
ListBase threads;
@@ -1628,11 +1626,11 @@ static void sb_sfesf_threads_run(struct Object *ob, float timenow,int totsprings
int i, totthread,left,dec;
int lowsprings =100; /* wild guess .. may increase with better thread management 'above' or even be UI option sb->spawn_cf_threads_nopts */
- do_effector= pdInitEffectors(ob,NULL);
+ do_effector= pdInitEffectors(scene, ob,NULL);
/* figure the number of threads while preventing pretty pointless threading overhead */
- if(G.scene->r.mode & R_FIXED_THREADS)
- totthread= G.scene->r.threads;
+ if(scene->r.mode & R_FIXED_THREADS)
+ totthread= scene->r.threads;
else
totthread= BLI_system_thread_count();
/* what if we got zillions of CPUs running but less to spread*/
@@ -1645,6 +1643,7 @@ static void sb_sfesf_threads_run(struct Object *ob, float timenow,int totsprings
left = totsprings;
dec = totsprings/totthread +1;
for(i=0; i<totthread; i++) {
+ sb_threads[i].scene = scene;
sb_threads[i].ob = ob;
sb_threads[i].forcetime = 0.0; // not used here
sb_threads[i].timenow = timenow;
@@ -2119,13 +2118,14 @@ static void sb_spring_force(Object *ob,int bpi,BodySpring *bs,float iks,float fo
/* since this is definitely the most CPU consuming task here .. try to spread it */
/* core function _softbody_calc_forces_slice_in_a_thread */
/* result is int to be able to flag user break */
-static int _softbody_calc_forces_slice_in_a_thread(Object *ob, float forcetime, float timenow,int ifirst,int ilast,int *ptr_to_break_func(),ListBase *do_effector,int do_deflector,float fieldfactor, float windfactor)
+static int _softbody_calc_forces_slice_in_a_thread(Scene *scene, Object *ob, float forcetime, float timenow,int ifirst,int ilast,int *ptr_to_break_func(),ListBase *do_effector,int do_deflector,float fieldfactor, float windfactor)
{
float iks;
int bb,do_selfcollision,do_springcollision,do_aero;
int number_of_points_here = ilast - ifirst;
SoftBody *sb= ob->soft; /* is supposed to be there */
BodyPoint *bp;
+
/* intitialize */
if (sb) {
/* check conditions for various options */
@@ -2247,7 +2247,7 @@ static int _softbody_calc_forces_slice_in_a_thread(Object *ob, float forcetime,
float speed[3]= {0.0f, 0.0f, 0.0f};
float eval_sb_fric_force_scale = sb_fric_force_scale(ob); /* just for calling function once */
- pdDoEffectors(do_effector, bp->pos, force, speed, (float)G.scene->r.cfra, 0.0f, PE_WIND_AS_SPEED);
+ pdDoEffectors(scene, do_effector, bp->pos, force, speed, (float)scene->r.cfra, 0.0f, PE_WIND_AS_SPEED);
/* apply forcefield*/
VecMulf(force,fieldfactor* eval_sb_fric_force_scale);
@@ -2322,11 +2322,11 @@ return 0; /*done fine*/
static void *exec_softbody_calc_forces(void *data)
{
SB_thread_context *pctx = (SB_thread_context*)data;
- _softbody_calc_forces_slice_in_a_thread(pctx->ob,pctx->forcetime,pctx->timenow,pctx->ifirst,pctx->ilast,NULL,pctx->do_effector,pctx->do_deflector,pctx->fieldfactor,pctx->windfactor);
+ _softbody_calc_forces_slice_in_a_thread(pctx->scene, pctx->ob, pctx->forcetime, pctx->timenow, pctx->ifirst, pctx->ilast, NULL, pctx->do_effector,pctx->do_deflector,pctx->fieldfactor,pctx->windfactor);
return 0;
}
-static void sb_cf_threads_run(struct Object *ob, float forcetime, float timenow,int totpoint,int *ptr_to_break_func(),struct ListBase *do_effector,int do_deflector,float fieldfactor, float windfactor)
+static void sb_cf_threads_run(Scene *scene, Object *ob, float forcetime, float timenow,int totpoint,int *ptr_to_break_func(),struct ListBase *do_effector,int do_deflector,float fieldfactor, float windfactor)
{
ListBase threads;
SB_thread_context *sb_threads;
@@ -2334,8 +2334,8 @@ static void sb_cf_threads_run(struct Object *ob, float forcetime, float timenow,
int lowpoints =100; /* wild guess .. may increase with better thread management 'above' or even be UI option sb->spawn_cf_threads_nopts */
/* figure the number of threads while preventing pretty pointless threading overhead */
- if(G.scene->r.mode & R_FIXED_THREADS)
- totthread= G.scene->r.threads;
+ if(scene->r.mode & R_FIXED_THREADS)
+ totthread= scene->r.threads;
else
totthread= BLI_system_thread_count();
/* what if we got zillions of CPUs running but less to spread*/
@@ -2383,7 +2383,7 @@ static void sb_cf_threads_run(struct Object *ob, float forcetime, float timenow,
MEM_freeN(sb_threads);
}
-static void softbody_calc_forcesEx(Object *ob, float forcetime, float timenow, int nl_flags)
+static void softbody_calc_forcesEx(Scene *scene, Object *ob, float forcetime, float timenow, int nl_flags)
{
/* rule we never alter free variables :bp->vec bp->pos in here !
* this will ruin adaptive stepsize AKA heun! (BM)
@@ -2398,7 +2398,7 @@ static void softbody_calc_forcesEx(Object *ob, float forcetime, float timenow, i
gravity = sb->grav * sb_grav_force_scale(ob);
/* check conditions for various options */
- do_deflector= query_external_colliders(ob);
+ do_deflector= query_external_colliders(scene, ob);
do_selfcollision=((ob->softflag & OB_SB_EDGES) && (sb->bspring)&& (ob->softflag & OB_SB_SELF));
do_springcollision=do_deflector && (ob->softflag & OB_SB_EDGES) &&(ob->softflag & OB_SB_EDGECOLL);
do_aero=((sb->aeroedge)&& (ob->softflag & OB_SB_EDGES));
@@ -2407,17 +2407,17 @@ static void softbody_calc_forcesEx(Object *ob, float forcetime, float timenow, i
bproot= sb->bpoint; /* need this for proper spring addressing */
if (do_springcollision || do_aero)
- sb_sfesf_threads_run(ob,timenow,sb->totspring,NULL);
+ sb_sfesf_threads_run(scene, ob, timenow,sb->totspring,NULL);
/* after spring scan because it uses Effoctors too */
- do_effector= pdInitEffectors(ob,NULL);
+ do_effector= pdInitEffectors(scene, ob,NULL);
if (do_deflector) {
float defforce[3];
do_deflector = sb_detect_aabb_collisionCached(defforce,ob->lay,ob,timenow);
}
- sb_cf_threads_run(ob,forcetime,timenow,sb->totpoint,NULL,do_effector,do_deflector,fieldfactor,windfactor);
+ sb_cf_threads_run(scene, ob, forcetime, timenow, sb->totpoint, NULL, do_effector, do_deflector, fieldfactor, windfactor);
/* finally add forces caused by face collision */
if (ob->softflag & OB_SB_FACECOLL) scan_for_ext_face_forces(ob,timenow);
@@ -2429,11 +2429,11 @@ static void softbody_calc_forcesEx(Object *ob, float forcetime, float timenow, i
-static void softbody_calc_forces(Object *ob, float forcetime, float timenow, int nl_flags)
+static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, float timenow, int nl_flags)
{
/* redirection to the new threaded Version */
if (!(G.rt & 0x10)){ // 16
- softbody_calc_forcesEx(ob, forcetime, timenow, nl_flags);
+ softbody_calc_forcesEx(scene, ob, forcetime, timenow, nl_flags);
return;
}
else{
@@ -2472,7 +2472,7 @@ static void softbody_calc_forces(Object *ob, float forcetime, float timenow, int
gravity = sb->grav * sb_grav_force_scale(ob);
/* check conditions for various options */
- do_deflector= query_external_colliders(ob);
+ do_deflector= query_external_colliders(scene, ob);
do_selfcollision=((ob->softflag & OB_SB_EDGES) && (sb->bspring)&& (ob->softflag & OB_SB_SELF));
do_springcollision=do_deflector && (ob->softflag & OB_SB_EDGES) &&(ob->softflag & OB_SB_EDGECOLL);
do_aero=((sb->aeroedge)&& (ob->softflag & OB_SB_EDGES));
@@ -2480,9 +2480,9 @@ static void softbody_calc_forces(Object *ob, float forcetime, float timenow, int
iks = 1.0f/(1.0f-sb->inspring)-1.0f ;/* inner spring constants function */
bproot= sb->bpoint; /* need this for proper spring addressing */
- if (do_springcollision || do_aero) scan_for_ext_spring_forces(ob,timenow);
+ if (do_springcollision || do_aero) scan_for_ext_spring_forces(scene, ob, timenow);
/* after spring scan because it uses Effoctors too */
- do_effector= pdInitEffectors(ob,NULL);
+ do_effector= pdInitEffectors(scene, ob,NULL);
if (do_deflector) {
float defforce[3];
@@ -2650,7 +2650,7 @@ static void softbody_calc_forces(Object *ob, float forcetime, float timenow, int
float speed[3]= {0.0f, 0.0f, 0.0f};
float eval_sb_fric_force_scale = sb_fric_force_scale(ob); /* just for calling function once */
- pdDoEffectors(do_effector, bp->pos, force, speed, (float)G.scene->r.cfra, 0.0f, PE_WIND_AS_SPEED);
+ pdDoEffectors(scene, do_effector, bp->pos, force, speed, (float)scene->r.cfra, 0.0f, PE_WIND_AS_SPEED);
/* apply forcefield*/
VecMulf(force,fieldfactor* eval_sb_fric_force_scale);
@@ -3191,7 +3191,7 @@ static void springs_from_mesh(Object *ob)
/* makes totally fresh start situation */
-static void mesh_to_softbody(Object *ob)
+static void mesh_to_softbody(Scene *scene, Object *ob)
{
SoftBody *sb;
Mesh *me= ob->data;
@@ -3204,7 +3204,7 @@ static void mesh_to_softbody(Object *ob)
else totedge= 0;
/* renew ends with ob->soft with points and edges, also checks & makes ob->soft */
- renew_softbody(ob, me->totvert, totedge);
+ renew_softbody(scene, ob, me->totvert, totedge);
/* we always make body points */
sb= ob->soft;
@@ -3391,7 +3391,7 @@ static void makelatticesprings(Lattice *lt, BodySpring *bs, int dostiff,Object *
/* makes totally fresh start situation */
-static void lattice_to_softbody(Object *ob)
+static void lattice_to_softbody(Scene *scene, Object *ob)
{
Lattice *lt= ob->data;
SoftBody *sb;
@@ -3410,7 +3410,7 @@ static void lattice_to_softbody(Object *ob)
/* renew ends with ob->soft with points and edges, also checks & makes ob->soft */
- renew_softbody(ob, totvert, totspring);
+ renew_softbody(scene, ob, totvert, totspring);
sb= ob->soft; /* can be created in renew_softbody() */
/* weights from bpoints, same code used as for mesh vertices */
@@ -3435,7 +3435,7 @@ static void lattice_to_softbody(Object *ob)
}
/* makes totally fresh start situation */
-static void curve_surf_to_softbody(Object *ob)
+static void curve_surf_to_softbody(Scene *scene, Object *ob)
{
Curve *cu= ob->data;
SoftBody *sb;
@@ -3457,7 +3457,7 @@ static void curve_surf_to_softbody(Object *ob)
}
/* renew ends with ob->soft with points and edges, also checks & makes ob->soft */
- renew_softbody(ob, totvert, totspring);
+ renew_softbody(scene, ob, totvert, totspring);
sb= ob->soft; /* can be created in renew_softbody() */
/* set vars now */
@@ -3581,7 +3581,7 @@ static void particles_to_softbody(Object *ob)
int totedge= totpoint-psys->totpart;
/* renew ends with ob->soft with points and edges, also checks & makes ob->soft */
- renew_softbody(ob, totpoint, totedge);
+ renew_softbody(scene, ob, totpoint, totedge);
/* find first BodyPoint index for each particle */
if(psys->totpart > 0) {
@@ -3727,7 +3727,7 @@ static void sb_new_scratch(SoftBody *sb)
/* ************ Object level, exported functions *************** */
/* allocates and initializes general main data */
-SoftBody *sbNew(void)
+SoftBody *sbNew(Scene *scene)
{
SoftBody *sb;
@@ -3751,8 +3751,8 @@ SoftBody *sbNew(void)
sb->inpush = 0.5f;
sb->interval= 10;
- sb->sfra= G.scene->r.sfra;
- sb->efra= G.scene->r.efra;
+ sb->sfra= scene->r.sfra;
+ sb->efra= scene->r.efra;
sb->colball = 0.49f;
sb->balldamp = 0.50f;
@@ -3938,16 +3938,17 @@ static void softbody_reset(Object *ob, SoftBody *sb, float (*vertexCos)[3], int
}
}
-static void softbody_step(Object *ob, SoftBody *sb, float dtime)
+static void softbody_step(Scene *scene, Object *ob, SoftBody *sb, float dtime)
{
/* the simulator */
float forcetime;
double sct,sst=PIL_check_seconds_timer();
- ccd_update_deflector_hache(ob,sb->scratch->colliderhash);
+
+ ccd_update_deflector_hash(scene, ob, sb->scratch->colliderhash);
if(sb->scratch->needstobuildcollider){
- if (query_external_colliders(ob)){
- ccd_build_deflector_hache(ob,sb->scratch->colliderhash);
+ if (query_external_colliders(scene, ob)){
+ ccd_build_deflector_hash(scene, ob, sb->scratch->colliderhash);
}
sb->scratch->needstobuildcollider=0;
}
@@ -3980,12 +3981,12 @@ static void softbody_step(Object *ob, SoftBody *sb, float dtime)
sb->scratch->flag &= ~SBF_DOFUZZY;
/* do predictive euler step */
- softbody_calc_forces(ob, forcetime,timedone/dtime,0);
+ softbody_calc_forces(scene, ob, forcetime,timedone/dtime,0);
softbody_apply_forces(ob, forcetime, 1, NULL,mid_flags);
/* crop new slope values to do averaged slope step */
- softbody_calc_forces(ob, forcetime,timedone/dtime,0);
+ softbody_calc_forces(scene, ob, forcetime,timedone/dtime,0);
softbody_apply_forces(ob, forcetime, 2, &err,mid_flags);
softbody_apply_goalsnap(ob);
@@ -4067,7 +4068,7 @@ static void softbody_step(Object *ob, SoftBody *sb, float dtime)
}
/* simulates one step. framenr is in frames */
-void sbObjectStep(Object *ob, float cfra, float (*vertexCos)[3], int numVerts)
+void sbObjectStep(Scene *scene, Object *ob, float cfra, float (*vertexCos)[3], int numVerts)
{
ParticleSystemModifierData *psmd=0;
ParticleData *pa=0;
@@ -4083,7 +4084,7 @@ void sbObjectStep(Object *ob, float cfra, float (*vertexCos)[3], int numVerts)
framedelta= framenr - cache->simframe;
BKE_ptcache_id_from_softbody(&pid, ob, sb);
- BKE_ptcache_id_time(&pid, framenr, &startframe, &endframe, &timescale);
+ BKE_ptcache_id_time(&pid, scene, framenr, &startframe, &endframe, &timescale);
/* check for changes in mesh, should only happen in case the mesh
* structure changes during an animation */
@@ -4115,17 +4116,17 @@ void sbObjectStep(Object *ob, float cfra, float (*vertexCos)[3], int numVerts)
else {
switch(ob->type) {
case OB_MESH:
- mesh_to_softbody(ob);
+ mesh_to_softbody(scene, ob);
break;
case OB_LATTICE:
- lattice_to_softbody(ob);
+ lattice_to_softbody(scene, ob);
break;
case OB_CURVE:
case OB_SURF:
- curve_surf_to_softbody(ob);
+ curve_surf_to_softbody(scene, ob);
break;
default:
- renew_softbody(ob, numVerts, 0);
+ renew_softbody(scene, ob, numVerts, 0);
break;
}
}
@@ -4143,7 +4144,7 @@ void sbObjectStep(Object *ob, float cfra, float (*vertexCos)[3], int numVerts)
dtime = timescale;
softbody_update_positions(ob, sb, vertexCos, numVerts);
- softbody_step(ob, sb, dtime);
+ softbody_step(scene, ob, sb, dtime);
if(sb->particles==0)
softbody_to_object(ob, vertexCos, numVerts, 0);
@@ -4203,7 +4204,7 @@ void sbObjectStep(Object *ob, float cfra, float (*vertexCos)[3], int numVerts)
/* checking time: */
dtime = framedelta*timescale;
- softbody_step(ob, sb, dtime);
+ softbody_step(scene, ob, sb, dtime);
if(sb->particles==0)
softbody_to_object(ob, vertexCos, numVerts, 0);
diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c
index f5124ed9056..577a5ee5308 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -2590,7 +2590,7 @@ struct DerivedMesh *subsurf_make_derived_from_derived(
CCGSubSurf *ss;
int levels;
- levels= get_render_subsurf_level(&G.scene->r, smd->renderLevels);
+ levels= smd->renderLevels; // XXX get_render_subsurf_level(&scene->r, smd->renderLevels);
if(levels == 0)
return dm;
diff --git a/source/blender/blenkernel/intern/text.c b/source/blender/blenkernel/intern/text.c
index d1d252ab210..999e1744ae6 100644
--- a/source/blender/blenkernel/intern/text.c
+++ b/source/blender/blenkernel/intern/text.c
@@ -322,7 +322,7 @@ int reopen_text(Text *text)
return 1;
}
-Text *add_text(char *file)
+Text *add_text(char *file, const char *relpath)
{
FILE *fp;
int i, llen, len, res;
@@ -334,8 +334,8 @@ Text *add_text(char *file)
struct stat st;
BLI_strncpy(str, file, FILE_MAXDIR+FILE_MAXFILE);
- if (G.scene) /* can be NULL (bg mode) */
- BLI_convertstringcode(str, G.sce);
+ if (relpath) /* can be NULL (bg mode) */
+ BLI_convertstringcode(str, relpath);
BLI_split_dirfile_basic(str, NULL, sfile);
fp= fopen(str, "r");
diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c
index 9300b39a767..cdbd2afb421 100644
--- a/source/blender/blenkernel/intern/texture.c
+++ b/source/blender/blenkernel/intern/texture.c
@@ -812,14 +812,14 @@ Tex *give_current_texture(Object *ob, int act)
return tex;
}
-Tex *give_current_world_texture(void)
+Tex *give_current_world_texture(Scene *scene)
{
MTex *mtex = 0;
Tex *tex = 0;
- if(!(G.scene->world)) return 0;
+ if(!(scene->world)) return 0;
- mtex= G.scene->world->mtex[(int)(G.scene->world->texact)];
+ mtex= scene->world->mtex[(int)(scene->world->texact)];
if(mtex) tex= mtex->tex;
return tex;
diff --git a/source/blender/blenkernel/intern/writeavi.c b/source/blender/blenkernel/intern/writeavi.c
index e63588e6d7f..1829a07d543 100644
--- a/source/blender/blenkernel/intern/writeavi.c
+++ b/source/blender/blenkernel/intern/writeavi.c
@@ -64,7 +64,7 @@ bMovieHandle *BKE_get_movie_handle(int imtype)
mh.start_movie= start_avi;
mh.append_movie= append_avi;
mh.end_movie= end_avi;
- mh.get_next_frame = 0;
+ mh.get_next_frame = NULL;
/* do the platform specific handles */
#ifdef __sgi
diff --git a/source/blender/blenkernel/intern/writeffmpeg.c b/source/blender/blenkernel/intern/writeffmpeg.c
index 3ac3ed4f7aa..908defb08cc 100644
--- a/source/blender/blenkernel/intern/writeffmpeg.c
+++ b/source/blender/blenkernel/intern/writeffmpeg.c
@@ -70,7 +70,7 @@
#endif
extern void do_init_ffmpeg();
-void makeffmpegstring(char* string);
+static void makeffmpegstring(RenderData* rd, char* string);
static int ffmpeg_type = 0;
static int ffmpeg_codec = CODEC_ID_MPEG4;
@@ -96,8 +96,6 @@ static int audio_input_frame_size = 0;
static uint8_t* audio_output_buffer = 0;
static int audio_outbuf_size = 0;
-static RenderData *ffmpeg_renderdata = 0;
-
#define FFMPEG_AUTOSPLIT_SIZE 2000000000
/* Delete a picture buffer */
@@ -236,13 +234,13 @@ static const char** get_file_extensions(int format)
}
/* Write a frame to the output file */
-static void write_video_frame(AVFrame* frame)
+static void write_video_frame(RenderData *rd, AVFrame* frame)
{
int outsize = 0;
int ret;
AVCodecContext* c = get_codec_from_stream(video_stream);
#ifdef FFMPEG_CODEC_TIME_BASE
- frame->pts = G.scene->r.cfra - G.scene->r.sfra;
+ frame->pts = rd->cfra - rd->sfra;
#endif
outsize = avcodec_encode_video(c, video_buffer, video_buffersize,
@@ -393,18 +391,18 @@ static void set_ffmpeg_property_option(AVCodecContext* c, IDProperty * prop)
}
}
-static void set_ffmpeg_properties(AVCodecContext* c, const char * prop_name)
+static void set_ffmpeg_properties(RenderData *rd, AVCodecContext *c, const char * prop_name)
{
IDProperty * prop;
void * iter;
IDProperty * curr;
- if (!G.scene->r.ffcodecdata.properties) {
+ if (!rd->ffcodecdata.properties) {
return;
}
prop = IDP_GetPropertyFromGroup(
- G.scene->r.ffcodecdata.properties, (char*) prop_name);
+ rd->ffcodecdata.properties, (char*) prop_name);
if (!prop) {
return;
}
@@ -418,7 +416,7 @@ static void set_ffmpeg_properties(AVCodecContext* c, const char * prop_name)
/* prepare a video stream for the output file */
-static AVStream* alloc_video_stream(int codec_id, AVFormatContext* of,
+static AVStream* alloc_video_stream(RenderData *rd, int codec_id, AVFormatContext* of,
int rectx, int recty)
{
AVStream* st;
@@ -441,39 +439,39 @@ static AVStream* alloc_video_stream(int codec_id, AVFormatContext* of,
#ifdef FFMPEG_CODEC_TIME_BASE
/* FIXME: Really bad hack (tm) for NTSC support */
- if (ffmpeg_type == FFMPEG_DV && G.scene->r.frs_sec != 25) {
+ if (ffmpeg_type == FFMPEG_DV && rd->frs_sec != 25) {
c->time_base.den = 2997;
c->time_base.num = 100;
- } else if ((double) ((int) G.scene->r.frs_sec_base) ==
- G.scene->r.frs_sec_base) {
- c->time_base.den = G.scene->r.frs_sec;
- c->time_base.num = (int) G.scene->r.frs_sec_base;
+ } else if ((double) ((int) rd->frs_sec_base) ==
+ rd->frs_sec_base) {
+ c->time_base.den = rd->frs_sec;
+ c->time_base.num = (int) rd->frs_sec_base;
} else {
- c->time_base.den = G.scene->r.frs_sec * 100000;
- c->time_base.num = ((double) G.scene->r.frs_sec_base) * 100000;
+ c->time_base.den = rd->frs_sec * 100000;
+ c->time_base.num = ((double) rd->frs_sec_base) * 100000;
}
#else
/* FIXME: Really bad hack (tm) for NTSC support */
- if (ffmpeg_type == FFMPEG_DV && G.scene->r.frs_sec != 25) {
+ if (ffmpeg_type == FFMPEG_DV && rd->frs_sec != 25) {
c->frame_rate = 2997;
c->frame_rate_base = 100;
- } else if ((double) ((int) G.scene->r.frs_sec_base) ==
- G.scene->r.frs_sec_base) {
- c->frame_rate = G.scene->r.frs_sec;
- c->frame_rate_base = G.scene->r.frs_sec_base;
+ } else if ((double) ((int) rd->frs_sec_base) ==
+ rd->frs_sec_base) {
+ c->frame_rate = rd->frs_sec;
+ c->frame_rate_base = rd->frs_sec_base;
} else {
- c->frame_rate = G.scene->r.frs_sec * 100000;
- c->frame_rate_base = ((double) G.scene->r.frs_sec_base)*100000;
+ c->frame_rate = rd->frs_sec * 100000;
+ c->frame_rate_base = ((double) rd->frs_sec_base)*100000;
}
#endif
c->gop_size = ffmpeg_gop_size;
c->bit_rate = ffmpeg_video_bitrate*1000;
- c->rc_max_rate = G.scene->r.ffcodecdata.rc_max_rate*1000;
- c->rc_min_rate = G.scene->r.ffcodecdata.rc_min_rate*1000;
- c->rc_buffer_size = G.scene->r.ffcodecdata.rc_buffer_size * 1024;
+ c->rc_max_rate = rd->ffcodecdata.rc_max_rate*1000;
+ c->rc_min_rate = rd->ffcodecdata.rc_min_rate*1000;
+ c->rc_buffer_size = rd->ffcodecdata.rc_buffer_size * 1024;
c->rc_initial_buffer_occupancy
- = G.scene->r.ffcodecdata.rc_buffer_size*3/4;
+ = rd->ffcodecdata.rc_buffer_size*3/4;
c->rc_buffer_aggressivity = 1.0;
c->me_method = ME_EPZS;
@@ -502,7 +500,7 @@ static AVStream* alloc_video_stream(int codec_id, AVFormatContext* of,
}
/* Determine whether we are encoding interlaced material or not */
- if (G.scene->r.mode & R_FIELDS) {
+ if (rd->mode & R_FIELDS) {
fprintf(stderr, "Encoding interlaced video\n");
c->flags |= CODEC_FLAG_INTERLACED_DCT;
c->flags |= CODEC_FLAG_INTERLACED_ME;
@@ -511,9 +509,9 @@ static AVStream* alloc_video_stream(int codec_id, AVFormatContext* of,
/* xasp & yasp got float lately... */
c->sample_aspect_ratio = av_d2q(
- ((double) G.scene->r.xasp / (double) G.scene->r.yasp), 255);
+ ((double) rd->xasp / (double) rd->yasp), 255);
- set_ffmpeg_properties(c, "video");
+ set_ffmpeg_properties(rd, c, "video");
if (avcodec_open(c, codec) < 0) {
//
@@ -538,7 +536,7 @@ static AVStream* alloc_video_stream(int codec_id, AVFormatContext* of,
/* Prepare an audio stream for the output file */
-static AVStream* alloc_audio_stream(int codec_id, AVFormatContext* of)
+static AVStream* alloc_audio_stream(RenderData *rd, int codec_id, AVFormatContext* of)
{
AVStream* st;
AVCodecContext* c;
@@ -551,7 +549,7 @@ static AVStream* alloc_audio_stream(int codec_id, AVFormatContext* of)
c->codec_id = codec_id;
c->codec_type = CODEC_TYPE_AUDIO;
- c->sample_rate = G.scene->audio.mixrate;
+ c->sample_rate = rd->audio.mixrate;
c->bit_rate = ffmpeg_audio_bitrate*1000;
c->channels = 2;
codec = avcodec_find_encoder(c->codec_id);
@@ -627,7 +625,7 @@ void start_ffmpeg_impl(struct RenderData *rd, int rectx, int recty)
do_init_ffmpeg();
/* Determine the correct filename */
- makeffmpegstring(name);
+ makeffmpegstring(rd, name);
fprintf(stderr, "Starting output to %s(ffmpeg)...\n"
" Using type=%d, codec=%d, audio_codec=%d,\n"
" video_bitrate=%d, audio_bitrate=%d,\n"
@@ -659,9 +657,9 @@ void start_ffmpeg_impl(struct RenderData *rd, int rectx, int recty)
}
of->oformat = fmt;
- of->packet_size= G.scene->r.ffcodecdata.mux_packet_size;
+ of->packet_size= rd->ffcodecdata.mux_packet_size;
if (ffmpeg_multiplex_audio) {
- of->mux_rate = G.scene->r.ffcodecdata.mux_rate;
+ of->mux_rate = rd->ffcodecdata.mux_rate;
} else {
of->mux_rate = 0;
}
@@ -707,14 +705,14 @@ void start_ffmpeg_impl(struct RenderData *rd, int rectx, int recty)
//XXX error("Render width has to be 720 pixels for DV!");
return;
}
- if (G.scene->r.frs_sec != 25 && recty != 480) {
+ if (rd->frs_sec != 25 && recty != 480) {
G.afbreek = 1;
//XXX error("Render height has to be 480 pixels "
// "for DV-NTSC!");
return;
}
- if (G.scene->r.frs_sec == 25 && recty != 576) {
+ if (rd->frs_sec == 25 && recty != 576) {
G.afbreek = 1;
//XXX error("Render height has to be 576 pixels "
// "for DV-PAL!");
@@ -726,8 +724,7 @@ void start_ffmpeg_impl(struct RenderData *rd, int rectx, int recty)
if (ffmpeg_type == FFMPEG_DV) {
fmt->audio_codec = CODEC_ID_PCM_S16LE;
- if (ffmpeg_multiplex_audio
- && G.scene->audio.mixrate != 48000) {
+ if (ffmpeg_multiplex_audio && rd->audio.mixrate != 48000) {
G.afbreek = 1;
//XXX error("FFMPEG only supports 48khz / stereo "
// "audio for DV!");
@@ -735,7 +732,7 @@ void start_ffmpeg_impl(struct RenderData *rd, int rectx, int recty)
}
}
- video_stream = alloc_video_stream(fmt->video_codec, of, rectx, recty);
+ video_stream = alloc_video_stream(rd, fmt->video_codec, of, rectx, recty);
if (!video_stream) {
G.afbreek = 1;
//XXX error("Error initializing video stream");
@@ -743,7 +740,7 @@ void start_ffmpeg_impl(struct RenderData *rd, int rectx, int recty)
}
if (ffmpeg_multiplex_audio) {
- audio_stream = alloc_audio_stream(fmt->audio_codec, of);
+ audio_stream = alloc_audio_stream(rd, fmt->audio_codec, of);
if (!audio_stream) {
G.afbreek = 1;
//XXX error("Error initializing audio stream");
@@ -775,7 +772,7 @@ void start_ffmpeg_impl(struct RenderData *rd, int rectx, int recty)
********************************************************************** */
/* Get the output filename-- similar to the other output formats */
-void makeffmpegstring(char* string) {
+static void makeffmpegstring(RenderData* rd, char* string) {
// XXX quick define, solve!
#define FILE_MAXDIR 256
@@ -787,20 +784,20 @@ void makeffmpegstring(char* string) {
#undef FILE_MAXFILE
char autosplit[20];
- const char ** exts = get_file_extensions(G.scene->r.ffcodecdata.type);
+ const char ** exts = get_file_extensions(rd->ffcodecdata.type);
const char ** fe = exts;
if (!string || !exts) return;
- strcpy(string, G.scene->r.pic);
+ strcpy(string, rd->pic);
BLI_convertstringcode(string, G.sce);
- BLI_convertstringframe(string, G.scene->r.cfra);
+ BLI_convertstringframe(string, rd->cfra);
BLI_make_existing_file(string);
autosplit[0] = 0;
- if ((G.scene->r.ffcodecdata.flags & FFMPEG_AUTOSPLIT_OUTPUT) != 0) {
+ if ((rd->ffcodecdata.flags & FFMPEG_AUTOSPLIT_OUTPUT) != 0) {
sprintf(autosplit, "_%03d", ffmpeg_autosplit_count);
}
@@ -814,8 +811,8 @@ void makeffmpegstring(char* string) {
if (!*fe) {
strcat(string, autosplit);
- sprintf(txt, "%04d_%04d%s", (G.scene->r.sfra),
- (G.scene->r.efra), *exts);
+ sprintf(txt, "%04d_%04d%s", (rd->sfra),
+ (rd->efra), *exts);
strcat(string, txt);
} else {
*(string + strlen(string) - strlen(*fe)) = 0;
@@ -829,8 +826,6 @@ void start_ffmpeg(RenderData *rd, int rectx, int recty)
{
ffmpeg_autosplit_count = 0;
- ffmpeg_renderdata = rd;
-
start_ffmpeg_impl(rd, rectx, recty);
}
@@ -856,21 +851,20 @@ static void write_audio_frames()
}
}
-void append_ffmpeg(int frame, int *pixels, int rectx, int recty)
+void append_ffmpeg(RenderData *rd, int frame, int *pixels, int rectx, int recty)
{
fprintf(stderr, "Writing frame %i, "
"render width=%d, render height=%d\n", frame,
rectx, recty);
write_audio_frames();
- write_video_frame(generate_video_frame((unsigned char*) pixels));
+ write_video_frame(rd, generate_video_frame((unsigned char*) pixels));
if (ffmpeg_autosplit) {
if (url_ftell(OUTFILE_PB) > FFMPEG_AUTOSPLIT_SIZE) {
end_ffmpeg();
ffmpeg_autosplit_count++;
- start_ffmpeg_impl(ffmpeg_renderdata,
- rectx, recty);
+ start_ffmpeg_impl(rd, rectx, recty);
}
}
}
diff --git a/source/blender/blenkernel/intern/writeframeserver.c b/source/blender/blenkernel/intern/writeframeserver.c
index 64bf5f85d23..c22c2fbe8ad 100644
--- a/source/blender/blenkernel/intern/writeframeserver.c
+++ b/source/blender/blenkernel/intern/writeframeserver.c
@@ -188,7 +188,7 @@ static int safe_puts(char * s)
return safe_write(s, strlen(s));
}
-static int handle_request(char * req)
+static int handle_request(RenderData *rd, char * req)
{
char * p;
char * path;
@@ -230,11 +230,11 @@ static int handle_request(char * req)
"height %d\n"
"rate %d\n"
"ratescale %d\n",
- G.scene->r.sfra,
- G.scene->r.efra,
+ rd->sfra,
+ rd->efra,
render_width,
render_height,
- G.scene->r.frs_sec,
+ rd->frs_sec,
1
);
@@ -249,7 +249,7 @@ static int handle_request(char * req)
return -1;
}
-int frameserver_loop(void)
+int frameserver_loop(RenderData *rd)
{
fd_set readfds;
struct timeval tv;
@@ -312,7 +312,7 @@ int frameserver_loop(void)
buf[len] = 0;
- return handle_request(buf);
+ return handle_request(rd, buf);
}
static void serve_ppm(int *pixels, int rectx, int recty)
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 843c769b92e..205e80ece7a 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -3169,6 +3169,7 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb)
for (md=lb->first; md; md=md->next) {
md->error = NULL;
+ md->scene = NULL;
/* if modifiers disappear, or for upward compatibility */
if(NULL==modifierType_getInfo(md->type))
@@ -8436,6 +8437,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
if (main->versionfile < 250) {
bScreen *screen;
+ Scene *scene;
Material *ma;
Scene *sce;
Tex *tx;
@@ -8443,6 +8445,10 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
for(screen= main->screen.first; screen; screen= screen->id.next)
do_versions_windowmanager_2_50(screen);
+ /* struct audio data moved to renderdata */
+ for(scene= main->scene.first; scene; scene= scene->id.next)
+ scene->r.audio = scene->audio;
+
/* shader, composit and texture node trees have id.name empty, put something in
* to have them show in RNA viewer and accessible otherwise.
*/
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index c4b02febe10..a34c3cc88a5 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -522,11 +522,11 @@ static void write_renderinfo(WriteData *wd, Main *mainvar) /* for renderdeamon
Scene *sce;
int data[8];
+ /* XXX in future, handle multiple windows with multiple screnes? */
current_screen_compat(mainvar, &curscreen);
- sce= mainvar->scene.first;
- while(sce) {
- if(sce->id.lib==0 && ( sce==G.scene || (sce->r.scemode & R_BG_RENDER)) ) {
+ for(sce= mainvar->scene.first; sce; sce= sce->id.next) {
+ if(sce->id.lib==NULL && ( sce==curscreen->scene || (sce->r.scemode & R_BG_RENDER)) ) {
data[0]= sce->r.sfra;
data[1]= sce->r.efra;
@@ -535,7 +535,6 @@ static void write_renderinfo(WriteData *wd, Main *mainvar) /* for renderdeamon
writedata(wd, REND, 32, data);
}
- sce= sce->id.next;
}
}
@@ -2068,7 +2067,7 @@ static void write_global(WriteData *wd, Main *mainvar)
/* XXX still remap G */
fg.curscreen= screen;
- fg.curscene= G.scene;
+ fg.curscene= screen->scene;
fg.displaymode= G.displaymode;
fg.winpos= G.winpos;
fg.fileflags= (G.fileflags & ~G_FILE_NO_UI); // prevent to save this, is not good convention, and feature with concerns...
diff --git a/source/blender/editors/animation/anim_deps.c b/source/blender/editors/animation/anim_deps.c
index 985d57ed31f..336bc6f48ed 100644
--- a/source/blender/editors/animation/anim_deps.c
+++ b/source/blender/editors/animation/anim_deps.c
@@ -99,7 +99,7 @@ void ED_update_for_newframe(const bContext *C, int mute)
/* XXX future: do all windows */
scene_update_for_newframe(scene, screen_view3d_layers(screen)); /* BKE_scene.h */
- //if ( (CFRA>1) && (!mute) && (G.scene->audio.flag & AUDIO_SCRUB))
+ //if ( (CFRA>1) && (!mute) && (scene->audio.flag & AUDIO_SCRUB))
// audiostream_scrub( CFRA );
/* 3d window, preview */
diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c
index ac41a63760d..dce5fd90eb2 100644
--- a/source/blender/editors/animation/keyframing.c
+++ b/source/blender/editors/animation/keyframing.c
@@ -110,7 +110,10 @@
#include "mydevice.h"
#endif // XXX resolve these old dependencies!
+/* ****************************************** */
+/* note for Joshua: add_ipo() wants scene pointer to init the view2d 'cur' for
+ the ipo data, which restores views. Needs to be resolved nicer? */
/* ************************************************** */
/* LOCAL TYPES AND DEFINES */
@@ -230,13 +233,13 @@ Ipo *verify_ipo(ID *from, short blocktype, char actname[], char constname[], cha
if (conchan) {
if ((conchan->ipo==NULL) && (add))
- conchan->ipo= add_ipo("CoIpo", ID_CO);
+ conchan->ipo= add_ipo(NULL, "CoIpo", ID_CO);
return conchan->ipo;
}
}
else {
if ((achan->ipo==NULL) && (add))
- achan->ipo= add_ipo("ActIpo", blocktype);
+ achan->ipo= add_ipo(NULL, "ActIpo", blocktype);
return achan->ipo;
}
}
@@ -261,7 +264,7 @@ Ipo *verify_ipo(ID *from, short blocktype, char actname[], char constname[], cha
if (con) {
if ((con->ipo==NULL) && (add))
- con->ipo= add_ipo("CoIpo", ID_CO);
+ con->ipo= add_ipo(NULL, "CoIpo", ID_CO);
return con->ipo;
}
}
@@ -275,14 +278,14 @@ Ipo *verify_ipo(ID *from, short blocktype, char actname[], char constname[], cha
if (conchan) {
if ((conchan->ipo==NULL) && (add))
- conchan->ipo= add_ipo("CoIpo", ID_CO);
+ conchan->ipo= add_ipo(NULL, "CoIpo", ID_CO);
return conchan->ipo;
}
}
}
else if (blocktype==ID_OB) {
if ((ob->ipo==NULL) && (add))
- ob->ipo= add_ipo("ObIpo", ID_OB);
+ ob->ipo= add_ipo(NULL, "ObIpo", ID_OB);
return ob->ipo;
}
else if (blocktype==ID_KE) {
@@ -290,7 +293,7 @@ Ipo *verify_ipo(ID *from, short blocktype, char actname[], char constname[], cha
if (key) {
if ((key->ipo==NULL) && (add))
- key->ipo= add_ipo("KeyIpo", ID_KE);
+ key->ipo= add_ipo(NULL, "KeyIpo", ID_KE);
return key->ipo;
}
return NULL;
@@ -303,7 +306,7 @@ Ipo *verify_ipo(ID *from, short blocktype, char actname[], char constname[], cha
FluidsimSettings *fss= fluidmd->fss;
if ((fss->ipo==NULL) && (add))
- fss->ipo= add_ipo("FluidsimIpo", ID_FLUIDSIM);
+ fss->ipo= add_ipo(NULL, "FluidsimIpo", ID_FLUIDSIM);
return fss->ipo;
}
}
@@ -313,7 +316,7 @@ Ipo *verify_ipo(ID *from, short blocktype, char actname[], char constname[], cha
if (psys) {
if ((psys->part->ipo==NULL) && (add))
- psys->part->ipo= add_ipo("ParticleIpo", ID_PA);
+ psys->part->ipo= add_ipo(NULL, "ParticleIpo", ID_PA);
return psys->part->ipo;
}
return NULL;
@@ -325,7 +328,7 @@ Ipo *verify_ipo(ID *from, short blocktype, char actname[], char constname[], cha
Material *ma= (Material *)from;
if ((ma->ipo==NULL) && (add))
- ma->ipo= add_ipo("MatIpo", ID_MA);
+ ma->ipo= add_ipo(NULL, "MatIpo", ID_MA);
return ma->ipo;
}
break;
@@ -334,7 +337,7 @@ Ipo *verify_ipo(ID *from, short blocktype, char actname[], char constname[], cha
Tex *tex= (Tex *)from;
if ((tex->ipo==NULL) && (add))
- tex->ipo= add_ipo("TexIpo", ID_TE);
+ tex->ipo= add_ipo(NULL, "TexIpo", ID_TE);
return tex->ipo;
}
break;
@@ -343,7 +346,7 @@ Ipo *verify_ipo(ID *from, short blocktype, char actname[], char constname[], cha
Sequence *seq= (Sequence *)from; /* note, sequence is mimicing Id */
if ((seq->ipo==NULL) && (add))
- seq->ipo= add_ipo("SeqIpo", ID_SEQ);
+ seq->ipo= add_ipo(NULL, "SeqIpo", ID_SEQ);
//update_seq_ipo_rect(seq); // XXX
return seq->ipo;
}
@@ -353,7 +356,7 @@ Ipo *verify_ipo(ID *from, short blocktype, char actname[], char constname[], cha
Curve *cu= (Curve *)from;
if ((cu->ipo==NULL) && (add))
- cu->ipo= add_ipo("CuIpo", ID_CU);
+ cu->ipo= add_ipo(NULL, "CuIpo", ID_CU);
return cu->ipo;
}
break;
@@ -362,7 +365,7 @@ Ipo *verify_ipo(ID *from, short blocktype, char actname[], char constname[], cha
World *wo= (World *)from;
if ((wo->ipo==NULL) && (add))
- wo->ipo= add_ipo("WoIpo", ID_WO);
+ wo->ipo= add_ipo(NULL, "WoIpo", ID_WO);
return wo->ipo;
}
break;
@@ -371,7 +374,7 @@ Ipo *verify_ipo(ID *from, short blocktype, char actname[], char constname[], cha
Lamp *la= (Lamp *)from;
if ((la->ipo==NULL) && (add))
- la->ipo= add_ipo("LaIpo", ID_LA);
+ la->ipo= add_ipo(NULL, "LaIpo", ID_LA);
return la->ipo;
}
break;
@@ -380,7 +383,7 @@ Ipo *verify_ipo(ID *from, short blocktype, char actname[], char constname[], cha
Camera *ca= (Camera *)from;
if ((ca->ipo==NULL) && (add))
- ca->ipo= add_ipo("CaIpo", ID_CA);
+ ca->ipo= add_ipo(NULL, "CaIpo", ID_CA);
return ca->ipo;
}
break;
@@ -390,7 +393,7 @@ Ipo *verify_ipo(ID *from, short blocktype, char actname[], char constname[], cha
bSound *snd= (bSound *)from;
if ((snd->ipo==NULL) && (add))
- snd->ipo= add_ipo("SndIpo", ID_SO);
+ snd->ipo= add_ipo(NULL, "SndIpo", ID_SO);
return snd->ipo;
#endif // depreceated
}
@@ -1088,7 +1091,7 @@ short insertkey (ID *id, int blocktype, char *actname, char *constname, int adrc
/* ancient time-offset cruft */
//if ( (ob->ipoflag & OB_OFFS_OB) && (give_timeoffset(ob)) ) {
// /* actually frametofloat calc again! */
- // cfra-= give_timeoffset(ob)*G.scene->r.framelen;
+ // cfra-= give_timeoffset(ob)*scene->r.framelen;
//}
}
@@ -1197,7 +1200,7 @@ short deletekey (ID *id, int blocktype, char *actname, char *constname, int adrc
/* ancient time-offset cruft */
//if ( (ob->ipoflag & OB_OFFS_OB) && (give_timeoffset(ob)) ) {
// /* actually frametofloat calc again! */
- // cfra-= give_timeoffset(ob)*G.scene->r.framelen;
+ // cfra-= give_timeoffset(ob)*scene->r.framelen;
//}
}
diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h
index e2fae03ac29..37ed825f0db 100644
--- a/source/blender/editors/include/ED_view3d.h
+++ b/source/blender/editors/include/ED_view3d.h
@@ -39,8 +39,9 @@ struct EditVert;
struct EditEdge;
struct EditFace;
struct ImBuf;
+struct Scene;
-float *give_cursor(Scene *scene, View3D *v3d);
+float *give_cursor(struct Scene *scene, View3D *v3d);
void initgrabz(struct View3D *v3d, float x, float y, float z);
void window_to_3d(struct ARegion *ar, struct View3D *v3d, float *vec, short mx, short my);
@@ -67,7 +68,7 @@ void nurbs_foreachScreenVert(struct ViewContext *vc, void (*func)(void *userData
void lattice_foreachScreenVert(struct ViewContext *vc, void (*func)(void *userData, struct BPoint *bp, int x, int y), void *userData);
int view3d_test_clipping(struct View3D *v3d, float *vec);
-void view3d_align_axis_to_vector(struct View3D *v3d, int axisidx, float vec[3]);
+void view3d_align_axis_to_vector(struct Scene *scene, struct View3D *v3d, int axisidx, float vec[3]);
/* backbuffer select and draw support */
struct ImBuf *view3d_read_backbuf(struct ViewContext *vc, short xmin, short ymin, short xmax, short ymax);
diff --git a/source/blender/editors/mesh/editface.c b/source/blender/editors/mesh/editface.c
index 61bfc8b8a0f..a572013e849 100644
--- a/source/blender/editors/mesh/editface.c
+++ b/source/blender/editors/mesh/editface.c
@@ -623,11 +623,13 @@ MTFace *get_active_mtface(EditMesh *em, EditFace **act_efa, MCol **mcol, int slo
return NULL;
}
-void make_tfaces(Mesh *me)
+static void make_tfaces(Object *ob)
{
+ Mesh *me= ob->data;
+
if(!me->mtface) {
if(me->mr) {
- multires_add_layer(me, &me->mr->fdata, CD_MTFACE,
+ multires_add_layer(ob, &me->mr->fdata, CD_MTFACE,
CustomData_number_of_layers(&me->fdata, CD_MTFACE));
}
else {
@@ -1312,7 +1314,7 @@ void set_texturepaint(Scene *scene) /* toggle */
G.f |= G_TEXTUREPAINT;
if(me->mtface==NULL)
- make_tfaces(me);
+ make_tfaces(ob);
brush_check_exists(&scene->toolsettings->imapaint.brush);
GPU_paint_set_mipmap(0);
@@ -1373,9 +1375,9 @@ static void texpaint_tri_weights(Object *ob, float *v1, float *v2, float *v3, fl
}
/* compute uv coordinates of mouse in face */
-void texpaint_pick_uv(Object *ob, Mesh *mesh, unsigned int faceindex, short *xy, float *uv)
+void texpaint_pick_uv(Scene *scene, Object *ob, Mesh *mesh, unsigned int faceindex, short *xy, float *uv)
{
- DerivedMesh *dm = mesh_get_derived_final(ob, CD_MASK_BAREMESH);
+ DerivedMesh *dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH);
int *index = dm->getFaceDataArray(dm, CD_ORIGINDEX);
MTFace *tface = dm->getFaceDataArray(dm, CD_MTFACE), *tf;
int numfaces = dm->getNumFaces(dm), a;
diff --git a/source/blender/editors/mesh/editmesh.c b/source/blender/editors/mesh/editmesh.c
index 85fdc5d8ad5..9104e133cc6 100644
--- a/source/blender/editors/mesh/editmesh.c
+++ b/source/blender/editors/mesh/editmesh.c
@@ -1973,7 +1973,6 @@ static void *editMesh_to_undoMesh(void *emv)
// um->retopo_mode= scene->toolsettings->retopo_mode;
{
- Mesh *me= NULL; // XXX
Multires *mr= NULL; // XXX old-style multires
UndoMesh *prev= NULL; // XXX undo_editmode_get_prev(obedit);
diff --git a/source/blender/editors/mesh/editmesh_add.c b/source/blender/editors/mesh/editmesh_add.c
index 1833682b19e..91e1997a8f5 100644
--- a/source/blender/editors/mesh/editmesh_add.c
+++ b/source/blender/editors/mesh/editmesh_add.c
@@ -334,7 +334,7 @@ static void make_fgon(EditMesh *em, int make)
else {
EM_fgon_flags(em); // redo flags and indices for fgons
-// XXX DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// XXX DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Make FGon");
}
}
@@ -600,7 +600,7 @@ void addfaces_from_edgenet(EditMesh *em)
EM_select_flush(em);
BIF_undo_push("Add faces");
-// XXX DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// XXX DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
}
void addedgeface_mesh(EditMesh *em)
@@ -632,7 +632,7 @@ void addedgeface_mesh(EditMesh *em)
EM_select_edge(eed, 1);
BIF_undo_push("Add edge");
- // XXX DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+ // XXX DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
return;
}
else if(amount > 4) {
@@ -734,11 +734,11 @@ void addedgeface_mesh(EditMesh *em)
BIF_undo_push("Add face");
}
-// XXX DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// XXX DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
}
-void adduplicate_mesh(Object *obedit, EditMesh *em)
+void adduplicate_mesh(Scene *scene, Object *obedit, EditMesh *em)
{
if(multires_test()) return;
@@ -755,8 +755,8 @@ void adduplicate_mesh(Object *obedit, EditMesh *em)
* This shouldn't be necessary, derived queries should be
* automatically building this data if invalid. Or something.
*/
-// XXX DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
- object_handle_update(obedit);
+ DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
+ object_handle_update(scene, obedit);
// XXX BIF_TransformSetUndo("Add Duplicate");
// initTransform(TFM_TRANSLATION, CTX_NO_PET);
@@ -773,13 +773,13 @@ static int confirm_objectExists(Scene *scene, Object *obedit, Mesh **me, float m
if(obedit==NULL) {
/* add_object actually returns an object ! :-)
But it also stores the added object struct in
- G.scene->basact->object (BASACT->object) */
+ scene->basact->object (BASACT->object) */
// XXX add_object_draw(OB_MESH);
obedit= BASACT->object;
- where_is_object(obedit);
+ where_is_object(scene, obedit);
make_editMesh(scene, obedit);
newob= 1;
@@ -1245,7 +1245,7 @@ void add_primitiveMesh(Scene *scene, View3D *v3d, Object *obedit, EditMesh *em,
char *undostr="Add Primitive";
char *name=NULL;
-// if(G.scene->id.lib) return;
+// if(scene->id.lib) return;
/* this function also comes from an info window */
// XXX if ELEM(curarea->spacetype, SPACE_VIEW3D, SPACE_INFO); else return;
@@ -1396,7 +1396,7 @@ void add_primitiveMesh(Scene *scene, View3D *v3d, Object *obedit, EditMesh *em,
if(type!=0 && type!=13) righthandfaces(em, 1); /* otherwise monkey has eyes in wrong direction... */
-// XXX DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// XXX DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
/* if a new object was created, it stores it in Mesh, for reload original data and undo */
if ( !(newob) || U.flag & USER_ADD_EDITMODE) {
diff --git a/source/blender/editors/mesh/editmesh_loop.c b/source/blender/editors/mesh/editmesh_loop.c
index 13cc90f3e2d..bb41accc10d 100644
--- a/source/blender/editors/mesh/editmesh_loop.c
+++ b/source/blender/editors/mesh/editmesh_loop.c
@@ -383,7 +383,7 @@ void CutEdgeloop(Object *obedit, EditMesh *em, int numcuts)
EM_selectmode_set(em);
}
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
return;
}
@@ -547,7 +547,7 @@ static float seg_intersect(EditEdge *e, CutCurve *c, int len, char mode, struct
int i;
//threshold = 0.000001; /*tolerance for vertex intersection*/
-// XXX threshold = G.scene->toolsettings->select_thresh / 100;
+// XXX threshold = scene->toolsettings->select_thresh / 100;
/* Get screen coords of verts */
scr = BLI_ghash_lookup(gh, e->v1);
diff --git a/source/blender/editors/mesh/editmesh_mods.c b/source/blender/editors/mesh/editmesh_mods.c
index 018df499dcc..375ebde5f52 100644
--- a/source/blender/editors/mesh/editmesh_mods.c
+++ b/source/blender/editors/mesh/editmesh_mods.c
@@ -119,15 +119,15 @@ void EM_automerge(int update)
{
// XXX int len;
-// if ((G.scene->automerge) &&
+// if ((scene->automerge) &&
// (obedit && obedit->type==OB_MESH) &&
// (((Mesh*)obedit->data)->mr==NULL)
// ) {
-// len = removedoublesflag(1, 1, G.scene->toolsettings->doublimit);
+// len = removedoublesflag(1, 1, scene->toolsettings->doublimit);
// if (len) {
// G.totvert -= len; /* saves doing a countall */
// if (update) {
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
// }
// }
// }
@@ -670,7 +670,7 @@ int facegroup_select(EditMesh *em, short mode)
unsigned int deselcount=0;
short ok=0;
- float thresh=0; // XXX G.scene->toolsettings->select_thresh;
+ float thresh=0; // XXX scene->toolsettings->select_thresh;
for(efa= em->faces.first; efa; efa= efa->next) {
if (!efa->h) {
@@ -814,7 +814,7 @@ static int edgegroup_select__internal(EditMesh *em, short mode)
unsigned int deselcount=0;
short ok=0;
- float thresh=0; // XXX G.scene->toolsettings->select_thresh;
+ float thresh=0; // XXX scene->toolsettings->select_thresh;
for(eed= em->edges.first; eed; eed= eed->next) {
if (!eed->h) {
@@ -1043,7 +1043,7 @@ int vertgroup_select(EditMesh *em, short mode)
unsigned int deselcount=0;
short ok=0;
- float thresh=0; // XXX G.scene->toolsettings->select_thresh;
+ float thresh=0; // XXX scene->toolsettings->select_thresh;
for(eve= em->verts.first; eve; eve= eve->next) {
if (!eve->h) {
@@ -1343,7 +1343,7 @@ void EM_mesh_copy_edge(EditMesh *em, short type)
}
if (change) {
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Copy Edge Attribute");
}
@@ -1472,7 +1472,7 @@ void EM_mesh_copy_face(EditMesh *em, short type)
}
if (change) {
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
if (type==3) {
// XXX allqueue(REDRAWIMAGE, 0);
}
@@ -1606,7 +1606,7 @@ void EM_mesh_copy_face_layer(EditMesh *em, short type)
}
if (change) {
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Copy Face Layer");
}
@@ -2006,7 +2006,7 @@ static void mouse_mesh_loop(ViewContext *vc)
}
}
- switch (0) { // XXX G.scene->toolsettings->edge_mode) {
+ switch (0) { // XXX scene->toolsettings->edge_mode) {
case EDGE_MODE_TAG_SEAM:
G.f |= G_DRAWSEAMS;
break;
@@ -2021,7 +2021,7 @@ static void mouse_mesh_loop(ViewContext *vc)
break;
}
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
}
}
@@ -2425,7 +2425,7 @@ void hide_mesh(EditMesh *em, int swap)
G.totedgesel= G.totfacesel= G.totvertsel= 0;
// if(EM_texFaceCheck())
- // DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+ // DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Hide");
}
@@ -2463,7 +2463,7 @@ void reveal_mesh(EditMesh *em)
EM_selectmode_flush(em);
// if (EM_texFaceCheck())
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Reveal");
}
@@ -3431,7 +3431,7 @@ void Vertex_Menu(EditMesh *em)
switch(ret)
{
case 1:
-// XXX notice("Removed %d Vertices", removedoublesflag(1, 0, G.scene->toolsettings->doublimit));
+// XXX notice("Removed %d Vertices", removedoublesflag(1, 0, scene->toolsettings->doublimit));
BIF_undo_push("Remove Doubles");
break;
case 2:
@@ -3452,7 +3452,7 @@ void Vertex_Menu(EditMesh *em)
break;
}
/* some items crashed because this is in the original W menu but not here. should really manage this better */
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
}
@@ -3499,16 +3499,16 @@ void Edge_Menu(EditMesh *em)
case 11:
// editmesh_mark_sharp(em, 1);
BIF_undo_push("Mark Sharp");
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
break;
case 12:
// editmesh_mark_sharp(em, 0);
BIF_undo_push("Clear Sharp");
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
break;
}
/* some items crashed because this is in the original W menu but not here. should really manage this better */
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
}
void Face_Menu(EditMesh *em)
@@ -3525,7 +3525,7 @@ void Face_Menu(EditMesh *em)
{
case 1:
// flip_editnormals(em);
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Flip Normals");
break;
case 2:
@@ -3540,7 +3540,7 @@ void Face_Menu(EditMesh *em)
case 5: /* Quads to Tris */
// convert_to_triface(em, 0);
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
break;
case 6: /* Tris to Quads */
// join_triangles(em);
@@ -3570,7 +3570,7 @@ void Face_Menu(EditMesh *em)
break;
}
/* some items crashed because this is in the original W menu but not here. should really manage this better */
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
}
@@ -3781,7 +3781,7 @@ void righthandfaces(EditMesh *em, int select) /* makes faces righthand turning *
recalc_editnormals(em);
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
waitcursor(0);
}
@@ -3856,7 +3856,7 @@ void faceselect_align_view_to_selected(View3D *v3d, Mesh *me, int axis)
if (totselected == 0)
error("No faces selected.");
else
- view3d_align_axis_to_vector(v3d, axis, norm);
+ view3d_align_axis_to_vector(NULL, v3d, axis, norm);
}
/* helper for below, to survive non-uniform scaled objects */
@@ -3901,7 +3901,7 @@ void editmesh_align_view_to_selected(Object *obedit, EditMesh *em, View3D *v3d,
}
}
- view3d_align_axis_to_vector(v3d, axis, norm);
+ view3d_align_axis_to_vector(NULL, v3d, axis, norm);
}
else if (nselverts>2) {
float cent[3];
@@ -3926,7 +3926,7 @@ void editmesh_align_view_to_selected(Object *obedit, EditMesh *em, View3D *v3d,
}
Mat4Mul3Vecfl(obedit->obmat, norm);
- view3d_align_axis_to_vector(v3d, axis, norm);
+ view3d_align_axis_to_vector(NULL, v3d, axis, norm);
}
else if (nselverts==2) { /* Align view to edge (or 2 verts) */
EditVert *eve, *leve= NULL;
@@ -3943,7 +3943,7 @@ void editmesh_align_view_to_selected(Object *obedit, EditMesh *em, View3D *v3d,
}
}
Mat4Mul3Vecfl(obedit->obmat, norm);
- view3d_align_axis_to_vector(v3d, axis, norm);
+ view3d_align_axis_to_vector(NULL, v3d, axis, norm);
}
else if (nselverts==1) { /* Align view to vert normal */
EditVert *eve;
@@ -3957,7 +3957,7 @@ void editmesh_align_view_to_selected(Object *obedit, EditMesh *em, View3D *v3d,
}
}
Mat4Mul3Vecfl(obedit->obmat, norm);
- view3d_align_axis_to_vector(v3d, axis, norm);
+ view3d_align_axis_to_vector(NULL, v3d, axis, norm);
}
}
@@ -4049,7 +4049,7 @@ void vertexsmooth(Object *obedit, EditMesh *em)
if(eve->f & SELECT) {
if(eve->f1) {
-// XXX if (G.scene->toolsettings->editbutflag & B_MESH_X_MIRROR) {
+// XXX if (scene->toolsettings->editbutflag & B_MESH_X_MIRROR) {
// eve_mir= editmesh_get_x_mirror_vert(obedit, em, eve->co);
// }
@@ -4089,7 +4089,7 @@ void vertexsmooth(Object *obedit, EditMesh *em)
recalc_editnormals(em);
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Vertex Smooth");
}
@@ -4135,7 +4135,7 @@ void vertexnoise(Object *obedit, EditMesh *em)
}
recalc_editnormals(em);
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Vertex Noise");
}
@@ -4194,7 +4194,7 @@ void vertices_to_sphere(Scene *scene, View3D *v3d, Object *obedit, EditMesh *em)
}
recalc_editnormals(em);
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
BIF_undo_push("To Sphere");
}
diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c
index 1d5e2b24d17..024ef433f1b 100644
--- a/source/blender/editors/mesh/editmesh_tools.c
+++ b/source/blender/editors/mesh/editmesh_tools.c
@@ -596,6 +596,7 @@ void hashvert_flag(EditMesh *em, int flag)
/* generic extern called extruder */
void extrude_mesh(Object *obedit, EditMesh *em)
{
+ Scene *scene= NULL; // XXX CTX!
float nor[3]= {0.0, 0.0, 0.0};
short nr, transmode= 0;
@@ -647,8 +648,8 @@ void extrude_mesh(Object *obedit, EditMesh *em)
* This shouldn't be necessary, derived queries should be
* automatically building this data if invalid. Or something.
*/
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
- object_handle_update(obedit);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
+ object_handle_update(scene, obedit);
/* individual faces? */
// BIF_TransformSetUndo("Extrude");
@@ -686,7 +687,7 @@ void split_mesh(EditMesh *em)
waitcursor(0);
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Split");
@@ -722,7 +723,7 @@ void extrude_repeat_mesh(View3D *v3d, Object *obedit, EditMesh *em, int steps, f
EM_fgon_flags(em);
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Extrude Repeat");
}
@@ -751,7 +752,7 @@ void spin_mesh(View3D *v3d, Object *obedit, EditMesh *em, int steps, float degr,
phi= degr*M_PI/360.0;
phi/= steps;
-// if(G.scene->toolsettings->editbutflag & B_CLOCKWISE) phi= -phi;
+// if(scene->toolsettings->editbutflag & B_CLOCKWISE) phi= -phi;
if(dvec) {
n[0]= v3d->viewinv[1][0];
@@ -774,7 +775,7 @@ void spin_mesh(View3D *v3d, Object *obedit, EditMesh *em, int steps, float degr,
Mat3MulMat3(tmat,cmat,bmat);
Mat3MulMat3(bmat,imat,tmat);
-// if(mode==0) if(G.scene->toolsettings->editbutflag & B_KEEPORIG) adduplicateflag(1);
+// if(mode==0) if(scene->toolsettings->editbutflag & B_KEEPORIG) adduplicateflag(1);
ok= 1;
for(a=0;a<steps;a++) {
@@ -807,7 +808,7 @@ void spin_mesh(View3D *v3d, Object *obedit, EditMesh *em, int steps, float degr,
EM_fgon_flags(em);
- // DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+ // DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
if(dvec==NULL) BIF_undo_push("Spin");
@@ -1062,7 +1063,7 @@ void delete_mesh(Object *obedit, EditMesh *em)
EM_fgon_flags(em); // redo flags and indices for fgons
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
BIF_undo_push(str);
}
@@ -1145,7 +1146,7 @@ void fill_mesh(EditMesh *em)
waitcursor(0);
EM_select_flush(em);
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Fill");
}
@@ -1574,7 +1575,7 @@ static void fill_quad_double_adj_path(EditMesh *em, EditFace *efa, struct GHash
if (ctrl)
hold->e1->f2 |= EDGEINNER;
facecopy(em, efa,hold);
- //if(G.scene->toolsettings->editbutflag & B_AUTOFGON) {
+ //if(scene->toolsettings->editbutflag & B_AUTOFGON) {
// hold->e1->h |= EM_FGON;
//}
// Make side faces
@@ -1734,7 +1735,7 @@ static void fill_quad_double_adj_inner(EditMesh *em, EditFace *efa, struct GHash
hold->e2->f2 |= EDGEINNER;
facecopy(em, efa,hold);
- //if(G.scene->toolsettings->editbutflag & B_AUTOFGON) {
+ //if(scene->toolsettings->editbutflag & B_AUTOFGON) {
// hold->e1->h |= EM_FGON;
//}
// Add Fill Quads (if # cuts > 1)
@@ -1750,7 +1751,7 @@ static void fill_quad_double_adj_inner(EditMesh *em, EditFace *efa, struct GHash
hold->e4->f2 |= EDGEINNER;
facecopy(em, efa,hold);
- //if(G.scene->toolsettings->editbutflag & B_AUTOFGON) {
+ //if(scene->toolsettings->editbutflag & B_AUTOFGON) {
// hold->e1->h |= EM_FGON;
//}
}
@@ -1957,7 +1958,7 @@ static void fill_quad_triple(EditMesh *em, EditFace *efa, struct GHash *gh, int
// Also Make inner quad
hold = addfacelist(em, verts[1][numcuts/2],verts[1][(numcuts/2)+1],verts[2][numcuts/2],verts[0][(numcuts/2)+1],NULL,NULL);
hold->e3->f2 |= EDGEINNER;
- //if(G.scene->toolsettings->editbutflag & B_AUTOFGON) {
+ //if(scene->toolsettings->editbutflag & B_AUTOFGON) {
// hold->e3->h |= EM_FGON;
//}
facecopy(em, efa,hold);
@@ -1966,7 +1967,7 @@ static void fill_quad_triple(EditMesh *em, EditFace *efa, struct GHash *gh, int
// Make inner tri
hold = addfacelist(em, verts[1][(numcuts/2)+1],verts[2][(numcuts/2)+1],verts[0][(numcuts/2)+1],NULL,NULL,NULL);
hold->e2->f2 |= EDGEINNER;
- //if(G.scene->toolsettings->editbutflag & B_AUTOFGON) {
+ //if(scene->toolsettings->editbutflag & B_AUTOFGON) {
// hold->e2->h |= EM_FGON;
//}
facecopy(em, efa,hold);
@@ -2526,7 +2527,7 @@ void esubdivideflag(Object *obedit, EditMesh *em, int flag, float rad, int beaut
}
}
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
// Now for each face in the mesh we need to figure out How many edges were cut
// and which filling method to use for that face
for(ef = em->faces.first;ef;ef = ef->next) {
@@ -2602,7 +2603,7 @@ void esubdivideflag(Object *obedit, EditMesh *em, int flag, float rad, int beaut
(ef->e2->f & flag && ef->e4->f & flag)) {
fill_quad_double_op(em, ef, gh, numcuts);
}else{
- switch(0) { // XXX G.scene->toolsettings->cornertype) {
+ switch(0) { // XXX scene->toolsettings->cornertype) {
case 0: fill_quad_double_adj_path(em, ef, gh, numcuts); break;
case 1: fill_quad_double_adj_inner(em, ef, gh, numcuts); break;
case 2: fill_quad_double_adj_fan(em, ef, gh, numcuts); break;
@@ -2729,7 +2730,7 @@ void esubdivideflag(Object *obedit, EditMesh *em, int flag, float rad, int beaut
}
recalc_editnormals(em);
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
}
static int count_selected_edges(EditEdge *ed)
@@ -3079,7 +3080,7 @@ void beauty_fill(EditMesh *em)
EM_select_flush(em);
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Beauty Fill");
}
@@ -3153,7 +3154,7 @@ static int compareFaceAttribs(EditMesh *em, EditFace *f1, EditFace *f2, EditEdge
/*Test to see if the per-face attributes for the joining edge match within limit*/
MTFace *tf1, *tf2;
unsigned int *col1, *col2;
- short i,attrok=0, flag = 0, /* XXX G.scene->toolsettings->editbutflag,*/ fe1[2], fe2[2];
+ short i,attrok=0, flag = 0, /* XXX scene->toolsettings->editbutflag,*/ fe1[2], fe2[2];
tf1 = CustomData_em_get(&em->fdata, f1->data, CD_MTFACE);
tf2 = CustomData_em_get(&em->fdata, f2->data, CD_MTFACE);
@@ -3234,7 +3235,7 @@ void join_triangles(EditMesh *em)
EVPtr *efaa = NULL;
float *creases = NULL;
float measure; /*Used to set tolerance*/
- float limit = 0.0f; // XXX G.scene->toolsettings->jointrilimit;
+ float limit = 0.0f; // XXX scene->toolsettings->jointrilimit;
int i, ok, totedge=0, totseledge=0, complexedges, vindex[4];
/*test for multi-resolution data*/
@@ -3311,9 +3312,9 @@ void join_triangles(EditMesh *em)
the python scripts bundled with Blender releases.
*/
-// XXX if(G.scene->toolsettings->editbutflag & B_JOINTRIA_SHARP && eed->sharp); /*do nothing*/
-// else if(G.scene->toolsettings->editbutflag & B_JOINTRIA_MAT && efaa[0]->mat_nr != efaa[1]->mat_nr); /*do nothing*/
-// else if(((G.scene->toolsettings->editbutflag & B_JOINTRIA_UV) || (G.scene->toolsettings->editbutflag & B_JOINTRIA_VCOL)) &&
+// XXX if(scene->toolsettings->editbutflag & B_JOINTRIA_SHARP && eed->sharp); /*do nothing*/
+// else if(scene->toolsettings->editbutflag & B_JOINTRIA_MAT && efaa[0]->mat_nr != efaa[1]->mat_nr); /*do nothing*/
+// else if(((scene->toolsettings->editbutflag & B_JOINTRIA_UV) || (scene->toolsettings->editbutflag & B_JOINTRIA_VCOL)) &&
compareFaceAttribs(em, efaa[0], efaa[1], eed); // XXX == 0); /*do nothing*/
// else{
measure = measure_facepair(v1, v2, v3, v4, limit);
@@ -3384,7 +3385,7 @@ void join_triangles(EditMesh *em)
if(edsortblock) MEM_freeN(edsortblock);
EM_selectmode_flush(em);
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Convert Triangles to Quads");
}
@@ -3482,7 +3483,7 @@ void edge_flip(EditMesh *em)
MEM_freeN(efaar);
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Flip Triangle Edges");
@@ -3719,7 +3720,7 @@ void edge_rotate_selected(EditMesh *em, int dir)
/* flush selected vertices (again) to edges/faces */
EM_select_flush(em);
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Rotate Edge");
}
@@ -4144,7 +4145,7 @@ int EdgeSlide(EditMesh *em, short immediate, float imperc)
}
- if (uvlay_tot) { // XXX && (G.scene->toolsettings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT)) {
+ if (uvlay_tot) { // XXX && (scene->toolsettings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT)) {
int maxnum = 0;
uvarray = MEM_callocN( uvlay_tot * sizeof(GHash *), "SlideUVs Array");
suv_last = slideuvs = MEM_callocN( uvlay_tot * (numadded+1) * sizeof(SlideUv), "SlideUVs"); /* uvLayers * verts */
@@ -4341,7 +4342,7 @@ int EdgeSlide(EditMesh *em, short immediate, float imperc)
tempev = editedge_getOtherVert((perc>=0)?tempsv->up:tempsv->down, ev);
VecLerpf(ev->co, tempsv->origvert.co, tempev->co, fabs(perc));
- if (0) { // XXX G.scene->toolsettings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT) {
+ if (0) { // XXX scene->toolsettings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT) {
for (uvlay_idx=0; uvlay_idx<uvlay_tot; uvlay_idx++) {
suv = BLI_ghash_lookup( uvarray[uvlay_idx], ev );
if (suv && suv->fuv_list && suv->uv_up && suv->uv_down) {
@@ -4370,7 +4371,7 @@ int EdgeSlide(EditMesh *em, short immediate, float imperc)
if(newlen < 0.0) {newlen = 0.0;}
if(flip == 0) {
VecLerpf(ev->co, editedge_getOtherVert(tempsv->down,ev)->co, editedge_getOtherVert(tempsv->up,ev)->co, fabs(newlen));
- if (0) { // XXX G.scene->toolsettings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT) {
+ if (0) { // XXX scene->toolsettings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT) {
/* dont do anything if no UVs */
for (uvlay_idx=0; uvlay_idx<uvlay_tot; uvlay_idx++) {
suv = BLI_ghash_lookup( uvarray[uvlay_idx], ev );
@@ -4387,7 +4388,7 @@ int EdgeSlide(EditMesh *em, short immediate, float imperc)
} else{
VecLerpf(ev->co, editedge_getOtherVert(tempsv->up,ev)->co, editedge_getOtherVert(tempsv->down,ev)->co, fabs(newlen));
- if (0) { // XXX G.scene->toolsettings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT) {
+ if (0) { // XXX scene->toolsettings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT) {
/* dont do anything if no UVs */
for (uvlay_idx=0; uvlay_idx<uvlay_tot; uvlay_idx++) {
suv = BLI_ghash_lookup( uvarray[uvlay_idx], ev );
@@ -4543,7 +4544,7 @@ int EdgeSlide(EditMesh *em, short immediate, float imperc)
} else {
draw = 0;
}
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
}
@@ -4563,7 +4564,7 @@ int EdgeSlide(EditMesh *em, short immediate, float imperc)
if(!immediate)
EM_automerge(0);
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
// scrarea_queue_winredraw(curarea);
//BLI_ghash_free(edgesgh, freeGHash, NULL);
@@ -4571,7 +4572,7 @@ int EdgeSlide(EditMesh *em, short immediate, float imperc)
BLI_linklist_free(vertlist,NULL);
BLI_linklist_free(edgelist,NULL);
- if (uvlay_tot) { // XXX && (G.scene->toolsettings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT)) {
+ if (uvlay_tot) { // XXX && (scene->toolsettings->uvcalc_flag & UVCALC_TRANSFORM_CORRECT)) {
for (uvlay_idx=0; uvlay_idx<uvlay_tot; uvlay_idx++) {
BLI_ghash_free(uvarray[uvlay_idx], NULL, NULL);
}
@@ -4599,20 +4600,20 @@ int EdgeLoopDelete(EditMesh *em)
/* temporal flag setting so we keep UVs when deleting edge loops,
* this is a bit of a hack but it works how you would want in almost all cases */
- // short uvcalc_flag_orig = 0; // XXX G.scene->toolsettings->uvcalc_flag;
- // G.scene->toolsettings->uvcalc_flag |= UVCALC_TRANSFORM_CORRECT;
+ // short uvcalc_flag_orig = 0; // XXX scene->toolsettings->uvcalc_flag;
+ // scene->toolsettings->uvcalc_flag |= UVCALC_TRANSFORM_CORRECT;
if(!EdgeSlide(em, 1, 1)) {
return 0;
}
/* restore uvcalc flag */
- // G.scene->toolsettings->uvcalc_flag = uvcalc_flag_orig;
+ // scene->toolsettings->uvcalc_flag = uvcalc_flag_orig;
EM_select_more(em);
removedoublesflag(em, 1,0, 0.001);
EM_select_flush(em);
- // DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+ // DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
return 1;
}
@@ -4705,7 +4706,7 @@ void mesh_set_smooth_faces(EditMesh *em, short event)
efa= efa->next;
}
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
if(event==1) BIF_undo_push("Set Smooth");
else if(event==0) BIF_undo_push("Set Solid");
@@ -4754,10 +4755,10 @@ void mesh_rip(EditMesh *em)
float projectMat[4][4], vec[3], dist, mindist; // viewMat[4][4], XXX
short doit= 1, mval[2]; // XXX ,propmode,prop;
-// XXX propmode = G.scene->prop_mode;
-// G.scene->prop_mode = 0;
-// prop = G.scene->proportional;
-// G.scene->proportional = 0;
+// XXX propmode = scene->prop_mode;
+// scene->prop_mode = 0;
+// prop = scene->proportional;
+// scene->proportional = 0;
/* select flush... vertices are important */
EM_selectmode_set(em);
@@ -4945,8 +4946,8 @@ void mesh_rip(EditMesh *em)
// initTransform(TFM_TRANSLATION, 0);
// Transform();
-// G.scene->prop_mode = propmode;
-// XXX G.scene->proportional = prop;
+// scene->prop_mode = propmode;
+// XXX scene->proportional = prop;
}
void shape_propagate(Scene *scene, Object *obedit, EditMesh *em)
@@ -5033,7 +5034,7 @@ void shape_copy_from_lerp(EditMesh *em, KeyBlock* thisBlock, KeyBlock* fromBlock
}
}
sprintf(str,"Blending at %d%c MMB to Copy at 100%c",(int)(perc*100),'%','%');
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
// headerprint(str);
// force_draw(0);
@@ -5633,7 +5634,7 @@ int collapseEdges(EditMesh *em)
freecollections(&allcollections);
removedoublesflag(em, 1, 0, MERGELIMIT);
/*get rid of this!*/
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
// if (EM_texFaceCheck())
@@ -5693,7 +5694,7 @@ int merge_target(EditMesh *em, int target, int uvmerge)
collapseuvs(em, NULL);
}
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
return removedoublesflag(em, 1, 0, MERGELIMIT);
@@ -5858,7 +5859,7 @@ void pathselect(EditMesh *em)
MEM_freeN(previous);
BLI_heap_free(heap, NULL);
EM_select_flush(em);
- // DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+ // DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
// if (EM_texFaceCheck())
}
@@ -5895,7 +5896,7 @@ void region_to_loop(EditMesh *em)
em->selectmode = SCE_SELECT_EDGE;
EM_selectmode_set(em);
- // DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+ // DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
// if (EM_texFaceCheck())
@@ -6054,7 +6055,7 @@ void loop_to_region(EditMesh *em)
}
freecollections(&allcollections);
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
// if (EM_texFaceCheck())
@@ -6126,7 +6127,7 @@ void mesh_rotate_uvs(EditMesh *em)
}
if (change) {
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Rotate UV face");
}
@@ -6209,7 +6210,7 @@ void mesh_mirror_uvs(EditMesh *em)
}
if (change) {
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Mirror UV face");
}
@@ -6259,7 +6260,7 @@ void mesh_rotate_colors(EditMesh *em)
}
if (change) {
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Rotate Color face");
}
@@ -6308,7 +6309,7 @@ void mesh_mirror_colors(EditMesh *em)
}
if (change) {
-// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA);
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
BIF_undo_push("Mirror Color face");
}
}
diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c
index 94730be507c..29c11e69a67 100644
--- a/source/blender/editors/mesh/meshtools.c
+++ b/source/blender/editors/mesh/meshtools.c
@@ -950,12 +950,12 @@ static int thread_break(void)
return G.afbreek;
}
-static ScrArea *biggest_image_area(void)
+static ScrArea *biggest_image_area(bScreen *screen)
{
ScrArea *sa, *big= NULL;
int size, maxsize= 0;
- for(sa= G.curscreen->areabase.first; sa; sa= sa->next) {
+ for(sa= screen->areabase.first; sa; sa= sa->next) {
if(sa->spacetype==SPACE_IMAGE) {
size= sa->winx*sa->winy;
if(sa->winx > 10 && sa->winy > 10 && size > maxsize) {
@@ -1004,8 +1004,9 @@ void objects_bake_render(Scene *scene, short event, char **error_msg)
}
if(event>0) {
+ bScreen *screen= NULL; // XXX CTX
Render *re= RE_NewRender("_Bake View_");
- ScrArea *area= biggest_image_area();
+ ScrArea *area= biggest_image_area(screen);
ListBase threads;
BakeRender bkr;
int timer=0, tot; // XXX, sculptmode= G.f & G_SCULPTMODE;
diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c
index c3451506979..ba344b5d67d 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -255,15 +255,15 @@ void add_object_draw(Scene *scene, View3D *v3d, int type) /* for toolbox or menu
exit_paint_modes();
// XXX if (obedit) ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* freedata, and undo */
- ob= add_object(type);
+ ob= add_object(scene, type);
// ED_base_object_activate(C, BASACT);
- base_init_from_view3d(BASACT, v3d);
+ base_init_from_view3d(BASACT, v3d, scene);
/* only undo pushes on objects without editmode... */
if(type==OB_EMPTY) BIF_undo_push("Add Empty");
else if(type==OB_LAMP) {
BIF_undo_push("Add Lamp");
- reshadeall_displist(); /* only frees */
+ reshadeall_displist(scene); /* only frees */
}
else if(type==OB_LATTICE) BIF_undo_push("Add Lattice");
else if(type==OB_CAMERA) BIF_undo_push("Add Camera");
@@ -287,7 +287,7 @@ void add_objectLamp(Scene *scene, View3D *v3d, short type)
if(scene->obedit==NULL) { // XXX get from context
add_object_draw(scene, v3d, OB_LAMP);
- base_init_from_view3d(BASACT, v3d);
+ base_init_from_view3d(BASACT, v3d, scene);
}
la = BASACT->object->data;
@@ -353,7 +353,7 @@ void delete_obj(Scene *scene, View3D *v3d, int ok)
}
}
- if(islamp) reshadeall_displist(); /* only frees displist */
+ if(islamp) reshadeall_displist(scene); /* only frees displist */
// XXX redraw_test_buttons(OBACT);
allqueue(REDRAWVIEW3D, 0);
@@ -775,7 +775,7 @@ void add_hook(Scene *scene, View3D *v3d, int mode)
if(mode==1) {
Base *base= BASACT, *newbase;
- ob= add_object(OB_EMPTY);
+ ob= add_object(scene, OB_EMPTY);
/* set layers OK */
newbase= BASACT;
newbase->lay= base->lay;
@@ -814,7 +814,7 @@ void add_hook(Scene *scene, View3D *v3d, int mode)
/* vert x (obmat x hook->imat) x hook->obmat x ob->imat */
/* (parentinv ) */
- where_is_object(ob);
+ where_is_object(scene, ob);
Mat4Invert(ob->imat, ob->obmat);
/* apparently this call goes from right to left... */
@@ -831,7 +831,7 @@ void add_hook(Scene *scene, View3D *v3d, int mode)
obedit_hook_select(obedit, hmd);
}
else if(mode==6) { /* clear offset */
- where_is_object(ob); /* ob is hook->parent */
+ where_is_object(scene, ob); /* ob is hook->parent */
Mat4Invert(ob->imat, ob->obmat);
/* this call goes from right to left... */
@@ -845,7 +845,7 @@ void add_hook(Scene *scene, View3D *v3d, int mode)
/* use this when the loc/size/rot of the parent has changed but the children should stay in the same place
* apply-size-rot or object center for eg */
-static void ignore_parent_tx( Object *ob )
+static void ignore_parent_tx(Scene *scene, Object *ob )
{
Object workob;
Object *ob_child;
@@ -854,7 +854,7 @@ static void ignore_parent_tx( Object *ob )
for (ob_child=G.main->object.first; ob_child; ob_child=ob_child->id.next) {
if (ob_child->parent == ob) {
apply_obmat(ob_child);
- what_does_parent(ob_child, &workob);
+ what_does_parent(scene, ob_child, &workob);
Mat4Invert(ob_child->parentinv, workob.obmat);
}
}
@@ -1618,7 +1618,7 @@ void reset_slowparents(Scene *scene, View3D *v3d)
if(base->object->parent) {
if(base->object->partype & PARSLOW) {
base->object->partype -= PARSLOW;
- where_is_object(base->object);
+ where_is_object(scene, base->object);
base->object->partype |= PARSLOW;
}
}
@@ -1756,7 +1756,7 @@ void make_vertex_parent(Scene *scene, Object *obedit, View3D *v3d)
ob->par3= v3-1;
/* inverse parent matrix */
- what_does_parent(ob, &workob);
+ what_does_parent(scene, ob, &workob);
Mat4Invert(ob->parentinv, workob.obmat);
}
else {
@@ -1764,7 +1764,7 @@ void make_vertex_parent(Scene *scene, Object *obedit, View3D *v3d)
ob->par1= v1-1;
/* inverse parent matrix */
- what_does_parent(ob, &workob);
+ what_does_parent(scene, ob, &workob);
Mat4Invert(ob->parentinv, workob.obmat);
}
}
@@ -1837,7 +1837,7 @@ void make_proxy(Scene *scene)
Base *newbase, *oldbase= BASACT;
char name[32];
- newob= add_object(OB_EMPTY);
+ newob= add_object(scene, OB_EMPTY);
if(gob)
strcpy(name, gob->id.name+2);
else
@@ -1904,12 +1904,12 @@ oldcode()
// XXX create_vgroups_from_armature(base->object, par);
base->object->partype= PAROBJECT;
- what_does_parent(base->object);
+ what_does_parent(scene, base->object);
Mat4One (base->object->parentinv);
base->object->partype= mode;
}
else
- what_does_parent(base->object, &workob);
+ what_does_parent(scene, base->object, &workob);
Mat4Invert(base->object->parentinv, workob.obmat);
}
}
@@ -1951,6 +1951,7 @@ static int test_parent_loop(Object *par, Object *ob)
static int make_parent_exec(bContext *C, wmOperator *op)
{
+ Scene *scene= CTX_data_scene(C);
Object *par= CTX_data_active_object(C);
bPoseChannel *pchan= NULL;
int partype= RNA_enum_get(op->ptr, "type");
@@ -1966,7 +1967,7 @@ static int make_parent_exec(bContext *C, wmOperator *op)
if((cu->flag & CU_PATH)==0) {
cu->flag |= CU_PATH|CU_FOLLOW;
- makeDispListCurveTypes(par, 0); /* force creation of path data */
+ makeDispListCurveTypes(scene, par, 0); /* force creation of path data */
}
else cu->flag |= CU_FOLLOW;
@@ -2010,7 +2011,7 @@ static int make_parent_exec(bContext *C, wmOperator *op)
}
/* calculate inverse parent matrix */
- what_does_parent(ob, &workob);
+ what_does_parent(scene, ob, &workob);
Mat4Invert(ob->parentinv, workob.obmat);
ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA;
@@ -2515,8 +2516,8 @@ void docenter(Scene *scene, View3D *v3d, int centermode)
base->object->loc[1]+= centn[1];
base->object->loc[2]+= centn[2];
- where_is_object(base->object);
- ignore_parent_tx(base->object);
+ where_is_object(scene, base->object);
+ ignore_parent_tx(scene, base->object);
/* other users? */
ob= G.main->object.first;
@@ -2536,8 +2537,8 @@ void docenter(Scene *scene, View3D *v3d, int centermode)
ob->loc[1]+= centn[1];
ob->loc[2]+= centn[2];
- where_is_object(ob);
- ignore_parent_tx(ob);
+ where_is_object(scene, ob);
+ ignore_parent_tx(scene, ob);
if(tme && (tme->flag & ME_ISDONE)==0) {
mvert= tme->mvert;
@@ -2632,8 +2633,8 @@ void docenter(Scene *scene, View3D *v3d, int centermode)
base->object->loc[1]+= cent[1];
base->object->loc[2]+= cent[2];
- where_is_object(base->object);
- ignore_parent_tx(base->object);
+ where_is_object(scene, base->object);
+ ignore_parent_tx(scene, base->object);
}
tot_change++;
@@ -2682,8 +2683,8 @@ void docenter(Scene *scene, View3D *v3d, int centermode)
// XXX docenter_armature(base->object, centermode);
tot_change++;
- where_is_object(base->object);
- ignore_parent_tx(base->object);
+ where_is_object(scene, base->object);
+ ignore_parent_tx(scene, base->object);
if(obedit)
break;
@@ -2780,7 +2781,7 @@ void movetolayer(Scene *scene, View3D *v3d)
}
}
}
- if(islamp) reshadeall_displist(); /* only frees */
+ if(islamp) reshadeall_displist(scene); /* only frees */
/* warning, active object may be hidden now */
@@ -3312,7 +3313,7 @@ void special_editmenu(Scene *scene, View3D *v3d)
}
-static void curvetomesh(Object *ob)
+static void curvetomesh(Scene *scene, Object *ob)
{
Curve *cu;
DispList *dl;
@@ -3321,7 +3322,7 @@ static void curvetomesh(Object *ob)
cu= ob->data;
dl= cu->disp.first;
- if(dl==0) makeDispListCurveTypes(ob, 0); /* force creation */
+ if(dl==0) makeDispListCurveTypes(scene, ob, 0); /* force creation */
nurbs_to_mesh(ob); /* also does users */
if (ob->type != OB_MESH) {
@@ -3415,7 +3416,7 @@ void convertmenu(Scene *scene, View3D *v3d)
G.totmesh++;
/* make new mesh data from the original copy */
- dm= mesh_get_derived_final(ob1, CD_MASK_MESH);
+ dm= mesh_get_derived_final(scene, ob1, CD_MASK_MESH);
/* dm= mesh_create_derived_no_deform(ob1, NULL); this was called original (instead of get_derived). man o man why! (ton) */
DM_to_mesh(dm, ob1->data);
@@ -3470,18 +3471,18 @@ void convertmenu(Scene *scene, View3D *v3d)
}
}
if (nr==3) {
- curvetomesh(ob);
+ curvetomesh(scene, ob);
}
}
else if(ELEM(ob->type, OB_CURVE, OB_SURF)) {
if(nr==1) {
- curvetomesh(ob);
+ curvetomesh(scene, ob);
}
}
else if(ob->type==OB_MBALL) {
if(nr==1 || nr == 2) {
- ob= find_basis_mball(ob);
+ ob= find_basis_mball(scene, ob);
if(ob->disp.first && !(ob->flag&OB_DONE)) {
basedel = base;
@@ -4069,7 +4070,7 @@ void copy_attr(Scene *scene, View3D *v3d, short event)
cu1->vfontbi= cu->vfontbi;
id_us_plus((ID *)cu1->vfontbi);
- text_to_curve(base->object, 0); /* needed? */
+ text_to_curve(scene, base->object, 0); /* needed? */
strcpy(cu1->family, cu->family);
@@ -4371,7 +4372,7 @@ void make_links(Scene *scene, View3D *v3d, short event)
obt->ipo= ob->ipo;
if(obt->ipo) {
id_us_plus((ID *)obt->ipo);
- do_ob_ipo(obt);
+ do_ob_ipo(scene, obt);
}
}
else if(event==6) {
@@ -4535,7 +4536,7 @@ static void apply_objects_internal(Scene *scene, View3D *v3d, int apply_scale, i
ob->rot[0]= ob->rot[1]= ob->rot[2]= 0.0f;
/*QuatOne(ob->quat);*/ /* Quats arnt used yet */
- where_is_object(ob);
+ where_is_object(scene, ob);
/* texspace and normals */
BASACT= base;
@@ -4565,7 +4566,7 @@ static void apply_objects_internal(Scene *scene, View3D *v3d, int apply_scale, i
ob->rot[0]= ob->rot[1]= ob->rot[2]= 0.0;
/*QuatOne(ob->quat); (not used anymore)*/
- where_is_object(ob);
+ where_is_object(scene, ob);
change = 1;
}
@@ -4611,7 +4612,7 @@ static void apply_objects_internal(Scene *scene, View3D *v3d, int apply_scale, i
ob->rot[0]= ob->rot[1]= ob->rot[2]= 0.0;
/*QuatOne(ob->quat); (quats arnt used anymore)*/
- where_is_object(ob);
+ where_is_object(scene, ob);
/* texspace and normals */
BASACT= base;
@@ -4625,7 +4626,7 @@ static void apply_objects_internal(Scene *scene, View3D *v3d, int apply_scale, i
continue;
}
- ignore_parent_tx(ob);
+ ignore_parent_tx(scene, ob);
}
}
if (change) {
@@ -4663,12 +4664,12 @@ void apply_objects_visual_tx( Scene *scene, View3D *v3d )
for (base= FIRSTBASE; base; base= base->next) {
if(TESTBASELIB(v3d, base)) {
ob= base->object;
- where_is_object(ob);
+ where_is_object(scene, ob);
VECCOPY(ob->loc, ob->obmat[3]);
Mat4ToSize(ob->obmat, ob->size);
Mat4ToEul(ob->obmat, ob->rot);
- where_is_object(ob);
+ where_is_object(scene, ob);
change = 1;
}
@@ -6243,7 +6244,7 @@ void hookmenu(Scene *scene, View3D *v3d)
float *curs = give_cursor(scene, v3d);
float bmat[3][3], imat[3][3];
- where_is_object(ob);
+ where_is_object(scene, ob);
Mat3CpyMat4(bmat, ob->obmat);
Mat3Inv(imat, bmat);
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c
index 62082fbb323..97f45ff05bf 100644
--- a/source/blender/editors/screen/screen_edit.c
+++ b/source/blender/editors/screen/screen_edit.c
@@ -400,13 +400,13 @@ ScrArea *area_split(wmWindow *win, bScreen *sc, ScrArea *sa, char dir, float fac
/* empty screen, with 1 dummy area without spacedata */
/* uses window size */
-bScreen *screen_add(wmWindow *win, char *name)
+bScreen *screen_add(wmWindow *win, Scene *scene, char *name)
{
bScreen *sc;
ScrVert *sv1, *sv2, *sv3, *sv4;
sc= alloc_libblock(&G.main->screen, ID_SCR, name);
- sc->scene= G.scene;
+ sc->scene= scene;
sc->do_refresh= 1;
sv1= screen_addvert(sc, 0, 0);
@@ -898,7 +898,7 @@ bScreen *ED_screen_duplicate(wmWindow *win, bScreen *sc)
if(sc->full != SCREENNORMAL) return NULL; /* XXX handle this case! */
/* make new empty screen: */
- newsc= screen_add(win, sc->id.name+2);
+ newsc= screen_add(win, sc->scene, sc->id.name+2);
/* copy all data */
screen_copy(newsc, sc);
/* set in window */
@@ -1264,7 +1264,7 @@ void ed_screen_fullarea(bContext *C)
oldscreen->full = SCREENFULL;
- sc= screen_add(CTX_wm_window(C), "temp");
+ sc= screen_add(CTX_wm_window(C), CTX_data_scene(C), "temp");
/* timer */
sc->animtimer= oldscreen->animtimer;
diff --git a/source/blender/editors/screen/screen_intern.h b/source/blender/editors/screen/screen_intern.h
index a4da1e4813f..43a1015562a 100644
--- a/source/blender/editors/screen/screen_intern.h
+++ b/source/blender/editors/screen/screen_intern.h
@@ -30,13 +30,14 @@
/* internal exports only */
struct wmWindow;
+struct Scene;
/* area.c */
void area_copy_data (ScrArea *sa1, ScrArea *sa2, int swap_space);
void area_newspace(bContext *C, ScrArea *sa, int type);
/* screen_edit.c */
-bScreen *screen_add(struct wmWindow *win, char *name);
+bScreen *screen_add(struct wmWindow *win, struct Scene *scene, char *name);
ScrEdge *screen_findedge(bScreen *sc, ScrVert *v1, ScrVert *v2);
ScrArea *area_split(wmWindow *win, bScreen *sc, ScrArea *sa, char dir, float fac);
int screen_area_join(bContext *C, bScreen* scr, ScrArea *sa1, ScrArea *sa2);
diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c
index 05a038bf236..761ba384c82 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -355,7 +355,7 @@ static int screen_area_rip_op(bContext *C, wmOperator *op)
newwin= WM_window_open(C, &rect);
/* allocs new screen and adds to newly created window, using window size */
- newsc= screen_add(newwin, sc->id.name+2);
+ newsc= screen_add(newwin, CTX_data_scene(C), sc->id.name+2);
newwin->screen= newsc;
/* copy area to new screen */
diff --git a/source/blender/editors/space_buttons/buttons_scene.c b/source/blender/editors/space_buttons/buttons_scene.c
index c5b03195017..f278b6379ab 100644
--- a/source/blender/editors/space_buttons/buttons_scene.c
+++ b/source/blender/editors/space_buttons/buttons_scene.c
@@ -51,9 +51,10 @@
static void render_panel_output(const bContext *C, ARegion *ar)
{
+ uiBlock *block;
+ Scene *scene= CTX_data_scene(C);
//ID *id;
int a,b;
- uiBlock *block;
//char *strp;
block= uiBeginBlock(C, ar, "render_panel_output", UI_EMBOSS, UI_HELV);
@@ -61,30 +62,30 @@ static void render_panel_output(const bContext *C, ARegion *ar)
uiBlockBeginAlign(block);
uiDefIconBut(block, BUT, 0, ICON_FILESEL, 10, 190, 20, 20, 0, 0, 0, 0, 0, "Select the directory/name for saving animations");
- uiDefBut(block, TEX,0,"", 31, 190, 279, 20,G.scene->r.pic, 0.0,79.0, 0, 0, "Directory/name to save animations, # characters defines the position and length of frame numbers");
+ uiDefBut(block, TEX,0,"", 31, 190, 279, 20,scene->r.pic, 0.0,79.0, 0, 0, "Directory/name to save animations, # characters defines the position and length of frame numbers");
uiDefIconBut(block, BUT,0, ICON_FILESEL, 10, 168, 20, 20, 0, 0, 0, 0, 0, "Select the directory/name for a Backbuf image");
- uiDefBut(block, TEX,0,"", 31, 168, 259, 20,G.scene->r.backbuf, 0.0,79.0, 0, 0, "Image to use as background for rendering");
- uiDefIconButBitS(block, ICONTOG, R_BACKBUF, 0, ICON_CHECKBOX_HLT-1, 290, 168, 20, 20, &G.scene->r.bufflag, 0.0, 0.0, 0, 0, "Enable/Disable use of Backbuf image");
+ uiDefBut(block, TEX,0,"", 31, 168, 259, 20,scene->r.backbuf, 0.0,79.0, 0, 0, "Image to use as background for rendering");
+ uiDefIconButBitS(block, ICONTOG, R_BACKBUF, 0, ICON_CHECKBOX_HLT-1, 290, 168, 20, 20, &scene->r.bufflag, 0.0, 0.0, 0, 0, "Enable/Disable use of Backbuf image");
uiBlockEndAlign(block);
- uiDefButBitI(block, TOG, R_EXTENSION, 0, "Extensions", 10, 142, 100, 20, &G.scene->r.scemode, 0.0, 0.0, 0, 0, "Adds filetype extensions to the filename when rendering animations");
+ uiDefButBitI(block, TOG, R_EXTENSION, 0, "Extensions", 10, 142, 100, 20, &scene->r.scemode, 0.0, 0.0, 0, 0, "Adds filetype extensions to the filename when rendering animations");
uiBlockBeginAlign(block);
- uiDefButBitI(block, TOG, R_TOUCH, 0, "Touch", 170, 142, 50, 20, &G.scene->r.mode, 0.0, 0.0, 0, 0, "Create an empty file before rendering each frame, remove if cancelled (and empty)");
- uiDefButBitI(block, TOG, R_NO_OVERWRITE, 0, "No Overwrite", 220, 142, 90, 20, &G.scene->r.mode, 0.0, 0.0, 0, 0, "Skip rendering frames when the file exists (image output only)");
+ uiDefButBitI(block, TOG, R_TOUCH, 0, "Touch", 170, 142, 50, 20, &scene->r.mode, 0.0, 0.0, 0, 0, "Create an empty file before rendering each frame, remove if cancelled (and empty)");
+ uiDefButBitI(block, TOG, R_NO_OVERWRITE, 0, "No Overwrite", 220, 142, 90, 20, &scene->r.mode, 0.0, 0.0, 0, 0, "Skip rendering frames when the file exists (image output only)");
uiBlockEndAlign(block);
/* SET BUTTON */
uiBlockBeginAlign(block);
- /*XXX id= (ID *)G.scene->set;
+ /*XXX id= (ID *)scene->set;
IDnames_to_pupstring(&strp, NULL, NULL, &(G.main->scene), id, &(G.buts->menunr));
if(strp[0])
uiDefButS(block, MENU, 0, strp, 10, 114, 20, 20, &(G.buts->menunr), 0, 0, 0, 0, "Scene to link as a Set");
MEM_freeN(strp);*/
- if(G.scene->set) {
+ if(scene->set) {
uiBlockSetButLock(block, 1, NULL);
- //XXX uiDefIDPoinBut(block, test_scenepoin_but, ID_SCE, 0, "", 31, 114, 100, 20, &(G.scene->set), "Name of the Set");
+ //XXX uiDefIDPoinBut(block, test_scenepoin_but, ID_SCE, 0, "", 31, 114, 100, 20, &(scene->set), "Name of the Set");
uiBlockClearButLock(block);
uiDefIconBut(block, BUT, 0, ICON_X, 132, 114, 20, 20, 0, 0, 0, 0, 0, "Remove Set link");
} else {
@@ -93,13 +94,13 @@ static void render_panel_output(const bContext *C, ARegion *ar)
uiBlockEndAlign(block);
uiBlockBeginAlign(block);
- uiDefIconButBitI(block, TOGN, R_FIXED_THREADS, 0, ICON_AUTO, 10, 63, 20, 20, &G.scene->r.mode, 0.0, 0.0, 0, 0, "Automatically set the threads to the number of processors on the system");
- if ((G.scene->r.mode & R_FIXED_THREADS)==0) {
+ uiDefIconButBitI(block, TOGN, R_FIXED_THREADS, 0, ICON_AUTO, 10, 63, 20, 20, &scene->r.mode, 0.0, 0.0, 0, 0, "Automatically set the threads to the number of processors on the system");
+ if ((scene->r.mode & R_FIXED_THREADS)==0) {
char thread_str[16];
sprintf(thread_str, " Threads: %d", BLI_system_thread_count());
uiDefBut(block, LABEL, 0, thread_str, 30, 63,80,20, 0, 0, 0, 0, 0, "");
} else {
- uiDefButS(block, NUM, 0, "Threads:", 30, 63, 80, 20, &G.scene->r.threads, 1, BLENDER_MAX_THREADS, 0, 0, "Amount of threads for render (takes advantage of multi-core and multi-processor computers)");
+ uiDefButS(block, NUM, 0, "Threads:", 30, 63, 80, 20, &scene->r.threads, 1, BLENDER_MAX_THREADS, 0, 0, "Amount of threads for render (takes advantage of multi-core and multi-processor computers)");
}
uiBlockEndAlign(block);
@@ -113,9 +114,9 @@ static void render_panel_output(const bContext *C, ARegion *ar)
#ifdef WITH_OPENEXR
uiBlockBeginAlign(block);
- uiDefButBitI(block, TOG, R_EXR_TILE_FILE, 0, "Save Buffers", 72, 31, 120, 19, &G.scene->r.scemode, 0.0, 0.0, 0, 0, "Save tiles for all RenderLayers and used SceneNodes to files in the temp directory (saves memory, allows Full Sampling)");
- if(G.scene->r.scemode & R_EXR_TILE_FILE)
- uiDefButBitI(block, TOG, R_FULL_SAMPLE, 0, "FullSample", 192, 31, 118, 19, &G.scene->r.scemode, 0.0, 0.0, 0, 0, "Saves for every OSA sample the entire RenderLayer results (Higher quality sampling but slower)");
+ uiDefButBitI(block, TOG, R_EXR_TILE_FILE, 0, "Save Buffers", 72, 31, 120, 19, &scene->r.scemode, 0.0, 0.0, 0, 0, "Save tiles for all RenderLayers and used SceneNodes to files in the temp directory (saves memory, allows Full Sampling)");
+ if(scene->r.scemode & R_EXR_TILE_FILE)
+ uiDefButBitI(block, TOG, R_FULL_SAMPLE, 0, "FullSample", 192, 31, 118, 19, &scene->r.scemode, 0.0, 0.0, 0, 0, "Saves for every OSA sample the entire RenderLayer results (Higher quality sampling but slower)");
uiBlockEndAlign(block);
#endif
@@ -123,17 +124,17 @@ static void render_panel_output(const bContext *C, ARegion *ar)
72, 10, 120, 19, &G.displaymode, 0.0, (float)R_DISPLAYWIN, 0, 0, "Sets render output display");
/* Dither control */
- uiDefButF(block, NUM,0, "Dither:", 10,89,100,19, &G.scene->r.dither_intensity, 0.0, 2.0, 0, 0, "The amount of dithering noise present in the output image (0.0 = no dithering)");
+ uiDefButF(block, NUM,0, "Dither:", 10,89,100,19, &scene->r.dither_intensity, 0.0, 2.0, 0, 0, "The amount of dithering noise present in the output image (0.0 = no dithering)");
/* Toon shading buttons */
uiBlockBeginAlign(block);
- uiDefButBitI(block, TOG, R_EDGE, 0,"Edge", 115, 89, 60, 20, &G.scene->r.mode, 0, 0, 0, 0, "Enable Toon Edge-enhance");
+ uiDefButBitI(block, TOG, R_EDGE, 0,"Edge", 115, 89, 60, 20, &scene->r.mode, 0, 0, 0, 0, "Enable Toon Edge-enhance");
//XXX uiDefBlockBut(block, edge_render_menu, NULL, "Edge Settings", 175, 89, 135, 20, "Display Edge settings");
uiBlockEndAlign(block);
uiBlockBeginAlign(block);
- uiDefButBitI(block, TOG, R_NO_TEX, 0, "Disable Tex", 115, 63, 75, 20, &G.scene->r.scemode, 0.0, 0.0, 0, 0, "Disables Textures for render");
- uiDefButBitI(block, TOG, R_FREE_IMAGE, 0, "Free Tex Images", 210, 63, 100, 20, &G.scene->r.scemode, 0.0, 0.0, 0, 0, "Frees all Images used by Textures after each render");
+ uiDefButBitI(block, TOG, R_NO_TEX, 0, "Disable Tex", 115, 63, 75, 20, &scene->r.scemode, 0.0, 0.0, 0, 0, "Disables Textures for render");
+ uiDefButBitI(block, TOG, R_FREE_IMAGE, 0, "Free Tex Images", 210, 63, 100, 20, &scene->r.scemode, 0.0, 0.0, 0, 0, "Frees all Images used by Textures after each render");
uiBlockEndAlign(block);
uiEndBlock(C, block);
@@ -147,6 +148,7 @@ static void do_bake_func(bContext *C, void *unused_v, void *unused_p)
static void render_panel_bake(const bContext *C, ARegion *ar)
{
uiBlock *block;
+ Scene *scene= CTX_data_scene(C);
uiBut *but;
block= uiBeginBlock(C, ar, "render_panel_bake", UI_EMBOSS, UI_HELV);
@@ -157,45 +159,45 @@ static void render_panel_bake(const bContext *C, ARegion *ar)
uiButSetFunc(but, do_bake_func, NULL, NULL);
uiBlockBeginAlign(block);
- uiDefButBitS(block, TOG, R_BAKE_TO_ACTIVE, 0, "Selected to Active", 10,120,190,20,&G.scene->r.bake_flag, 0.0, 0, 0, 0, "Bake shading on the surface of selected objects to the active object");
- uiDefButF(block, NUM, 0, "Dist:", 10,100,95,20,&G.scene->r.bake_maxdist, 0.0, 1000.0, 1, 0, "Maximum distance from active object to other object (in blender units)");
- uiDefButF(block, NUM, 0, "Bias:", 105,100,95,20,&G.scene->r.bake_biasdist, 0.0, 1000.0, 1, 0, "Bias towards faces further away from the object (in blender units)");
+ uiDefButBitS(block, TOG, R_BAKE_TO_ACTIVE, 0, "Selected to Active", 10,120,190,20,&scene->r.bake_flag, 0.0, 0, 0, 0, "Bake shading on the surface of selected objects to the active object");
+ uiDefButF(block, NUM, 0, "Dist:", 10,100,95,20,&scene->r.bake_maxdist, 0.0, 1000.0, 1, 0, "Maximum distance from active object to other object (in blender units)");
+ uiDefButF(block, NUM, 0, "Bias:", 105,100,95,20,&scene->r.bake_biasdist, 0.0, 1000.0, 1, 0, "Bias towards faces further away from the object (in blender units)");
uiBlockEndAlign(block);
- if(G.scene->r.bake_mode == RE_BAKE_NORMALS)
+ if(scene->r.bake_mode == RE_BAKE_NORMALS)
uiDefButS(block, MENU, 0, "Normal Space %t|Camera %x0|World %x1|Object %x2|Tangent %x3",
- 10,70,190,20, &G.scene->r.bake_normal_space, 0, 0, 0, 0, "Choose normal space for baking");
- else if(G.scene->r.bake_mode == RE_BAKE_AO || G.scene->r.bake_mode == RE_BAKE_DISPLACEMENT) {
- uiDefButBitS(block, TOG, R_BAKE_NORMALIZE, 0, "Normalized", 10,70,190,20, &G.scene->r.bake_flag, 0.0, 0, 0, 0,
- G.scene->r.bake_mode == RE_BAKE_AO ?
+ 10,70,190,20, &scene->r.bake_normal_space, 0, 0, 0, 0, "Choose normal space for baking");
+ else if(scene->r.bake_mode == RE_BAKE_AO || scene->r.bake_mode == RE_BAKE_DISPLACEMENT) {
+ uiDefButBitS(block, TOG, R_BAKE_NORMALIZE, 0, "Normalized", 10,70,190,20, &scene->r.bake_flag, 0.0, 0, 0, 0,
+ scene->r.bake_mode == RE_BAKE_AO ?
"Bake ambient occlusion normalized, without taking into acount material settings":
"Normalized displacement value to fit the 'Dist' range"
);
}
uiDefButS(block, MENU, 0, "Quad Split Order%t|Quad Split Auto%x0|Quad Split A (0,1,2) (0,2,3)%x1|Quad Split B (1,2,3) (1,3,0)%x2",
- 10,10,190,20, &G.scene->r.bake_quad_split, 0, 0, 0, 0, "Method to divide quads (use A or B for external applications that use a fixed order)");
+ 10,10,190,20, &scene->r.bake_quad_split, 0, 0, 0, 0, "Method to divide quads (use A or B for external applications that use a fixed order)");
#if 0
uiBlockBeginAlign(block);
- uiDefButBitS(block, TOG, R_BAKE_OSA, 0, "OSA", 10,120,190,20, &G.scene->r.bake_flag, 0, 0, 0, 0, "Enables Oversampling (Anti-aliasing)");
- uiDefButS(block, ROW,0,"5", 10,100,50,20,&G.scene->r.bake_osa,2.0,5.0, 0, 0, "Sets oversample level to 5");
- uiDefButS(block, ROW,0,"8", 60,100,45,20,&G.scene->r.bake_osa,2.0,8.0, 0, 0, "Sets oversample level to 8");
- uiDefButS(block, ROW,0,"11", 105,100,45,20,&G.scene->r.bake_osa,2.0,11.0, 0, 0, "Sets oversample level to 11");
- uiDefButS(block, ROW,0,"16", 150,100,50,20,&G.scene->r.bake_osa,2.0,16.0, 0, 0, "Sets oversample level to 16");
+ uiDefButBitS(block, TOG, R_BAKE_OSA, 0, "OSA", 10,120,190,20, &scene->r.bake_flag, 0, 0, 0, 0, "Enables Oversampling (Anti-aliasing)");
+ uiDefButS(block, ROW,0,"5", 10,100,50,20,&scene->r.bake_osa,2.0,5.0, 0, 0, "Sets oversample level to 5");
+ uiDefButS(block, ROW,0,"8", 60,100,45,20,&scene->r.bake_osa,2.0,8.0, 0, 0, "Sets oversample level to 8");
+ uiDefButS(block, ROW,0,"11", 105,100,45,20,&scene->r.bake_osa,2.0,11.0, 0, 0, "Sets oversample level to 11");
+ uiDefButS(block, ROW,0,"16", 150,100,50,20,&scene->r.bake_osa,2.0,16.0, 0, 0, "Sets oversample level to 16");
#endif
uiBlockBeginAlign(block);
- uiDefButS(block, ROW,0,"Full Render", 210,170,120,20,&G.scene->r.bake_mode, 1.0, RE_BAKE_ALL, 0, 0, "");
- uiDefButS(block, ROW,0,"Ambient Occlusion",210,150,120,20,&G.scene->r.bake_mode, 1.0, RE_BAKE_AO, 0, 0, "");
- uiDefButS(block, ROW,0,"Shadow", 210,130,120,20,&G.scene->r.bake_mode, 1.0, RE_BAKE_SHADOW, 0, 0, "");
- uiDefButS(block, ROW,0,"Normals", 210,110,120,20,&G.scene->r.bake_mode, 1.0, RE_BAKE_NORMALS, 0, 0, "");
- uiDefButS(block, ROW,0,"Textures", 210,90,120,20,&G.scene->r.bake_mode, 1.0, RE_BAKE_TEXTURE, 0, 0, "");
- uiDefButS(block, ROW,0,"Displacement", 210,70,120,20,&G.scene->r.bake_mode, 1.0, RE_BAKE_DISPLACEMENT, 0, 0, "");
+ uiDefButS(block, ROW,0,"Full Render", 210,170,120,20,&scene->r.bake_mode, 1.0, RE_BAKE_ALL, 0, 0, "");
+ uiDefButS(block, ROW,0,"Ambient Occlusion",210,150,120,20,&scene->r.bake_mode, 1.0, RE_BAKE_AO, 0, 0, "");
+ uiDefButS(block, ROW,0,"Shadow", 210,130,120,20,&scene->r.bake_mode, 1.0, RE_BAKE_SHADOW, 0, 0, "");
+ uiDefButS(block, ROW,0,"Normals", 210,110,120,20,&scene->r.bake_mode, 1.0, RE_BAKE_NORMALS, 0, 0, "");
+ uiDefButS(block, ROW,0,"Textures", 210,90,120,20,&scene->r.bake_mode, 1.0, RE_BAKE_TEXTURE, 0, 0, "");
+ uiDefButS(block, ROW,0,"Displacement", 210,70,120,20,&scene->r.bake_mode, 1.0, RE_BAKE_DISPLACEMENT, 0, 0, "");
uiBlockEndAlign(block);
- uiDefButBitS(block, TOG, R_BAKE_CLEAR, 0, "Clear", 210,40,120,20,&G.scene->r.bake_flag, 0.0, 0, 0, 0, "Clear Images before baking");
+ uiDefButBitS(block, TOG, R_BAKE_CLEAR, 0, "Clear", 210,40,120,20,&scene->r.bake_flag, 0.0, 0, 0, 0, "Clear Images before baking");
- uiDefButS(block, NUM, 0,"Margin:", 210,10,120,20,&G.scene->r.bake_filter, 0.0, 32.0, 0, 0, "Amount of pixels to extend the baked result with, as post process filter");
+ uiDefButS(block, NUM, 0,"Margin:", 210,10,120,20,&scene->r.bake_filter, 0.0, 32.0, 0, 0, "Amount of pixels to extend the baked result with, as post process filter");
uiEndBlock(C, block);
}
@@ -203,6 +205,7 @@ static void render_panel_bake(const bContext *C, ARegion *ar)
static void render_panel_render(const bContext *C, ARegion *ar)
{
uiBlock *block;
+ Scene *scene= CTX_data_scene(C);
char str[256];
block= uiBeginBlock(C, ar, "render_panel_render", UI_EMBOSS, UI_HELV);
@@ -213,67 +216,67 @@ static void render_panel_render(const bContext *C, ARegion *ar)
#ifndef DISABLE_YAFRAY
/* yafray: on request, render engine menu is back again, and moved to Render panel */
uiDefButS(block, MENU, 0, "Rendering Engine %t|Blender Internal %x0|YafRay %x1",
- 369, 142, 191, 20, &G.scene->r.renderer, 0, 0, 0, 0, "Choose rendering engine");
+ 369, 142, 191, 20, &scene->r.renderer, 0, 0, 0, 0, "Choose rendering engine");
#else
uiDefButS(block, MENU, 0, "Rendering Engine %t|Blender Internal %x0",
- 369, 142, 191, 20, &G.scene->r.renderer, 0, 0, 0, 0, "Choose rendering engine");
+ 369, 142, 191, 20, &scene->r.renderer, 0, 0, 0, 0, "Choose rendering engine");
#endif /* disable yafray */
uiBlockBeginAlign(block);
- if((G.scene->r.scemode & R_FULL_SAMPLE) && (G.scene->r.scemode & R_EXR_TILE_FILE))
- uiDefButBitI(block, TOG, R_OSA, 0, "FSA", 369,109,122,20,&G.scene->r.mode, 0, 0, 0, 0, "Saves all samples, then composites, and then merges (for best Anti-aliasing)");
+ if((scene->r.scemode & R_FULL_SAMPLE) && (scene->r.scemode & R_EXR_TILE_FILE))
+ uiDefButBitI(block, TOG, R_OSA, 0, "FSA", 369,109,122,20,&scene->r.mode, 0, 0, 0, 0, "Saves all samples, then composites, and then merges (for best Anti-aliasing)");
else
- uiDefButBitI(block, TOG, R_OSA, 0, "OSA", 369,109,122,20,&G.scene->r.mode, 0, 0, 0, 0, "Enables Oversampling (Anti-aliasing)");
- uiDefButS(block, ROW,0,"5", 369,88,29,20,&G.scene->r.osa,2.0,5.0, 0, 0, "Render 5 samples per pixel for smooth edges (Fast)");
- uiDefButS(block, ROW,0,"8", 400,88,29,20,&G.scene->r.osa,2.0,8.0, 0, 0, "Render 8 samples per pixel for smooth edges (Recommended)");
- uiDefButS(block, ROW,0,"11", 431,88,29,20,&G.scene->r.osa,2.0,11.0, 0, 0, "Render 11 samples per pixel for smooth edges (High Quality)");
- uiDefButS(block, ROW,0,"16", 462,88,29,20,&G.scene->r.osa,2.0,16.0, 0, 0, "Render 16 samples per pixel for smooth edges (Highest Quality)");
+ uiDefButBitI(block, TOG, R_OSA, 0, "OSA", 369,109,122,20,&scene->r.mode, 0, 0, 0, 0, "Enables Oversampling (Anti-aliasing)");
+ uiDefButS(block, ROW,0,"5", 369,88,29,20,&scene->r.osa,2.0,5.0, 0, 0, "Render 5 samples per pixel for smooth edges (Fast)");
+ uiDefButS(block, ROW,0,"8", 400,88,29,20,&scene->r.osa,2.0,8.0, 0, 0, "Render 8 samples per pixel for smooth edges (Recommended)");
+ uiDefButS(block, ROW,0,"11", 431,88,29,20,&scene->r.osa,2.0,11.0, 0, 0, "Render 11 samples per pixel for smooth edges (High Quality)");
+ uiDefButS(block, ROW,0,"16", 462,88,29,20,&scene->r.osa,2.0,16.0, 0, 0, "Render 16 samples per pixel for smooth edges (Highest Quality)");
uiBlockEndAlign(block);
uiBlockBeginAlign(block);
- uiDefButBitI(block, TOG, R_MBLUR, 0, "MBLUR", 496,109,64,20,&G.scene->r.mode, 0, 0, 0, 0, "Enables Motion Blur calculation");
- uiDefButF(block, NUM,0,"Bf:", 496,88,64,20,&G.scene->r.blurfac, 0.01, 5.0, 10, 2, "Sets motion blur factor");
+ uiDefButBitI(block, TOG, R_MBLUR, 0, "MBLUR", 496,109,64,20,&scene->r.mode, 0, 0, 0, 0, "Enables Motion Blur calculation");
+ uiDefButF(block, NUM,0,"Bf:", 496,88,64,20,&scene->r.blurfac, 0.01, 5.0, 10, 2, "Sets motion blur factor");
uiBlockEndAlign(block);
uiBlockBeginAlign(block);
- uiDefButS(block, NUM,0,"Xparts:", 369,46,95,29,&G.scene->r.xparts,1.0, 512.0, 0, 0, "Sets the number of horizontal parts to render image in (For panorama sets number of camera slices)");
- uiDefButS(block, NUM,0,"Yparts:", 465,46,95,29,&G.scene->r.yparts,1.0, 64.0, 0, 0, "Sets the number of vertical parts to render image in");
+ uiDefButS(block, NUM,0,"Xparts:", 369,46,95,29,&scene->r.xparts,1.0, 512.0, 0, 0, "Sets the number of horizontal parts to render image in (For panorama sets number of camera slices)");
+ uiDefButS(block, NUM,0,"Yparts:", 465,46,95,29,&scene->r.yparts,1.0, 64.0, 0, 0, "Sets the number of vertical parts to render image in");
uiBlockEndAlign(block);
uiBlockBeginAlign(block);
- uiDefButS(block, ROW,800,"Sky", 369,13,35,20,&G.scene->r.alphamode,3.0,0.0, 0, 0, "Fill background with sky");
- uiDefButS(block, ROW,800,"Premul", 405,13,50,20,&G.scene->r.alphamode,3.0,1.0, 0, 0, "Multiply alpha in advance");
- uiDefButS(block, ROW,800,"Key", 456,13,35,20,&G.scene->r.alphamode,3.0,2.0, 0, 0, "Alpha and color values remain unchanged");
+ uiDefButS(block, ROW,800,"Sky", 369,13,35,20,&scene->r.alphamode,3.0,0.0, 0, 0, "Fill background with sky");
+ uiDefButS(block, ROW,800,"Premul", 405,13,50,20,&scene->r.alphamode,3.0,1.0, 0, 0, "Multiply alpha in advance");
+ uiDefButS(block, ROW,800,"Key", 456,13,35,20,&scene->r.alphamode,3.0,2.0, 0, 0, "Alpha and color values remain unchanged");
uiBlockEndAlign(block);
- uiDefButS(block, MENU, 0,"Octree resolution %t|64 %x64|128 %x128|256 %x256|512 %x512", 496,13,64,20,&G.scene->r.ocres,0.0,0.0, 0, 0, "Octree resolution for ray tracing and baking, Use higher values for complex scenes");
+ uiDefButS(block, MENU, 0,"Octree resolution %t|64 %x64|128 %x128|256 %x256|512 %x512", 496,13,64,20,&scene->r.ocres,0.0,0.0, 0, 0, "Octree resolution for ray tracing and baking, Use higher values for complex scenes");
uiBlockBeginAlign(block);
- uiDefButBitI(block, TOG, R_SHADOW, 0,"Shadow", 565,172,52,29, &G.scene->r.mode, 0, 0, 0, 0, "Enable shadow calculation");
- uiDefButBitI(block, TOG, R_SSS, 0,"SSS", 617,172,32,29, &G.scene->r.mode, 0, 0, 0, 0, "Enable subsurface scattering map rendering");
- uiDefButBitI(block, TOG, R_PANORAMA, 0,"Pano", 649,172,38,29, &G.scene->r.mode, 0, 0, 0, 0, "Enable panorama rendering (output width is multiplied by Xparts)");
- uiDefButBitI(block, TOG, R_ENVMAP, 0,"EnvMap", 565,142,52,29, &G.scene->r.mode, 0, 0, 0, 0, "Enable environment map rendering");
- uiDefButBitI(block, TOG, R_RAYTRACE, 0,"Ray",617,142,32,29, &G.scene->r.mode, 0, 0, 0, 0, "Enable ray tracing");
- uiDefButBitI(block, TOG, R_RADIO, 0,"Radio", 649,142,38,29, &G.scene->r.mode, 0, 0, 0, 0, "Enable radiosity rendering");
+ uiDefButBitI(block, TOG, R_SHADOW, 0,"Shadow", 565,172,52,29, &scene->r.mode, 0, 0, 0, 0, "Enable shadow calculation");
+ uiDefButBitI(block, TOG, R_SSS, 0,"SSS", 617,172,32,29, &scene->r.mode, 0, 0, 0, 0, "Enable subsurface scattering map rendering");
+ uiDefButBitI(block, TOG, R_PANORAMA, 0,"Pano", 649,172,38,29, &scene->r.mode, 0, 0, 0, 0, "Enable panorama rendering (output width is multiplied by Xparts)");
+ uiDefButBitI(block, TOG, R_ENVMAP, 0,"EnvMap", 565,142,52,29, &scene->r.mode, 0, 0, 0, 0, "Enable environment map rendering");
+ uiDefButBitI(block, TOG, R_RAYTRACE, 0,"Ray",617,142,32,29, &scene->r.mode, 0, 0, 0, 0, "Enable ray tracing");
+ uiDefButBitI(block, TOG, R_RADIO, 0,"Radio", 649,142,38,29, &scene->r.mode, 0, 0, 0, 0, "Enable radiosity rendering");
uiBlockEndAlign(block);
uiBlockBeginAlign(block);
- uiDefButS(block, ROW,0,"100%", 565,109,122,20,&G.scene->r.size,1.0,100.0, 0, 0, "Set render size to defined size");
- uiDefButS(block, ROW,0,"75%", 565,88,40,20,&G.scene->r.size,1.0,75.0, 0, 0, "Set render size to 3/4 of defined size");
- uiDefButS(block, ROW,0,"50%", 606,88,40,20,&G.scene->r.size,1.0,50.0, 0, 0, "Set render size to 1/2 of defined size");
- uiDefButS(block, ROW,0,"25%", 647,88,40,20,&G.scene->r.size,1.0,25.0, 0, 0, "Set render size to 1/4 of defined size");
+ uiDefButS(block, ROW,0,"100%", 565,109,122,20,&scene->r.size,1.0,100.0, 0, 0, "Set render size to defined size");
+ uiDefButS(block, ROW,0,"75%", 565,88,40,20,&scene->r.size,1.0,75.0, 0, 0, "Set render size to 3/4 of defined size");
+ uiDefButS(block, ROW,0,"50%", 606,88,40,20,&scene->r.size,1.0,50.0, 0, 0, "Set render size to 1/2 of defined size");
+ uiDefButS(block, ROW,0,"25%", 647,88,40,20,&scene->r.size,1.0,25.0, 0, 0, "Set render size to 1/4 of defined size");
uiBlockEndAlign(block);
uiBlockBeginAlign(block);
- uiDefButBitI(block, TOG, R_FIELDS, 0,"Fields", 565,55,60,20,&G.scene->r.mode, 0, 0, 0, 0, "Enables field rendering");
- uiDefButBitI(block, TOG, R_ODDFIELD, 0,"Odd", 627,55,39,20,&G.scene->r.mode, 0, 0, 0, 0, "Enables Odd field first rendering (Default: Even field)");
- uiDefButBitI(block, TOG, R_FIELDSTILL, 0,"X", 668,55,19,20,&G.scene->r.mode, 0, 0, 0, 0, "Disables time difference in field calculations");
+ uiDefButBitI(block, TOG, R_FIELDS, 0,"Fields", 565,55,60,20,&scene->r.mode, 0, 0, 0, 0, "Enables field rendering");
+ uiDefButBitI(block, TOG, R_ODDFIELD, 0,"Odd", 627,55,39,20,&scene->r.mode, 0, 0, 0, 0, "Enables Odd field first rendering (Default: Even field)");
+ uiDefButBitI(block, TOG, R_FIELDSTILL, 0,"X", 668,55,19,20,&scene->r.mode, 0, 0, 0, 0, "Disables time difference in field calculations");
sprintf(str, "Filter%%t|Box %%x%d|Tent %%x%d|Quad %%x%d|Cubic %%x%d|Gauss %%x%d|CatRom %%x%d|Mitch %%x%d", R_FILTER_BOX, R_FILTER_TENT, R_FILTER_QUAD, R_FILTER_CUBIC, R_FILTER_GAUSS, R_FILTER_CATROM, R_FILTER_MITCH);
- uiDefButS(block, MENU, 0,str, 565,34,60,20, &G.scene->r.filtertype, 0, 0, 0, 0, "Set sampling filter for antialiasing");
- uiDefButF(block, NUM,0,"", 627,34,60,20,&G.scene->r.gauss,0.5, 1.5, 10, 2, "Sets the filter size");
+ uiDefButS(block, MENU, 0,str, 565,34,60,20, &scene->r.filtertype, 0, 0, 0, 0, "Set sampling filter for antialiasing");
+ uiDefButF(block, NUM,0,"", 627,34,60,20,&scene->r.gauss,0.5, 1.5, 10, 2, "Sets the filter size");
- uiDefButBitI(block, TOG, R_BORDER, 0, "Border", 565,13,122,20, &G.scene->r.mode, 0, 0, 0, 0, "Render a small cut-out of the image (Shift+B to set in the camera view)");
+ uiDefButBitI(block, TOG, R_BORDER, 0, "Border", 565,13,122,20, &scene->r.mode, 0, 0, 0, 0, "Render a small cut-out of the image (Shift+B to set in the camera view)");
uiBlockEndAlign(block);
uiEndBlock(C, block);
diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c
index 61c53fb58d3..2dd0fec126b 100644
--- a/source/blender/editors/space_node/drawnode.c
+++ b/source/blender/editors/space_node/drawnode.c
@@ -899,8 +899,9 @@ static char *layer_menu(RenderResult *rr)
static void image_layer_cb(bContext *C, void *ima_v, void *iuser_v)
{
+ Scene *scene= CTX_data_scene(C);
- ntreeCompositForceHidden(G.scene->nodetree);
+ ntreeCompositForceHidden(scene->nodetree, scene);
BKE_image_multilayer_index(ima_v, iuser_v);
// allqueue(REDRAWNODE, 0);
}
@@ -1030,7 +1031,7 @@ static void set_render_layers_title(bContext *C, void *node_v, void *unused)
}
else {
str[0]= 0;
- sce= G.scene;
+ sce= CTX_data_scene(C);
}
srl= BLI_findlink(&sce->r.layers, node->custom1);
if(srl==NULL) {
@@ -1071,7 +1072,7 @@ static void node_browse_scene_cb(bContext *C, void *ntree_v, void *node_v)
node->id= NULL;
}
sce= BLI_findlink(&G.main->scene, node->menunr-1);
- if(sce!=G.scene) {
+ if(sce!=CTX_data_scene(C)) {
node->id= &sce->id;
id_us_plus(node->id);
}
@@ -1090,6 +1091,7 @@ static void node_browse_scene_cb(bContext *C, void *ntree_v, void *node_v)
static int node_composit_buts_renderlayers(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr)
{
if(block) {
+ Scene *scene= NULL; // XXX CTX_data_scene(C) can't work here. node->id has to be set default (ton)
uiBut *bt;
char *strp;
@@ -1104,7 +1106,7 @@ static int node_composit_buts_renderlayers(uiBlock *block, bNodeTree *ntree, bNo
if(strp) MEM_freeN(strp);
/* browse button layer */
- strp= scene_layer_menu(node->id?(Scene *)node->id:G.scene);
+ strp= scene_layer_menu(node->id?(Scene *)node->id:scene);
if(node->id)
bt= uiDefIconTextButS(block, MENU, B_NODE_EXEC+node->nr, ICON_SCENE_DEHLT, strp,
butr->xmin+20, butr->ymin, (butr->xmax-butr->xmin)-40, 19,
@@ -1958,9 +1960,9 @@ static void node_scale_cb(bContext *C, void *node_v, void *unused_v)
nsock->ns.vec[0]= 1.0;
else {
if(nsock->next==NULL)
- nsock->ns.vec[0]= (float)G.scene->r.ysch;
+ nsock->ns.vec[0]= (float)CTX_data_scene(C)->r.ysch;
else
- nsock->ns.vec[0]= (float)G.scene->r.xsch;
+ nsock->ns.vec[0]= (float)CTX_data_scene(C)->r.xsch;
}
}
}
diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c
index 7ed00c722d9..fc12e14efe4 100644
--- a/source/blender/editors/space_node/node_edit.c
+++ b/source/blender/editors/space_node/node_edit.c
@@ -590,13 +590,13 @@ void snode_set_context(SpaceNode *snode, Scene *scene)
}
else if(snode->treetype==NTREE_COMPOSIT) {
snode->from= NULL;
- snode->id= &G.scene->id;
+ snode->id= &scene->id;
/* bit clumsy but reliable way to see if we draw first time */
if(snode->nodetree==NULL)
- ntreeCompositForceHidden(G.scene->nodetree);
+ ntreeCompositForceHidden(scene->nodetree, scene);
- snode->nodetree= G.scene->nodetree;
+ snode->nodetree= scene->nodetree;
}
else if(snode->treetype==NTREE_TEXTURE) {
if(ob) {
@@ -915,6 +915,7 @@ bNode *next_node(bNodeTree *ntree)
return NULL;
}
+#if 0
/* is rct in visible part of node? */
static bNode *visible_node(SpaceNode *snode, rctf *rct)
{
@@ -926,6 +927,7 @@ static bNode *visible_node(SpaceNode *snode, rctf *rct)
}
return tnode;
}
+#endif
void snode_home(ScrArea *sa, ARegion *ar, SpaceNode* snode)
{
@@ -1813,7 +1815,7 @@ bNode *node_add_node(SpaceNode *snode, int type, float locx, float locy)
id_us_plus(node->id);
if(snode->nodetree->type==NTREE_COMPOSIT)
- ntreeCompositForceHidden(snode->edittree);
+ ntreeCompositForceHidden(snode->edittree, scene); // XXX was G.scene
NodeTagChanged(snode->edittree, node);
}
diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c
index b6c2250f28a..c7f49a31938 100644
--- a/source/blender/editors/space_outliner/outliner.c
+++ b/source/blender/editors/space_outliner/outliner.c
@@ -272,7 +272,7 @@ static void outliner_width(SpaceOops *soops, ListBase *lb, int *w)
{
TreeElement *te= lb->first;
while(te) {
- TreeStoreElem *tselem= TREESTORE(te);
+// TreeStoreElem *tselem= TREESTORE(te);
// XXX fixme... te->xend is not set yet
/*
@@ -908,7 +908,7 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
EditBone *ebone;
TreeElement *ten;
- for (ebone = G.edbo.first; ebone; ebone=ebone->next, a++) {
+ for (ebone = arm->edbo->first; ebone; ebone=ebone->next, a++) {
ten= outliner_add_element(soops, &te->subtree, id, te, TSE_EBONE, a);
ten->directdata= ebone;
ten->name= ebone->name;
@@ -3900,7 +3900,7 @@ static void restrictbutton_modifier_cb(bContext *C, void *poin, void *poin2)
Object *ob = (Object *)poin2;
DAG_object_flush_update(scene, ob, OB_RECALC_DATA);
- object_handle_update(ob);
+ object_handle_update(scene, ob);
allqueue(REDRAWOOPS, 0);
allqueue(REDRAWVIEW3D, 0);
diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c
index b1b1f504920..0931b6f04ff 100644
--- a/source/blender/editors/space_view3d/drawarmature.c
+++ b/source/blender/editors/space_view3d/drawarmature.c
@@ -1872,7 +1872,7 @@ static void draw_ebones(View3D *v3d, Object *ob, int dt)
if (v3d->zbuf) glDisable(GL_DEPTH_TEST);
- for (eBone=G.edbo.first, index=0; eBone; eBone=eBone->next, index++) {
+ for (eBone=arm->edbo->first, index=0; eBone; eBone=eBone->next, index++) {
if (eBone->layer & arm->layer) {
if ((eBone->flag & (BONE_HIDDEN_A|BONE_NO_DEFORM))==0) {
if (eBone->flag & (BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL))
@@ -1889,7 +1889,7 @@ static void draw_ebones(View3D *v3d, Object *ob, int dt)
/* if solid we draw it first */
if ((dt > OB_WIRE) && (arm->drawtype!=ARM_LINE)) {
index= 0;
- for (eBone=G.edbo.first, index=0; eBone; eBone=eBone->next, index++) {
+ for (eBone=arm->edbo->first, index=0; eBone; eBone=eBone->next, index++) {
if (eBone->layer & arm->layer) {
if ((eBone->flag & BONE_HIDDEN_A)==0) {
glPushMatrix();
@@ -1926,7 +1926,7 @@ static void draw_ebones(View3D *v3d, Object *ob, int dt)
else if (arm->flag & ARM_EDITMODE)
index= 0; /* do selection codes */
- for (eBone=G.edbo.first; eBone; eBone=eBone->next) {
+ for (eBone=arm->edbo->first; eBone; eBone=eBone->next) {
if (eBone->layer & arm->layer) {
if ((eBone->flag & BONE_HIDDEN_A)==0) {
@@ -1983,7 +1983,7 @@ static void draw_ebones(View3D *v3d, Object *ob, int dt)
if (v3d->zbuf) glDisable(GL_DEPTH_TEST);
- for (eBone=G.edbo.first, index=0; eBone; eBone=eBone->next, index++) {
+ for (eBone=arm->edbo->first, index=0; eBone; eBone=eBone->next, index++) {
if(eBone->layer & arm->layer) {
if ((eBone->flag & BONE_HIDDEN_A)==0) {
@@ -2295,8 +2295,8 @@ static void draw_ghost_poses_range(Scene *scene, View3D *v3d, Base *base)
colfac = (end-CFRA)/range;
UI_ThemeColorShadeAlpha(TH_WIRE, 0, -128-(int)(120.0f*sqrt(colfac)));
- do_all_pose_actions(ob);
- where_is_pose(ob);
+ do_all_pose_actions(scene, ob);
+ where_is_pose(scene, ob);
draw_pose_channels(scene, v3d, base, OB_WIRE);
}
glDisable(GL_BLEND);
@@ -2372,8 +2372,8 @@ static void draw_ghost_poses_keys(Scene *scene, View3D *v3d, Base *base)
CFRA= (int)ak->cfra;
- do_all_pose_actions(ob);
- where_is_pose(ob);
+ do_all_pose_actions(scene, ob);
+ where_is_pose(scene, ob);
draw_pose_channels(scene, v3d, base, OB_WIRE);
}
glDisable(GL_BLEND);
@@ -2454,8 +2454,8 @@ static void draw_ghost_poses(Scene *scene, View3D *v3d, Base *base)
else CFRA= (int)floor(actframe+ctime);
if (CFRA!=cfrao) {
- do_all_pose_actions(ob);
- where_is_pose(ob);
+ do_all_pose_actions(scene, ob);
+ where_is_pose(scene, ob);
draw_pose_channels(scene, v3d, base, OB_WIRE);
}
}
@@ -2470,8 +2470,8 @@ static void draw_ghost_poses(Scene *scene, View3D *v3d, Base *base)
else CFRA= (int)floor(actframe-ctime);
if (CFRA != cfrao) {
- do_all_pose_actions(ob);
- where_is_pose(ob);
+ do_all_pose_actions(scene, ob);
+ where_is_pose(scene, ob);
draw_pose_channels(scene, v3d, base, OB_WIRE);
}
}
diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c
index ad62329f8fc..1fa7a4d96e1 100644
--- a/source/blender/editors/space_view3d/drawmesh.c
+++ b/source/blender/editors/space_view3d/drawmesh.c
@@ -477,7 +477,7 @@ void draw_mesh_text(Scene *scene, Object *ob, int glsl)
if(FACESEL_PAINT_TEST)
return;
- ddm = mesh_get_derived_deform(ob, CD_MASK_BAREMESH);
+ ddm = mesh_get_derived_deform(scene, ob, CD_MASK_BAREMESH);
for(a=0, mf=mface; a<totface; a++, tface++, mf++) {
int mode= tface->mode;
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index 963eaf15c48..a58100e2b00 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -120,7 +120,7 @@ extern ListBase editNurb;
/* editmball.c */
extern ListBase editelems;
-static void draw_bounding_volume(Object *ob);
+static void draw_bounding_volume(Scene *scene, Object *ob);
static void drawcube_size(float size);
static void drawcircle_size(float size);
@@ -1123,7 +1123,7 @@ static void drawlattice__point(Lattice *lt, DispList *dl, int u, int v, int w, i
}
/* lattice color is hardcoded, now also shows weightgroup values in edit mode */
-static void drawlattice(View3D *v3d, Object *ob)
+static void drawlattice(Scene *scene, View3D *v3d, Object *ob)
{
Lattice *lt= ob->data;
DispList *dl;
@@ -1132,7 +1132,7 @@ static void drawlattice(View3D *v3d, Object *ob)
/* now we default make displist, this will modifiers work for non animated case */
if(ob->disp.first==NULL)
- lattice_calc_modifiers(ob);
+ lattice_calc_modifiers(scene, ob);
dl= find_displist(&ob->disp, DL_VERTS);
if(lt->editlatt) {
@@ -1207,7 +1207,7 @@ static void mesh_foreachScreenVert__mapFunc(void *userData, int index, float *co
void mesh_foreachScreenVert(ViewContext *vc, void (*func)(void *userData, EditVert *eve, int x, int y, int index), void *userData, int clipVerts)
{
struct { void (*func)(void *userData, EditVert *eve, int x, int y, int index); void *userData; ViewContext vc; int clipVerts; float pmat[4][4], vmat[4][4]; } data;
- DerivedMesh *dm = editmesh_get_derived_cage(vc->obedit, vc->em, CD_MASK_BAREMESH);
+ DerivedMesh *dm = editmesh_get_derived_cage(vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
data.vc= *vc;
data.func = func;
@@ -1251,7 +1251,7 @@ static void mesh_foreachScreenEdge__mapFunc(void *userData, int index, float *v0
void mesh_foreachScreenEdge(ViewContext *vc, void (*func)(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index), void *userData, int clipVerts)
{
struct { void (*func)(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index); void *userData; ViewContext vc; int clipVerts; float pmat[4][4], vmat[4][4]; } data;
- DerivedMesh *dm = editmesh_get_derived_cage(vc->obedit, vc->em, CD_MASK_BAREMESH);
+ DerivedMesh *dm = editmesh_get_derived_cage(vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
data.vc= *vc;
data.func = func;
@@ -1283,7 +1283,7 @@ static void mesh_foreachScreenFace__mapFunc(void *userData, int index, float *ce
void mesh_foreachScreenFace(ViewContext *vc, void (*func)(void *userData, EditFace *efa, int x, int y, int index), void *userData)
{
struct { void (*func)(void *userData, EditFace *efa, int x, int y, int index); void *userData; ViewContext vc; float pmat[4][4], vmat[4][4]; } data;
- DerivedMesh *dm = editmesh_get_derived_cage(vc->obedit, vc->em, CD_MASK_BAREMESH);
+ DerivedMesh *dm = editmesh_get_derived_cage(vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
data.vc= *vc;
data.func = func;
@@ -2151,7 +2151,7 @@ static void draw_mesh_fancy(Scene *scene, View3D *v3d, Base *base, int dt, int f
int draw_wire = 0;
int totvert, totedge, totface;
DispList *dl;
- DerivedMesh *dm= mesh_get_derived_final(ob, get_viewedit_datamask());
+ DerivedMesh *dm= mesh_get_derived_final(scene, ob, get_viewedit_datamask());
if(!dm)
return;
@@ -2172,7 +2172,7 @@ static void draw_mesh_fancy(Scene *scene, View3D *v3d, Base *base, int dt, int f
if (ob==OBACT && FACESEL_PAINT_TEST) draw_wire = 0;
if(dt==OB_BOUNDBOX) {
- draw_bounding_volume(ob);
+ draw_bounding_volume(scene, ob);
}
else if(hasHaloMat || (totface==0 && totedge==0)) {
glPointSize(1.5);
@@ -2276,9 +2276,9 @@ static void draw_mesh_fancy(Scene *scene, View3D *v3d, Base *base, int dt, int f
/* release and reload derivedmesh because it might be freed in
shadeDispList due to a different datamask */
dm->release(dm);
- shadeDispList(base);
+ shadeDispList(scene, base);
dl = find_displist(&ob->disp, DL_VERTCOL);
- dm= mesh_get_derived_final(ob, get_viewedit_datamask());
+ dm= mesh_get_derived_final(scene, ob, get_viewedit_datamask());
}
if ((v3d->flag&V3D_SELECT_OUTLINE) && (base->flag&SELECT) && !draw_wire) {
@@ -2370,7 +2370,7 @@ static int draw_mesh_object(Scene *scene, View3D *v3d, Base *base, int dt, int f
if (obedit!=ob)
finalDM = cageDM = editmesh_get_derived_base(ob, em);
else
- cageDM = editmesh_get_derived_cage_and_final(ob, em, &finalDM,
+ cageDM = editmesh_get_derived_cage_and_final(scene, ob, em, &finalDM,
get_viewedit_datamask());
if(dt>OB_WIRE) {
@@ -2714,7 +2714,7 @@ static int drawDispList(Scene *scene, View3D *v3d, Base *base, int dt)
drawDispListsolid(lb, ob, 1);
}
else if(dt == OB_SHADED) {
- if(ob->disp.first==0) shadeDispList(base);
+ if(ob->disp.first==0) shadeDispList(scene, base);
drawDispListshaded(lb, ob);
}
else {
@@ -2752,7 +2752,7 @@ static int drawDispList(Scene *scene, View3D *v3d, Base *base, int dt)
drawDispListsolid(lb, ob, 1);
}
else if(dt==OB_SHADED) {
- if(ob->disp.first==NULL) shadeDispList(base);
+ if(ob->disp.first==NULL) shadeDispList(scene, base);
drawDispListshaded(lb, ob);
}
else {
@@ -2770,7 +2770,7 @@ static int drawDispList(Scene *scene, View3D *v3d, Base *base, int dt)
if( is_basis_mball(ob)) {
lb= &ob->disp;
- if(lb->first==NULL) makeDispListMBall(ob);
+ if(lb->first==NULL) makeDispListMBall(scene, ob);
if(lb->first==NULL) return 1;
if(solid) {
@@ -2781,7 +2781,7 @@ static int drawDispList(Scene *scene, View3D *v3d, Base *base, int dt)
}
else if(dt == OB_SHADED) {
dl= lb->first;
- if(dl && dl->col1==0) shadeDispList(base);
+ if(dl && dl->col1==0) shadeDispList(scene, base);
drawDispListshaded(lb, ob);
}
else {
@@ -2824,7 +2824,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, Base *base, Part
Object *bb_ob=0;
float vel[3], vec[3], vec2[3], imat[4][4], onevec[3]={0.0f,0.0f,0.0f}, bb_center[3];
float timestep, pixsize=1.0, pa_size, pa_time, r_tilt;
- float cfra=bsystem_time(ob,(float)CFRA,0.0);
+ float cfra= bsystem_time(scene, ob,(float)CFRA,0.0);
float *vdata=0, *vedata=0, *cdata=0, *ndata=0, *vd=0, *ved=0, *cd=0, *nd=0, xvec[3], yvec[3], zvec[3];
float ma_r=0.0f, ma_g=0.0f, ma_b=0.0f;
int a, k, k_max=0, totpart, totpoint=0, draw_as, path_nbr=0;
@@ -2846,7 +2846,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, Base *base, Part
if(pars==0) return;
// XXX what logic is this?
- if(!scene->obedit && psys_in_edit_mode(psys)
+ if(!scene->obedit && psys_in_edit_mode(scene, psys)
&& psys->flag & PSYS_HAIR_DONE && part->draw_as==PART_DRAW_PATH)
return;
@@ -2913,7 +2913,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, Base *base, Part
draw_as=part->draw_as;
if(part->flag&PART_GLOB_TIME)
- cfra=bsystem_time(0,(float)CFRA,0.0);
+ cfra=bsystem_time(scene, 0, (float)CFRA, 0.0f);
if(psys->pathcache){
path_possible=1;
@@ -3027,7 +3027,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, Base *base, Part
cd=cdata;
nd=ndata;
- psys->lattice=psys_get_lattice(ob,psys);
+ psys->lattice= psys_get_lattice(scene, ob, psys);
}
if(draw_as){
@@ -3113,7 +3113,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, Base *base, Part
for(k=0; k<=path_nbr; k++){
if(draw_keys){
state.time=(float)k/(float)path_nbr;
- psys_get_particle_on_path(ob,psys,a,&state,1);
+ psys_get_particle_on_path(scene, ob, psys, a, &state,1);
}
else if(path_nbr){
if(k<=k_max){
@@ -3126,7 +3126,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, Base *base, Part
}
else{
state.time=cfra;
- if(psys_get_particle_state(ob,psys,a,&state,0)==0){
+ if(psys_get_particle_state(scene, ob, psys, a, &state,0)==0){
next_pa=1;
break;
}
@@ -3504,14 +3504,14 @@ static void draw_particle_edit(Scene *scene, View3D *v3d, Object *ob, ParticleSy
/* create path and child path cache if it doesn't exist already */
if(psys->pathcache==0){
// XXX PE_hide_keys_time(psys,CFRA);
- psys_cache_paths(ob,psys,CFRA,0);
+ psys_cache_paths(scene, ob, psys, CFRA,0);
}
if(psys->pathcache==0)
return;
if(pset->flag & PE_SHOW_CHILD && psys->part->draw_as == PART_DRAW_PATH) {
if(psys->childcache==0)
- psys_cache_child_paths(ob, psys, CFRA, 0);
+ psys_cache_child_paths(scene, ob, psys, CFRA, 0);
}
else if(!(pset->flag & PE_SHOW_CHILD) && psys->childcache)
free_child_path_cache(psys);
@@ -4484,7 +4484,7 @@ static void draw_bb_quadric(BoundBox *bb, short type)
gluDeleteQuadric(qobj);
}
-static void draw_bounding_volume(Object *ob)
+static void draw_bounding_volume(Scene *scene, Object *ob)
{
BoundBox *bb=0;
@@ -4497,7 +4497,7 @@ static void draw_bounding_volume(Object *ob)
else if(ob->type==OB_MBALL) {
bb= ob->bb;
if(bb==0) {
- makeDispListMBall(ob);
+ makeDispListMBall(scene, ob);
bb= ob->bb;
}
}
@@ -4761,7 +4761,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
base->flag= 0;
- where_is_object_time(ob, (scene->r.cfra));
+ where_is_object_time(scene, ob, (scene->r.cfra));
draw_object(scene, ar, v3d, base, 0);
}
ce= ce->next;
@@ -4775,7 +4775,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
base->flag= SELECT;
- where_is_object_time(ob, (scene->r.cfra));
+ where_is_object_time(scene, ob, (scene->r.cfra));
draw_object(scene, ar, v3d, base, 0);
}
ce= ce->next;
@@ -4791,7 +4791,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
(scene->r.cfra)= cfraont;
memcpy(&ob->loc, temp, 7*3*sizeof(float));
- where_is_object(ob);
+ where_is_object(scene, ob);
v3d->drawtype= drawtype;
BLI_freelistN(&elems);
@@ -4802,7 +4802,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
}
/* patch? children objects with a timeoffs change the parents. How to solve! */
- /* if( ((int)ob->ctime) != F_(scene->r.cfra)) where_is_object(ob); */
+ /* if( ((int)ob->ctime) != F_(scene->r.cfra)) where_is_object(scene, ob); */
wmMultMatrix(ob->obmat);
@@ -4912,7 +4912,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
break;
case OB_FONT:
cu= ob->data;
- if (cu->disp.first==NULL) makeDispListCurveTypes(ob, 0);
+ if (cu->disp.first==NULL) makeDispListCurveTypes(scene, ob, 0);
if(cu->editstr) {
tekentextcurs();
@@ -4996,7 +4996,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
}
}
else if(dt==OB_BOUNDBOX)
- draw_bounding_volume(ob);
+ draw_bounding_volume(scene, ob);
else if(boundbox_clip(v3d, ob->obmat, cu->bb))
empty_object= drawDispList(scene, v3d, base, dt);
@@ -5005,13 +5005,13 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
case OB_SURF:
cu= ob->data;
/* still needed for curves hidden in other layers. depgraph doesnt handle that yet */
- if (cu->disp.first==NULL) makeDispListCurveTypes(ob, 0);
+ if (cu->disp.first==NULL) makeDispListCurveTypes(scene, ob, 0);
if(cu->editnurb) {
drawnurb(scene, v3d, base, cu->editnurb->first, dt);
}
else if(dt==OB_BOUNDBOX)
- draw_bounding_volume(ob);
+ draw_bounding_volume(scene, ob);
else if(boundbox_clip(v3d, ob->obmat, cu->bb)) {
empty_object= drawDispList(scene, v3d, base, dt);
@@ -5026,7 +5026,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
if(mb->editelems)
drawmball(scene, v3d, base, dt);
else if(dt==OB_BOUNDBOX)
- draw_bounding_volume(ob);
+ draw_bounding_volume(scene, ob);
else
empty_object= drawmball(scene, v3d, base, dt);
break;
@@ -5042,7 +5042,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
drawcamera(scene, v3d, ob, flag);
break;
case OB_LATTICE:
- drawlattice(v3d, ob);
+ drawlattice(scene, v3d, ob);
break;
case OB_ARMATURE:
if(dt>OB_WIRE) GPU_enable_material(0, NULL); // we use default material
@@ -5069,7 +5069,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
if(G.f & G_PARTICLEEDIT && ob==OBACT) {
psys= NULL; // XXX PE_get_current(ob);
- if(psys && !scene->obedit && psys_in_edit_mode(psys))
+ if(psys && !scene->obedit && psys_in_edit_mode(scene, psys))
draw_particle_edit(scene, v3d, ob, psys, dt);
}
glDepthMask(GL_TRUE);
@@ -5094,7 +5094,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
if(dtx & OB_AXIS) {
drawaxes(1.0f, flag, OB_ARROWS);
}
- if(dtx & OB_BOUNDBOX) draw_bounding_volume(ob);
+ if(dtx & OB_BOUNDBOX) draw_bounding_volume(scene, ob);
if(dtx & OB_TEXSPACE) drawtexspace(ob);
if(dtx & OB_DRAWNAME) {
/* patch for several 3d cards (IBM mostly) that crash on glSelect with text drawing */
@@ -5188,7 +5188,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
make_axis_color(col, col2, 'z');
glColor3ubv((GLubyte *)col2);
- cob= constraints_make_evalob(ob, NULL, CONSTRAINT_OBTYPE_OBJECT);
+ cob= constraints_make_evalob(scene, ob, NULL, CONSTRAINT_OBTYPE_OBJECT);
for (curcon = list->first; curcon; curcon=curcon->next) {
bConstraintTypeInfo *cti= constraint_get_typeinfo(curcon);
@@ -5201,7 +5201,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
for (ct= targets.first; ct; ct= ct->next) {
/* calculate target's matrix */
if (cti->get_target_matrix)
- cti->get_target_matrix(curcon, cob, ct, bsystem_time(ob, (float)(scene->r.cfra), give_timeoffset(ob)));
+ cti->get_target_matrix(curcon, cob, ct, bsystem_time(scene, ob, (float)(scene->r.cfra), give_timeoffset(ob)));
else
Mat4One(ct->matrix);
@@ -5361,9 +5361,9 @@ static int bbs_mesh_solid__setDrawOpts(void *userData, int index, int *drawSmoot
}
/* TODO remove this - since face select mode now only works with painting */
-static void bbs_mesh_solid(Object *ob)
+static void bbs_mesh_solid(Scene *scene, Object *ob)
{
- DerivedMesh *dm = mesh_get_derived_final(ob, get_viewedit_datamask());
+ DerivedMesh *dm = mesh_get_derived_final(scene, ob, get_viewedit_datamask());
Mesh *me = (Mesh*)ob->data;
glColor3ub(0, 0, 0);
@@ -5386,7 +5386,7 @@ void draw_object_backbufsel(Scene *scene, View3D *v3d, Object *ob)
Mesh *me= ob->data;
EditMesh *em= me->edit_mesh;
if(em) {
- DerivedMesh *dm = editmesh_get_derived_cage(ob, em, CD_MASK_BAREMESH);
+ DerivedMesh *dm = editmesh_get_derived_cage(scene, ob, em, CD_MASK_BAREMESH);
EM_init_index_arrays(em, 1, 1, 1);
@@ -5408,7 +5408,7 @@ void draw_object_backbufsel(Scene *scene, View3D *v3d, Object *ob)
EM_free_index_arrays();
}
- else bbs_mesh_solid(ob);
+ else bbs_mesh_solid(scene, ob);
}
break;
case OB_CURVE:
@@ -5433,7 +5433,7 @@ static void draw_object_mesh_instance(Scene *scene, View3D *v3d, Object *ob, int
if(me->edit_mesh)
edm= editmesh_get_derived_base(ob, me->edit_mesh);
else
- dm = mesh_get_derived_final(ob, CD_MASK_BAREMESH);
+ dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH);
if(dt<=OB_WIRE) {
if(dm)
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 90840533d55..655bd164758 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -797,7 +797,7 @@ static void draw_selected_name(Scene *scene, Object *ob, View3D *v3d)
}
/* colour depends on whether there is a keyframe */
- if (id_frame_has_keyframe((ID *)ob, frame_to_float(CFRA), v3d->keyflags))
+ if (id_frame_has_keyframe((ID *)ob, frame_to_float(scene, CFRA), v3d->keyflags))
UI_ThemeColor(TH_VERTEX_SELECT);
else
UI_ThemeColor(TH_TEXT_HI);
@@ -1099,7 +1099,7 @@ void backdrawview3d(Scene *scene, ARegion *ar, View3D *v3d)
G.f |= G_BACKBUFSEL;
- base= (G.scene->basact);
+ base= (scene->basact);
if(base && (base->lay & v3d->lay)) {
draw_object_backbufsel(scene, v3d, base->object);
}
@@ -1629,7 +1629,7 @@ void draw_depth(Scene *scene, ARegion *ar, View3D *v3d, int (* func)(void *))
v3d->flag &= ~V3D_SELECT_OUTLINE;
setwinmatrixview3d(v3d, ar->winx, ar->winy, NULL); /* 0= no pick rect */
- setviewmatrixview3d(v3d); /* note: calls where_is_object for camera... */
+ setviewmatrixview3d(scene, v3d); /* note: calls where_is_object for camera... */
Mat4MulMat4(v3d->persmat, v3d->viewmat, v3d->winmat);
Mat4Invert(v3d->persinv, v3d->persmat);
@@ -1805,12 +1805,12 @@ void drawview3dspace(Scene *scene, ARegion *ar, View3D *v3d)
/* sets first, we allow per definition current scene to have dependencies on sets */
if(scene->set) {
for(SETLOOPER(scene->set, base))
- object_handle_update(base->object); // bke_object.h
+ object_handle_update(scene, base->object); // bke_object.h
}
v3d->lay_used = 0;
for(base= scene->base.first; base; base= base->next) {
- object_handle_update(base->object); // bke_object.h
+ object_handle_update(scene, base->object); // bke_object.h
v3d->lay_used |= base->lay;
}
@@ -1819,7 +1819,7 @@ void drawview3dspace(Scene *scene, ARegion *ar, View3D *v3d)
gpu_update_lamps_shadows(scene, v3d);
setwinmatrixview3d(v3d, ar->winx, ar->winy, NULL); /* 0= no pick rect */
- setviewmatrixview3d(v3d); /* note: calls where_is_object for camera... */
+ setviewmatrixview3d(scene, v3d); /* note: calls where_is_object for camera... */
Mat4MulMat4(v3d->persmat, v3d->viewmat, v3d->winmat);
Mat4Invert(v3d->persinv, v3d->persmat);
@@ -1875,7 +1875,7 @@ void drawview3dspace(Scene *scene, ARegion *ar, View3D *v3d)
if(v3d->persp==2) {
if(scene->world) {
if(scene->world->mode & WO_STARS) {
- RE_make_stars(NULL, star_stuff_init_func, star_stuff_vertex_func,
+ RE_make_stars(NULL, scene, star_stuff_init_func, star_stuff_vertex_func,
star_stuff_term_func);
}
}
diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c
index a5ea2a83b77..c5ca9f86450 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -817,7 +817,7 @@ static int viewcenter_exec(bContext *C, wmOperator *op) /* like a localview with
if(TESTBASE(v3d, base)) {
minmax_object(base->object, min, max);
/* account for duplis */
- minmax_object_duplis(base->object, min, max);
+ minmax_object_duplis(scene, base->object, min, max);
ok= 1;
}
diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c
index 3de551a516a..c2aea73b2f3 100644
--- a/source/blender/editors/space_view3d/view3d_header.c
+++ b/source/blender/editors/space_view3d/view3d_header.c
@@ -224,7 +224,7 @@ void do_layer_buttons(bContext *C, short event)
ED_area_tag_redraw(sa);
if(sa->spacetype==SPACE_OOPS) allqueue(REDRAWVIEW3D, 1); /* 1==also do headwin */
- if(v3d->drawtype == OB_SHADED) reshadeall_displist();
+ if(v3d->drawtype == OB_SHADED) reshadeall_displist(scene);
allqueue(REDRAWNLA, 0);
}
diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h
index 79c99721a2b..06ccbc1406d 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -128,8 +128,6 @@ void view3d_get_object_project_mat(View3D *v3d, struct Object *ob, float pmat[4]
void view3d_project_float(ARegion *ar, float *vec, float *adr, float mat[4][4]);
int get_view3d_viewplane(View3D *v3d, int winxi, int winyi, rctf *viewplane, float *clipsta, float *clipend, float *pixsize);
-void view_settings_from_ob(Object *ob, float *ofs, float *quat, float *dist, float *lens);
-void obmat_to_viewmat(View3D *v3d, Object *ob, short smooth);
short view3d_opengl_select(struct ViewContext *vc, unsigned int *buffer, unsigned int bufsize, rcti *input);
void initlocalview(Scene *scene, ARegion *ar, View3D *v3d);
@@ -141,7 +139,7 @@ void centerview(ARegion *ar, View3D *v3d);
void smooth_view(struct bContext *C, Object *, Object *, float *ofs, float *quat, float *dist, float *lens);
void setwinmatrixview3d(View3D *v3d, int winx, int winy, rctf *rect); /* rect: for picking */
-void setviewmatrixview3d(View3D *v3d);
+void setviewmatrixview3d(Scene *scene, View3D *v3d);
#endif /* ED_VIEW3D_INTERN_H */
diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c
index 8fa54c7c7ad..35b9df6c889 100644
--- a/source/blender/editors/space_view3d/view3d_select.c
+++ b/source/blender/editors/space_view3d/view3d_select.c
@@ -560,13 +560,14 @@ static void do_lasso_select_lattice(ViewContext *vc, short mcords[][2], short mo
static void do_lasso_select_armature(ViewContext *vc, short mcords[][2], short moves, short select)
{
+ bArmature *arm= vc->obedit->data;
EditBone *ebone;
float vec[3];
short sco1[2], sco2[2], didpoint;
/* set editdata in vc */
- for (ebone=G.edbo.first; ebone; ebone=ebone->next) {
+ for (ebone= arm->edbo->first; ebone; ebone=ebone->next) {
VECCOPY(vec, ebone->head);
Mat4MulVecfl(vc->obedit->obmat, vec);
@@ -1352,10 +1353,11 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op)
}
}
else if(obedit->type==OB_ARMATURE) {
+ bArmature *arm= obedit->data;
EditBone *ebone;
/* clear flag we use to detect point was affected */
- for(ebone= G.edbo.first; ebone; ebone= ebone->next)
+ for(ebone= arm->edbo->first; ebone; ebone= ebone->next)
ebone->flag &= ~BONE_DONE;
hits= view3d_opengl_select(&vc, buffer, MAXPICKBUF, &rect);
@@ -1364,7 +1366,7 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op)
for (a=0; a<hits; a++){
index = buffer[(4*a)+3];
if (index!=-1) {
- ebone = BLI_findlink(&G.edbo, index & ~(BONESEL_ANY));
+ ebone = BLI_findlink(arm->edbo, index & ~(BONESEL_ANY));
if (index & BONESEL_TIP) {
ebone->flag |= BONE_DONE;
if (val==LEFTMOUSE) ebone->flag |= BONE_TIPSEL;
@@ -1380,7 +1382,7 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op)
}
/* now we have to flush tag from parents... */
- for(ebone= G.edbo.first; ebone; ebone= ebone->next) {
+ for(ebone= arm->edbo->first; ebone; ebone= ebone->next) {
if(ebone->parent && (ebone->flag & BONE_CONNECTED)) {
if(ebone->parent->flag & BONE_DONE)
ebone->flag |= BONE_DONE;
@@ -1391,7 +1393,7 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op)
for (a=0; a<hits; a++){
index = buffer[(4*a)+3];
if (index!=-1) {
- ebone = BLI_findlink(&G.edbo, index & ~(BONESEL_ANY));
+ ebone = BLI_findlink(arm->edbo, index & ~(BONESEL_ANY));
if (index & BONESEL_BONE) {
if(!(ebone->flag & BONE_DONE)) {
if (val==LEFTMOUSE)
diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c
index 1986203f839..48379e0913a 100644
--- a/source/blender/editors/space_view3d/view3d_view.c
+++ b/source/blender/editors/space_view3d/view3d_view.c
@@ -111,6 +111,82 @@ float *give_cursor(Scene *scene, View3D *v3d)
else return scene->cursor;
}
+
+/* Gets the lens and clipping values from a camera of lamp type object */
+static void object_lens_clip_settings(Object *ob, float *lens, float *clipsta, float *clipend)
+{
+ if (!ob) return;
+
+ if(ob->type==OB_LAMP ) {
+ Lamp *la = ob->data;
+ if (lens) {
+ float x1, fac;
+ fac= cos( M_PI*la->spotsize/360.0);
+ x1= saacos(fac);
+ *lens= 16.0*fac/sin(x1);
+ }
+ if (clipsta) *clipsta= la->clipsta;
+ if (clipend) *clipend= la->clipend;
+ }
+ else if(ob->type==OB_CAMERA) {
+ Camera *cam= ob->data;
+ if (lens) *lens= cam->lens;
+ if (clipsta) *clipsta= cam->clipsta;
+ if (clipend) *clipend= cam->clipend;
+ }
+ else {
+ if (lens) *lens= 35.0f;
+ }
+}
+
+
+/* Gets the view trasnformation from a camera
+* currently dosnt take camzoom into account
+*
+* The dist is not modified for this function, if NULL its assimed zero
+* */
+/* Scene can be NULL */
+static void view_settings_from_ob(Scene *scene, Object *ob, float *ofs, float *quat, float *dist, float *lens)
+{
+ float bmat[4][4];
+ float imat[4][4];
+ float tmat[3][3];
+
+ if (!ob) return;
+
+ /* Offset */
+ if (ofs) {
+ /* this should not be needed, nly for camera to prevent lag */
+ if(scene) where_is_object(scene, ob);
+ VECCOPY(ofs, ob->obmat[3]);
+ VecMulf(ofs, -1.0f); /*flip the vector*/
+ }
+
+ /* Quat */
+ if (quat) {
+ Mat4CpyMat4(bmat, ob->obmat);
+ Mat4Ortho(bmat);
+ Mat4Invert(imat, bmat);
+ Mat3CpyMat4(tmat, imat);
+ Mat3ToQuat(tmat, quat);
+ }
+
+ if (dist) {
+ float vec[3];
+ Mat3CpyMat4(tmat, ob->obmat);
+
+ vec[0]= vec[1] = 0.0;
+ vec[2]= -(*dist);
+ Mat3MulVecfl(tmat, vec);
+ VecSubf(ofs, ofs, vec);
+ }
+
+ /* Lens */
+ if (lens)
+ object_lens_clip_settings(ob, lens, NULL, NULL);
+}
+
+
/* ****************** smooth view operator ****************** */
struct SmoothViewStore {
@@ -128,6 +204,7 @@ struct SmoothViewStore {
/* the arguments are the desired situation */
void smooth_view(bContext *C, Object *oldcamera, Object *camera, float *ofs, float *quat, float *dist, float *lens)
{
+ Scene *scene= CTX_data_scene(C);
View3D *v3d= (View3D *)CTX_wm_space_data(C);
struct SmoothViewStore sms;
@@ -145,7 +222,7 @@ void smooth_view(bContext *C, Object *oldcamera, Object *camera, float *ofs, flo
if(lens) sms.new_lens= *lens;
if (camera) {
- view_settings_from_ob(camera, sms.new_ofs, sms.new_quat, &sms.new_dist, &sms.new_lens);
+ view_settings_from_ob(scene, camera, sms.new_ofs, sms.new_quat, &sms.new_dist, &sms.new_lens);
sms.to_camera= 1; /* restore view3d values in end */
}
@@ -192,7 +269,7 @@ void smooth_view(bContext *C, Object *oldcamera, Object *camera, float *ofs, flo
/* original values */
if (oldcamera) {
sms.orig_dist= v3d->dist; // below function does weird stuff with it...
- view_settings_from_ob(oldcamera, sms.orig_ofs, sms.orig_quat, &sms.orig_dist, &sms.orig_lens);
+ view_settings_from_ob(scene, oldcamera, sms.orig_ofs, sms.orig_quat, &sms.orig_dist, &sms.orig_lens);
}
else {
VECCOPY(sms.orig_ofs, v3d->ofs);
@@ -798,81 +875,7 @@ void setwinmatrixview3d(View3D *v3d, int winx, int winy, rctf *rect) /* rect: f
}
-
-/* Gets the lens and clipping values from a camera of lamp type object */
-static void object_lens_clip_settings(Object *ob, float *lens, float *clipsta, float *clipend)
-{
- if (!ob) return;
-
- if(ob->type==OB_LAMP ) {
- Lamp *la = ob->data;
- if (lens) {
- float x1, fac;
- fac= cos( M_PI*la->spotsize/360.0);
- x1= saacos(fac);
- *lens= 16.0*fac/sin(x1);
- }
- if (clipsta) *clipsta= la->clipsta;
- if (clipend) *clipend= la->clipend;
- }
- else if(ob->type==OB_CAMERA) {
- Camera *cam= ob->data;
- if (lens) *lens= cam->lens;
- if (clipsta) *clipsta= cam->clipsta;
- if (clipend) *clipend= cam->clipend;
- }
- else {
- if (lens) *lens= 35.0f;
- }
-}
-
-
-/* Gets the view trasnformation from a camera
-* currently dosnt take camzoom into account
-*
-* The dist is not modified for this function, if NULL its assimed zero
-* */
-void view_settings_from_ob(Object *ob, float *ofs, float *quat, float *dist, float *lens)
-{
- float bmat[4][4];
- float imat[4][4];
- float tmat[3][3];
-
- if (!ob) return;
-
- /* Offset */
- if (ofs) {
- where_is_object(ob);
- VECCOPY(ofs, ob->obmat[3]);
- VecMulf(ofs, -1.0f); /*flip the vector*/
- }
-
- /* Quat */
- if (quat) {
- Mat4CpyMat4(bmat, ob->obmat);
- Mat4Ortho(bmat);
- Mat4Invert(imat, bmat);
- Mat3CpyMat4(tmat, imat);
- Mat3ToQuat(tmat, quat);
- }
-
- if (dist) {
- float vec[3];
- Mat3CpyMat4(tmat, ob->obmat);
-
- vec[0]= vec[1] = 0.0;
- vec[2]= -(*dist);
- Mat3MulVecfl(tmat, vec);
- VecSubf(ofs, ofs, vec);
- }
-
- /* Lens */
- if (lens)
- object_lens_clip_settings(ob, lens, NULL, NULL);
-}
-
-
-void obmat_to_viewmat(View3D *v3d, Object *ob, short smooth)
+static void obmat_to_viewmat(Scene *scene, View3D *v3d, Object *ob, short smooth)
{
float bmat[4][4];
float tmat[3][3];
@@ -901,7 +904,7 @@ void obmat_to_viewmat(View3D *v3d, Object *ob, short smooth)
v3d->persp=V3D_PERSP;
v3d->dist= 0.0;
- view_settings_from_ob(v3d->camera, v3d->ofs, NULL, NULL, &v3d->lens);
+ view_settings_from_ob(scene, v3d->camera, v3d->ofs, NULL, NULL, &v3d->lens);
smooth_view(NULL, NULL, NULL, orig_ofs, new_quat, &orig_dist, &orig_lens); // XXX
v3d->persp=V3D_CAMOB; /* just to be polite, not needed */
@@ -916,12 +919,12 @@ void obmat_to_viewmat(View3D *v3d, Object *ob, short smooth)
}
/* dont set windows active in in here, is used by renderwin too */
-void setviewmatrixview3d(View3D *v3d)
+void setviewmatrixview3d(Scene *scene, View3D *v3d)
{
if(v3d->persp==V3D_CAMOB) { /* obs/camera */
if(v3d->camera) {
- where_is_object(v3d->camera);
- obmat_to_viewmat(v3d, v3d->camera, 0);
+ where_is_object(scene, v3d->camera);
+ obmat_to_viewmat(scene, v3d, v3d->camera, 0);
}
else {
QuatToMat4(v3d->viewquat, v3d->viewmat);
@@ -1276,7 +1279,7 @@ void endlocalview(Scene *scene, ScrArea *sa)
}
}
-void view3d_align_axis_to_vector(View3D *v3d, int axisidx, float vec[3])
+void view3d_align_axis_to_vector(Scene *scene, View3D *v3d, int axisidx, float vec[3])
{
float alignaxis[3] = {0.0, 0.0, 0.0};
float norm[3], axis[3], angle, new_quat[4];
@@ -1302,7 +1305,7 @@ void view3d_align_axis_to_vector(View3D *v3d, int axisidx, float vec[3])
VECCOPY(orig_ofs, v3d->ofs);
v3d->persp= V3D_PERSP;
v3d->dist= 0.0;
- view_settings_from_ob(v3d->camera, v3d->ofs, NULL, NULL, &v3d->lens);
+ view_settings_from_ob(scene, v3d->camera, v3d->ofs, NULL, NULL, &v3d->lens);
smooth_view(NULL, NULL, NULL, orig_ofs, new_quat, &orig_dist, &orig_lens); // XXX
} else {
if (v3d->persp==V3D_CAMOB) v3d->persp= V3D_PERSP; /* switch out of camera mode */
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 5d10a07231b..6f9b34d610c 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -792,7 +792,7 @@ void transformEvent(TransInfo *t, wmEvent *event)
break;
case OKEY:
if (t->flag & T_PROP_EDIT && event->keymodifier == KM_SHIFT) {
- G.scene->prop_mode = (G.scene->prop_mode+1)%6;
+ t->scene->prop_mode = (t->scene->prop_mode+1)%6;
calculatePropRatio(t);
t->redraw= 1;
}
@@ -2081,7 +2081,7 @@ static void ElementResize(TransInfo *t, TransData *td, float mat[3][3]) {
}
else if (t->flag & T_EDIT) {
- if(t->around==V3D_LOCAL && (G.scene->selectmode & SCE_SELECT_FACE)) {
+ if(t->around==V3D_LOCAL && (t->scene->selectmode & SCE_SELECT_FACE)) {
VECCOPY(center, td->center);
}
else {
@@ -2381,7 +2381,7 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short
}
else {
/* !TODO! Make this if not rely on G */
- if(around==V3D_LOCAL && (G.scene->selectmode & SCE_SELECT_FACE)) {
+ if(around==V3D_LOCAL && (t->scene->selectmode & SCE_SELECT_FACE)) {
center = td->center;
}
}
@@ -2831,7 +2831,7 @@ static void headerTranslation(TransInfo *t, float vec[3], char *str) {
sprintf(distvec, "%.4f", dist);
if(t->flag & T_AUTOIK) {
- short chainlen= G.scene->toolsettings->autoik_chainlen;
+ short chainlen= t->scene->toolsettings->autoik_chainlen;
if(chainlen)
sprintf(autoik, "AutoIK-Len: %d", chainlen);
@@ -3997,7 +3997,7 @@ int Align(TransInfo *t, short mval[2])
VECCOPY(t->center, td->center);
}
else {
- if(G.scene->selectmode & SCE_SELECT_FACE) {
+ if(t->scene->selectmode & SCE_SELECT_FACE) {
VECCOPY(t->center, td->center);
}
}
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index 6b9c635779f..cd06c27e12e 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -73,6 +73,7 @@
#include "BKE_armature.h"
#include "BKE_blender.h"
#include "BKE_cloth.h"
+#include "BKE_context.h"
#include "BKE_curve.h"
#include "BKE_constraint.h"
#include "BKE_depsgraph.h"
@@ -763,7 +764,7 @@ static void pchan_autoik_adjust (bPoseChannel *pchan, short chainlen)
/* change the chain-length of auto-ik */
void transform_autoik_update (TransInfo *t, short mode)
{
- short *chainlen= &G.scene->toolsettings->autoik_chainlen;
+ short *chainlen= &t->scene->toolsettings->autoik_chainlen;
bPoseChannel *pchan;
/* mode determines what change to apply to chainlen */
@@ -1610,7 +1611,7 @@ static void createTransParticleVerts(bContext *C, TransInfo *t)
int count = 0, hasselected = 0;
int propmode = t->flag & T_PROP_EDIT;
- if(psys==NULL || G.scene->selectmode==SCE_SELECT_PATH) return;
+ if(psys==NULL || t->scene->selectmode==SCE_SELECT_PATH) return;
psmd = psys_get_modifier(ob,psys);
@@ -1959,11 +1960,11 @@ static float *get_crazy_mapped_editverts(TransInfo *t)
/* disable subsurf temporal, get mapped cos, and enable it */
if(modifiers_disable_subsurf_temporary(t->obedit)) {
/* need to make new derivemesh */
- makeDerivedMesh(t->obedit, me->edit_mesh, CD_MASK_BAREMESH);
+ makeDerivedMesh(t->scene, t->obedit, me->edit_mesh, CD_MASK_BAREMESH);
}
/* now get the cage */
- dm= editmesh_get_derived_cage(t->obedit, me->edit_mesh, CD_MASK_BAREMESH);
+ dm= editmesh_get_derived_cage(t->scene, t->obedit, me->edit_mesh, CD_MASK_BAREMESH);
vertexcos= MEM_mallocN(3*sizeof(float)*G.totvert, "vertexcos map");
dm->foreachMappedVert(dm, make_vertexcos__mapFunc, vertexcos);
@@ -3265,7 +3266,7 @@ static void ObjectToTransData(bContext *C, TransInfo *t, TransData *td, Object *
ob->constraints.first = ob->constraints.last = NULL;
}
- where_is_object(ob);
+ where_is_object(t->scene, ob);
if (constinv == 0) {
ob->constraints.first = fakecons.first;
@@ -3275,7 +3276,7 @@ static void ObjectToTransData(bContext *C, TransInfo *t, TransData *td, Object *
ob->track= track;
}
else
- where_is_object(ob);
+ where_is_object(t->scene, ob);
td->ob = ob;
@@ -3349,12 +3350,12 @@ static void set_trans_object_base_flags(bContext *C, TransInfo *t)
return;
/* makes sure base flags and object flags are identical */
- copy_baseflags();
+ copy_baseflags(t->scene);
/* handle pending update events, otherwise they got copied below */
for (base= sce->base.first; base; base= base->next) {
if(base->object->recalc)
- object_handle_update(base->object);
+ object_handle_update(t->scene, base->object);
}
for (base= sce->base.first; base; base= base->next) {
@@ -3388,7 +3389,7 @@ static void set_trans_object_base_flags(bContext *C, TransInfo *t)
}
/* all recalc flags get flushed to all layers, so a layer flip later on works fine */
- DAG_scene_flush_update(G.scene, -1, 0);
+ DAG_scene_flush_update(t->scene, -1, 0);
/* and we store them temporal in base (only used for transform code) */
/* this because after doing updates, the object->recalc is cleared */
@@ -3852,7 +3853,7 @@ void special_aftertrans_update(TransInfo *t)
synchronize_action_strips();
/* cleanup */
- for (base=G.scene->base.first; base; base=base->next)
+ for (base=t->scene->base.first; base; base=base->next)
base->flag &= ~(BA_HAS_RECALC_OB|BA_HAS_RECALC_DATA);
/* after transform, remove duplicate keyframes on a frame that resulted from transform */
@@ -3919,15 +3920,15 @@ void special_aftertrans_update(TransInfo *t)
/* automatic inserting of keys and unkeyed tagging - only if transform wasn't cancelled (or TFM_DUMMY) */
if (!cancelled && (t->mode != TFM_DUMMY)) {
autokeyframe_pose_cb_func(ob, t->mode, targetless_ik);
- DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
+ DAG_object_flush_update(t->scene, ob, OB_RECALC_DATA);
}
else if (arm->flag & ARM_DELAYDEFORM) {
/* old optimize trick... this enforces to bypass the depgraph */
- DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
+ DAG_object_flush_update(t->scene, ob, OB_RECALC_DATA);
ob->recalc= 0; // is set on OK position already by recalcData()
}
else
- DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
+ DAG_object_flush_update(t->scene, ob, OB_RECALC_DATA);
if (t->mode==TFM_BONESIZE || t->mode==TFM_BONE_ENVELOPE)
allqueue(REDRAWBUTSEDIT, 0);
@@ -4075,7 +4076,7 @@ static void createTransObject(bContext *C, TransInfo *t)
for(ik= elems.first; ik; ik= ik->next) {
/* weak... this doesn't correct for floating values, giving small errors */
- CFRA= (int)(ik->val/G.scene->r.framelen);
+ CFRA= (int)(ik->val/t->scene->r.framelen);
do_ob_ipo(ob);
ObjectToTransData(C, t, td, ob); // does where_is_object()
@@ -4098,7 +4099,7 @@ static void createTransObject(bContext *C, TransInfo *t)
CFRA= cfraont;
ob->ipoflag= ipoflag;
- where_is_object(ob); // restore
+ where_is_object(t->scene, ob); // restore
}
else {
ObjectToTransData(C, t, td, ob);
@@ -4305,7 +4306,7 @@ void createTransData(bContext *C, TransInfo *t)
// TRANSFORM_FIX_ME
// /* temporal...? */
-// G.scene->recalc |= SCE_PRV_CHANGED; /* test for 3d preview */
+// t->scene->recalc |= SCE_PRV_CHANGED; /* test for 3d preview */
}
diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c
index d1993a79bf6..ea79a559f44 100644
--- a/source/blender/editors/transform/transform_generics.c
+++ b/source/blender/editors/transform/transform_generics.c
@@ -652,7 +652,7 @@ void recalcData(TransInfo *t)
/* update shaded drawmode while transform */
if(t->spacetype==SPACE_VIEW3D && ((View3D*)t->view)->drawtype == OB_SHADED)
- reshadeall_displist();
+ reshadeall_displist(t->scene);
}
void drawLine(float *center, float *dir, char axis, short options)
@@ -1206,7 +1206,7 @@ void calculatePropRatio(TransInfo *t)
if (dist < 0.0f)
dist = 0.0f;
- switch(G.scene->prop_mode) {
+ switch(t->scene->prop_mode) {
case PROP_SHARP:
td->factor= dist*dist;
break;
@@ -1234,7 +1234,7 @@ void calculatePropRatio(TransInfo *t)
}
}
}
- switch(G.scene->prop_mode) {
+ switch(t->scene->prop_mode) {
case PROP_SHARP:
strcpy(t->proptext, "(Sharp)");
break;
diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c
index 3ce3b1a8127..0a839649882 100644
--- a/source/blender/editors/transform/transform_orientations.c
+++ b/source/blender/editors/transform/transform_orientations.c
@@ -687,7 +687,7 @@ int getTransformOrientation(bContext *C, float normal[3], float plane[3], int ac
bArmature *arm = obedit->data;
EditBone *ebone;
- for (ebone = G.edbo.first; ebone; ebone=ebone->next) {
+ for (ebone = arm->edbo->first; ebone; ebone=ebone->next) {
if (arm->layer & ebone->layer)
{
if (ebone->flag & BONE_SELECTED)
@@ -767,7 +767,7 @@ int getTransformOrientation(bContext *C, float normal[3], float plane[3], int ac
ob = OBACT;
if(ob && !(ob->flag & SELECT)) ob = NULL;
- for(base= G.scene->base.first; base; base= base->next) {
+ for(base= scene->base.first; base; base= base->next) {
if TESTBASELIB(v3d, base) {
if(ob == NULL) {
ob= base->object;
diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c
index 875b45297bf..d1f641e874b 100644
--- a/source/blender/editors/transform/transform_snap.c
+++ b/source/blender/editors/transform/transform_snap.c
@@ -212,7 +212,7 @@ int handleSnapping(TransInfo *t, wmEvent *event)
if (BIF_snappingSupported(t->obedit) && event->type == TABKEY && event->shift)
{
/* toggle snap and reinit */
- G.scene->snap_flag ^= SCE_SNAP;
+ t->scene->snap_flag ^= SCE_SNAP;
initSnapping(t);
status = 1;
}
@@ -258,7 +258,7 @@ void resetSnapping(TransInfo *t)
int usingSnappingNormal(TransInfo *t)
{
- if (G.scene->snap_flag & SCE_SNAP_ROTATE)
+ if (t->scene->snap_flag & SCE_SNAP_ROTATE)
{
return 1;
}
@@ -800,7 +800,7 @@ int snapDerivedMesh(TransInfo *t, Object *ob, DerivedMesh *dm, float obmat[][4],
if (test == 1) {
- switch (G.scene->snap_mode)
+ switch (t->scene->snap_mode)
{
case SCE_SNAP_MODE_FACE:
{
@@ -1194,7 +1194,7 @@ int snapObjects(TransInfo *t, int *dist, float *loc, float *no, int mode) {
Object *ob = t->obedit;
EditMesh *em = ((Mesh *)t->obedit->data)->edit_mesh;
- dm = editmesh_get_derived_cage(t->obedit, em, CD_MASK_BAREMESH);
+ dm = editmesh_get_derived_cage(t->scene, t->obedit, em, CD_MASK_BAREMESH);
retval = snapDerivedMesh(t, ob, dm, ob->obmat, ray_start, ray_normal, t->mval, loc, no, dist, &depth, 1);
@@ -1212,14 +1212,14 @@ int snapObjects(TransInfo *t, int *dist, float *loc, float *no, int mode) {
if (ob->transflag & OB_DUPLI)
{
DupliObject *dupli_ob;
- ListBase *lb = object_duplilist(G.scene, ob);
+ ListBase *lb = object_duplilist(t->scene, ob);
for(dupli_ob = lb->first; dupli_ob; dupli_ob = dupli_ob->next)
{
Object *ob = dupli_ob->ob;
if (ob->type == OB_MESH) {
- DerivedMesh *dm = mesh_get_derived_final(ob, CD_MASK_BAREMESH);
+ DerivedMesh *dm = mesh_get_derived_final(t->scene, ob, CD_MASK_BAREMESH);
int val;
val = snapDerivedMesh(t, ob, dm, dupli_ob->mat, ray_start, ray_normal, t->mval, loc, no, dist, &depth, 0);
@@ -1234,7 +1234,7 @@ int snapObjects(TransInfo *t, int *dist, float *loc, float *no, int mode) {
}
if (ob->type == OB_MESH) {
- DerivedMesh *dm = mesh_get_derived_final(ob, CD_MASK_BAREMESH);
+ DerivedMesh *dm = mesh_get_derived_final(t->scene, ob, CD_MASK_BAREMESH);
int val;
val = snapDerivedMesh(t, ob, dm, ob->obmat, ray_start, ray_normal, t->mval, loc, no, dist, &depth, 0);
diff --git a/source/blender/gpu/intern/gpu_draw.c b/source/blender/gpu/intern/gpu_draw.c
index 237aa802ed8..393a1349931 100644
--- a/source/blender/gpu/intern/gpu_draw.c
+++ b/source/blender/gpu/intern/gpu_draw.c
@@ -1062,7 +1062,7 @@ int GPU_scene_object_lights(Scene *scene, Object *ob, int lay, float viewmat[][4
glPushMatrix();
glLoadMatrixf((float *)viewmat);
- where_is_object_simul(base->object);
+ where_is_object_simul(scene, base->object);
if(la->type==LA_SUN) {
/* sun lamp */
diff --git a/source/blender/imbuf/intern/cineon/cineon_dpx.c b/source/blender/imbuf/intern/cineon/cineon_dpx.c
index 514d6b5522b..8b7ef8c8101 100644
--- a/source/blender/imbuf/intern/cineon/cineon_dpx.c
+++ b/source/blender/imbuf/intern/cineon/cineon_dpx.c
@@ -42,16 +42,18 @@
#include "MEM_guardedalloc.h"
-/* ugly bad level, should be fixed */
-#include "DNA_scene_types.h"
-#include "BKE_global.h"
-
static void cineon_conversion_parameters(LogImageByteConversionParameters *params)
{
- params->blackPoint = G.scene?G.scene->r.cineonblack:95;
- params->whitePoint = G.scene?G.scene->r.cineonwhite:685;
- params->gamma = G.scene?G.scene->r.cineongamma:1.7f;
- params->doLogarithm = G.scene?G.scene->r.subimtype & R_CINEON_LOG:0;
+// params->blackPoint = scene?scene->r.cineonblack:95;
+// params->whitePoint = scene?scene->r.cineonwhite:685;
+// params->gamma = scene?scene->r.cineongamma:1.7f;
+// params->doLogarithm = scene?scene->r.subimtype & R_CINEON_LOG:0;
+
+ params->blackPoint = 95;
+ params->whitePoint = 685;
+ params->gamma = 1.7f;
+ params->doLogarithm = 0;
+
}
static struct ImBuf *imb_load_dpx_cineon(unsigned char *mem, int use_cineon, int size, int flags)
diff --git a/source/blender/makesdna/DNA_image_types.h b/source/blender/makesdna/DNA_image_types.h
index e1d79f0f875..7a6e1707dad 100644
--- a/source/blender/makesdna/DNA_image_types.h
+++ b/source/blender/makesdna/DNA_image_types.h
@@ -34,6 +34,7 @@
#include "DNA_ID.h"
struct PackedFile;
+struct Scene;
struct anim;
struct ImBuf;
struct RenderResult;
@@ -51,6 +52,8 @@ typedef struct ImageUser {
short multi_index, layer, pass; /* listbase indices, for menu browsing or retrieve buffer */
short menunr; /* localized menu entry, for handling browse event */
+
+ struct Scene *scene; /* to retrieve render result */
} ImageUser;
/* iuser->flag */
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index ae07434a37f..88c75f1bccd 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -57,7 +57,10 @@ typedef struct ModifierData {
int type, mode;
char name[32];
-
+
+ /* XXX for timing info set by caller... solve later? (ton) */
+ struct Scene *scene;
+
char *error;
} ModifierData;
@@ -390,12 +393,13 @@ typedef struct SoftbodyModifierData {
} SoftbodyModifierData;
typedef struct ClothModifierData {
- ModifierData modifier;
+ ModifierData modifier;
- struct Cloth *clothObject; /* The internal data structure for cloth. */
- struct ClothSimSettings *sim_parms; /* definition is in DNA_cloth_types.h */
- struct ClothCollSettings *coll_parms; /* definition is in DNA_cloth_types.h */
- struct PointCache *point_cache; /* definition is in DNA_object_force.h */
+ struct Scene *scene; /* the context, time etc is here */
+ struct Cloth *clothObject; /* The internal data structure for cloth. */
+ struct ClothSimSettings *sim_parms; /* definition is in DNA_cloth_types.h */
+ struct ClothCollSettings *coll_parms; /* definition is in DNA_cloth_types.h */
+ struct PointCache *point_cache; /* definition is in DNA_object_force.h */
} ClothModifierData;
typedef struct CollisionModifierData {
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index f3ec189a9e7..8d446d265ad 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -166,7 +166,8 @@ typedef struct RenderData {
struct AviCodecData *avicodecdata;
struct QuicktimeCodecData *qtcodecdata;
struct FFMpegCodecData ffcodecdata;
-
+ struct AudioData audio; /* new in 2.5 */
+
int cfra, sfra, efra; /* frames as in 'images' */
int psfra, pefra; /* start+end frames of preview range */
@@ -546,7 +547,7 @@ typedef struct Scene {
/* migrate or replace? depends on some internal things... */
/* no, is on the right place (ton) */
struct RenderData r;
- struct AudioData audio;
+ struct AudioData audio; /* DEPRICATED 2.5 */
ScriptLink scriptlink;
@@ -725,7 +726,7 @@ typedef struct Scene {
/* depricate this! */
#define TESTBASE(v3d, base) ( ((base)->flag & SELECT) && ((base)->lay & v3d->lay) && (((base)->object->restrictflag & OB_RESTRICT_VIEW)==0) )
#define TESTBASELIB(v3d, base) ( ((base)->flag & SELECT) && ((base)->lay & v3d->lay) && ((base)->object->id.lib==0) && (((base)->object->restrictflag & OB_RESTRICT_VIEW)==0))
-#define TESTBASELIB_BGMODE(base) ( ((base)->flag & SELECT) && ((base)->lay & (v3d ? v3d->lay : G.scene->lay)) && ((base)->object->id.lib==0) && (((base)->object->restrictflag & OB_RESTRICT_VIEW)==0))
+#define TESTBASELIB_BGMODE(base) ( ((base)->flag & SELECT) && ((base)->lay & (v3d ? v3d->lay : scene->lay)) && ((base)->object->id.lib==0) && (((base)->object->restrictflag & OB_RESTRICT_VIEW)==0))
#define BASE_SELECTABLE(v3d, base) ((base->lay & v3d->lay) && (base->object->restrictflag & (OB_RESTRICT_SELECT|OB_RESTRICT_VIEW))==0)
#define FIRSTBASE scene->base.first
#define LASTBASE scene->base.last
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_composite.c b/source/blender/nodes/intern/CMP_nodes/CMP_composite.c
index 89bd8e43694..8e47e17d868 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_composite.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_composite.c
@@ -46,9 +46,11 @@ static void node_composit_exec_composite(void *data, bNode *node, bNodeStack **i
/* stack order input sockets: col, alpha, z */
if(node->flag & NODE_DO_OUTPUT) { /* only one works on out */
+ Scene *scene= (Scene *)node->id;
RenderData *rd= data;
- if(rd->scemode & R_DOCOMP) {
- RenderResult *rr= RE_GetResult(RE_GetRender(G.scene->id.name)); /* G.scene is WEAK! */
+
+ if(scene && (rd->scemode & R_DOCOMP)) {
+ RenderResult *rr= RE_GetResult(RE_GetRender(scene->id.name)); /* G.scene is WEAK! */
if(rr) {
CompBuf *outbuf, *zbuf=NULL;
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_curves.c b/source/blender/nodes/intern/CMP_nodes/CMP_curves.c
index 01af0e1db1d..3d536788263 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_curves.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_curves.c
@@ -40,11 +40,12 @@ static bNodeSocketType cmp_node_time_out[]= {
static void node_composit_exec_curves_time(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
{
+ RenderData *rd= data;
/* stack order output: fac */
float fac= 0.0f;
if(node->custom1 < node->custom2)
- fac= (G.scene->r.cfra - node->custom1)/(float)(node->custom2-node->custom1);
+ fac= (rd->cfra - node->custom1)/(float)(node->custom2-node->custom1);
fac= curvemapping_evaluateF(node->storage, 0, fac);
out[0]->vec[0]= CLAMPIS(fac, 0.0f, 1.0f);
@@ -53,8 +54,8 @@ static void node_composit_exec_curves_time(void *data, bNode *node, bNodeStack *
static void node_composit_init_curves_time(bNode* node)
{
- node->custom1= G.scene->r.sfra;
- node->custom2= G.scene->r.efra;
+ node->custom1= 1;
+ node->custom2= 250;
node->storage= curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
}
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_defocus.c b/source/blender/nodes/intern/CMP_nodes/CMP_defocus.c
index 6f175671296..b9a4f4c0cc5 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_defocus.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_defocus.c
@@ -253,7 +253,7 @@ static void defocus_blur(bNode *node, CompBuf *new, CompBuf *img, CompBuf *zbuf,
// get some required params from the current scene camera
// (ton) this is wrong, needs fixed
- Object* camob = G.scene->camera;
+ Object* camob = NULL; // XXX G.scene->camera;
if (camob && camob->type==OB_CAMERA) {
Camera* cam = (Camera*)camob->data;
cam_lens = cam->lens;
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_image.c b/source/blender/nodes/intern/CMP_nodes/CMP_image.c
index be5a1d7241b..396df4ff402 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_image.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_image.c
@@ -330,11 +330,12 @@ void node_composit_rlayers_out(RenderData *rd, RenderLayer *rl, bNodeStack **out
static void node_composit_exec_rlayers(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
{
- Scene *sce= node->id?(Scene *)node->id:G.scene; /* G.scene is WEAK! */
+ Scene *sce= (Scene *)node->id;
RenderData *rd= data;
- RenderResult *rr;
+ RenderResult *rr= NULL;
- rr= RE_GetResult(RE_GetRender(sce->id.name));
+ if(sce)
+ rr= RE_GetResult(RE_GetRender(sce->id.name));
if(rr) {
SceneRenderLayer *srl= BLI_findlink(&sce->r.layers, node->custom1);
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_outputFile.c b/source/blender/nodes/intern/CMP_nodes/CMP_outputFile.c
index 722b00d57a9..8c63c348b57 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_outputFile.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_outputFile.c
@@ -62,9 +62,9 @@ static void node_composit_exec_output_file(void *data, bNode *node, bNodeStack *
}
}
- BKE_makepicstring(string, nif->name, rd->cfra, nif->imtype);
+ BKE_makepicstring((Scene *)node->id, string, nif->name, rd->cfra, nif->imtype);
- if(0 == BKE_write_ibuf(ibuf, string, nif->imtype, nif->subimtype, nif->imtype==R_OPENEXR?nif->codec:nif->quality))
+ if(0 == BKE_write_ibuf((Scene *)node->id, ibuf, string, nif->imtype, nif->subimtype, nif->imtype==R_OPENEXR?nif->codec:nif->quality))
printf("Cannot save Node File Output to %s\n", string);
else
printf("Saved: %s\n", string);
@@ -81,15 +81,19 @@ static void node_composit_exec_output_file(void *data, bNode *node, bNodeStack *
static void node_composit_init_output_file(bNode *node)
{
- NodeImageFile *nif= MEM_callocN(sizeof(NodeImageFile), "node image file");
- node->storage= nif;
- BLI_strncpy(nif->name, G.scene->r.pic, sizeof(nif->name));
- nif->imtype= G.scene->r.imtype;
- nif->subimtype= G.scene->r.subimtype;
- nif->quality= G.scene->r.quality;
- nif->sfra= G.scene->r.sfra;
- nif->efra= G.scene->r.efra;
-};
+ Scene *scene= (Scene *)node->id;
+ NodeImageFile *nif= MEM_callocN(sizeof(NodeImageFile), "node image file");
+ node->storage= nif;
+
+ if(scene) {
+ BLI_strncpy(nif->name, scene->r.pic, sizeof(nif->name));
+ nif->imtype= scene->r.imtype;
+ nif->subimtype= scene->r.subimtype;
+ nif->quality= scene->r.quality;
+ nif->sfra= scene->r.sfra;
+ nif->efra= scene->r.efra;
+ }
+}
bNodeType cmp_node_output_file= {
/* *next,*prev */ NULL, NULL,
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_texture.c b/source/blender/nodes/intern/CMP_nodes/CMP_texture.c
index c1f1948dba1..b4d04076032 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_texture.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_texture.c
@@ -91,19 +91,13 @@ static void node_composit_exec_texture(void *data, bNode *node, bNodeStack **in,
if(node->id) {
RenderData *rd= data;
- RenderResult *rr= RE_GetResult(RE_GetRender(G.scene->id.name)); /* G.scene is WEAK! */
short sizex, sizey;
/* first make the preview image */
CompBuf *prevbuf= alloc_compbuf(140, 140, CB_RGBA, 1); /* alloc */
- if (rr) {
- sizex = rr->rectx;
- sizey = rr->recty;
- } else {
- sizex = rd->xsch;
- sizey = rd->ysch;
- }
+ sizex = rd->xsch;
+ sizey = rd->ysch;
prevbuf->rect_procedural= texture_procedural;
prevbuf->node= node;
diff --git a/source/blender/nodes/intern/TEX_nodes/TEX_curves.c b/source/blender/nodes/intern/TEX_nodes/TEX_curves.c
index 8c86656b4f3..7d1366b5b18 100644
--- a/source/blender/nodes/intern/TEX_nodes/TEX_curves.c
+++ b/source/blender/nodes/intern/TEX_nodes/TEX_curves.c
@@ -41,8 +41,9 @@ static void time_colorfn(float *out, float *coord, bNode *node, bNodeStack **in,
/* stack order output: fac */
float fac= 0.0f;
- if(node->custom1 < node->custom2)
- fac = (G.scene->r.cfra - node->custom1)/(float)(node->custom2-node->custom1);
+ // XXX SOLVE! these functions should get the TexCallData pointer
+// if(node->custom1 < node->custom2)
+// fac = (scene->r.cfra - node->custom1)/(float)(node->custom2-node->custom1);
fac = curvemapping_evaluateF(node->storage, 0, fac);
out[0] = CLAMPIS(fac, 0.0f, 1.0f);
@@ -56,8 +57,8 @@ static void time_exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out
static void time_init(bNode* node)
{
- node->custom1= G.scene->r.sfra;
- node->custom2= G.scene->r.efra;
+ node->custom1= 1;
+ node->custom2= 250;
node->storage= curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
}
diff --git a/source/blender/nodes/intern/TEX_util.c b/source/blender/nodes/intern/TEX_util.c
index 562072328a8..2ff9717afa6 100644
--- a/source/blender/nodes/intern/TEX_util.c
+++ b/source/blender/nodes/intern/TEX_util.c
@@ -185,7 +185,7 @@ void ntreeTexCheckCyclics(struct bNodeTree *ntree)
}
}
-void ntreeTexExecTree(bNodeTree *nodes, TexResult *texres, float *coord, char do_preview, short thread, Tex *tex, short which_output)
+void ntreeTexExecTree(bNodeTree *nodes, TexResult *texres, float *coord, char do_preview, short thread, Tex *tex, short which_output, int cfra)
{
TexResult dummy_texres;
TexCallData data;
@@ -196,6 +196,7 @@ void ntreeTexExecTree(bNodeTree *nodes, TexResult *texres, float *coord, char do
data.do_preview = do_preview;
data.thread = thread;
data.which_output = which_output;
+ data.cfra= cfra;
ntreeExecTree(nodes, &data, thread);
}
@@ -213,7 +214,7 @@ void ntreeTexUpdatePreviews(bNodeTree* nodetree)
dummy_texres.nor = 0;
ntreeBeginExecTree(nodetree);
- ntreeTexExecTree(nodetree, &dummy_texres, coord, 1, 0, tex, 0);
+ ntreeTexExecTree(nodetree, &dummy_texres, coord, 1, 0, tex, 0, 0);
ntreeEndExecTree(nodetree);
}
diff --git a/source/blender/nodes/intern/TEX_util.h b/source/blender/nodes/intern/TEX_util.h
index 9203b950364..e560aa57921 100644
--- a/source/blender/nodes/intern/TEX_util.h
+++ b/source/blender/nodes/intern/TEX_util.h
@@ -74,6 +74,7 @@ typedef struct TexCallData {
char do_preview;
short thread;
short which_output;
+ int cfra;
} TexCallData;
typedef void(*TexFn) (float *out, float *coord, bNode *node, bNodeStack **in, short thread);
@@ -95,6 +96,6 @@ void tex_output(bNode *node, bNodeStack **in, bNodeStack *out, TexFn texfn);
void tex_do_preview(bNode *node, bNodeStack *ns, TexCallData *cdata);
void ntreeTexUpdatePreviews( bNodeTree* nodetree );
-void ntreeTexExecTree(bNodeTree *nodes, TexResult *texres, float *coord, char do_preview, short thread, struct Tex *tex, short which_output);
+void ntreeTexExecTree(bNodeTree *nodes, TexResult *texres, float *coord, char do_preview, short thread, struct Tex *tex, short which_output, int cfra);
#endif
diff --git a/source/blender/quicktime/apple/quicktime_export.c b/source/blender/quicktime/apple/quicktime_export.c
index ca025a0b8a3..c863d6be429 100644
--- a/source/blender/quicktime/apple/quicktime_export.c
+++ b/source/blender/quicktime/apple/quicktime_export.c
@@ -76,7 +76,7 @@ static void QT_DoAddVideoSamplesToMedia (int frame, int *pixels, int rectx, int
static void QT_EndAddVideoSamplesToMedia (void);
static void QT_CreateMyVideoTrack (int rectx, int recty);
static void QT_EndCreateMyVideoTrack (void);
-static void check_renderbutton_framerate(void);
+static void check_renderbutton_framerate(struct RenderData *rd);
typedef struct QuicktimeExport {
@@ -120,7 +120,7 @@ static void CheckError(OSErr err, char *msg)
}
-static OSErr QT_SaveCodecSettingsToScene(void)
+static OSErr QT_SaveCodecSettingsToScene(RenderData *rd)
{
QTAtomContainer myContainer = NULL;
ComponentResult myErr = noErr;
@@ -130,13 +130,13 @@ static OSErr QT_SaveCodecSettingsToScene(void)
CodecInfo ci;
char str[255];
- QuicktimeCodecData *qcd = G.scene->r.qtcodecdata;
+ QuicktimeCodecData *qcd = rd->qtcodecdata;
// check if current scene already has qtcodec settings, and clear them
if (qcd) {
free_qtcodecdata(qcd);
} else {
- qcd = G.scene->r.qtcodecdata = MEM_callocN(sizeof(QuicktimeCodecData), "QuicktimeCodecData");
+ qcd = rd->qtcodecdata = MEM_callocN(sizeof(QuicktimeCodecData), "QuicktimeCodecData");
}
// obtain all current codec settings
@@ -181,14 +181,14 @@ bail:
}
-static OSErr QT_GetCodecSettingsFromScene(void)
+static OSErr QT_GetCodecSettingsFromScene(RenderData *rd)
{
Handle myHandle = NULL;
ComponentResult myErr = noErr;
// CodecInfo ci;
// char str[255];
- QuicktimeCodecData *qcd = G.scene->r.qtcodecdata;
+ QuicktimeCodecData *qcd = rd->qtcodecdata;
// if there is codecdata in the blendfile, convert it to a Quicktime handle
if (qcd) {
@@ -421,18 +421,18 @@ static void QT_EndAddVideoSamplesToMedia (void)
}
-void makeqtstring (char *string) {
+void makeqtstring (RenderData *rd, char *string) {
char txt[64];
if (string==0) return;
- strcpy(string, G.scene->r.pic);
+ strcpy(string, rd->pic);
BLI_convertstringcode(string, G.sce);
BLI_make_existing_file(string);
if (BLI_strcasecmp(string + strlen(string) - 4, ".mov")) {
- sprintf(txt, "%04d_%04d.mov", (G.scene->r.sfra) , (G.scene->r.efra) );
+ sprintf(txt, "%04d_%04d.mov", (rd->sfra) , (rd->efra) );
strcat(string, txt);
}
}
@@ -461,18 +461,18 @@ void start_qt(struct RenderData *rd, int rectx, int recty) {
qtdata = MEM_callocN(sizeof(QuicktimeComponentData), "QuicktimeCodecDataExt");
if(rd->qtcodecdata == NULL && rd->qtcodecdata->cdParms == NULL) {
- get_qtcodec_settings();
+ get_qtcodec_settings(rd);
} else {
qtdata->theComponent = OpenDefaultComponent(StandardCompressionType, StandardCompressionSubType);
- QT_GetCodecSettingsFromScene();
- check_renderbutton_framerate();
+ QT_GetCodecSettingsFromScene(rd);
+ check_renderbutton_framerate(rd);
}
if (G.afbreek != 1) {
sframe = (rd->sfra);
- makeqtstring(name);
+ makeqtstring(rd, name);
#ifdef __APPLE__
sprintf(theFullPath, "%s", name);
@@ -563,19 +563,20 @@ void free_qtcomponentdata(void) {
}
-static void check_renderbutton_framerate(void) {
+static void check_renderbutton_framerate(RenderData *rd)
+{
// to keep float framerates consistent between the codec dialog and frs/sec button.
OSErr err;
err = SCGetInfo(qtdata->theComponent, scTemporalSettingsType, &qtdata->gTemporalSettings);
CheckError(err, "SCGetInfo fr error");
- if( (G.scene->r.frs_sec == 24 || G.scene->r.frs_sec == 30 || G.scene->r.frs_sec == 60) &&
+ if( (rd->frs_sec == 24 || rd->frs_sec == 30 || rd->frs_sec == 60) &&
(qtdata->gTemporalSettings.frameRate == 1571553 ||
qtdata->gTemporalSettings.frameRate == 1964113 ||
qtdata->gTemporalSettings.frameRate == 3928227)) {;} else
qtdata->gTemporalSettings.frameRate =
- (G.scene->r.frs_sec << 16) / G.scene->r.frs_sec_base ;
+ (rd->frs_sec << 16) / rd->frs_sec_base ;
err = SCSetInfo(qtdata->theComponent, scTemporalSettingsType, &qtdata->gTemporalSettings);
CheckError( err, "SCSetInfo error" );
@@ -596,7 +597,7 @@ static void check_renderbutton_framerate(void) {
}
-int get_qtcodec_settings(void)
+int get_qtcodec_settings(RenderData *rd)
{
OSErr err = noErr;
@@ -611,9 +612,9 @@ int get_qtcodec_settings(void)
qtdata->theComponent = OpenDefaultComponent(StandardCompressionType, StandardCompressionSubType);
// get previous selected codecsetting, if any
- if(G.scene->r.qtcodecdata && G.scene->r.qtcodecdata->cdParms) {
- QT_GetCodecSettingsFromScene();
- check_renderbutton_framerate();
+ if(rd->qtcodecdata && rd->qtcodecdata->cdParms) {
+ QT_GetCodecSettingsFromScene(rd);
+ check_renderbutton_framerate(rd);
} else {
// configure the standard image compression dialog box
// set some default settings
@@ -631,7 +632,7 @@ int get_qtcodec_settings(void)
CheckError(err, "SCSetInfo3 error");
}
- check_renderbutton_framerate();
+ check_renderbutton_framerate(rd);
// put up the dialog box
err = SCRequestSequenceSettings(qtdata->theComponent);
@@ -646,27 +647,27 @@ int get_qtcodec_settings(void)
SCGetInfo(qtdata->theComponent, scSpatialSettingsType, &qtdata->gSpatialSettings);
SCGetInfo(qtdata->theComponent, scDataRateSettingsType, &qtdata->aDataRateSetting);
- QT_SaveCodecSettingsToScene();
+ QT_SaveCodecSettingsToScene(rd);
// framerate jugglin'
if(qtdata->gTemporalSettings.frameRate == 1571553) { // 23.98 fps
qtdata->kVideoTimeScale = 24000;
qtdata->duration = 1001;
- G.scene->r.frs_sec = 24;
- G.scene->r.frs_sec_base = 1.001;
+ rd->frs_sec = 24;
+ rd->frs_sec_base = 1.001;
} else if (qtdata->gTemporalSettings.frameRate == 1964113) { // 29.97 fps
qtdata->kVideoTimeScale = 30000;
qtdata->duration = 1001;
- G.scene->r.frs_sec = 30;
- G.scene->r.frs_sec_base = 1.001;
+ rd->frs_sec = 30;
+ rd->frs_sec_base = 1.001;
} else if (qtdata->gTemporalSettings.frameRate == 3928227) { // 59.94 fps
qtdata->kVideoTimeScale = 60000;
qtdata->duration = 1001;
- G.scene->r.frs_sec = 60;
- G.scene->r.frs_sec_base = 1.001;
+ rd->frs_sec = 60;
+ rd->frs_sec_base = 1.001;
} else {
double fps = qtdata->gTemporalSettings.frameRate;
@@ -674,12 +675,12 @@ int get_qtcodec_settings(void)
qtdata->duration = qtdata->kVideoTimeScale / (qtdata->gTemporalSettings.frameRate / 65536);
if ((qtdata->gTemporalSettings.frameRate & 0xffff) == 0) {
- G.scene->r.frs_sec = fps / 65536;
- G.scene->r.frs_sec_base = 1;
+ rd->frs_sec = fps / 65536;
+ rd->frs_sec_base = 1;
} else {
/* we do our very best... */
- G.scene->r.frs_sec = (fps * 10000 / 65536);
- G.scene->r.frs_sec_base = 10000;
+ rd->frs_sec = (fps * 10000 / 65536);
+ rd->frs_sec_base = 10000;
}
}
diff --git a/source/blender/quicktime/quicktime_export.h b/source/blender/quicktime/quicktime_export.h
index 8a752f9b251..0f8e2dc7225 100644
--- a/source/blender/quicktime/quicktime_export.h
+++ b/source/blender/quicktime/quicktime_export.h
@@ -40,9 +40,9 @@ void start_qt(struct RenderData *rd, int rectx, int recty); //for movie handle (
void append_qt(int frame, int *pixels, int rectx, int recty);
void end_qt(void);
-int get_qtcodec_settings(void); //for buttons.c
+int get_qtcodec_settings(struct RenderData *rd); //for buttons.c
void free_qtcomponentdata(void);
-void makeqtstring (char *string); //for playanim.c
+void makeqtstring(struct RenderData *rd, char *string); //for playanim.c
#endif //(_WIN32) || (__APPLE__)
diff --git a/source/blender/radiosity/extern/include/radio.h b/source/blender/radiosity/extern/include/radio.h
index 847d2fb1ae9..e7f23302880 100644
--- a/source/blender/radiosity/extern/include/radio.h
+++ b/source/blender/radiosity/extern/include/radio.h
@@ -42,6 +42,7 @@
extern RadGlobal RG;
struct View3D;
+struct Scene;
/* radfactors.c */
extern float calcStokefactor(RPatch *shoot, RPatch *rp, RNode *rn, float *area);
@@ -66,18 +67,18 @@ extern void closehemiwindows(void);
void rad_init_energy(void);
/* radio.c */
-void freeAllRad(void);
+void freeAllRad(struct Scene *scene);
int rad_phase(void);
void rad_status_str(char *str);
void rad_printstatus(void);
-void rad_setlimits(void);
-void set_radglobal(void);
-void add_radio(void);
-void delete_radio(void);
-int rad_go(void);
-void rad_subdivshootpatch(void);
-void rad_subdivshootelem(void);
-void rad_limit_subdivide(void);
+void rad_setlimits(struct Scene *scene);
+void set_radglobal(struct Scene *scene);
+void add_radio(struct Scene *scene);
+void delete_radio(struct Scene *scene);
+int rad_go(struct Scene *scene);
+void rad_subdivshootpatch(struct Scene *scene);
+void rad_subdivshootelem(struct Scene *scene);
+void rad_limit_subdivide(struct Scene *scene);
/* radnode.c */
extern void setnodelimit(float limit);
@@ -112,7 +113,7 @@ extern void splitconnected(void);
extern int vergedge(const void *v1,const void *v2);
extern void addedge(float *v1, float *v2, EdSort *es);
extern void setedgepointers(void);
-extern void rad_collect_meshes(struct View3D *v3d);
+extern void rad_collect_meshes(struct Scene *scene, struct View3D *v3d);
extern void countelem(RNode *rn);
extern void countglobaldata(void);
extern void addelem(RNode ***el, RNode *rn, RPatch *rp);
@@ -141,8 +142,8 @@ void filterFaces(void);
void calcfiltrad(RNode *rn, float *cd);
void filterNodes(void);
void removeEqualNodes(short limit);
-void rad_addmesh(void);
-void rad_replacemesh(void);
+void rad_addmesh(struct Scene *scene);
+void rad_replacemesh(struct Scene *scene);
/* raddisplay.c */
extern char calculatecolor(float col);
diff --git a/source/blender/radiosity/intern/source/raddisplay.c b/source/blender/radiosity/intern/source/raddisplay.c
index 753c2a5b58b..ab9e8eedc28 100644
--- a/source/blender/radiosity/intern/source/raddisplay.c
+++ b/source/blender/radiosity/intern/source/raddisplay.c
@@ -199,11 +199,13 @@ void drawpatch_ext(RPatch *patch, unsigned int col)
View3D *v3d;
glDrawBuffer(GL_FRONT);
+ return; // XXX
+
cpack(col);
oldsa= NULL; // XXX curarea;
- sa= G.curscreen->areabase.first;
+// sa= G.curscreen->areabase.first;
while(sa) {
if (sa->spacetype==SPACE_VIEW3D) {
v3d= sa->spacedata.first;
@@ -455,9 +457,11 @@ void rad_forcedraw()
{
ScrArea *sa, *oldsa;
+ return; // XXX
+
oldsa= NULL; // XXX curarea;
- sa= G.curscreen->areabase.first;
+/// sa= G.curscreen->areabase.first;
while(sa) {
if (sa->spacetype==SPACE_VIEW3D) {
/* use mywinget() here: othwerwise it draws in header */
diff --git a/source/blender/radiosity/intern/source/radio.c b/source/blender/radiosity/intern/source/radio.c
index ec4a0eec490..63032b2d603 100644
--- a/source/blender/radiosity/intern/source/radio.c
+++ b/source/blender/radiosity/intern/source/radio.c
@@ -99,14 +99,14 @@
RadGlobal RG= {0, 0};
-void freeAllRad()
+void freeAllRad(Scene *scene)
{
Base *base;
extern int Ntotvert, Ntotnode, Ntotpatch;
/* clear flag that disables drawing the meshes */
- if(G.scene) {
- base= (G.scene->base.first);
+ if(scene) {
+ base= (scene->base.first);
while(base) {
if(base->object->type==OB_MESH) {
base->flag &= ~OB_RADIO;
@@ -190,9 +190,9 @@ void rad_printstatus()
// }
}
-void rad_setlimits()
+void rad_setlimits(Scene *scene)
{
- Radio *rad= G.scene->radio;
+ Radio *rad= scene->radio;
float fac;
fac= 0.0005*rad->pama;
@@ -210,10 +210,10 @@ void rad_setlimits()
RG.elemmin*= RG.elemmin;
}
-void set_radglobal()
+void set_radglobal(Scene *scene)
{
/* always call before any action is performed */
- Radio *rad= G.scene->radio;
+ Radio *rad= scene->radio;
if(RG.radio==0) {
/* firsttime and to be sure */
@@ -223,7 +223,7 @@ void set_radglobal()
if(rad==0) return;
if(rad != RG.radio) {
- if(RG.radio) freeAllRad();
+ if(RG.radio) freeAllRad(scene);
memset(&RG, 0, sizeof(RadGlobal));
RG.radio= rad;
}
@@ -243,16 +243,16 @@ void set_radglobal()
RG.re= NULL; /* struct render, for when call it from render engine */
- rad_setlimits();
+ rad_setlimits(scene);
}
/* called from buttons.c */
-void add_radio()
+void add_radio(Scene *scene)
{
Radio *rad;
- if(G.scene->radio) MEM_freeN(G.scene->radio);
- rad= G.scene->radio= MEM_callocN(sizeof(Radio), "radio");
+ if(scene->radio) MEM_freeN(scene->radio);
+ rad= scene->radio= MEM_callocN(sizeof(Radio), "radio");
rad->hemires= 300;
rad->convergence= 0.1;
@@ -271,19 +271,19 @@ void add_radio()
rad->maxnode= 10000;
rad->maxiter= 120; // arbitrary
rad->flag= 2;
- set_radglobal();
+ set_radglobal(scene);
}
-void delete_radio()
+void delete_radio(Scene *scene)
{
- freeAllRad();
- if(G.scene->radio) MEM_freeN(G.scene->radio);
- G.scene->radio= 0;
+ freeAllRad(scene);
+ if(scene->radio) MEM_freeN(scene->radio);
+ scene->radio= 0;
RG.radio= 0;
}
-int rad_go(void) /* return 0 when user escapes */
+int rad_go(Scene *scene) /* return 0 when user escapes */
{
double stime= PIL_check_seconds_timer();
int retval;
@@ -292,7 +292,7 @@ int rad_go(void) /* return 0 when user escapes */
G.afbreek= 0;
- set_radglobal();
+ set_radglobal(scene);
initradiosity(); /* LUT's */
inithemiwindows(); /* views */
@@ -334,14 +334,14 @@ int rad_go(void) /* return 0 when user escapes */
return retval;
}
-void rad_subdivshootpatch()
+void rad_subdivshootpatch(Scene *scene)
{
if(RG.totface) return;
G.afbreek= 0;
- set_radglobal();
+ set_radglobal(scene);
initradiosity(); /* LUT's */
inithemiwindows(); /* views */
@@ -353,14 +353,14 @@ void rad_subdivshootpatch()
// XXX allqueue(REDRAWVIEW3D, 1);
}
-void rad_subdivshootelem(void)
+void rad_subdivshootelem(Scene *scene)
{
if(RG.totface) return;
G.afbreek= 0;
- set_radglobal();
+ set_radglobal(scene);
initradiosity(); /* LUT's */
inithemiwindows(); /* views */
@@ -372,12 +372,12 @@ void rad_subdivshootelem(void)
// XXX allqueue(REDRAWVIEW3D, 1);
}
-void rad_limit_subdivide()
+void rad_limit_subdivide(Scene *scene)
{
- if(G.scene->radio==0) return;
+ if(scene->radio==0) return;
- set_radglobal();
+ set_radglobal(scene);
if(RG.totpatch==0) {
/* printf("exit: no relevant data\n"); */
diff --git a/source/blender/radiosity/intern/source/radpostprocess.c b/source/blender/radiosity/intern/source/radpostprocess.c
index 75480eda5df..6912c737a51 100644
--- a/source/blender/radiosity/intern/source/radpostprocess.c
+++ b/source/blender/radiosity/intern/source/radpostprocess.c
@@ -56,6 +56,7 @@
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "DNA_radio_types.h"
+#include "DNA_scene_types.h"
#include "BKE_customdata.h"
#include "BKE_global.h"
@@ -694,7 +695,7 @@ unsigned int rad_find_or_add_mvert(Mesh *me, MFace *mf, RNode *orignode, float *
return (unsigned int)(mvert - me->mvert);
}
-void rad_addmesh(void)
+void rad_addmesh(Scene *scene)
{
Face *face = NULL;
Object *ob;
@@ -715,7 +716,7 @@ void rad_addmesh(void)
// XXX notice("warning: cannot assign more than 16 materials to 1 mesh");
/* create the mesh */
- ob= add_object(OB_MESH);
+ ob= add_object(scene, OB_MESH);
me= ob->data;
me->totvert= totalRadVert();
@@ -799,7 +800,7 @@ void rad_addmesh(void)
make_edges(me, 0);
}
-void rad_replacemesh(void)
+void rad_replacemesh(Scene *scene)
{
RPatch *rp;
@@ -815,9 +816,9 @@ void rad_replacemesh(void)
rp= rp->next;
}
- copy_objectflags();
+ copy_objectflags(scene);
// XXX delete_obj(1);
- rad_addmesh();
+ rad_addmesh(scene);
}
diff --git a/source/blender/radiosity/intern/source/radpreprocess.c b/source/blender/radiosity/intern/source/radpreprocess.c
index 6416ab0f1e5..2b3ce1a856b 100644
--- a/source/blender/radiosity/intern/source/radpreprocess.c
+++ b/source/blender/radiosity/intern/source/radpreprocess.c
@@ -293,7 +293,7 @@ static int materialIndex(Material *ma)
return -1;
}
-void rad_collect_meshes(View3D *v3d)
+void rad_collect_meshes(Scene *scene, View3D *v3d)
{
extern Material defmaterial;
Base *base;
@@ -314,16 +314,16 @@ void rad_collect_meshes(View3D *v3d)
return;
}
- set_radglobal();
+ set_radglobal(scene);
- freeAllRad();
+ freeAllRad(scene);
start_fastmalloc("Radiosity");
/* count the number of verts */
RG.totvert= 0;
RG.totface= 0;
- base= (G.scene->base.first);
+ base= (scene->base.first);
while(base) {
if(((base)->flag & SELECT) && ((base)->lay & v3d->lay) ) {
if(base->object->type==OB_MESH) {
@@ -346,7 +346,7 @@ void rad_collect_meshes(View3D *v3d)
mfdatatot= 0;
/* min-max and material array */
- base= (G.scene->base.first);
+ base= (scene->base.first);
while(base) {
if( ((base)->flag & SELECT) && ((base)->lay & v3d->lay) ) {
if(base->object->type==OB_MESH) {
@@ -413,7 +413,7 @@ void rad_collect_meshes(View3D *v3d)
RG.totlamp= 0;
offs= 0;
- base= (G.scene->base.first);
+ base= (scene->base.first);
while(base) {
if( ((base)->flag & SELECT) && ((base)->lay & v3d->lay) ) {
if(base->object->type==OB_MESH) {
@@ -528,7 +528,7 @@ void rad_collect_meshes(View3D *v3d)
makeGlobalElemArray();
pseudoAmb();
- rad_setlimits();
+ rad_setlimits(scene);
}
void setparelem(RNode *rn, RPatch *par)
diff --git a/source/blender/radiosity/intern/source/radrender.c b/source/blender/radiosity/intern/source/radrender.c
index 0233ffbcf9f..89f81e08d64 100644
--- a/source/blender/radiosity/intern/source/radrender.c
+++ b/source/blender/radiosity/intern/source/radrender.c
@@ -318,7 +318,7 @@ static void progressiverad_rr(Render *re)
}
printf(" Unshot energy:%f\n", 1000.0*maxenergy);
- re->timecursor((G.scene->r.cfra));
+ re->timecursor((re->scene->r.cfra));
}
static RadFace *radfaces=NULL;
@@ -500,10 +500,10 @@ static void make_vertex_rad_values(Render *re)
/* main call, extern */
void do_radio_render(Render *re)
{
- if(G.scene->radio==NULL) add_radio();
- freeAllRad(); /* just in case radio-tool is still used */
+ if(re->scene->radio==NULL) add_radio(re->scene);
+ freeAllRad(re->scene); /* just in case radio-tool is still used */
- set_radglobal(); /* init the RG struct */
+ set_radglobal(re->scene); /* init the RG struct */
RG.re= re; /* only used by hemizbuf(), prevents polluting radio code all over */
initradfaces(re); /* add radface structs to render faces */
@@ -518,7 +518,7 @@ void do_radio_render(Render *re)
}
- freeAllRad(); /* luts, hemis, sets vars at zero */
+ freeAllRad(re->scene); /* luts, hemis, sets vars at zero */
}
/* free call, after rendering, extern */
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;
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index d9e3a6daf99..f9f73e8d31d 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -70,10 +70,6 @@
#include "BKE_texture.h"
#include "BKE_utildefines.h"
-#ifdef WITH_VERSE
-#include "BKE_verse.h"
-#endif
-
#include "BLO_readfile.h"
#include "BLO_writefile.h"
@@ -360,17 +356,6 @@ static void init_userdef_themes(void)
/* this timer uses U */
// XXX reset_autosave();
-#ifdef WITH_VERSE
- if(strlen(U.versemaster)<1) {
- strcpy(U.versemaster, "master.uni-verse.org");
- }
- if(strlen(U.verseuser)<1) {
-// XXX char *name = verse_client_name();
-// XXX strcpy(U.verseuser, name);
-// XXX MEM_freeN(name);
- }
-#endif
-
}
/* To be able to read files without windows closing, opening, moving
@@ -473,47 +458,14 @@ static void wm_window_match_do(bContext *C, ListBase *oldwmlist)
}
}
-#ifdef WITH_VERSE
-static void verse_unsub(void)
-{
- extern ListBase session_list;
- struct VerseSession *session;
- struct VNode *vnode;
-
- session = session_list.first;
- while(session) {
- vnode = session->nodes.lb.first;
- while(vnode) {
- switch(vnode->type) {
- case V_NT_OBJECT:
-//XXX unsubscribe_from_obj_node(vnode);
- break;
- case V_NT_GEOMETRY:
-//XXX unsubscribe_from_geom_node(vnode);
- break;
- case V_NT_BITMAP:
-//XXX unsubscribe_from_bitmap_node(vnode);
- break;
- }
- vnode = vnode->next;
- }
- session = session->next;
- }
-}
-#endif
-
void WM_read_file(bContext *C, char *name, ReportList *reports)
{
int retval;
-#ifdef WITH_VERSE
- verse_unsub(); /* bad call here (ton) */
-#endif
-
/* first try to append data from exotic file formats... */
/* it throws error box when file doesnt exist and returns -1 */
/* note; it should set some error message somewhere... (ton) */
- retval= BKE_read_exotic(name);
+ retval= BKE_read_exotic(CTX_data_scene(C), name);
/* we didn't succeed, now try to read Blender file */
if (retval== 0) {
@@ -552,26 +504,6 @@ void WM_read_file(bContext *C, char *name, ReportList *reports)
}
}
-static void outliner_242_patch(void)
-{
- ScrArea *sa;
-
-// XXX
- if(G.curscreen==NULL) return;
- for(sa= G.curscreen->areabase.first; sa; sa= sa->next) {
- SpaceLink *sl= sa->spacedata.first;
- for(; sl; sl= sl->next) {
- if(sl->spacetype==SPACE_OOPS) {
- SpaceOops *soops= (SpaceOops *)sl;
- if(soops->type!=SO_OUTLINER) {
- soops->type= SO_OUTLINER;
-// XXX init_v2d_oops(sa, soops);
- }
- }
- }
- }
- G.fileflags |= G_FILE_GAME_MAT;
-}
/* called on startup, (context entirely filled with NULLs) */
/* or called for 'Erase All' */
@@ -600,8 +532,6 @@ int WM_read_homefile(bContext *C, int from_memory)
success = BKE_read_file(C, tstr, NULL, NULL);
} else {
success = BKE_read_file_from_memory(C, datatoc_B_blend, datatoc_B_blend_size, NULL, NULL);
- /* outliner patch for 2.42 .b.blend */
- outliner_242_patch();
}
/* match the read WM with current WM */
diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c
index 8eca5850628..65df71a067a 100644
--- a/source/blender/windowmanager/intern/wm_init_exit.c
+++ b/source/blender/windowmanager/intern/wm_init_exit.c
@@ -195,6 +195,9 @@ void WM_exit(bContext *C)
if(C)
ED_editors_exit(C);
+ /* Context should still working here. but radio tool needs cleaning... */
+ freeAllRad(CTX_data_scene(C));
+
free_ttfont(); /* bke_font.h */
#ifdef WITH_VERSE
@@ -202,7 +205,6 @@ void WM_exit(bContext *C)
#endif
free_openrecent();
- freeAllRad();
BKE_freecubetable();
// if (G.background == 0)
diff --git a/source/blender/windowmanager/intern/wm_subwindow.c b/source/blender/windowmanager/intern/wm_subwindow.c
index 29baf9f4cc5..8431317f4d9 100644
--- a/source/blender/windowmanager/intern/wm_subwindow.c
+++ b/source/blender/windowmanager/intern/wm_subwindow.c
@@ -490,46 +490,3 @@ static int is_a_really_crappy_nvidia_card(void) {
}
#endif
-void myswapbuffers(void) /* XXX */
-{
- ScrArea *sa;
-
- sa= G.curscreen->areabase.first;
- while(sa) {
-// if(sa->win_swap==WIN_BACK_OK) sa->win_swap= WIN_FRONT_OK;
-// if(sa->head_swap==WIN_BACK_OK) sa->head_swap= WIN_FRONT_OK;
-
- sa= sa->next;
- }
-
- /* HACK, some windows drivers feel they should honor the scissor
- * test when swapping buffers, disable the test while swapping
- * on WIN32. (namely Matrox and NVidia's new drivers around Oct 1 2001)
- * - zr
- */
-
-#ifdef WIN32
- /* HACK, in some NVidia driver release some kind of
- * fancy optimiziation (I presume) was put in which for
- * some reason causes parts of the buffer not to be
- * swapped. One way to defeat it is the following wierd
- * code (which we only do for nvidia cards). This should
- * be removed if NVidia fixes their drivers. - zr
- */
- if (is_a_really_crappy_nvidia_card()) {
- glDrawBuffer(GL_FRONT);
-
- glBegin(GL_LINES);
- glEnd();
-
- glDrawBuffer(GL_BACK);
- }
-
- glDisable(GL_SCISSOR_TEST);
-// window_swap_buffers(winlay_mainwindow);
- glEnable(GL_SCISSOR_TEST);
-#else
-// window_swap_buffers(winlay_mainwindow);
-#endif
-}
-
diff --git a/source/blender/windowmanager/wm_event_types.h b/source/blender/windowmanager/wm_event_types.h
index 93b5bf02e71..6a8174b351a 100644
--- a/source/blender/windowmanager/wm_event_types.h
+++ b/source/blender/windowmanager/wm_event_types.h
@@ -75,6 +75,7 @@
#define TIMER0 0x0111 /* timer event, slot for internal use */
#define TIMER1 0x0112 /* timer event, slot for internal use */
#define TIMER2 0x0113 /* timer event, slot for internal use */
+#define TIMER3 0x0114 /* timer event, slot for internal use */
/* standard keyboard */
diff --git a/source/blender/yafray/intern/export_File.cpp b/source/blender/yafray/intern/export_File.cpp
index 7ea83f9fda4..25d30027ee8 100644
--- a/source/blender/yafray/intern/export_File.cpp
+++ b/source/blender/yafray/intern/export_File.cpp
@@ -244,7 +244,7 @@ bool yafrayFileRender_t::writeRender()
<< "\" clamp_rgb=\"" << ((re->r.YF_clamprgb==0) ? "on" : "off") << "\"\n";
}
- World *world = G.scene->world;
+ World *world = re->scene->world;
if (world) ostr << "\tbackground_name=\"world_background\"\n";
// alpha channel render when RGBA button enabled
@@ -1855,7 +1855,7 @@ void yafrayFileRender_t::writeCamera()
void yafrayFileRender_t::writeHemilight()
{
- World *world = G.scene->world;
+ World *world = re->scene->world;
bool fromAO = false;
if (re->r.GIquality==6){
// use Blender AO params is possible
@@ -1961,7 +1961,7 @@ void yafrayFileRender_t::writePathlight()
bool yafrayFileRender_t::writeWorld()
{
- World *world = G.scene->world;
+ World *world = re->scene->world;
if (re->r.GIquality!=0) {
if (re->r.GImethod==1) {
if (world==NULL) cout << "WARNING: need world background for skydome!\n";
diff --git a/source/blender/yafray/intern/export_Plugin.cpp b/source/blender/yafray/intern/export_Plugin.cpp
index 39514ce259a..1de6920182a 100644
--- a/source/blender/yafray/intern/export_Plugin.cpp
+++ b/source/blender/yafray/intern/export_Plugin.cpp
@@ -241,7 +241,7 @@ bool yafrayPluginRender_t::writeRender()
params["border_ymax"] = yafray::parameter_t(2.f*re->r.border.ymax - 1.f);
}
if (hasworld) {
- World *world = G.scene->world;
+ World *world = re->scene->world;
if (world->mode & WO_MIST) {
// basic fog
float fd = world->mistdist;
@@ -1740,7 +1740,7 @@ void yafrayPluginRender_t::writeCamera()
void yafrayPluginRender_t::writeHemilight()
{
yafray::paramMap_t params;
- World *world = G.scene->world;
+ World *world = re->scene->world;
bool fromAO = false;
if (re->r.GIquality==6){
// use Blender AO params is possible
@@ -1864,7 +1864,7 @@ void yafrayPluginRender_t::writePathlight()
bool yafrayPluginRender_t::writeWorld()
{
- World *world = G.scene->world;
+ World *world = re->scene->world;
if (re->r.GIquality!=0) {
if (re->r.GImethod==1) {
if (world==NULL) cout << "WARNING: need world background for skydome!\n";
diff --git a/source/blender/yafray/intern/yafray_Render.cpp b/source/blender/yafray/intern/yafray_Render.cpp
index 01da4683d71..d0006786507 100644
--- a/source/blender/yafray/intern/yafray_Render.cpp
+++ b/source/blender/yafray/intern/yafray_Render.cpp
@@ -29,7 +29,7 @@ bool yafrayRender_t::exportScene(Render* re)
this->re = re;
// get camera first, no checking should be necessary, all done by Blender
- maincam_obj = G.scene->camera;
+ maincam_obj = re->scene->camera;
// use fixed lens for objects functioning as temporary camera (ctrl-0)
mainCamLens = 35.0;
diff --git a/source/creator/creator.c b/source/creator/creator.c
index 6e62fe10d40..1c1b5c3f240 100644
--- a/source/creator/creator.c
+++ b/source/creator/creator.c
@@ -608,15 +608,17 @@ int main(int argc, char **argv)
}
case 'f':
a++;
- if (G.scene) {
+ if (CTX_data_scene(C)) {
+ Scene *scene= CTX_data_scene(C);
+
if (a < argc) {
int frame= MIN2(MAXFRAME, MAX2(1, atoi(argv[a])));
- Render *re= RE_NewRender(G.scene->id.name);
+ Render *re= RE_NewRender(scene->id.name);
#ifndef DISABLE_PYTHON
if (G.f & G_DOSCRIPTLINKS)
BPY_do_all_scripts(SCRIPT_RENDER, 0);
#endif
- RE_BlenderAnim(re, G.scene, frame, frame, G.scene->frame_step);
+ RE_BlenderAnim(re, scene, frame, frame, scene->frame_step);
#ifndef DISABLE_PYTHON
BPY_do_all_scripts(SCRIPT_POSTRENDER, 0);
#endif
@@ -626,13 +628,14 @@ int main(int argc, char **argv)
}
break;
case 'a':
- if (G.scene) {
- Render *re= RE_NewRender(G.scene->id.name);
+ if (CTX_data_scene(C)) {
+ Scene *scene= CTX_data_scene(C);
+ Render *re= RE_NewRender(scene->id.name);
#ifndef DISABLE_PYTHON
if (G.f & G_DOSCRIPTLINKS)
BPY_do_all_scripts(SCRIPT_RENDER, 1);
#endif
- RE_BlenderAnim(re, G.scene, G.scene->r.sfra, G.scene->r.efra, G.scene->frame_step);
+ RE_BlenderAnim(re, scene, scene->r.sfra, scene->r.efra, scene->frame_step);
#ifndef DISABLE_PYTHON
if (G.f & G_DOSCRIPTLINKS)
BPY_do_all_scripts(SCRIPT_POSTRENDER, 1);
@@ -648,27 +651,30 @@ int main(int argc, char **argv)
break;
case 's':
a++;
- if(G.scene) {
+ if (CTX_data_scene(C)) {
+ Scene *scene= CTX_data_scene(C);
int frame= MIN2(MAXFRAME, MAX2(1, atoi(argv[a])));
- if (a < argc) (G.scene->r.sfra) = frame;
+ if (a < argc) (scene->r.sfra) = frame;
} else {
printf("\nError: no blend loaded. cannot use '-s'.\n");
}
break;
case 'e':
a++;
- if(G.scene) {
+ if (CTX_data_scene(C)) {
+ Scene *scene= CTX_data_scene(C);
int frame= MIN2(MAXFRAME, MAX2(1, atoi(argv[a])));
- if (a < argc) (G.scene->r.efra) = frame;
+ if (a < argc) (scene->r.efra) = frame;
} else {
printf("\nError: no blend loaded. cannot use '-e'.\n");
}
break;
case 'j':
a++;
- if(G.scene) {
+ if (CTX_data_scene(C)) {
+ Scene *scene= CTX_data_scene(C);
int fstep= MIN2(MAXFRAME, MAX2(1, atoi(argv[a])));
- if (a < argc) (G.scene->frame_step) = fstep;
+ if (a < argc) (scene->frame_step) = fstep;
} else {
printf("\nError: no blend loaded. cannot use '-j'.\n");
}
@@ -699,8 +705,9 @@ int main(int argc, char **argv)
case 'o':
a++;
if (a < argc){
- if(G.scene) {
- BLI_strncpy(G.scene->r.pic, argv[a], FILE_MAXDIR);
+ if (CTX_data_scene(C)) {
+ Scene *scene= CTX_data_scene(C);
+ BLI_strncpy(scene->r.pic, argv[a], FILE_MAXDIR);
} else {
printf("\nError: no blend loaded. cannot use '-o'.\n");
}
@@ -711,35 +718,36 @@ int main(int argc, char **argv)
case 'F':
a++;
if (a < argc){
- if(!G.scene) {
+ if (CTX_data_scene(C)==NULL) {
printf("\nError: no blend loaded. order the arguments so '-F ' is after the blend is loaded.\n");
} else {
- if (!strcmp(argv[a],"TGA")) G.scene->r.imtype = R_TARGA;
- else if (!strcmp(argv[a],"IRIS")) G.scene->r.imtype = R_IRIS;
- else if (!strcmp(argv[a],"HAMX")) G.scene->r.imtype = R_HAMX;
+ Scene *scene= CTX_data_scene(C);
+ if (!strcmp(argv[a],"TGA")) scene->r.imtype = R_TARGA;
+ else if (!strcmp(argv[a],"IRIS")) scene->r.imtype = R_IRIS;
+ else if (!strcmp(argv[a],"HAMX")) scene->r.imtype = R_HAMX;
#ifdef WITH_DDS
- else if (!strcmp(argv[a],"DDS")) G.scene->r.imtype = R_DDS;
+ else if (!strcmp(argv[a],"DDS")) scene->r.imtype = R_DDS;
#endif
- else if (!strcmp(argv[a],"JPEG")) G.scene->r.imtype = R_JPEG90;
- else if (!strcmp(argv[a],"MOVIE")) G.scene->r.imtype = R_MOVIE;
- else if (!strcmp(argv[a],"IRIZ")) G.scene->r.imtype = R_IRIZ;
- else if (!strcmp(argv[a],"RAWTGA")) G.scene->r.imtype = R_RAWTGA;
- else if (!strcmp(argv[a],"AVIRAW")) G.scene->r.imtype = R_AVIRAW;
- else if (!strcmp(argv[a],"AVIJPEG")) G.scene->r.imtype = R_AVIJPEG;
- else if (!strcmp(argv[a],"PNG")) G.scene->r.imtype = R_PNG;
- else if (!strcmp(argv[a],"AVICODEC")) G.scene->r.imtype = R_AVICODEC;
- else if (!strcmp(argv[a],"QUICKTIME")) G.scene->r.imtype = R_QUICKTIME;
- else if (!strcmp(argv[a],"BMP")) G.scene->r.imtype = R_BMP;
- else if (!strcmp(argv[a],"HDR")) G.scene->r.imtype = R_RADHDR;
- else if (!strcmp(argv[a],"TIFF")) G.scene->r.imtype = R_TIFF;
+ else if (!strcmp(argv[a],"JPEG")) scene->r.imtype = R_JPEG90;
+ else if (!strcmp(argv[a],"MOVIE")) scene->r.imtype = R_MOVIE;
+ else if (!strcmp(argv[a],"IRIZ")) scene->r.imtype = R_IRIZ;
+ else if (!strcmp(argv[a],"RAWTGA")) scene->r.imtype = R_RAWTGA;
+ else if (!strcmp(argv[a],"AVIRAW")) scene->r.imtype = R_AVIRAW;
+ else if (!strcmp(argv[a],"AVIJPEG")) scene->r.imtype = R_AVIJPEG;
+ else if (!strcmp(argv[a],"PNG")) scene->r.imtype = R_PNG;
+ else if (!strcmp(argv[a],"AVICODEC")) scene->r.imtype = R_AVICODEC;
+ else if (!strcmp(argv[a],"QUICKTIME")) scene->r.imtype = R_QUICKTIME;
+ else if (!strcmp(argv[a],"BMP")) scene->r.imtype = R_BMP;
+ else if (!strcmp(argv[a],"HDR")) scene->r.imtype = R_RADHDR;
+ else if (!strcmp(argv[a],"TIFF")) scene->r.imtype = R_TIFF;
#ifdef WITH_OPENEXR
- else if (!strcmp(argv[a],"EXR")) G.scene->r.imtype = R_OPENEXR;
- else if (!strcmp(argv[a],"MULTILAYER")) G.scene->r.imtype = R_MULTILAYER;
+ else if (!strcmp(argv[a],"EXR")) scene->r.imtype = R_OPENEXR;
+ else if (!strcmp(argv[a],"MULTILAYER")) scene->r.imtype = R_MULTILAYER;
#endif
- else if (!strcmp(argv[a],"MPEG")) G.scene->r.imtype = R_FFMPEG;
- else if (!strcmp(argv[a],"FRAMESERVER")) G.scene->r.imtype = R_FRAMESERVER;
- else if (!strcmp(argv[a],"CINEON")) G.scene->r.imtype = R_CINEON;
- else if (!strcmp(argv[a],"DPX")) G.scene->r.imtype = R_DPX;
+ else if (!strcmp(argv[a],"MPEG")) scene->r.imtype = R_FFMPEG;
+ else if (!strcmp(argv[a],"FRAMESERVER")) scene->r.imtype = R_FRAMESERVER;
+ else if (!strcmp(argv[a],"CINEON")) scene->r.imtype = R_CINEON;
+ else if (!strcmp(argv[a],"DPX")) scene->r.imtype = R_DPX;
else printf("\nError: Format from '-F' not known or not compiled in this release.\n");
}
} else {
@@ -758,11 +766,12 @@ int main(int argc, char **argv)
case 'x': /* extension */
a++;
if (a < argc) {
- if(G.scene) {
+ if (CTX_data_scene(C)) {
+ Scene *scene= CTX_data_scene(C);
if (argv[a][0] == '0') {
- G.scene->r.scemode &= ~R_EXTENSION;
+ scene->r.scemode &= ~R_EXTENSION;
} else if (argv[a][0] == '1') {
- G.scene->r.scemode |= R_EXTENSION;
+ scene->r.scemode |= R_EXTENSION;
} else {
printf("\nError: Use '-x 1' or '-x 0' To set the extension option.\n");
}
diff --git a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
index 01eedc68964..d5eaeb34f1b 100644
--- a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
+++ b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
@@ -117,7 +117,7 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
int always_use_expand_framing)
{
int exitrequested = KX_EXIT_REQUEST_NO_REQUEST;
-
+ Scene *scene= NULL; // XXX give as arg
Main* blenderdata = maggie1;
char* startscenename = scenename;
@@ -207,12 +207,12 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
//lock frame and camera enabled - storing global values
- int tmp_lay= G.scene->lay;
- Object *tmp_camera = G.scene->camera;
+ int tmp_lay= scene->lay;
+ Object *tmp_camera = scene->camera;
if (v3d->scenelock==0){
- G.scene->lay= v3d->lay;
- G.scene->camera= v3d->camera;
+ scene->lay= v3d->lay;
+ scene->camera= v3d->camera;
}
@@ -478,8 +478,8 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
}
//lock frame and camera enabled - restoring global values
if (v3d->scenelock==0){
- G.scene->lay= tmp_lay;
- G.scene->camera= tmp_camera;
+ scene->lay= tmp_lay;
+ scene->camera= tmp_camera;
}
// set the cursor back to normal
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h b/source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h
index 4294971d225..7d1861a9448 100644
--- a/source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h
+++ b/source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h
@@ -38,12 +38,6 @@
#include "wm_event_types.h"
#include "SCA_IInputDevice.h"
-/* timers */
-#define TIMER0 0x006
-#define TIMER1 0x007
-#define TIMER2 0x008
-#define TIMER3 0x009
-
/**
Base Class for Blender specific inputdevices. Blender specific inputdevices are used when the gameengine is running in embedded mode instead of standalone mode.
*/
diff --git a/source/gameengine/Converter/BL_ArmatureObject.cpp b/source/gameengine/Converter/BL_ArmatureObject.cpp
index d2001212f7d..a27ce0ad9e0 100644
--- a/source/gameengine/Converter/BL_ArmatureObject.cpp
+++ b/source/gameengine/Converter/BL_ArmatureObject.cpp
@@ -98,7 +98,7 @@ void BL_ArmatureObject::ApplyPose()
m_objArma->pose = m_pose;
if(m_lastapplyframe != m_lastframe) {
- where_is_pose(m_objArma);
+ where_is_pose(NULL, m_objArma); // XXX
m_lastapplyframe = m_lastframe;
}
}
diff --git a/source/gameengine/GamePlayer/common/GPC_Engine.cpp b/source/gameengine/GamePlayer/common/GPC_Engine.cpp
index bb84b5939e1..a46f30c1209 100644
--- a/source/gameengine/GamePlayer/common/GPC_Engine.cpp
+++ b/source/gameengine/GamePlayer/common/GPC_Engine.cpp
@@ -185,7 +185,7 @@ bool GPC_Engine::Start(unsigned char *blenderDataBuffer,
bool GPC_Engine::StartKetsji(void)
{
- STR_String startSceneName = G.scene->id.name + 2;
+ STR_String startSceneName = ""; // XXX scene->id.name + 2;
/*
KX_KetsjiEngine* ketsjieng = new KX_KetsjiEngine(m_system);
m_portal = new KetsjiPortal(ketsjieng);
diff --git a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
index aa5e5835cdc..e326df57a3d 100644
--- a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
+++ b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
@@ -157,7 +157,7 @@ bool GPG_Application::SetGameEngineData(struct Main* maggie, Scene *scene)
if (maggie != NULL && scene != NULL)
{
- G.scene = scene;
+// XXX G.scene = scene;
m_maggie = maggie;
m_startSceneName = scene->id.name+2;
m_startScene = scene;
@@ -643,7 +643,7 @@ bool GPG_Application::startEngine(void)
/*
m_canvas->SetBannerDisplayEnabled(true);
Camera* cam;
- cam = (Camera*)G.scene->camera->data;
+ cam = (Camera*)scene->camera->data;
if (cam) {
if (((cam->flag) & 48)==48) {
m_canvas->SetBannerDisplayEnabled(false);
@@ -712,7 +712,7 @@ bool GPG_Application::startEngine(void)
// Set the animation playback rate for ipo's and actions
// the framerate below should patch with FPS macro defined in blendef.h
// Could be in StartEngine set the framerate, we need the scene to do this
- m_ketsjiengine->SetAnimFrameRate( (((double) G.scene->r.frs_sec) / G.scene->r.frs_sec_base) );
+// XXX m_ketsjiengine->SetAnimFrameRate( (((double) scene->r.frs_sec) / scene->r.frs_sec_base) );
}