2.5
authorTon Roosendaal <ton@blender.org>
Mon, 1 Jun 2009 12:10:30 +0000 (12:10 +0000)
committerTon Roosendaal <ton@blender.org>
Mon, 1 Jun 2009 12:10:30 +0000 (12:10 +0000)
Cleanup commit:

- Yafray removed. Also did cmake/scons files, but didn't compile with it,
  so test would be appreciated :)
- Removed old crap from Windows release dir, should be checked on
  further by windows release builder later.

60 files changed:
CMakeLists.txt
SConstruct
config/darwin-config.py
config/irix6-config.py
config/linux2-config.py
config/linuxcross-config.py
config/openbsd3-config.py
config/sunos5-config.py
config/win32-mingw-config.py
config/win32-vc-config.py
config/win64-vc-config.py
release/windows/installer/00.blender.nsi [deleted file]
release/windows/installer/00.checked.bmp [deleted file]
release/windows/installer/00.header.bmp [deleted file]
release/windows/installer/00.installer.adx [deleted file]
release/windows/installer/00.installer.ico [deleted file]
release/windows/installer/00.sconsblender.nsi [deleted file]
release/windows/installer/00.unchecked.bmp [deleted file]
release/windows/installer/01.installer.bmp [deleted file]
release/windows/installer/01.welcome.rtf [deleted file]
release/windows/installer/02.copyright.txt [deleted file]
release/windows/installer/03.readme.txt [deleted file]
release/windows/installer/04.folder.rtf [deleted file]
release/windows/installer/05.progress.rtf [deleted file]
release/windows/installer/06.complete.rtf [deleted file]
release/windows/installer/input/24bits-image.bmp [deleted file]
release/windows/publ_installer/00.installer.adx [deleted file]
release/windows/publ_installer/00.installer.ico [deleted file]
release/windows/publ_installer/01.installer.bmp [deleted file]
release/windows/publ_installer/01.welcome.rtf [deleted file]
release/windows/publ_installer/02.copyright.txt [deleted file]
release/windows/publ_installer/03.readme.txt [deleted file]
release/windows/publ_installer/04.folder.rtf [deleted file]
release/windows/publ_installer/05.progress.rtf [deleted file]
release/windows/publ_installer/06.complete.rtf [deleted file]
source/Makefile
source/blender/CMakeLists.txt
source/blender/Makefile
source/blender/SConscript
source/blender/render/CMakeLists.txt
source/blender/render/SConscript
source/blender/render/intern/source/Makefile
source/blender/render/intern/source/convertblender.c
source/blender/render/intern/source/pipeline.c
source/blender/yafray/CMakeLists.txt [deleted file]
source/blender/yafray/Makefile [deleted file]
source/blender/yafray/SConscript [deleted file]
source/blender/yafray/YafRay_Api.h [deleted file]
source/blender/yafray/intern/Makefile [deleted file]
source/blender/yafray/intern/api.cpp [deleted file]
source/blender/yafray/intern/export_File.cpp [deleted file]
source/blender/yafray/intern/export_File.h [deleted file]
source/blender/yafray/intern/export_Plugin.cpp [deleted file]
source/blender/yafray/intern/export_Plugin.h [deleted file]
source/blender/yafray/intern/yafexternal.cpp [deleted file]
source/blender/yafray/intern/yafexternal.h [deleted file]
source/blender/yafray/intern/yafray_Render.cpp [deleted file]
source/blender/yafray/intern/yafray_Render.h [deleted file]
source/nan_compile.mk
tools/btools.py

index f2bf65dfb57545e1645d3b6077e166625c087c08..3efaa82e1f33d6e0f4b0e3e78b32f43507a2b53c 100644 (file)
@@ -67,7 +67,6 @@ OPTION(WITH_OPENJPEG          "Enable OpenJpeg Support (http://www.openjpeg.org/)"    OFF)
 OPTION(WITH_OPENAL             "Enable OpenAL Support (http://www.openal.org)"         ON)
 OPTION(WITH_OPENMP             "Enable OpenMP (has to be supported by the compiler)"   OFF)
 OPTION(WITH_WEBPLUGIN          "Enable Web Plugin (Unix only)"                         OFF)
-OPTION(WITH_YAFRAY             "Enable Yafray (Renderer)"                              OFF)
 
 IF(NOT WITH_GAMEENGINE AND WITH_PLAYER)
   MESSAGE("WARNING: WITH_PLAYER needs WITH_GAMEENGINE")
index f7986ec878964704a2d43072b7d328c7cb217b46..125594f69c5c26bbcd1a1ee4369941d8a1079689 100644 (file)
@@ -279,7 +279,6 @@ if 'blenderlite' in B.targets:
        target_env_defs['WITH_BF_OPENJPEG'] = False
        target_env_defs['WITH_BF_FFMPEG'] = False
        target_env_defs['WITH_BF_QUICKTIME'] = False
-       target_env_defs['WITH_BF_YAFRAY'] = False
        target_env_defs['WITH_BF_REDCODE'] = False
        target_env_defs['WITH_BF_DDS'] = False
        target_env_defs['WITH_BF_ZLIB'] = False
index 78a8c71b7ddfe1d665d70f50acdaba4dbae1c58a..080820f885a0b7ecfbc5793ffe303714c2167e42 100644 (file)
@@ -155,8 +155,6 @@ BF_SOLID = '#extern/solid'
 BF_SOLID_INC = '${BF_SOLID}'
 BF_SOLID_LIB = 'extern_solid'
 
-WITH_BF_YAFRAY = True
-
 #WITH_BF_NSPR = True
 #BF_NSPR = $(LIBDIR)/nspr
 #BF_NSPR_INC = -I$(BF_NSPR)/include -I$(BF_NSPR)/include/nspr
index 1ef271b50749ecd528c43546d16fb2c7628a4923..a927dfb12be78f5c83ee8311eafc930a2da2ce7c 100644 (file)
@@ -93,8 +93,6 @@ BF_SOLID = '#extern/solid'
 BF_SOLID_INC = '${BF_SOLID}'
 BF_SOLID_LIB = 'extern_solid'
 
-WITH_BF_YAFRAY = 'true'
-
 #WITH_BF_NSPR = 'true'
 #BF_NSPR = $(LIBDIR)/nspr
 #BF_NSPR_INC = -I$(BF_NSPR)/include -I$(BF_NSPR)/include/nspr
index eb93d8084f172398d80d207d6ab25bf0a95f219f..f57124327940b83f01d415efc68e77e75130ec2b 100644 (file)
@@ -87,8 +87,6 @@ BF_SOLID = '#extern/solid'
 BF_SOLID_INC = '${BF_SOLID}'
 BF_SOLID_LIB = 'extern_solid'
 
-WITH_BF_YAFRAY = True
-
 #WITH_BF_NSPR = True
 #BF_NSPR = $(LIBDIR)/nspr
 #BF_NSPR_INC = -I$(BF_NSPR)/include -I$(BF_NSPR)/include/nspr
index 4b17224eacc488f9c4d9c3c5aefee13f34a5498f..2f15ef67e6ccb4ed8e415007248b8db9c3a85c36 100644 (file)
@@ -1,8 +1,6 @@
 LCGDIR = '#../lib/windows'
 LIBDIR = '${LCGDIR}'
 
-WITH_BF_YAFRAY = True
-
 BF_PYTHON = LIBDIR + '/python'
 BF_PYTHON_VERSION = '2.5'
 BF_PYTHON_INC = '${BF_PYTHON}/include/python${BF_PYTHON_VERSION}'
index 6a7518a79287c1bd930de7b97883edddbf579b5b..f27066b43f7fce0a2469d559950f4546710c804b 100644 (file)
@@ -75,8 +75,6 @@ BF_SOLID = '#extern/solid'
 BF_SOLID_INC = '${BF_SOLID}'
 BF_SOLID_LIB = 'extern_solid'
 
-WITH_BF_YAFRAY = True
-
 #WITH_BF_NSPR = True
 #BF_NSPR = $(LIBDIR)/nspr
 #BF_NSPR_INC = -I$(BF_NSPR)/include -I$(BF_NSPR)/include/nspr
index 25f200fe346d86e93b9b06517445ad8207a12d42..e050a5950aa4bf98bb0fefaf3fec3b0a85ab2c48 100644 (file)
@@ -83,8 +83,6 @@ BF_SOLID = '#extern/solid'
 BF_SOLID_INC = '${BF_SOLID}'
 BF_SOLID_LIB = 'extern_solid'
 
-WITH_BF_YAFRAY = True
-
 #WITH_BF_NSPR = True
 #BF_NSPR = $(LIBDIR)/nspr
 #BF_NSPR_INC = -I$(BF_NSPR)/include -I$(BF_NSPR)/include/nspr
index a579d21a54471d52f5f30f6e259474f7a89eb55e..5b9b2f9b9dc5390d20b00f2997acdb3bc60ab58e 100644 (file)
@@ -94,8 +94,6 @@ BF_SOLID_LIB = 'extern_solid'
 BF_WINTAB = LIBDIR + '/wintab'
 BF_WINTAB_INC = '${BF_WINTAB}/INCLUDE'
 
-WITH_BF_YAFRAY = True
-
 #WITH_BF_NSPR = True
 #BF_NSPR = $(LIBDIR)/nspr
 #BF_NSPR_INC = -I$(BF_NSPR)/include -I$(BF_NSPR)/include/nspr
index b94a9c4effe01639b34ea7fc04e03c747deb7acd..1fc1d219f5727aced1aba5571ebd8fbd5c71ff6f 100644 (file)
@@ -107,8 +107,6 @@ BF_SOLID_LIB = 'extern_solid'
 BF_WINTAB = LIBDIR + '/wintab'
 BF_WINTAB_INC = '${BF_WINTAB}/INCLUDE'
 
-WITH_BF_YAFRAY = True
-
 WITH_BF_BINRELOC = False
 
 #WITH_BF_NSPR = True
index 945efecdc3c784d422ac83fbe53dee359db7ab26..172fb286fc8ea68bd41adabbca8a663b1fe3abd1 100644 (file)
@@ -110,8 +110,6 @@ BF_SOLID_LIB = 'extern_solid'
 BF_WINTAB = LIBDIR + '/wintab'
 BF_WINTAB_INC = '${BF_WINTAB}/INCLUDE'
 
-WITH_BF_YAFRAY = True
-
 WITH_BF_BINRELOC = False
 
 #WITH_BF_NSPR = True
