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.
This commit is contained in:
Alejandro Conty Estevez 2004-06-17 11:24:30 +00:00
parent a78ad46c0d
commit cfbce399aa
3 changed files with 46 additions and 49 deletions

@ -688,50 +688,50 @@ void yafrayPluginRender_t::writeMaterialsAndModulators()
}
}
void yafrayPluginRender_t::genUVcoords(vector<yafray::GFLOAT> *uvcoords,VlakRen *vlr,TFace* uvc)
void yafrayPluginRender_t::genUVcoords(vector<yafray::GFLOAT> &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<yafray::GFLOAT> *uvcoords,/*VlakRen *vlr,*/TFace* uvc)
void yafrayPluginRender_t::genCompleUVcoords(vector<yafray::GFLOAT> &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<yafray::CFLOAT> *vcol,VlakRen *vlr,
void yafrayPluginRender_t::genVcol(vector<yafray::CFLOAT> &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<yafray::CFLOAT> *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<int> &faces,vector<string> &shaders,vector<int> &faceshader,
vector<yafray::GFLOAT> *uvcoords,vector<yafray::CFLOAT> *vcol,
vector<yafray::GFLOAT> &uvcoords,vector<yafray::CFLOAT> &vcol,
map<VertRen*, int> &vert_idx,VlakRen *vlr,
bool has_orco,bool has_uv,bool has_vcol)
{
@ -801,7 +801,7 @@ void yafrayPluginRender_t::genFace(vector<int> &faces,vector<string> &shaders,ve
}
void yafrayPluginRender_t::genCompleFace(vector<int> &faces,/*vector<string> &shaders,*/vector<int> &faceshader,
vector<yafray::GFLOAT> *uvcoords,vector<yafray::CFLOAT> *vcol,
vector<yafray::GFLOAT> &uvcoords,vector<yafray::CFLOAT> &vcol,
map<VertRen*, int> &vert_idx,VlakRen *vlr,
bool has_orco,bool has_uv,bool has_vcol)
{
@ -824,7 +824,7 @@ void yafrayPluginRender_t::genCompleFace(vector<int> &faces,/*vector<string> &sh
if(has_vcol) genVcol(vcol,vlr,2,3,0,EXPORT_VCOL);
}
void yafrayPluginRender_t::genVertices(vector<yafray::point3d_t> *verts,int &vidx,
void yafrayPluginRender_t::genVertices(vector<yafray::point3d_t> &verts,int &vidx,
map<VertRen*, int> &vert_idx,VlakRen* vlr,bool has_orco)
{
VertRen* ver;
@ -832,33 +832,33 @@ void yafrayPluginRender_t::genVertices(vector<yafray::point3d_t> *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<VlakRen*> &VLR_
if(fmat==NULL) continue;
if((fmat->mode & (MA_VERTEXCOL|MA_VERTEXCOLP))!=0) {has_vcol=true;break;};
}
vector<yafray::point3d_t> *verts=new vector<yafray::point3d_t>;
vector<yafray::CFLOAT> *vcol=NULL;
if(has_vcol) vcol=new vector<yafray::CFLOAT>;
vector<yafray::point3d_t> verts;
vector<yafray::CFLOAT> vcol;
// now all vertices
map<VertRen*, int> 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<VlakRen*> &VLR_
vector<int> faces;
vector<string> shaders;
vector<int> faceshader;
vector<yafray::GFLOAT> *uvcoords=NULL;
if(has_uv)
uvcoords=new vector<yafray::GFLOAT>;
vector<yafray::GFLOAT> uvcoords;
for (vector<VlakRen*>::const_iterator fci2=VLR_list.begin();
fci2!=VLR_list.end();++fci2)
{

@ -36,19 +36,19 @@ class yafrayPluginRender_t : public yafrayRender_t
virtual bool initExport();
virtual bool finishExport();
void genUVcoords(std::vector<yafray::GFLOAT> *uvcoords,VlakRen *vlr,TFace* uvc);
void genCompleUVcoords(std::vector<yafray::GFLOAT> *uvcoords,/*VlakRen *vlr,*/TFace* uvc);
void genVcol(std::vector<yafray::CFLOAT> *vcol,VlakRen *vlr,
void genUVcoords(std::vector<yafray::GFLOAT> &uvcoords,VlakRen *vlr,TFace* uvc);
void genCompleUVcoords(std::vector<yafray::GFLOAT> &uvcoords,/*VlakRen *vlr,*/TFace* uvc);
void genVcol(std::vector<yafray::CFLOAT> &vcol,VlakRen *vlr,
int p1,int p2,int p3,bool EXPORT_VCOL);
void genFace(std::vector<int> &faces,std::vector<std::string> &shaders,std::vector<int> &faceshader,
std::vector<yafray::GFLOAT> *uvcoords,std::vector<yafray::CFLOAT> *vcol,
std::vector<yafray::GFLOAT> &uvcoords,std::vector<yafray::CFLOAT> &vcol,
std::map<VertRen*, int> &vert_idx,VlakRen *vlr,
bool has_orco,bool has_uv,bool has_vcol);
void genCompleFace(std::vector<int> &faces,/*std::vector<std::string> &shaders,*/std::vector<int> &faceshader,
std::vector<yafray::GFLOAT> *uvcoords,std::vector<yafray::CFLOAT> *vcol,
std::vector<yafray::GFLOAT> &uvcoords,std::vector<yafray::CFLOAT> &vcol,
std::map<VertRen*, int> &vert_idx,VlakRen *vlr,
bool has_orco,bool has_uv,bool has_vcol);
void genVertices(std::vector<yafray::point3d_t> *verts,int &vidx,
void genVertices(std::vector<yafray::point3d_t> &verts,int &vidx,
std::map<VertRen*, int> &vert_idx,VlakRen* vlr,bool has_orco);
};

@ -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<point3d_t> *verts, const std::vector<int> &faces,
std::vector<GFLOAT> *uvcoords, std::vector<CFLOAT> *vcol,
std::vector<point3d_t> &verts, const std::vector<int> &faces,
std::vector<GFLOAT> &uvcoords, std::vector<CFLOAT> &vcol,
const std::vector<std::string> &shaders,const std::vector<int> &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;