[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13617] trunk/blender/source/blender: == Multires ==
Nicholas Bishop
nicholasbishop at gmail.com
Sat Feb 9 21:50:26 CET 2008
Revision: 13617
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13617
Author: nicholasbishop
Date: 2008-02-09 21:50:25 +0100 (Sat, 09 Feb 2008)
Log Message:
-----------
== Multires ==
Fixed bug #8215, Crash with shaded view + multires mesh
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
trunk/blender/source/blender/makesdna/DNA_meshdata_types.h
trunk/blender/source/blender/render/intern/include/render_types.h
trunk/blender/source/blender/render/intern/source/convertblender.c
Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c 2008-02-09 19:05:15 UTC (rev 13616)
+++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c 2008-02-09 20:50:25 UTC (rev 13617)
@@ -2578,7 +2578,7 @@
{
float *vert_copy= NULL;
- if(me->mr) {
+ if(me->mr && !(me->mr->flag & MULTIRES_NO_RENDER)) {
MultiresLevel *lvl= NULL;
int i;
@@ -2604,16 +2604,21 @@
void multires_render_final(Object *ob, Mesh *me, DerivedMesh **dm, float *vert_copy,
const int orig_lvl, CustomDataMask dataMask)
{
- if(me->mr) {
+ if(me->mr && !(me->mr->flag & MULTIRES_NO_RENDER)) {
if((*dm)->getNumVerts(*dm) == me->totvert &&
(*dm)->getNumFaces(*dm) == me->totface) {
MultiresLevel *lvl= multires_level_n(me->mr, BLI_countlist(&me->mr->levels));
DerivedMesh *old= NULL;
+ MVert *vertdup= NULL;
int i;
- (*dm)->copyVertArray(*dm, me->mvert);
+ /* Copy the verts into the mesh */
+ vertdup= (*dm)->dupVertArray(*dm);
(*dm)->release(*dm);
+ for(i=0; i<me->totvert; ++i)
+ me->mvert[i]= vertdup[i];
+ /* Go to the render level */
me->mr->newlvl= me->mr->renderlvl;
multires_set_level(ob, me, 1);
(*dm)= getMeshDerivedMesh(me, ob, NULL);
Modified: trunk/blender/source/blender/makesdna/DNA_meshdata_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_meshdata_types.h 2008-02-09 19:05:15 UTC (rev 13616)
+++ trunk/blender/source/blender/makesdna/DNA_meshdata_types.h 2008-02-09 20:50:25 UTC (rev 13617)
@@ -146,7 +146,7 @@
MVert *verts;
unsigned char level_count, current, newlvl, edgelvl, pinlvl, renderlvl;
- unsigned char use_col, pad;
+ unsigned char use_col, flag;
/* Special level 1 data that cannot be modified from other levels */
CustomData vdata;
@@ -250,4 +250,7 @@
#define TF_PIN3 64
#define TF_PIN4 128
+/* multires->flag */
+#define MULTIRES_NO_RENDER 1
+
#endif
Modified: trunk/blender/source/blender/render/intern/include/render_types.h
===================================================================
--- trunk/blender/source/blender/render/intern/include/render_types.h 2008-02-09 19:05:15 UTC (rev 13616)
+++ trunk/blender/source/blender/render/intern/include/render_types.h 2008-02-09 20:50:25 UTC (rev 13617)
@@ -491,6 +491,7 @@
#define R_LAMPHALO 8
#define R_GLOB_NOPUNOFLIP 16
#define R_NEED_TANGENT 32
+#define R_SKIP_MULTIRES 64
/* vlakren->flag (vlak = face in dutch) char!!! */
#define R_SMOOTH 1
Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c 2008-02-09 19:05:15 UTC (rev 13616)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c 2008-02-09 20:50:25 UTC (rev 13617)
@@ -2985,6 +2985,13 @@
if(need_orco)
mask |= CD_MASK_ORCO;
+ if(me->mr) {
+ if(re->flag & R_SKIP_MULTIRES)
+ me->mr->flag |= MULTIRES_NO_RENDER;
+ else
+ me->mr->flag &= ~MULTIRES_NO_RENDER;
+ }
+
dm= mesh_create_derived_render(ob, mask);
if(dm==NULL) return; /* in case duplicated object fails? */
@@ -5070,6 +5077,8 @@
re->r.mode &= ~R_OSA;
re->flag |= R_GLOB_NOPUNOFLIP;
re->excludeob= actob;
+ if(type == RE_BAKE_LIGHT)
+ re->flag |= R_SKIP_MULTIRES;
if(type==RE_BAKE_NORMALS && re->r.bake_normal_space==R_BAKE_SPACE_TANGENT)
re->flag |= R_NEED_TANGENT;
More information about the Bf-blender-cvs
mailing list