From 88b556fd57701b6b6cfc5b47ab1c4f31676ade85 Mon Sep 17 00:00:00 2001 From: Alfredo de Greef Date: Tue, 23 Nov 2004 06:10:03 +0000 Subject: Possibly related to bug #1851: orco coordinates were assumed to be valid when pointers were non-null, this seems to have been a wrong assumption, pointers were probably unitialized (but only for some objects like surfaces?), so when the export code tried to access them, it crashed. Now the rendermaterial texco flag is tested instead, which probably is how it should have been done in the first place... --- source/blender/yafray/intern/export_File.cpp | 7 ++++--- source/blender/yafray/intern/export_Plugin.cpp | 7 ++++++- 2 files changed, 10 insertions(+), 4 deletions(-) (limited to 'source/blender/yafray/intern') diff --git a/source/blender/yafray/intern/export_File.cpp b/source/blender/yafray/intern/export_File.cpp index 9ac6d1b1e90..49811c5a336 100755 --- a/source/blender/yafray/intern/export_File.cpp +++ b/source/blender/yafray/intern/export_File.cpp @@ -985,9 +985,10 @@ void yafrayFileRender_t::writeObject(Object* obj, const vector &VLR_li ostr << "\t\n"; xmlfile << ostr.str(); - // if any face in the Blender mesh uses an orco texture, every face has orco coords, - // so only need to check the first facevtx.orco in the list if they need to be exported - bool EXPORT_ORCO = (face0->v1->orco!=NULL); + // Export orco coords test. + // Previously was done by checking orco pointer, however this can be non-null but still not initialized. + // Test the rendermaterial texco flag instead. + bool EXPORT_ORCO = ((face0mat->ren->texco & TEXCO_ORCO)!=0); string has_orco = "off"; if (EXPORT_ORCO) has_orco = "on"; diff --git a/source/blender/yafray/intern/export_Plugin.cpp b/source/blender/yafray/intern/export_Plugin.cpp index a46f30b4be1..9a511cc5d7c 100644 --- a/source/blender/yafray/intern/export_Plugin.cpp +++ b/source/blender/yafray/intern/export_Plugin.cpp @@ -1123,7 +1123,12 @@ void yafrayPluginRender_t::writeObject(Object* obj, const vector &VLR_ tr = face0mat->ray_mirror; caus_rcolor.set(face0mat->mirr*tr, face0mat->mirg*tr, face0mat->mirb*tr); } - bool has_orco = (face0->v1->orco!=NULL); + + // Export orco coords test. + // Previously was done by checking orco pointer, however this can be non-null but still not initialized. + // Test the rendermaterial texco flag instead. + bool has_orco = ((face0mat->ren->texco & TEXCO_ORCO)!=0); + bool no_auto = true; //in case non-mesh, or mesh has no autosmooth float sm_angle = 0.1f; if (obj->type==OB_MESH) -- cgit v1.2.3