diff options
Diffstat (limited to 'source/blender/editors/object/object_bake.c')
-rw-r--r-- | source/blender/editors/object/object_bake.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/source/blender/editors/object/object_bake.c b/source/blender/editors/object/object_bake.c index 5dc1c1b0f03..b1b7665d055 100644 --- a/source/blender/editors/object/object_bake.c +++ b/source/blender/editors/object/object_bake.c @@ -369,14 +369,14 @@ static void do_multires_bake(MultiresBakeRender *bkr, Image* ima, MPassKnownData const int lvl= bkr->lvl; const int tot_face= dm->getNumFaces(dm); MVert *mvert= dm->getVertArray(dm); - MFace *mface= dm->getFaceArray(dm); - MTFace *mtface= dm->getFaceDataArray(dm, CD_MTFACE); + MFace *mface= dm->getTessFaceArray(dm); + MTFace *mtface= dm->getTessFaceDataArray(dm, CD_MTFACE); float *pvtangent= NULL; if(CustomData_get_layer_index(&dm->faceData, CD_TANGENT) == -1) DM_add_tangent_layer(dm); - pvtangent= DM_get_face_data_layer(dm, CD_TANGENT); + pvtangent= DM_get_tessface_data_layer(dm, CD_TANGENT); if(tot_face > 0) { /* sanity check */ int f= 0; @@ -387,7 +387,7 @@ static void do_multires_bake(MultiresBakeRender *bkr, Image* ima, MPassKnownData data.mvert= mvert; data.mtface= mtface; data.pvtangent= pvtangent; - data.precomputed_normals= dm->getFaceDataArray(dm, CD_NORMAL); /* don't strictly need this */ + data.precomputed_normals= dm->getTessFaceDataArray(dm, CD_NORMAL); /* don't strictly need this */ data.w= ibuf->x; data.h= ibuf->y; data.lores_dm= dm; @@ -514,7 +514,7 @@ static void get_ccgdm_data(DerivedMesh *lodm, DerivedMesh *hidm, const int *orig int grid_size, S, face_side; int *grid_offset, g_index; - lodm->getFace(lodm, face_index, &mface); + lodm->getTessFace(lodm, face_index, &mface); grid_size= hidm->getGridSize(hidm); grid_data= hidm->getGridData(hidm); @@ -619,7 +619,7 @@ static void *init_heights_data(MultiresBakeRender *bkr, Image *ima) height_data->ssdm= subsurf_make_derived_from_derived(bkr->lores_dm, &smd, 0, NULL, 0, 0, 0); } - height_data->origindex= lodm->getFaceDataArray(lodm, CD_ORIGINDEX); + height_data->origindex= lodm->getTessFaceDataArray(lodm, CD_ORIGINDEX); return (void*)height_data; } @@ -631,7 +631,7 @@ static void *init_normal_data(MultiresBakeRender *bkr, Image *UNUSED(ima)) normal_data= MEM_callocN(sizeof(MNormalBakeData), "MultiresBake normalData"); - normal_data->origindex= lodm->getFaceDataArray(lodm, CD_ORIGINDEX); + normal_data->origindex= lodm->getTessFaceDataArray(lodm, CD_ORIGINDEX); return (void*)normal_data; } @@ -702,7 +702,7 @@ static void apply_heights_callback(DerivedMesh *lores_dm, DerivedMesh *hires_dm, int pixel= ibuf->x*y + x; float vec[3], p0[3], p1[3], n[3], len; - lores_dm->getFace(lores_dm, face_index, &mface); + lores_dm->getTessFace(lores_dm, face_index, &mface); st0= mtface[face_index].uv[0]; st1= mtface[face_index].uv[1]; @@ -722,7 +722,7 @@ static void apply_heights_callback(DerivedMesh *lores_dm, DerivedMesh *hires_dm, if(height_data->ssdm) { get_ccgdm_data(lores_dm, height_data->ssdm, height_data->origindex, 0, face_index, uv[0], uv[1], p0, n); } else { - lores_dm->getFace(lores_dm, face_index, &mface); + lores_dm->getTessFace(lores_dm, face_index, &mface); if(mface.v4) { interp_bilinear_mface(lores_dm, &mface, uv[0], uv[1], 1, p0); @@ -769,7 +769,7 @@ static void apply_tangmat_callback(DerivedMesh *lores_dm, DerivedMesh *hires_dm, int pixel= ibuf->x*y + x; float n[3], vec[3], tmp[3]= {0.5, 0.5, 0.5}; - lores_dm->getFace(lores_dm, face_index, &mface); + lores_dm->getTessFace(lores_dm, face_index, &mface); st0= mtface[face_index].uv[0]; st1= mtface[face_index].uv[1]; @@ -990,8 +990,11 @@ static DerivedMesh *multiresbake_create_loresdm(Scene *scene, Object *ob, int *l *lvl= mmd->lvl; if(*lvl==0) { + + /* BMESH_TODO, baking from level zero currently doesnt give correct results */ + DerivedMesh *tmp_dm= CDDM_from_mesh(me, ob); - dm= CDDM_copy(tmp_dm); + dm= CDDM_copy(tmp_dm, 0); tmp_dm->release(tmp_dm); } else { MultiresModifierData tmp_mmd= *mmd; |