From cfbce399aa8129c8fb49984df64bd8a096a34368 Mon Sep 17 00:00:00 2001 From: Alejandro Conty Estevez Date: Thu, 17 Jun 2004 11:24:30 +0000 Subject: [PATCH] These are changes necessary for building with msvc in a near future. Just making sure memory is always allocated and freed in the same binary object, which seems to be mandatory on msvc if you don't have the comercial version. If you are using this code you need to syncronize with yafray cvs also, or it won't work. Binaries for os x are updated in the link I gave in my last commit. --- .../blender/yafray/intern/export_Plugin.cpp | 79 +++++++++---------- source/blender/yafray/intern/export_Plugin.h | 12 +-- source/blender/yafray/intern/yafexternal.h | 4 +- 3 files changed, 46 insertions(+), 49 deletions(-) diff --git a/source/blender/yafray/intern/export_Plugin.cpp b/source/blender/yafray/intern/export_Plugin.cpp index 2baacc1a5c0..08919292e57 100644 --- a/source/blender/yafray/intern/export_Plugin.cpp +++ b/source/blender/yafray/intern/export_Plugin.cpp @@ -688,50 +688,50 @@ void yafrayPluginRender_t::writeMaterialsAndModulators() } } -void yafrayPluginRender_t::genUVcoords(vector *uvcoords,VlakRen *vlr,TFace* uvc) +void yafrayPluginRender_t::genUVcoords(vector &uvcoords,VlakRen *vlr,TFace* uvc) { if (uvc) { // use correct uv coords for this triangle if (vlr->flag & R_FACE_SPLIT) { - uvcoords->push_back(uvc->uv[0][0]);uvcoords->push_back(1-uvc->uv[0][1]); - uvcoords->push_back(uvc->uv[2][0]);uvcoords->push_back(1-uvc->uv[2][1]); - uvcoords->push_back(uvc->uv[3][0]);uvcoords->push_back(1-uvc->uv[3][1]); + uvcoords.push_back(uvc->uv[0][0]);uvcoords.push_back(1-uvc->uv[0][1]); + uvcoords.push_back(uvc->uv[2][0]);uvcoords.push_back(1-uvc->uv[2][1]); + uvcoords.push_back(uvc->uv[3][0]);uvcoords.push_back(1-uvc->uv[3][1]); } else { - uvcoords->push_back(uvc->uv[0][0]);uvcoords->push_back(1-uvc->uv[0][1]); - uvcoords->push_back(uvc->uv[1][0]);uvcoords->push_back(1-uvc->uv[1][1]); - uvcoords->push_back(uvc->uv[2][0]);uvcoords->push_back(1-uvc->uv[2][1]); + uvcoords.push_back(uvc->uv[0][0]);uvcoords.push_back(1-uvc->uv[0][1]); + uvcoords.push_back(uvc->uv[1][0]);uvcoords.push_back(1-uvc->uv[1][1]); + uvcoords.push_back(uvc->uv[2][0]);uvcoords.push_back(1-uvc->uv[2][1]); } } else { - uvcoords->push_back(0);uvcoords->push_back(0); - uvcoords->push_back(0);uvcoords->push_back(0); - uvcoords->push_back(0);uvcoords->push_back(0); + uvcoords.push_back(0);uvcoords.push_back(0); + uvcoords.push_back(0);uvcoords.push_back(0); + uvcoords.push_back(0);uvcoords.push_back(0); } } -void yafrayPluginRender_t::genCompleUVcoords(vector *uvcoords,/*VlakRen *vlr,*/TFace* uvc) +void yafrayPluginRender_t::genCompleUVcoords(vector &uvcoords,/*VlakRen *vlr,*/TFace* uvc) { if (uvc) { // use correct uv coords for this triangle - uvcoords->push_back(uvc->uv[2][0]);uvcoords->push_back(1-uvc->uv[2][1]); - uvcoords->push_back(uvc->uv[3][0]);uvcoords->push_back(1-uvc->uv[3][1]); - uvcoords->push_back(uvc->uv[0][0]);uvcoords->push_back(1-uvc->uv[0][1]); + uvcoords.push_back(uvc->uv[2][0]);uvcoords.push_back(1-uvc->uv[2][1]); + uvcoords.push_back(uvc->uv[3][0]);uvcoords.push_back(1-uvc->uv[3][1]); + uvcoords.push_back(uvc->uv[0][0]);uvcoords.push_back(1-uvc->uv[0][1]); } else { - uvcoords->push_back(0);uvcoords->push_back(0); - uvcoords->push_back(0);uvcoords->push_back(0); - uvcoords->push_back(0);uvcoords->push_back(0); + uvcoords.push_back(0);uvcoords.push_back(0); + uvcoords.push_back(0);uvcoords.push_back(0); + uvcoords.push_back(0);uvcoords.push_back(0); } } -void yafrayPluginRender_t::genVcol(vector *vcol,VlakRen *vlr, +void yafrayPluginRender_t::genVcol(vector &vcol,VlakRen *vlr, int p1,int p2,int p3,bool EXPORT_VCOL) { if ((EXPORT_VCOL) && (vlr->vcol)) @@ -741,26 +741,26 @@ void yafrayPluginRender_t::genVcol(vector *vcol,VlakRen *vlr, vr = ((vlr->vcol[p1] >> 24) & 255)/255.0; vg = ((vlr->vcol[p1] >> 16) & 255)/255.0; vb = ((vlr->vcol[p1] >> 8) & 255)/255.0; - vcol->push_back(vr);vcol->push_back(vg);vcol->push_back(vb); + vcol.push_back(vr);vcol.push_back(vg);vcol.push_back(vb); vr = ((vlr->vcol[p2] >> 24) & 255)/255.0; vg = ((vlr->vcol[p2] >> 16) & 255)/255.0; vb = ((vlr->vcol[p2] >> 8) & 255)/255.0; - vcol->push_back(vr);vcol->push_back(vg);vcol->push_back(vb); + vcol.push_back(vr);vcol.push_back(vg);vcol.push_back(vb); vr = ((vlr->vcol[p3] >> 24) & 255)/255.0; vg = ((vlr->vcol[p3] >> 16) & 255)/255.0; vb = ((vlr->vcol[p3] >> 8) & 255)/255.0; - vcol->push_back(vr);vcol->push_back(vg);vcol->push_back(vb); + vcol.push_back(vr);vcol.push_back(vg);vcol.push_back(vb); } else { - vcol->push_back(0);vcol->push_back(0);vcol->push_back(0); - vcol->push_back(0);vcol->push_back(0);vcol->push_back(0); - vcol->push_back(0);vcol->push_back(0);vcol->push_back(0); + vcol.push_back(0);vcol.push_back(0);vcol.push_back(0); + vcol.push_back(0);vcol.push_back(0);vcol.push_back(0); + vcol.push_back(0);vcol.push_back(0);vcol.push_back(0); } } void yafrayPluginRender_t::genFace(vector &faces,vector &shaders,vector &faceshader, - vector *uvcoords,vector *vcol, + vector &uvcoords,vector &vcol, map &vert_idx,VlakRen *vlr, bool has_orco,bool has_uv,bool has_vcol) { @@ -801,7 +801,7 @@ void yafrayPluginRender_t::genFace(vector &faces,vector &shaders,ve } void yafrayPluginRender_t::genCompleFace(vector &faces,/*vector &shaders,*/vector &faceshader, - vector *uvcoords,vector *vcol, + vector &uvcoords,vector &vcol, map &vert_idx,VlakRen *vlr, bool has_orco,bool has_uv,bool has_vcol) { @@ -824,7 +824,7 @@ void yafrayPluginRender_t::genCompleFace(vector &faces,/*vector &sh if(has_vcol) genVcol(vcol,vlr,2,3,0,EXPORT_VCOL); } -void yafrayPluginRender_t::genVertices(vector *verts,int &vidx, +void yafrayPluginRender_t::genVertices(vector &verts,int &vidx, map &vert_idx,VlakRen* vlr,bool has_orco) { VertRen* ver; @@ -832,33 +832,33 @@ void yafrayPluginRender_t::genVertices(vector *verts,int &vid { vert_idx[vlr->v1] = vidx++; ver = vlr->v1; - verts->push_back(yafray::point3d_t(ver->co[0],ver->co[1],ver->co[2])); + verts.push_back(yafray::point3d_t(ver->co[0],ver->co[1],ver->co[2])); if (has_orco) - verts->push_back(yafray::point3d_t(ver->orco[0],ver->orco[1],ver->orco[2])); + verts.push_back(yafray::point3d_t(ver->orco[0],ver->orco[1],ver->orco[2])); } if (vert_idx.find(vlr->v2)==vert_idx.end()) { vert_idx[vlr->v2] = vidx++; ver = vlr->v2; - verts->push_back(yafray::point3d_t(ver->co[0],ver->co[1],ver->co[2])); + verts.push_back(yafray::point3d_t(ver->co[0],ver->co[1],ver->co[2])); if (has_orco) - verts->push_back(yafray::point3d_t(ver->orco[0],ver->orco[1],ver->orco[2])); + verts.push_back(yafray::point3d_t(ver->orco[0],ver->orco[1],ver->orco[2])); } if (vert_idx.find(vlr->v3)==vert_idx.end()) { vert_idx[vlr->v3] = vidx++; ver = vlr->v3; - verts->push_back(yafray::point3d_t(ver->co[0],ver->co[1],ver->co[2])); + verts.push_back(yafray::point3d_t(ver->co[0],ver->co[1],ver->co[2])); if (has_orco) - verts->push_back(yafray::point3d_t(ver->orco[0],ver->orco[1],ver->orco[2])); + verts.push_back(yafray::point3d_t(ver->orco[0],ver->orco[1],ver->orco[2])); } if ((vlr->v4) && (vert_idx.find(vlr->v4)==vert_idx.end())) { vert_idx[vlr->v4] = vidx++; ver = vlr->v4; - verts->push_back(yafray::point3d_t(ver->co[0],ver->co[1],ver->co[2])); + verts.push_back(yafray::point3d_t(ver->co[0],ver->co[1],ver->co[2])); if (has_orco) - verts->push_back(yafray::point3d_t(ver->orco[0],ver->orco[1],ver->orco[2])); + verts.push_back(yafray::point3d_t(ver->orco[0],ver->orco[1],ver->orco[2])); } } @@ -900,9 +900,8 @@ void yafrayPluginRender_t::writeObject(Object* obj, const vector &VLR_ if(fmat==NULL) continue; if((fmat->mode & (MA_VERTEXCOL|MA_VERTEXCOLP))!=0) {has_vcol=true;break;}; } - vector *verts=new vector; - vector *vcol=NULL; - if(has_vcol) vcol=new vector; + vector verts; + vector vcol; // now all vertices map vert_idx; // for removing duplicate verts and creating an index list int vidx = 0; // vertex index counter @@ -918,9 +917,7 @@ void yafrayPluginRender_t::writeObject(Object* obj, const vector &VLR_ vector faces; vector shaders; vector faceshader; - vector *uvcoords=NULL; - if(has_uv) - uvcoords=new vector; + vector uvcoords; for (vector::const_iterator fci2=VLR_list.begin(); fci2!=VLR_list.end();++fci2) { diff --git a/source/blender/yafray/intern/export_Plugin.h b/source/blender/yafray/intern/export_Plugin.h index 1defad65922..775156a7e71 100644 --- a/source/blender/yafray/intern/export_Plugin.h +++ b/source/blender/yafray/intern/export_Plugin.h @@ -36,19 +36,19 @@ class yafrayPluginRender_t : public yafrayRender_t virtual bool initExport(); virtual bool finishExport(); - void genUVcoords(std::vector *uvcoords,VlakRen *vlr,TFace* uvc); - void genCompleUVcoords(std::vector *uvcoords,/*VlakRen *vlr,*/TFace* uvc); - void genVcol(std::vector *vcol,VlakRen *vlr, + void genUVcoords(std::vector &uvcoords,VlakRen *vlr,TFace* uvc); + void genCompleUVcoords(std::vector &uvcoords,/*VlakRen *vlr,*/TFace* uvc); + void genVcol(std::vector &vcol,VlakRen *vlr, int p1,int p2,int p3,bool EXPORT_VCOL); void genFace(std::vector &faces,std::vector &shaders,std::vector &faceshader, - std::vector *uvcoords,std::vector *vcol, + std::vector &uvcoords,std::vector &vcol, std::map &vert_idx,VlakRen *vlr, bool has_orco,bool has_uv,bool has_vcol); void genCompleFace(std::vector &faces,/*std::vector &shaders,*/std::vector &faceshader, - std::vector *uvcoords,std::vector *vcol, + std::vector &uvcoords,std::vector &vcol, std::map &vert_idx,VlakRen *vlr, bool has_orco,bool has_uv,bool has_vcol); - void genVertices(std::vector *verts,int &vidx, + void genVertices(std::vector &verts,int &vidx, std::map &vert_idx,VlakRen* vlr,bool has_orco); }; diff --git a/source/blender/yafray/intern/yafexternal.h b/source/blender/yafray/intern/yafexternal.h index 2ff95a13611..2cf1b0a0dd1 100644 --- a/source/blender/yafray/intern/yafexternal.h +++ b/source/blender/yafray/intern/yafexternal.h @@ -141,8 +141,8 @@ class yafrayInterface_t : public renderEnvironment_t virtual void transformPush(float *m)=0; virtual void transformPop()=0; virtual void addObject_trimesh(const std::string &name, - std::vector *verts, const std::vector &faces, - std::vector *uvcoords, std::vector *vcol, + std::vector &verts, const std::vector &faces, + std::vector &uvcoords, std::vector &vcol, const std::vector &shaders,const std::vector &faceshader, float sm_angle,bool castShadows,bool useR,bool receiveR,bool caus,bool has_orco, const color_t &caus_rcolor,const color_t &caus_tcolor,float caus_IOR)=0;