Merging r47662 through r47666 from trunk into soc-2011-tomato

This commit is contained in:
Sergey Sharybin
2012-06-10 12:15:39 +00:00
7 changed files with 141 additions and 147 deletions

View File

@@ -45,23 +45,16 @@ void GroupNode::ungroup(ExecutionSystem &system)
InputSocket * inputSocket = inputsockets[index];
bNodeSocket *editorInput = inputSocket->getbNodeSocket();
if (editorInput->groupsock) {
if (inputSocket->isConnected()) {
SocketProxyNode * proxy = new SocketProxyNode(this->getbNode(), editorInput, editorInput->groupsock);
inputSocket->relinkConnections(proxy->getInputSocket(0), index, &system);
ExecutionSystemHelper::addNode(system.getNodes(), proxy);
}
else {
OutputSocketProxyNode * proxy = new OutputSocketProxyNode(this->getbNode(), editorInput, editorInput->groupsock);
inputSocket->relinkConnections(proxy->getInputSocket(0), index, &system);
ExecutionSystemHelper::addNode(system.getNodes(), proxy);
}
SocketProxyNode * proxy = new SocketProxyNode(this->getbNode(), editorInput, editorInput->groupsock);
inputSocket->relinkConnections(proxy->getInputSocket(0), index, &system);
ExecutionSystemHelper::addNode(system.getNodes(), proxy);
}
}
for (index = 0 ; index < outputsockets.size();index ++) {
OutputSocket * outputSocket = outputsockets[index];
bNodeSocket *editorOutput = outputSocket->getbNodeSocket();
if (outputSocket->isConnected() && editorOutput->groupsock) {
if (editorOutput->groupsock) {
SocketProxyNode * proxy = new SocketProxyNode(this->getbNode(), editorOutput->groupsock, editorOutput);
outputSocket->relinkConnections(proxy->getOutputSocket(0));
ExecutionSystemHelper::addNode(system.getNodes(), proxy);

View File

@@ -44,52 +44,50 @@ SocketProxyNode::SocketProxyNode(bNode *editorNode, bNodeSocket *editorInput, bN
}
void SocketProxyNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
{
OutputSocket * outputsocket = this->getOutputSocket(0);
if (outputsocket->isConnected()) {
SocketProxyOperation *operation = new SocketProxyOperation();
this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0));
this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
graph->addOperation(operation);
}
}
void OutputSocketProxyNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)
{
OutputSocket * outputsocket = this->getOutputSocket(0);
InputSocket * inputsocket = this->getInputSocket(0);
if (outputsocket->isConnected()) {
switch (outputsocket->getActualDataType()) {
case COM_DT_VALUE:
{
SetValueOperation *operation = new SetValueOperation();
bNodeSocketValueFloat *dval = (bNodeSocketValueFloat*)inputsocket->getbNodeSocket()->default_value;
operation->setValue(dval->value);
this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
if (inputsocket->isConnected()) {
SocketProxyOperation *operation = new SocketProxyOperation();
inputsocket->relinkConnections(operation->getInputSocket(0));
outputsocket->relinkConnections(operation->getOutputSocket(0));
graph->addOperation(operation);
break;
}
case COM_DT_COLOR:
{
SetColorOperation *operation = new SetColorOperation();
bNodeSocketValueRGBA *dval = (bNodeSocketValueRGBA*)inputsocket->getbNodeSocket()->default_value;
operation->setChannels(dval->value);
this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
graph->addOperation(operation);
break;
}
case COM_DT_VECTOR:
{
SetVectorOperation *operation = new SetVectorOperation();
bNodeSocketValueVector *dval = (bNodeSocketValueVector*)inputsocket->getbNodeSocket()->default_value;
operation->setVector(dval->value);
this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
graph->addOperation(operation);
break;
}
/* quiet warnings */
case COM_DT_UNKNOWN:
break;
else {
/* If input is not connected, add a constant value operation instead */
switch (outputsocket->getActualDataType()) {
case COM_DT_VALUE:
{
SetValueOperation *operation = new SetValueOperation();
bNodeSocketValueFloat *dval = (bNodeSocketValueFloat*)inputsocket->getbNodeSocket()->default_value;
operation->setValue(dval->value);
outputsocket->relinkConnections(operation->getOutputSocket(0));
graph->addOperation(operation);
break;
}
case COM_DT_COLOR:
{
SetColorOperation *operation = new SetColorOperation();
bNodeSocketValueRGBA *dval = (bNodeSocketValueRGBA*)inputsocket->getbNodeSocket()->default_value;
operation->setChannels(dval->value);
outputsocket->relinkConnections(operation->getOutputSocket(0));
graph->addOperation(operation);
break;
}
case COM_DT_VECTOR:
{
SetVectorOperation *operation = new SetVectorOperation();
bNodeSocketValueVector *dval = (bNodeSocketValueVector*)inputsocket->getbNodeSocket()->default_value;
operation->setVector(dval->value);
outputsocket->relinkConnections(operation->getOutputSocket(0));
graph->addOperation(operation);
break;
}
/* quiet warnings */
case COM_DT_UNKNOWN:
break;
}
}
}
}

View File

@@ -37,10 +37,4 @@ public:
virtual bool isProxyNode() const { return true; }
};
class OutputSocketProxyNode: public SocketProxyNode {
public:
OutputSocketProxyNode(bNode *editorNode, bNodeSocket *editorInput, bNodeSocket *editorOutput): SocketProxyNode(editorNode, editorInput, editorOutput) {}
void convertToOperations(ExecutionSystem *graph, CompositorContext * context);
};
#endif

View File

@@ -557,7 +557,7 @@ static void draw_bone_solid_octahedral(void)
/* *************** Armature drawing, bones ******************* */
static void draw_bone_points(int dt, int armflag, unsigned int boneflag, int id)
static void draw_bone_points(const short dt, int armflag, unsigned int boneflag, int id)
{
/* Draw root point if we are not connected */
if ((boneflag & BONE_CONNECTED) == 0) {
@@ -862,7 +862,7 @@ static void draw_sphere_bone_wire(float smat[][4], float imat[][4],
}
/* does wire only for outline selecting */
static void draw_sphere_bone(int dt, int armflag, int boneflag, short constflag, unsigned int id,
static void draw_sphere_bone(const short dt, int armflag, int boneflag, short constflag, unsigned int id,
bPoseChannel *pchan, EditBone *ebone)
{
GLUquadricObj *qobj;
@@ -1100,7 +1100,7 @@ static void draw_line_bone(int armflag, int boneflag, short constflag, unsigned
glPopMatrix();
}
static void draw_b_bone_boxes(int dt, bPoseChannel *pchan, float xwidth, float length, float zwidth)
static void draw_b_bone_boxes(const short dt, bPoseChannel *pchan, float xwidth, float length, float zwidth)
{
int segments = 0;
@@ -1128,7 +1128,7 @@ static void draw_b_bone_boxes(int dt, bPoseChannel *pchan, float xwidth, float l
}
}
static void draw_b_bone(int dt, int armflag, int boneflag, short constflag, unsigned int id,
static void draw_b_bone(const short dt, int armflag, int boneflag, short constflag, unsigned int id,
bPoseChannel *pchan, EditBone *ebone)
{
float xwidth, length, zwidth;
@@ -1242,7 +1242,7 @@ static void draw_wire_bone_segments(bPoseChannel *pchan, Mat4 *bbones, float len
}
}
static void draw_wire_bone(int dt, int armflag, int boneflag, short constflag, unsigned int id,
static void draw_wire_bone(const short dt, int armflag, int boneflag, short constflag, unsigned int id,
bPoseChannel *pchan, EditBone *ebone)
{
Mat4 *bbones = NULL;
@@ -1293,7 +1293,7 @@ static void draw_wire_bone(int dt, int armflag, int boneflag, short constflag, u
draw_wire_bone_segments(pchan, bbones, length, segments);
}
static void draw_bone(int dt, int armflag, int boneflag, short constflag, unsigned int id, float length)
static void draw_bone(const short dt, int armflag, int boneflag, short constflag, unsigned int id, float length)
{
/* Draw a 3d octahedral bone, we use normalized space based on length,
@@ -1364,7 +1364,7 @@ static void draw_bone(int dt, int armflag, int boneflag, short constflag, unsign
}
static void draw_custom_bone(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob,
int dt, int armflag, int boneflag, unsigned int id, float length)
const short dt, int armflag, int boneflag, unsigned int id, float length)
{
if (ob == NULL) return;
@@ -1657,7 +1657,7 @@ static void bone_matrix_translate_y(float mat[][4], float y)
/* assumes object is Armature with pose */
static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
int dt, const unsigned char ob_wire_col[4],
const short dt, const unsigned char ob_wire_col[4],
const short do_const_color, const short is_outline)
{
RegionView3D *rv3d = ar->regiondata;
@@ -2082,7 +2082,7 @@ static void get_matrix_editbone(EditBone *eBone, float bmat[][4])
add_v3_v3(bmat[3], eBone->head);
}
static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt)
static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, const short dt)
{
RegionView3D *rv3d = ar->regiondata;
EditBone *eBone;
@@ -2559,7 +2559,7 @@ static void draw_ghost_poses(Scene *scene, View3D *v3d, ARegion *ar, Base *base)
/* called from drawobject.c, return 1 if nothing was drawn
* (ob_wire_col == NULL) when drawing ghost */
int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
int dt, int flag, const unsigned char ob_wire_col[4],
const short dt, const short dflag, const unsigned char ob_wire_col[4],
const short is_outline)
{
Object *ob = base->object;
@@ -2613,7 +2613,7 @@ int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
if (arm->ghostep)
draw_ghost_poses(scene, v3d, ar, base);
}
if ((flag & DRAW_SCENESET) == 0) {
if ((dflag & DRAW_SCENESET) == 0) {
if (ob == OBACT)
arm->flag |= ARM_POSEMODE;
else if (OBACT && (OBACT->mode & OB_MODE_WEIGHT_PAINT)) {
@@ -2624,7 +2624,7 @@ int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
}
}
}
draw_pose_bones(scene, v3d, ar, base, dt, ob_wire_col, (flag & DRAW_CONSTCOLOR), is_outline);
draw_pose_bones(scene, v3d, ar, base, dt, ob_wire_col, (dflag & DRAW_CONSTCOLOR), is_outline);
arm->flag &= ~ARM_POSEMODE;
if (ob->mode & OB_MODE_POSE)

View File

@@ -333,7 +333,7 @@ static void view3d_project_short_clip_persmat(ARegion *ar, const float vec[3], s
/* check for glsl drawing */
int draw_glsl_material(Scene *scene, Object *ob, View3D *v3d, int dt)
int draw_glsl_material(Scene *scene, Object *ob, View3D *v3d, const short dt)
{
if (!GPU_glsl_support())
return 0;
@@ -1190,7 +1190,7 @@ static void draw_transp_spot_volume(Lamp *la, float x, float z)
}
static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
int dt, int flag, const unsigned char ob_wire_col[4])
const short dt, const short dflag, const unsigned char ob_wire_col[4])
{
Object *ob = base->object;
const float pixsize = ED_view3d_pixel_size(rv3d, ob->obmat[3]);
@@ -1213,7 +1213,7 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
if (drawcone && !v3d->transp) {
/* in this case we need to draw delayed */
add_view3d_after(&v3d->afterdraw_transp, base, flag);
ED_view3d_after_add(&v3d->afterdraw_transp, base, dflag);
return;
}
@@ -1232,7 +1232,7 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
/* lamp center */
copy_v3_v3(vec, ob->obmat[3]);
if ((flag & DRAW_CONSTCOLOR) == 0) {
if ((dflag & DRAW_CONSTCOLOR) == 0) {
/* for AA effects */
curcol[0] = ob_wire_col[0];
curcol[1] = ob_wire_col[1];
@@ -1243,7 +1243,7 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
if (lampsize > 0.0f) {
if ((flag & DRAW_CONSTCOLOR) == 0) {
if ((dflag & DRAW_CONSTCOLOR) == 0) {
if (ob->id.us > 1) {
if (ob == OBACT || (ob->flag & SELECT)) glColor4ub(0x88, 0xFF, 0xFF, 155);
else glColor4ub(0x77, 0xCC, 0xCC, 155);
@@ -1257,7 +1257,7 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
drawcircball(GL_POLYGON, vec, lampsize, imat);
/* restore */
if ((flag & DRAW_CONSTCOLOR) == 0) {
if ((dflag & DRAW_CONSTCOLOR) == 0) {
if (ob->id.us > 1)
glColor4ubv(curcol);
}
@@ -1492,7 +1492,7 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
glDisable(GL_BLEND);
if ((flag & DRAW_CONSTCOLOR) == 0) {
if ((dflag & DRAW_CONSTCOLOR) == 0) {
/* restore for drawing extra stuff */
glColor3ubv(ob_wire_col);
}
@@ -1558,8 +1558,8 @@ static void draw_bundle_sphere(void)
}
static void draw_viewport_object_reconstruction(Scene *scene, Base *base, View3D *v3d,
MovieClip *clip, MovieTrackingObject *tracking_object, int flag,
int *global_track_index, int draw_selected)
MovieClip *clip, MovieTrackingObject *tracking_object,
const short dflag, int *global_track_index, int draw_selected)
{
MovieTracking *tracking = &clip->tracking;
MovieTrackingTrack *track;
@@ -1602,7 +1602,7 @@ static void draw_viewport_object_reconstruction(Scene *scene, Base *base, View3D
if ((track->flag & TRACK_HAS_BUNDLE) == 0)
continue;
if (flag & DRAW_PICKING)
if (dflag & DRAW_PICKING)
glLoadName(base->selcol + (tracknr << 16));
glPushMatrix();
@@ -1668,7 +1668,7 @@ static void draw_viewport_object_reconstruction(Scene *scene, Base *base, View3D
glPopMatrix();
if ((flag & DRAW_PICKING) == 0 && (v3d->flag2 & V3D_SHOW_BUNDLENAME)) {
if ((dflag & DRAW_PICKING) == 0 && (v3d->flag2 & V3D_SHOW_BUNDLENAME)) {
float pos[3];
unsigned char tcol[4];
@@ -1682,7 +1682,7 @@ static void draw_viewport_object_reconstruction(Scene *scene, Base *base, View3D
tracknr++;
}
if ((flag & DRAW_PICKING) == 0) {
if ((dflag & DRAW_PICKING) == 0) {
if ((v3d->flag2 & V3D_SHOW_CAMERAPATH) && (tracking_object->flag & TRACKING_OBJECT_CAMERA)) {
MovieTrackingReconstruction *reconstruction;
reconstruction = BKE_tracking_object_reconstruction(tracking, tracking_object);
@@ -1713,7 +1713,7 @@ static void draw_viewport_object_reconstruction(Scene *scene, Base *base, View3D
}
static void draw_viewport_reconstruction(Scene *scene, Base *base, View3D *v3d, MovieClip *clip,
int flag, const unsigned char ob_wire_col[4],
const short dflag, const unsigned char ob_wire_col[4],
int draw_selected)
{
MovieTracking *tracking = &clip->tracking;
@@ -1734,7 +1734,7 @@ static void draw_viewport_reconstruction(Scene *scene, Base *base, View3D *v3d,
tracking_object = tracking->objects.first;
while (tracking_object) {
draw_viewport_object_reconstruction(scene, base, v3d, clip, tracking_object,
flag, &global_track_index, draw_selected);
dflag, &global_track_index, draw_selected);
tracking_object = tracking_object->next;
}
@@ -1744,17 +1744,17 @@ static void draw_viewport_reconstruction(Scene *scene, Base *base, View3D *v3d,
glDisable(GL_COLOR_MATERIAL);
glDisable(GL_LIGHTING);
if ((flag & DRAW_CONSTCOLOR) == 0) {
if ((dflag & DRAW_CONSTCOLOR) == 0) {
glColor3ubv(ob_wire_col);
}
if (flag & DRAW_PICKING)
if (dflag & DRAW_PICKING)
glLoadName(base->selcol);
}
/* flag similar to draw_object() */
static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
int flag, const unsigned char ob_wire_col[4])
const short dflag, const unsigned char ob_wire_col[4])
{
/* a standing up pyramid with (0,0,0) as top */
Camera *cam;
@@ -1768,13 +1768,13 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base
/* draw data for movie clip set as active for scene */
if (clip) {
draw_viewport_reconstruction(scene, base, v3d, clip, flag, ob_wire_col, FALSE);
draw_viewport_reconstruction(scene, base, v3d, clip, flag, ob_wire_col, TRUE);
draw_viewport_reconstruction(scene, base, v3d, clip, dflag, ob_wire_col, FALSE);
draw_viewport_reconstruction(scene, base, v3d, clip, dflag, ob_wire_col, TRUE);
}
#ifdef VIEW3D_CAMERA_BORDER_HACK
if (is_view && !(G.f & G_PICKSEL)) {
if ((flag & DRAW_CONSTCOLOR) == 0) {
if ((dflag & DRAW_CONSTCOLOR) == 0) {
view3d_camera_border_hack_col[0] = ob_wire_col[0];
view3d_camera_border_hack_col[1] = ob_wire_col[1];
view3d_camera_border_hack_col[2] = ob_wire_col[2];
@@ -1851,7 +1851,7 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base
glEnd();
}
if (flag == 0) {
if (dflag == 0) {
if (cam->flag & (CAM_SHOWLIMITS + CAM_SHOWMIST)) {
float nobmat[4][4];
World *wrld;
@@ -3146,7 +3146,7 @@ static DMDrawOption draw_em_fancy__setGLSLFaceOpts(void *userData, int index)
}
static void draw_em_fancy(Scene *scene, View3D *v3d, RegionView3D *rv3d,
Object *ob, BMEditMesh *em, DerivedMesh *cageDM, DerivedMesh *finalDM, int dt)
Object *ob, BMEditMesh *em, DerivedMesh *cageDM, DerivedMesh *finalDM, const short dt)
{
Mesh *me = ob->data;
@@ -3353,7 +3353,8 @@ static void draw_mesh_object_outline(View3D *v3d, Object *ob, DerivedMesh *dm)
}
}
static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D *rv3d, Base *base, int dt, int flag)
static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D *rv3d, Base *base,
const short dt, const short dflag)
{
Object *ob = base->object;
Mesh *me = ob->data;
@@ -3439,7 +3440,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
else if (dt == OB_SOLID) {
if (draw_flags & DRAW_MODIFIERS_PREVIEW) {
/* for object selection draws no shade */
if (flag & (DRAW_PICKING | DRAW_CONSTCOLOR)) {
if (dflag & (DRAW_PICKING | DRAW_CONSTCOLOR)) {
dm->drawFacesSolid(dm, NULL, 0, GPU_enable_material);
}
else {
@@ -3541,7 +3542,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
UI_ThemeColor(TH_GROUP_ACTIVE);
else if (ob->flag & OB_FROMGROUP)
UI_ThemeColorShade(TH_GROUP_ACTIVE, -16);
else if (flag != DRAW_CONSTCOLOR)
else if (dflag != DRAW_CONSTCOLOR)
UI_ThemeColor(is_obact ? TH_ACTIVE : TH_SELECT);
else
glColor3ub(80, 80, 80);
@@ -3550,7 +3551,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
if (ob->flag & OB_FROMGROUP)
UI_ThemeColor(TH_GROUP);
else {
if (ob->dtx & OB_DRAWWIRE && flag == DRAW_CONSTCOLOR)
if (ob->dtx & OB_DRAWWIRE && dflag == DRAW_CONSTCOLOR)
glColor3ub(80, 80, 80);
else
UI_ThemeColor(TH_WIRE);
@@ -3607,7 +3608,8 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
}
/* returns 1 if nothing was drawn, for detecting to draw an object center */
static int draw_mesh_object(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D *rv3d, Base *base, int dt, int flag)
static int draw_mesh_object(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D *rv3d, Base *base,
const short dt, const short dflag)
{
Object *ob = base->object;
Object *obedit = scene->obedit;
@@ -3671,7 +3673,7 @@ static int draw_mesh_object(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
(check_alpha) ? &do_alpha_after : NULL);
}
draw_mesh_fancy(scene, ar, v3d, rv3d, base, dt, flag);
draw_mesh_fancy(scene, ar, v3d, rv3d, base, dt, dflag);
GPU_end_object_materials();
@@ -3679,20 +3681,20 @@ static int draw_mesh_object(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
}
}
if ((flag & DRAW_PICKING) == 0 && (base->flag & OB_FROMDUPLI) == 0) {
if ((dflag & DRAW_PICKING) == 0 && (base->flag & OB_FROMDUPLI) == 0) {
/* GPU_begin_object_materials checked if this is needed */
if (do_alpha_after) {
if (ob->dtx & OB_DRAWXRAY) {
add_view3d_after(&v3d->afterdraw_xraytransp, base, flag);
ED_view3d_after_add(&v3d->afterdraw_xraytransp, base, dflag);
}
else {
add_view3d_after(&v3d->afterdraw_transp, base, flag);
ED_view3d_after_add(&v3d->afterdraw_transp, base, dflag);
}
}
else if (ob->dtx & OB_DRAWXRAY && ob->dtx & OB_DRAWTRANSP) {
/* special case xray+transp when alpha is 1.0, without this the object vanishes */
if (v3d->xray == 0 && v3d->transp == 0) {
add_view3d_after(&v3d->afterdraw_xray, base, flag);
ED_view3d_after_add(&v3d->afterdraw_xray, base, dflag);
}
}
}
@@ -3925,7 +3927,7 @@ static void drawCurveDMWired(Object *ob)
}
/* return 1 when nothing was drawn */
static int drawCurveDerivedMesh(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, int dt)
static int drawCurveDerivedMesh(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, const short dt)
{
Object *ob = base->object;
DerivedMesh *dm = ob->derivedFinal;
@@ -3958,7 +3960,7 @@ static int drawCurveDerivedMesh(Scene *scene, View3D *v3d, RegionView3D *rv3d, B
/* returns 1 when nothing was drawn */
static int drawDispList(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
int dt, const unsigned char ob_wire_col[4])
const short dt, const unsigned char ob_wire_col[4])
{
Object *ob = base->object;
ListBase *lb = NULL;
@@ -5585,7 +5587,7 @@ static void draw_editnurb(Object *ob, Nurb *nurb, int sel)
}
static void drawnurb(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, Nurb *nurb,
int dt, const unsigned char ob_wire_col[4])
const short dt, const unsigned char ob_wire_col[4])
{
ToolSettings *ts = scene->toolsettings;
Object *ob = base->object;
@@ -5913,7 +5915,7 @@ static void drawcone(const float vec[3], float radius, float height, float tmat[
}
/* return 1 if nothing was drawn */
static int drawmball(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
int dt, const unsigned char ob_wire_col[4])
const short dt, const unsigned char ob_wire_col[4])
{
Object *ob = base->object;
MetaBall *mb;
@@ -6547,7 +6549,7 @@ static void draw_object_wire_color(Scene *scene, Base *base, unsigned char r_ob_
}
/* flag can be DRAW_PICKING and/or DRAW_CONSTCOLOR, DRAW_SCENESET */
void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short dflag)
{
static int warning_recursive = 0;
ModifierData *md = NULL;
@@ -6581,12 +6583,12 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
return;
/* xray delay? */
if ((flag & DRAW_PICKING) == 0 && (base->flag & OB_FROMDUPLI) == 0) {
if ((dflag & DRAW_PICKING) == 0 && (base->flag & OB_FROMDUPLI) == 0) {
/* don't do xray in particle mode, need the z-buffer */
if (!(ob->mode & OB_MODE_PARTICLE_EDIT)) {
/* xray and transp are set when it is drawing the 2nd/3rd pass */
if (!v3d->xray && !v3d->transp && (ob->dtx & OB_DRAWXRAY) && !(ob->dtx & OB_DRAWTRANSP)) {
add_view3d_after(&v3d->afterdraw_xray, base, flag);
ED_view3d_after_add(&v3d->afterdraw_xray, base, dflag);
return;
}
}
@@ -6614,7 +6616,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
ED_view3d_init_mats_rv3d_gl(ob, rv3d);
/* which wire color */
if ((flag & DRAW_CONSTCOLOR) == 0) {
if ((dflag & DRAW_CONSTCOLOR) == 0) {
project_short(ar, ob->obmat[3], &base->sx);
@@ -6679,8 +6681,8 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
/* draw outline for selected objects, mesh does itself */
if ((v3d->flag & V3D_SELECT_OUTLINE) && ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) && ob->type != OB_MESH) {
if (dt > OB_WIRE && (ob->mode & OB_MODE_EDIT) == 0 && (flag & DRAW_SCENESET) == 0) {
if (!(ob->dtx & OB_DRAWWIRE) && (ob->flag & SELECT) && !(flag & DRAW_PICKING)) {
if (dt > OB_WIRE && (ob->mode & OB_MODE_EDIT) == 0 && (dflag & DRAW_SCENESET) == 0) {
if (!(ob->dtx & OB_DRAWWIRE) && (ob->flag & SELECT) && !(dflag & DRAW_PICKING)) {
drawObjectSelect(scene, v3d, ar, base, ob_wire_col);
}
@@ -6689,8 +6691,8 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
switch (ob->type) {
case OB_MESH:
empty_object = draw_mesh_object(scene, ar, v3d, rv3d, base, dt, flag);
if (flag != DRAW_CONSTCOLOR) dtx &= ~OB_DRAWWIRE; // mesh draws wire itself
empty_object = draw_mesh_object(scene, ar, v3d, rv3d, base, dt, dflag);
if (dflag != DRAW_CONSTCOLOR) dtx &= ~OB_DRAWWIRE; // mesh draws wire itself
break;
case OB_FONT:
@@ -6831,7 +6833,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
break;
case OB_LAMP:
if ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) {
drawlamp(scene, v3d, rv3d, base, dt, flag, ob_wire_col);
drawlamp(scene, v3d, rv3d, base, dt, dflag, ob_wire_col);
if (dtx || (base->flag & SELECT)) glMultMatrixf(ob->obmat);
}
break;
@@ -6839,12 +6841,12 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
if ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0 ||
(rv3d->persp == RV3D_CAMOB && v3d->camera == ob)) /* special exception for active camera */
{
drawcamera(scene, v3d, rv3d, base, flag, ob_wire_col);
drawcamera(scene, v3d, rv3d, base, dflag, ob_wire_col);
break;
}
case OB_SPEAKER:
if ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0)
drawspeaker(scene, v3d, rv3d, ob, flag);
drawspeaker(scene, v3d, rv3d, ob, dflag);
break;
case OB_LATTICE:
if ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) {
@@ -6862,7 +6864,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
else {
if (dt > OB_WIRE)
GPU_enable_material(0, NULL); /* we use default material */
empty_object = draw_armature(scene, v3d, ar, base, dt, flag, ob_wire_col, FALSE);
empty_object = draw_armature(scene, v3d, ar, base, dt, dflag, ob_wire_col, FALSE);
if (dt > OB_WIRE)
GPU_disable_material();
}
@@ -6876,7 +6878,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
if ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) {
if (ob->soft /*&& flag & OB_SBMOTION*/) {
if (ob->soft /*&& dflag & OB_SBMOTION*/) {
float mrt[3][3], msc[3][3], mtr[3][3];
SoftBody *sb = NULL;
float tipw = 0.5f, tiph = 0.5f, drawsize = 4.0f;
@@ -6901,7 +6903,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
/* code for new particle system */
if ((warning_recursive == 0) &&
(ob->particlesystem.first) &&
(flag & DRAW_PICKING) == 0 &&
(dflag & DRAW_PICKING) == 0 &&
(ob != scene->obedit)
)
{
@@ -6935,7 +6937,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
/* draw edit particles last so that they can draw over child particles */
if ( (warning_recursive == 0) &&
(flag & DRAW_PICKING) == 0 &&
(dflag & DRAW_PICKING) == 0 &&
(!scene->obedit))
{
@@ -7093,7 +7095,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
if (dtx & OB_DRAWNAME) {
/* patch for several 3d cards (IBM mostly) that crash on GL_SELECT with text drawing */
/* but, we also don't draw names for sets or duplicators */
if (flag == 0) {
if (dflag == 0) {
const float zero[3] = {0, 0, 0};
view3d_cached_text_draw_add(zero, ob->id.name + 2, 10, 0, ob_wire_col);
}
@@ -7151,13 +7153,13 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
do_draw_center = DESELECT;
if (do_draw_center != -1) {
if (flag & DRAW_PICKING) {
if (dflag & DRAW_PICKING) {
/* draw a single point for opengl selection */
glBegin(GL_POINTS);
glVertex3fv(ob->obmat[3]);
glEnd();
}
else if ((flag & DRAW_CONSTCOLOR) == 0) {
else if ((dflag & DRAW_CONSTCOLOR) == 0) {
/* we don't draw centers for duplicators and sets */
if (U.obcenter_dia > 0) {
/* check > 0 otherwise grease pencil can draw into the circle select which is annoying. */
@@ -7168,7 +7170,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
}
/* not for sets, duplicators or picking */
if (flag == 0 && (v3d->flag & V3D_HIDE_HELPLINES) == 0 && (v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) {
if (dflag == 0 && (v3d->flag & V3D_HIDE_HELPLINES) == 0 && (v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) {
ListBase *list;
/* draw hook center and offset line */
@@ -7510,7 +7512,7 @@ void draw_object_backbufsel(Scene *scene, View3D *v3d, RegionView3D *rv3d, Objec
/* helper function for drawing object instances - meshes */
static void draw_object_mesh_instance(Scene *scene, View3D *v3d, RegionView3D *rv3d,
Object *ob, int dt, int outline)
Object *ob, const short dt, int outline)
{
Mesh *me = ob->data;
DerivedMesh *dm = NULL, *edm = NULL;
@@ -7558,7 +7560,7 @@ static void draw_object_mesh_instance(Scene *scene, View3D *v3d, RegionView3D *r
if (dm) dm->release(dm);
}
void draw_object_instance(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, int dt, int outline)
void draw_object_instance(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, const short dt, int outline)
{
if (ob == NULL)
return;

View File

@@ -1728,17 +1728,17 @@ static void view3d_draw_bgpic_test(Scene *scene, ARegion *ar, View3D *v3d,
typedef struct View3DAfter {
struct View3DAfter *next, *prev;
struct Base *base;
int flag;
short dflag;
} View3DAfter;
/* temp storage of Objects that need to be drawn as last */
void add_view3d_after(ListBase *lb, Base *base, int flag)
void ED_view3d_after_add(ListBase *lb, Base *base, const short dflag)
{
View3DAfter *v3da = MEM_callocN(sizeof(View3DAfter), "View 3d after");
BLI_assert((base->flag & OB_FROMDUPLI) == 0);
BLI_addtail(lb, v3da);
v3da->base = base;
v3da->flag = flag;
v3da->dflag = dflag;
}
/* disables write in zbuffer and draws it over */
@@ -1751,7 +1751,7 @@ static void view3d_draw_transp(Scene *scene, ARegion *ar, View3D *v3d)
for (v3da = v3d->afterdraw_transp.first; v3da; v3da = next) {
next = v3da->next;
draw_object(scene, ar, v3d, v3da->base, v3da->flag);
draw_object(scene, ar, v3d, v3da->base, v3da->dflag);
BLI_remlink(&v3d->afterdraw_transp, v3da);
MEM_freeN(v3da);
}
@@ -1772,7 +1772,7 @@ static void view3d_draw_xray(Scene *scene, ARegion *ar, View3D *v3d, int clear)
v3d->xray = TRUE;
for (v3da = v3d->afterdraw_xray.first; v3da; v3da = next) {
next = v3da->next;
draw_object(scene, ar, v3d, v3da->base, v3da->flag);
draw_object(scene, ar, v3d, v3da->base, v3da->dflag);
BLI_remlink(&v3d->afterdraw_xray, v3da);
MEM_freeN(v3da);
}
@@ -1793,7 +1793,7 @@ static void view3d_draw_xraytransp(Scene *scene, ARegion *ar, View3D *v3d, int c
for (v3da = v3d->afterdraw_xraytransp.first; v3da; v3da = next) {
next = v3da->next;
draw_object(scene, ar, v3d, v3da->base, v3da->flag);
draw_object(scene, ar, v3d, v3da->base, v3da->dflag);
BLI_remlink(&v3d->afterdraw_xraytransp, v3da);
MEM_freeN(v3da);
}

View File

@@ -53,13 +53,17 @@ struct wmWindowManager;
#define BL_NEAR_CLIP 0.001
/* drawing flags: */
#define DRAW_PICKING 1
#define DRAW_CONSTCOLOR 2
#define DRAW_SCENESET 4
enum {
DRAW_PICKING = (1 << 0),
DRAW_CONSTCOLOR = (1 << 1),
DRAW_SCENESET = (1 << 2)
};
/* draw_mesh_fancy/draw_mesh_textured draw_flags */
#define DRAW_MODIFIERS_PREVIEW 1
#define DRAW_FACE_SELECT 2
enum {
DRAW_MODIFIERS_PREVIEW = (1 << 0),
DRAW_FACE_SELECT = (1 << 1)
};
/* view3d_header.c */
void VIEW3D_OT_layers(struct wmOperatorType *ot);
@@ -112,24 +116,27 @@ void draw_motion_paths_cleanup(View3D *v3d);
/* drawobject.c */
void draw_object(Scene *scene, struct ARegion *ar, View3D *v3d, Base *base, int flag);
int draw_glsl_material(Scene *scene, struct Object *ob, View3D *v3d, int dt);
void draw_object_instance(Scene *scene, View3D *v3d, RegionView3D *rv3d, struct Object *ob, int dt, int outline);
void draw_object(Scene *scene, struct ARegion *ar, View3D *v3d, Base *base, const short dflag);
int draw_glsl_material(Scene *scene, struct Object *ob, View3D *v3d, const short dt);
void draw_object_instance(Scene *scene, View3D *v3d, RegionView3D *rv3d, struct Object *ob, const short dt, int outline);
void draw_object_backbufsel(Scene *scene, View3D *v3d, RegionView3D *rv3d, struct Object *ob);
void drawaxes(float size, char drawtype);
void view3d_cached_text_draw_begin(void);
void view3d_cached_text_draw_add(const float co[3], const char *str, short xoffs, short flag, const unsigned char col[4]);
void view3d_cached_text_draw_end(View3D * v3d, ARegion * ar, int depth_write, float mat[][4]);
#define V3D_CACHE_TEXT_ZBUF (1 << 0)
#define V3D_CACHE_TEXT_WORLDSPACE (1 << 1)
#define V3D_CACHE_TEXT_ASCII (1 << 2)
#define V3D_CACHE_TEXT_GLOBALSPACE (1 << 3)
#define V3D_CACHE_TEXT_LOCALCLIP (1 << 4)
enum {
V3D_CACHE_TEXT_ZBUF = (1 << 0),
V3D_CACHE_TEXT_WORLDSPACE = (1 << 1),
V3D_CACHE_TEXT_ASCII = (1 << 2),
V3D_CACHE_TEXT_GLOBALSPACE = (1 << 3),
V3D_CACHE_TEXT_LOCALCLIP = (1 << 4)
};
/* drawarmature.c */
int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
int dt, int flag, const unsigned char ob_wire_col[4],
const short dt, const short dflag, const unsigned char ob_wire_col[4],
const short is_outline);
/* drawmesh.c */
@@ -142,7 +149,7 @@ void draw_mesh_paint(View3D *v3d, RegionView3D *rv3d,
void view3d_main_area_draw(const struct bContext *C, struct ARegion *ar);
void draw_depth(Scene *scene, struct ARegion *ar, View3D *v3d, int (*func)(void *));
void draw_depth_gpencil(Scene *scene, ARegion *ar, View3D *v3d);
void add_view3d_after(ListBase *lb, Base *base, int flag);
void ED_view3d_after_add(ListBase *lb, Base *base, const short dflag);
void circf(float x, float y, float rad);
void circ(float x, float y, float rad);