diff --git a/release/windows/installer/00.blender.nsi b/release/windows/installer/00.blender.nsi
deleted file mode 100644 (file)
index 8666ed8..0000000
+++ /dev/null
@@ -1,450 +0,0 @@
-;
-; $Id$
-;
-; Blender Self-Installer for Windows (NSIS - http://nsis.sourceforge.net)
-;
-
-!include "MUI.nsh"
-
-Name "Blender VERSION" 
-
-!define MUI_ABORTWARNING
-
-!define MUI_WELCOMEPAGE_TEXT  "This wizard will guide you through the installation of Blender.\r\n\r\nIt is recommended that you close all other applications before starting Setup.\r\n\r\nNote to Win2k/XP users: You may require administrator privileges to install Blender successfully."
-!define MUI_WELCOMEFINISHPAGE_BITMAP "01.installer.bmp"
-!define MUI_HEADERIMAGE
-!define MUI_HEADERIMAGE_BITMAP  "00.header.bmp"
-!define MUI_COMPONENTSPAGE_SMALLDESC
-!define MUI_FINISHPAGE_RUN "$INSTDIR\blender.exe"
-!define MUI_CHECKBITMAP "00.checked.bmp"
-
-!insertmacro MUI_PAGE_WELCOME
-!insertmacro MUI_PAGE_LICENSE "DISTDIR\Copyright.txt"
-!insertmacro MUI_PAGE_COMPONENTS
-    
-!insertmacro MUI_PAGE_DIRECTORY
-Page custom DataLocation
-!insertmacro MUI_PAGE_INSTFILES
-!insertmacro MUI_PAGE_FINISH
-  
-!insertmacro MUI_UNPAGE_WELCOME
-!insertmacro MUI_UNPAGE_CONFIRM
-!insertmacro MUI_UNPAGE_INSTFILES
-!insertmacro MUI_UNPAGE_FINISH
-
-
-Icon "00.installer.ico"
-UninstallIcon "00.installer.ico"
-
-;--------------------------------
-;Languages
-  !insertmacro MUI_LANGUAGE "English"
-    
-;--------------------------------
-;Language Strings
-
-  ;Description
-  LangString DESC_SecCopyUI ${LANG_ENGLISH} "Copy all required files to the application folder."
-  LangString DESC_Section2 ${LANG_ENGLISH} "Add shortcut items to the Start Menu. (Recommended)"
-  LangString DESC_Section3 ${LANG_ENGLISH} "Add a shortcut to Blender on your desktop."
-  LangString DESC_Section4 ${LANG_ENGLISH} "Blender can register itself with .blend files to allow double-clicking from Windows Explorer, etc."
-  LangString TEXT_IO_TITLE ${LANG_ENGLISH} "Specify User Data Location"
-;--------------------------------
-;Data
-
-Caption "Blender VERSION Installer"
-OutFile "DISTDIR\..\VERSION\blender-VERSION-windows.exe"
-
-InstallDir "$PROGRAMFILES\Blender Foundation\Blender"
-
-BrandingText "http://www.blender.org/bf"
-ComponentText "This will install Blender VERSION on your computer."
-
-DirText "Use the field below to specify the folder where you want Blender to be copied to. To specify a different folder, type a new name or use the Browse button to select an existing folder."
-
-; GetWindowsVersion
-;
-; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/
-; Updated by Joost Verburg
-;
-; Returns on top of stack
-;
-; Windows Version (95, 98, ME, NT x.x, 2000, XP, 2003)
-; or
-; '' (Unknown Windows Version)
-;
-; Usage:
-;   Call GetWindowsVersion
-;   Pop $R0
-;   ; at this point $R0 is "NT 4.0" or whatnot
-
-Function GetWindowsVersion
-
-  Push $R0
-  Push $R1
-
-  ReadRegStr $R0 HKLM \
-  "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
-
-  IfErrors 0 lbl_winnt
-   
-  ; we are not NT
-  ReadRegStr $R0 HKLM \
-  "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber
-  StrCpy $R1 $R0 1
-  StrCmp $R1 '4' 0 lbl_error
-  StrCpy $R1 $R0 3
-  StrCmp $R1 '4.0' lbl_win32_95
-  StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
-  lbl_win32_95:
-    StrCpy $R0 '95'
-  Goto lbl_done
-  lbl_win32_98:
-    StrCpy $R0 '98'
-  Goto lbl_done
-  lbl_win32_ME:
-    StrCpy $R0 'ME'
-  Goto lbl_done
-  lbl_winnt:
-
-  StrCpy $R1 $R0 1
-  StrCmp $R1 '3' lbl_winnt_x
-  StrCmp $R1 '4' lbl_winnt_x
-  StrCpy $R1 $R0 3
-  StrCmp $R1 '5.0' lbl_winnt_2000
-  StrCmp $R1 '5.1' lbl_winnt_XP
-  StrCmp $R1 '5.2' lbl_winnt_2003 lbl_error
-  lbl_winnt_x:
-    StrCpy $R0 "NT $R0" 6
-  Goto lbl_done
-  lbl_winnt_2000:
-    Strcpy $R0 '2000'
-  Goto lbl_done
-  lbl_winnt_XP:
-    Strcpy $R0 'XP'
-  Goto lbl_done
-  lbl_winnt_2003:
-    Strcpy $R0 '2003'
-  Goto lbl_done
-  lbl_error:
-    Strcpy $R0 ''
-  lbl_done:
-  Pop $R1
-  Exch $R0
-
-FunctionEnd
-
-Var BLENDERHOME
-Var winversion
-
-Function SetWinXPPath
-  StrCpy $BLENDERHOME "$PROFILE\Application Data\Blender Foundation\Blender"
-FunctionEnd
-
-Function SetWin9xPath
-  StrCpy $BLENDERHOME $INSTDIR
-FunctionEnd
-
-Function .onInit
-  Call GetWindowsVersion
-  Pop $R0
-  Strcpy $winversion $R0
-  !insertmacro MUI_INSTALLOPTIONS_EXTRACT "data.ini"
-FunctionEnd
-
-Var HWND
-Var DLGITEM
-Var is2KXP
-
-Function DataLocation
-  !insertmacro MUI_HEADER_TEXT "$(TEXT_IO_TITLE)" ""
-  
-  ; Set default choice
-  !insertmacro MUI_INSTALLOPTIONS_WRITE "data.ini" "Field 3" "State" 1
-  
-  StrCpy $R1 $winversion 2
-  StrCmp $R1 "NT" do_win2kxp
-  StrCmp $winversion "2000" do_win2kxp
-  StrCmp $winversion "XP" do_win2kxp
-  StrCmp $winversion "2003" do_win2kxp
-  
-  ;else...
-  Strcpy $is2KXP "false"
-
-  Goto continue
-
-  do_win2kXP:
-    Strcpy $is2KXP "true"
-    
-  continue: 
-  
-  !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "data.ini"
-  Pop $HWND
-  
-  Strcmp $is2KXP "true" do_dlg
-  
-  ; Disable App Data option on Win9x
-  
-  GetDlgItem $DLGITEM $HWND 1201
-  EnableWindow $DLGITEM 0  
-  
-  do_dlg:
-  
-    !insertmacro MUI_INSTALLOPTIONS_SHOW
-    !insertmacro MUI_INSTALLOPTIONS_READ $R0 "data.ini" "Field 2" "State" ; App Dir
-    Strcmp $R0 1 do_app_data
-    !insertmacro MUI_INSTALLOPTIONS_READ $R0 "data.ini" "Field 3" "State" ; Inst Dir
-    Strcmp $R0 1 do_inst_path
-    !insertmacro MUI_INSTALLOPTIONS_READ $R0 "data.ini" "Field 4" "State" ; Home Dir
-    Strcmp $R0 1 do_home_path
-  
-  Goto end
-  
-  do_app_data:
-    Call SetWinXPPath
-    Goto end
-  do_home_path:
-    ReadEnvStr $BLENDERHOME "HOME"
-    Goto end
-  do_inst_path:
-    Call SetWin9xPath
-  end:
-  
-FunctionEnd
-
-Section "Blender-VERSION (required)" SecCopyUI
-  SectionIn RO
-    
-; Sets $BLENDERHOME to suit Windows version...
-
-  ; Set output path to the installation directory.
-  SetOutPath $INSTDIR
-  ; Put file there
-  File DISTDIR\blender.exe
-  File DISTDIR\blenderplayer.exe
-  File DISTDIR\python23.dll
-  File DISTDIR\python23.zip
-  File DISTDIR\sdl.dll
-  File DISTDIR\gnu_gettext.dll
-  File DISTDIR\Copyright.txt
-  File DISTDIR\Blender.html
-  File DISTDIR\python-license.txt
-  File DISTDIR\Release_SHORTVERS.txt
-  File DISTDIR\GPL-license.txt
-  File DISTDIR\Help.url
-  File DISTDIR\zlib.pyd
-     
-  SetOutPath $BLENDERHOME\.blender
-  File DISTDIR\.blender\.bfont.ttf
-  
-  SetOutPath $BLENDERHOME\.blender\scripts
-  File DISTDIR\.blender\scripts\ac3d_export.py
-  File DISTDIR\.blender\scripts\ac3d_import.py
-  File DISTDIR\.blender\scripts\Apply_def.py
-  File DISTDIR\.blender\scripts\Axiscopy.py
-  File DISTDIR\.blender\scripts\batch_name_edit.py
-  File DISTDIR\.blender\scripts\bevel_center.py
-  File DISTDIR\.blender\scripts\blender2cal3d.py
-  File DISTDIR\.blender\scripts\bvh_export.py
-  File DISTDIR\.blender\scripts\bvh_import.py
-  File DISTDIR\.blender\scripts\clean_mesh.py
-  File DISTDIR\.blender\scripts\config.py
-  File DISTDIR\.blender\scripts\DirectX8Exporter.py
-  File DISTDIR\.blender\scripts\DirectXExporter.py
-  File DISTDIR\.blender\scripts\disp_paint.py
-  File DISTDIR\.blender\scripts\doc_browser.py
-  File DISTDIR\.blender\scripts\fixfromarmature.py
-  File DISTDIR\.blender\scripts\help_browser.py
-  File DISTDIR\.blender\scripts\help_getting_started.py
-  File DISTDIR\.blender\scripts\help_manual.py
-  File DISTDIR\.blender\scripts\help_py_reference.py
-  File DISTDIR\.blender\scripts\help_release_notes.py
-  File DISTDIR\.blender\scripts\help_tutorials.py
-  File DISTDIR\.blender\scripts\help_web_blender.py
-  File DISTDIR\.blender\scripts\help_web_devcomm.py
-  File DISTDIR\.blender\scripts\help_web_eshop.py
-  File DISTDIR\.blender\scripts\help_web_usercomm.py
-  File DISTDIR\.blender\scripts\hotkeys.py
-  File DISTDIR\.blender\scripts\kloputils.py
-  File DISTDIR\.blender\scripts\knife.py
-  File DISTDIR\.blender\scripts\lightwave_export.py
-  File DISTDIR\.blender\scripts\lightwave_import.py
-  File DISTDIR\.blender\scripts\nendo_export.py
-  File DISTDIR\.blender\scripts\nendo_import.py
-  File DISTDIR\.blender\scripts\obdatacopier.py
-  File DISTDIR\.blender\scripts\obj_export.py
-  File DISTDIR\.blender\scripts\obj_import.py
-  File DISTDIR\.blender\scripts\off_export.py
-  File DISTDIR\.blender\scripts\off_import.py
-  File DISTDIR\.blender\scripts\paths_import.py
-  File DISTDIR\.blender\scripts\radiosity_export.py
-  File DISTDIR\.blender\scripts\radiosity_import.py
-  File DISTDIR\.blender\scripts\raw_export.py
-  File DISTDIR\.blender\scripts\raw_import.py
-  File DISTDIR\.blender\scripts\renameobjectbyblock.py
-  File DISTDIR\.blender\scripts\rvk1_torvk2.py
-  File DISTDIR\.blender\scripts\save_theme.py
-  File DISTDIR\.blender\scripts\sel_same.py
-  File DISTDIR\.blender\scripts\skin.py
-  File DISTDIR\.blender\scripts\slp_import.py
-  File DISTDIR\.blender\scripts\sysinfo.py
-  File DISTDIR\.blender\scripts\tex2uvbaker.py
-  File DISTDIR\.blender\scripts\truespace_export.py
-  File DISTDIR\.blender\scripts\truespace_import.py
-  File DISTDIR\.blender\scripts\unweld.py
-  File DISTDIR\.blender\scripts\uv_export.py
-  File DISTDIR\.blender\scripts\UVpaint05.py
-  File DISTDIR\.blender\scripts\videoscape_export.py
-  File DISTDIR\.blender\scripts\vrml97_export.py
-  File DISTDIR\.blender\scripts\wings_export.py
-  File DISTDIR\.blender\scripts\wings_import.py
-  File DISTDIR\.blender\scripts\wrl2export.py
-  SetOutPath $BLENDERHOME\.blender\scripts\bpymodules
-  File DISTDIR\.blender\scripts\bpymodules\ai2obj.py
-  File DISTDIR\.blender\scripts\bpymodules\BPyBlender.py
-  File DISTDIR\.blender\scripts\bpymodules\BPyRegistry.py
-  File DISTDIR\.blender\scripts\bpymodules\eps2obj.py
-  File DISTDIR\.blender\scripts\bpymodules\gimp2obj.py
-  File DISTDIR\.blender\scripts\bpymodules\meshtools.py
-  File DISTDIR\.blender\scripts\bpymodules\svg2obj.py
-  SetOutPath $BLENDERHOME\.blender\scripts\bpydata
-  File DISTDIR\.blender\scripts\bpydata\readme.txt
-  File DISTDIR\.blender\scripts\bpydata\KUlang.txt
-  SetOutPath $BLENDERHOME\.blender\scripts\bpydata\config
-  File DISTDIR\.blender\scripts\bpydata\config\readme.txt
-  
-  ; Additional Languages files
-  SetOutPath $BLENDERHOME\.blender
-  File DISTDIR\.blender\.Blanguages
-  SetOutPath $BLENDERHOME\.blender\locale\ca\LC_MESSAGES
-  File DISTDIR\.blender\locale\ca\LC_MESSAGES\blender.mo
-  SetOutPath $BLENDERHOME\.blender\locale\cs\LC_MESSAGES
-  File DISTDIR\.blender\locale\cs\LC_MESSAGES\blender.mo
-  SetOutPath $BLENDERHOME\.blender\locale\de\LC_MESSAGES
-  File DISTDIR\.blender\locale\de\LC_MESSAGES\blender.mo
-  SetOutPath $BLENDERHOME\.blender\locale\fi\LC_MESSAGES
-  File DISTDIR\.blender\locale\fi\LC_MESSAGES\blender.mo
-  SetOutPath $BLENDERHOME\.blender\locale\es\LC_MESSAGES
-  File DISTDIR\.blender\locale\es\LC_MESSAGES\blender.mo
-  SetOutPath $BLENDERHOME\.blender\locale\fr\LC_MESSAGES
-  File DISTDIR\.blender\locale\fr\LC_MESSAGES\blender.mo
-  SetOutPath $BLENDERHOME\.blender\locale\it\LC_MESSAGES
-  File DISTDIR\.blender\locale\it\LC_MESSAGES\blender.mo
-  SetOutPath $BLENDERHOME\.blender\locale\ja\LC_MESSAGES
-  File DISTDIR\.blender\locale\ja\LC_MESSAGES\blender.mo
-  SetOutPath $BLENDERHOME\.blender\locale\nl\LC_MESSAGES
-  File DISTDIR\.blender\locale\nl\LC_MESSAGES\blender.mo
-  SetOutPath $BLENDERHOME\.blender\locale\sv\LC_MESSAGES
-  File DISTDIR\.blender\locale\sv\LC_MESSAGES\blender.mo
-  SetOutPath $BLENDERHOME\.blender\locale\zh_cn\LC_MESSAGES
-  File DISTDIR\.blender\locale\zh_cn\LC_MESSAGES\blender.mo
-  SetOutPath $BLENDERHOME\.blender\locale\pt_br\LC_MESSAGES
-  File DISTDIR\.blender\locale\pt_br\LC_MESSAGES\blender.mo
-  SetOutPath $BLENDERHOME\.blender\locale\hr_HR\LC_MESSAGES
-  File DISTDIR\.blender\locale\hr_HR\LC_MESSAGES\blender.mo
-  SetOutPath $BLENDERHOME\.blender\locale\ru\LC_MESSAGES
-  File DISTDIR\.blender\locale\ru\LC_MESSAGES\blender.mo
-  SetOutPath $BLENDERHOME\.blender\locale\pl\LC_MESSAGES
-  File DISTDIR\.blender\locale\pl\LC_MESSAGES\blender.mo
-  
-  SetOutPath $INSTDIR
-  ; Write the installation path into the registry
-  WriteRegStr HKLM SOFTWARE\BlenderFoundation "Install_Dir" "$INSTDIR"
-  ; Write the uninstall keys for Windows
-  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender" "DisplayName" "Blender (remove only)"
-  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender" "UninstallString" '"$INSTDIR\uninstall.exe"'
-  WriteUninstaller "uninstall.exe"
-SectionEnd
-
-Section "Add Start Menu shortcuts" Section2
-  SetOutPath $INSTDIR
-  CreateDirectory "$SMPROGRAMS\Blender Foundation\Blender\"
-  CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0
-  CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Blender.lnk" "$INSTDIR\Blender.exe" "" "$INSTDIR\blender.exe" 0
-  CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Readme.lnk" "$INSTDIR\Blender.html" "" "" 0
-  CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Copyright.lnk" "$INSTDIR\Copyright.txt" "" "$INSTDIR\copyright.txt" 0
-  CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\GPL-license.lnk" "$INSTDIR\GPL-license.txt" "" "$INSTDIR\GPL-license.txt" 0
-  CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Help.lnk" "$INSTDIR\Help.url"
-SectionEnd
-
-Section "Add Desktop Blender-VERSION shortcut" Section3
-  SetOutPath $INSTDIR
-  CreateShortCut "$DESKTOP\Blender.lnk" "$INSTDIR\blender.exe" "" "$INSTDIR\blender.exe" 0
-SectionEnd
-
-Section "Open .blend files with Blender-VERSION" Section4
-  SetOutPath $INSTDIR
-  ;ExecShell "open" '"$INSTDIR\blender.exe"' "-R -b"
-  ;do it the manual way! ;)
-  
-  WriteRegStr HKCR ".blend" "" "blendfile"
-  WriteRegStr HKCR "blendfile" "" "Blender .blend File"
-  WriteRegStr HKCR "blendfile\shell" "" "open"
-  WriteRegStr HKCR "blendfile\DefaultIcon" "" $INSTDIR\blender.exe,1
-  WriteRegStr HKCR "blendfile\shell\open\command" "" \
-    '"$INSTDIR\blender.exe" "%1"'
-  
-SectionEnd
-
-UninstallText "This will uninstall Blender VERSION. Hit next to continue."
-
-Section "Uninstall"
-  ; remove registry keys
-  DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender"
-  DeleteRegKey HKLM SOFTWARE\BlenderFoundation
-  ; remove files
-  Delete $INSTDIR\blender.exe
-  Delete $INSTDIR\blenderplayer.exe
-  Delete $INSTDIR\python23.dll
-  Delete $INSTDIR\python23.zip
-  Delete $INSTDIR\sdl.dll
-  Delete $INSTDIR\gnu_gettext.dll
-  Delete $INSTDIR\Copyright.txt
-  Delete $INSTDIR\Blender.html
-  Delete $INSTDIR\GPL-license.txt
-  Delete $INSTDIR\python-license.txt
-  Delete $INSTDIR\Release_SHORTVERS.txt
-  Delete $INSTDIR\Help.url
-  Delete $INSTDIR\uninstall.exe
-  Delete $INSTDIR\zlib.pyd
-  Delete $INSTDIR\.blender\.bfont.ttf
-  Delete $INSTDIR\.blender\.Blanguages
-  ; remove shortcuts, if any.
-  Delete "$SMPROGRAMS\Blender Foundation\Blender\*.*"
-  Delete "$DESKTOP\Blender.lnk"
-  ; remove directories used.
-  RMDir /r $INSTDIR\.blender\locale 
-  RMDir /r $INSTDIR\.blender\scripts
-  RMDir /r $INSTDIR\.blender\scripts\bpydata
-  RMDir /r $INSTDIR\.blender\scripts\bpydata\config
-  RMDir /r $INSTDIR\.blender\scripts\bpymodules
-  RMDir $INSTDIR\.blender
-  RMDir "$SMPROGRAMS\Blender Foundation\Blender"
-  RMDir "$SMPROGRAMS\Blender Foundation"
-  RMDir "$INSTDIR"
-  RMDir "$INSTDIR\.."
-SectionEnd
-
-!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
-  !insertmacro MUI_DESCRIPTION_TEXT ${SecCopyUI} $(DESC_SecCopyUI)
-  !insertmacro MUI_DESCRIPTION_TEXT ${Section2} $(DESC_Section2)
-  !insertmacro MUI_DESCRIPTION_TEXT ${Section3} $(DESC_Section3)
-  !insertmacro MUI_DESCRIPTION_TEXT ${Section4} $(DESC_Section4)
-!insertmacro MUI_FUNCTION_DESCRIPTION_END
diff --git a/release/windows/installer/00.checked.bmp b/release/windows/installer/00.checked.bmp
deleted file mode 100644 (file)
index 6c2e98d..0000000
Binary files a/release/windows/installer/00.checked.bmp and /dev/null differ
diff --git a/release/windows/installer/00.header.bmp b/release/windows/installer/00.header.bmp
deleted file mode 100644 (file)
index b631ba7..0000000
Binary files a/release/windows/installer/00.header.bmp and /dev/null differ
diff --git a/release/windows/installer/00.installer.adx b/release/windows/installer/00.installer.adx
deleted file mode 100644 (file)
index af1b432..0000000
+++ /dev/null
@@ -1,314 +0,0 @@
-[ADX]
-ADXVersion=1.00.00
-<=>2240
-CCM^8603:<;8=2
-CCM^8603:>;8=6
-CCM^8603:?;8=3
-CCM^8603:?;9=2
-CCM^8603:8;8=2
-CCM^8603:8;9=2
-CCM^8603::;8=2
-CCM^8603::;9=2
-CCM^8603::;:=2
-CCM^8603:;;8=2
-CCM^8603:4;:=2
-CCM^8603:4;<=2
-CCM^8603:5;8=$HM
-CCM^8603:5;9=$Dgokcl
-CCM^8603:5;:=$Naogte
-CCM^8603:5;;=$^cr
-CCM^8603:5;<=$Ii
-CCM^8603:5;\13=$Etn\7fue
-CCM^8603:5;>=[bu!\i %K`g
-CCM^8603:5;?=$Ucuz\7f
-CCM^8603:5;0=Qbjdkr %K`g
-CCM^8603:5;1=G!~uzgcw*E\7fmf&x'
-CCM^8603:5:8=$Ciom
-CCM^8603:5:9=Lbrvgtk-$"
-CCM^8603:5::=$Fdnzr
-CCM^8603;<;8=2
-CCM^8604:<;8=3
-CCM^8604:<;9=@kcolcr#',Ymz{n}v
-CCM^8604:<;:=Rkc`{c pzihamw+zjb&qirh#~c+\7fcghf"nrdeu tc`g(ik+kzst`kreg$,+Qd{+cc~&`duo#z~n{x.\7ffg'Dsgqsf*n~|\7fae.vh&rmje`~,jf+ksgqsooo&pb~d%(+^jzjt&l}ut#cbhd~jn.c'bsape#fi\7f|n|+ap'dd(g VDO+fjcn 
-CCM^8604:<:9=67?7
-CCM^8604:\13;8=3
-CCM^8604:\13;9=@kcolcr#',Ymz{n}v
-CCM^8604:\13;:=Voc!nolf*eelbmjzgc&cmjot*mgznoow"b~h{rs-*,[zn}x. ^cr*&ie*ud}+yj`v'rn(ivfx{ya\7fk+zjb&gaje-*,[zn}x. Ii#(of#sc~(oae)v'q`fr we,d~n|||ksc!|ne#legm%.+^pbur($Cbdond).bh"~it(qam~,\7fg+}\7far'cy|ta`~eeo+.bzgju/
-CCM^8604:\13:9=4625
-CCM^8604:>;8=3
-CCM^8604:>;9=@kcolcr#',Ymz{n}v
-CCM^8604:>;:=Voc!nolf*eelbmjzgc&cmjot*mgznoow"b~h{rs#kbo(b}+\gfb,Ghlz$,+Xykx}"%_d{$ jl,rg~.|ols&ug&ouo~|zbzn.voc!nolf$,+Xykx}"%Hn*&ie*ud}+jd`%s&viht#~c+g}kyypnrd(rhf*jbdn +.Rucr{&"@kbhmg,+gd'\7fn}&wbdx+|d.xzmw&dprrbixbfl.+gvbkr&
-CCM^8604:>:9=4625
-CCM^8604:?;8=3
-CCM^8604:?;9=@kcolcr#',Ymz{n}v
-CCM^8604:?;:=Voc!nolf*eelbmjzgc&cmjot*dj{+oe.gftmacr#|iy{bae.lrkcmt lx,oi\7fk+zjfh!|ne#ebn(jbykcc\7f!gh zeyy(xwxzgj(!(Vrfy\7f+*Rkx,"n`!qiu#}me|+zd.pbvmiee#~dn(mggk,'&Qzcsp*.Eg).bh"~it(bom-x+\7fj`\7f.vh&smvlbii+|ck+hkkc/(&Pqo\7fx()Mj`abj#(of#sc~(|oez"si!{ros*is|yohzkia!(otfg\7f%
-CCM^8604:?:9=4625
-CCM^8604:8;8=3
-CCM^8604:8;9=@kcolcr#',Ymz{n}v
-CCM^8604:8;:=Rkc`{c fdxnz+zck"wgr{qoqn$x!+`nkfbb!|i frxyihz+zjb&h|cmp$,+Xykx}"%IJ*&tl*odf\7fge{g'is($Cbdond).\7fa"trnx&e{~~jk\7fgei"nrdeu.
-CCM^8604:8:9=7641
-CCM^8604:9;8=3
-CCM^8604:9;9=@kcolcr#',Np\7f|jmvnio(Vrlm~n{x
-CCM^8604:9;:=Voc!{raw\7f\7f+jnbdy"tnn\7fu tbm\7f({kymgir`oc ll,\7f`n.bzgju!`gs#hinf+kszpfeumb.
-CCM^8604:9:9=15170
-CCM^8604::;8=3
-CCM^8604::;9=@kcolcr#',Np\7f|jmvnio(Vrlm~n{x
-CCM^8604::;:=Voc!{raw\7f\7f+jnbdy"tnn\7fu tbm\7f({kymgir`oc ll,\7f`n.bzgju!`gs#hinf+kszpfeumb.#*\ymx}+,Afhbmj"#~c+{\7fa{.g\7frsietjdk+a\7fkf},
-CCM^8604:::9=15170
-CCM^8604:;;8=3
-CCM^8604:;;9=@kcolcr#',Nzyay
-CCM^8604:;;:=Voc!xgtk*eelbmjzgc&cmjot*od}gj+`ms&cm&cqom\7fmo.d|"cid{&nl~,jdykjj{'cyaut-*,_zr.x~gdogqond*m+lbhmkpbhu(vawb"
-CCM^8604:;:9=4625
-CCM^8604:4;8=3
-CCM^8604:4;9=@kcolcr#',Nzyay
-CCM^8604:4;:=Voc!nolf*eelbmjzgc&cmjot*od}gj+`ms&cm&ouo~|zbz\7fkl)
-CCM^8604:4:9=4625
-CCM^8604:5;8=3
-CCM^8604:5;9=@kcolcr#',Nzyay
-CCM^8604:5;:=Voc!nolf*eelbmjzgc&cmjot*ex(j.Ykcc+Nfjy#legm+oej"ditdb mex+jn.dxguqsartfd"
-CCM^8604:5:9=4625
-CCM^8604;<;8=3
-CCM^8604;<;9=@kcolcr#',Nzyay
-CCM^8604;<;:=Voc!xgsp}cyl+wd{"tvdkofjoh+\7fj}+gldiszccw$,+Xykx}"%E`feeo(,\7fg+}\7far'cy|ta`~eeo+g\7fkot(!(Vrfy\7f+*Bieapb$!|i pae{(dxn|"snd(vapy{dzo#{|mscb|cd#cxne%
-CCM^8604;<:9=2
-CCM^8604;\13;8=3
-CCM^8604;\13;9=@kcolcr#',Nzyay
-CCM^8604;\13;:=Mic!gt ne~n(dh+zjb&qzigqkax(\7ffjz"pcsm&svz|d{n.\7fa"uso(eovfh+fdz+lg'`n}hd-*,[dnoxk"dio|gcw*ud}y.xadsq`zc sxc}aoky.dht!`cls$
-CCM^8604;\13:9=2
-CCM^8604;>;8=3
-CCM^8604;>;9=@kcolcr#',Nzyay
-CCM^8604;>;:=Onurahg#imiaek\7f.dnjd u)-
-CCM^8604;>:9=2
-CCM^8604;?;8=3
-CCM^8604;?;9=@kcolcr#',Nzyay
-CCM^8604;?;:=Voc!ksswea+znib}vu\7f!ahflxaj|bae.dnjd(rhb~,|ix.x{rwirmb we,im+cn|ebb!\7fotk*xcm+}r}vbk!zcgjyxyq+md{nc&ogr ao,mg~`o "'Vmmgsf*odf\7fohz"~itz&sllx|iyk+~phphlcr#lcy(ckg~,
-CCM^8604;?:9=2
-CCM^8604;8;8=3
-CCM^8604;8;9=@kcolcr#',Nzyay
-CCM^8604;8;:=Voc!aren*eelbmjzgc&hf&tko,manbo.`bjn\7f&cl\7f`o(ea\7f.`b&smaip~iymo +.Rkc`{c `eb\7fihz+wmrt!{ifw}mym+~yatnbdz&flx,cmg~%
-CCM^8604;8:9=4625
-CCM^8604;9;8=3
-CCM^8604;9;9=@kcolcr#',Nzyay
-CCM^8604;9;:=Voc!mhd#ej+|ck+]gk`,M~tqko\7faei+tkw&gaje#}mx(ykjmjbb!jcflxi+igb+ad'rim&iwoax(ha~bf'dd(vrlziydr.nvvugb|cd-*,_`b}+]gk`,M~tqko\7faei+tkw&gaje#gmr(ik+jcjgfmb.#*\gmj}n.mer`ah b*jymxf+mmw\7f!ihd#~~r(jijgl)
-CCM^8604;9:9=2
-CCM^8604;:;8=3
-CCM^8604;:;9=@kcolcr#',Nzyay
-CCM^8604;:;:=Voc!m~tqko\7fad`+~phed{u gch+fdz+mmjvmmre#yyhkn}xhwkjx&& Wbex(for.jfpd(defd,hi~}nj"e\7f!ih lziyi\7fay.Afhbmj lx,d|cky.gutnz( #Z`nixk+mmir`kr zeyy(xamzuftd(vrl|eomy.map'nddv.
-CCM^8604;::9=2
-CCM^8604;;;8=3
-CCM^8604;;;9=@kcolcr#',Nzyay
-CCM^8604;;;:=[hss(uyp~if(oan}"iiu(nauo,nfd{lf"fp`ajaafi+encd|{'rn(uu`iix{m{gb{'cy|ta`~,\7f`n.bzgju!nton*xcax.Xkna+Dprrbixbfl.qgr'`hdc.#*\gmj}n.ahhuiet#sc~z+}dhvpgsm&pqezbln|+hmu&imjp-
-CCM^8604;;:9=2
-CCM^8604;4;8=0
-CCM^8604;4;9=@kcolcr#',Nzyay
-CCM^8604;4;:=Voc!m~tqko\7fad`+~phed{u tk\7f+kj`hknkce(deee~n(jbg.ma&u`c j~if{+yn|g'cy|ta`~io&+.Raw'k`q&nfoh+|d.y{l'rim&e{~~jk\7fgd`"wtnkcsp*mlib`%
-CCM^8604;4:9=2
-CCM^8604;5;8=3
-CCM^8604;5;9=@kcolcr#',Nzyay
-CCM^8604;5;:=Voc!nolf*eelbmjzgc&cmjot*od}gj+`ms&cm&e{~~jk\7fko "'Ou(kaz*mgznoow"ec!ah vyi+jr.\7ffg'ux{ren*cy(gahegc&cq&amexcmy.j~rkobirild"+A\7f.|gnk&cm&shc|{mo 
-CCM^8604;5:9=4625
-CCM^86048<;8=3
-CCM^86048<;9=@kcolcr#',Nzyay
-CCM^86048<;:=Ci&dztoq*chk~|ykf'btzond*xcm+kszpfeuain#z~dkn}x "'Rim&aqidb~n.mgnb.r!&mbs,im+jjcc`ce&& Sfij{n.dlvfoo(g exix`+md~{'gol&tqs,jojge 
-CCM^86048<:9=2
-CCM^86048\13;8=3
-CCM^86048\13;9=@kcolcr#',Nzyay
-CCM^86048\13;:=Uoomm&e{~~jk\7fgei"nrdeu b*hj|j.n|pht!`gs#eoh}y|nj,'Riau Po`m%Nv\7f|cdrhfa yc|+nbbn.of\7f!jc gkajonj%."Wjdiue#en\7fib`+o"atd{n `e|r(j`o.vu\7f!iaajd"
-CCM^86048\13:9=4625
-CCM^86048>;8=3
-CCM^86048>;9=@kcolcr#',Nzyay
-CCM^86048>;:=Uoomm&e{~~jk\7fgei"nrdeu wbiym+yj}l r!mhovmd+zdaf.mi&u`c go\7f\7faeo\7fgmi&ezovf$,+Qd{+cc~&omcd#~c+zncdxg'unec ec`n{+lnhmuc!qiu#ime(nv\7f|cdr!ijl#ej+|ck+gvbkr&
-CCM^86048>:9=2
-CCM^86048?;8=0
-CCM^86048?;9=@kcolcr#',\iy`b`e
-CCM^86048?;:=Uoomm&e{~~jk\7fgei"nrdeu excf(\7ffn.Qbjg%Cxwxmh|b`l.xnv!nolf*\7fden.bzgju!\7fcrf*\7f`a{~nj,
-CCM^86048?:9=2
-CCM^860488;8=0
-CCM^860488;9=@kcolcr#',Bfmayccsonf
-CCM^860488;:=Ckj!areny,|myk+}wded{ufvf`r(nv\7f|cdrdl(
-CCM^860488:9=2
-CCM^860489;8=3
-CCM^860489;9=Kiouagljpi
-CCM^860489;:=Rucqitimm,mgy.Nvvugb|oom$,+Xgkj}g'Q`ar.
-CCM^860489:9=2
-CCM^86048:;8=3
-CCM^86048:;9=@kcolcr#',Nzyay
-CCM^86048:;:=Ci&dztoq*{j{+kemmrhumteg*{cagk+~pbv`zond*jdz+kszpfeuain-*,[dnoxk"dio|gcw*ud}y.xadsq`zc sxc}aoky.dht!`cls$
-CCM^86048::9=2
-CCM^860484;8=3
-CCM^860484;9=@kcolcr#',H`daxk"Aimlcr#Fchi\7fgd`
-CCM^860484:9=2
-CCM^86048498=Fntdkroqcix
-CCM^86048499=Fuowmu
-CCM^860485;8=3
-CCM^860485;9=@kcolcr#',Xmgkhz"@tn}v ee~+[cayzarrr
-CCM^860485:9=2
-CCM^86048598=Girdz&oq*\7fndnm\7f.c'asgsp#dmfm+hd|"nhr|glocbl(xfd|vdsu{(
-CCM^86049<;8=3
-CCM^86049<;9=@kcolcr#',Nzyay
-CCM^86049<;:=Ci&dztoq*chk~|ykf'qiaje#kx\7fmf~\7fgl`&ug&imyxjdg.xfmurb}rs-
-CCM^86049<:9=2
-CCM^86049\13;8=3
-CCM^86049\13;9=@kcolcr#',Ymz{n}v
-CCM^86049\13;:=Mic!gt ne~n(mggkq'qdzc jd\7f\7figbnj"sn`|&rf{ybzn.rawu&rqutfg,\7fg+ln.pbuuittfn"
-CCM^86049\13:9=2
-CCM^86049\1398=Pbuuitt#,Bd\7f
-CCM^86049\1399=Pbuuitt#,@j|n|
-CCM^86049>;8=3
-CCM^86049>;9=@kcolcr#',Ymz{n}v
-CCM^86049>;:=Rkc`{c jd\7fnz\7f.]anrkd(Hunhiy(.j+glsi!|ne#xifg}oibg'bsape-
-CCM^86049>:9=67?7
-CCM^86049?;8=3
-CCM^86049?;9=@kcolcr#',Nzyay
-CCM^86049?;:=[hs!`gvf*ee{n|\7fkf'rim&wqebl(]ag{ob(!(Vlfk\7fn(hfnmi'rim&mfnej(j`o.vu\7f!iaajd"
-CCM^86049?:9=2
-CCM^860498;8=3
-CCM^860498;9=@kcolcr#',Nzyay
-CCM^860498;:=Voc!losh*ex(ea\7f.pbgeq&flx,jkhkx},'&Qdcapo,h`nm`.vh&lime#yyym+zcov'rim&mfnej(b}+ypnrd(cnbh`nl+oej"wtnxcros,bfxkyzgc&hfro#~dn(o|bxg)
-CCM^860498:9=2
-CCM^860::?31=Ahhgatm
-CCM^860::?28='t&iiu mex+jnke.qbrtx( Bxi+qd{+}wuc!qiu#}me|+zd.g\7fou7
-CCM^860::>31=Gutnz
-CCM^860::>28=Qbrtx&hby,bf\7fky`ck&dztoq$,[dnoxk"dio|gcw*ud}y.xadsq`zc sxc}aoky.dht!`cls$
-CCM^860::<;8=1
-CCM^8603:\13;9=^[udzpeqVdden}Wa`mZcdcngo~&kykjzmu+3&~x.}eeldyx g\7fc
-CCM^8603:\13;8=A\13ZEGEUNOr:Tm|j`i[JNKGLPt\13W\nc{Rqa~7K0.yc|
-CCM^8603:4;8=2
-CCM^8603:9;8=2
-CCM^8603:9;9=2
-CCM^8603:9;:=2
-CCM^8603:\13;;=^[udzpeqVdden}Wjgqcmgv\qo`nixkWykibn\7fu\jd\7f\7figbn|^76/ahswk`gmy bmm<6
-CCM^860334;8=2
-CCM^860334;9=2
-CCM^860339;8=@kcolcr8:
-CCM^8603:8;;=2
-CCM^860::\13>\13=3
-CCM^860::<?;=3
-CCM^860::<9:=3
-CCM^860::<;;=2
-CCM^860::<9<=A\13ZEgeunob\7f{+oej"Tcu|ondyPmzj``RFbuj|ip_yddz\7fm~z,fby
-CCM^860::>38=3
-CCM^860::<;\13=>Nhr|gloLcgln|5RWioo{raof"npn
-CCM^860::<;?=3
-CCM^860::<;1=3
-CCM^860::<9\13=JLCXWELBY_N[T\DAV[(cdcng1$Ommo~bv.zICCY\I@J[XKXQPHIUTdlfdhmagk0&Fb``}jt*vD@MRQHBCTUD[YRLEXWjgkejdnjdTuhff`Wg{keRahklihd8"Hnnj{gz+{NJM__@FMX[N]T\MHR]jjemnjbdnROkdfsm|Ocld7#Lnhj{ns/}@MEZU@DKJBTCCDNHFC\Pej\7f\7fj|nROnesguoe~P\aejdyq[Etztem~Znzxgd`^Rhhfutbf`WJgkejgu\13EaupokuEifkwFIB_^DICBFSFIHFB@G[UnnrwbxiWEbmyaqh`uTQimnc|{WM~|pbhu^crpcceT^`b`qsgmdZBoobomy5^`kiuuijlP~~bflr
-CCM^860::<;0=>Nhr|gloLcgln|5R@kcolcr-otnt7Ge}vfjmNilgo~5THa{wpnai|(t{~p7Ae}\7fonk@ndbeq4PYmjjfk,s~ut:ImyxjdgHdbfbt?TNeoz"~zg505~;Oo{raofJddoky0^w\7fu`in1:"odg505~
-CCM^860::\13>;=3
-CCM^860::<?<=2
-CCM^860::\13?1=3
-CCM^860::<91=2
-CCM^860::\13>8=3502:455
-CCM^860::\13?\13=
-CCM^860::\13?>=
-CCM^860::\13?0=2
-CCM^860::\13>:=3
-CCM^860::\13\13?=1
-CCM^860::\13\130=3
-CCM^860::>3\13=2
-CCM^860::\13\13\13=>WtnotanLegmx0WLnbhemt
-CCM^860::\13\13>=@kcolcr-otn37Ge}vfjmNilgo~5TIbn`fbt/m~e8:7;3;505~Diqqtidbx%|sz02KiuuijlEe`omy0WMmw\7fsaahw$xs|0>0>97\13:3zRfkhfm%zsz9;Oo{raofJddoky0^Uc`lke-~t\7f3;5;52<\13:tNeoz"~zg57Gltr`djFlfhnz5RCknw(tzj;31<08050rr~righ23$hgd02B`qsgmd@ooniy6W~rzjhh38(dof7;3;5;59<z
-CCM^860::>3>=3
-CCM^860::>3?=2
-CCM^860::\13<8=3
-CCM^860::>?8=2
-CCM^860::\13<9=3
-CCM^860::>?9=2
-CCM^860::\13<:=3
-CCM^860::>?:=2
-CCM^860::\13<;=3
-CCM^860::>?;=2
-CCM^860::\13<<=3
-CCM^860::>?<=2
-CCM^860::\13<\13=2
-CCM^860::>?\13=2
-CCM^860::\13<>=3
-CCM^860::>?>=2
-CCM^860::\13\139=Lhr!i&Nvgnnz
-CCM^860::\13\13:=
-CCM^860::\13\13;=upq/jjemniy&eb
-CCM^860::\13\13<=
-CCM^860::\13>1=@kcolcr#I~ni\7fay
-CCM^860::\13\138=0)40k
-CCM^860::9>9=2
-CCM^860::9>:=3
-CCM^860::9><=3
-CCM^860::9>\13=3
-CCM^860::5<<=2
-CCM^860::9>?=
-CCM^860::<8;=2
-CCM^860::<8<=
-CCM^860::<8\13=>Nhr|gloLcgln|5RJbjq&sro
-CCM^860::<8>=
-CCM^860::831=2
-CCM^860::5\139=^[udzpeqVdden}Wjgqcmgv\qo`nixkWykibn\7fu\jd\7f\7figbn|^77/ahswk`gmy icr
-CCM^860::5\13:=
-CCM^860::5\13;=2
-CCM^860::<9>=3
-CCM^860::<9?=3
-CCM^860::5\13<=2
-CCM^860::5\13\13=2
-CCM^860::5\13>=2
-CCM^860::5<\13=2
-CCM^860::5<>=2
-CCM^860::5<?=
-CCM^860::5<1=2
-CCM^860::5<0=2
-CCM^860::538=2
-CCM^860::52>=3
-CCM^860::52?=>Nhr|gloLcgln|5R@FEJ]V
-CCM^860::520=2
-CCM^860::\13>>=2
-CCM^860::\13>?=2
-CCM^8603:?;:=3
-CCM^8603:?;;=2
-CCM^8603:>;:=>FBUmkp\13
-CCM^8603:;;>=2
-CCM^860::9>;=JLCXWELBY_N[T\DAV[(cdcng1$Ommo~bv.\13cdcnglegm0]\7f|kia}@MEZUOGIX]N]]UIN\Zboobonbbn5*Ccgislw#7Idn`okp'@hdc;P~~bflrCEG^YBDGSPO_TZDA_R`kcol`iooPx`nbgRmwcoTeongmel0&Okdfsm|/;!6Ee{\7fogbDhjemt>_H`nfoky g\7fc#($%2(7X|ygei~OMDQYCOK_XMXQYAMSZcdcnglegmWJnhcrjuAeom1$Ommo~bv.\13#4Onp~mgdMagjgu8]Jjemniy&nvn,.6\13R|timmpCCNWTBMDGMWKA@BEEMW]dhvpgsmZMji~d{dh\7fRUnhegqs_Iyyzn`\7fXguuhgh\Vdee{\7fogb^Ejdfbeq1Hb{{bjwLfkd3Dlfdhnz0]\7f|kia}@MEZU@DKJBTCCDNHFC\Pej\7f\7fj|nROnesguoe~P\aejdyq[Etztem~Znzxgd`^Rhhfutbf`WJgkejgu\13Tfonp~mgdXzygl`\13\13Ahswk`gNdbokp9ZTfonp~mgd%ksk9Trsahg\7f
-CCM^860::\1328=Ubjbgke
-CCM^860::>:8=^[udzpeqVdden}Wjgqcmgv\qo`nixkWykibn\7fu\jd\7f\7figbn|^77/\7fcl`ean&yzm
-CCM^860::>\138=2
-CCM^860::521=[bu
-CCM^860:;<;8=Lh
-CCM^860::829=Rkc`{c qomo(\7ffn.dhjmgqimm,Gahke}g'Gfzcenob\7f&+.^}g'rim&s`xcgd+lj|"si!~oet*xcm+|n}v'ig(rhf*hdk~cn`v)
-CCM^860::9:9=Fh&xgs bionx\7f.jbn'rim&tfxax(dh+zjb&qzccfneeo+Bbmgiud(Ggqoifmez4."N`!qiu#iddgxk+@m+&rmrus*{bdg.hbmtc/(&Tl*ee{\7fogb"snd(vrlm~je'.raw'kt{r bionx\7f.\7ffkt&`otefgie|%
-CCM^860::\1329=Nnedfue#Kkymncn`v
-CCM^860::>:9=^[udzpeqVdden}Wjgqcmgv\qo`nixkWykibn\7fu\jd\7f\7figbn|^74/kipzxel`\7f \7fvv
-CCM^860::>\139=3
-CCM^860::\132:=Ceit|&Boobomy.H|gfrnz
-CCM^860::>::=^[udzpeqVdden}Wjgqcmgv\qo`nixkWykibn\7fu\jd\7f\7figbn|^75/zcaggi%|sz
-CCM^860::>\13:=2
-CCM^860::82;=Kiuuijlb~edf+Hdbfbt
-CCM^860::9:;=Wtc!|ne#lendo.iknhq!|i pzihamw+zjb&ggjdfx,|`n|n.{hs!\7fgnw*xcm+o{~nne`|oom*jbdn}+zm'dd(eoscio(\7fa%.Vh&rxccjlu+i+jbhdbtdfr ee`omy"+z{wc!i&nf},eifk'.mu&t{c wbi+Ti.I|mpudTd0#*n~|\7fae.vh&rmje`~,jf+ksgqsooo&flfhnz%.+^pbur(Zb#Dis|Wl;."si!kinwcb~m%\11
-CCM^860::\132;=Aoin{c Pox~x+Hdbfbt
-CCM^860::>:;=^[udzpeqVdden}Wjgqcmgv\qo`nixkWykibn\7fu\jd\7f\7figbn|^72/nilgo~%z\7fh
-CCM^860::>\13;=2
-CCM^860::82<=Uhtjahg
-CCM^860::9:<=Rkc`{c tke\7f(|fbbg'#r(os#yi\7f}{.d`"~itz&clg|~|n|%\11
-CCM^860::\132<=Qbrtx&Pqekymx}
-CCM^860::>:<=^[udzpeqVdden}Wjgqcmgv\qo`nixkWykibn\7fu\jd\7f\7figbn|^73/xtodxix{%|\7fh
-CCM^860::>\13<=2
-CCM^860::82>=Qbrtx&wby,x}hmn}qasm
-CCM^860::9:>='t&viu p\7fohmx}m{nk\7f!{ctvz,df+wd{p'enevuwo~%(+^ykqt&]j&Fjdex`Wl;."si!m~iw*\7fn|~~%\11
-CCM^860::98>=Qsgs|&Boobomy
-CCM^860::>3;=>Nhr|gloLcgln|5R`kcolcr-otn
-CCM^860::>3<=2
-CCM^860::>39=3
-CCM^860::\132>=Qbrtx&Clg|gm\7fk
-CCM^860::>:>=^[udzpeqVdden}Wjgqcmgv\qo`nixkWykibn\7fu\jd\7f\7figbn|^70/kimsfi\7fm%|\7fh
-CCM^860::>\13>=2
-CCM^860::<:8=Wioo{raofiy
-CCM^860::<:9=Voc!}himyxjdg.{|m`t`e&wjf`+zncdxg'`hdcs#kbo(magjguu-(uhlxxh}\7f}'.cib!zcgjyxyq+kezpncr(`rlg,\7f`n.ogql(!(Grf*ud}+}~|g'\7fn}&wbdx+|d.~`kiuuijl<
-CCM^860::<::=Mic!g` `ea{gekezq'or(gcwczn&+.Nvks&u`c sxclzjc+lgaism&swk~\7faei+[lnhr|glo$
-CCM^860::<:;=Wioo{raof,x}hmn}qasmd\7f!
-CCM^860::<:<=Ci&dztoq*chk~|ykf'qiaje#~~raei+zm'soahswk`g(\7ffn.ruifzgm-*,^fb`xzckj!`gs#hinf+mj`abjdl(
-CCM^860::\13><=Qbrtx
-CCM^860::<9;=Lhr!i&Nvgnnzwrwr~{Dmmhdfx,Hzno\7fap{4/:7c\7f
-CCM^860::<;:=Giamauh#',^fbznj"Tr`|cs
-CCM^860::<;9=3752
-CCM^86033:;8=>DAsgsp\1310BfxzjbnAimlcr\13VNgmejn|,b~d3\13Boobomy5059<6
-CCM^86033:;9=>DAsgsp\1310BfxzjbnAimlcr\13VYeae}\7fonk(dpc;8_bbfxzjbn'Dmmhdfx70305;
-CCM^86033:;:=>DAsgsp\1310BfxzjbnAimlcr\13V^niocn v\7fr:3Tebnan305052
-CCM^86033:;;=>DAsgsp\1310BfxzjbnAimlcr\13VOdxr|bijs(upr;8Ic{qyglfv<\13:3\130
-CCM^86033:;<=>DAsgsp\1310BfxzjbnAimlcr\13VDnd{ ~|n<\13Imjp81703;
-CCM^86033:;\13=>Ccrcros477Ae}\7fonk@ndbeq4PIdn`okp)cym\13;Afieln|059<\131
-CCM^860:;<;9=^[udzpeqVdden}Wa`mZcdcngo~&\7fb`oautZ+&,
\ No newline at end of file
diff --git a/release/windows/installer/00.installer.ico b/release/windows/installer/00.installer.ico
deleted file mode 100644 (file)
index 922c9d4..0000000
Binary files a/release/windows/installer/00.installer.ico and /dev/null differ
diff --git a/release/windows/installer/00.sconsblender.nsi b/release/windows/installer/00.sconsblender.nsi
deleted file mode 100644 (file)
index 1cb1590..0000000
+++ /dev/null
@@ -1,425 +0,0 @@
-;
-; $Id$
-;
-; Blender Self-Installer for Windows (NSIS - http://nsis.sourceforge.net)
-;
-; Requires the MoreInfo plugin - http://nsis.sourceforge.net/MoreInfo_plug-in
-;
-
-!include "MUI.nsh"
-!include "WinVer.nsh"
-!include "FileFunc.nsh"
-!include "WordFunc.nsh"
-!include "nsDialogs.nsh"
-
-SetCompressor /SOLID lzma
-
-Name "Blender VERSION" 
-
-!define MUI_ABORTWARNING
-
-!define MUI_WELCOMEPAGE_TEXT  "This wizard will guide you through the installation of Blender.\r\n\r\nIt is recommended that you close all other applications before starting Setup.\r\n\r\nNote to Win2k/XP users: You may require administrator privileges to install Blender successfully."
-!define MUI_WELCOMEFINISHPAGE_BITMAP "RELDIR\01.installer.bmp"
-!define MUI_HEADERIMAGE
-!define MUI_HEADERIMAGE_BITMAP  "RELDIR\00.header.bmp"
-!define MUI_COMPONENTSPAGE_SMALLDESC
-!define MUI_FINISHPAGE_RUN "$INSTDIR\blender.exe"
-!define MUI_CHECKBITMAP "RELDIR\00.checked.bmp"
-
-!insertmacro MUI_PAGE_WELCOME
-!insertmacro MUI_PAGE_LICENSE "DISTDIR\Copyright.txt"
-!insertmacro MUI_PAGE_COMPONENTS
-    
-!insertmacro MUI_PAGE_DIRECTORY
-Page custom DataLocation DataLocationOnLeave
-;Page custom AppDataChoice AppDataChoiceOnLeave
-Page custom PreMigrateUserSettings MigrateUserSettings
-!insertmacro MUI_PAGE_INSTFILES
-!insertmacro MUI_PAGE_FINISH
-  
-!insertmacro MUI_UNPAGE_WELCOME
-!insertmacro MUI_UNPAGE_CONFIRM
-!insertmacro MUI_UNPAGE_INSTFILES
-!insertmacro MUI_UNPAGE_FINISH
-
-!insertmacro Locate
-!insertmacro VersionCompare
-
-
-Icon "RELDIR\00.installer.ico"
-UninstallIcon "RELDIR\00.installer.ico"
-
-;--------------------------------
-;Languages
-  !insertmacro MUI_LANGUAGE "English"
-    
-;--------------------------------
-;Language Strings
-
-  ;Description
-  LangString DESC_SecCopyUI ${LANG_ENGLISH} "Copy all required files to the application folder."
-  LangString DESC_Section2 ${LANG_ENGLISH} "Add shortcut items to the Start Menu. (Recommended)"
-  LangString DESC_Section3 ${LANG_ENGLISH} "Add a shortcut to Blender on your desktop."
-  LangString DESC_Section4 ${LANG_ENGLISH} "Blender can register itself with .blend files to allow double-clicking from Windows Explorer, etc."
-  LangString TEXT_IO_TITLE ${LANG_ENGLISH} "Specify User Data Location"
-;--------------------------------
-;Data
-
-Caption "Blender VERSION Installer"
-OutFile "DISTDIR\..\blender-VERSION-windows.exe"
-InstallDir "$PROGRAMFILES\Blender Foundation\Blender"
-
-BrandingText "http://www.blender.org"
-ComponentText "This will install Blender VERSION on your computer."
-
-DirText "Use the field below to specify the folder where you want Blender to be copied to. To specify a different folder, type a new name or use the Browse button to select an existing folder."
-
-SilentUnInstall normal
-
-# Uses $0
-Function openLinkNewWindow
-  Push $3 
-  Push $2
-  Push $1
-  Push $0
-  ReadRegStr $0 HKCR "http\shell\open\command" ""
-# Get browser path
-    DetailPrint $0
-  StrCpy $2 '"'
-  StrCpy $1 $0 1
-  StrCmp $1 $2 +2 # if path is not enclosed in " look for space as final char
-    StrCpy $2 ' '
-  StrCpy $3 1
-  loop:
-    StrCpy $1 $0 1 $3
-    DetailPrint $1
-    StrCmp $1 $2 found
-    StrCmp $1 "" found
-    IntOp $3 $3 + 1
-    Goto loop
-  found:
-    StrCpy $1 $0 $3
-    StrCmp $2 " " +2
-      StrCpy $1 '$1"'
-  Pop $0
-  Exec '$1 $0'
-  Pop $1
-  Pop $2
-  Pop $3
-FunctionEnd
-
-Var BLENDERHOME
-Var DLL_found
-Var PREVHOME
-
-Function SetWinXPPathCurrentUser
-  SetShellVarContext current
-  StrCpy $BLENDERHOME "$APPDATA\Blender Foundation\Blender"
-FunctionEnd
-
-Function SetWinXPPathAllUsers
-  SetShellVarContext all
-  StrCpy $BLENDERHOME "$APPDATA\Blender Foundation\Blender"
-FunctionEnd
-
-Function SetWin9xPath
-  StrCpy $BLENDERHOME $INSTDIR
-FunctionEnd
-
-; custom controls
-Var HWND
-
-Var HWND_APPDATA
-Var HWND_INSTDIR
-Var HWND_HOMEDIR
-
-Var HWND_BUTTON_YES
-Var HWND_BUTTON_NO
-
-Var SETUSERCONTEXT
-
-Function PreMigrateUserSettings
-  StrCpy $PREVHOME "$PROFILE\Application Data\Blender Foundation\Blender"
-  StrCpy $0 "$PROFILE\Application Data\Blender Foundation\Blender\.blender"
-  
-  IfFileExists $0 0 nochange
-  
-  StrCmp $BLENDERHOME $PREVHOME nochange
-  
-  nsDialogs::Create /NOUNLOAD 1018
-  Pop $HWND
-  
-  ${If} $HWND == error
-       Abort
-  ${EndIf}
-  
-  ${NSD_CreateLabel} 0 0 100% 12u "You have existing settings at:"
-  ${NSD_CreateLabel} 0 20 100% 12u $PREVHOME
-  ${NSD_CreateLabel} 0 40 100% 12u "Do you wish to migrate this data to:"
-  ${NSD_CreateLabel} 0 60 100% 12u $BLENDERHOME
-  ${NSD_CreateLabel} 0 80 100% 12u "Please note: If you choose no, Blender will not be able to use these files!"
-  ${NSD_CreateRadioButton} 0 100 100% 12u "Yes"
-  Pop $HWND_BUTTON_YES
-  ${NSD_CreateRadioButton} 0 120 100% 12u "No"
-  Pop $HWND_BUTTON_NO
-  
-  SendMessage $HWND_BUTTON_YES ${BM_SETCHECK} 1 0
-  
-  nsDialogs::Show
-  nochange:
-  
-FunctionEnd
-
-Function MigrateUserSettings
-  ${NSD_GetState} $HWND_BUTTON_YES $R0
-  ${If} $R0 == "1"
-    CreateDirectory $BLENDERHOME
-    CopyFiles $PREVHOME\*.* $BLENDERHOME
-    ;RMDir /r $PREVHOME
-  ${EndIf}  
-FunctionEnd
-
-!define DLL_VER "9.00.21022.8"
-
-Function LocateCallback_90
-    MoreInfo::GetProductVersion "$R9"
-    Pop $0
-
-        ${VersionCompare} "$0" "${DLL_VER}" $R1
-
-        StrCmp $R1 0 0 new
-      new:
-        StrCmp $R1 1 0 old
-      old:
-        StrCmp $R1 2 0 end
-    ; Found DLL is older
-        Call DownloadDLL
-
-     end:
-       StrCpy "$0" StopLocate
-       StrCpy $DLL_found "true"
-       Push "$0"
-
-FunctionEnd
-
-Function DownloadDLL
-    MessageBox MB_OK "You will need to download the Microsoft Visual C++ 2008 Redistributable Package in order to run Blender. Pressing OK will take you to the download page, please follow the instructions on the page that appears."
-    StrCpy $0 "http://www.microsoft.com/downloads/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&DisplayLang=en"
-    Call openLinkNewWindow
-FunctionEnd
-
-Function PythonInstall
-    MessageBox MB_OK "You will need to install python 2.5.2 in order to run blender. Pressing OK will take you to the python.org website."
-    StrCpy $0 "http://www.python.org"
-    Call openLinkNewWindow
-FunctionEnd
-
-Function DataLocation
-  nsDialogs::Create /NOUNLOAD 1018
-  Pop $HWND
-  
-  ${If} $HWND == error
-    Abort
-  ${EndIf}
-  
-  ${NSD_CreateLabel} 0 0 100% 12u "Please specify where you wish to install Blender's user data files."
-  ${NSD_CreateRadioButton} 0 20 100% 12u "Use the Application Data directory (Requires Windows 2000 or better)"
-  Pop $HWND_APPDATA
-  ${NSD_CreateRadioButton} 0 50 100% 12u "Use the installation directory (ie. location chosen to install blender.exe)."
-  Pop $HWND_INSTDIR
-  ${NSD_CreateRadioButton} 0 80 100% 12u "I have defined a %HOME% variable, please install files here."
-  Pop $HWND_HOMEDIR
-  
-  ${If} ${AtMostWinME}
-    GetDlgItem $0 $HWND $HWND_APPDATA
-    EnableWindow $0 0
-    SendMessage $HWND_INSTDIR ${BM_SETCHECK} 1 0
-  ${Else}
-    SendMessage $HWND_APPDATA ${BM_SETCHECK} 1 0
-  ${EndIf}
-  
-  nsDialogs::Show
-  
-FunctionEnd
-
-Function DataLocationOnLeave
-       StrCpy $SETUSERCONTEXT "false"
-       ${NSD_GetState} $HWND_APPDATA $R0
-       ${If} $R0 == "1"
-         ; FIXME: disabled 'all users' until fully multi-user compatible
-         ;StrCpy $SETUSERCONTEXT "true"
-         Call SetWinXPPathCurrentUser
-       ${Else}
-         ${NSD_GetState} $HWND_INSTDIR $R0
-         ${If} $R0 == "1"
-           Call SetWin9xPath
-         ${Else}
-           ${NSD_GetState} $HWND_HOMEDIR $R0
-           ${If} $R0 == "1"
-             ReadEnvStr $BLENDERHOME "HOME"
-           ${EndIf}
-         ${EndIf}
-       ${EndIf}
-FunctionEnd
-
-Var HWND_APPDATA_CURRENT
-Var HWND_APPDATA_ALLUSERS
-
-Function AppDataChoice
-  StrCmp $SETUSERCONTEXT "false" skip
-  
-  nsDialogs::Create /NOUNLOAD 1018
-  Pop $HWND
-  
-  ${NSD_CreateLabel} 0 0 100% 12u "Please choose which Application Data directory to use."
-  ${NSD_CreateRadioButton} 0 40 100% 12u "Current User"
-  Pop $HWND_APPDATA_CURRENT
-  ${NSD_CreateRadioButton} 0 70 100% 12u "All Users"
-  Pop $HWND_APPDATA_ALLUSERS
-  
-  SendMessage $HWND_APPDATA_CURRENT ${BM_SETCHECK} 1 0
-  
-  StrCmp $SETUSERCONTEXT "true" 0 skip ; show dialog if we need to set context, otherwise skip it
-  nsDialogs::Show
-  
-skip:
-
-FunctionEnd
-
-Function AppDataChoiceOnLeave
-       StrCmp $SETUSERCONTEXT "false" skip
-       ${NSD_GetState} $HWND_APPDATA_CURRENT $R0
-       ${If} $R0 == "1"
-          Call SetWinXPPathCurrentUser
-       ${Else}
-          Call SetWinXPPathAllUsers
-       ${EndIf}
-skip:
-
-FunctionEnd
-
-Section "Blender-VERSION (required)" SecCopyUI
-  SectionIn RO
-
-  ; Set output path to the installation directory.
-  SetOutPath $INSTDIR
-  ; Put file there
- [ROOTDIRCONTS]
-     
-  SetOutPath $BLENDERHOME\.blender
-  [DOTBLENDERCONTS]
-  
-  SetOutPath $BLENDERHOME\.blender\scripts
-  [SCRIPTCONTS]
-  SetOutPath $BLENDERHOME\.blender\scripts\bpymodules
-  [SCRIPTMODCONTS]
-  SetOutPath $BLENDERHOME\.blender\scripts\bpymodules\colladaImEx
-  [SCRIPTMODCOLLADACONT]
-  SetOutPath $BLENDERHOME\.blender\scripts\bpydata
-  [SCRIPTDATACONTS]
-  SetOutPath $BLENDERHOME\.blender\scripts\bpydata\config
-  [SCRIPTDATACFGCONTS]
-  SetOutPath $BLENDERHOME\plugins\include
-  [PLUGINCONTS]
-  
-  ; Language files
-  [LANGUAGECONTS]
-  
-  SetOutPath $INSTDIR
-  ; Write the installation path into the registry
-  WriteRegStr HKLM SOFTWARE\BlenderFoundation "Install_Dir" "$INSTDIR"
-  WriteRegStr HKLM SOFTWARE\BlenderFoundation "Home_Dir" "$BLENDERHOME"
-  ; Write the uninstall keys for Windows
-  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender" "DisplayName" "Blender (remove only)"
-  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender" "UninstallString" '"$INSTDIR\uninstall.exe"'
-  WriteUninstaller "uninstall.exe"
-
-  IfSilent 0 +2
-    Goto silentdone
-  ; Check for msvcr80.dll - give notice to download if not found
-  MessageBox MB_OK "The installer will now check your system for the required system dlls."
-  StrCpy $1 $WINDIR
-  StrCpy $DLL_found "false"
-  ${Locate} "$1" "/L=F /M=MSVCR90.DLL /S=0B" "LocateCallback_90"
-  StrCmp $DLL_found "false" 0 +2
-    Call DownloadDLL
-  ReadRegStr $0 HKLM SOFTWARE\Python\PythonCore\2.5\InstallPath ""
-  StrCmp $0 "" 0 +2
-    Call PythonInstall
-silentdone:
-SectionEnd
-
-Section "Add Start Menu shortcuts" Section2
-  SetOutPath $INSTDIR
-  CreateDirectory "$SMPROGRAMS\Blender Foundation\Blender\"
-  CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0
-  CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Blender.lnk" "$INSTDIR\Blender.exe" "" "$INSTDIR\blender.exe" 0
-  CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Readme.lnk" "$INSTDIR\Blender.html" "" "" 0
-  CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Copyright.lnk" "$INSTDIR\Copyright.txt" "" "$INSTDIR\copyright.txt" 0
-  CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\GPL-license.lnk" "$INSTDIR\GPL-license.txt" "" "$INSTDIR\GPL-license.txt" 0
-  CreateShortCut "$SMPROGRAMS\Blender Foundation\Blender\Help.lnk" "$INSTDIR\Help.url"
-SectionEnd
-
-Section "Add Desktop Blender-VERSION shortcut" Section3
-  SetOutPath $INSTDIR
-  CreateShortCut "$DESKTOP\Blender.lnk" "$INSTDIR\blender.exe" "" "$INSTDIR\blender.exe" 0
-SectionEnd
-
-Section "Open .blend files with Blender-VERSION" Section4
-  SetOutPath $INSTDIR
-  ;ExecShell "open" '"$INSTDIR\blender.exe"' "-R -b"
-  ;do it the manual way! ;)
-  
-  WriteRegStr HKCR ".blend" "" "blendfile"
-  WriteRegStr HKCR "blendfile" "" "Blender .blend File"
-  WriteRegStr HKCR "blendfile\shell" "" "open"
-  WriteRegStr HKCR "blendfile\DefaultIcon" "" $INSTDIR\blender.exe,1
-  WriteRegStr HKCR "blendfile\shell\open\command" "" \
-    '"$INSTDIR\blender.exe" "%1"'
-  
-SectionEnd
-
-UninstallText "This will uninstall Blender VERSION. Hit next to continue."
-
-Section "Uninstall"
-  Delete $INSTDIR\uninstall.exe
-  
-  ReadRegStr $BLENDERHOME HKLM "SOFTWARE\BlenderFoundation" "Home_Dir"
-  
-  ; remove registry keys
-  DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender"
-  DeleteRegKey HKLM SOFTWARE\BlenderFoundation
-  ; remove files
-  [DELROOTDIRCONTS]
-  
-  Delete $BLENDERHOME\.blender\.bfont.ttf
-  Delete $BLENDERHOME\.blender\.Blanguages
-  ; remove shortcuts, if any.
-  Delete "$SMPROGRAMS\Blender Foundation\Blender\*.*"
-  Delete "$DESKTOP\Blender.lnk"
-  ; remove directories used.
-  RMDir /r $BLENDERHOME\.blender\locale
-  MessageBox MB_YESNO "Erase .blender\scripts folder? (ALL contents will be erased!)" /SD IDYES IDNO Next
-  RMDir /r $BLENDERHOME\.blender\scripts
-  RMDir /r $BLENDERHOME\.blender\scripts\bpymodules
-  RMDir /r $BLENDERHOME\.blender\scripts\bpydata
-  RMDir /r $BLENDERHOME\.blender\scripts\bpydata\config
-Next:
-  RMDir /r $BLENDERHOME\plugins\include
-  RMDir /r $BLENDERHOME\plugins
-  RMDir $BLENDERHOME\.blender
-  RMDir "$SMPROGRAMS\Blender Foundation\Blender"
-  RMDir "$SMPROGRAMS\Blender Foundation"
-  RMDir "$INSTDIR"
-  RMDir "$INSTDIR\.."
-SectionEnd
-
-!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
-  !insertmacro MUI_DESCRIPTION_TEXT ${SecCopyUI} $(DESC_SecCopyUI)
-  !insertmacro MUI_DESCRIPTION_TEXT ${Section2} $(DESC_Section2)
-  !insertmacro MUI_DESCRIPTION_TEXT ${Section3} $(DESC_Section3)
-  !insertmacro MUI_DESCRIPTION_TEXT ${Section4} $(DESC_Section4)
-!insertmacro MUI_FUNCTION_DESCRIPTION_END
diff --git a/release/windows/installer/00.unchecked.bmp b/release/windows/installer/00.unchecked.bmp
deleted file mode 100644 (file)
index 6d3ff5c..0000000
Binary files a/release/windows/installer/00.unchecked.bmp and /dev/null differ
diff --git a/release/windows/installer/01.installer.bmp b/release/windows/installer/01.installer.bmp
deleted file mode 100644 (file)
index 10fb014..0000000
Binary files a/release/windows/installer/01.installer.bmp and /dev/null differ
diff --git a/release/windows/installer/01.welcome.rtf b/release/windows/installer/01.welcome.rtf
deleted file mode 100644 (file)
index 3235e65..0000000
Binary files a/release/windows/installer/01.welcome.rtf and /dev/null differ
diff --git a/release/windows/installer/02.copyright.txt b/release/windows/installer/02.copyright.txt
deleted file mode 100644 (file)
index 4e67c25..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-BLENDER CREATOR LICENSE AGREEMENT
-
-IMPORTANT: PLEASE READ CAREFULLY BEFORE USING THE BLENDER CREATOR SOFTWARE. 
-
-This License Agreement for the Blender Creator software ("License Agreement") is an agreement between NaN Technologies B.V., Meerenakkerplein 11, 5652 BJ Eindhoven, the Netherlands ("NaN") and you (either an individual or a legal entity) ("You") with respect to the software product which this License Agreement accompanies (the "Software"). 
-
-By installing, copying or otherwise using the Software, You agree to be bound by the terms of this License Agreement. If You do not agree to the terms of this License Agreement do not install or use the Software.
-
-
-1. Grant of License
-
-Subject to the provisions of this License Agreement, NaN grants You a limited, non-exclusive, personal, non-sublicenseable, non-transferable, revocable license to use the Software at any computer You own or use. 
-
-2. License Restrictions
-
-Except as expressly provided under this License Agreement, or without prior written consent from NaN, or without permission by law, You may not: (a) remove or alter any proprietary, copyright or trademark notices in or on the Software; (b) modify, decompile, disassemble or reverse-engineer the Software; (c) sublicense, rent, lease, lend, assign or otherwise transfer rights to the Software.
-
-3. Permitted copying and electronic distribution of Software
-
-You are hereby granted permission to copy and distribute the Software without written agreement from NaN, only for non-commercial purposes.  Distributing the Software within a restricted non-public environment, such as using a local network in a company or a local network of a university, is considered a 'non-commercial purpose'. This entire License Agreement must appear in and/or accompany all copies of the Software.
-Distributing the Software 'bundled' in with ANY product is considered to be a 'commercial purpose'. 
-
-4. Intellectual Property Rights and Ownership
-
-Title and ownership to all rights, including intellectual property rights, in and to the Software shall at all times solely and exclusively remain with NaN. The Software is protected by national and international (copyright) laws and treaties. All rights not expressly granted herein are reserved to NaN.
-
-5. Disclaimer of Warranties
-
-NaN provides you with the Software "as is" and with all faults. NaN explicitly disclaims all warranties and guarantees and does not make any representations with respect to the Software, whether express, implied, or statutory, including, but not limited to any (if any) warranties of or related to: fitness for a particular purpose, title, non-infringement, lack of viruses, accuracy or completeness of responses, results, lack of negligence or lack of workmanlike effort, and correspondence to description. The entire risk arising out of use or performance of the Software remains with You.
-
-6. Limitation of Liability
-
-In no event shall NaN or its employees, agents or suppliers be liable for any direct, indirect, consequential, incidental, special, punitive, or other damages whatsoever (including, without limitation, damages for loss of business profits, business interruption, loss of business information, claims of third parties, damages as a result of injury to any person, or any other loss) arising out of or in connection with the license granted under this License Agreement or the use of or inability to use the Software, even if NaN has been advised of the possibility of such damages. 
-7. User warning and indemnification
-
-WARNING: use of the Software and use of any works that are (partially) created with the Software (the "Works") may cause physical or psychological reactions from You or from third parties, which may result in damages, injuries, losses and/or other negative consequences. You acknowledge that NaN can not be held liable for any such damages, injuries, losses and/or other negative consequences. You acknowledge that it is your obligation to investigate, prevent and/or minimize such reactions prior to having third parties use the Works.
-
-You shall indemnify and hold harmless NaN from and against all actions, claims, demands, proceedings, losses, damages, costs, charges and expenses, including but not limited to legal fees and expenses, arising out of or in connection with (i) the use of the Software by You and (ii) the use of any Works created with the Software by You or any third parties.
-
-8. Term and Termination
-
-This License Agreement and the license granted hereunder is effective until terminated. This License Agreement shall terminate automatically and forthwith if You fail to comply with the terms of this License Agreement. Upon termination, You shall cease the use of the Software, remove the Software from (the memory of) your computer and destroy all copies of the Software.
-
-9. Entire Agreement
-
-This License Agreement is the entire agreement between NaN and You in respect of the subject matter of the License Agreement. This License Agreement supersedes all prior written or oral agreements, proposals or understandings, and any other communications between NaN and You relating to the subject matter of this License Agreement.
-
-10. Enforceability
-
-If any provision of this License Agreement is held to be unenforceable by a court of competent jurisdiction for any reason, such provision shall be adapted or amended only to the extent necessary to make it enforceable, and the remainder of the License Agreement shall remain in effect.
-
-11. Governing law and disputes
-
-This License Agreement and all disputes arising from it will be governed by the laws of The Netherlands. All disputes arising in connection with this Agreement that cannot be settled amicably shall be brought before the competent court in Amsterdam, the Netherlands, to which jurisdiction NaN and You hereby irrevocably consent.
-
diff --git a/release/windows/installer/03.readme.txt b/release/windows/installer/03.readme.txt
deleted file mode 100644 (file)
index 9cfcc83..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-                    Blender V2.2
-
-  NaN Technologies B.V., the Netherlands
-
-     ----- GENERAL INFORMATION -----
-
-Blender Creator is a free and fully functional 3D modeling, rendering, animation and game creation package for Unix and Windows. Blender Creator is distributed without sources, it is exclusively developed and maintained by the Dutch company NaN Technologies B.V.
-
-This software is free to be applied for any purpose, excluding commercial distribution. For more about this, read the copyright notice included in the download file.
-
-The best resource for getting to know Blender Creator is of course 'The official Blender 2.0 guide'. This wonderfully designed 250 pages book contains tutorials, examples and a complete description of every aspect of the interface. 
-
-You can visit the shop page of the Blender site for more about this:
-
-    http://www.blender.nl/shop/
-
-More information about Blender can be found at:
-
-- The website
-
-    http://www.blender.nl
-
-- The beginners page
-
-    http://www.blender.nl/support/beginners.php
-
-- The Support Pages
-
-    http://www.blender.nl/support/
-
-- The frequently asked questions
-
-    http://www.blender.nl/support/faq/index.php
-
-- Tutorials
-
-  Good tutorials to start with are 'User Interface' and
-  'Navigating in 3D Space' and 'The Blender Windows'
-
-    http://www.blender.nl/search_item.php?part=tutorial
-
-- The Blender news-server: to post questions and contact other users
-
-    http://www.blender.nl/discussion/index.php
-
-
-Thank you for getting Blender Creator, I hope you will enjoy using it.
-
-Ton Roosendaal
-NaN Technologies B.V.
-
-http://www.blender.nl
-support@blender.nl
-
diff --git a/release/windows/installer/04.folder.rtf b/release/windows/installer/04.folder.rtf
deleted file mode 100644 (file)
index 1929843..0000000
Binary files a/release/windows/installer/04.folder.rtf and /dev/null differ
diff --git a/release/windows/installer/05.progress.rtf b/release/windows/installer/05.progress.rtf
deleted file mode 100644 (file)
index 5cf4ca9..0000000
Binary files a/release/windows/installer/05.progress.rtf and /dev/null differ
diff --git a/release/windows/installer/06.complete.rtf b/release/windows/installer/06.complete.rtf
deleted file mode 100644 (file)
index 1d2917d..0000000
Binary files a/release/windows/installer/06.complete.rtf and /dev/null differ
diff --git a/release/windows/installer/input/24bits-image.bmp b/release/windows/installer/input/24bits-image.bmp
deleted file mode 100644 (file)
index 5c7fd06..0000000
Binary files a/release/windows/installer/input/24bits-image.bmp and /dev/null differ
diff --git a/release/windows/publ_installer/00.installer.adx b/release/windows/publ_installer/00.installer.adx
deleted file mode 100644 (file)
index d0ecf54..0000000
+++ /dev/null
@@ -1,308 +0,0 @@
-[ADX]
-ADXVersion=1.00.00
-<=>2240
-CCM^8603:<;8=2
-CCM^8603:>;8=6
-CCM^8603:?;8=3
-CCM^8603:?;9=2
-CCM^8603:8;8=2
-CCM^8603:8;9=2
-CCM^8603::;8=2
-CCM^8603::;9=2
-CCM^8603::;:=2
-CCM^8603:;;8=2
-CCM^8603:4;:=2
-CCM^8603:4;<=2
-CCM^8603:5;8=$HM
-CCM^8603:5;9=$Dgokcl
-CCM^8603:5;:=$Naogte
-CCM^8603:5;;=$^cr
-CCM^8603:5;<=$Ii
-CCM^8603:5;\13=$Etn\7fue
-CCM^8603:5;>=[bu!\i %K`g
-CCM^8603:5;?=$Ucuz\7f
-CCM^8603:5;0=Qbjdkr %K`g
-CCM^8603:5;1=G!~uzgcw*E\7fmf&x'
-CCM^8603:5:8=$Ciom
-CCM^8603:5:9=Lbrvgtk-$"
-CCM^8603:5::=$Fdnzr
-CCM^8603;<;8=2
-CCM^8604:<;8=3
-CCM^8604:<;9=@kcolcr#',Ymz{n}v
-CCM^8604:<;:=Rkc`{c pzihamw+zjb&qirh#~c+\7fcghf"nrdeu tc`g(ik+kzst`kreg$,+Qd{+cc~&`duo#z~n{x.\7ffg'Dsgqsf*n~|\7fae.vh&rmje`~,jf+ksgqsooo&pb~d%(+^jzjt&l}ut#cbhd~jn.c'bsape#fi\7f|n|+ap'dd(g VDO+fjcn 
-CCM^8604:<:9=67?7
-CCM^8604:\13;8=3
-CCM^8604:\13;9=@kcolcr#',Ymz{n}v
-CCM^8604:\13;:=Voc!nolf*eelbmjzgc&cmjot*mgznoow"b~h{rs-*,[zn}x. ^cr*&ie*ud}+yj`v'rn(ivfx{ya\7fk+zjb&gaje-*,[zn}x. Ii#(of#sc~(oae)v'q`fr we,d~n|||ksc!|ne#legm%.+^pbur($Cbdond).bh"~it(qam~,\7fg+}\7far'cy|ta`~eeo+.bzgju/
-CCM^8604:\13:9=4625
-CCM^8604:>;8=3
-CCM^8604:>;9=@kcolcr#',Ymz{n}v
-CCM^8604:>;:=Voc!nolf*eelbmjzgc&cmjot*mgznoow"b~h{rs#kbo(b}+\gfb,Ghlz$,+Xykx}"%_d{$ jl,rg~.|ols&ug&ouo~|zbzn.voc!nolf$,+Xykx}"%Hn*&ie*ud}+jd`%s&viht#~c+g}kyypnrd(rhf*jbdn +.Rucr{&"@kbhmg,+gd'\7fn}&wbdx+|d.xzmw&dprrbixbfl.+gvbkr&
-CCM^8604:>:9=4625
-CCM^8604:?;8=3
-CCM^8604:?;9=@kcolcr#',Ymz{n}v
-CCM^8604:?;:=Voc!nolf*eelbmjzgc&cmjot*dj{+oe.gftmacr#|iy{bae.lrkcmt lx,oi\7fk+zjfh!|ne#ebn(jbykcc\7f!gh zeyy(xwxzgj(!(Vrfy\7f+*Rkx,"n`!qiu#}me|+zd.pbvmiee#~dn(mggk,'&Qzcsp*.Eg).bh"~it(bom-x+\7fj`\7f.vh&smvlbii+|ck+hkkc/(&Pqo\7fx()Mj`abj#(of#sc~(|oez"si!{ros*is|yohzkia!(otfg\7f%
-CCM^8604:?:9=4625
-CCM^8604:8;8=3
-CCM^8604:8;9=@kcolcr#',Ymz{n}v
-CCM^8604:8;:=Rkc`{c fdxnz+zck"wgr{qoqn$x!+`nkfbb!|i frxyihz+zjb&h|cmp$,+Xykx}"%IJ*&tl*odf\7fge{g'is($Cbdond).\7fa"trnx&e{~~jk\7fgei"nrdeu.
-CCM^8604:8:9=7641
-CCM^8604:9;8=3
-CCM^8604:9;9=@kcolcr#',Np\7f|jmvnio(Vrlm~n{x
-CCM^8604:9;:=Voc!{raw\7f\7f+jnbdy"tnn\7fu tbm\7f({kymgir`oc ll,\7f`n.bzgju!`gs#hinf+kszpfeumb.
-CCM^8604:9:9=15170
-CCM^8604::;8=3
-CCM^8604::;9=@kcolcr#',Np\7f|jmvnio(Vrlm~n{x
-CCM^8604::;:=Voc!{raw\7f\7f+jnbdy"tnn\7fu tbm\7f({kymgir`oc ll,\7f`n.bzgju!`gs#hinf+kszpfeumb.#*\ymx}+,Afhbmj"#~c+{\7fa{.g\7frsietjdk+a\7fkf},
-CCM^8604:::9=15170
-CCM^8604:;;8=3
-CCM^8604:;;9=@kcolcr#',Nzyay
-CCM^8604:;;:=Voc!xgtk*eelbmjzgc&cmjot*od}gj+`ms&cm&cqom\7fmo.d|"cid{&nl~,jdykjj{'cyaut-*,_zr.x~gdogqond*m+lbhmkpbhu(vawb"
-CCM^8604:;:9=4625
-CCM^8604:4;8=3
-CCM^8604:4;9=@kcolcr#',Nzyay
-CCM^8604:4;:=Voc!nolf*eelbmjzgc&cmjot*od}gj+`ms&cm&ouo~|zbz\7fkl)
-CCM^8604:4:9=4625
-CCM^8604:5;8=3
-CCM^8604:5;9=@kcolcr#',Nzyay
-CCM^8604:5;:=Voc!nolf*eelbmjzgc&cmjot*ex(j.Ykcc+Nfjy#legm+oej"ditdb mex+jn.dxguqsartfd"
-CCM^8604:5:9=4625
-CCM^8604;<;8=3
-CCM^8604;<;9=@kcolcr#',Nzyay
-CCM^8604;<;:=Voc!xgsp}cyl+wd{"tvdkofjoh+\7fj}+gldiszccw$,+Xykx}"%E`feeo(,\7fg+}\7far'cy|ta`~eeo+g\7fkot(!(Vrfy\7f+*Bieapb$!|i pae{(dxn|"snd(vapy{dzo#{|mscb|cd#cxne%
-CCM^8604;<:9=2
-CCM^8604;\13;8=3
-CCM^8604;\13;9=@kcolcr#',Nzyay
-CCM^8604;\13;:=Mic!gt ne~n(dh+zjb&qzigqkax(\7ffjz"pcsm&svz|d{n.\7fa"uso(eovfh+fdz+lg'`n}hd-*,[dnoxk"dio|gcw*ud}y.xadsq`zc sxc}aoky.dht!`cls$
-CCM^8604;\13:9=2
-CCM^8604;>;8=3
-CCM^8604;>;9=@kcolcr#',Nzyay
-CCM^8604;>;:=Onurahg#imiaek\7f.dnjd u)-
-CCM^8604;>:9=2
-CCM^8604;?;8=3
-CCM^8604;?;9=@kcolcr#',Nzyay
-CCM^8604;?;:=Voc!ksswea+znib}vu\7f!ahflxaj|bae.dnjd(rhb~,|ix.x{rwirmb we,im+cn|ebb!\7fotk*xcm+}r}vbk!zcgjyxyq+md{nc&ogr ao,mg~`o "'Vmmgsf*odf\7fohz"~itz&sllx|iyk+~phphlcr#lcy(ckg~,
-CCM^8604;?:9=2
-CCM^8604;8;8=3
-CCM^8604;8;9=@kcolcr#',Nzyay
-CCM^8604;8;:=Voc!aren*eelbmjzgc&hf&tko,manbo.`bjn\7f&cl\7f`o(ea\7f.`b&smaip~iymo +.Rkc`{c `eb\7fihz+wmrt!{ifw}mym+~yatnbdz&flx,cmg~%
-CCM^8604;8:9=4625
-CCM^8604;9;8=3
-CCM^8604;9;9=@kcolcr#',Nzyay
-CCM^8604;9;:=Voc!mhd#ej+|ck+]gk`,M~tqko\7faei+tkw&gaje#}mx(ykjmjbb!jcflxi+igb+ad'rim&iwoax(ha~bf'dd(vrlziydr.nvvugb|cd-*,_`b}+]gk`,M~tqko\7faei+tkw&gaje#gmr(ik+jcjgfmb.#*\gmj}n.mer`ah b*jymxf+mmw\7f!ihd#~~r(jijgl)
-CCM^8604;9:9=2
-CCM^8604;:;8=3
-CCM^8604;:;9=@kcolcr#',Nzyay
-CCM^8604;:;:=Voc!m~tqko\7fad`+~phed{u gch+fdz+mmjvmmre#yyhkn}xhwkjx&& Wbex(for.jfpd(defd,hi~}nj"e\7f!ih lziyi\7fay.Afhbmj lx,d|cky.gutnz( #Z`nixk+mmir`kr zeyy(xamzuftd(vrl|eomy.map'nddv.
-CCM^8604;::9=2
-CCM^8604;;;8=3
-CCM^8604;;;9=@kcolcr#',Nzyay
-CCM^8604;;;:=[hss(uyp~if(oan}"iiu(nauo,nfd{lf"fp`ajaafi+encd|{'rn(uu`iix{m{gb{'cy|ta`~,\7f`n.bzgju!nton*xcax.Xkna+Dprrbixbfl.qgr'`hdc.#*\gmj}n.ahhuiet#sc~z+}dhvpgsm&pqezbln|+hmu&imjp-
-CCM^8604;;:9=2
-CCM^8604;4;8=0
-CCM^8604;4;9=@kcolcr#',Nzyay
-CCM^8604;4;:=Voc!m~tqko\7fad`+~phed{u tk\7f+kj`hknkce(deee~n(jbg.ma&u`c j~if{+yn|g'cy|ta`~io&+.Raw'k`q&nfoh+|d.y{l'rim&e{~~jk\7fgd`"wtnkcsp*mlib`%
-CCM^8604;4:9=2
-CCM^8604;5;8=3
-CCM^8604;5;9=@kcolcr#',Nzyay
-CCM^8604;5;:=Voc!nolf*eelbmjzgc&cmjot*od}gj+`ms&cm&e{~~jk\7fko "'Ou(kaz*mgznoow"ec!ah vyi+jr.\7ffg'ux{ren*cy(gahegc&cq&amexcmy.j~rkobirild"+A\7f.|gnk&cm&shc|{mo 
-CCM^8604;5:9=4625
-CCM^86048<;8=3
-CCM^86048<;9=@kcolcr#',Nzyay
-CCM^86048<;:=Ci&dztoq*chk~|ykf'btzond*xcm+kszpfeuain#z~dkn}x "'Rim&aqidb~n.mgnb.r!&mbs,im+jjcc`ce&& Sfij{n.dlvfoo(g exix`+md~{'gol&tqs,jojge 
-CCM^86048<:9=2
-CCM^86048\13;8=3
-CCM^86048\13;9=@kcolcr#',Nzyay
-CCM^86048\13;:=Uoomm&e{~~jk\7fgei"nrdeu b*hj|j.n|pht!`gs#eoh}y|nj,'Riau Po`m%Nv\7f|cdrhfa yc|+nbbn.of\7f!jc gkajonj%."Wjdiue#en\7fib`+o"atd{n `e|r(j`o.vu\7f!iaajd"
-CCM^86048\13:9=4625
-CCM^86048>;8=3
-CCM^86048>;9=@kcolcr#',Nzyay
-CCM^86048>;:=Uoomm&e{~~jk\7fgei"nrdeu wbiym+yj}l r!mhovmd+zdaf.mi&u`c go\7f\7faeo\7fgmi&ezovf$,+Qd{+cc~&omcd#~c+zncdxg'unec ec`n{+lnhmuc!qiu#ime(nv\7f|cdr!ijl#ej+|ck+gvbkr&
-CCM^86048>:9=2
-CCM^86048?;8=0
-CCM^86048?;9=@kcolcr#',\iy`b`e
-CCM^86048?;:=Uoomm&e{~~jk\7fgei"nrdeu excf(\7ffn.Qbjg%Cxwxmh|b`l.xnv!nolf*\7fden.bzgju!\7fcrf*\7f`a{~nj,
-CCM^86048?:9=2
-CCM^860488;8=0
-CCM^860488;9=@kcolcr#',Bfmayccsonf
-CCM^860488;:=Ckj!areny,|myk+}wded{ufvf`r(nv\7f|cdrdl(
-CCM^860488:9=2
-CCM^860489;8=3
-CCM^860489;9=Kiouagljpi
-CCM^860489;:=Rucqitimm,mgy.Nvvugb|oom$,+Xgkj}g'Q`ar.
-CCM^860489:9=2
-CCM^86048:;8=3
-CCM^86048:;9=@kcolcr#',Nzyay
-CCM^86048:;:=Ci&dztoq*{j{+kemmrhumteg*{cagk+~pbv`zond*jdz+kszpfeuain-*,[dnoxk"dio|gcw*ud}y.xadsq`zc sxc}aoky.dht!`cls$
-CCM^86048::9=2
-CCM^860484;8=3
-CCM^860484;9=@kcolcr#',H`daxk"Aimlcr#Fchi\7fgd`
-CCM^860484:9=2
-CCM^86048498=Fntdkroqcix
-CCM^86048499=Fuowmu
-CCM^860485;8=3
-CCM^860485;9=@kcolcr#',Xmgkhz"@tn}v ee~+[cayzarrr
-CCM^860485:9=2
-CCM^86048598=Girdz&oq*\7fndnm\7f.c'asgsp#dmfm+hd|"nhr|glocbl(xfd|vdsu{(
-CCM^86049<;8=3
-CCM^86049<;9=@kcolcr#',Nzyay
-CCM^86049<;:=Ci&dztoq*chk~|ykf'qiaje#kx\7fmf~\7fgl`&ug&imyxjdg.xfmurb}rs-
-CCM^86049<:9=2
-CCM^86049\13;8=3
-CCM^86049\13;9=@kcolcr#',Ymz{n}v
-CCM^86049\13;:=Mic!gt ne~n(mggkq'qdzc jd\7f\7figbnj"sn`|&rf{ybzn.rawu&rqutfg,\7fg+ln.pbuuittfn"
-CCM^86049\13:9=2
-CCM^86049\1398=Pbuuitt#,Bd\7f
-CCM^86049\1399=Pbuuitt#,@j|n|
-CCM^86049>;8=3
-CCM^86049>;9=@kcolcr#',Ymz{n}v
-CCM^86049>;:=Rkc`{c jd\7fnz\7f.]anrkd(Hunhiy(.j+glsi!|ne#xifg}oibg'bsape-
-CCM^86049>:9=67?7
-CCM^86049?;8=3
-CCM^86049?;9=@kcolcr#',Nzyay
-CCM^86049?;:=[hs!`gvf*ee{n|\7fkf'rim&wqebl(]ag{ob(!(Vlfk\7fn(hfnmi'rim&mfnej(j`o.vu\7f!iaajd"
-CCM^86049?:9=2
-CCM^860498;8=3
-CCM^860498;9=@kcolcr#',Nzyay
-CCM^860498;:=Voc!losh*ex(ea\7f.pbgeq&flx,jkhkx},'&Qdcapo,h`nm`.vh&lime#yyym+zcov'rim&mfnej(b}+ypnrd(cnbh`nl+oej"wtnxcros,bfxkyzgc&hfro#~dn(o|bxg)
-CCM^860498:9=2
-CCM^860::?31=Ahhgatm
-CCM^860::?28='t&iiu mex+jnke.qbrtx( Bxi+qd{+}wuc!qiu#}me|+zd.g\7fou7
-CCM^860::>31=Gutnz
-CCM^860::>28=Qbrtx&hby,bf\7fky`ck&dztoq$,[dnoxk"dio|gcw*ud}y.xadsq`zc sxc}aoky.dht!`cls$
-CCM^860::<;8=1
-CCM^8603:\13;9=^[udzpeqVdden}Wa`mZcdcngo~&kykjzmu+3&~x.}eeldyx g\7fc
-CCM^8603:\13;8=A\13ZEGEUNOr:Tm|j`i[JNKGLPt\13W\nc{Rqa~EN(zjz
-CCM^8603:4;8=2
-CCM^8603:9;8=2
-CCM^8603:9;9=2
-CCM^8603:9;:=2
-CCM^8603:\13;;=^[udzpeqVdden}Wjgqcmgv\qo`nixkWykibn\7fu\jd\7f\7figbn|^76/ahswk`gmy bmm<6
-CCM^860334;8=2
-CCM^860334;9=2
-CCM^860339;8=
-CCM^8603:8;;=2
-CCM^860::\13>\13=3
-CCM^860::<?;=3
-CCM^860::<9:=3
-CCM^860::<;;=2
-CCM^860::<9<=A\13ZEgeunob\7f{+oej"Tcu|ondyPmzj``RFbuj|ip_yddz\7fm~z,fby
-CCM^860::>38=3
-CCM^860::<;\13=>Nhr|gloLcgln|5RWioo{raof"npn
-CCM^860::<;?=3
-CCM^860::<;1=3
-CCM^860::<9\13=JLCXWELBY_N[T\DAV[(cdcng1$Ommo~bv.zICCY\I@J[XKXQPHIUTdlfdhmagk0&Fb``}jt*vD@MRQHBCTUD[YRLEXWjgkejdnjdTuhff`Wg{keRahklihd8"Hnnj{gz+{NJM__@FMX[N]T\MHR]jjemnjbdnROkdfsm|Ocld7#Lnhj{ns/}@MEZU@DKJBTCCDNHFC\Pej\7f\7fj|nROnesguoe~P\aejdyq[Etztem~Znzxgd`^Rhhfutbf`WJgkejgu\13EaupokuEifkwFIB_^DICBFSFIHFB@G[UnnrwbxiWEbmyaqh`uTQimnc|{WM~|pbhu^crpcceT^`b`qsgmdZBoobomy5^`kiuuijlP~~bflr
-CCM^860::<;0=>Nhr|gloLcgln|5R@kcolcr-otnt7Ge}vfjmNilgo~5THa{wpnai|(t{~p7Ae}\7fonk@ndbeq4PYmjjfk,s~ut:ImyxjdgHdbfbt?TNeoz"~zg505~;Oo{raofJddoky0^w\7fu`in1:"odg505~
-CCM^860::\13>;=3
-CCM^860::<?<=2
-CCM^860::\13?1=3
-CCM^860::<91=2
-CCM^860::\13>8=3502:455
-CCM^860::\13?\13=
-CCM^860::\13?>=
-CCM^860::\13?0=2
-CCM^860::\13>:=3
-CCM^860::\13\13?=1
-CCM^860::\13\130=3
-CCM^860::>3\13=2
-CCM^860::\13\13\13=>WtnotanLegmx0WLnbhemt
-CCM^860::\13\13>=@kcolcr-otn37Ge}vfjmNilgo~5TIbn`fbt/m~e8:7;3;505~Diqqtidbx%|sz02KiuuijlEe`omy0WMmw\7fsaahw$xs|0>0>97\13:3zRfkhfm%zsz9;Oo{raofJddoky0^Uc`lke-~t\7f3;5;52<\13:tNeoz"~zg57Gltr`djFlfhnz5RCknw(tzj;31<08050rr~righ23$hgd02B`qsgmd@ooniy6W~rzjhh38(dof7;3;5;59<z
-CCM^860::>3>=3
-CCM^860::>3?=2
-CCM^860::\13<8=3
-CCM^860::>?8=2
-CCM^860::\13<9=3
-CCM^860::>?9=2
-CCM^860::\13<:=3
-CCM^860::>?:=2
-CCM^860::\13<;=3
-CCM^860::>?;=2
-CCM^860::\13<<=3
-CCM^860::>?<=2
-CCM^860::\13<\13=2
-CCM^860::>?\13=2
-CCM^860::\13<>=3
-CCM^860::>?>=2
-CCM^860::\13\139=Lhr!i&Nvgnnz
-CCM^860::\13\13:=
-CCM^860::\13\13;=upq/jjemniy&eb
-CCM^860::\13\13<=
-CCM^860::\13>1=@kcolcr#Zyidb}ckp
-CCM^860::\13\138=0)43
-CCM^860::9>9=2
-CCM^860::9>:=3
-CCM^860::9><=3
-CCM^860::9>\13=3
-CCM^860::5<<=2
-CCM^860::9>?=
-CCM^860::<8;=2
-CCM^860::<8<=
-CCM^860::<8\13=>Nhr|gloLcgln|5RJbjq&sro
-CCM^860::<8>=
-CCM^860::831=2
-CCM^860::5\139=^[udzpeqVdden}Wjgqcmgv\qo`nixkWykibn\7fu\s\7fngWb`xzckjdzZ02$ee{\7fogbgu(cev
-CCM^860::5\13:=
-CCM^860::5\13;=2
-CCM^860::<9>=3
-CCM^860::<9?=3
-CCM^860::5\13<=2
-CCM^860::5\13\13=2
-CCM^860::5\13>=3
-CCM^860::5<\13=2
-CCM^860::5<>=2
-CCM^860::5<?=
-CCM^860::5<1=2
-CCM^860::5<0=2
-CCM^860::538=2
-CCM^860::52>=3
-CCM^860::52?=>Nhr|gloLcgln|5R@FEJ]V
-CCM^860::520=2
-CCM^860::\13>>=2
-CCM^860::\13>?=2
-CCM^8603:?;:=3
-CCM^8603:?;;=2
-CCM^8603:>;:=>FBUmkp\13
-CCM^8603:;;>=2
-CCM^860::9>;=JLCXWELBY_N[T\DAV[(cdcng1$Ommo~bv.\13cdcnglegm0]\7f|kia}@MEZUOGIX]N]]UIN\Zboobonbbn5*Ccgislw#7Idn`okp'@hdc;P~~bflrCEG^YBDGSPO_TZDA_R`kcol`iooPx`nbgRmwcoTeongmel0&Okdfsm|/;!6Ee{\7fogbDhjemt>_H`nfoky g\7fc#($%2(7X|ygei~OMDQYCOK_XMXQYAMSZcdcnglegmWJnhcrjuAeom1$Ommo~bv.\13#4Onp~mgdMagjgu8]Jjemniy&nvn,.6\13R|timmpCCNWTBMDGMWKA@BEEMW]dhvpgsmZMji~d{dh\7fRUnhegqs_Iyyzn`\7fXguuhgh\Vdee{\7fogb^Ejdfbeq1Hb{{bjwLfkd3Dlfdhnz0]\7f|kia}@MEZU@DKJBTCCDNHFC\Pej\7f\7fj|nROnesguoe~P\aejdyq[Etztem~Znzxgd`^Rhhfutbf`WJgkejgu\13Tfonp~mgdXzygl`\13\13Ahswk`gNdbokp9ZTfonp~mgd%ksk9Trsahg\7f
-CCM^860::\1328=Ubjbgke
-CCM^860::>:8=^[udzpeqVdden}Wjgqcmgv\qo`nixkWykibn\7fu\s\7fngWb`xzckjdzZ02${ndhafk,urg
-CCM^860::>\138=2
-CCM^860::521=[bu
-CCM^860:;<;8=Lh
-CCM^860::829=Rkc`{c qomo(\7ffn.dhjmgqimm,Gahke}g'Gfzcenob\7f&+.^}g'rim&s`xcgd+lj|"si!~oet*xcm+|n}v'ig(rhf*hdk~cn`v)
-CCM^860::9:9=Fh&xgs bionx\7f.jbn'rim&tfxax(dh+zjb&qzccfneeo+Bbmgiud(Ggqoifmez4."N`!qiu#iddgxk+@m+&rmrus*{bdg.hbmtc/(&Tl*ee{\7fogb"snd(vrlm~je'.raw'kt{r bionx\7f.\7ffkt&`otefgie|%
-CCM^860::\1329=Nnedfue#Kkymncn`v
-CCM^860::>:9=^[udzpeqVdden}Wjgqcmgv\qo`nixkWykibn\7fu\s\7fngWb`xzckjdzZ01$odxr|bijs(upr
-CCM^860::>\139=3
-CCM^860::\132:=Ceit|&Boobomy.H|gfrnz
-CCM^860::>::=^[udzpeqVdden}Wjgqcmgv\qo`nixkWykibn\7fu\s\7fngWb`xzckjdzZ00$~niocn v\7fr
-CCM^860::>\13:=2
-CCM^860::82;=Kiuuijlb~edf+Hdbfbt
-CCM^860::9:;=Wtc!|ne#lendo.iknhq!|i pzihamw+zjb&ggjdfx,|`n|n.{hs!\7fgnw*xcm+o{~nne`|oom*jbdn}+zm'dd(eoscio(\7fa%.Vh&rxccjlu+i+jbhdbtdfr ee`omy"+z{wc!i&nf},eifk'.mu&t{c wbi+Ti.I|mpudTd0#*n~|\7fae.vh&rmje`~,jf+ksgqsooo&flfhnz%.+^pbur(Zb#Dis|Wl;."si!kinwcb~m%\11
-CCM^860::\132;=Aoin{c Pox~x+Hdbfbt
-CCM^860::>:;=^[udzpeqVdden}Wjgqcmgv\qo`nixkWykibn\7fu\s\7fngWb`xzckjdzZ07$jddoky ps`
-CCM^860::>\13;=2
-CCM^860::82<=Uhtjahg
-CCM^860::9:<=Rkc`{c tke\7f(|fbbg'#r(os#yi\7f}{.d`"~itz&clg|~|n|%\11
-CCM^860::\132<=Qbrtx&Pqekymx}
-CCM^860::>:<=^[udzpeqVdden}Wjgqcmgv\qo`nixkWykibn\7fu\s\7fngWb`xzckjdzZ06$|ygl|n}q)tun
-CCM^860::>\13<=2
-CCM^860::82>=Qbrtx&wby,x}hmn}qasm
-CCM^860::9:>='t&viu p\7fohmx}m{nk\7f!{ctvz,df+wd{p'enevuwo~%(+^ykqt&]j&Fjdex`Wl;."si!m~iw*\7fn|~~%\11
-CCM^860::98>=Qsgs|&Boobomy.[{`kor`cr
-CCM^860::>3;=>Nhr|gloLcgln|5R`kcolcr-otn
-CCM^860::>3<=2
-CCM^860::>39=3
-CCM^860::\132>=Qbrtx&Clg|gm\7fk
-CCM^860::>:>=^[udzpeqVdden}Wjgqcmgv\qo`nixkWykibn\7fu\s\7fngWb`xzckjdzZ05$ode{bnzg)tun
-CCM^860::>\13>=2
-CCM^860::<:8=Wioo{raofiy
-CCM^860::<:9=Voc!}himyxjdg.{|m`t`e&wjf`+zncdxg'`hdcs#kbo(magjguu-(uhlxxh}\7f}'.cib!zcgjyxyq+kezpncr(`rlg,\7f`n.ogql(!(Grf*ud}+}~|g'\7fn}&wbdx+|d.~`kiuuijl<
-CCM^860::<::=Mic!g` `ea{gekezq'or(gcwczn&+.Nvks&u`c sxclzjc+lgaism&swk~\7faei+[lnhr|glo$
-CCM^860::<:;=Wioo{raof,x}hmn}qasmd\7f!
-CCM^860::<:<=Ci&dztoq*chk~|ykf'qiaje#~~raei+zm'soahswk`g(\7ffn.ruifzgm-*,^fb`xzckj!`gs#hinf+mj`abjdl(
-CCM^860::\13><=Qbrtx
-CCM^860::<9;=Lhr!i&Nvgnnzwrwr~{Dmmhdfx,[}ibb}jbt}:(21v
-CCM^860::<;:=Giamauh#',^fbznj"Tr`|cs
-CCM^860::<;9=3752
-CCM^860:;<;9=^[udzpeqVdden}Wa`mZcdcngo~&\7fb`oautZ+&,
\ No newline at end of file
diff --git a/release/windows/publ_installer/00.installer.ico b/release/windows/publ_installer/00.installer.ico
deleted file mode 100644 (file)
index 4daf11e..0000000
Binary files a/release/windows/publ_installer/00.installer.ico and /dev/null differ
diff --git a/release/windows/publ_installer/01.installer.bmp b/release/windows/publ_installer/01.installer.bmp
deleted file mode 100644 (file)
index d62832c..0000000
Binary files a/release/windows/publ_installer/01.installer.bmp and /dev/null differ
diff --git a/release/windows/publ_installer/01.welcome.rtf b/release/windows/publ_installer/01.welcome.rtf
deleted file mode 100644 (file)
index b7ff8c2..0000000
Binary files a/release/windows/publ_installer/01.welcome.rtf and /dev/null differ
diff --git a/release/windows/publ_installer/02.copyright.txt b/release/windows/publ_installer/02.copyright.txt
deleted file mode 100644 (file)
index 4e67c25..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-BLENDER CREATOR LICENSE AGREEMENT
-
-IMPORTANT: PLEASE READ CAREFULLY BEFORE USING THE BLENDER CREATOR SOFTWARE. 
-
-This License Agreement for the Blender Creator software ("License Agreement") is an agreement between NaN Technologies B.V., Meerenakkerplein 11, 5652 BJ Eindhoven, the Netherlands ("NaN") and you (either an individual or a legal entity) ("You") with respect to the software product which this License Agreement accompanies (the "Software"). 
-
-By installing, copying or otherwise using the Software, You agree to be bound by the terms of this License Agreement. If You do not agree to the terms of this License Agreement do not install or use the Software.
-
-
-1. Grant of License
-
-Subject to the provisions of this License Agreement, NaN grants You a limited, non-exclusive, personal, non-sublicenseable, non-transferable, revocable license to use the Software at any computer You own or use. 
-
-2. License Restrictions
-
-Except as expressly provided under this License Agreement, or without prior written consent from NaN, or without permission by law, You may not: (a) remove or alter any proprietary, copyright or trademark notices in or on the Software; (b) modify, decompile, disassemble or reverse-engineer the Software; (c) sublicense, rent, lease, lend, assign or otherwise transfer rights to the Software.
-
-3. Permitted copying and electronic distribution of Software
-
-You are hereby granted permission to copy and distribute the Software without written agreement from NaN, only for non-commercial purposes.  Distributing the Software within a restricted non-public environment, such as using a local network in a company or a local network of a university, is considered a 'non-commercial purpose'. This entire License Agreement must appear in and/or accompany all copies of the Software.
-Distributing the Software 'bundled' in with ANY product is considered to be a 'commercial purpose'. 
-
-4. Intellectual Property Rights and Ownership
-
-Title and ownership to all rights, including intellectual property rights, in and to the Software shall at all times solely and exclusively remain with NaN. The Software is protected by national and international (copyright) laws and treaties. All rights not expressly granted herein are reserved to NaN.
-
-5. Disclaimer of Warranties
-
-NaN provides you with the Software "as is" and with all faults. NaN explicitly disclaims all warranties and guarantees and does not make any representations with respect to the Software, whether express, implied, or statutory, including, but not limited to any (if any) warranties of or related to: fitness for a particular purpose, title, non-infringement, lack of viruses, accuracy or completeness of responses, results, lack of negligence or lack of workmanlike effort, and correspondence to description. The entire risk arising out of use or performance of the Software remains with You.
-
-6. Limitation of Liability
-
-In no event shall NaN or its employees, agents or suppliers be liable for any direct, indirect, consequential, incidental, special, punitive, or other damages whatsoever (including, without limitation, damages for loss of business profits, business interruption, loss of business information, claims of third parties, damages as a result of injury to any person, or any other loss) arising out of or in connection with the license granted under this License Agreement or the use of or inability to use the Software, even if NaN has been advised of the possibility of such damages. 
-7. User warning and indemnification
-
-WARNING: use of the Software and use of any works that are (partially) created with the Software (the "Works") may cause physical or psychological reactions from You or from third parties, which may result in damages, injuries, losses and/or other negative consequences. You acknowledge that NaN can not be held liable for any such damages, injuries, losses and/or other negative consequences. You acknowledge that it is your obligation to investigate, prevent and/or minimize such reactions prior to having third parties use the Works.
-
-You shall indemnify and hold harmless NaN from and against all actions, claims, demands, proceedings, losses, damages, costs, charges and expenses, including but not limited to legal fees and expenses, arising out of or in connection with (i) the use of the Software by You and (ii) the use of any Works created with the Software by You or any third parties.
-
-8. Term and Termination
-
-This License Agreement and the license granted hereunder is effective until terminated. This License Agreement shall terminate automatically and forthwith if You fail to comply with the terms of this License Agreement. Upon termination, You shall cease the use of the Software, remove the Software from (the memory of) your computer and destroy all copies of the Software.
-
-9. Entire Agreement
-
-This License Agreement is the entire agreement between NaN and You in respect of the subject matter of the License Agreement. This License Agreement supersedes all prior written or oral agreements, proposals or understandings, and any other communications between NaN and You relating to the subject matter of this License Agreement.
-
-10. Enforceability
-
-If any provision of this License Agreement is held to be unenforceable by a court of competent jurisdiction for any reason, such provision shall be adapted or amended only to the extent necessary to make it enforceable, and the remainder of the License Agreement shall remain in effect.
-
-11. Governing law and disputes
-
-This License Agreement and all disputes arising from it will be governed by the laws of The Netherlands. All disputes arising in connection with this Agreement that cannot be settled amicably shall be brought before the competent court in Amsterdam, the Netherlands, to which jurisdiction NaN and You hereby irrevocably consent.
-
diff --git a/release/windows/publ_installer/03.readme.txt b/release/windows/publ_installer/03.readme.txt
deleted file mode 100644 (file)
index 9cfcc83..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-                    Blender V2.2
-
-  NaN Technologies B.V., the Netherlands
-
-     ----- GENERAL INFORMATION -----
-
-Blender Creator is a free and fully functional 3D modeling, rendering, animation and game creation package for Unix and Windows. Blender Creator is distributed without sources, it is exclusively developed and maintained by the Dutch company NaN Technologies B.V.
-
-This software is free to be applied for any purpose, excluding commercial distribution. For more about this, read the copyright notice included in the download file.
-
-The best resource for getting to know Blender Creator is of course 'The official Blender 2.0 guide'. This wonderfully designed 250 pages book contains tutorials, examples and a complete description of every aspect of the interface. 
-
-You can visit the shop page of the Blender site for more about this:
-
-    http://www.blender.nl/shop/
-
-More information about Blender can be found at:
-
-- The website
-
-    http://www.blender.nl
-
-- The beginners page
-
-    http://www.blender.nl/support/beginners.php
-
-- The Support Pages
-
-    http://www.blender.nl/support/
-
-- The frequently asked questions
-
-    http://www.blender.nl/support/faq/index.php
-
-- Tutorials
-
-  Good tutorials to start with are 'User Interface' and
-  'Navigating in 3D Space' and 'The Blender Windows'
-
-    http://www.blender.nl/search_item.php?part=tutorial
-
-- The Blender news-server: to post questions and contact other users
-
-    http://www.blender.nl/discussion/index.php
-
-
-Thank you for getting Blender Creator, I hope you will enjoy using it.
-
-Ton Roosendaal
-NaN Technologies B.V.
-
-http://www.blender.nl
-support@blender.nl
-
diff --git a/release/windows/publ_installer/04.folder.rtf b/release/windows/publ_installer/04.folder.rtf
deleted file mode 100644 (file)
index 2e9daee..0000000
Binary files a/release/windows/publ_installer/04.folder.rtf and /dev/null differ
diff --git a/release/windows/publ_installer/05.progress.rtf b/release/windows/publ_installer/05.progress.rtf
deleted file mode 100644 (file)
index af6b140..0000000
Binary files a/release/windows/publ_installer/05.progress.rtf and /dev/null differ
diff --git a/release/windows/publ_installer/06.complete.rtf b/release/windows/publ_installer/06.complete.rtf
deleted file mode 100644 (file)
index d901313..0000000
Binary files a/release/windows/publ_installer/06.complete.rtf and /dev/null differ
index 85486c3a81fe890e70eb98c60e3c636362a6ff7c..087369e0ad4809944826d8edb795ae6c3c529b22 100644 (file)
@@ -159,7 +159,6 @@ COMLIB += $(OCGDIR)/blender/makesdna/$(DEBUG_DIR)libdna.a
 COMLIB += $(NAN_GUARDEDALLOC)/lib/libguardedalloc.a
 COMLIB += $(NAN_MEMUTIL)/lib/libmemutil.a
 COMLIB += $(NAN_PNG)/lib/libpng.a
-COMLIB += $(OCGDIR)/blender/yafray/$(DEBUG_DIR)libyafrayexport.a
 
 ifeq ($(WITH_QUICKTIME), true)
     COMLIB += $(OCGDIR)/blender/blenderqt/$(DEBUG_DIR)libblenderqt.a
index 9ec9efa6a8db360cd5ae367b245896e2465d4a26..344d51db248b53450df8e93ab829c957670acb8d 100644 (file)
@@ -41,7 +41,3 @@ ENDIF(WITH_QUICKTIME)
 IF(WITH_PYTHON)
   SUBDIRS(python)
 ENDIF(WITH_PYTHON)
-
-IF(WITH_YAFRAY)
-  SUBDIRS(yafray)
-ENDIF(WITH_YAFRAY)
index b8809c87213ead47af83a59d75d52816f349b410..64eb1a2614b6a1f45c5e63a21a148c57a7be7a0a 100644 (file)
@@ -32,7 +32,7 @@ include nan_definitions.mk
 
 DIRS = windowmanager editors blenloader readblenfile
 DIRS += avi imbuf render radiosity blenlib blenkernel blenpluginapi
-DIRS += makesdna makesrna yafray
+DIRS += makesdna makesrna
 DIRS += python nodes gpu
 DIRS += blenfont
 
index f8b7fd358fefade163f5b17f4b3c74b7d54f2925..691fbf9b494c6c195d90d5ada1a91f47a397b4bb 100644 (file)
@@ -25,9 +25,6 @@ SConscript(['avi/SConscript',
 if env['WITH_BF_PYTHON']:
     SConscript(['python/SConscript'])
 
-if env['WITH_BF_YAFRAY']:
-    SConscript(['yafray/SConscript'])
-
 if env['WITH_BF_DDS']:
     SConscript (['imbuf/intern/dds/SConscript'])
 
index 5465600d22be8b4083dc3e650841bb70d11679bc..8ba7dc123e78383f6ad06c1a6dbacba3a5819e86 100644 (file)
@@ -29,14 +29,9 @@ FILE(GLOB SRC intern/source/*.c)
 SET(INC 
   intern/include ../../../intern/guardedalloc ../blenlib ../makesdna
   extern/include ../blenkernel ../radiosity/extern/include ../imbuf
-  ../quicktime ../include ../../kernel/gen_messaging ../yafray ../blenloader
+  ../quicktime ../include ../../kernel/gen_messaging ../blenloader
 )
 
-IF(NOT WITH_YAFRAY)
-  ADD_DEFINITIONS(-DDISABLE_YAFRAY)
-ENDIF(NOT WITH_YAFRAY)
-
-
 IF(WITH_OPENEXR)
   ADD_DEFINITIONS(-DWITH_OPENEXR)
 ENDIF(WITH_OPENEXR)
index c3fdc632ce4e67f0a518e6527afca97279a4a1fc..173f5db848258eaa9717127ce06eee8c1ef05b37 100644 (file)
@@ -10,11 +10,6 @@ incs += ' ../include ../blenloader'
 
 defs = []
 
-if env['WITH_BF_YAFRAY']:
-    incs += ' ../yafray'
-else:
-    defs.append('DISABLE_YAFRAY')
-
 if env['WITH_BF_QUICKTIME']:
     defs.append('WITH_QUICKTIME')
     incs += ' ../quicktime ' + env['BF_QUICKTIME_INC']
index eb12c7637f75bcce5265d425e9eeb3cd1c1e956e..22680b26338df10112bfecccc85f52308c1aa9c5 100644 (file)
@@ -45,7 +45,6 @@ CPPFLAGS += -I../../../imbuf
 CPPFLAGS += -I../../../makesdna
 CPPFLAGS += -I../../../blenkernel
 CPPFLAGS += -I../../../quicktime
-CPPFLAGS += -I../../../yafray
 CPPFLAGS += -I../../../../kernel/gen_messaging
 CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
 # not very neat: the rest of blender..
index 4ca7244e976b67b7a4d30a269cd3eaa49c88be62..6bc88f7499bce71a82b145eeee3e5528f0eb9135 100644 (file)
 #include "zbuf.h"
 #include "sunsky.h"
 
-#ifndef DISABLE_YAFRAY /* disable yafray */
-
-#include "YafRay_Api.h"
-
-/* yafray: Identity transform 'hack' removed, exporter now transforms vertices back to world.
- * Same is true for lamp coords & vec.
- * Duplicated data objects & dupliframe/duplivert objects are only stored once,
- * only the matrix is stored for all others, in yafray these objects are instances of the original.
- * The main changes are in RE_Database_FromScene().
- */
-
-#endif /* disable yafray */
 
 /* 10 times larger than normal epsilon, test it on default nurbs sphere with ray_transp (for quad detection) */
 /* or for checking vertex normal flips */
@@ -3468,22 +3456,6 @@ static GroupObject *add_render_lamp(Render *re, Object *ob)
        }
        else lar->ray_totsamp= 0;
        
-#ifndef DISABLE_YAFRAY
-       /* yafray: photonlight and other params */
-       if (re->r.renderer==R_YAFRAY) {
-               lar->YF_numphotons = la->YF_numphotons;
-               lar->YF_numsearch = la->YF_numsearch;
-               lar->YF_phdepth = la->YF_phdepth;
-               lar->YF_useqmc = la->YF_useqmc;
-               lar->YF_causticblur = la->YF_causticblur;
-               lar->YF_ltradius = la->YF_ltradius;
-               lar->YF_bufsize = la->YF_bufsize;
-               lar->YF_glowint = la->YF_glowint;
-               lar->YF_glowofs = la->YF_glowofs;
-               lar->YF_glowtype = la->YF_glowtype;
-       }
-#endif /* disable yafray */
-
        lar->spotsi= la->spotsize;
        if(lar->mode & LA_HALO) {
                if(lar->spotsi>170.0) lar->spotsi= 170.0;
index cc2cf2907952d015663ca99a325206e767ea9853..2d6e03f95c2ba91f7e67dfea9e34cb5521b555a9 100644 (file)
 #include "RE_pipeline.h"
 #include "radio.h"
 
-#ifndef DISABLE_YAFRAY
-/* yafray: include for yafray export/render */
-#include "YafRay_Api.h"
-
-#endif /* disable yafray */
-
 /* internal */
 #include "render_types.h"
 #include "renderpipeline.h"
@@ -2209,69 +2203,6 @@ static void do_render_composite_fields_blur_3d(Render *re)
        re->display_draw(re->ddh, re->result, NULL);
 }
 
-#ifndef DISABLE_YAFRAY
-/* yafray: main yafray render/export call */
-static void yafrayRender(Render *re)
-{
-       RE_FreeRenderResult(re->result);
-       re->result= new_render_result(re, &re->disprect, 0, RR_USEMEM);
-       
-       // need this too, for aspect/ortho/etc info
-       RE_SetCamera(re, re->scene->camera);
-
-       // switch must be done before prepareScene()
-       if (!re->r.YFexportxml)
-               YAF_switchFile();
-       else
-               YAF_switchPlugin();
-       
-       printf("Starting scene conversion.\n");
-       RE_Database_FromScene(re, re->scene, 1);
-       printf("Scene conversion done.\n");
-       
-       re->i.starttime = PIL_check_seconds_timer();
-       
-       YAF_exportScene(re);
-
-       /* also needed for yafray border render, straight copy from do_render_fields_blur_3d() */
-       /* when border render, check if we have to insert it in black */
-       if(re->result) {
-               if(re->r.mode & R_BORDER) {
-                       if((re->r.mode & R_CROP)==0) {
-                               RenderResult *rres;
-                               
-                               /* sub-rect for merge call later on */
-                               re->result->tilerect= re->disprect;
-                               
-                               /* this copying sequence could become function? */
-                               re->disprect.xmin= re->disprect.ymin= 0;
-                               re->disprect.xmax= re->winx;
-                               re->disprect.ymax= re->winy;
-                               re->rectx= re->winx;
-                               re->recty= re->winy;
-                               
-                               rres= new_render_result(re, &re->disprect, 0, RR_USEMEM);
-                               
-                               merge_render_result(rres, re->result);
-                               RE_FreeRenderResult(re->result);
-                               re->result= rres;
-                               
-                               re->display_init(re->dih, re->result);
-                               re->display_draw(re->ddh, re->result, NULL);
-                       }
-               }
-       }
-
-       re->i.lastframetime = PIL_check_seconds_timer()- re->i.starttime;
-       re->stats_draw(re->sdh, &re->i);
-       
-       RE_Database_Free(re);
-}
-
-
-
-#endif /* disable yafray */
-
 static void renderresult_stampinfo(Scene *scene)
 {
        RenderResult rres;
@@ -2300,14 +2231,7 @@ static void do_render_all_options(Render *re)
                
        }
        else {
-#ifndef DISABLE_YAFRAY
-               if(re->r.renderer==R_YAFRAY)
-                       yafrayRender(re);
-               else
-                       do_render_composite_fields_blur_3d(re);
-#else
                do_render_composite_fields_blur_3d(re);
-#endif
        }
        
        /* for UI only */
diff --git a/source/blender/yafray/CMakeLists.txt b/source/blender/yafray/CMakeLists.txt
deleted file mode 100644 (file)
index 897b775..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-# $Id$
-# ***** BEGIN GPL LICENSE BLOCK *****
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-# The Original Code is Copyright (C) 2006, Blender Foundation
-# All rights reserved.
-#
-# The Original Code is: all of this file.
-#
-# Contributor(s): Jacques Beaurain.
-#
-# ***** END GPL LICENSE BLOCK *****
-
-FILE(GLOB SRC intern/*.cpp)
-
-SET(INC 
-  ../../../intern/guardedalloc ../blenlib ../makesdna ../blenkernel
-  ../imbuf ../include ../render/extern/include ../render/intern/include
-)
-
-BLENDERLIB(bf_yafray "${SRC}" "${INC}")
-#env.BlenderLib ( 'bf_yafray', sources, Split(incs), [], libtype=['blender','player'], priority=[5, 190] )
diff --git a/source/blender/yafray/Makefile b/source/blender/yafray/Makefile
deleted file mode 100644 (file)
index 690ba44..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-# ***** BEGIN GPL LICENSE BLOCK *****
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
-# All rights reserved.
-#
-# The Original Code is: all of this file.
-#
-# Contributor(s): none yet.
-#
-# ***** END GPL LICENSE BLOCK *****
-#
-# Bounces make to subdirectories.
-
-SOURCEDIR = source/blender/yafray
-DIRS = intern
-
-include nan_subdirs.mk
diff --git a/source/blender/yafray/SConscript b/source/blender/yafray/SConscript
deleted file mode 100644 (file)
index 13af773..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/python
-Import ('env')
-
-sources = env.Glob('intern/*.cpp')
-
-incs = '#/intern/guardedalloc ../blenlib ../makesdna ../blenkernel'
-incs += ' ../imbuf ../editors/include ../render/extern/include ../render/intern/include'
-
-env.BlenderLib ( 'bf_yafray', sources, Split(incs), [], libtype=['core'], priority=[205] )
diff --git a/source/blender/yafray/YafRay_Api.h b/source/blender/yafray/YafRay_Api.h
deleted file mode 100644 (file)
index a05e975..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef __YAFRAY_API_H
-#define __YAFRAY_API_H
-
-/* C interface for Blender */
-#ifdef __cplusplus
-extern "C" {
-#endif
-       void YAF_switchPlugin();
-       void YAF_switchFile();
-       int YAF_exportScene(Render* re);
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/source/blender/yafray/intern/Makefile b/source/blender/yafray/intern/Makefile
deleted file mode 100644 (file)
index cf4779c..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-# ***** BEGIN GPL LICENSE BLOCK *****
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
-# All rights reserved.
-#
-# The Original Code is: all of this file.
-#
-# Contributor(s): none yet.
-#
-# ***** END GPL LICENSE BLOCK *****
-#
-#
-
-LIBNAME = yafrayexport
-DIR = $(OCGDIR)/blender/yafray
-
-include nan_compile.mk
-
-CFLAGS += $(LEVEL_1_C_WARNINGS)
-
-CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
-CPPFLAGS += -I../../makesdna
-CPPFLAGS += -I../../blenkernel
-CPPFLAGS += -I../../blenlib
-CPPFLAGS += -I../../render/extern/include
-CPPFLAGS += -I../../render/intern/include
-CPPFLAGS += -I../../imbuf
-CPPFLAGS += -I../../include
-CPPFLAGS += -I..
diff --git a/source/blender/yafray/intern/api.cpp b/source/blender/yafray/intern/api.cpp
deleted file mode 100644 (file)
index 0cb1c6f..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#include "export_File.h"
-#include "export_Plugin.h"
-
-static yafrayFileRender_t byfile;
-static yafrayPluginRender_t byplugin;
-
-yafrayRender_t *YAFBLEND = &byplugin;
-
-extern "C"
-{
-       void YAF_switchPlugin() { YAFBLEND = &byplugin; }
-       void YAF_switchFile() { YAFBLEND = &byfile; }
-       int YAF_exportScene(Render* re) { return (int)YAFBLEND->exportScene(re); }
-}
diff --git a/source/blender/yafray/intern/export_File.cpp b/source/blender/yafray/intern/export_File.cpp
deleted file mode 100644 (file)
index 831c1e9..0000000
+++ /dev/null
@@ -1,2060 +0,0 @@
-#include "export_File.h"
-
-#include <math.h>
-
-#include <cstring>
-
-using namespace std;
-
-static string command_path = "";
-
-#ifdef WIN32 
-#define WIN32_SKIP_HKEY_PROTECTION
-#include "BLI_winstuff.h"
-
-#ifndef FILE_MAXDIR
-#define FILE_MAXDIR  160
-#endif
-
-#ifndef FILE_MAXFILE
-#define FILE_MAXFILE 80
-#endif
-
-
-static string find_path()
-{
-       HKEY    hkey;
-       DWORD dwType, dwSize;
-
-       if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\YafRay Team\\YafRay",0,KEY_READ,&hkey)==ERROR_SUCCESS)
-       {
-               dwType = REG_EXPAND_SZ;
-               dwSize = MAX_PATH;
-               DWORD dwStat;
-
-               char *pInstallDir=new char[MAX_PATH];
-
-               dwStat=RegQueryValueEx(hkey, TEXT("InstallDir"), 
-                       NULL, NULL,(LPBYTE)pInstallDir, &dwSize);
-               
-               if (dwStat == NO_ERROR)
-               {
-                       string res=pInstallDir;
-                       delete [] pInstallDir;
-                       return res;
-               }
-               else
-                       cout << "Couldn't READ \'InstallDir\' value. Is yafray correctly installed?\n";
-               delete [] pInstallDir;
-
-               RegCloseKey(hkey);
-       }       
-       else
-               cout << "Couldn't FIND registry key for yafray, is it installed?\n";
-
-       return string("");
-
-}
-
-static int createDir(char* name)
-{
-       if (BLI_exists(name))
-               return 2;       //exists
-       if (CreateDirectory((LPCTSTR)(name), NULL)) {
-               cout << "Directory: " << name << " created\n";
-               return 1;       // created
-       }
-       else    {
-               cout << "Could not create directory: " << name << endl;
-               return 0;       // fail
-       }
-}
-
-extern "C" { extern char bprogname[]; }
-
-// add drive character if not in path string, using blender executable location as reference
-// later added note: doesn't make much sense actually,
-// the intended file might not be located on the same drive as where blender is located...
-static void addDrive(string &path)
-{
-       int sp = path.find_first_of(":");
-       if (sp==-1) {
-               string blpath = bprogname;
-               sp = blpath.find_first_of(":");
-               if (sp!=-1) path = blpath.substr(0, sp+1) + path;
-       }
-}
-
-#else
-
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <signal.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-static string unixYafrayPath()
-{
-       static const char *alternative[]=
-       {
-               "/usr/local/bin/",
-               "/usr/bin/",
-               "/bin/",
-               NULL
-       };
-
-       for(int i=0;alternative[i]!=NULL;++i)
-       {
-               string fp=string(alternative[i])+"yafray";
-               struct stat st;
-               if(stat(fp.c_str(),&st)<0) continue;
-               if(st.st_mode&S_IXOTH) return alternative[i];
-       }
-       return "";
-}
-
-#endif
-
-#ifdef WIN32
-#define MAXPATHLEN MAX_PATH
-#else
-#include <sys/param.h>
-#endif
-static void adjustPath(string &path)
-{
-       // if relative, expand to full path
-       char cpath[MAXPATHLEN];
-       strcpy(cpath, path.c_str());
-       BLI_convertstringcode(cpath, G.sce);
-       path = cpath;
-#ifdef WIN32
-       // add drive char if not there
-       addDrive(path);
-#endif
-}
-
-bool yafrayFileRender_t::initExport()
-{
-       xmlpath = "";
-       bool dir_failed = false;
-       // try the user setting setting first, export dir must be set and exist
-       if (strlen(U.yfexportdir)==0) 
-       {
-               cout << "No export directory set in user defaults!" << endl;
-               char* temp = getenv("TEMP");
-               // if no envar, use /tmp
-               xmlpath = temp ? temp : "/tmp";
-               cout << "Will try TEMP instead: " << xmlpath << endl;
-               // no fail here, but might fail when opening file...
-       }
-       else 
-       {
-               xmlpath = U.yfexportdir;
-               adjustPath(xmlpath);    // possibly relative
-               cout << "YFexport path is: " << xmlpath << endl;
-               // check if it exists
-               if (!BLI_exists(const_cast<char*>(xmlpath.c_str()))) {
-                       cout << "YafRay temporary xml export directory:\n" << U.yfexportdir << "\ndoes not exist!\n";
-#ifdef WIN32
-                       // try to create it
-                       cout << "Trying to create...\n";
-                       if (createDir(const_cast<char*>(xmlpath.c_str()))==0) dir_failed=true; else dir_failed=false;
-#else
-                       dir_failed = true;
-#endif
-               }
-       }
-
-#ifdef WIN32
-       // for windows try to get the path to the yafray binary from the registry, only done once
-       if (command_path=="") 
-       {
-               char path[FILE_MAXDIR+FILE_MAXFILE];
-               string yafray_path = find_path();
-               if (yafray_path=="") 
-               {
-                       // error already printed in find_path()
-                       clearAll();
-                       return false;
-               }
-               GetShortPathName((LPCTSTR)(yafray_path.c_str()), path, FILE_MAXDIR+FILE_MAXFILE);
-               command_path = string(path) + "\\";
-               cout << "Yafray found at : " << command_path << endl;
-       }
-       // if no export dir set, or could not create, try to create one in the yafray dir, unless it already exists
-       if (dir_failed) 
-       {
-               string ybdir = command_path + "YBtest";
-               if (createDir(const_cast<char*>(ybdir.c_str()))==0) dir_failed=true; else dir_failed=false;
-               xmlpath = ybdir;
-       }
-#else
-       if (command_path=="")
-       {
-               command_path = unixYafrayPath();
-               if (command_path.size()) cout << "Yafray found at : " << command_path << endl;
-       }
-#endif
-
-       // for all
-       if (dir_failed) return false;
-
-#ifdef WIN32
-       string DLM = "\\";
-#else
-       string DLM = "/";
-#endif
-       // remove trailing slash if needed
-       if (xmlpath.find_last_of(DLM)!=(xmlpath.length()-1)) xmlpath += DLM;
-
-       imgout = xmlpath + "YBtest.tga";
-       xmlpath += "YBtest.xml";
-       xmlfile.open(xmlpath.c_str());
-       if (xmlfile.fail()) 
-       {
-               cout << "Could not open file\n";
-               return false;
-       }
-       ostr << setiosflags(ios::showpoint | ios::fixed);
-       xmlfile << "<scene>\n\n";
-       return true;
-}
-
-bool yafrayFileRender_t::writeRender()
-{
-       // finally export render block
-       ostr.str("");
-       ostr << "<render camera_name=\"MAINCAM\"\n";
-       ostr << "\traydepth=\"" << re->r.YF_raydepth << "\" gamma=\"" << re->r.YF_gamma << "\" exposure=\"" << re->r.YF_exposure << "\"\n";
-
-       if(re->r.YF_AA) {
-               ostr << "\tAA_passes=\"" << re->r.YF_AApasses << "\" AA_minsamples=\"" << re->r.YF_AAsamples << "\"\n";
-               ostr << "\tAA_pixelwidth=\"" << re->r.YF_AApixelsize << "\" AA_threshold=\"" << re->r.YF_AAthreshold << "\"\n";
-       }
-       else {
-               // removed the default AA settings for midquality GI, better leave it to user
-               if ((re->r.mode & R_OSA) && (re->r.osa)) {
-                       int passes = (re->r.osa & 3)==0 ? (re->r.osa >> 2) : 1;
-                       int minsamples=(re->r.osa & 3)==0 ? 4 : re->r.osa;
-                       ostr << "\tAA_passes=\"" << passes << "\" AA_minsamples=\"" << minsamples << "\"\n";
-               }
-               else ostr << "\tAA_passes=\"0\" AA_minsamples=\"1\"\n";
-               ostr << "\tAA_pixelwidth=\"1.5\" AA_threshold=\"0.05\" bias=\"" << re->r.YF_raybias
-                                << "\" clamp_rgb=\"" << ((re->r.YF_clamprgb==0) ? "on" : "off") << "\"\n";
-       }
-
-       World *world = re->scene->world;
-       if (world) ostr << "\tbackground_name=\"world_background\"\n";
-       // alpha channel render when RGBA button enabled
-       if (re->r.planes==R_PLANES32) ostr << "\n\tsave_alpha=\"on\"";
-       ostr << " >\n";
-
-       // basic fog
-       if (world && (world->mode & WO_MIST)) {
-               float fd = world->mistdist;
-               if (fd>0) fd=1.f/fd; else fd=1;
-               ostr << "\t<fog_density value=\"" << fd << "\" />\n";
-               ostr << "\t<fog_color r=\"" << world->horr << "\" g=\"" << world->horg << "\" b=\"" << world->horb << "\" />\n";
-       }
-       ostr << "\t<outfile value=\"" << imgout << "\" />\n";
-
-       ostr << "</render>\n\n";
-       xmlfile << ostr.str();
-       return true;
-}
-
-bool yafrayFileRender_t::finishExport()
-{
-       xmlfile << "</scene>\n";
-       xmlfile.close();
-
-       // file exported, now render
-       if (executeYafray(xmlpath))
-               displayImage();
-       else 
-       {
-               cout << "Could not execute yafray. Is it in path?" << endl;
-               return false;
-       }
-       return true;
-}
-
-// displays the image rendered with xml export
-// Now loads rendered image into blender renderbuf.
-void yafrayFileRender_t::displayImage()
-{
-       // although it is possible to load the image using blender,
-       // maybe it is best to just do a read here, for now the yafray output is always a raw tga anyway
-
-       FILE* fp = fopen(imgout.c_str(), "rb");
-       if (fp==NULL) {
-               cout << "YAF_displayImage(): Could not open image file\n";
-               return;
-       }
-
-       unsigned char header[18];
-       fread(&header, 1, 18, fp);
-       unsigned short width = (unsigned short)(header[12] + (header[13]<<8));
-       unsigned short height = (unsigned short)(header[14] + (header[15]<<8));
-       // don't do anything if resolution doesn't match that of rectot
-       if ((width!=re->winx) || (height!=re->winy)) {
-               cout << "Wrong image width/height: " << width << "/" << height <<
-                       " expected " << re->winx << "/" << re->winy << endl;
-               fclose(fp);
-               fp = NULL;
-               return;
-       }
-       unsigned char byte_per_pix = (unsigned char)(header[16]>>3);
-       // read past any id (none in this case though)
-       unsigned int idlen = (unsigned int)header[0];
-       if (idlen) fseek(fp, idlen, SEEK_CUR);
-
-       /* XXX how to get the image from Blender and write to it. This call doesn't allow to change buffer rects */
-       RenderResult rres;
-       RE_GetResultImage(re, &rres);
-       // rres.rectx, rres.recty is width/height
-       // rres.rectf is float buffer, scanlines starting in bottom
-       // rres.rectz is zbuffer, available when associated pass is set
-       
-       // read data directly into buffer, picture is upside down
-       const float btf = 1.f/255.f;
-       if (re->r.mode & R_BORDER) {
-               // border render, yafray is full size render, blender at this point only wants the region
-               unsigned int xs = (unsigned int)(re->r.border.xmin * re->winx),
-                            ys = (unsigned int)((1.f-re->r.border.ymax) * re->winy);
-               for (unsigned short y=0; y<height; y++) {
-                       for (unsigned short x=0; x<width; x++) {
-                               char r = fgetc(fp);
-                               char g = fgetc(fp);
-                               char b = fgetc(fp);
-                               char a = (byte_per_pix==4) ? fgetc(fp) : 255;
-                               int bx = x-xs, by = y-ys;
-                               if ((bx >= 0) && (bx < (int)re->rectx) && (by >= 0) && (by < re->recty)) {
-                                       float* bpt = (float*)rres.rectf + ((bx + (((re->recty-1) - by)*re->rectx)) << 2);
-                                       bpt[2] = (float)r * btf;
-                                       bpt[1] = (float)g * btf;
-                                       bpt[0] = (float)b * btf;
-                                       bpt[3] = (float)a * btf;
-                                       bpt += 4;
-                               }
-                       }
-               }
-       }
-       else {
-               for (unsigned short y=0; y<height; y++) {
-                       float* bpt = (float*)rres.rectf + ((((height-1)-y)*width) << 2);
-                       for (unsigned short x=0; x<width; x++) {
-                               bpt[2] = ((float)fgetc(fp) * btf);
-                               bpt[1] = ((float)fgetc(fp) * btf);
-                               bpt[0] = ((float)fgetc(fp) * btf);
-                               bpt[3] = (byte_per_pix==4) ? ((float)fgetc(fp) * btf) : 1.f;
-                               bpt += 4;
-                       }
-               }
-       }
-
-       fclose(fp);
-       fp = NULL;
-
-       // based on another assumption of ogl errors on my system, forgot to actually draw it...
-       re->result->renlay = render_get_active_layer(re, re->result);
-       re->display_draw(re->ddh, re->result, NULL);
-
-}
-
-static string noise2string(short nbtype)
-{
-       switch (nbtype) {
-               case TEX_BLENDER:
-                       return "blender";
-               case TEX_STDPERLIN:
-                       return "stdperlin";
-               case TEX_VORONOI_F1:
-                       return "voronoi_f1";
-               case TEX_VORONOI_F2:
-                       return "voronoi_f2";
-               case TEX_VORONOI_F3:
-                       return "voronoi_f3";
-               case TEX_VORONOI_F4:
-                       return "voronoi_f4";
-               case TEX_VORONOI_F2F1:
-                       return "voronoi_f2f1";
-               case TEX_VORONOI_CRACKLE:
-                       return "voronoi_crackle";
-               case TEX_CELLNOISE:
-                       return "cellnoise";
-               default:
-               case TEX_NEWPERLIN:
-                       return "newperlin";
-       }
-}
-
-void yafrayFileRender_t::writeTextures()
-{
-       // used to keep track of images already written
-       // (to avoid duplicates if also in imagetex for material TexFace texture)
-       set<Image*> dupimg;
-       
-       for (map<string, MTex*>::const_iterator blendtex=used_textures.begin();
-                                               blendtex!=used_textures.end();++blendtex) {
-               MTex* mtex = blendtex->second;
-               Tex* tex = mtex->tex;
-
-               float nsz = tex->noisesize;
-               if (nsz!=0.f) nsz=1.f/nsz;
-
-               // noisebasis type
-               string ntype = noise2string(tex->noisebasis);
-               string ts, hardnoise=(tex->noisetype==TEX_NOISESOFT) ? "off" : "on";
-
-               switch (tex->type) {
-                       case TEX_STUCCI:
-                               // stucci is clouds as bump, only difference is an extra parameter to handle wall in/out
-                               // turbulence value is not used, so for large values will not match well
-                       case TEX_CLOUDS: {
-                               ostr.str("");
-                               ostr << "<shader type=\"clouds\" name=\"" << blendtex->first << "\" >\n";
-                               ostr << "\t<attributes>\n";
-                               ostr << "\t\t<size value=\"" << nsz << "\" />\n";
-                               ostr << "\t\t<hard value=\"" << hardnoise << "\" />\n";
-                               if (tex->type==TEX_STUCCI) {
-                                       if (tex->stype==1)
-                                               ts = "positive";
-                                       else if (tex->stype==2)
-                                               ts = "negative";
-                                       else ts = "none";
-                                       ostr << "\t\t<bias value=\"" << ts << "\" />\n";
-                                       ostr << "\t\t<depth value=\"0\" />\n";  // for stucci always 0
-                               }
-                               else ostr << "\t\t<depth value=\"" << tex->noisedepth << "\" />\n";
-                               ostr << "\t\t<color_type value=\"" << tex->stype << "\" />\n";
-                               ostr << "\t\t<noise_type value=\"" << ntype << "\" />\n";
-                               ostr << "\t</attributes>\n</shader >\n\n";
-                               xmlfile << ostr.str();
-                               break;
-                       }
-                       case TEX_WOOD: {
-                               ostr.str("");
-                               ostr << "<shader type=\"wood\" name=\"" << blendtex->first << "\" >\n";
-                               ostr << "\t\t<attributes>\n";
-                               // blender does not use depth value for wood, always 0
-                               ostr << "\t\t<depth value=\"0\" />\n";
-                               float turb = (tex->stype<2) ? 0.0 : tex->turbul;
-                               ostr << "\t\t<turbulence value=\"" << turb << "\" />\n";
-                               ostr << "\t\t<size value=\"" << nsz << "\" />\n";
-                               ostr << "\t\t<hard value=\"" << hardnoise << "\" />\n";
-                               ts = (tex->stype & 1) ? "rings" : "bands";      //stype 1&3 ringtype
-                               ostr << "\t\t<wood_type value=\"" << ts << "\" />\n";
-                               ostr << "\t\t<noise_type value=\"" << ntype << "\" />\n";
-                               // shape parameter, for some reason noisebasis2 is used...
-                               ts = "sin";
-                               if (tex->noisebasis2==1) ts="saw"; else if (tex->noisebasis2==2) ts="tri";
-                               ostr << "\t\t<shape value=\"" << ts << "\" />\n";
-                               ostr << "\t</attributes>\n</shader>\n\n";
-                               xmlfile << ostr.str();
-                               break;
-                       }
-                       case TEX_MARBLE: {
-                               ostr.str("");
-                               ostr << "<shader type=\"marble\" name=\"" << blendtex->first << "\" >\n";
-                               ostr << "\t<attributes>\n";
-                               ostr << "\t\t<depth value=\"" << tex->noisedepth << "\" />\n";
-                               ostr << "\t\t<turbulence value=\"" << tex->turbul << "\" />\n";
-                               ostr << "\t\t<size value=\"" << nsz << "\" />\n";
-                               ostr << "\t\t<hard value=\"" << hardnoise << "\" />\n";
-                               ostr << "\t\t<sharpness value=\"" << (float)(1<<tex->stype) << "\" />\n";
-                               ostr << "\t\t<noise_type value=\"" << ntype << "\" />\n";
-                               ts = "sin";
-                               if (tex->noisebasis2==1) ts="saw"; else if (tex->noisebasis2==2) ts="tri";
-                               ostr << "\t\t<shape value=\"" << ts << "\" />\n";
-                               ostr << "\t</attributes>\n</shader>\n\n";
-                               xmlfile << ostr.str();
-                               break;
-                       }
-                       case TEX_VORONOI: {
-                               ostr.str("");
-                               ostr << "<shader type=\"voronoi\" name=\"" << blendtex->first << "\" >\n";
-                               ostr << "\t<attributes>\n";
-                               ts = "int";
-                               if (tex->vn_coltype==1)
-                                       ts = "col1";
-                               else if (tex->vn_coltype==2)
-                                       ts = "col2";
-                               else if (tex->vn_coltype==3)
-                                       ts = "col3";
-                               ostr << "\t\t<color_type value=\"" << ts << "\" />\n";
-                               ostr << "\t\t<weight1 value=\"" << tex->vn_w1 << "\" />\n";
-                               ostr << "\t\t<weight2 value=\"" << tex->vn_w2 << "\" />\n";
-                               ostr << "\t\t<weight3 value=\"" << tex->vn_w3 << "\" />\n";
-                               ostr << "\t\t<weight4 value=\"" << tex->vn_w4 << "\" />\n";
-                               ostr << "\t\t<mk_exponent value=\"" << tex->vn_mexp << "\" />\n";
-                               ostr << "\t\t<intensity value=\"" << tex->ns_outscale << "\" />\n";
-                               ostr << "\t\t<size value=\"" << nsz << "\" />\n";
-                               ts = "actual";
-                               if (tex->vn_distm==TEX_DISTANCE_SQUARED)
-                                       ts = "squared";
-                               else if (tex->vn_distm==TEX_MANHATTAN)
-                                       ts = "manhattan";
-                               else if (tex->vn_distm==TEX_CHEBYCHEV)
-                                       ts = "chebychev";
-                               else if (tex->vn_distm==TEX_MINKOVSKY_HALF)
-                                       ts = "minkovsky_half";
-                               else if (tex->vn_distm==TEX_MINKOVSKY_FOUR)
-                                       ts = "minkovsky_four";
-                               else if (tex->vn_distm==TEX_MINKOVSKY)
-                                       ts = "minkovsky";
-                               ostr << "\t\t<distance_metric value=\"" << ts << "\" />\n";
-                               ostr << "\t</attributes>\n</shader>\n\n";
-                               xmlfile << ostr.str();
-                               break;
-                       }
-                       case TEX_MUSGRAVE: {
-                               ostr.str("");
-                               ostr << "<shader type=\"musgrave\" name=\"" << blendtex->first << "\" >\n";
-                               ostr << "\t<attributes>\n";
-                               switch (tex->stype) {
-                                       case TEX_MFRACTAL:
-                                               ts = "multifractal";
-                                               break;
-                                       case TEX_RIDGEDMF:
-                                               ts = "ridgedmf";
-                                               break;
-                                       case TEX_HYBRIDMF:
-                                               ts = "hybridmf";
-                                               break;
-                                       case TEX_HTERRAIN:
-                                               ts = "heteroterrain";
-                                               break;
-                                       default:
-                                       case TEX_FBM:
-                                               ts = "fBm";
-                               }
-                               ostr << "\t\t<musgrave_type value=\"" << ts << "\" />\n";
-                               ostr << "\t\t<noise_type value=\"" << ntype << "\" />\n";
-                               ostr << "\t\t<H value=\"" << tex->mg_H << "\" />\n";
-                               ostr << "\t\t<lacunarity value=\"" << tex->mg_lacunarity << "\" />\n";
-                               ostr << "\t\t<octaves value=\"" << tex->mg_octaves << "\" />\n";
-                               if ((tex->stype==TEX_HTERRAIN) || (tex->stype==TEX_RIDGEDMF) || (tex->stype==TEX_HYBRIDMF)) {
-                                       ostr << "\t\t<offset value=\"" << tex->mg_offset << "\" />\n";
-                                       if ((tex->stype==TEX_RIDGEDMF) || (tex->stype==TEX_HYBRIDMF))
-                                               ostr << "\t\t<gain value=\"" << tex->mg_gain << "\" />\n";
-                               }
-                               ostr << "\t\t<size value=\"" << nsz << "\" />\n";
-                               ostr << "\t\t<intensity value=\"" << tex->ns_outscale << "\" />\n";
-                               ostr << "\t</attributes>\n</shader>\n\n";
-                               xmlfile << ostr.str();
-                               break;
-                       }
-                       case TEX_DISTNOISE: {
-                               ostr.str("");
-                               ostr << "<shader type=\"distorted_noise\" name=\"" << blendtex->first << "\" >\n";
-                               ostr << "\t<attributes>\n";
-                               ostr << "\t\t<distort value=\"" << tex->dist_amount << "\" />\n";
-                               ostr << "\t\t<size value=\"" << nsz << "\" />\n";
-                               ostr << "\t\t<noise_type1 value=\"" << ntype << "\" />\n";
-                               ostr << "\t\t<noise_type2 value=\"" << noise2string(tex->noisebasis2) << "\" />\n";
-                               ostr << "\t</attributes>\n</shader>\n\n";
-                               xmlfile << ostr.str();
-                               break;
-                       }
-                       case TEX_BLEND: {
-                               ostr.str("");
-                               ostr << "<shader type=\"gradient\" name=\"" << blendtex->first << "\" >\n";
-                               ostr << "\t<attributes>\n";
-                               switch (tex->stype) {
-                                       case 1:  ts="quadratic"; break;
-                                       case 2:  ts="cubic";     break;
-                                       case 3:  ts="diagonal";  break;
-                                       case 4:  ts="sphere";    break;
-                                       case 5:  ts="halo";      break;
-                                       default:
-                                       case 0:  ts="linear";    break;
-                               }
-                               ostr << "\t\t<gradient_type value=\"" << ts << "\" />\n";
-                               if (tex->flag & TEX_FLIPBLEND) ts="on"; else ts="off";
-                               ostr << "\t\t<flip_xy value=\"" << ts << "\" />\n";
-                               ostr << "\t</attributes>\n</shader>\n\n";
-                               xmlfile << ostr.str();
-                               break;
-                       }
-                       case TEX_NOISE: {
-                               ostr.str("");
-                               ostr << "<shader type=\"random_noise\" name=\"" << blendtex->first << "\" >\n";
-                               ostr << "\t<attributes>\n";
-                               ostr << "\t\t<depth value=\"" << tex->noisedepth << "\" />\n";
-                               ostr << "\t</attributes>\n</shader>\n\n";
-                               xmlfile << ostr.str();
-                               break;
-                       }
-                       case TEX_IMAGE: {
-                               Image* ima = tex->ima;
-                               if (ima) {
-                                       // remember image to avoid duplicates later if also in imagetex
-                                       // (formerly done by removing from imagetex, but need image/material link)
-                                       dupimg.insert(ima);
-                                       ostr.str("");
-                                       // use image name instead of texname here
-                                       ostr << "<shader type=\"image\" name=\"" << ima->id.name << "\" >\n";
-                                       ostr << "\t<attributes>\n";
-                                       string texpath(ima->name);
-                                       adjustPath(texpath);
-                                       ostr << "\t\t<filename value=\"" << texpath << "\" />\n";
-                                       ostr << "\t\t<interpolate value=\"" << ((tex->imaflag & TEX_INTERPOL) ? "bilinear" : "none") << "\" />\n";
-                                       ostr << "\t</attributes>\n</shader>\n\n";
-                                       xmlfile << ostr.str();
-                               }
-                               break;
-                       }
-                       default:
-                               cout << "Unsupported texture type\n";
-               }
-
-               // colorbands
-               if (tex->flag & TEX_COLORBAND) {
-                       ColorBand* cb = tex->coba;
-                       if (cb) {
-                               ostr.str("");
-                               ostr << "<shader type=\"colorband\" name=\"" << blendtex->first + "_coba" << "\" >\n";
-                               ostr << "\t<attributes>\n";
-                               ostr << "\t\t<input value=\"" << blendtex->first << "\" />\n";
-                               ostr << "\t</attributes>\n";
-                               for (int i=0;i<cb->tot;i++) {
-                                       ostr << "\t<modulator value=\"" << cb->data[i].pos << "\" >\n";
-                                       ostr << "\t\t<color r=\"" << cb->data[i].r << "\"" <<
-                                                                                                               " g=\"" << cb->data[i].g << "\"" <<
-                                                                                                               " b=\"" << cb->data[i].b << "\"" <<
-                                                                                                               " a=\"" << cb->data[i].a << "\" />\n";
-                                       ostr << "\t</modulator>\n";
-                               }
-                               ostr << "</shader>\n\n";
-                               xmlfile << ostr.str();
-                       }
-               }
-
-       }
-       
-       // If used, textures for the material 'TexFace' case
-       if (!imagetex.empty()) {
-               for (map<Image*, set<Material*> >::const_iterator imgtex=imagetex.begin();
-                                       imgtex!=imagetex.end();++imgtex)
-               {
-                       // skip if already written above
-                       Image* ima = imgtex->first;
-                       if (dupimg.find(ima)==dupimg.end()) {
-                               ostr.str("");
-                               ostr << "<shader type=\"image\" name=\"" << ima->id.name << "\" >\n";
-                               ostr << "\t<attributes>\n";
-                               string texpath(ima->name);
-                               adjustPath(texpath);
-                               ostr << "\t\t<filename value=\"" << texpath << "\" />\n";
-                               ostr << "\t</attributes>\n</shader>\n\n";
-                               xmlfile << ostr.str();
-                       }
-               }
-       }
-
-}
-
-void yafrayFileRender_t::writeShader(const string &shader_name, Material* matr, const string &facetexname)
-{
-       // if material has ramps, export colorbands first
-       if (matr->mode & (MA_RAMP_COL|MA_RAMP_SPEC))
-       {
-               // both colorbands without input shader
-               ColorBand* cb = matr->ramp_col;
-               if ((matr->mode & MA_RAMP_COL) && (cb!=NULL))
-               {
-                       ostr.str("");
-                       ostr << "<shader type=\"colorband\" name=\"" << shader_name+"_difframp" << "\" >\n";
-                       ostr << "\t<attributes>\n\t</attributes>\n";
-                       for (int i=0;i<cb->tot;i++) {
-                               ostr << "\t<modulator value=\"" << cb->data[i].pos << "\" >\n";
-                               ostr << "\t\t<color r=\"" << cb->data[i].r << "\"" <<
-                                                                                                       " g=\"" << cb->data[i].g << "\"" <<
-                                                                                                       " b=\"" << cb->data[i].b << "\"" <<
-                                                                                                       " a=\"" << cb->data[i].a << "\" />\n";
-                               ostr << "\t</modulator>\n";
-                       }
-                       ostr << "</shader>\n\n";
-                       xmlfile << ostr.str();
-               }
-               cb = matr->ramp_spec;
-               if ((matr->mode & MA_RAMP_SPEC) && (cb!=NULL))
-               {
-                       ostr.str("");
-                       ostr << "<shader type=\"colorband\" name=\"" << shader_name+"_specramp" << "\" >\n";
-                       ostr << "\t<attributes>\n\t</attributes>\n";
-                       for (int i=0;i<cb->tot;i++) {
-                               ostr << "\t<modulator value=\"" << cb->data[i].pos << "\" >\n";
-                               ostr << "\t\t<color r=\"" << cb->data[i].r << "\"" <<
-                                                                                                       " g=\"" << cb->data[i].g << "\"" <<
-                                                                                                       " b=\"" << cb->data[i].b << "\"" <<
-                                                                                                       " a=\"" << cb->data[i].a << "\" />\n";
-                               ostr << "\t</modulator>\n";
-                       }
-                       ostr << "</shader>\n\n";
-                       xmlfile << ostr.str();
-               }
-       }
-
-       ostr.str("");
-       ostr << "<shader type=\"blendershader\" name=\"" << shader_name << "\" >\n";
-       ostr << "\t<attributes>\n";
-       ostr << "\t\t<color r=\"" << matr->r << "\" g=\"" << matr->g << "\" b=\"" << matr->b << "\" />\n";
-       float sr=matr->specr, sg=matr->specg, sb=matr->specb;
-       if (matr->spec_shader==MA_SPEC_WARDISO) {
-               // ........
-               sr /= M_PI;
-               sg /= M_PI;
-               sb /= M_PI;
-       }
-       ostr << "\t\t<specular_color r=\"" << sr << "\" g=\"" << sg << "\" b=\"" << sb << "\" />\n";
-       ostr << "\t\t<mirror_color r=\"" << matr->mirr << "\" g=\"" << matr->mirg << "\" b=\"" << matr->mirb << "\" />\n";
-       ostr << "\t\t<diffuse_reflect value=\"" << matr->ref << "\" />\n";
-       ostr << "\t\t<specular_amount value=\"" << matr->spec << "\" />\n";
-       ostr << "\t\t<alpha value=\"" << matr->alpha << "\" />\n";
-       // if no GI used, the GIpower parameter is not always initialized, so in that case ignore it
-       float bg_mult = (re->r.GImethod==0) ? 1 : re->r.GIpower;
-       ostr << "\t\t<emit value=\"" << (matr->emit * bg_mult) << "\" />\n";
-
-       // reflection/refraction
-       if ( (matr->mode & MA_RAYMIRROR) || (matr->mode & MA_RAYTRANSP) )
-               ostr << "\t\t<IOR value=\"" << matr->ang << "\" />\n";
-
-       if (matr->mode & MA_RAYMIRROR)
-       {
-               // Sofar yafray's min_refle parameter (which misleadingly actually controls fresnel reflection offset)
-               // has been mapped to Blender's ray_mirror parameter.
-               // This causes it be be misinterpreted and misused as a reflection amount control however.
-               // Besides that, it also causes extra complications for the yafray Blendershader.
-               // So added an actual amount of reflection parameter instead, and another
-               // extra parameter 'frsOfs' to actually control fresnel offset (re-uses Blender fresnel_mir_i param).
-               ostr << "\t\t<reflect value=\"on\" />\n";
-               ostr << "\t\t<reflect_amount value=\""<< matr->ray_mirror << "\" />\n";
-               float fo = 1.f-(matr->fresnel_mir_i-1.f)*0.25f; // blender param range [1,5], also here reversed (1 in Blender -> no fresnel)
-               ostr << "\t\t<fresnel_offset value=\""<< fo << "\" />\n";
-
-               // for backward compatibility, also add old 'reflected' parameter, copy of mirror_color
-               ostr << "\t\t<reflected r=\"" << matr->mirr << "\" g=\"" << matr->mirg << "\" b=\"" << matr->mirb << "\" />\n";
-               // same for 'min_refle' param. Instead of the ray_mirror parameter that was used before, since now
-               // the parameter's function is taken over by the fresnel offset parameter, use that instead.
-               ostr << "\t\t<min_refle value=\"" << fo << "\" />\n";
-
-       }
-
-       if (matr->mode & MA_RAYTRANSP) 
-       {
-               ostr << "\t\t<refract value=\"on\" />\n";
-               ostr << "\t\t<transmit_filter value=\"" << matr->filter << "\" />\n";
-               // tir on by default
-               ostr << "\t\t<tir value=\"on\" />\n";
-
-               // transmit absorption color
-               // to make things easier(?) for user it now specifies the actual color at 1 unit / YF_dscale of distance
-               const float maxlog = -log(1e-38);
-               float ar = (matr->YF_ar>0) ? -log(matr->YF_ar) : maxlog;
-               float ag = (matr->YF_ag>0) ? -log(matr->YF_ag) : maxlog;
-               float ab = (matr->YF_ab>0) ? -log(matr->YF_ab) : maxlog;
-               float sc = matr->YF_dscale;
-               if (sc!=0.f) sc=1.f/sc;
-               ostr << "\t\t<absorption r=\"" << ar*sc << "\" g=\"" << ag*sc << "\" b=\"" << ab*sc << "\" />\n";
-               // dispersion
-               ostr << "\t\t<dispersion_power value=\"" << matr->YF_dpwr << "\" />\n";
-               ostr << "\t\t<dispersion_samples value=\"" << matr->YF_dsmp << "\" />\n";
-               ostr << "\t\t<dispersion_jitter value=\"" << (matr->YF_djit ? "on" : "off") << "\" />\n";
-
-               // for backward compatibility, also add old 'transmitted' parameter, copy of 'color' * (1-alpha)
-               float na = 1.f-matr->alpha;
-               ostr << "\t\t<transmitted r=\"" << matr->r*na << "\" g=\"" << matr->g*na << "\" b=\"" << matr->b*na << "\" />\n";
-       }
-
-       string Mmode = "";
-       if (matr->mode & MA_TRACEBLE) Mmode += "traceable";
-       if (matr->mode & MA_SHADOW) Mmode += " shadow";
-       if (matr->mode & MA_SHLESS) Mmode += " shadeless";
-       if (matr->mode & MA_VERTEXCOL) Mmode += " vcol_light";
-       if (matr->mode & MA_VERTEXCOLP) Mmode += " vcol_paint";
-       if (matr->mode & MA_ZTRA) Mmode += " ztransp";
-       if (matr->mode & MA_ONLYSHADOW) Mmode += " onlyshadow";
-       if (Mmode!="") ostr << "\t\t<matmodes value=\"" << Mmode << "\" />\n";
-
-       // diffuse & specular brdf, lambert/cooktorr defaults
-       // diffuse
-       if (matr->diff_shader==MA_DIFF_ORENNAYAR) {
-               ostr << "\t\t<diffuse_brdf value=\"oren_nayar\" />\n";
-               ostr << "\t\t<roughness value=\"" << matr->roughness << "\" />\n";
-       }
-       else if (matr->diff_shader==MA_DIFF_TOON) {
-               ostr << "\t\t<diffuse_brdf value=\"toon\" />\n";
-               ostr << "\t\t<toondiffuse_size value=\"" << matr->param[0] << "\" />\n";
-               ostr << "\t\t<toondiffuse_smooth value=\"" << matr->param[1] << "\" />\n";
-       }
-       else if (matr->diff_shader==MA_DIFF_MINNAERT) {
-               ostr << "\t\t<diffuse_brdf value=\"minnaert\" />\n";
-               ostr << "\t\t<darkening value=\"" << matr->darkness << "\" />\n";
-       }
-       else ostr << "\t\t<diffuse_brdf value=\"lambert\" />\n";
-       // specular
-       if (matr->spec_shader==MA_SPEC_PHONG) {
-               ostr << "\t\t<specular_brdf value=\"phong\" />\n";
-               ostr << "\t\t<hard value=\"" << matr->har << "\" />\n";
-       }
-       else if (matr->spec_shader==MA_SPEC_BLINN) {
-               ostr << "\t\t<specular_brdf value=\"blinn\" />\n";
-               ostr << "\t\t<blinn_ior value=\"" << matr->refrac << "\" />\n";
-               ostr << "\t\t<hard value=\"" << matr->har << "\" />\n";
-       }
-       else if (matr->spec_shader==MA_SPEC_TOON) {
-               ostr << "\t\t<specular_brdf value=\"toon\" />\n";
-               ostr << "\t\t<toonspecular_size value=\"" << matr->param[2] << "\" />\n";
-               ostr << "\t\t<toonspecular_smooth value=\"" << matr->param[3] << "\" />\n";
-       }
-       else if (matr->spec_shader==MA_SPEC_WARDISO) {
-               ostr << "\t\t<specular_brdf value=\"ward\" />\n";
-               ostr << "\t\t<u_roughness value=\"" << matr->rms << "\" />\n";
-               ostr << "\t\t<v_roughness value=\"" << matr->rms << "\" />\n";
-       }
-       else {
-               ostr << "\t\t<specular_brdf value=\"blender_cooktorr\" />\n";
-               ostr << "\t\t<hard value=\"" << matr->har << "\" />\n";
-       }
-
-       // ramps, if used
-       if (matr->mode & (MA_RAMP_COL|MA_RAMP_SPEC))
-       {
-               const string rm_blend[9] = {"mix", "add", "mul", "sub", "screen", "divide", "difference", "darken", "lighten"};
-               const string rm_mode[4] = {"shader", "energy", "normal", "result"};
-               // diffuse
-               if ((matr->mode & MA_RAMP_COL) && (matr->ramp_col!=NULL))
-               {
-                       ostr << "\t\t<diffuse_ramp value=\"" << shader_name+"_difframp" << "\" />\n";
-                       ostr << "\t\t<diffuse_ramp_mode value=\"" << rm_mode[(int)matr->rampin_col] << "\" />\n";
-                       ostr << "\t\t<diffuse_ramp_blend value=\"" << rm_blend[(int)matr->rampblend_col] << "\" />\n";
-                       ostr << "\t\t<diffuse_ramp_factor value=\"" << matr->rampfac_col << "\" />\n";
-               }
-               // specular
-               if ((matr->mode & MA_RAMP_SPEC) && (matr->ramp_spec!=NULL)) {
-                       ostr << "\t\t<specular_ramp value=\"" << shader_name+"_specramp" << "\" />\n";
-                       ostr << "\t\t<specular_ramp_mode value=\"" << rm_mode[(int)matr->rampin_spec] << "\" />\n";
-                       ostr << "\t\t<specular_ramp_blend value=\"" << rm_blend[(int)matr->rampblend_spec] << "\" />\n";
-                       ostr << "\t\t<specular_ramp_factor value=\"" << matr->rampfac_spec << "\" />\n";
-               }
-       }
-
-       ostr << "\t</attributes>\n";
-       xmlfile << ostr.str();
-       
-       // modulators
-       // first modulator is the texture of the face, if used (TexFace mode)
-       if (facetexname.length()!=0) {
-                       ostr.str("");
-                       ostr << "\t<modulator>\n";
-                       ostr << "\t\t<input value=\"" << facetexname << "\" />\n";
-                       ostr << "\t\t<color value=\"1\" />\n";
-                       ostr << "\t</modulator>\n";
-                       xmlfile << ostr.str();
-       }
-
-       for (int m2=0;m2<MAX_MTEX;m2++) {
-
-               if (matr->septex & (1<<m2)) continue;// all active channels
-
-               // ignore null mtex
-               MTex* mtex = matr->mtex[m2];
-               if (mtex==NULL) continue;
-
-               // ignore null tex
-               Tex* tex = mtex->tex;
-               if (tex==NULL) continue;
-
-               map<string, MTex*>::const_iterator mtexL = used_textures.find(string(tex->id.name));
-               if (mtexL!=used_textures.end()) {
-
-                       ostr.str("");
-                       ostr << "\t<modulator>\n";
-                       // when no facetex used, shader_name is created from original material name
-                       if (facetexname.length()!=0)
-                               ostr << "\t\t<input value=\"" << matr->id.name << "_map" << m2 << "\" />\n";
-                       else
-                               ostr << "\t\t<input value=\"" << shader_name << "_map" << m2 << "\" />\n";
-
-                       // blendtype, would have been nice if the order would have been the same as for ramps...
-                       const string blendtype[MTEX_NUM_BLENDTYPES] = {"mix", "mul", "add", "sub", "divide", "darken", "difference", "lighten", "screen", "hue", "sat", "val", "color"};
-                       ostr << "\t\t<mode value=\"" << blendtype[(int)mtex->blendtype] << "\" />\n";
-
-                       // texture color (for use with MUL and/or no_rgb etc..)
-                       ostr << "\t\t<texcol r=\"" << mtex->r << "\" g=\"" << mtex->g << "\" b=\"" << mtex->b << "\" />\n";
-
-                       // texture contrast, brightness & color adjustment
-                       ostr << "\t\t<filtercolor r=\"" << tex->rfac << "\" g=\"" << tex->gfac << "\" b=\"" << tex->bfac << "\" />\n";
-                       ostr << "\t\t<contrast value=\"" << tex->contrast << "\" />\n";
-                       ostr << "\t\t<brightness value=\"" << tex->bright << "\" />\n";
-
-                       // all texture flags now are switches, having the value 1 or -1 (negative option)
-                       // the negative option only used for the intensity modulation options.
-
-                       // material (diffuse) color, amount controlled by colfac (see below)
-                       if (mtex->mapto & MAP_COL)
-                               ostr << "\t\t<color value=\"1\" />\n";
-
-                       // bumpmapping
-                       if ((mtex->mapto & MAP_NORM) || (mtex->maptoneg & MAP_NORM)) {
-                               // for yafray, bump factor is negated (unless tex is stucci, not affected by 'Neg')
-                               // scaled down quite a bit
-                               float nf = mtex->norfac;
-                               if (tex->type!=TEX_STUCCI) nf *= -1.f;
-                               if (mtex->maptoneg & MAP_NORM) nf *= -1.f;
-                               ostr << "\t\t<normal value=\"" << (nf/60.f) << "\" />\n";
-
-                       }
-
-                       // all blender texture modulation as switches, either 1 or -1 (negative state of button)
-                       // Csp, specular color modulation
-                       if (mtex->mapto & MAP_COLSPEC)
-                               ostr << "\t\t<colspec value=\"1\" />\n";
-
-                       // CMir, mirror color  modulation
-                       if (mtex->mapto & MAP_COLMIR)
-                               ostr << "\t\t<colmir value=\"1\" />\n";
-
-                       // Ref, diffuse reflection amount  modulation
-                       if ((mtex->mapto & MAP_REF) || (mtex->maptoneg & MAP_REF)) {
-                               int t = 1;
-                               if (mtex->maptoneg & MAP_REF) t = -1;
-                               ostr << "\t\t<difref value=\"" << t << "\" />\n";
-                       }
-
-                       // Spec, specular amount mod
-                       if ((mtex->mapto & MAP_SPEC) || (mtex->maptoneg & MAP_SPEC)) {
-                               int t = 1;
-                               if (mtex->maptoneg & MAP_SPEC) t = -1;
-                               ostr << "\t\t<specular value=\"" << t << "\" />\n";
-                       }
-
-                       // hardness modulation
-                       if ((mtex->mapto & MAP_HAR) || (mtex->maptoneg & MAP_HAR)) {
-                               int t = 1;
-                               if (mtex->maptoneg & MAP_HAR) t = -1;
-                               ostr << "\t\t<hard value=\"" << t << "\" />\n";
-                       }
-
-                       // alpha modulation
-                       if ((mtex->mapto & MAP_ALPHA) || (mtex->maptoneg & MAP_ALPHA)) {
-                               int t = 1;
-                               if (mtex->maptoneg & MAP_ALPHA) t = -1;
-                               ostr << "\t\t<alpha value=\"" << t << "\" />\n";
-                       }
-
-                       // emit modulation
-                       if ((mtex->mapto & MAP_EMIT) || (mtex->maptoneg & MAP_EMIT)) {
-                               int t = 1;
-                               if (mtex->maptoneg & MAP_EMIT) t = -1;
-                               ostr << "\t\t<emit value=\"" << t << "\" />\n";
-                       }
-
-                       // raymir modulation
-                       if ((mtex->mapto & MAP_RAYMIRR) || (mtex->maptoneg & MAP_RAYMIRR)) {
-                               int t = 1;
-                               if (mtex->maptoneg & MAP_RAYMIRR) t = -1;
-                               ostr << "\t\t<raymir value=\"" << t << "\" />\n";
-                       }
-
-                       // texture flag, combination of strings
-                       string ts = "";
-                       if (mtex->texflag & (MTEX_RGBTOINT | MTEX_STENCIL | MTEX_NEGATIVE)) {
-                               if (mtex->texflag & MTEX_RGBTOINT) ts += "no_rgb ";
-                               if (mtex->texflag & MTEX_STENCIL) ts += "stencil ";
-                               if (mtex->texflag & MTEX_NEGATIVE) ts += "negative";
-                               ostr << "\t\t<texflag value=\"" << ts << "\" />\n";
-                       }
-
-                       // colfac, controls amount of color modulation
-                       ostr << "\t\t<colfac value=\"" << mtex->colfac << "\" />\n";
-
-                       // def_var
-                       ostr << "\t\t<def_var value=\"" << mtex->def_var << "\" />\n";
-
-                       //varfac
-                       ostr << "\t\t<varfac value=\"" << mtex->varfac << "\" />\n";
-
-                       if ((tex->imaflag & (TEX_CALCALPHA | TEX_USEALPHA)) || (tex->flag & TEX_NEGALPHA)) {
-                               ts = "";
-                               if (tex->imaflag & TEX_CALCALPHA) ts += "calc_alpha ";
-                               if (tex->imaflag & TEX_USEALPHA) ts += "use_alpha ";
-                               if (tex->flag & TEX_NEGALPHA) ts += "neg_alpha";
-                               ostr << "\t\t<alpha_flag value=\"" << ts << "\" />\n";
-                       }
-
-                       // image as normalmap flag
-                       if (tex->imaflag & TEX_NORMALMAP) ostr << "\t\t<normalmap value=\"on\" />\n";
-
-                       ostr << "\t</modulator>\n";
-                       xmlfile << ostr.str();
-
-               }
-       }
-       xmlfile << "</shader>\n\n";
-
-}
-
-
-// write all materials & modulators
-void yafrayFileRender_t::writeMaterialsAndModulators()
-{
-       // shaders/mappers for regular texture (or non-texture) mode
-       // In case material has texface mode, and all faces have an image texture,
-       // this shader will not be used, but still be written
-       for (map<string, Material*>::const_iterator blendmat=used_materials.begin();
-                       blendmat!=used_materials.end();++blendmat)
-       {
-
-               Material* matr = blendmat->second;
-
-               // mapper(s)
-               for (int m=0;m<MAX_MTEX;m++)
-               {
-
-                       if (matr->septex & (1<<m)) continue;// all active channels
-
-                       // ignore null mtex
-                       MTex* mtex = matr->mtex[m];
-                       if (mtex==NULL) continue;
-                       // ignore null tex
-                       Tex* tex = mtex->tex;
-                       if (tex==NULL) continue;
-
-                       map<string, MTex*>::const_iterator mtexL = used_textures.find(string(tex->id.name));
-                       if (mtexL!=used_textures.end()) {
-                               ostr.str("");
-                               ostr << "<shader type=\"blendermapper\" name=\"" << blendmat->first + "_map" << m <<"\"";
-                               if ((mtex->texco & TEXCO_OBJECT) || (mtex->texco & TEXCO_REFL) || (mtex->texco & TEXCO_NORM))
-                               {
-                                       // For object, reflection & normal mapping, add the object matrix to the modulator,
-                                       // as in LF script, use camera matrix if no object specified.
-                                       // In this case this means the inverse of that matrix
-                                       float texmat[4][4], itexmat[4][4];
-                                       if ((mtex->texco & TEXCO_OBJECT) && (mtex->object))
-                                               MTC_Mat4CpyMat4(texmat, mtex->object->obmat);
-                                       else    // also for refl. map
-                                               MTC_Mat4CpyMat4(texmat, maincam_obj->obmat);
-                                       MTC_Mat4Invert(itexmat, texmat);
-                                       ostr << "\n\t\tm00=\"" << itexmat[0][0] << "\" m01=\"" << itexmat[1][0]
-                                                        << "\" m02=\"" << itexmat[2][0] << "\" m03=\"" << itexmat[3][0] << "\"\n";
-                                       ostr << "\t\tm10=\"" << itexmat[0][1] << "\" m11=\"" << itexmat[1][1]
-                                                        << "\" m12=\"" << itexmat[2][1] << "\" m13=\"" << itexmat[3][1] << "\"\n";
-                                       ostr << "\t\tm20=\"" << itexmat[0][2] << "\" m21=\"" << itexmat[1][2]
-                                                        << "\" m22=\"" << itexmat[2][2] << "\" m23=\"" << itexmat[3][2] << "\"\n";
-                                       ostr << "\t\tm30=\"" << itexmat[0][3] << "\" m31=\"" << itexmat[1][3]
-                                                        << "\" m32=\"" << itexmat[2][3] << "\" m33=\"" << itexmat[3][3] << "\">\n";
-                               }
-                               else ostr << ">\n";
-                               ostr << "\t<attributes>\n";
-
-                               // use image name instead of texname when texture is image
-                               if ((tex->type==TEX_IMAGE) && tex->ima)
-                                       ostr << "\t\t<input value=\"" << tex->ima->id.name << "\" />\n";
-                               else if ((tex->flag & TEX_COLORBAND) & (tex->coba!=NULL))
-                                       ostr << "\t\t<input value=\"" << mtexL->first + "_coba" << "\" />\n";
-                               else
-                                       ostr << "\t\t<input value=\"" << mtexL->first << "\" />\n";
-
-                               // texture size
-                               ostr << "\t\t<sizex value=\"" << mtex->size[0] << "\" />\n";
-                               ostr << "\t\t<sizey value=\"" << mtex->size[1] << "\" />\n";
-                               ostr << "\t\t<sizez value=\"" << mtex->size[2] << "\" />\n";
-
-                               // texture offset
-                               ostr << "\t\t<ofsx value=\"" << mtex->ofs[0] << "\" />\n";
-                               ostr << "\t\t<ofsy value=\"" << mtex->ofs[1] << "\" />\n";
-                               ostr << "\t\t<ofsz value=\"" << mtex->ofs[2] << "\" />\n";
-
-                               // texture coordinates, have to disable 'sticky' in Blender
-                               if (mtex->texco & TEXCO_UV)
-                                       ostr << "\t\t<texco value=\"uv\" />\n";
-                               else if ((mtex->texco & TEXCO_GLOB) || (mtex->texco & TEXCO_OBJECT))
-                                       // object mode is also set as global, but the object matrix was specified above with <modulator..>
-                                       ostr << "\t\t<texco value=\"global\" />\n";
-                               else if ((mtex->texco & TEXCO_ORCO) || (mtex->texco & TEXCO_STRAND))
-                                       // orco flag now used for 'strand'-mapping as well, see mesh code
-                                       ostr << "\t\t<texco value=\"orco\" />\n";
-                               else if (mtex->texco & TEXCO_WINDOW)
-                                       ostr << "\t\t<texco value=\"window\" />\n";
-                               else if (mtex->texco & TEXCO_NORM)
-                                       ostr << "\t\t<texco value=\"normal\" />\n";
-                               else if (mtex->texco & TEXCO_REFL)
-                                       ostr << "\t\t<texco value=\"reflect\" />\n";
-
-                               // texture projection axes, both image & procedural
-                               string proj = "nxyz";           // 'n' for 'none'
-                               ostr << "\t\t<proj_x value=\"" << proj[mtex->projx] << "\" />\n";
-                               ostr << "\t\t<proj_y value=\"" << proj[mtex->projy] << "\" />\n";
-                               ostr << "\t\t<proj_z value=\"" << proj[mtex->projz] << "\" />\n";
-
-                               // texture mapping parameters only relevant to image type
-                               if (tex->type==TEX_IMAGE) {
-                                       if (mtex->mapping==MTEX_FLAT)
-                                               ostr << "\t\t<mapping value=\"flat\" />\n";
-                                       else if (mtex->mapping==MTEX_CUBE)
-                                               ostr << "\t\t<mapping value=\"cube\" />\n";
-                                       else if (mtex->mapping==MTEX_TUBE)
-                                               ostr << "\t\t<mapping value=\"tube\" />\n";
-                                       else if (mtex->mapping==MTEX_SPHERE)
-                                               ostr << "\t\t<mapping value=\"sphere\" />\n";
-
-                                       // repeat
-                                       ostr << "\t\t<xrepeat value=\"" << tex->xrepeat << "\" />\n";
-                                       ostr << "\t\t<yrepeat value=\"" << tex->yrepeat << "\" />\n";
-
-                                       // clipping
-                                       if (tex->extend==TEX_EXTEND)
-                                               ostr << "\t\t<clipping value=\"extend\" />\n";
-                                       else if (tex->extend==TEX_CLIP)
-                                               ostr << "\t\t<clipping value=\"clip\" />\n";
-                                       else if (tex->extend==TEX_CLIPCUBE)
-                                               ostr << "\t\t<clipping value=\"clipcube\" />\n";
-                                       else if (tex->extend==TEX_CHECKER) {
-                                               ostr << "\t\t<clipping value=\"checker\" />\n";
-                                               string ts = "";
-                                               if (tex->flag & TEX_CHECKER_ODD) ts += "odd";
-                                               if (tex->flag & TEX_CHECKER_EVEN) ts += " even";
-                                               ostr << "\t\t<checker_mode value=\"" << ts << "\" />\n";
-                                               ostr << "\t\t<checker_dist value=\"" << tex->checkerdist << "\" />\n";
-                                       }
-                                       else
-                                               ostr << "\t\t<clipping value=\"repeat\" />\n";
-
-                                       // crop min/max
-                                       ostr << "\t\t<cropmin_x value=\"" << tex->cropxmin << "\" />\n";
-                                       ostr << "\t\t<cropmin_y value=\"" << tex->cropymin << "\" />\n";
-                                       ostr << "\t\t<cropmax_x value=\"" << tex->cropxmax << "\" />\n";
-                                       ostr << "\t\t<cropmax_y value=\"" << tex->cropymax << "\" />\n";
-
-                                       // rot90 flag
-                                       string ts = "off";
-                                       if (tex->imaflag & TEX_IMAROT) ts = "on";
-                                       ostr << "\t\t<rot90 value=\"" << ts << "\" />\n";
-                               }
-
-                               ostr << "\t</attributes>\n";
-                               ostr << "</shader>\n\n";
-
-                               xmlfile << ostr.str();
-                       }
-               }
-
-               // shader + modulators
-               writeShader(blendmat->first, matr);
-
-       }
-
-       // write the mappers & shaders for the TexFace case
-       if (!imagetex.empty()) {
-               // Yafray doesn't have per-face-textures, only per-face-shaders,
-               // so create as many mappers/shaders as the images used by the object
-               int snum = 0;
-               for (map<Image*, set<Material*> >::const_iterator imgtex=imagetex.begin();
-                               imgtex!=imagetex.end();++imgtex)
-               {
-
-                       for (set<Material*>::const_iterator imgmat=imgtex->second.begin();
-                                       imgmat!=imgtex->second.end();++imgmat)
-                       {
-                               Material* matr = *imgmat;
-                               // mapper
-                               ostr.str("");
-                               ostr << "<shader type=\"blendermapper\" name=\"" << string(matr->id.name) + "_ftmap" << snum << "\" >\n";
-                               ostr << "\t<attributes>\n";
-                               ostr << "\t\t<input value=\"" << imgtex->first->id.name << "\" />\n";
-                               // all yafray default settings, except for texco, so no need to set others
-                               ostr << "\t\t<texco value=\"uv\" />\n";
-                               ostr << "\t</attributes>\n";
-                               ostr << "</shader>\n\n";
-                               xmlfile << ostr.str();
-
-                               // shader, remember name, used later when writing per-face-shaders
-                               ostr.str("");
-                               ostr << matr->id.name <<  "_ftsha" << snum;
-                               string shader_name = ostr.str();
-                               imgtex_shader[string(matr->id.name) + string(imgtex->first->id.name)] = shader_name;
-
-                               ostr.str("");
-                               ostr << matr->id.name << "_ftmap" << snum++;
-                               writeShader(shader_name, matr, ostr.str());
-                       }
-
-               }
-       }
-
-}
-
-
-void yafrayFileRender_t::writeObject(Object* obj, ObjectRen *obr, const vector<VlakRen*> &VLR_list, const float obmat[4][4])
-{
-       ostr.str("");
-       // transform first (not necessarily actual obj->obmat, can be duplivert see below)
-       ostr << "<transform m00=\"" << obmat[0][0] << "\" m01=\"" << obmat[1][0]
-                        <<         "\" m02=\"" << obmat[2][0] << "\" m03=\"" << obmat[3][0] << "\"\n";
-       ostr << "           m10=\"" << obmat[0][1] << "\" m11=\"" << obmat[1][1]
-                        <<         "\" m12=\"" << obmat[2][1] << "\" m13=\"" << obmat[3][1] << "\"\n";
-       ostr << "           m20=\"" << obmat[0][2] << "\" m21=\"" << obmat[1][2]
-                        <<         "\" m22=\"" << obmat[2][2] << "\" m23=\"" << obmat[3][2] << "\"\n";
-       ostr << "           m30=\"" << obmat[0][3] << "\" m31=\"" << obmat[1][3]
-                        <<         "\" m32=\"" << obmat[2][3] << "\" m33=\"" << obmat[3][3] << "\">\n";
-       xmlfile << ostr.str();
-
-       ostr.str("");
-
-       // using the ObjectRen database, contruct a new name if object has a parent.
-       // This is done to prevent name clashes (group/library link related)
-       string obname(obj->id.name);
-       // previous implementation, keep around, in case this is still useful
-       //if (obj->id.flag & (LIB_EXTERN|LIB_INDIRECT))obname = "lib_" + obname;
-       ObjectRen *obren;
-       for (obren = static_cast<ObjectRen*>(re->objecttable.first);
-            obren; obren=static_cast<ObjectRen*>(obren->next))
-       {
-               Object *db_ob = obren->ob, *db_par = obren->par;
-               if (db_ob==obj)
-                       if ((db_ob!=NULL) && (db_par!=NULL)) {
-                               obname += "_" + string(db_par->id.name);
-                               break;
-                       }
-       }
-
-       ostr << "<object name=\"" << obname << "\"";
-       // Yafray still needs default shader name in object def.,
-       // since we write a shader with every face, simply use the material of the first face.
-       // If this is an empty string, assume default material.
-       VlakRen* face0 = VLR_list[0];
-       Material* face0mat = face0->mat;
-       string matname(face0mat->id.name);
-       // use name in imgtex_shader list if 'TexFace' enabled for this material
-       if (face0mat->mode & MA_FACETEXTURE) {
-               MTFace* tface = RE_vlakren_get_tface(obr, face0, obr->actmtface, NULL, 0);
-               if (tface) {
-                       Image* fimg = (Image*)tface->tpage;
-                       if (fimg) matname = imgtex_shader[string(face0mat->id.name) + string(fimg->id.name)];
-               }
-       }
-       bool shadow = face0mat->mode & MA_TRACEBLE;
-       ostr <<" shadow=\""<< (shadow ? "on" : "off" ) << "\" ";
-       bool caus = (((face0mat->mode & MA_RAYTRANSP) | (face0->mat->mode & MA_RAYMIRROR))!=0);
-       if (caus) ostr << "caus_IOR=\"" << face0mat->ang << "\"";
-       if (matname.length()==0) matname = "blender_default";
-       ostr << " shader_name=\"" << matname << "\" >\n";
-       ostr << "\t<attributes>\n";
-       if (caus)
-       {
-                       float tr = 1.0-face0mat->alpha;
-                       ostr << "\t\t<caus_tcolor r=\"" << face0mat->r*tr
-                                        << "\" g=\"" << face0mat->g*tr
-                                        << "\" b=\"" << face0mat->b*tr << "\" />\n";
-                       tr = face0mat->ray_mirror;
-                       ostr << "\t\t<caus_rcolor r=\"" << face0mat->mirr*tr
-                                        << "\" g=\"" << face0mat->mirg*tr
-                                        << "\" b=\"" << face0mat->mirb*tr << "\" />\n";
-       }
-       ostr << "\t</attributes>\n";
-       xmlfile << ostr.str();
-
-       // 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.
-       // update2: bug #3193 it seems it has changed again with the introduction of static 'hair' particles,
-       // now it uses the vert pointer again as an extra test to make sure there are orco coords available
-       int has_orco = 0;
-       if (face0mat->texco & TEXCO_STRAND)
-               has_orco = 1;
-       else
-               has_orco = (((face0mat->texco & TEXCO_ORCO)!=0) && (face0->v1->orco!=NULL)) ? 2 : 0;
-
-       string has_orco_st = has_orco ? "on" : "off";
-
-       // smooth shading if enabled
-       bool no_auto = true;    //in case non-mesh, or mesh has no autosmooth
-       if (obj->type==OB_MESH) {
-               Mesh* mesh = (Mesh*)obj->data;
-               if (mesh->flag & ME_AUTOSMOOTH) {
-                       no_auto = false;
-                       ostr.str("");
-                       ostr << "\t<mesh autosmooth=\"" << mesh->smoothresh << "\" has_orco=\"" << has_orco_st << "\" >\n";
-                       xmlfile << ostr.str();
-               }
-       }
-       // this for non-mesh as well
-       if (no_auto) {
-               // If AutoSmooth not used, since yafray currently cannot specify if a face is smooth
-               // or flat shaded, the smooth flag of the first face is used to determine
-               // the shading for the whole mesh
-               if (face0->flag & ME_SMOOTH)
-                       xmlfile << "\t<mesh autosmooth=\"180\" has_orco=\"" << has_orco_st << "\" >\n";
-               else
-                       xmlfile << "\t<mesh autosmooth=\"0.1\" has_orco=\"" << has_orco_st << "\" >\n"; //0 shows artefacts
-       }
-
-       // now all vertices
-       map<VertRen*, int> vert_idx;    // for removing duplicate verts and creating an index list
-       int vidx = 0;   // vertex index counter
-
-       // vertices, transformed back to world
-       xmlfile << "\t\t<points>\n";
-
-       // for deformed objects, object->imat is no longer valid,
-       // so have to create inverse render matrix ourselves here
-       float mat[4][4], imat[4][4];
-       MTC_Mat4MulMat4(mat, obj->obmat, re->viewmat);
-       MTC_Mat4Invert(imat, mat);
-
-       for (vector<VlakRen*>::const_iterator fci=VLR_list.begin();
-                               fci!=VLR_list.end();++fci)
-       {
-               VlakRen* vlr = *fci;
-               VertRen* ver;
-               float* orco;
-               float tvec[3];
-               ostr.str("");
-               if (vert_idx.find(vlr->v1)==vert_idx.end()) {
-                       vert_idx[vlr->v1] = vidx++;
-                       ver = vlr->v1;
-                       MTC_cp3Float(ver->co, tvec);
-                       MTC_Mat4MulVecfl(imat, tvec);
-                       ostr << "\t\t\t<p x=\"" << tvec[0]
-                                  << "\" y=\"" << tvec[1]
-                                  << "\" z=\"" << tvec[2] << "\" />\n";
-                       // has_orco now an int, if 1 -> strand mapping, if 2 -> normal orco mapping
-                       if (has_orco==1) {
-                               ostr << "\t\t\t<p x=\"" << ver->accum
-                                    << "\" y=\"" << ver->accum
-                                    << "\" z=\"" << ver->accum << "\" />\n";
-                       }
-                       else if (has_orco==2) {
-                               orco = ver->orco;
-                               ostr << "\t\t\t<p x=\"" << orco[0]
-                                    << "\" y=\"" << orco[1]
-                                    << "\" z=\"" << orco[2] << "\" />\n";
-                       }
-               }
-               if (vert_idx.find(vlr->v2)==vert_idx.end()) {
-                       vert_idx[vlr->v2] = vidx++;
-                       ver = vlr->v2;
-                       MTC_cp3Float(ver->co, tvec);
-                       MTC_Mat4MulVecfl(imat, tvec);
-                       ostr << "\t\t\t<p x=\"" << tvec[0]
-                                  << "\" y=\"" << tvec[1]
-                                  << "\" z=\"" << tvec[2] << "\" />\n";
-                       // has_orco now an int, if 1 -> strand mapping, if 2 -> normal orco mapping
-                       if (has_orco==1) {
-                               ostr << "\t\t\t<p x=\"" << ver->accum
-                                    << "\" y=\"" << ver->accum
-                                    << "\" z=\"" << ver->accum << "\" />\n";
-                       }
-                       else if (has_orco==2) {
-                               orco = ver->orco;
-                               ostr << "\t\t\t<p x=\"" << orco[0]
-                                    << "\" y=\"" << orco[1]
-                                    << "\" z=\"" << orco[2] << "\" />\n";
-                       }
-               }
-               if (vert_idx.find(vlr->v3)==vert_idx.end()) {
-                       vert_idx[vlr->v3] = vidx++;
-                       ver = vlr->v3;
-                       MTC_cp3Float(ver->co, tvec);
-                       MTC_Mat4MulVecfl(imat, tvec);
-                       ostr << "\t\t\t<p x=\"" << tvec[0]
-                                  << "\" y=\"" << tvec[1]
-                                  << "\" z=\"" << tvec[2] << "\" />\n";
-                       // has_orco now an int, if 1 -> strand mapping, if 2 -> normal orco mapping
-                       if (has_orco==1) {
-                               ostr << "\t\t\t<p x=\"" << ver->accum
-                                    << "\" y=\"" << ver->accum
-                                    << "\" z=\"" << ver->accum << "\" />\n";
-                       }
-                       else if (has_orco==2) {
-                               orco = ver->orco;
-                               ostr << "\t\t\t<p x=\"" << orco[0]
-                                    << "\" y=\"" << orco[1]
-                                    << "\" z=\"" << orco[2] << "\" />\n";
-                       }
-               }
-               if ((vlr->v4) && (vert_idx.find(vlr->v4)==vert_idx.end())) {
-                       vert_idx[vlr->v4] = vidx++;
-                       ver = vlr->v4;
-                       MTC_cp3Float(ver->co, tvec);
-                       MTC_Mat4MulVecfl(imat, tvec);
-                       ostr << "\t\t\t<p x=\"" << tvec[0]
-                                  << "\" y=\"" << tvec[1]
-                                  << "\" z=\"" << tvec[2] << "\" />\n";
-                       // has_orco now an int, if 1 -> strand mapping, if 2 -> normal orco mapping
-                       if (has_orco==1) {
-                               ostr << "\t\t\t<p x=\"" << ver->accum
-                                    << "\" y=\"" << ver->accum
-                                    << "\" z=\"" << ver->accum << "\" />\n";
-                       }
-                       else if (has_orco==2) {
-                               orco = ver->orco;
-                               ostr << "\t\t\t<p x=\"" << orco[0]
-                                    << "\" y=\"" << orco[1]
-                                    << "\" z=\"" << orco[2] << "\" />\n";
-                       }
-               }
-               xmlfile << ostr.str();
-       }
-       xmlfile << "\t\t</points>\n";
-
-       // all faces using the index list created above
-       xmlfile << "\t\t<faces>\n";
-       for (vector<VlakRen*>::const_iterator fci2=VLR_list.begin();
-                               fci2!=VLR_list.end();++fci2)
-       {
-               VlakRen* vlr = *fci2;
-               Material* fmat = vlr->mat;
-               bool EXPORT_VCOL = ((fmat->mode & (MA_VERTEXCOL|MA_VERTEXCOLP))!=0);
-               string fmatname(fmat->id.name);
-               // use name in imgtex_shader list if 'TexFace' enabled for this face material
-               if (fmat->mode & MA_FACETEXTURE) {
-                       MTFace* tface = RE_vlakren_get_tface(obr, vlr, obr->actmtface, NULL, 0);
-                       if (tface) {
-                               Image* fimg = (Image*)tface->tpage;
-                               if (fimg) fmatname = imgtex_shader[fmatname + string(fimg->id.name)];
-                       }
-               }
-               else if (fmatname.length()==0) fmatname = "blender_default";
-       
-               int idx1 = vert_idx.find(vlr->v1)->second;
-               int idx2 = vert_idx.find(vlr->v2)->second;
-               int idx3 = vert_idx.find(vlr->v3)->second;
-               // make sure the indices point to the vertices when orco coords exported
-               if (has_orco) { idx1*=2;  idx2*=2;  idx3*=2; }
-
-               ostr.str("");
-               ostr << "\t\t\t<f a=\"" << idx1 << "\" b=\"" << idx2 << "\" c=\"" << idx3 << "\"";
-
-               // triangle uv and vcol indices
-               int ui1=0, ui2=1, ui3=2;
-               if (vlr->flag & R_DIVIDE_24) {
-                       ui3++;
-                       if (vlr->flag & R_FACE_SPLIT) { ui1++;  ui2++; }
-               }
-               else if (vlr->flag & R_FACE_SPLIT) { ui2++;  ui3++; }
-
-               MTFace* uvc = RE_vlakren_get_tface(obr, vlr, obr->actmtface, NULL, 0); // possible uvcoords (v upside down)
-               if (uvc) {
-                       ostr << " u_a=\"" << uvc->uv[ui1][0] << "\" v_a=\"" << 1-uvc->uv[ui1][1] << "\""
-                            << " u_b=\"" << uvc->uv[ui2][0] << "\" v_b=\"" << 1-uvc->uv[ui2][1] << "\""
-                            << " u_c=\"" << uvc->uv[ui3][0] << "\" v_c=\"" << 1-uvc->uv[ui3][1] << "\"";
-               }
-
-               MCol *mcol= RE_vlakren_get_mcol(obr, vlr, obr->actmcol, NULL, 0);
-
-               // since Blender seems to need vcols when uvs are used, for yafray only export when the material actually uses vcols
-               if ((EXPORT_VCOL) && mcol) {
-                       // vertex colors
-                       unsigned char* pt = reinterpret_cast<unsigned char*>(&mcol[ui1]);
-                       ostr << " vcol_a_r=\"" << (float)pt[3]/255.f << "\" vcol_a_g=\"" << (float)pt[2]/255.f
-                            << "\" vcol_a_b=\"" << (float)pt[1]/255.f << "\"";
-                       pt = reinterpret_cast<unsigned char*>(&mcol[ui2]);
-                       ostr << " vcol_b_r=\"" << (float)pt[3]/255.f << "\" vcol_b_g=\"" << (float)pt[2]/255.f
-                            << "\" vcol_b_b=\"" << (float)pt[1]/255.f << "\"";
-                       pt = reinterpret_cast<unsigned char*>(&mcol[ui3]);
-                       ostr << " vcol_c_r=\"" << (float)pt[3]/255.f << "\" vcol_c_g=\"" << (float)pt[2]/255.f
-                            << "\" vcol_c_b=\"" << (float)pt[1]/255.f << "\"";
-               }
-               ostr << " shader_name=\"" << fmatname << "\" />\n";
-
-               if (vlr->v4) {
-
-                       idx1 = vert_idx.find(vlr->v3)->second;
-                       idx2 = vert_idx.find(vlr->v4)->second;
-                       idx3 = vert_idx.find(vlr->v1)->second;
-
-                       // make sure the indices point to the vertices when orco coords exported
-                       if (has_orco) { idx1*=2;  idx2*=2;  idx3*=2; }
-
-                       ostr << "\t\t\t<f a=\"" << idx1 << "\" b=\"" << idx2 << "\" c=\"" << idx3 << "\"";
-
-                       // increment uv & vcol indices
-                       ui1 = (ui1+2) & 3;
-                       ui2 = (ui2+2) & 3;
-                       ui3 = (ui3+2) & 3;
-
-                       if (uvc) {
-                               ostr << " u_a=\"" << uvc->uv[ui1][0] << "\" v_a=\"" << 1-uvc->uv[ui1][1] << "\""
-                                    << " u_b=\"" << uvc->uv[ui2][0] << "\" v_b=\"" << 1-uvc->uv[ui2][1] << "\""
-                                    << " u_c=\"" << uvc->uv[ui3][0] << "\" v_c=\"" << 1-uvc->uv[ui3][1] << "\"";
-                       }
-                       if ((EXPORT_VCOL) && mcol) {
-                               // vertex colors
-                               unsigned char* pt = reinterpret_cast<unsigned char*>(&mcol[ui1]);
-                               ostr << " vcol_a_r=\"" << (float)pt[3]/255.f << "\" vcol_a_g=\"" << (float)pt[2]/255.f
-                                    << "\" vcol_a_b=\"" << (float)pt[1]/255.f << "\"";
-                               pt = reinterpret_cast<unsigned char*>(&mcol[ui2]);
-                               ostr << " vcol_b_r=\"" << (float)pt[3]/255.f << "\" vcol_b_g=\"" << (float)pt[2]/255.f
-                                    << "\" vcol_b_b=\"" << (float)pt[1]/255.f << "\"";
-                               pt = reinterpret_cast<unsigned char*>(&mcol[ui3]);
-                               ostr << " vcol_c_r=\"" << (float)pt[3]/255.f << "\" vcol_c_g=\"" << (float)pt[2]/255.f
-                                    << "\" vcol_c_b=\"" << (float)pt[1]/255.f << "\"";
-                       }
-                       ostr << " shader_name=\"" << fmatname << "\" />\n";
-
-               }
-               xmlfile << ostr.str();
-       }
-       xmlfile << "\t\t</faces>\n\t</mesh>\n</object>\n</transform>\n\n";
-}
-
-
-// write all objects
-void yafrayFileRender_t::writeAllObjects()
-{
-
-       // first all objects except dupliverts (and main instance object for dups)
-       for (map<Object*, yafrayObjectRen >::const_iterator obi=all_objects.begin();
-                       obi!=all_objects.end(); ++obi)
-       {
-               // skip main duplivert object if in dupliMtx_list, written later
-               Object* obj = obi->first;
-               if (dupliMtx_list.find(string(obj->id.name))!=dupliMtx_list.end()) continue;
-               writeObject(obj, obi->second.obr, obi->second.faces, obj->obmat);
-       }
-
-       // Now all duplivert objects (if any) as instances of main object
-       // The original object has been included in the VlakRen renderlist above (see convertBlenderScene.c)
-       // but is written here which all other duplis are instances of.
-       float obmat[4][4], cmat[4][4], imat[4][4], nmat[4][4];
-       for (map<string, vector<float> >::const_iterator dupMtx=dupliMtx_list.begin();
-               dupMtx!=dupliMtx_list.end();++dupMtx) {
-
-               // original inverse matrix, not actual matrix of object, but first duplivert.
-               
-               for (int i=0;i<4;i++)
-                       for (int j=0;j<4;j++)
-                               obmat[i][j] = dupMtx->second[(i<<2)+j];
-
-               MTC_Mat4Invert(imat, obmat);
-
-               // first object written as normal (but with transform of first duplivert)
-               Object* obj = dup_srcob[dupMtx->first];
-               writeObject(obj, all_objects[obj].obr, all_objects[obj].faces, obmat);
-
-               // all others instances of first
-               for (unsigned int curmtx=16;curmtx<dupMtx->second.size();curmtx+=16) {  // number of 4x4 matrices
-
-                       // new mtx
-                       for (int i=0;i<4;i++)
-                               for (int j=0;j<4;j++)
-                                       nmat[i][j] = dupMtx->second[curmtx+(i<<2)+j];
-
-                       MTC_Mat4MulMat4(cmat, imat, nmat);      // transform with respect to original = inverse_original * new
-
-                       ostr.str("");
-                       // yafray matrix = transpose of Blender
-                       ostr << "<transform m00=\"" << cmat[0][0] << "\" m01=\"" << cmat[1][0]
-                                        <<         "\" m02=\"" << cmat[2][0] << "\" m03=\"" << cmat[3][0] << "\"\n";
-                       ostr << "           m10=\"" << cmat[0][1] << "\" m11=\"" << cmat[1][1]
-                                        <<         "\" m12=\"" << cmat[2][1] << "\" m13=\"" << cmat[3][1] << "\"\n";
-                       ostr << "           m20=\"" << cmat[0][2] << "\" m21=\"" << cmat[1][2]
-                                        <<         "\" m22=\"" << cmat[2][2] << "\" m23=\"" << cmat[3][2] << "\"\n";
-                       ostr << "           m30=\"" << cmat[0][3] << "\" m31=\"" << cmat[1][3]
-                                        <<         "\" m32=\"" << cmat[2][3] << "\" m33=\"" << cmat[3][3] << "\">\n";
-                       xmlfile << ostr.str();
-
-                       // new name from original
-                       ostr.str("");
-                       ostr << "<object name=\"" << obj->id.name << "_dup" << (curmtx>>4) << "\" original=\"" << obj->id.name << "\" >\n";
-                       xmlfile << ostr.str();
-                       xmlfile << "\t<attributes>\n\t</attributes>\n\t<null/>\n</object>\n</transform>\n\n";
-
-               }
-
-       }
-
-}
-
-void yafrayFileRender_t::writeAreaLamp(LampRen* lamp, int num, float iview[4][4])
-{
-       if (lamp->area_shape!=LA_AREA_SQUARE) return;
-       float *a=lamp->area[0], *b=lamp->area[1], *c=lamp->area[2], *d=lamp->area[3];
-       float power=lamp->energy;
-       
-       ostr.str("");
-       string md = "off";
-       // if no GI used, the GIphotons flag can still be set, so only use when 'full' selected
-       if ((re->r.GImethod==2) && (re->r.GIphotons)) { md="on";  power*=re->r.GIpower; }
-       ostr << "<light type=\"arealight\" name=\"LAMP" << num+1 << "\" dummy=\""<< md << "\" power=\"" << power << "\" ";
-       // samples not used for GI with photons, can still be exported, is ignored
-       int psm=0, sm = lamp->ray_totsamp;
-       if (sm>=25) psm = sm/5;
-       ostr << "samples=\"" << sm << "\" psamples=\"" << psm << "\" ";
-       ostr << ">\n";
-       
-       // transform area lamp coords back to world
-       float lpco[4][3];
-       MTC_cp3Float(a, lpco[0]);
-       MTC_Mat4MulVecfl(iview, lpco[0]);
-       MTC_cp3Float(b, lpco[1]);
-       MTC_Mat4MulVecfl(iview, lpco[1]);
-       MTC_cp3Float(c, lpco[2]);
-       MTC_Mat4MulVecfl(iview, lpco[2]);
-       MTC_cp3Float(d, lpco[3]);
-       MTC_Mat4MulVecfl(iview, lpco[3]);
-       ostr << "\t<a x=\""<< lpco[0][0] <<"\" y=\""<< lpco[0][1] <<"\" z=\"" << lpco[0][2] <<"\" />\n";
-       ostr << "\t<b x=\""<< lpco[1][0] <<"\" y=\""<< lpco[1][1] <<"\" z=\"" << lpco[1][2] <<"\" />\n";
-       ostr << "\t<c x=\""<< lpco[2][0] <<"\" y=\""<< lpco[2][1] <<"\" z=\"" << lpco[2][2] <<"\" />\n";
-       ostr << "\t<d x=\""<< lpco[3][0] <<"\" y=\""<< lpco[3][1] <<"\" z=\"" << lpco[3][2] <<"\" />\n";
-
-       ostr << "\t<color r=\"" << lamp->r << "\" g=\"" << lamp->g << "\" b=\"" << lamp->b << "\" />\n";
-       ostr << "</light>\n\n";
-       xmlfile << ostr.str();
-}
-
-void yafrayFileRender_t::writeLamps()
-{
-       GroupObject *go;
-       int i=0;
-       
-       // inverse viewmatrix needed for back2world transform
-       float iview[4][4];
-       // re->viewinv != inv.re->viewmat because of possible ortho mode (see convertBlenderScene.c)
-       // have to invert it here
-       MTC_Mat4Invert(iview, re->viewmat);
-       
-       // all lamps
-       for(go=(GroupObject *)re->lights.first; go; go= go->next, i++) {
-               LampRen* lamp = (LampRen *)go->lampren;
-
-               ostr.str("");
-               
-               if (lamp->type==LA_AREA) { writeAreaLamp(lamp, i, iview);  continue; }
-               
-               // TODO: add decay setting in yafray
-               ostr << "<light type=\"";
-               bool is_softL=false, is_sphereL=false;
-               if (lamp->type==LA_LOCAL) {
-                       if (lamp->mode & LA_YF_SOFT) {
-                               // shadowmapped omnidirectional light
-                               ostr << "softlight\"";
-                               is_softL = true;
-                       }
-                       else if ((lamp->mode & LA_SHAD_RAY) && (lamp->YF_ltradius>0.0)) {
-                               // area sphere, only when ray shadows enabled and radius>0.0
-                               ostr << "spherelight\"";
-                               is_sphereL = true;
-                       }
-                       else ostr << "pointlight\"";
-                       ostr << " glow_intensity=\"" << lamp->YF_glowint << "\" glow_offset=\"" << lamp->YF_glowofs
-                                        << "\" glow_type=\"" << lamp->YF_glowtype << "\"";
-               }
-               else if (lamp->type==LA_SPOT)
-                       ostr << "spotlight\"";
-               else if ((lamp->type==LA_SUN) || (lamp->type==LA_HEMI)) // hemi exported as sun
-                       ostr << "sunlight\"";
-               else if (lamp->type==LA_YF_PHOTON)
-                       ostr << "photonlight\"";
-               else {
-                       // possibly unknown type, ignore
-                       cout << "Unknown Blender lamp type: " << lamp->type << endl;
-                       continue;
-               }
-               
-               //no name available here, create one
-               ostr << " name=\"LAMP" << i+1;
-               // color already premultiplied by energy, so only need distance here
-               float pwr = 1;  // default for sun/hemi, distance irrelevant
-               if ((lamp->type!=LA_SUN) && (lamp->type!=LA_HEMI)) {
-                       if (lamp->mode & LA_SPHERE) {
-                               // best approx. as used in LFexport script (LF d.f.m. 4pi?)
-                               pwr = lamp->dist*(lamp->dist+1)*(0.25/M_PI);
-                               //decay = 2;
-                       }
-                       else {
-                               pwr = lamp->dist;
-                               //decay = 1;
-                       }
-               }
-
-               if (is_sphereL) {
-                       // 'dummy' mode for spherelight when used with gpm
-                       string md = "off";
-                       // if no GI used, the GIphotons flag can still be set, so only use when 'full' selected
-                       if ((re->r.GImethod==2) && (re->r.GIphotons)) { md="on";  pwr*=re->r.GIpower; }
-                       ostr << "\" power=\"" <<  pwr << "\" dummy=\"" << md << "\"";
-               }
-               else ostr << "\" power=\"" << pwr << "\"";
-               
-               // cast_shadows flag not used with softlight, spherelight or photonlight
-               if ((!is_softL) && (!is_sphereL) && (lamp->type!=LA_YF_PHOTON)) {
-                       string lpmode="off";
-                       // Blender hemilights exported as sunlights which might have shadow flag set
-                       // should have cast_shadows set to off (reported by varuag)
-                       if (lamp->type!=LA_HEMI) {
-                               if (re->r.mode & R_SHADOW) {
-                                       // old bug was here since the yafray lamp settings panel was added,
-                                       // blender spotlight shadbuf flag should be ignored, since it is not in the panel anymore
-                                       if (lamp->mode & LA_SHAD_RAY) lpmode="on";
-                               }
-                       }
-                       ostr << " cast_shadows=\"" << lpmode << "\"";
-               }
-
-               
-               // spot specific stuff
-               bool has_halo = ((lamp->type==LA_SPOT) && (lamp->mode & LA_HALO) && (lamp->haint>0.0));
-               if (lamp->type==LA_SPOT) {
-                       // conversion already changed spotsize to cosine of half angle
-                       float ld = 1-lamp->spotsi;      //convert back to blender slider setting
-                       if (ld!=0) ld = 1.f/ld;
-                       ostr    << " size=\"" << acos(lamp->spotsi)*180.0/M_PI << "\""
-                                               << " blend=\"" << lamp->spotbl*ld << "\""
-                                               << " beam_falloff=\"2\"";       // no Blender equivalent (yet)
-                       // halo params
-                       if (has_halo) {
-                               ostr << "\n\thalo=\"on\" " << "res=\"" << lamp->YF_bufsize << "\"\n";
-                               int hsmp = ((12-lamp->shadhalostep)*16)/12;
-                               hsmp = (hsmp+1)*16;     // makes range (16, 272) for halostep(12, 0), good enough?
-                               // halo 'samples' now 'stepsize'
-                               // convert from old integer samples value to some reasonable stepsize
-                               ostr << "\tstepsize=\"" << (1.0/sqrt((float)hsmp)) <<  "\" shadow_samples=\"" << (lamp->samp*lamp->samp) << "\"\n";
-                               ostr << "\thalo_blur=\"0\" shadow_blur=\"" << (lamp->soft*0.01f) << "\"\n";
-                               ostr << "\tfog_density=\"" << (lamp->haint*0.2f) << "\"";
-                       }
-               }
-               else if (is_softL) {
-                       // softlight
-                       ostr    << " res=\"" << lamp->YF_bufsize << "\""
-                                               << " radius=\"" << lamp->soft << "\""
-                                               << " bias=\"" << lamp->bias << "\"";
-               }
-               else if (is_sphereL) {
-                       // spherelight
-                       int psm=0, sm = lamp->ray_samp*lamp->ray_samp;
-                       if (sm>=25) psm = sm/5;
-                       ostr    << " radius=\"" << lamp->YF_ltradius << "\""
-                                               << " samples=\"" << sm << "\""
-                                               << " psamples=\"" << psm << "\""
-                                               << " qmc_method=\"1\"";
-               }
-               else if (lamp->type==LA_YF_PHOTON) {
-                       string qmc="off";
-                       if (lamp->YF_useqmc) qmc="on";
-                       ostr    << "\n\tphotons=\"" << lamp->YF_numphotons << "\""
-                                               << " search=\"" << lamp->YF_numsearch << "\""
-                                               << " depth=\"" << lamp->YF_phdepth << "\""
-                                               << " use_QMC=\"" << qmc << "\""
-                                               << " angle=\"" << acos(lamp->spotsi)*180.0/M_PI << "\"";
-                       float cl = lamp->YF_causticblur/sqrt((float)lamp->YF_numsearch);
-                       ostr    << "\n\tfixedradius=\"" << lamp->YF_causticblur << "\" cluster=\"" << cl << "\"";
-               }
-               ostr << " >\n";
-
-               // transform lamp co & vec back to world
-               float lpco[3], lpvec[3];
-               MTC_cp3Float(lamp->co, lpco);
-               MTC_Mat4MulVecfl(iview, lpco);
-               MTC_cp3Float(lamp->vec, lpvec);
-               MTC_Mat4Mul3Vecfl(iview, lpvec);
-
-               // position, (==-blendir for sun/hemi)
-               if ((lamp->type==LA_SUN) || (lamp->type==LA_HEMI))
-                       ostr << "\t<from x=\"" << -lpvec[0] << "\" y=\"" << -lpvec[1] << "\" z=\"" << -lpvec[2] << "\" />\n";
-               else
-                       ostr << "\t<from x=\"" << lpco[0] << "\" y=\"" << lpco[1] << "\" z=\"" << lpco[2] << "\" />\n";         
-               // 'to' for spot/photonlight, already calculated by Blender
-               if ((lamp->type==LA_SPOT) || (lamp->type==LA_YF_PHOTON)) {
-                       ostr << "\t<to x=\"" << lpco[0] + lpvec[0]
-                                                       << "\" y=\"" << lpco[1] + lpvec[1]
-                                                       << "\" z=\"" << lpco[2] + lpvec[2] << "\" />\n";
-                       if (has_halo) ostr << "\t<fog r=\"1\" g=\"1\" b=\"1\" />\n";
-               }
-
-               // color
-               // rgb in LampRen is premultiplied by energy, power is compensated for that above
-               ostr << "\t<color r=\"" << lamp->r << "\" g=\"" << lamp->g << "\" b=\"" << lamp->b << "\" />\n";
-               ostr << "</light>\n\n";
-               xmlfile << ostr.str();
-       }
-}
-
-// write main camera
-void yafrayFileRender_t::writeCamera()
-{
-       // here Global used again
-       ostr.str("");
-       ostr << "<camera name=\"MAINCAM\" ";
-       if (re->r.mode & R_ORTHO)
-               ostr << "type=\"ortho\"";
-       else    
-               ostr << "type=\"perspective\"";
-
-       // render resolution including the percentage buttons
-       ostr << " resx=\"" << re->winx << "\" resy=\"" << re->winy << "\"";
-
-       float f_aspect = 1;
-       if ((re->winx * re->r.xasp) <= (re->winy * re->r.yasp))
-               f_aspect = float(re->winx * re->r.xasp) / float(re->winy * re->r.yasp);
-       ostr << "\n\tfocal=\"" << mainCamLens/(f_aspect*32.f);
-       // bug #4532, when field rendering is enabled, ycor is doubled
-       if (re->r.mode & R_FIELDS)
-               ostr << "\" aspect_ratio=\"" << (re->ycor * 0.5f) << "\"";
-       else
-               ostr << "\" aspect_ratio=\"" << re->ycor << "\"";
-
-
-       // dof params, only valid for real camera
-       float fdist = 1;        // only changes for ortho
-       if (maincam_obj->type==OB_CAMERA) {
-               Camera* cam = (Camera*)maincam_obj->data;
-               if (re->r.mode & R_ORTHO) fdist = cam->ortho_scale*(mainCamLens/32.f);
-               ostr << "\n\tdof_distance=\"" << cam->YF_dofdist << "\"";
-               ostr << " aperture=\"" << cam->YF_aperture << "\"";
-               string st = "on";
-               if (cam->flag & CAM_YF_NO_QMC) st = "off";
-               ostr << " use_qmc=\"" << st << "\"";
-               // bokeh params
-               st = "disk1";
-               if (cam->YF_bkhtype==1)
-                       st = "disk2";
-               else if (cam->YF_bkhtype==2)
-                       st = "triangle";
-               else if (cam->YF_bkhtype==3)
-                       st = "square";
-               else if (cam->YF_bkhtype==4)
-                       st = "pentagon";
-               else if (cam->YF_bkhtype==5)
-                       st = "hexagon";
-               else if (cam->YF_bkhtype==6)
-                       st = "ring";
-               ostr << "\n\tbokeh_type=\"" << st << "\"";
-               st = "uniform";
-               if (cam->YF_bkhbias==1)
-                       st = "center";
-               else if (cam->YF_bkhbias==2)
-                       st = "edge";
-               ostr << " bokeh_bias=\"" << st << "\"";
-               ostr << " bokeh_rotation=\"" << cam->YF_bkhrot << "\"";
-       }
-
-       ostr << " >\n";
-       xmlfile << ostr.str();
-
-       ostr.str("");
-       ostr << "\t<from x=\"" << maincam_obj->obmat[3][0] << "\""
-                                                       << " y=\"" << maincam_obj->obmat[3][1] << "\""
-                                                       << " z=\"" << maincam_obj->obmat[3][2] << "\" />\n";
-       ostr << "\t<to x=\"" << maincam_obj->obmat[3][0] - fdist * re->viewmat[0][2]
-                                       << "\" y=\"" << maincam_obj->obmat[3][1] - fdist * re->viewmat[1][2]
-                                       << "\" z=\"" << maincam_obj->obmat[3][2] - fdist * re->viewmat[2][2] << "\" />\n";
-       ostr << "\t<up x=\"" << maincam_obj->obmat[3][0] + re->viewmat[0][1]
-                                       << "\" y=\"" << maincam_obj->obmat[3][1] + re->viewmat[1][1]
-                                       << "\" z=\"" << maincam_obj->obmat[3][2] + re->viewmat[2][1] << "\" />\n";
-       xmlfile << ostr.str();
-
-       xmlfile << "</camera>\n\n";
-}
-
-void yafrayFileRender_t::writeHemilight()
-{
-       World *world = re->scene->world;
-       bool fromAO = false;
-       if (re->r.GIquality==6){
-               // use Blender AO params is possible
-               if (world==NULL) return;
-               if ((world->mode & WO_AMB_OCC)==0) {
-                       // no AO, use default GIquality
-                       cout << "No ambient occlusion enabled\nUsing defaults of 25 samples & infinite distance instead" << endl;
-               }
-               else fromAO = true;
-       }
-       ostr.str("");
-       if (re->r.GIcache) {
-               ostr << "<light type=\"pathlight\" name=\"path_LT\" power=\"" << re->r.GIpower << "\" mode=\"occlusion\"";
-               ostr << "\n\tcache=\"on\" use_QMC=\"on\" threshold=\"" << re->r.GIrefinement << "\" "
-                                << "cache_size=\"" << ((2.0/float(re->winx))*re->r.GIpixelspersample) << "\"";
-               ostr << "\n\tshadow_threshold=\"" << (1.0-re->r.GIshadowquality) << "\" grid=\"82\" search=\"35\"";
-               ostr << "\n\tignore_bumpnormals=\"" << (re->r.YF_nobump ? "on" : "off") << "\"";
-               if (fromAO) {
-                       // for AO, with cache, using range of 32*1 to 32*16 seems good enough
-                       ostr << "\n\tsamples=\"" << 32*world->aosamp << "\" maxdistance=\"" << world->aodist << "\" >\n";
-               }
-               else {
-                       switch (re->r.GIquality)
-                       {
-                               case 1 : ostr << " samples=\"128\" >\n";  break;
-                               case 2 : ostr << " samples=\"256\" >\n";  break;
-                               case 3 : ostr << " samples=\"512\" >\n";  break;
-                               case 4 : ostr << " samples=\"1024\" >\n"; break;
-                               case 5 : ostr << " samples=\"2048\" >\n"; break;
-                               default: ostr << " samples=\"256\" >\n";
-                       }
-               }
-       }
-       else {
-               ostr << "<light type=\"hemilight\" name=\"hemi_LT\" power=\"" << re->r.GIpower << "\"";
-               if (fromAO) {
-                       // use minimum of 4 samples for lowest sample setting, single sample way too noisy
-                       ostr << "\n\tsamples=\"" << 3 + world->aosamp*world->aosamp
-                                        << "\" maxdistance=\"" << world->aodist
-                                        << "\" use_QMC=\"" << ((world->aomode & WO_AORNDSMP) ? "off" : "on") << "\" >\n";
-               }
-               else {
-                       switch (re->r.GIquality)
-                       {
-                               case 1 :
-                               case 2 : ostr << " samples=\"16\" >\n";  break;
-                               case 3 : ostr << " samples=\"36\" >\n";  break;
-                               case 4 : ostr << " samples=\"64\" >\n";  break;
-                               case 5 : ostr << " samples=\"128\" >\n";  break;
-                               default: ostr << " samples=\"25\" >\n";
-                       }
-               }
-       }
-       ostr << "</light>\n\n";
-       xmlfile << ostr.str();
-}
-
-void yafrayFileRender_t::writePathlight()
-{
-       ostr.str("");
-       if (re->r.GIphotons)
-       {
-               ostr << "<light type=\"globalphotonlight\" name=\"gpm\" photons=\"" << re->r.GIphotoncount << "\"" << endl;
-               ostr << "\tradius=\"" << re->r.GIphotonradius << "\" depth=\"" << ((re->r.GIdepth>2) ? (re->r.GIdepth-1) : 1)
-                                << "\" caus_depth=\"" << re->r.GIcausdepth << "\" search=\"" << re->r.GImixphotons << "\" >"<<endl;
-               ostr << "</light>"<<endl;
-       }
-       ostr << "<light type=\"pathlight\" name=\"path_LT\" power=\"" << re->r.GIindirpower << "\"";
-       ostr << " depth=\"" << ((re->r.GIphotons) ? 1 : re->r.GIdepth) << "\" caus_depth=\"" << re->r.GIcausdepth <<"\"\n";
-       if (re->r.GIdirect && re->r.GIphotons) ostr << "direct=\"on\"" << endl;
-       if (re->r.GIcache && !(re->r.GIdirect && re->r.GIphotons))
-       {
-               switch (re->r.GIquality)
-               {
-                       case 1 : ostr << " samples=\"128\" \n";   break;
-                       case 2 : ostr << " samples=\"256\" \n";   break;
-                       case 3 : ostr << " samples=\"512\" \n";   break;
-                       case 4 : ostr << " samples=\"1024\" \n";  break;
-                       case 5 : ostr << " samples=\"2048\" \n";  break;
-                       default: ostr << " samples=\"512\" \n";
-               }
-               ostr << " cache=\"on\" use_QMC=\"on\" threshold=\"" << re->r.GIrefinement << "\"" << endl;
-               ostr << "\tignore_bumpnormals=\"" << (re->r.YF_nobump ? "on" : "off") << "\"\n";
-               float sbase = 2.0/float(re->winx);
-               ostr << "\tcache_size=\"" << sbase*re->r.GIpixelspersample << "\" shadow_threshold=\"" <<
-                       1.0-re->r.GIshadowquality << "\" grid=\"82\" search=\"35\" >\n";
-       }
-       else
-       {
-               switch (re->r.GIquality)
-               {
-                       case 1 : ostr << " samples=\"16\" >\n";   break;
-                       case 2 : ostr << " samples=\"36\" >\n";   break;
-                       case 3 : ostr << " samples=\"64\" >\n";   break;
-                       case 4 : ostr << " samples=\"128\" >\n";  break;
-                       case 5 : ostr << " samples=\"256\" >\n";  break;
-                       default: ostr << " samples=\"25\" >\n";
-               }
-       }
-       ostr << "</light>\n\n";
-       xmlfile << ostr.str();
-}
-
-bool yafrayFileRender_t::writeWorld()
-{
-       World *world = re->scene->world;
-       if (re->r.GIquality!=0) {
-               if (re->r.GImethod==1) {
-                       if (world==NULL) cout << "WARNING: need world background for skydome!\n";
-                       writeHemilight();
-               }
-               else if (re->r.GImethod==2) writePathlight();
-       }
-
-       if (world==NULL) return false;
-
-       for (int i=0;i<MAX_MTEX;i++) {
-               MTex* wtex = world->mtex[i];
-               if (!wtex) continue;
-               Image* wimg = wtex->tex->ima;
-               // now always exports if image used as world texture (and 'Hori' mapping enabled)
-               if ((wtex->tex->type==TEX_IMAGE) && (wimg!=NULL) && (wtex->mapto & WOMAP_HORIZ)) {
-                       string wt_path = wimg->name;
-                       adjustPath(wt_path);
-                       ostr.str("");
-                       ostr << "<background type=\"image\" name=\"world_background\" ";
-                       // exposure_adjust not restricted to integer range anymore
-                       ostr << "exposure_adjust=\"" << wtex->tex->bright-1.f << "\"";
-                       if (wtex->texco & TEXCO_ANGMAP)
-                               ostr << " mapping=\"probe\" >\n";
-                       else if (wtex->texco & TEXCO_H_SPHEREMAP)       // in yafray full sphere
-                               ostr << " mapping=\"sphere\" >\n";
-                       else    // assume 'tube' for anything else
-                               ostr << " mapping=\"tube\" >\n";
-                       ostr << "\t<filename value=\"" << wt_path << "\" />\n";
-                       ostr << "\t<interpolate value=\"" << ((wtex->tex->imaflag & TEX_INTERPOL) ? "bilinear" : "none") << "\" />\n";
-                       if (wtex->tex->filtersize>1.f) ostr << "\t<prefilter value=\"on\" />\n";
-                       ostr << "</background>\n\n";
-                       xmlfile << ostr.str();
-                       return true;
-               }
-       }
-
-       ostr.str("");
-       ostr << "<background type=\"constant\" name=\"world_background\" >\n";
-       // if no GI used, the GIpower parameter is not always initialized, so in that case ignore it
-       // (have to change method to init yafray vars in Blender)
-       float bg_mult = (re->r.GImethod==0) ? 1 : re->r.GIpower;
-       ostr << "\t<color r=\"" << (world->horr * bg_mult) << 
-                                                               "\" g=\"" << (world->horg * bg_mult) << 
-                                                               "\" b=\"" << (world->horb * bg_mult) << "\" />\n";
-       ostr << "</background>\n\n";
-       xmlfile << ostr.str();
-
-       return true;
-}
-
-bool yafrayFileRender_t::executeYafray(const string &xmlpath)
-{
-       ostr.str("");
-       if (re->r.mode & R_BORDER) {
-               ostr << command_path << "yafray -c " << re->r.threads
-                    << " -r " << (2.f*re->r.border.xmin - 1.f)
-                    << ":"    << (2.f*re->r.border.xmax - 1.f)
-                    << ":"    << (2.f*re->r.border.ymin - 1.f)
-                    << ":"    << (2.f*re->r.border.ymax - 1.f)
-                    << " \"" << xmlpath << "\"";
-       }
-       else
-               ostr << command_path << "yafray -c " << re->r.threads << " \"" << xmlpath << "\"";
-       
-       string command = ostr.str();
-       cout << "COMMAND: " << command << endl;
-#ifndef WIN32
-       sigset_t yaf,old;
-       sigemptyset(&yaf);
-       sigaddset(&yaf, SIGVTALRM);
-       sigprocmask(SIG_BLOCK, &yaf, &old);
-       int ret=system(command.c_str());
-       sigprocmask(SIG_SETMASK, &old, NULL);
-       if (WIFEXITED(ret))
-       {
-               if (WEXITSTATUS(ret)) cout<<"Executed -"<<command<<"-"<<endl;
-               switch (WEXITSTATUS(ret))
-               {
-                       case 0: cout << "Yafray completed successfully\n";  return true;
-                       case 127: cout << "Yafray not found\n";  return false;
-                       case 126: cout << "Yafray: permission denied\n";  return false;
-                       default: cout << "Yafray exited with errors\n";  return false;
-               }
-       }
-       else if (WIFSIGNALED(ret))
-               cout << "Yafray crashed\n";
-       else
-               cout << "Unknown error\n";
-       return false;
-#else
-       int ret=system(command.c_str());
-       return ret==0;
-#endif
-       
-}
diff --git a/source/blender/yafray/intern/export_File.h b/source/blender/yafray/intern/export_File.h
deleted file mode 100644 (file)
index 0eb1bfe..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef __EXPORT_FILE_H
-#define __EXPORT_FILE_H
-
-#include"yafray_Render.h"
-
-class yafrayFileRender_t : public yafrayRender_t
-{
-       public:
-               virtual ~yafrayFileRender_t() {}
-       protected:
-               std::string imgout;
-               std::ofstream xmlfile;
-               std::string xmlpath;
-               std::ostringstream ostr;
-
-               void displayImage();
-               bool executeYafray(const std::string &xmlpath);
-               virtual void writeTextures();
-               virtual void writeShader(const std::string &shader_name, Material* matr, const std::string &facetexname="");
-               virtual void writeMaterialsAndModulators();
-               virtual void writeObject(Object* obj, ObjectRen *obr, const std::vector<VlakRen*> &VLR_list, const float obmat[4][4]);
-               virtual void writeAllObjects();
-               virtual void writeAreaLamp(LampRen* lamp, int num, float iview[4][4]);
-               virtual void writeLamps();
-               virtual void writeCamera();
-               virtual void writeHemilight();
-               virtual void writePathlight();
-               virtual bool writeWorld();
-               virtual bool writeRender();
-               virtual bool initExport();
-               virtual bool finishExport();
-};
-
-#endif
diff --git a/source/blender/yafray/intern/export_Plugin.cpp b/source/blender/yafray/intern/export_Plugin.cpp
deleted file mode 100644 (file)
index 9d537f1..0000000
+++ /dev/null
@@ -1,1990 +0,0 @@
-#include "export_Plugin.h"
-
-#include <math.h>
-
-#include <cstring>
-
-using namespace std;
-
-
-#ifdef WIN32 
-#define WIN32_SKIP_HKEY_PROTECTION
-#include "BLI_winstuff.h"
-
-#ifndef FILE_MAXDIR
-#define FILE_MAXDIR  160
-#endif
-
-#ifndef FILE_MAXFILE
-#define FILE_MAXFILE 80
-#endif
-
-
-static string find_path()
-{
-       HKEY    hkey;
-       DWORD dwType, dwSize;
-
-       if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\YafRay Team\\YafRay",0,KEY_READ,&hkey)==ERROR_SUCCESS)
-       {
-               dwType = REG_EXPAND_SZ;
-               dwSize = MAX_PATH;
-               DWORD dwStat;
-
-               char *pInstallDir=new char[MAX_PATH];
-
-               dwStat=RegQueryValueEx(hkey, TEXT("InstallDir"), 
-                       NULL, NULL,(LPBYTE)pInstallDir, &dwSize);
-               
-               if (dwStat == NO_ERROR)
-               {
-                       string res=pInstallDir;
-                       delete [] pInstallDir;
-                       return res;
-               }
-               else
-                       cout << "Couldn't READ \'InstallDir\' value. Is yafray correctly installed?\n";
-               delete [] pInstallDir;
-
-               RegCloseKey(hkey);
-       }       
-       else
-               cout << "Couldn't FIND registry key for yafray, is it installed?\n";
-
-       return string("");
-
-}
-
-static int createDir(char* name)
-{
-       if (BLI_exists(name))
-               return 2;       //exists
-       if (CreateDirectory((LPCTSTR)(name), NULL)) {
-               cout << "Directory: " << name << " created\n";
-               return 1;       // created
-       }
-       else    {
-               cout << "Could not create directory: " << name << endl;
-               return 0;       // fail
-       }
-}
-
-extern "C" { extern char bprogname[]; }
-
-// add drive character if not in path string, using blender executable location as reference
-static void addDrive(string &path)
-{
-       size_t sp = path.find_first_of(":");
-       if (sp==-1) {
-               string blpath = bprogname;
-               sp = blpath.find_first_of(":");
-               if (sp!=-1) path = blpath.substr(0, sp+1) + path;
-       }
-}
-
-#else
-
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <signal.h>
-#include <stdlib.h>
-#include <unistd.h>
-#endif
-
-static string YafrayPath()
-{
-#ifdef WIN32
-       string path=find_path();
-       return path;
-#else
-       static const char *alternative[]=
-       {
-               "/usr/local/lib/",
-#ifdef __x86_64__
-               "/usr/lib64/",
-#endif
-               "/usr/lib/",
-               NULL
-       };
-
-       for(int i=0;alternative[i]!=NULL;++i)
-       {
-               string fp = string(alternative[i]) + "libyafrayplugin.so";
-               struct stat st;
-               if (stat(fp.c_str(), &st)<0) continue;
-               if (st.st_mode & S_IROTH) return fp;
-       }
-       return "";
-#endif
-}
-
-static string YafrayPluginPath()
-{
-#ifdef WIN32
-       return find_path()+"\\plugins";
-#else
-       static const char *alternative[]=
-       {
-               "/usr/local/lib/yafray",
-#ifdef __x86_64__
-               "/usr/lib64/yafray",
-#endif
-               "/usr/lib/yafray",
-               NULL
-       };
-
-       for(int i=0;alternative[i]!=NULL;++i)
-       {
-               struct stat st;
-               if (stat(alternative[i], &st)<0) continue;
-               if (S_ISDIR(st.st_mode) && (st.st_mode & S_IXOTH)) return alternative[i];
-       }
-       return "";
-#endif
-}
-
-
-
-yafrayPluginRender_t::~yafrayPluginRender_t()
-{
-       if (yafrayGate!=NULL) delete yafrayGate;
-       if (handle!=NULL) PIL_dynlib_close(handle);
-#ifdef WIN32
-       if (corehandle!=NULL) PIL_dynlib_close(corehandle);
-#endif
-}
-
-bool yafrayPluginRender_t::initExport()
-{
-       // bug #1897: when forcing render without yafray present, handle can be valid,
-       // but find_symbol might have failed, trying second time will crash.
-       // So make sure plugin loaded correctly and only get handle once.
-       if ((!plugin_loaded) || (handle==NULL))
-       {
-               string location = YafrayPath();
-#ifdef WIN32
-               /* Win 32 loader cannot find needed libs in yafray dir, so we have to load them
-                * by hand. This could be fixed using setdlldirectory function, but it is not
-                * available in all win32 versions
-                */
-               corehandle = PIL_dynlib_open((char *)(location + "\\yafraycore.dll").c_str());
-               if (corehandle==NULL)
-               {
-                       char *err = PIL_dynlib_get_error_as_string(corehandle);
-                       if (err) cerr << "Error loading yafray plugin: " << err << endl;
-                       else cerr << "Error loading yafray plugin: Unknown." << endl;
-                       return false;
-               }
-               location += "\\yafrayplugin.dll";
-#endif
-
-               if (handle==NULL) {
-                       handle = PIL_dynlib_open((char *)location.c_str());
-                       if (handle==NULL)
-                       {
-                               cerr << "Error loading yafray plugin: " << PIL_dynlib_get_error_as_string(handle) << endl;
-                               return false;
-                       }
-               }
-               yafray::yafrayConstructor *constructor;
-               constructor = (yafray::yafrayConstructor *)PIL_dynlib_find_symbol(handle, (char*)YAFRAY_SYMBOL);
-               if (constructor==NULL)
-               {
-                       cerr << "Error loading yafray plugin: " << PIL_dynlib_get_error_as_string(handle) << endl;
-                       return false;
-               }
-               yafrayGate = constructor(re->r.threads, YafrayPluginPath());
-               
-               cout << "YafRay plugin loaded" << endl;
-               plugin_loaded = true;
-       }
-       
-       return true;
-}
-
-bool yafrayPluginRender_t::writeRender()
-{
-       yafray::paramMap_t params;
-       params["camera_name"]=yafray::parameter_t("MAINCAM");
-       params["raydepth"]=yafray::parameter_t((float)re->r.YF_raydepth);
-       params["gamma"]=yafray::parameter_t(re->r.YF_gamma);
-       params["exposure"]=yafray::parameter_t(re->r.YF_exposure);
-       if (re->r.YF_AA)
-       {
-               params["AA_passes"] = yafray::parameter_t((int)re->r.YF_AApasses);
-               params["AA_minsamples"] = yafray::parameter_t(re->r.YF_AAsamples);
-               params["AA_pixelwidth"] = yafray::parameter_t(re->r.YF_AApixelsize);
-               params["AA_threshold"] = yafray::parameter_t(re->r.YF_AAthreshold);
-       }
-       else
-       {
-               // removed the default AA settings for midquality GI, better leave it to user
-               if ((re->r.mode & R_OSA) && (re->r.osa)) 
-               {
-                       params["AA_passes"] = yafray::parameter_t((re->r.osa & 3)==0 ? (re->r.osa >> 2) : 1);
-                       params["AA_minsamples"] = yafray::parameter_t((re->r.osa & 3)==0 ? 4 : re->r.osa);
-               }
-               else 
-               {
-                       params["AA_passes"] = yafray::parameter_t(0);
-                       params["AA_minsamples"] = yafray::parameter_t(1);
-               }
-               params["AA_pixelwidth"] = yafray::parameter_t(1.5);
-               params["AA_threshold"] = yafray::parameter_t(0.05f);
-       }
-       if (re->r.mode & R_BORDER)
-       {
-               params["border_xmin"] = yafray::parameter_t(2.f*re->r.border.xmin - 1.f);
-               params["border_xmax"] = yafray::parameter_t(2.f*re->r.border.xmax - 1.f);
-               params["border_ymin"] = yafray::parameter_t(2.f*re->r.border.ymin - 1.f);
-               params["border_ymax"] = yafray::parameter_t(2.f*re->r.border.ymax - 1.f);
-       }
-       if (hasworld) {
-               World *world = re->scene->world;
-               if (world->mode & WO_MIST) {
-                       // basic fog
-                       float fd = world->mistdist;
-                       if (fd>0) fd=1.f/fd; else fd=1;
-                       params["fog_density"] = yafray::parameter_t(fd);
-                       params["fog_color"] = yafray::parameter_t(yafray::color_t(world->horr, world->horg, world->horb));
-               }
-               params["background_name"] = yafray::parameter_t("world_background");
-       }
-       params["bias"] = yafray::parameter_t(re->r.YF_raybias);
-       params["clamp_rgb"] = yafray::parameter_t((re->r.YF_clamprgb==0) ? "on" : "off");
-       // lynx request
-       params["threads"] = yafray::parameter_t((int)re->r.threads);
-       blenderYafrayOutput_t output(re);
-       yafrayGate->render(params, output);
-       cout << "render finished" << endl;
-       yafrayGate->clear();
-       return true;
-}
-
-bool yafrayPluginRender_t::finishExport()
-{
-       return true;
-}
-
-
-// displayImage() not for plugin, see putPixel() below
-
-#ifdef WIN32
-#define MAXPATHLEN MAX_PATH
-#else
-#include <sys/param.h>
-#endif
-static void adjustPath(string &path)
-{
-       // if relative, expand to full path
-       char cpath[MAXPATHLEN];
-       strcpy(cpath, path.c_str());
-       BLI_convertstringcode(cpath, G.sce);
-       path = cpath;
-#ifdef WIN32
-       // add drive char if not there
-       addDrive(path);
-#endif
-}
-
-
-static string noise2string(short nbtype)
-{
-       switch (nbtype) {
-               case TEX_BLENDER:
-                       return "blender";
-               case TEX_STDPERLIN:
-                       return "stdperlin";
-               case TEX_VORONOI_F1:
-                       return "voronoi_f1";
-               case TEX_VORONOI_F2:
-                       return "voronoi_f2";
-               case TEX_VORONOI_F3:
-                       return "voronoi_f3";
-               case TEX_VORONOI_F4:
-                       return "voronoi_f4";
-               case TEX_VORONOI_F2F1:
-                       return "voronoi_f2f1";
-               case TEX_VORONOI_CRACKLE:
-                       return "voronoi_crackle";
-               case TEX_CELLNOISE:
-                       return "cellnoise";
-               default:
-               case TEX_NEWPERLIN:
-                       return "newperlin";
-       }
-}
-
-void yafrayPluginRender_t::writeTextures()
-{
-       // used to keep track of images already written
-       // (to avoid duplicates if also in imagetex for material TexFace texture)
-       set<Image*> dupimg;
-
-       yafray::paramMap_t params;
-       list<yafray::paramMap_t> lparams;
-       for (map<string, MTex*>::const_iterator blendtex=used_textures.begin();
-                                               blendtex!=used_textures.end();++blendtex) 
-       {
-               lparams.clear();
-               params.clear();
-               
-               MTex* mtex = blendtex->second;
-               Tex* tex = mtex->tex;
-               // name is image name instead of texture name when type is image (see TEX_IMAGE case below)
-               // (done because of possible combinations of 'TexFace' images and regular image textures, to avoid duplicates)
-               if (tex->type!=TEX_IMAGE) params["name"] = yafray::parameter_t(blendtex->first);
-
-               float nsz = tex->noisesize;
-               if (nsz!=0.f) nsz=1.f/nsz;
-
-               // noisebasis type
-               string ntype = noise2string(tex->noisebasis);
-               string ts, hardnoise=(tex->noisetype==TEX_NOISESOFT) ? "off" : "on";
-
-               switch (tex->type) {
-                       case TEX_STUCCI:
-                               // stucci is clouds as bump, only difference is an extra parameter to handle wall in/out
-                               // turbulence value is not used, so for large values will not match well
-                       case TEX_CLOUDS: {
-                               params["type"] = yafray::parameter_t("clouds");
-                               params["size"] = yafray::parameter_t(nsz);
-                               params["hard"] = yafray::parameter_t(hardnoise);
-                               if (tex->type==TEX_STUCCI) {
-                                       if (tex->stype==1)
-                                               ts = "positive";
-                                       else if (tex->stype==2)
-                                               ts = "negative";
-                                       else ts = "none";
-                                       params["bias"] = yafray::parameter_t(ts);
-                                       params["depth"] = yafray::parameter_t(0);       // for stucci always 0
-                               }
-                               else params["depth"] = yafray::parameter_t(tex->noisedepth);
-                               params["color_type"] = yafray::parameter_t(tex->stype);
-                               params["noise_type"] = yafray::parameter_t(ntype);
-                               break;
-                       }
-                       case TEX_WOOD:
-                       {
-                               params["type"] = yafray::parameter_t("wood");
-                               // blender does not use depth value for wood, always 0
-                               params["depth"] = yafray::parameter_t(0);
-                               float turb = (tex->stype<2) ? 0.0 : tex->turbul;
-                               params["turbulence"] = yafray::parameter_t(turb);
-                               params["size"] = yafray::parameter_t(nsz);
-                               params["hard"] = yafray::parameter_t(hardnoise);
-                               ts = (tex->stype & 1) ? "rings" : "bands";      //stype 1&3 ringtype
-                               params["wood_type"] = yafray::parameter_t(ts);
-                               params["noise_type"] = yafray::parameter_t(ntype);
-                               // shape parameter, for some reason noisebasis2 is used...
-                               ts = "sin";
-                               if (tex->noisebasis2==1) ts="saw"; else if (tex->noisebasis2==2) ts="tri";
-                               params["shape"] = yafray::parameter_t(ts);
-                               break;
-                       }
-                       case TEX_MARBLE: 
-                       {
-                               params["type"] = yafray::parameter_t("marble");
-                               params["depth"] = yafray::parameter_t(tex->noisedepth);
-                               params["turbulence"] = yafray::parameter_t(tex->turbul);
-                               params["size"] = yafray::parameter_t(nsz);
-                               params["hard"] = yafray::parameter_t(hardnoise);
-                               params["sharpness"] = yafray::parameter_t((float)(1<<tex->stype));
-                               params["noise_type"] = yafray::parameter_t(ntype);
-                               ts = "sin";
-                               if (tex->noisebasis2==1) ts="saw"; else if (tex->noisebasis2==2) ts="tri";
-                               params["shape"] = yafray::parameter_t(ts);
-                               break;
-                       }
-                       case TEX_VORONOI:
-                       {
-                               params["type"] = yafray::parameter_t("voronoi");
-                               ts = "int";
-                               if (tex->vn_coltype==1)
-                                       ts = "col1";
-                               else if (tex->vn_coltype==2)
-                                       ts = "col2";
-                               else if (tex->vn_coltype==3)
-                                       ts = "col3";
-                               params["color_type"] = yafray::parameter_t(ts);
-                               params["weight1"] = yafray::parameter_t(tex->vn_w1);
-                               params["weight2"] = yafray::parameter_t(tex->vn_w2);
-                               params["weight3"] = yafray::parameter_t(tex->vn_w3);
-                               params["weight4"] = yafray::parameter_t(tex->vn_w4);
-                               params["mk_exponent"] = yafray::parameter_t(tex->vn_mexp);
-                               params["intensity"] = yafray::parameter_t(tex->ns_outscale);
-                               params["size"] = yafray::parameter_t(nsz);
-                               ts = "actual";
-                               if (tex->vn_distm==TEX_DISTANCE_SQUARED)
-                                       ts = "squared";
-                               else if (tex->vn_distm==TEX_MANHATTAN)
-                                       ts = "manhattan";
-                               else if (tex->vn_distm==TEX_CHEBYCHEV)
-                                       ts = "chebychev";
-                               else if (tex->vn_distm==TEX_MINKOVSKY_HALF)
-                                       ts = "minkovsky_half";
-                               else if (tex->vn_distm==TEX_MINKOVSKY_FOUR)
-                                       ts = "minkovsky_four";
-                               else if (tex->vn_distm==TEX_MINKOVSKY)
-                                       ts = "minkovsky";
-                               params["distance_metric"] = yafray::parameter_t(ts);
-                               break;
-                       }
-                       case TEX_MUSGRAVE:
-                       {
-                               params["type"] = yafray::parameter_t("musgrave");
-                               switch (tex->stype) {
-                                       case TEX_MFRACTAL:
-                                               ts = "multifractal";
-                                               break;
-                                       case TEX_RIDGEDMF:
-                                               ts = "ridgedmf";
-                                               break;
-                                       case TEX_HYBRIDMF:
-                                               ts = "hybridmf";
-                                               break;
-                                       case TEX_HTERRAIN:
-                                               ts = "heteroterrain";
-                                               break;
-                                       default:
-                                       case TEX_FBM:
-                                               ts = "fBm";
-                               }
-                               params["musgrave_type"] = yafray::parameter_t(ts);
-                               params["noise_type"] = yafray::parameter_t(ntype);
-                               params["H"] = yafray::parameter_t(tex->mg_H);
-                               params["lacunarity"] = yafray::parameter_t(tex->mg_lacunarity);
-                               params["octaves"] = yafray::parameter_t(tex->mg_octaves);
-                               if ((tex->stype==TEX_HTERRAIN) || (tex->stype==TEX_RIDGEDMF) || (tex->stype==TEX_HYBRIDMF)) {
-                                       params["offset"] = yafray::parameter_t(tex->mg_offset);
-                                       if ((tex->stype==TEX_RIDGEDMF) || (tex->stype==TEX_HYBRIDMF))
-                                               params["gain"] = yafray::parameter_t(tex->mg_gain);
-                               }
-                               params["size"] = yafray::parameter_t(nsz);
-                               params["intensity"] = yafray::parameter_t(tex->ns_outscale);
-                               break;
-                       }
-                       case TEX_DISTNOISE:
-                       {
-                               params["type"] = yafray::parameter_t("distorted_noise");
-                               params["distort"] = yafray::parameter_t(tex->dist_amount);
-                               params["size"] = yafray::parameter_t(nsz);
-                               params["noise_type1"] = yafray::parameter_t(ntype);
-                               params["noise_type2"] = yafray::parameter_t(noise2string(tex->noisebasis2));
-                               break;
-                       }
-                       case TEX_BLEND:
-                       {
-                               params["type"] = yafray::parameter_t("gradient");
-                               switch (tex->stype) {
-                                       case 1:  ts="quadratic"; break;
-                                       case 2:  ts="cubic";     break;
-                                       case 3:  ts="diagonal";  break;
-                                       case 4:  ts="sphere";    break;
-                                       case 5:  ts="halo";      break;
-                                       default:
-                                       case 0:  ts="linear";    break;
-                               }
-                               params["gradient_type"] = yafray::parameter_t(ts);
-                               if (tex->flag & TEX_FLIPBLEND) ts="on"; else ts="off";
-                               params["flip_xy"] = yafray::parameter_t(ts);
-                               break;
-                       }
-                       case TEX_NOISE:
-                       {
-                               params["type"] = yafray::parameter_t("random_noise");
-                               params["depth"] = yafray::parameter_t(tex->noisedepth);
-                               break;
-                       }
-                       case TEX_IMAGE: 
-                       {
-                               Image* ima = tex->ima;
-                               if (ima) {
-                                       // remember image to avoid duplicates later if also in imagetex
-                                       // (formerly done by removing from imagetex, but need image/material link)
-                                       dupimg.insert(ima);
-                                       params["type"] = yafray::parameter_t("image");
-                                       params["name"] = yafray::parameter_t(ima->id.name);
-                                       string texpath = ima->name;
-                                       adjustPath(texpath);
-                                       params["filename"] = yafray::parameter_t(texpath);
-                                       params["interpolate"] = yafray::parameter_t((tex->imaflag & TEX_INTERPOL) ? "bilinear" : "none");
-                               }
-                               break;
-                       }
-                       default:
-                               cout << "Unsupported texture type\n";
-               }
-               yafrayGate->addShader(params, lparams);
-
-               // colorbands
-               if (tex->flag & TEX_COLORBAND) 
-               {
-                       ColorBand* cb = tex->coba;
-                       if (cb) 
-                       {
-                               lparams.clear();
-                               params.clear();
-                               params["type"] = yafray::parameter_t("colorband");
-                               params["name"] = yafray::parameter_t(blendtex->first + "_coba");
-                               params["input"] = yafray::parameter_t(blendtex->first);
-                               for (int i=0;i<cb->tot;i++) 
-                               {
-                                       yafray::paramMap_t mparams;
-                                       mparams["value"] = yafray::parameter_t(cb->data[i].pos);
-                                       mparams["color"] = yafray::parameter_t(yafray::colorA_t(cb->data[i].r,
-                                                                                                                                                                                                                                                               cb->data[i].g,
-                                                                                                                                                                                                                                                               cb->data[i].b,
-                                                                                                                                                                                                                                                               cb->data[i].a));
-                                       lparams.push_back(mparams);
-                               }
-                               yafrayGate->addShader(params, lparams);
-                       }
-               }
-
-       }
-
-       // If used, textures for the material 'TexFace' case
-       if (!imagetex.empty()) {
-               for (map<Image*, set<Material*> >::const_iterator imgtex=imagetex.begin();
-                                       imgtex!=imagetex.end();++imgtex)
-               {
-                       // skip if already written above
-                       if (dupimg.find(imgtex->first)==dupimg.end()) {
-                               lparams.clear();
-                               params.clear();
-                               params["name"] = yafray::parameter_t(imgtex->first->id.name);
-                               params["type"] = yafray::parameter_t("image");
-                               string texpath(imgtex->first->name);
-                               adjustPath(texpath);
-                               params["filename"] = yafray::parameter_t(texpath);
-                               yafrayGate->addShader(params, lparams);
-                       }
-               }
-       }
-
-}
-
-
-void yafrayPluginRender_t::writeShader(const string &shader_name, Material* matr, const string &facetexname)
-{
-       yafray::paramMap_t params;
-       list<yafray::paramMap_t> lparams;
-
-       // if material has ramps, export colorbands first
-       if (matr->mode & (MA_RAMP_COL|MA_RAMP_SPEC))
-       {
-               // both colorbands without input shader
-               ColorBand* cb = matr->ramp_col;
-               if ((matr->mode & MA_RAMP_COL) && (cb!=NULL))
-               {
-                       params["type"] = yafray::parameter_t("colorband");
-                       params["name"] = yafray::parameter_t(shader_name+"_difframp");
-                       for (int i=0;i<cb->tot;i++) {
-                               yafray::paramMap_t mparams;
-                               mparams["value"] = yafray::parameter_t(cb->data[i].pos);
-                               mparams["color"] = yafray::parameter_t(yafray::colorA_t(cb->data[i].r, cb->data[i].g, cb->data[i].b, cb->data[i].a));
-                               lparams.push_back(mparams);
-                       }
-                       yafrayGate->addShader(params, lparams);
-               }
-               cb = matr->ramp_spec;
-               if ((matr->mode & MA_RAMP_SPEC) && (cb!=NULL))
-               {
-                       lparams.clear();
-                       params.clear();
-                       params["type"] = yafray::parameter_t("colorband");
-                       params["name"] = yafray::parameter_t(shader_name+"_specramp");
-                       for (int i=0;i<cb->tot;i++) {
-                               yafray::paramMap_t mparams;
-                               mparams["value"] = yafray::parameter_t(cb->data[i].pos);
-                               mparams["color"] = yafray::parameter_t(yafray::colorA_t(cb->data[i].r, cb->data[i].g, cb->data[i].b, cb->data[i].a));
-                               lparams.push_back(mparams);
-                       }
-                       yafrayGate->addShader(params, lparams);
-               }
-               lparams.clear();
-               params.clear();
-       }
-
-       params["type"] = yafray::parameter_t("blendershader");
-       params["name"] = yafray::parameter_t(shader_name);
-       params["color"] = yafray::parameter_t(yafray::color_t(matr->r, matr->g, matr->b));
-       float sr=matr->specr, sg=matr->specg, sb=matr->specb;
-       if (matr->spec_shader==MA_SPEC_WARDISO) {
-               // ........
-               sr /= M_PI;
-               sg /= M_PI;
-               sb /= M_PI;
-       }
-       params["specular_color"] = yafray::parameter_t(yafray::color_t(sr, sg, sb));
-       params["mirror_color"] = yafray::parameter_t(yafray::color_t(matr->mirr, matr->mirg, matr->mirb));
-       params["diffuse_reflect"] = yafray::parameter_t(matr->ref);
-       params["specular_amount"] = yafray::parameter_t(matr->spec);
-       params["alpha"] = yafray::parameter_t(matr->alpha);
-       
-       // if no GI used, the GIpower parameter is not always initialized, so in that case ignore it
-       float bg_mult = (re->r.GImethod==0) ? 1 : re->r.GIpower;
-       params["emit"]=yafray::parameter_t(matr->emit*bg_mult);
-
-       // reflection/refraction
-       if ( (matr->mode & MA_RAYMIRROR) || (matr->mode & MA_RAYTRANSP) )
-               params["IOR"] = yafray::parameter_t(matr->ang);
-
-       if (matr->mode & MA_RAYMIRROR)
-       {
-               // Sofar yafray's min_refle parameter (which misleadingly actually controls fresnel reflection offset)
-               // has been mapped to Blender's ray_mirror parameter.
-               // This causes it be be misinterpreted and misused as a reflection amount control however.
-               // Besides that, it also causes extra complications for the yafray Blendershader.
-               // So added an actual amount of reflection parameter instead, and another
-               // extra parameter 'frsOfs' to actually control fresnel offset (re-uses Blender fresnel_mir_i param).
-               params["reflect"] = yafray::parameter_t("on");
-               params["reflect_amount"] = yafray::parameter_t(matr->ray_mirror);
-               float fo = 1.f-(matr->fresnel_mir_i-1.f)*0.25f; // blender param range [1,5], also here reversed (1 in Blender -> no fresnel)
-               params["fresnel_offset"] = yafray::parameter_t(fo);
-
-               // for backward compatibility, also add old 'reflected' parameter, copy of mirror_color
-               params["reflected"] = yafray::parameter_t(yafray::color_t(matr->mirr, matr->mirg, matr->mirb));
-               // same for 'min_refle' param. Instead of the ray_mirror parameter that was used before, since now
-               // the parameter's function is taken over by the fresnel offset parameter, use that instead.
-               params["min_refle"] = yafray::parameter_t(fo);
-
-       }
-
-       if (matr->mode & MA_RAYTRANSP) 
-       {
-               params["refract"] = yafray::parameter_t("on");
-               params["transmit_filter"] = yafray::parameter_t(matr->filter);
-               // tir on by default
-               params["tir"] = yafray::parameter_t("on");
-
-               // transmit absorption color
-               // to make things easier(?) for user it now specifies the actual color at 1 unit / YF_dscale of distance
-               const float maxlog = -log(1e-38);
-               float ar = (matr->YF_ar>0) ? -log(matr->YF_ar) : maxlog;
-               float ag = (matr->YF_ag>0) ? -log(matr->YF_ag) : maxlog;
-               float ab = (matr->YF_ab>0) ? -log(matr->YF_ab) : maxlog;
-               float sc = matr->YF_dscale;
-               if (sc!=0.f) sc=1.f/sc;
-               params["absorption"] = yafray::parameter_t(yafray::color_t(ar*sc, ag*sc, ab*sc));
-               // dispersion
-               params["dispersion_power"] = yafray::parameter_t(matr->YF_dpwr);
-               params["dispersion_samples"] = yafray::parameter_t(matr->YF_dsmp);
-               params["dispersion_jitter"] = yafray::parameter_t(matr->YF_djit ? "on" : "off");
-
-               // for backward compatibility, also add old 'transmitted' parameter, copy of 'color' * (1-alpha)
-               float na = 1.f-matr->alpha;
-               params["transmitted"] = yafray::parameter_t(yafray::color_t(matr->r*na, matr->g*na, matr->b*na));
-       }
-
-       string Mmode = "";
-       if (matr->mode & MA_TRACEBLE) Mmode += "traceable";
-       if (matr->mode & MA_SHADOW) Mmode += " shadow";
-       if (matr->mode & MA_SHLESS) Mmode += " shadeless";
-       if (matr->mode & MA_VERTEXCOL) Mmode += " vcol_light";
-       if (matr->mode & MA_VERTEXCOLP) Mmode += " vcol_paint";
-       if (matr->mode & MA_ZTRA) Mmode += " ztransp";
-       if (matr->mode & MA_ONLYSHADOW) Mmode += " onlyshadow";
-       if (Mmode!="") params["matmodes"] = yafray::parameter_t(Mmode);
-
-       // diffuse & specular brdf, lambert/cooktorr defaults
-       // diffuse
-       if (matr->diff_shader==MA_DIFF_ORENNAYAR) {
-               params["diffuse_brdf"] = yafray::parameter_t("oren_nayar");
-               params["roughness"] = yafray::parameter_t(matr->roughness);
-       }
-       else if (matr->diff_shader==MA_DIFF_TOON) {
-               params["diffuse_brdf"] = yafray::parameter_t("toon");
-               params["toondiffuse_size"] = yafray::parameter_t(matr->param[0]);
-               params["toondiffuse_smooth"] = yafray::parameter_t(matr->param[1]);
-       }
-       else if (matr->diff_shader==MA_DIFF_MINNAERT) {
-               params["diffuse_brdf"] = yafray::parameter_t("minnaert");
-               params["darkening"] = yafray::parameter_t(matr->darkness);
-       }
-       else params["diffuse_brdf"] = yafray::parameter_t("lambert");
-       // specular
-       if (matr->spec_shader==MA_SPEC_PHONG) {
-               params["specular_brdf"] = yafray::parameter_t("phong");
-               params["hard"] = yafray::parameter_t(matr->har);
-       }
-       else if (matr->spec_shader==MA_SPEC_BLINN) {
-               params["specular_brdf"] = yafray::parameter_t("blinn");
-               params["blinn_ior"] = yafray::parameter_t(matr->refrac);
-               params["hard"] = yafray::parameter_t(matr->har);
-       }
-       else if (matr->spec_shader==MA_SPEC_TOON) {
-               params["specular_brdf"] = yafray::parameter_t("toon");
-               params["toonspecular_size"] = yafray::parameter_t(matr->param[2]);
-               params["toonspecular_smooth"] = yafray::parameter_t(matr->param[3]);
-       }
-       else if (matr->spec_shader==MA_SPEC_WARDISO) {
-               params["specular_brdf"] = yafray::parameter_t("ward");
-               params["u_roughness"] = yafray::parameter_t(matr->rms);
-               params["v_roughness"] = yafray::parameter_t(matr->rms);
-       }
-       else {
-               params["specular_brdf"] = yafray::parameter_t("blender_cooktorr");
-               params["hard"] = yafray::parameter_t(matr->har);
-       }
-
-       // ramps, if used
-       if (matr->mode & (MA_RAMP_COL|MA_RAMP_SPEC))
-       {
-               const string rm_blend[9] = {"mix", "add", "mul", "sub", "screen", "divide", "difference", "darken", "lighten"};
-               const string rm_mode[4] = {"shader", "energy", "normal", "result"};
-               // diffuse
-               if ((matr->mode & MA_RAMP_COL) && (matr->ramp_col!=NULL))
-               {
-                       params["diffuse_ramp"] = yafray::parameter_t(shader_name+"_difframp");
-                       params["diffuse_ramp_mode"] = yafray::parameter_t(rm_mode[(int)matr->rampin_col]);
-                       params["diffuse_ramp_blend"] = yafray::parameter_t(rm_blend[(int)matr->rampblend_col]);
-                       params["diffuse_ramp_factor"] = yafray::parameter_t(matr->rampfac_col);
-               }
-               // specular
-               if ((matr->mode & MA_RAMP_SPEC) && (matr->ramp_spec!=NULL)) {
-                       params["specular_ramp"] = yafray::parameter_t(shader_name+"_specramp");
-                       params["specular_ramp_mode"] = yafray::parameter_t(rm_mode[(int)matr->rampin_spec]);
-                       params["specular_ramp_blend"] = yafray::parameter_t(rm_blend[(int)matr->rampblend_spec]);
-                       params["specular_ramp_factor"] = yafray::parameter_t(matr->rampfac_spec);
-               }
-       }
-
-       // modulators
-       // first modulator is the texture of the face, if used (TexFace mode)
-       if (facetexname.length()!=0) {
-                       yafray::paramMap_t mparams;
-                       mparams["input"] = yafray::parameter_t(facetexname);
-                       mparams["color"] = yafray::parameter_t(1);
-                       lparams.push_back(mparams);
-       }
-       
-       for (int m2=0;m2<MAX_MTEX;m2++)
-       {
-               if (matr->septex & (1<<m2)) continue;// all active channels
-               // ignore null mtex
-               MTex* mtex = matr->mtex[m2];
-               if (mtex==NULL) continue;
-               // ignore null tex
-               Tex* tex = mtex->tex;
-               if (tex==NULL) continue;
-
-               map<string, MTex*>::const_iterator mtexL = used_textures.find(string(tex->id.name));
-               if (mtexL!=used_textures.end()) 
-               {
-                       yafray::paramMap_t mparams;
-                       // when no facetex used, shader_name is created from original material name
-                       char temp[32];
-                       sprintf(temp,"_map%d", m2);
-                       if (facetexname.length()!=0)
-                               mparams["input"] = yafray::parameter_t(string(matr->id.name) + string(temp));
-                       else
-                               mparams["input"] = yafray::parameter_t(shader_name + temp);
-
-                       // blendtype, would have been nice if the order would have been the same as for ramps...
-                       const string blendtype[MTEX_NUM_BLENDTYPES] = {"mix", "mul", "add", "sub", "divide", "darken", "difference", "lighten", "screen", "hue", "sat", "val", "color"};
-                       mparams["mode"] = yafray::parameter_t(blendtype[(int)mtex->blendtype]);
-
-                       // texture color (for use with MUL and/or no_rgb etc..)
-                       mparams["texcol"]=yafray::parameter_t(yafray::color_t(mtex->r,mtex->g,mtex->b));
-                       // texture contrast, brightness & color adjustment
-                       mparams["filtercolor"]=yafray::parameter_t(yafray::color_t(tex->rfac,tex->gfac,tex->bfac));
-                       mparams["contrast"]=yafray::parameter_t(tex->contrast);
-                       mparams["brightness"]=yafray::parameter_t(tex->bright);
-                       // all texture flags now are switches, having the value 1 or -1 (negative option)
-                       // the negative option only used for the intensity modulation options.
-
-                       // material (diffuse) color, amount controlled by colfac (see below)
-                       if (mtex->mapto & MAP_COL)
-                               mparams["color"]=yafray::parameter_t(1.0);
-                       // bumpmapping
-                       if ((mtex->mapto & MAP_NORM) || (mtex->maptoneg & MAP_NORM)) 
-                       {
-                               // for yafray, bump factor is negated (unless tex is stucci, not affected by 'Neg')
-                               // scaled down quite a bit
-                               float nf = mtex->norfac;
-                               if (tex->type!=TEX_STUCCI) nf *= -1.f;
-                               if (mtex->maptoneg & MAP_NORM) nf *= -1.f;
-                               mparams["normal"] = yafray::parameter_t(nf/60.f);
-                       }
-
-                       // all blender texture modulation as switches, either 1 or -1 (negative state of button)
-                       // Csp, specular color modulation
-                       if (mtex->mapto & MAP_COLSPEC)
-                               mparams["colspec"] = yafray::parameter_t(1.0);
-                       // CMir, mirror color  modulation
-                       if (mtex->mapto & MAP_COLMIR)
-                               mparams["colmir"] = yafray::parameter_t(1.0);
-
-                       // Ref, diffuse reflection amount  modulation
-                       if ((mtex->mapto & MAP_REF) || (mtex->maptoneg & MAP_REF)) 
-                       {
-                               int t = 1;
-                               if (mtex->maptoneg & MAP_REF) t = -1;
-                               mparams["difref"] = yafray::parameter_t(t);
-                       }
-
-                       // Spec, specular amount mod
-                       if ((mtex->mapto & MAP_SPEC) || (mtex->maptoneg & MAP_SPEC)) 
-                       {
-                               int t = 1;
-                               if (mtex->maptoneg & MAP_SPEC) t = -1;
-                               mparams["specular"] = yafray::parameter_t(t);
-                       }
-
-                       // hardness modulation
-                       if ((mtex->mapto & MAP_HAR) || (mtex->maptoneg & MAP_HAR)) 
-                       {
-                               int t = 1;
-                               if (mtex->maptoneg & MAP_HAR) t = -1;
-                               mparams["hard"] = yafray::parameter_t(t);
-                       }
-
-                       // alpha modulation
-                       if ((mtex->mapto & MAP_ALPHA) || (mtex->maptoneg & MAP_ALPHA)) 
-                       {
-                               int t = 1;
-                               if (mtex->maptoneg & MAP_ALPHA) t = -1;
-                               mparams["alpha"] = yafray::parameter_t(t);
-                       }
-
-                       // emit modulation
-                       if ((mtex->mapto & MAP_EMIT) || (mtex->maptoneg & MAP_EMIT)) {
-                               int t = 1;
-                               if (mtex->maptoneg & MAP_EMIT) t = -1;
-                               mparams["emit"] = yafray::parameter_t(t);
-                       }
-
-                       // raymir modulation
-                       if ((mtex->mapto & MAP_RAYMIRR) || (mtex->maptoneg & MAP_RAYMIRR)) {
-                               int t = 1;
-                               if (mtex->maptoneg & MAP_RAYMIRR) t = -1;
-                               mparams["raymir"] = yafray::parameter_t(t);
-                       }
-
-                       // texture flag, combination of strings
-                       string ts;
-                       if (mtex->texflag & (MTEX_RGBTOINT | MTEX_STENCIL | MTEX_NEGATIVE)) {
-                               ts = "";
-                               if (mtex->texflag & MTEX_RGBTOINT) ts += "no_rgb ";
-                               if (mtex->texflag & MTEX_STENCIL) ts += "stencil ";
-                               if (mtex->texflag & MTEX_NEGATIVE) ts += "negative";
-                               mparams["texflag"]=yafray::parameter_t(ts);
-                       }
-
-                       // colfac, controls amount of color modulation
-                       mparams["colfac"]=yafray::parameter_t(mtex->colfac);
-                       // def_var
-                       mparams["def_var"]=yafray::parameter_t(mtex->def_var);
-                       //varfac
-                       mparams["varfac"]=yafray::parameter_t(mtex->varfac);
-
-                       if ((tex->imaflag & (TEX_CALCALPHA | TEX_USEALPHA)) || (tex->flag & TEX_NEGALPHA)) 
-                       {
-                               ts = "";
-                               if (tex->imaflag & TEX_CALCALPHA) ts += "calc_alpha ";
-                               if (tex->imaflag & TEX_USEALPHA) ts += "use_alpha ";
-                               if (tex->flag & TEX_NEGALPHA) ts += "neg_alpha";
-                               mparams["alpha_flag"] = yafray::parameter_t(ts);
-                       }
-
-                       // image as normalmap flag
-                       if (tex->imaflag & TEX_NORMALMAP) mparams["normalmap"] = yafray::parameter_t("on");
-
-                       lparams.push_back(mparams);
-               }
-       }
-       yafrayGate->addShader(params, lparams);
-
-}
-
-// write all materials & modulators
-void yafrayPluginRender_t::writeMaterialsAndModulators()
-{
-       // shaders/mappers for regular texture (or non-texture) mode
-       // In case material has texface mode, and all faces have an image texture,
-       // this shader will not be used, but still be written
-       yafray::paramMap_t params;
-       list<yafray::paramMap_t> lparams;
-       for (map<string, Material*>::const_iterator blendmat=used_materials.begin();
-               blendmat!=used_materials.end();++blendmat) 
-       {
-               Material* matr = blendmat->second;
-               // mapper(s)
-               for (int m=0;m<MAX_MTEX;m++) 
-               {
-                       if (matr->septex & (1<<m)) continue;// all active channels
-                       // ignore null mtex
-                       MTex* mtex = matr->mtex[m];
-                       if (mtex==NULL) continue;
-                       // ignore null tex
-                       Tex* tex = mtex->tex;
-                       if (tex==NULL) continue;
-
-                       map<string, MTex*>::const_iterator mtexL = used_textures.find(string(tex->id.name));
-                       if (mtexL!=used_textures.end()) 
-                       {
-                               params.clear(); //!!!
-                               lparams.clear();
-                               char temp[32];
-                               sprintf(temp, "_map%d", m);
-                               params["type"] = yafray::parameter_t("blendermapper");
-                               params["name"] = yafray::parameter_t(blendmat->first + string(temp));
-                               if ((mtex->texco & TEXCO_OBJECT) || (mtex->texco & TEXCO_REFL) || (mtex->texco & TEXCO_NORM))
-                               {
-                                       // For object, reflection & normal mapping, add the object matrix to the modulator,
-                                       // as in LF script, use camera matrix if no object specified.
-                                       // In this case this means the inverse of that matrix
-                                       float texmat[4][4], itexmat[4][4];
-                                       if ((mtex->texco & TEXCO_OBJECT) && (mtex->object))
-                                               MTC_Mat4CpyMat4(texmat, mtex->object->obmat);
-                                       else    // also for refl. map
-                                               MTC_Mat4CpyMat4(texmat, maincam_obj->obmat);
-                                       MTC_Mat4Invert(itexmat, texmat);
-#define flp yafray::parameter_t
-                                       params["m00"]=flp(itexmat[0][0]);  params["m01"]=flp(itexmat[1][0]);
-                                       params["m02"]=flp(itexmat[2][0]);  params["m03"]=flp(itexmat[3][0]);
-                                       params["m10"]=flp(itexmat[0][1]);  params["m11"]=flp(itexmat[1][1]);
-                                       params["m12"]=flp(itexmat[2][1]);  params["m13"]=flp(itexmat[3][1]);
-                                       params["m20"]=flp(itexmat[0][2]);  params["m21"]=flp(itexmat[1][2]);
-                                       params["m22"]=flp(itexmat[2][2]);  params["m23"]=flp(itexmat[3][2]);
-                                       params["m30"]=flp(itexmat[0][3]);  params["m31"]=flp(itexmat[1][3]);
-                                       params["m32"]=flp(itexmat[2][3]);  params["m33"]=flp(itexmat[3][3]);
-#undef flp
-                               }
-                               // use image name instead of texname when texture is image
-                               if ((tex->type==TEX_IMAGE) && tex->ima)
-                                       params["input"] = yafray::parameter_t(tex->ima->id.name);
-                               else if ((tex->flag & TEX_COLORBAND) & (tex->coba!=NULL))
-                                       params["input"] = yafray::parameter_t(mtexL->first + "_coba");
-                               else
-                                       params["input"] = yafray::parameter_t(mtexL->first);
-
-                               // texture size
-                               params["sizex"] = yafray::parameter_t(mtex->size[0]);
-                               params["sizey"] = yafray::parameter_t(mtex->size[1]);
-                               params["sizez"] = yafray::parameter_t(mtex->size[2]);
-
-                               // texture offset
-                               params["ofsx"] = yafray::parameter_t(mtex->ofs[0]);
-                               params["ofsy"] = yafray::parameter_t(mtex->ofs[1]);
-                               params["ofsz"] = yafray::parameter_t(mtex->ofs[2]);
-
-                               // texture coordinates, have to disable 'sticky' in Blender
-                               if (mtex->texco & TEXCO_UV)
-                                       params["texco"] = yafray::parameter_t("uv");
-                               else if ((mtex->texco & TEXCO_GLOB) || (mtex->texco & TEXCO_OBJECT))
-                                       // object mode is also set as global, but the object matrix 
-                                       // was specified above with <modulator..>
-                                       params["texco"] = yafray::parameter_t("global");
-                               else if ((mtex->texco & TEXCO_ORCO) || (mtex->texco & TEXCO_STRAND))
-                                       // orco flag now used for 'strand'-mapping as well, see mesh code
-                                       params["texco"] = yafray::parameter_t("orco");
-                               else if (mtex->texco & TEXCO_WINDOW)
-                                       params["texco"] = yafray::parameter_t("window");
-                               else if (mtex->texco & TEXCO_NORM)
-                                       params["texco"] = yafray::parameter_t("normal");
-                               else if (mtex->texco & TEXCO_REFL)
-                                       params["texco"] = yafray::parameter_t("reflect");
-
-                               // texture projection axes, both image & procedural
-                               string proj = "nxyz";           // 'n' for 'none'
-                               params["proj_x"] = yafray::parameter_t(string(1,proj[mtex->projx]));
-                               params["proj_y"] = yafray::parameter_t(string(1,proj[mtex->projy]));
-                               params["proj_z"] = yafray::parameter_t(string(1,proj[mtex->projz]));
-
-                               // texture mapping parameters only relevant to image type
-                               if (tex->type==TEX_IMAGE) 
-                               {
-                                       if (mtex->mapping==MTEX_FLAT)
-                                               params["mapping"] = yafray::parameter_t("flat");
-                                       else if (mtex->mapping==MTEX_CUBE)
-                                               params["mapping"] = yafray::parameter_t("cube");
-                                       else if (mtex->mapping==MTEX_TUBE)
-                                               params["mapping"] = yafray::parameter_t("tube");
-                                       else if (mtex->mapping==MTEX_SPHERE)
-                                               params["mapping"] = yafray::parameter_t("sphere");
-
-                                       // repeat
-                                       params["xrepeat"] = yafray::parameter_t(tex->xrepeat);
-                                       params["yrepeat"] = yafray::parameter_t(tex->yrepeat);
-
-                                       // clipping
-                                       if (tex->extend==TEX_EXTEND)
-                                               params["clipping"] = yafray::parameter_t("extend");
-                                       else if (tex->extend==TEX_CLIP)
-                                               params["clipping"] = yafray::parameter_t("clip");
-                                       else if (tex->extend==TEX_CLIPCUBE)
-                                               params["clipping"] = yafray::parameter_t("clipcube");
-                                       else if (tex->extend==TEX_CHECKER) {
-                                               params["clipping"] = yafray::parameter_t("checker");
-                                               string ts = "";
-                                               if (tex->flag & TEX_CHECKER_ODD) ts += "odd";
-                                               if (tex->flag & TEX_CHECKER_EVEN) ts += " even";
-                                               params["checker_mode"] = yafray::parameter_t(ts);
-                                               params["checker_dist"] = yafray::parameter_t(tex->checkerdist);
-                                       }
-                                       else
-                                               params["clipping"] = yafray::parameter_t("repeat");
-
-                                       // crop min/max
-                                       params["cropmin_x"] = yafray::parameter_t(tex->cropxmin);
-                                       params["cropmin_y"] = yafray::parameter_t(tex->cropymin);
-                                       params["cropmax_x"] = yafray::parameter_t(tex->cropxmax);
-                                       params["cropmax_y"] = yafray::parameter_t(tex->cropymax);
-
-                                       // rot90 flag
-                                       if (tex->imaflag & TEX_IMAROT) 
-                                               params["rot90"] = yafray::parameter_t("on");
-                                       else
-                                               params["rot90"] = yafray::parameter_t("off");
-                               }
-                               yafrayGate->addShader(params, lparams);
-                       }
-               }
-
-               // shader + modulators
-               writeShader(blendmat->first, matr);
-
-       }
-
-               // write the mappers & shaders for the TexFace case
-       if (!imagetex.empty()) {
-               // Yafray doesn't have per-face-textures, only per-face-shaders,
-               // so create as many mappers/shaders as the images used by the object
-               params.clear();
-               lparams.clear();
-               int snum = 0;
-               for (map<Image*, set<Material*> >::const_iterator imgtex=imagetex.begin();
-                               imgtex!=imagetex.end();++imgtex)
-               {
-
-                       for (set<Material*>::const_iterator imgmat=imgtex->second.begin();
-                                       imgmat!=imgtex->second.end();++imgmat)
-                       {
-                               Material* matr = *imgmat;
-                               // mapper
-                               params["type"] = yafray::parameter_t("blendermapper");
-                               char temp[32];
-                               sprintf(temp, "_ftmap%d", snum);
-                               params["name"] = yafray::parameter_t(string(matr->id.name) + string(temp));
-                               params["input"] = yafray::parameter_t(imgtex->first->id.name);
-                               // all yafray default settings, except for texco, so no need to set others
-                               params["texco"] = yafray::parameter_t("uv");
-                               yafrayGate->addShader(params, lparams);
-
-                               // shader, remember name, used later when writing per-face-shaders
-                               sprintf(temp, "_ftsha%d", snum);
-                               string shader_name = string(matr->id.name) + string(temp);
-                               imgtex_shader[string(matr->id.name) + string(imgtex->first->id.name)] = shader_name;
-
-                               sprintf(temp, "_ftmap%d", snum++);
-                               string facetexname = string(matr->id.name) + string(temp);
-                               writeShader(shader_name, matr, facetexname);
-                       }
-
-               }
-       }
-
-}
-
-void yafrayPluginRender_t::genUVcoords(vector<yafray::GFLOAT> &uvcoords, ObjectRen *obr, VlakRen *vlr, MTFace* uvc, bool comple)
-{
-       if (uvc) 
-       {
-               // tri uv split indices
-               int ui1=0, ui2=1, ui3=2;
-               if (vlr->flag & R_DIVIDE_24) {
-                       ui3++;
-                       if (vlr->flag & R_FACE_SPLIT) { ui1++;  ui2++; }
-               }
-               else if (vlr->flag & R_FACE_SPLIT) { ui2++;  ui3++; }
-               if (comple) {
-                       ui1 = (ui1+2) & 3;
-                       ui2 = (ui2+2) & 3;
-                       ui3 = (ui3+2) & 3;
-               }
-               uvcoords.push_back(uvc->uv[ui1][0]);  uvcoords.push_back(1-uvc->uv[ui1][1]);
-               uvcoords.push_back(uvc->uv[ui2][0]);  uvcoords.push_back(1-uvc->uv[ui2][1]);
-               uvcoords.push_back(uvc->uv[ui3][0]);  uvcoords.push_back(1-uvc->uv[ui3][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);
-       }
-}
-
-void yafrayPluginRender_t::genVcol(vector<yafray::CFLOAT> &vcol, ObjectRen *obr, VlakRen *vlr, bool comple)
-{
-       MCol *mcol= RE_vlakren_get_mcol(obr, vlr, obr->actmcol, NULL, 0);
-
-       if (mcol)
-       {
-               // tri vcol split indices
-               int ui1=0, ui2=1, ui3=2;
-               if (vlr->flag & R_DIVIDE_24) {
-                       ui3++;
-                       if (vlr->flag & R_FACE_SPLIT) { ui1++;  ui2++; }
-               }
-               else if (vlr->flag & R_FACE_SPLIT) { ui2++;  ui3++; }
-               if (comple) {
-                       ui1 = (ui1+2) & 3;
-                       ui2 = (ui2+2) & 3;
-                       ui3 = (ui3+2) & 3;
-               }
-               unsigned char* pt = reinterpret_cast<unsigned char*>(&mcol[ui1]);
-               vcol.push_back((float)pt[3]/255.f);  vcol.push_back((float)pt[2]/255.f);  vcol.push_back((float)pt[1]/255.f);
-               pt = reinterpret_cast<unsigned char*>(&mcol[ui2]);
-               vcol.push_back((float)pt[3]/255.f);  vcol.push_back((float)pt[2]/255.f);  vcol.push_back((float)pt[1]/255.f);
-               pt = reinterpret_cast<unsigned char*>(&mcol[ui3]);
-               vcol.push_back((float)pt[3]/255.f);  vcol.push_back((float)pt[2]/255.f);  vcol.push_back((float)pt[1]/255.f);
-       }
-       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);
-       }
-}
-
-void yafrayPluginRender_t::genFace(vector<int> &faces,vector<string> &shaders,vector<int> &faceshader,
-                                                                                                               vector<yafray::GFLOAT> &uvcoords,vector<yafray::CFLOAT> &vcol,
-                                                                                                               map<VertRen*, int> &vert_idx,ObjectRen *obr,VlakRen *vlr,
-                                                                                                               int has_orco,bool has_uv)
-{
-       Material* fmat = vlr->mat;
-       bool EXPORT_VCOL = ((fmat->mode & (MA_VERTEXCOL|MA_VERTEXCOLP))!=0);
-       string fmatname(fmat->id.name);
-       // use name in imgtex_shader list if 'TexFace' enabled for this face material
-       if (fmat->mode & MA_FACETEXTURE) {
-               MTFace* tface = RE_vlakren_get_tface(obr, vlr, obr->actmtface, NULL, 0);
-               if (tface) {
-                       Image* fimg = (Image*)tface->tpage;
-                       if (fimg) fmatname = imgtex_shader[fmatname + string(fimg->id.name)];
-               }
-       }
-       else if (fmatname.length()==0) fmatname = "blender_default";
-       bool newmat=true;
-       for(unsigned int i=0;i<shaders.size();++i)
-               if(shaders[i]==fmatname)
-               {
-                       newmat=false;
-                       faceshader.push_back(i);
-                       break;
-               }
-       if(newmat)
-       {
-               shaders.push_back(fmatname);
-               faceshader.push_back(shaders.size()-1);
-       }
-
-       MTFace* uvc = RE_vlakren_get_tface(obr, vlr, obr->actmtface, NULL, 0); // possible uvcoords (v upside down)
-       int idx1, idx2, idx3;
-
-       idx1 = vert_idx.find(vlr->v1)->second;
-       idx2 = vert_idx.find(vlr->v2)->second;
-       idx3 = vert_idx.find(vlr->v3)->second;
-
-       // make sure the indices point to the vertices when orco coords exported
-       if (has_orco) { idx1*=2;  idx2*=2;  idx3*=2; }
-
-       faces.push_back(idx1);  faces.push_back(idx2);  faces.push_back(idx3);
-
-       if(has_uv) genUVcoords(uvcoords, obr, vlr, uvc);
-       if (EXPORT_VCOL) genVcol(vcol, obr, vlr);
-}
-
-void yafrayPluginRender_t::genCompleFace(vector<int> &faces,/*vector<string> &shaders,*/vector<int> &faceshader,
-                                                                                                               vector<yafray::GFLOAT> &uvcoords,vector<yafray::CFLOAT> &vcol,
-                                                                                                               map<VertRen*, int> &vert_idx,ObjectRen *obr,VlakRen *vlr,
-                                                                                                               int has_orco,bool has_uv)
-{
-       Material* fmat = vlr->mat;
-       bool EXPORT_VCOL = ((fmat->mode & (MA_VERTEXCOL|MA_VERTEXCOLP))!=0);
-
-       faceshader.push_back(faceshader.back());
-       MTFace* uvc = RE_vlakren_get_tface(obr, vlr, obr->actmtface, NULL, 0); // possible uvcoords (v upside down)
-       int idx1, idx2, idx3;
-       idx1 = vert_idx.find(vlr->v3)->second;
-       idx2 = vert_idx.find(vlr->v4)->second;
-       idx3 = vert_idx.find(vlr->v1)->second;
-
-       // make sure the indices point to the vertices when orco coords exported
-       if (has_orco) { idx1*=2;  idx2*=2;  idx3*=2; }
-
-       faces.push_back(idx1);  faces.push_back(idx2);  faces.push_back(idx3);
-
-       if (has_uv) genUVcoords(uvcoords, obr, vlr, uvc, true);
-       if (EXPORT_VCOL) genVcol(vcol, obr, vlr, true);
-}
-
-void yafrayPluginRender_t::genVertices(vector<yafray::point3d_t> &verts, int &vidx,
-                                                                                                                                                        map<VertRen*, int> &vert_idx, ObjectRen *obr, VlakRen* vlr, int has_orco, Object* obj)
-{
-       VertRen* ver;
-       float tvec[3];  // for back2world transform
-
-       // for deformed objects, object->imat is no longer valid,
-       // so have to create inverse render matrix ourselves here
-       float mat[4][4], imat[4][4];
-       MTC_Mat4MulMat4(mat, obj->obmat, re->viewmat);
-       MTC_Mat4Invert(imat, mat);
-
-       if (vert_idx.find(vlr->v1)==vert_idx.end()) 
-       {
-               vert_idx[vlr->v1] = vidx++;
-               ver = vlr->v1;
-               MTC_cp3Float(ver->co, tvec);
-               MTC_Mat4MulVecfl(imat, tvec);
-               verts.push_back(yafray::point3d_t(tvec[0], tvec[1], tvec[2]));
-               // has_orco now an int, if 1 -> strand mapping, if 2 -> normal orco mapping
-               if (has_orco==1)
-                       verts.push_back(yafray::point3d_t(ver->accum));
-               else if (has_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;
-               MTC_cp3Float(ver->co, tvec);
-               MTC_Mat4MulVecfl(imat, tvec);
-               verts.push_back(yafray::point3d_t(tvec[0], tvec[1], tvec[2]));
-               // has_orco now an int, if 1 -> strand mapping, if 2 -> normal orco mapping
-               if (has_orco==1)
-                       verts.push_back(yafray::point3d_t(ver->accum));
-               else if (has_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;
-               MTC_cp3Float(ver->co, tvec);
-               MTC_Mat4MulVecfl(imat, tvec);
-               verts.push_back(yafray::point3d_t(tvec[0], tvec[1], tvec[2]));
-               // has_orco now an int, if 1 -> strand mapping, if 2 -> normal orco mapping
-               if (has_orco==1)
-                       verts.push_back(yafray::point3d_t(ver->accum));
-               else if (has_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;
-               MTC_cp3Float(ver->co, tvec);
-               MTC_Mat4MulVecfl(imat, tvec);
-               verts.push_back(yafray::point3d_t(tvec[0], tvec[1], tvec[2]));
-               // has_orco now an int, if 1 -> strand mapping, if 2 -> normal orco mapping
-               if (has_orco==1)
-                       verts.push_back(yafray::point3d_t(ver->accum));
-               else if (has_orco==2)
-                       verts.push_back(yafray::point3d_t(ver->orco[0], ver->orco[1], ver->orco[2]));
-       }
-}
-
-void yafrayPluginRender_t::writeObject(Object* obj, ObjectRen *obr, const vector<VlakRen*> &VLR_list, const float obmat[4][4])
-{
-       float mtr[4*4];
-       mtr[0*4+0]=obmat[0][0];  mtr[0*4+1]=obmat[1][0];  mtr[0*4+2]=obmat[2][0];  mtr[0*4+3]=obmat[3][0];
-       mtr[1*4+0]=obmat[0][1];  mtr[1*4+1]=obmat[1][1];  mtr[1*4+2]=obmat[2][1];  mtr[1*4+3]=obmat[3][1];
-       mtr[2*4+0]=obmat[0][2];  mtr[2*4+1]=obmat[1][2];  mtr[2*4+2]=obmat[2][2];  mtr[2*4+3]=obmat[3][2];
-       mtr[3*4+0]=obmat[0][3];  mtr[3*4+1]=obmat[1][3];  mtr[3*4+2]=obmat[2][3];  mtr[3*4+3]=obmat[3][3];
-       yafrayGate->transformPush(mtr);
-       
-       VlakRen* face0 = VLR_list[0];
-       Material* face0mat = face0->mat;
-       
-       bool castShadows = face0mat->mode & MA_TRACEBLE;
-       float caus_IOR=1.0;
-       yafray::color_t caus_tcolor(0.0, 0.0, 0.0), caus_rcolor(0.0, 0.0, 0.0);
-       bool caus = (((face0->mat->mode & MA_RAYTRANSP) | (face0->mat->mode & MA_RAYMIRROR))!=0);
-       if (caus) {
-               caus_IOR = face0mat->ang;
-               float tr = 1.0-face0mat->alpha;
-               caus_tcolor.set(face0mat->r*tr, face0mat->g*tr, face0mat->b*tr);
-               tr = face0mat->ray_mirror;
-               caus_rcolor.set(face0mat->mirr*tr, face0mat->mirg*tr, face0mat->mirb*tr);
-       }
-
-       // 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.
-       // update2: bug #3193 it seems it has changed again with the introduction of static 'hair' particles,
-       // now it uses the vert pointer again as an extra test to make sure there are orco coords available
-       int has_orco = 0;
-       if (face0mat->texco & TEXCO_STRAND)
-               has_orco = 1;
-       else
-               has_orco = (((face0mat->texco & TEXCO_ORCO)!=0) && (face0->v1->orco!=NULL)) ? 2 : 0;
-
-       bool no_auto = true;    //in case non-mesh, or mesh has no autosmooth
-       float sm_angle = 0.1f;
-       if (obj->type==OB_MESH) 
-       {
-               Mesh* mesh = (Mesh*)obj->data;
-               if (mesh->flag & ME_AUTOSMOOTH) {
-                       sm_angle = mesh->smoothresh;
-                       no_auto = false;
-               }
-       }
-       // this for non-mesh as well
-       if (no_auto) {
-               // no per face smooth flag in yafray, if AutoSmooth not used, 
-               // use smooth flag of the first face instead
-               if (face0->flag & ME_SMOOTH) sm_angle=180;
-       }
-       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
-       bool has_uv=false;
-       for (vector<VlakRen*>::const_iterator fci=VLR_list.begin();
-                               fci!=VLR_list.end();++fci)
-       {
-               VlakRen* vlr = *fci;
-               genVertices(verts, vidx, vert_idx, obr, vlr, has_orco, obj);
-               if(RE_vlakren_get_tface(obr, vlr, obr->actmtface, NULL, 0)) has_uv=true;
-       }
-       // all faces using the index list created above
-       vector<int> faces;
-       vector<string> shaders;
-       vector<int> faceshader;
-       vector<yafray::GFLOAT> uvcoords;
-       for (vector<VlakRen*>::const_iterator fci2=VLR_list.begin();
-                               fci2!=VLR_list.end();++fci2)
-       {
-               VlakRen* vlr = *fci2;
-               genFace(faces, shaders, faceshader, uvcoords, vcol, vert_idx, obr, vlr, has_orco, has_uv);
-               if (vlr->v4) 
-                       genCompleFace(faces, faceshader, uvcoords, vcol, vert_idx, obr, vlr, has_orco, has_uv);
-       }
-
-       // using the ObjectRen database, contruct a new name if object has a parent.
-       // This is done to prevent name clashes (group/library link related)
-       string obname(obj->id.name);
-       // previous implementation, keep around, in case this is still useful
-       //if (obj->id.flag & (LIB_EXTERN|LIB_INDIRECT))obname = "lib_" + obname;
-       ObjectRen *obren;
-       for (obren = static_cast<ObjectRen*>(re->objecttable.first);
-            obren; obren=static_cast<ObjectRen*>(obren->next))
-       {
-               Object *db_ob = obren->ob, *db_par = obren->par;
-               if (db_ob==obj)
-                       if ((db_ob!=NULL) && (db_par!=NULL)) {
-                               obname += "_" + string(db_par->id.name);
-                               break;
-                       }
-       }
-
-       yafrayGate->addObject_trimesh(obname, verts, faces, uvcoords, vcol,
-                       shaders, faceshader, sm_angle, castShadows, true, true, caus, has_orco,
-                       caus_rcolor, caus_tcolor, caus_IOR);
-       yafrayGate->transformPop();
-}
-
-
-// write all objects
-void yafrayPluginRender_t::writeAllObjects()
-{
-       // first all objects except dupliverts (and main instance object for dups)
-       for (map<Object*, yafrayObjectRen >::const_iterator obi=all_objects.begin();
-                       obi!=all_objects.end(); ++obi)
-       {
-         // skip main duplivert object if in dupliMtx_list, written later
-               Object* obj = obi->first;
-               if (dupliMtx_list.find(string(obj->id.name))!=dupliMtx_list.end()) continue;
-               writeObject(obj, obi->second.obr, obi->second.faces, obj->obmat);
-       }
-
-       // Now all duplivert objects (if any) as instances of main object
-       // The original object has been included in the VlakRen renderlist above (see convertBlenderScene.c)
-       // but is written here which all other duplis are instances of.
-       float obmat[4][4], cmat[4][4], imat[4][4], nmat[4][4];
-       for (map<string, vector<float> >::const_iterator dupMtx=dupliMtx_list.begin();
-               dupMtx!=dupliMtx_list.end();++dupMtx) {
-
-               // original inverse matrix, not actual matrix of object, but first duplivert.
-               for (int i=0;i<4;i++)
-                       for (int j=0;j<4;j++)
-                               obmat[i][j] = dupMtx->second[(i<<2)+j];
-               MTC_Mat4Invert(imat, obmat);
-
-               // first object written as normal (but with transform of first duplivert)
-               Object* obj = dup_srcob[dupMtx->first];
-               writeObject(obj, all_objects[obj].obr, all_objects[obj].faces, obmat);
-
-               // all others instances of first
-               for (unsigned int curmtx=16;curmtx<dupMtx->second.size();curmtx+=16) 
-               {       // number of 4x4 matrices
-                       // new mtx
-                       for (int i=0;i<4;i++)
-                               for (int j=0;j<4;j++)
-                                       nmat[i][j] = dupMtx->second[curmtx+(i<<2)+j];
-
-                       MTC_Mat4MulMat4(cmat, imat, nmat);      // transform with respect to original = inverse_original * new
-
-                       float mtr[4*4];
-                       mtr[0*4+0]=cmat[0][0];  mtr[0*4+1]=cmat[1][0];  mtr[0*4+2]=cmat[2][0];  mtr[0*4+3]=cmat[3][0];
-                       mtr[1*4+0]=cmat[0][1];  mtr[1*4+1]=cmat[1][1];  mtr[1*4+2]=cmat[2][1];  mtr[1*4+3]=cmat[3][1];
-                       mtr[2*4+0]=cmat[0][2];  mtr[2*4+1]=cmat[1][2];  mtr[2*4+2]=cmat[2][2];  mtr[2*4+3]=cmat[3][2];
-                       mtr[3*4+0]=cmat[0][3];  mtr[3*4+1]=cmat[1][3];  mtr[3*4+2]=cmat[2][3];  mtr[3*4+3]=cmat[3][3];
-                       yafrayGate->transformPush(mtr);
-
-                       // new name from original
-                       string name=(obj->id.name);
-                       char temp[16];
-                       sprintf(temp,"_dup%d",(curmtx>>4));
-                       name+=temp;
-                       yafrayGate->addObject_reference(name,obj->id.name);
-                       yafrayGate->transformPop();
-               }
-
-       }
-}
-
-void yafrayPluginRender_t::writeAreaLamp(LampRen* lamp, int num, float iview[4][4])
-{
-       yafray::paramMap_t params;
-       
-       if (lamp->area_shape!=LA_AREA_SQUARE) return;
-       float *a=lamp->area[0], *b=lamp->area[1], *c=lamp->area[2], *d=lamp->area[3];
-       float power=lamp->energy;
-       
-       string md = "off";
-       // if no GI used, the GIphotons flag can still be set, so only use when 'full' selected
-       if ((re->r.GImethod==2) && (re->r.GIphotons)) { md="on";  power*=re->r.GIpower; }
-       params["type"]=yafray::parameter_t("arealight");
-       char temp[16];
-       sprintf(temp,"LAMP%d",num+1);
-       params["name"]=yafray::parameter_t(temp);
-       params["dummy"]=yafray::parameter_t(md);
-       params["power"]=yafray::parameter_t(power);
-       // samples not used for GI with photons, can still be exported, is ignored
-       int psm=0, sm = lamp->ray_totsamp;
-       if (sm>=25) psm = sm/5;
-       params["samples"]=yafray::parameter_t(sm);
-       params["psamples"]=yafray::parameter_t(psm);
-       
-       // transform area lamp coords back to world
-       float lpco[4][3];
-       MTC_cp3Float(a, lpco[0]);
-       MTC_Mat4MulVecfl(iview, lpco[0]);
-       MTC_cp3Float(b, lpco[1]);
-       MTC_Mat4MulVecfl(iview, lpco[1]);
-       MTC_cp3Float(c, lpco[2]);
-       MTC_Mat4MulVecfl(iview, lpco[2]);
-       MTC_cp3Float(d, lpco[3]);
-       MTC_Mat4MulVecfl(iview, lpco[3]);       
-       params["a"] = yafray::parameter_t(yafray::point3d_t(lpco[0][0], lpco[0][1], lpco[0][2]));
-       params["b"] = yafray::parameter_t(yafray::point3d_t(lpco[1][0], lpco[1][1], lpco[1][2]));
-       params["c"] = yafray::parameter_t(yafray::point3d_t(lpco[2][0], lpco[2][1], lpco[2][2]));
-       params["d"] = yafray::parameter_t(yafray::point3d_t(lpco[3][0], lpco[3][1], lpco[3][2]));
-       
-       params["color"]=yafray::parameter_t(yafray::color_t(lamp->r,lamp->g,lamp->b));
-       yafrayGate->addLight(params);
-}
-
-void yafrayPluginRender_t::writeLamps()
-{
-       GroupObject *go;
-       int i=0;
-       
-       // inver viewmatrix needed for back2world transform
-       float iview[4][4];
-       // re->viewinv != inv.re->viewmat because of possible ortho mode (see convertBlenderScene.c)
-       // have to invert it here
-       MTC_Mat4Invert(iview, re->viewmat);
-
-       // all lamps
-       for(go=(GroupObject *)re->lights.first; go; go= go->next, i++)
-       {
-               LampRen* lamp = (LampRen *)go->lampren;
-               
-               yafray::paramMap_t params;
-               string type="";
-               
-               if (lamp->type==LA_AREA) { writeAreaLamp(lamp, i, iview);  continue; }
-               
-               // TODO: add decay setting in yafray
-               bool is_softL=false, is_sphereL=false;
-               if (lamp->type==LA_LOCAL) {
-                       if (lamp->mode & LA_YF_SOFT) {
-                               // shadowmapped omnidirectional light
-                               params["type"] = yafray::parameter_t("softlight");
-                               is_softL = true;
-                       }
-                       else if ((lamp->mode & LA_SHAD_RAY) && (lamp->YF_ltradius>0.0)) {
-                               // area sphere, only when ray shadows enabled and radius>0.0
-                               params["type"] = yafray::parameter_t("spherelight");
-                               is_sphereL = true;
-                       }
-                       else params["type"] = yafray::parameter_t("pointlight");
-                       params["glow_intensity"] = yafray::parameter_t(lamp->YF_glowint);
-                       params["glow_offset"] = yafray::parameter_t(lamp->YF_glowofs);
-                       params["glow_type"] = yafray::parameter_t(lamp->YF_glowtype);
-               }
-               else if (lamp->type==LA_SPOT)
-                       params["type"] = yafray::parameter_t("spotlight");
-               else if ((lamp->type==LA_SUN) || (lamp->type==LA_HEMI)) // hemi exported as sun
-                       params["type"] = yafray::parameter_t("sunlight");
-               else if (lamp->type==LA_YF_PHOTON)
-                       params["type"] = yafray::parameter_t("photonlight");
-               else {
-                       // possibly unknown type, ignore
-                       cout << "Unknown Blender lamp type: " << lamp->type << endl;
-                       continue;
-               }
-               
-               //no name available here, create one
-               char temp[16];
-               sprintf(temp,"LAMP%d",i+1);
-               params["name"] = yafray::parameter_t(temp);
-
-               // color already premultiplied by energy, so only need distance here
-               float pwr = 1;  // default for sun/hemi, distance irrelevant
-               if ((lamp->type!=LA_SUN) && (lamp->type!=LA_HEMI)) {
-                       if (lamp->mode & LA_SPHERE) {
-                               // best approx. as used in LFexport script (LF d.f.m. 4pi?)
-                               pwr = lamp->dist*(lamp->dist+1)*(0.25/M_PI);
-                               //decay = 2;
-                       }
-                       else {
-                               pwr = lamp->dist;
-                               //decay = 1;
-                       }
-               }
-
-               if (is_sphereL) {
-                       // 'dummy' mode for spherelight when used with gpm
-                       string md = "off";
-                       // if no GI used, the GIphotons flag can still be set, so only use when 'full' selected
-                       if ((re->r.GImethod==2) && (re->r.GIphotons)) { md="on";  pwr*=re->r.GIpower; }
-                       params["power"] = yafray::parameter_t(pwr);
-                       params["dummy"] = yafray::parameter_t(md);
-               }
-               else params["power"] = yafray::parameter_t(pwr);
-               
-               // cast_shadows flag not used with softlight, spherelight or photonlight
-               if ((!is_softL) && (!is_sphereL) && (lamp->type!=LA_YF_PHOTON)) {
-                       string lpmode="off";
-                       // Blender hemilights exported as sunlights which might have shadow flag set
-                       // should have cast_shadows set to off (reported by varuag)
-                       if (lamp->type!=LA_HEMI) {
-                               if (re->r.mode & R_SHADOW) {
-                                       // old bug was here since the yafray lamp settings panel was added,
-                                       // blender spotlight shadbuf flag should be ignored, since it is not in the panel anymore
-                                       if (lamp->mode & LA_SHAD_RAY) lpmode="on";
-                               }
-                       }
-                       params["cast_shadows"] = yafray::parameter_t(lpmode);
-               }
-               
-               // spot specific stuff
-               bool has_halo = ((lamp->type==LA_SPOT) && (lamp->mode & LA_HALO) && (lamp->haint>0.0));
-               if (lamp->type==LA_SPOT) {
-                       // conversion already changed spotsize to cosine of half angle
-       &nb