Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/yafray/intern/yafray_Render.cpp')
-rw-r--r--source/blender/yafray/intern/yafray_Render.cpp239
1 files changed, 0 insertions, 239 deletions
diff --git a/source/blender/yafray/intern/yafray_Render.cpp b/source/blender/yafray/intern/yafray_Render.cpp
deleted file mode 100644
index d0006786507..00000000000
--- a/source/blender/yafray/intern/yafray_Render.cpp
+++ /dev/null
@@ -1,239 +0,0 @@
-//----------------------------------------------------------------------------------------------------
-// YafRay export
-//
-// For anyone else looking at this, this was designed for a tabspacing of 2 (YafRay/Jandro standard :)
-//----------------------------------------------------------------------------------------------------
-
-#include "yafray_Render.h"
-
-#include <math.h>
-
-#include <cstring>
-
-using namespace std;
-
-void yafrayRender_t::clearAll()
-{
- all_objects.clear();
- used_materials.clear();
- used_textures.clear();
- dupliMtx_list.clear();
- dup_srcob.clear();
- objectData.clear();
- imagetex.clear();
- imgtex_shader.clear();
-}
-
-bool yafrayRender_t::exportScene(Render* re)
-{
- this->re = re;
-
- // get camera first, no checking should be necessary, all done by Blender
- maincam_obj = re->scene->camera;
-
- // use fixed lens for objects functioning as temporary camera (ctrl-0)
- mainCamLens = 35.0;
- if (maincam_obj->type==OB_CAMERA) mainCamLens=((Camera*)maincam_obj->data)->lens;
-
- // recreate the scene as object data, as well as sorting the material & textures, ignoring duplicates
- if (!getAllMatTexObs())
- {
- // error found, clear for next call
- clearAll();
- return false;
- }
-
- if (!initExport())
- {
- G.afbreek = 1;
- clearAll();
- return false;
- }
-
- // start actual data export
- writeTextures();
- writeMaterialsAndModulators();
- writeAllObjects();
- writeLamps();
- hasworld = writeWorld();
- writeCamera();
- writeRender();
-
- // clear for next call, before render to free some memory
- clearAll();
-
- if (!finishExport())
- {
- G.afbreek = 1; //stop render and anim if doing so
- return false;
- }
- else return true;
-}
-
-// gets all unique face materials & textures,
-// and sorts the facelist rejecting anything that is not a quad or tri,
-// as well as associating them again with the original Object.
-bool yafrayRender_t::getAllMatTexObs()
-{
- ObjectInstanceRen *obi;
- ObjectRen *obr;
- VlakRen* vlr;
- float mat[4][4];
-
- // convert blender object instances to dupli matrices
- for(obi=(ObjectInstanceRen*)re->instancetable.first; obi; obi=obi->next) {
- if(obi->flag & R_DUPLI_TRANSFORMED) {
- // compute object matrix with dupli transform, need to transform
- // obi->mat out of view space for it
- MTC_Mat4MulSerie(mat, re->viewinv, obi->mat, re->viewmat, obi->obr->ob->obmat, 0, 0, 0, 0);
- addDupliMtx(obi->obr->ob, mat);
- }
- }
-
- // Blender does not include object which have total 0 alpha materials,
- // however, the objects might have been included in the dupliMtx list,
- // so this will cause a 'Duplilist non-empty...' error after going through the renderlist.
- // To solve this, keep track of all render objects included sofar,
- // and remove from dupliMtx_list if object not found.
- // This should also help to solve some other yet undetected 'dupli..' errors,
- // but on the other hand that could also hide the real problem of course...
- map<string, Object*> renderobs;
-
- for(obr=(ObjectRen*)re->objecttable.first; obr; obr=obr->next) {
- for (int i=0; i < obr->totvlak; i++) {
-
- if ((i & 255)==0) vlr=obr->vlaknodes[i>>8].vlak; else vlr++;
-
- // ---- The materials & textures
- // in this case, probably every face has a material assigned, which can be the default material,
- // so checking that this is !0 is probably not necessary, but just in case...
- Material* matr = vlr->mat;
- if (matr) {
- // The default assigned material seems to be nameless, no MA id, an empty string.
- // Since this name is needed in yafray, make it 'blender_default'
- if (strlen(matr->id.name)==0)
- used_materials["blender_default"] = matr;
- else
- used_materials[matr->id.name] = matr;
- // textures, all active channels
- for (int m=0;m<MAX_MTEX;m++) {
- if (matr->septex & (1<<m)) continue; // only active channels
- MTex* mx = matr->mtex[m];
- // if no mtex, ignore
- if (mx==NULL) continue;
- // if no tex, ignore
- Tex* tx = mx->tex;
- if (tx==NULL) continue;
- short txtp = tx->type;
- // if texture type not available in yafray, ignore
- if ((txtp==0) ||
- (txtp==TEX_MAGIC) ||
- (txtp==TEX_PLUGIN) ||
- (txtp==TEX_ENVMAP)) continue;
- // if texture is stucci, only export if 'nor' enabled
- if ((txtp==TEX_STUCCI) && !((mx->mapto & MAP_NORM) || (mx->maptoneg & MAP_NORM))) continue;
- // In the case of an image texture, check that there is an actual image, otherwise ignore.
- // Stupid error was here (...if (txtp & TEX_IMAGE)...),
- // which happened to work sofar, but not anymore with the extended texture support..
- if ((txtp==TEX_IMAGE) && (!tx->ima)) continue;
- used_textures[tx->id.name] = mx;
- }
- }
-
- // Make list of faces per object, ignore <3 vert faces, duplicate vertex sorting done later.
- // ignore null object pointers.
- // Also make list of facetexture images (material 'TexFace').
- if (obr->ob) {
- int nv = 0; // number of vertices
- MTFace *tface;
-
- if (vlr->v4) nv=4; else if (vlr->v3) nv=3;
- if (nv) {
- renderobs[obr->ob->id.name] = obr->ob;
- all_objects[obr->ob].obr= obr;
- all_objects[obr->ob].faces.push_back(vlr);
-
- tface= RE_vlakren_get_tface(obr, vlr, obr->actmtface, NULL, 0);
- if (tface && tface->tpage) {
- Material* fmat = vlr->mat;
-
- // only save if TexFace enabled
- if(fmat && (fmat->mode & MA_FACETEXTURE))
- imagetex[tface->tpage].insert(fmat);
- }
- }
- }
-
- }
- }
-
- // now remove any objects from dupliMtx_list which are not in the renderlist
- for (map<string, vector<float> >::iterator dL=dupliMtx_list.begin();
- dL!=dupliMtx_list.end();)
- {
- string ro_name = dL->first;
- if (renderobs.find(ro_name)==renderobs.end()) {
- cout << "Object " << ro_name << " not in renderlist, removing from dupliMtx_list" << endl;
- dL->second.clear();
- ++dL;
- dupliMtx_list.erase(ro_name);
- }
- else
- ++dL;
- }
-
- // in case dupliMtx_list not empty, make sure that there is at least one source object
- // in all_objects with the name given in dupliMtx_list
- if (!dupliMtx_list.empty()) {
-
- for (map<Object*, yafrayObjectRen>::const_iterator obn=all_objects.begin();
- obn!=all_objects.end();++obn)
- {
- Object* obj = obn->first;
- string obname = obj->id.name;
- if (dupliMtx_list.find(obname)!=dupliMtx_list.end()) dup_srcob[obname] = obj;
- }
-
- // if the name reference list is empty, return now, something was seriously wrong
- if (dup_srcob.empty()) {
- // error() doesn't work to well, when switching from Blender to console at least, so use stdout instead
- cout << "ERROR: Duplilist non_empty, but no srcobs\n";
- return false;
- }
- }
-
- return true;
-}
-
-void yafrayRender_t::addDupliMtx(Object* obj, float mat[][4])
-{
- for (int i=0;i<4;i++)
- for (int j=0;j<4;j++)
- dupliMtx_list[obj->id.name].push_back(mat[i][j]);
-}
-
-
-#if 0
-
-bool yafrayRender_t::objectKnownData(Object* obj)
-{
- // if object data already known, no need to include in renderlist, otherwise save object datapointer
- if (objectData.find(obj->data)!=objectData.end()) {
- Object* orgob = objectData[obj->data];
- // first save original object matrix in dupliMtx_list, if not added yet
- if (dupliMtx_list.find(orgob->id.name)==dupliMtx_list.end()) {
- cout << "Added original matrix\n";
- addDupliMtx(orgob);
- }
- // then save matrix of linked object in dupliMtx_list, using name of ORIGINAL object
- for (int i=0;i<4;i++)
- for (int j=0;j<4;j++)
- dupliMtx_list[orgob->id.name].push_back(obj->obmat[i][j]);
- return true;
- }
- // object not known yet
- objectData[obj->data] = obj;
- return false;
-}
-#endif
-