2.5
Finished a couple of XXX todo's in drawing code, attempt to fix subsurf crash... didnt work yet!
This commit is contained in:
parent
1ff595a28e
commit
bf9080d9c1
|
@ -459,9 +459,6 @@ int editmesh_get_first_deform_matrices(struct Object *, struct EditMesh *em, flo
|
|||
|
||||
void weight_to_rgb(float input, float *fr, float *fg, float *fb);
|
||||
|
||||
/* determines required DerivedMesh data according to view and edit modes */
|
||||
CustomDataMask get_viewedit_datamask();
|
||||
|
||||
/* convert layers requested by a GLSL material to actually available layers in
|
||||
* the DerivedMesh, with both a pointer for arrays and an offset for editmesh */
|
||||
typedef struct DMVertexAttribs {
|
||||
|
|
|
@ -32,11 +32,9 @@
|
|||
#ifndef BKE_CUSTOMDATA_H
|
||||
#define BKE_CUSTOMDATA_H
|
||||
|
||||
#include "BLO_sys_types.h" // for intptr_t support
|
||||
|
||||
struct CustomData;
|
||||
struct CustomDataLayer;
|
||||
typedef intptr_t CustomDataMask;
|
||||
typedef unsigned int CustomDataMask;
|
||||
|
||||
extern const CustomDataMask CD_MASK_BAREMESH;
|
||||
extern const CustomDataMask CD_MASK_MESH;
|
||||
|
|
|
@ -291,7 +291,7 @@ int modifiers_isParticleEnabled(struct Object *ob);
|
|||
struct Object *modifiers_isDeformedByArmature(struct Object *ob);
|
||||
struct Object *modifiers_isDeformedByLattice(struct Object *ob);
|
||||
int modifiers_usesArmature(struct Object *ob, struct bArmature *arm);
|
||||
int modifiers_isDeformed(struct Object *ob);
|
||||
int modifiers_isDeformed(struct Scene *scene, struct Object *ob);
|
||||
void modifier_freeTemporaryData(struct ModifierData *md);
|
||||
|
||||
int modifiers_indexInObject(struct Object *ob, struct ModifierData *md);
|
||||
|
|
|
@ -1412,47 +1412,6 @@ DerivedMesh *mesh_create_derived_for_modifier(Scene *scene, Object *ob, Modifier
|
|||
return dm;
|
||||
}
|
||||
|
||||
CustomDataMask get_viewedit_datamask()
|
||||
{
|
||||
#if 0
|
||||
XXX
|
||||
CustomDataMask mask = CD_MASK_BAREMESH;
|
||||
ScrArea *sa;
|
||||
/* check if we need tfaces & mcols due to face select or texture paint */
|
||||
if(FACESEL_PAINT_TEST || G.f & G_TEXTUREPAINT)
|
||||
mask |= CD_MASK_MTFACE | CD_MASK_MCOL;
|
||||
|
||||
/* check if we need tfaces & mcols due to view mode */
|
||||
for(sa = G.curscreen->areabase.first; sa; sa = sa->next) {
|
||||
if(sa->spacetype == SPACE_VIEW3D) {
|
||||
View3D *view = sa->spacedata.first;
|
||||
if(view->drawtype == OB_SHADED) {
|
||||
/* this includes normals for mesh_create_shadedColors */
|
||||
mask |= CD_MASK_MTFACE | CD_MASK_MCOL | CD_MASK_NORMAL | CD_MASK_ORCO;
|
||||
}
|
||||
if((view->drawtype == OB_TEXTURE) || ((view->drawtype == OB_SOLID) && (view->flag2 & V3D_SOLID_TEX))) {
|
||||
mask |= CD_MASK_MTFACE | CD_MASK_MCOL;
|
||||
|
||||
if((G.fileflags & G_FILE_GAME_MAT) &&
|
||||
(G.fileflags & G_FILE_GAME_MAT_GLSL)) {
|
||||
mask |= CD_MASK_ORCO;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* check if we need mcols due to vertex paint or weightpaint */
|
||||
if(G.f & G_VERTEXPAINT || G.f & G_WEIGHTPAINT)
|
||||
mask |= CD_MASK_MCOL;
|
||||
|
||||
if(G.f & G_SCULPTMODE)
|
||||
mask |= CD_MASK_MDISPS;
|
||||
|
||||
return mask;
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
static float *get_editmesh_orco_verts(EditMesh *em)
|
||||
{
|
||||
EditVert *eve;
|
||||
|
|
|
@ -8471,8 +8471,6 @@ void modifiers_clearErrors(Object *ob)
|
|||
qRedraw = 1;
|
||||
}
|
||||
}
|
||||
|
||||
// XXX if (qRedraw) allqueue(REDRAWBUTSEDIT, 0);
|
||||
}
|
||||
|
||||
void modifiers_foreachObjectLink(Object *ob, ObjectWalkFunc walk,
|
||||
|
@ -8538,7 +8536,6 @@ void modifier_setError(ModifierData *md, char *format, ...)
|
|||
|
||||
md->error = BLI_strdup(buffer);
|
||||
|
||||
// XXX allqueue(REDRAWBUTSEDIT, 0);
|
||||
}
|
||||
|
||||
/* used for buttons, to find out if the 'draw deformed in editmode' option is
|
||||
|
@ -8766,15 +8763,15 @@ int modifier_isDeformer(ModifierData *md)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int modifiers_isDeformed(Object *ob)
|
||||
int modifiers_isDeformed(Scene *scene, Object *ob)
|
||||
{
|
||||
ModifierData *md = modifiers_getVirtualModifierList(ob);
|
||||
|
||||
for (; md; md=md->next) {
|
||||
// XXX if(ob==obedit && (md->mode & eModifierMode_Editmode)==0);
|
||||
// else
|
||||
if(ob==scene->obedit && (md->mode & eModifierMode_Editmode)==0);
|
||||
else
|
||||
if(modifier_isDeformer(md))
|
||||
return 1;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -2273,7 +2273,7 @@ void object_handle_update(Scene *scene, Object *ob)
|
|||
|
||||
/* includes all keys and modifiers */
|
||||
if(ob->type==OB_MESH) {
|
||||
makeDerivedMesh(scene, ob, NULL, get_viewedit_datamask());
|
||||
makeDerivedMesh(scene, ob, NULL, CD_MASK_BAREMESH); // here was vieweditdatamask? XXX
|
||||
}
|
||||
else if(ob->type==OB_MBALL) {
|
||||
makeDispListMBall(scene, ob);
|
||||
|
|
|
@ -2108,7 +2108,7 @@ static void ccgDM_drawMappedFaces(DerivedMesh *dm, int (*setDrawOptions)(void *u
|
|||
if (draw) {
|
||||
if (draw==2) {
|
||||
glEnable(GL_POLYGON_STIPPLE);
|
||||
glPolygonStipple(0); //XXX stipple_quarttone);
|
||||
glPolygonStipple(stipple_quarttone);
|
||||
}
|
||||
|
||||
for (S=0; S<numVerts; S++) {
|
||||
|
|
|
@ -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(scene, ob, get_viewedit_datamask());
|
||||
DerivedMesh *dm= mesh_get_derived_final(scene, ob, v3d->customdata_mask);
|
||||
|
||||
if(!dm)
|
||||
return;
|
||||
|
@ -2278,7 +2278,7 @@ static void draw_mesh_fancy(Scene *scene, View3D *v3d, Base *base, int dt, int f
|
|||
dm->release(dm);
|
||||
shadeDispList(scene, base);
|
||||
dl = find_displist(&ob->disp, DL_VERTCOL);
|
||||
dm= mesh_get_derived_final(scene, ob, get_viewedit_datamask());
|
||||
dm= mesh_get_derived_final(scene, ob, v3d->customdata_mask);
|
||||
}
|
||||
|
||||
if ((v3d->flag&V3D_SELECT_OUTLINE) && (base->flag&SELECT) && !draw_wire) {
|
||||
|
@ -2371,7 +2371,7 @@ static int draw_mesh_object(Scene *scene, View3D *v3d, Base *base, int dt, int f
|
|||
finalDM = cageDM = editmesh_get_derived_base(ob, em);
|
||||
else
|
||||
cageDM = editmesh_get_derived_cage_and_final(scene, ob, em, &finalDM,
|
||||
get_viewedit_datamask());
|
||||
v3d->customdata_mask);
|
||||
|
||||
if(dt>OB_WIRE) {
|
||||
// no transp in editmode, the fancy draw over goes bad then
|
||||
|
@ -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(Scene *scene, Object *ob)
|
||||
static void bbs_mesh_solid(Scene *scene, View3D *v3d, Object *ob)
|
||||
{
|
||||
DerivedMesh *dm = mesh_get_derived_final(scene, ob, get_viewedit_datamask());
|
||||
DerivedMesh *dm = mesh_get_derived_final(scene, ob, v3d->customdata_mask);
|
||||
Mesh *me = (Mesh*)ob->data;
|
||||
|
||||
glColor3ub(0, 0, 0);
|
||||
|
@ -5408,7 +5408,7 @@ void draw_object_backbufsel(Scene *scene, View3D *v3d, Object *ob)
|
|||
|
||||
EM_free_index_arrays();
|
||||
}
|
||||
else bbs_mesh_solid(scene, ob);
|
||||
else bbs_mesh_solid(scene, v3d, ob);
|
||||
}
|
||||
break;
|
||||
case OB_CURVE:
|
||||
|
|
|
@ -187,7 +187,7 @@ static void view3d_main_area_draw(const bContext *C, ARegion *ar)
|
|||
ScrArea *sa= CTX_wm_area(C);
|
||||
View3D *v3d= sa->spacedata.first; /* XXX get from region */
|
||||
|
||||
drawview3dspace(CTX_data_scene(C), ar, v3d);
|
||||
drawview3dspace(CTX_wm_screen(C), CTX_data_scene(C), ar, v3d);
|
||||
}
|
||||
|
||||
/* add handlers, stuff you only do once or on area/region changes */
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
#include "DNA_action_types.h"
|
||||
#include "DNA_armature_types.h"
|
||||
#include "DNA_camera_types.h"
|
||||
#include "DNA_customdata_types.h"
|
||||
#include "DNA_group_types.h"
|
||||
#include "DNA_key_types.h"
|
||||
#include "DNA_object_types.h"
|
||||
|
@ -50,6 +51,7 @@
|
|||
#include "BLI_rand.h"
|
||||
|
||||
#include "BKE_anim.h"
|
||||
#include "BKE_customdata.h"
|
||||
#include "BKE_image.h"
|
||||
#include "BKE_ipo.h"
|
||||
#include "BKE_key.h"
|
||||
|
@ -70,6 +72,7 @@
|
|||
|
||||
#include "WM_api.h"
|
||||
|
||||
#include "ED_armature.h"
|
||||
#include "ED_keyframing.h"
|
||||
#include "ED_mesh.h"
|
||||
#include "ED_screen.h"
|
||||
|
@ -741,13 +744,13 @@ static void draw_selected_name(Scene *scene, Object *ob, View3D *v3d)
|
|||
|
||||
/* show name of active bone too (if possible) */
|
||||
if(arm->edbo) {
|
||||
// XXX EditBone *ebo;
|
||||
// for (ebo=G.edbo.first; ebo; ebo=ebo->next){
|
||||
// if ((ebo->flag & BONE_ACTIVE) && (ebo->layer & arm->layer)) {
|
||||
// name= ebo->name;
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
EditBone *ebo;
|
||||
for (ebo=arm->edbo->first; ebo; ebo=ebo->next){
|
||||
if ((ebo->flag & BONE_ACTIVE) && (ebo->layer & arm->layer)) {
|
||||
name= ebo->name;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(ob->pose && (ob->flag & OB_POSEMODE)) {
|
||||
bPoseChannel *pchan;
|
||||
|
@ -1791,8 +1794,50 @@ static void gpu_update_lamps_shadows(Scene *scene, View3D *v3d)
|
|||
BLI_freelistN(&shadows);
|
||||
}
|
||||
|
||||
/* *********************** customdata **************** */
|
||||
|
||||
void drawview3dspace(Scene *scene, ARegion *ar, View3D *v3d)
|
||||
/* goes over all modes and view3d settings */
|
||||
static CustomDataMask get_viewedit_datamask(bScreen *screen)
|
||||
{
|
||||
CustomDataMask mask = CD_MASK_BAREMESH;
|
||||
ScrArea *sa;
|
||||
|
||||
/* check if we need tfaces & mcols due to face select or texture paint */
|
||||
if(FACESEL_PAINT_TEST || G.f & G_TEXTUREPAINT)
|
||||
mask |= CD_MASK_MTFACE | CD_MASK_MCOL;
|
||||
|
||||
/* check if we need tfaces & mcols due to view mode */
|
||||
for(sa = screen->areabase.first; sa; sa = sa->next) {
|
||||
if(sa->spacetype == SPACE_VIEW3D) {
|
||||
View3D *view = sa->spacedata.first;
|
||||
if(view->drawtype == OB_SHADED) {
|
||||
/* this includes normals for mesh_create_shadedColors */
|
||||
mask |= CD_MASK_MTFACE | CD_MASK_MCOL | CD_MASK_NORMAL | CD_MASK_ORCO;
|
||||
}
|
||||
if((view->drawtype == OB_TEXTURE) || ((view->drawtype == OB_SOLID) && (view->flag2 & V3D_SOLID_TEX))) {
|
||||
mask |= CD_MASK_MTFACE | CD_MASK_MCOL;
|
||||
|
||||
if((G.fileflags & G_FILE_GAME_MAT) &&
|
||||
(G.fileflags & G_FILE_GAME_MAT_GLSL)) {
|
||||
mask |= CD_MASK_ORCO;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* check if we need mcols due to vertex paint or weightpaint */
|
||||
if(G.f & G_VERTEXPAINT || G.f & G_WEIGHTPAINT)
|
||||
mask |= CD_MASK_MCOL;
|
||||
|
||||
if(G.f & G_SCULPTMODE)
|
||||
mask |= CD_MASK_MDISPS;
|
||||
|
||||
return mask;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void drawview3dspace(bScreen *screen, Scene *scene, ARegion *ar, View3D *v3d)
|
||||
{
|
||||
Scene *sce;
|
||||
Base *base;
|
||||
|
@ -1800,6 +1845,9 @@ void drawview3dspace(Scene *scene, ARegion *ar, View3D *v3d)
|
|||
char retopo= 0, sculptparticle= 0;
|
||||
Object *obact = OBACT;
|
||||
|
||||
/* from now on all object derived meshes check this */
|
||||
v3d->customdata_mask= get_viewedit_datamask(screen);
|
||||
|
||||
/* update all objects, ipos, matrices, displists, etc. Flags set by depgraph or manual,
|
||||
no layer check here, gets correct flushed */
|
||||
/* sets first, we allow per definition current scene to have dependencies on sets */
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
|
||||
/* internal exports only */
|
||||
|
||||
struct bScreen;
|
||||
struct BoundBox;
|
||||
struct Object;
|
||||
struct DerivedMesh;
|
||||
|
@ -96,7 +97,7 @@ int draw_armature(Scene *scene, View3D *v3d, Base *base, int dt, int flag);
|
|||
void draw_mesh_textured(Scene *scene, View3D *v3d, Object *ob, struct DerivedMesh *dm, int faceselect);
|
||||
|
||||
/* view3d_draw.c */
|
||||
void drawview3dspace(Scene *scene, ARegion *ar, View3D *v3d);
|
||||
void drawview3dspace(struct bScreen *screen, Scene *scene, ARegion *ar, View3D *v3d);
|
||||
void draw_depth(Scene *scene, ARegion *ar, View3D *v3d, int (* func)(void *));
|
||||
void view3d_clr_clipping(void);
|
||||
void view3d_set_clipping(View3D *v3d);
|
||||
|
|
|
@ -2167,7 +2167,7 @@ static void createTransEditVerts(bContext *C, TransInfo *t)
|
|||
/* detect CrazySpace [tm] */
|
||||
if(propmode==0) {
|
||||
if(modifiers_getCageIndex(t->obedit, NULL)>=0) {
|
||||
if(modifiers_isDeformed(t->obedit)) {
|
||||
if(modifiers_isDeformed(t->scene, t->obedit)) {
|
||||
/* check if we can use deform matrices for modifier from the
|
||||
start up to stack, they are more accurate than quats */
|
||||
totleft= editmesh_get_first_deform_matrices(t->obedit, em, &defmats, &defcos);
|
||||
|
|
|
@ -152,8 +152,9 @@ typedef struct View3D {
|
|||
/* last view */
|
||||
float lviewquat[4];
|
||||
short lpersp, lview;
|
||||
|
||||
short pad5, pad6;
|
||||
|
||||
/* customdata flags from modes */
|
||||
unsigned int customdata_mask;
|
||||
} View3D;
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue