diff --git a/SConstruct b/SConstruct
index 968266bd6d1..8e3666a7859 100644
--- a/SConstruct
+++ b/SConstruct
@@ -57,8 +57,8 @@ nsis_build = None
##### BEGIN SETUP #####
B.possible_types = ['core', 'common', 'blender', 'intern',
- 'international', 'game', 'game2',
- 'player', 'player2', 'system']
+ 'international', 'game', 'game2',
+ 'player', 'player2', 'system']
B.binarykind = ['blender' , 'blenderplayer']
##################################
@@ -67,15 +67,15 @@ B.binarykind = ['blender' , 'blenderplayer']
# XX cheating for BF_FANCY, we check for BF_FANCY before args are validated
use_color = ARGUMENTS.get('BF_FANCY', '1')
if platform=='win32':
- use_color = None
+ use_color = None
if not use_color=='1':
- B.bc.disable()
-
+ B.bc.disable()
+
#on defaut white Os X terminal, some colors are totally unlegible
if platform=='darwin':
- B.bc.OKGREEN = '\033[34m'
- B.bc.WARNING = '\033[36m'
+ B.bc.OKGREEN = '\033[34m'
+ B.bc.WARNING = '\033[36m'
# arguments
print B.bc.HEADER+'Command-line arguments'+B.bc.ENDC
@@ -98,247 +98,247 @@ quickie = B.arguments.get('BF_QUICK', None)
quickdebug = B.arguments.get('BF_QUICKDEBUG', None)
if quickdebug:
- B.quickdebug=string.split(quickdebug, ',')
+ B.quickdebug=string.split(quickdebug, ',')
else:
- B.quickdebug=[]
+ B.quickdebug=[]
if quickie:
- B.quickie=string.split(quickie,',')
+ B.quickie=string.split(quickie,',')
else:
- B.quickie=[]
-
+ B.quickie=[]
+
toolset = B.arguments.get('BF_TOOLSET', None)
if toolset:
- print "Using " + toolset
- if toolset=='mstoolkit':
- env = BlenderEnvironment(ENV = os.environ)
- env.Tool('mstoolkit', ['tools'])
- else:
- env = BlenderEnvironment(tools=[toolset], ENV = os.environ)
- if env:
- btools.SetupSpawn(env)
+ print "Using " + toolset
+ if toolset=='mstoolkit':
+ env = BlenderEnvironment(ENV = os.environ)
+ env.Tool('mstoolkit', ['tools'])
+ else:
+ env = BlenderEnvironment(tools=[toolset], ENV = os.environ)
+ if env:
+ btools.SetupSpawn(env)
else:
- env = BlenderEnvironment(ENV = os.environ)
+ env = BlenderEnvironment(ENV = os.environ)
if not env:
- print "Could not create a build environment"
- Exit()
+ print "Could not create a build environment"
+ Exit()
cc = B.arguments.get('CC', None)
cxx = B.arguments.get('CXX', None)
if cc:
- env['CC'] = cc
+ env['CC'] = cc
if cxx:
- env['CXX'] = cxx
+ env['CXX'] = cxx
if env['CC'] in ['cl', 'cl.exe'] and sys.platform=='win32':
- platform = 'win32-vc'
+ platform = 'win32-vc'
elif env['CC'] in ['gcc'] and sys.platform=='win32':
- platform = 'win32-mingw'
+ platform = 'win32-mingw'
env.SConscriptChdir(0)
crossbuild = B.arguments.get('BF_CROSS', None)
if crossbuild and platform!='win32':
- platform = 'linuxcross'
+ platform = 'linuxcross'
env['OURPLATFORM'] = platform
configfile = 'config'+os.sep+platform+'-config.py'
if os.path.exists(configfile):
- print B.bc.OKGREEN + "Using config file: " + B.bc.ENDC + configfile
+ print B.bc.OKGREEN + "Using config file: " + B.bc.ENDC + configfile
else:
- print B.bc.FAIL + configfile + " doesn't exist" + B.bc.ENDC
+ print B.bc.FAIL + configfile + " doesn't exist" + B.bc.ENDC
if crossbuild and env['PLATFORM'] != 'win32':
- print B.bc.HEADER+"Preparing for crossbuild"+B.bc.ENDC
- env.Tool('crossmingw', ['tools'])
- # todo: determine proper libs/includes etc.
- # Needed for gui programs, console programs should do without it
- env.Append(LINKFLAGS=['-mwindows'])
+ print B.bc.HEADER+"Preparing for crossbuild"+B.bc.ENDC
+ env.Tool('crossmingw', ['tools'])
+ # todo: determine proper libs/includes etc.
+ # Needed for gui programs, console programs should do without it
+ env.Append(LINKFLAGS=['-mwindows'])
userconfig = B.arguments.get('BF_CONFIG', 'user-config.py')
# first read platform config. B.arguments will override
optfiles = [configfile]
if os.path.exists(userconfig):
- print B.bc.OKGREEN + "Using user-config file: " + B.bc.ENDC + userconfig
- optfiles += [userconfig]
+ print B.bc.OKGREEN + "Using user-config file: " + B.bc.ENDC + userconfig
+ optfiles += [userconfig]
else:
- print B.bc.WARNING + userconfig + " not found, no user overrides" + B.bc.ENDC
+ print B.bc.WARNING + userconfig + " not found, no user overrides" + B.bc.ENDC
opts = btools.read_opts(optfiles, B.arguments)
opts.Update(env)
if not env['BF_FANCY']:
- B.bc.disable()
+ B.bc.disable()
SetOption('num_jobs', int(env['BF_NUMJOBS']))
print "Build with %d parallel jobs" % (GetOption('num_jobs'))
# disable elbeem (fluidsim) compilation?
if env['BF_NO_ELBEEM'] == 1:
- env['CPPFLAGS'].append('-DDISABLE_ELBEEM')
- env['CXXFLAGS'].append('-DDISABLE_ELBEEM')
- env['CCFLAGS'].append('-DDISABLE_ELBEEM')
+ env['CPPFLAGS'].append('-DDISABLE_ELBEEM')
+ env['CXXFLAGS'].append('-DDISABLE_ELBEEM')
+ env['CCFLAGS'].append('-DDISABLE_ELBEEM')
if env['WITH_BF_OPENMP'] == 1:
- if env['OURPLATFORM']=='win32-vc':
- env['CCFLAGS'].append('/openmp')
- env['CPPFLAGS'].append('/openmp')
- env['CXXFLAGS'].append('/openmp')
- else:
- if env['CC'][-3:] == 'icc': # to be able to handle CC=/opt/bla/icc case
- env.Append(LINKFLAGS=['-openmp', '-static-intel'])
- env['CCFLAGS'].append('-openmp')
- env['CPPFLAGS'].append('-openmp')
- env['CXXFLAGS'].append('-openmp')
- else:
- env.Append(CCFLAGS=['-fopenmp'])
- env.Append(CPPFLAGS=['-fopenmp'])
- env.Append(CXXFLAGS=['-fopenmp'])
- # env.Append(LINKFLAGS=['-fprofile-generate'])
+ if env['OURPLATFORM']=='win32-vc':
+ env['CCFLAGS'].append('/openmp')
+ env['CPPFLAGS'].append('/openmp')
+ env['CXXFLAGS'].append('/openmp')
+ else:
+ if env['CC'][-3:] == 'icc': # to be able to handle CC=/opt/bla/icc case
+ env.Append(LINKFLAGS=['-openmp', '-static-intel'])
+ env['CCFLAGS'].append('-openmp')
+ env['CPPFLAGS'].append('-openmp')
+ env['CXXFLAGS'].append('-openmp')
+ else:
+ env.Append(CCFLAGS=['-fopenmp'])
+ env.Append(CPPFLAGS=['-fopenmp'])
+ env.Append(CXXFLAGS=['-fopenmp'])
+ # env.Append(LINKFLAGS=['-fprofile-generate'])
#check for additional debug libnames
if env.has_key('BF_DEBUG_LIBS'):
- B.quickdebug += env['BF_DEBUG_LIBS']
+ B.quickdebug += env['BF_DEBUG_LIBS']
printdebug = B.arguments.get('BF_LISTDEBUG', 0)
# see if this linux distro has libalut
if env['OURPLATFORM'] == 'linux2' :
- if env['WITH_BF_OPENAL']:
- mylib_test_source_file = """
- #include "AL/alut.h"
- int main(int argc, char **argv)
- {
- alutGetMajorVersion();
- return 0;
- }
- """
+ if env['WITH_BF_OPENAL']:
+ mylib_test_source_file = """
+ #include "AL/alut.h"
+ int main(int argc, char **argv)
+ {
+ alutGetMajorVersion();
+ return 0;
+ }
+ """
- def CheckFreeAlut(context,env):
- context.Message( B.bc.OKGREEN + "Linux platform detected:\n checking for FreeAlut... " + B.bc.ENDC )
- env['LIBS'] = 'alut'
- result = context.TryLink(mylib_test_source_file, '.c')
- context.Result(result)
- return result
+ def CheckFreeAlut(context,env):
+ context.Message( B.bc.OKGREEN + "Linux platform detected:\n checking for FreeAlut... " + B.bc.ENDC )
+ env['LIBS'] = 'alut'
+ result = context.TryLink(mylib_test_source_file, '.c')
+ context.Result(result)
+ return result
- env2 = env.Clone( LIBPATH = env['BF_OPENAL'] )
- sconf_temp = mkdtemp()
- conf = Configure( env2, {'CheckFreeAlut' : CheckFreeAlut}, sconf_temp, '/dev/null' )
- if conf.CheckFreeAlut( env2 ):
- env['BF_OPENAL_LIB'] += ' alut'
- del env2
- root = ''
- for root, dirs, files in os.walk(sconf_temp, topdown=False):
- for name in files:
- os.remove(os.path.join(root, name))
- for name in dirs:
- os.rmdir(os.path.join(root, name))
- if root: os.rmdir(root)
+ env2 = env.Clone( LIBPATH = env['BF_OPENAL'] )
+ sconf_temp = mkdtemp()
+ conf = Configure( env2, {'CheckFreeAlut' : CheckFreeAlut}, sconf_temp, '/dev/null' )
+ if conf.CheckFreeAlut( env2 ):
+ env['BF_OPENAL_LIB'] += ' alut'
+ del env2
+ root = ''
+ for root, dirs, files in os.walk(sconf_temp, topdown=False):
+ for name in files:
+ os.remove(os.path.join(root, name))
+ for name in dirs:
+ os.rmdir(os.path.join(root, name))
+ if root: os.rmdir(root)
if len(B.quickdebug) > 0 and printdebug != 0:
- print B.bc.OKGREEN + "Buildings these libs with debug symbols:" + B.bc.ENDC
- for l in B.quickdebug:
- print "\t" + l
+ print B.bc.OKGREEN + "Buildings these libs with debug symbols:" + B.bc.ENDC
+ for l in B.quickdebug:
+ print "\t" + l
# remove stdc++ from LLIBS if we are building a statc linked CXXFLAGS
if env['WITH_BF_STATICCXX']:
- if 'stdc++' in env['LLIBS']:
- env['LLIBS'] = env['LLIBS'].replace('stdc++', ' ')
- else:
- print '\tcould not remove stdc++ library from LLIBS, WITH_BF_STATICCXX may not work for your platform'
+ if 'stdc++' in env['LLIBS']:
+ env['LLIBS'] = env['LLIBS'].replace('stdc++', ' ')
+ else:
+ print '\tcould not remove stdc++ library from LLIBS, WITH_BF_STATICCXX may not work for your platform'
# check target for blenderplayer. Set WITH_BF_PLAYER if found on cmdline
if 'blenderplayer' in B.targets:
- env['WITH_BF_PLAYER'] = True
+ env['WITH_BF_PLAYER'] = True
if 'blendernogame' in B.targets:
- env['WITH_BF_GAMEENGINE'] = False
+ env['WITH_BF_GAMEENGINE'] = False
if 'blenderlite' in B.targets:
- env['WITH_BF_GAMEENGINE'] = False
- env['WITH_BF_OPENAL'] = False
- env['WITH_BF_OPENEXR'] = False
- env['WITH_BF_ICONV'] = False
- env['WITH_BF_INTERNATIONAL'] = False
- env['WITH_BF_OPENJPEG'] = False
- env['WITH_BF_FFMPEG'] = False
- env['WITH_BF_QUICKTIME'] = False
- env['WITH_BF_YAFRAY'] = False
- env['WITH_BF_REDCODE'] = False
- env['WITH_BF_FTGL'] = False
- env['WITH_BF_DDS'] = False
- env['WITH_BF_ZLIB'] = False
- env['WITH_BF_SDL'] = False
- env['WITH_BF_JPEG'] = False
- env['WITH_BF_PNG'] = False
- env['WITH_BF_ODE'] = False
- env['WITH_BF_BULLET'] = False
- env['WITH_BF_BINRELOC'] = False
- env['BF_BUILDINFO'] = False
- env['BF_NO_ELBEEM'] = True
- env['WITH_BF_PYTHON'] = False
+ env['WITH_BF_GAMEENGINE'] = False
+ env['WITH_BF_OPENAL'] = False
+ env['WITH_BF_OPENEXR'] = False
+ env['WITH_BF_ICONV'] = False
+ env['WITH_BF_INTERNATIONAL'] = False
+ env['WITH_BF_OPENJPEG'] = False
+ env['WITH_BF_FFMPEG'] = False
+ env['WITH_BF_QUICKTIME'] = False
+ env['WITH_BF_YAFRAY'] = False
+ env['WITH_BF_REDCODE'] = False
+ env['WITH_BF_FTGL'] = False
+ env['WITH_BF_DDS'] = False
+ env['WITH_BF_ZLIB'] = False
+ env['WITH_BF_SDL'] = False
+ env['WITH_BF_JPEG'] = False
+ env['WITH_BF_PNG'] = False
+ env['WITH_BF_ODE'] = False
+ env['WITH_BF_BULLET'] = False
+ env['WITH_BF_BINRELOC'] = False
+ env['BF_BUILDINFO'] = False
+ env['BF_NO_ELBEEM'] = True
+ env['WITH_BF_PYTHON'] = False
# lastly we check for root_build_dir ( we should not do before, otherwise we might do wrong builddir
#B.root_build_dir = B.arguments.get('BF_BUILDDIR', '..'+os.sep+'build'+os.sep+platform+os.sep)
B.root_build_dir = env['BF_BUILDDIR']
B.doc_build_dir = env['BF_DOCDIR']
if not B.root_build_dir[-1]==os.sep:
- B.root_build_dir += os.sep
+ B.root_build_dir += os.sep
if not B.doc_build_dir[-1]==os.sep:
- B.doc_build_dir += os.sep
-
+ B.doc_build_dir += os.sep
+
# We do a shortcut for clean when no quicklist is given: just delete
# builddir without reading in SConscripts
do_clean = None
if 'clean' in B.targets:
- do_clean = True
+ do_clean = True
if not quickie and do_clean:
- if os.path.exists(B.doc_build_dir):
- print B.bc.HEADER+'Cleaning doc dir...'+B.bc.ENDC
- dirs = os.listdir(B.doc_build_dir)
- for entry in dirs:
- if os.path.isdir(B.doc_build_dir + entry) == 1:
- print "clean dir %s"%(B.doc_build_dir+entry)
- shutil.rmtree(B.doc_build_dir+entry)
- else: # remove file
- print "remove file %s"%(B.doc_build_dir+entry)
- os.remove(B.root_build_dir+entry)
- if os.path.exists(B.root_build_dir):
- print B.bc.HEADER+'Cleaning build dir...'+B.bc.ENDC
- dirs = os.listdir(B.root_build_dir)
- for entry in dirs:
- if os.path.isdir(B.root_build_dir + entry) == 1:
- print "clean dir %s"%(B.root_build_dir+entry)
- shutil.rmtree(B.root_build_dir+entry)
- else: # remove file
- print "remove file %s"%(B.root_build_dir+entry)
- os.remove(B.root_build_dir+entry)
- for confile in ['extern/ffmpeg/config.mak', 'extern/x264/config.mak',
- 'extern/xvidcore/build/generic/platform.inc']:
- if os.path.exists(confile):
- print "clean file %s"%confile
- os.remove(confile)
- print B.bc.OKGREEN+'...done'+B.bc.ENDC
- else:
- print B.bc.HEADER+'Already Clean, nothing to do.'+B.bc.ENDC
- Exit()
+ if os.path.exists(B.doc_build_dir):
+ print B.bc.HEADER+'Cleaning doc dir...'+B.bc.ENDC
+ dirs = os.listdir(B.doc_build_dir)
+ for entry in dirs:
+ if os.path.isdir(B.doc_build_dir + entry) == 1:
+ print "clean dir %s"%(B.doc_build_dir+entry)
+ shutil.rmtree(B.doc_build_dir+entry)
+ else: # remove file
+ print "remove file %s"%(B.doc_build_dir+entry)
+ os.remove(B.root_build_dir+entry)
+ if os.path.exists(B.root_build_dir):
+ print B.bc.HEADER+'Cleaning build dir...'+B.bc.ENDC
+ dirs = os.listdir(B.root_build_dir)
+ for entry in dirs:
+ if os.path.isdir(B.root_build_dir + entry) == 1:
+ print "clean dir %s"%(B.root_build_dir+entry)
+ shutil.rmtree(B.root_build_dir+entry)
+ else: # remove file
+ print "remove file %s"%(B.root_build_dir+entry)
+ os.remove(B.root_build_dir+entry)
+ for confile in ['extern/ffmpeg/config.mak', 'extern/x264/config.mak',
+ 'extern/xvidcore/build/generic/platform.inc']:
+ if os.path.exists(confile):
+ print "clean file %s"%confile
+ os.remove(confile)
+ print B.bc.OKGREEN+'...done'+B.bc.ENDC
+ else:
+ print B.bc.HEADER+'Already Clean, nothing to do.'+B.bc.ENDC
+ Exit()
if not os.path.isdir ( B.root_build_dir):
- os.makedirs ( B.root_build_dir )
- os.makedirs ( B.root_build_dir + 'source' )
- os.makedirs ( B.root_build_dir + 'intern' )
- os.makedirs ( B.root_build_dir + 'extern' )
- os.makedirs ( B.root_build_dir + 'lib' )
- os.makedirs ( B.root_build_dir + 'bin' )
+ os.makedirs ( B.root_build_dir )
+ os.makedirs ( B.root_build_dir + 'source' )
+ os.makedirs ( B.root_build_dir + 'intern' )
+ os.makedirs ( B.root_build_dir + 'extern' )
+ os.makedirs ( B.root_build_dir + 'lib' )
+ os.makedirs ( B.root_build_dir + 'bin' )
if not os.path.isdir(B.doc_build_dir):
- os.makedirs ( B.doc_build_dir )
+ os.makedirs ( B.doc_build_dir )
Help(opts.GenerateHelpText(env))
@@ -346,10 +346,10 @@ Help(opts.GenerateHelpText(env))
# commands, do 'scons BF_QUIET=0'
bf_quietoutput = B.arguments.get('BF_QUIET', '1')
if env['BF_QUIET']:
- B.set_quiet_output(env)
+ B.set_quiet_output(env)
else:
- if toolset=='msvc':
- B.msvc_hack(env)
+ if toolset=='msvc':
+ B.msvc_hack(env)
print B.bc.HEADER+'Building in '+B.bc.ENDC+B.root_build_dir
env.SConsignFile(B.root_build_dir+'scons-signatures')
@@ -371,21 +371,21 @@ SConscript(B.root_build_dir+'/source/SConscript')
# libraries to give as objects to linking phase
mainlist = []
for tp in B.possible_types:
- if not tp == 'player' and not tp == 'player2':
- mainlist += B.create_blender_liblist(env, tp)
+ if not tp == 'player' and not tp == 'player2':
+ mainlist += B.create_blender_liblist(env, tp)
if B.arguments.get('BF_PRIORITYLIST', '0')=='1':
- B.propose_priorities()
+ B.propose_priorities()
dobj = B.buildinfo(env, "dynamic") + B.resources
thestatlibs, thelibincs = B.setup_staticlibs(env)
thesyslibs = B.setup_syslibs(env)
if 'blender' in B.targets or not env['WITH_BF_NOBLENDER']:
- env.BlenderProg(B.root_build_dir, "blender", dobj + mainlist + thestatlibs, [], thesyslibs, [B.root_build_dir+'/lib'] + thelibincs, 'blender')
+ env.BlenderProg(B.root_build_dir, "blender", dobj + mainlist + thestatlibs, [], thesyslibs, [B.root_build_dir+'/lib'] + thelibincs, 'blender')
if env['WITH_BF_PLAYER']:
- playerlist = B.create_blender_liblist(env, 'player')
- env.BlenderProg(B.root_build_dir, "blenderplayer", dobj + playerlist + thestatlibs, [], thesyslibs, [B.root_build_dir+'/lib'] + thelibincs, 'blenderplayer')
+ playerlist = B.create_blender_liblist(env, 'player')
+ env.BlenderProg(B.root_build_dir, "blenderplayer", dobj + playerlist + thestatlibs, [], thesyslibs, [B.root_build_dir+'/lib'] + thelibincs, 'blenderplayer')
##### Now define some targets
@@ -395,19 +395,19 @@ if env['WITH_BF_PLAYER']:
#-- binaries
blenderinstall = []
if env['OURPLATFORM']=='darwin':
- for prg in B.program_list:
- bundle = '%s.app' % prg[0]
- bundledir = os.path.dirname(bundle)
- for dp, dn, df in os.walk(bundle):
- if 'CVS' in dn:
- dn.remove('CVS')
- if '.svn' in dn:
- dn.remove('.svn')
- dir=env['BF_INSTALLDIR']+dp[len(bundledir):]
- source=[dp+os.sep+f for f in df]
- blenderinstall.append(env.Install(dir=dir,source=source))
+ for prg in B.program_list:
+ bundle = '%s.app' % prg[0]
+ bundledir = os.path.dirname(bundle)
+ for dp, dn, df in os.walk(bundle):
+ if 'CVS' in dn:
+ dn.remove('CVS')
+ if '.svn' in dn:
+ dn.remove('.svn')
+ dir=env['BF_INSTALLDIR']+dp[len(bundledir):]
+ source=[dp+os.sep+f for f in df]
+ blenderinstall.append(env.Install(dir=dir,source=source))
else:
- blenderinstall = env.Install(dir=env['BF_INSTALLDIR'], source=B.program_list)
+ blenderinstall = env.Install(dir=env['BF_INSTALLDIR'], source=B.program_list)
#-- .blender
#- dont do .blender and scripts for darwin, it is already in the bundle
@@ -416,30 +416,41 @@ dottargetlist = []
scriptinstall = []
if env['OURPLATFORM']!='darwin':
- for dp, dn, df in os.walk('bin/.blender'):
- if 'CVS' in dn:
- dn.remove('CVS')
- if '.svn' in dn:
- dn.remove('.svn')
- for f in df:
- dotblendlist.append(dp+os.sep+f)
- dottargetlist.append(env['BF_INSTALLDIR']+dp[3:]+os.sep+f)
+ for dp, dn, df in os.walk('bin/.blender'):
+ if 'CVS' in dn:
+ dn.remove('CVS')
+ if '.svn' in dn:
+ dn.remove('.svn')
+
+ for f in df:
+ if not env['WITH_BF_INTERNATIONAL']:
+ if 'locale' in dp:
+ continue
+ if f == '.Blanguages':
+ continue
+ if not env['WITH_BF_FREETYPE']:
+ if f.endswith('.ttf'):
+ continue
+
+ dotblendlist.append(os.path.join(dp, f))
+ dottargetlist.append(env['BF_INSTALLDIR']+dp[3:]+os.sep+f)
- dotblenderinstall = []
- for targetdir,srcfile in zip(dottargetlist, dotblendlist):
- td, tf = os.path.split(targetdir)
- dotblenderinstall.append(env.Install(dir=td, source=srcfile))
-
- #-- .blender/scripts
- scriptpath='release/scripts'
- for dp, dn, df in os.walk(scriptpath):
- if 'CVS' in dn:
- dn.remove('CVS')
- if '.svn' in dn:
- dn.remove('.svn')
- dir=env['BF_INSTALLDIR']+'/.blender/scripts'+dp[len(scriptpath):]
- source=[dp+os.sep+f for f in df]
- scriptinstall.append(env.Install(dir=dir,source=source))
+ dotblenderinstall = []
+ for targetdir,srcfile in zip(dottargetlist, dotblendlist):
+ td, tf = os.path.split(targetdir)
+ dotblenderinstall.append(env.Install(dir=td, source=srcfile))
+
+ if env['WITH_BF_PYTHON']:
+ #-- .blender/scripts
+ scriptpath='release/scripts'
+ for dp, dn, df in os.walk(scriptpath):
+ if 'CVS' in dn:
+ dn.remove('CVS')
+ if '.svn' in dn:
+ dn.remove('.svn')
+ dir=env['BF_INSTALLDIR']+'/.blender/scripts'+dp[len(scriptpath):]
+ source=[dp+os.sep+f for f in df]
+ scriptinstall.append(env.Install(dir=dir,source=source))
#-- icons
if env['OURPLATFORM']=='linux2':
@@ -461,18 +472,25 @@ if env['OURPLATFORM']=='linux2':
td, tf = os.path.split(targetdir)
iconinstall.append(env.Install(dir=td, source=srcfile))
+# dlls for linuxcross
+# TODO - add more libs, for now this lets blenderlite run
+if env['OURPLATFORM']=='linuxcross':
+ dir=env['BF_INSTALLDIR']
+ source = ['../lib/windows/pthreads/lib/pthreadGC2.dll']
+ scriptinstall.append(env.Install(dir=dir, source=source))
+
#-- plugins
pluglist = []
plugtargetlist = []
for tp, tn, tf in os.walk('release/plugins'):
- if 'CVS' in tn:
- tn.remove('CVS')
- if '.svn' in tn:
- tn.remove('.svn')
- for f in tf:
- print ">>>", env['BF_INSTALLDIR'], tp, f
- pluglist.append(tp+os.sep+f)
- plugtargetlist.append(env['BF_INSTALLDIR']+tp[7:]+os.sep+f)
+ if 'CVS' in tn:
+ tn.remove('CVS')
+ if '.svn' in tn:
+ tn.remove('.svn')
+ for f in tf:
+ print ">>>", env['BF_INSTALLDIR'], tp, f
+ pluglist.append(tp+os.sep+f)
+ plugtargetlist.append(env['BF_INSTALLDIR']+tp[7:]+os.sep+f)
# header files for plugins
pluglist.append('source/blender/blenpluginapi/documentation.h')
@@ -492,59 +510,58 @@ plugtargetlist.append(env['BF_INSTALLDIR'] + os.sep + 'plugins' + os.sep + 'incl
plugininstall = []
for targetdir,srcfile in zip(plugtargetlist, pluglist):
- td, tf = os.path.split(targetdir)
- plugininstall.append(env.Install(dir=td, source=srcfile))
+ td, tf = os.path.split(targetdir)
+ plugininstall.append(env.Install(dir=td, source=srcfile))
textlist = []
texttargetlist = []
for tp, tn, tf in os.walk('release/text'):
- if 'CVS' in tn:
- tn.remove('CVS')
- if '.svn' in tn:
- tn.remove('.svn')
- for f in tf:
- textlist.append(tp+os.sep+f)
+ if 'CVS' in tn:
+ tn.remove('CVS')
+ if '.svn' in tn:
+ tn.remove('.svn')
+ for f in tf:
+ textlist.append(tp+os.sep+f)
textinstall = env.Install(dir=env['BF_INSTALLDIR'], source=textlist)
if env['OURPLATFORM']=='darwin':
- allinstall = [blenderinstall, plugininstall, textinstall]
+ allinstall = [blenderinstall, plugininstall, textinstall]
elif env['OURPLATFORM']=='linux2':
- allinstall = [blenderinstall, dotblenderinstall, scriptinstall, plugininstall, textinstall, iconinstall]
+ allinstall = [blenderinstall, dotblenderinstall, scriptinstall, plugininstall, textinstall, iconinstall]
else:
- allinstall = [blenderinstall, dotblenderinstall, scriptinstall, plugininstall, textinstall]
+ allinstall = [blenderinstall, dotblenderinstall, scriptinstall, plugininstall, textinstall]
if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw'):
- dllsources = ['${LCGDIR}/gettext/lib/gnu_gettext.dll',
- '${LCGDIR}/png/lib/libpng.dll',
- '#release/windows/extra/python25.zip',
- '#release/windows/extra/zlib.pyd',
- '${LCGDIR}/sdl/lib/SDL.dll',
- '${LCGDIR}/zlib/lib/zlib.dll',
- '${LCGDIR}/tiff/lib/libtiff.dll']
- if env['BF_DEBUG']:
- dllsources.append('${LCGDIR}/python/lib/${BF_PYTHON_LIB}_d.dll')
- else:
- dllsources.append('${LCGDIR}/python/lib/${BF_PYTHON_LIB}.dll')
- if env['OURPLATFORM'] == 'win32-mingw':
- dllsources += ['${LCGDIR}/pthreads/lib/pthreadGC2.dll']
- else:
- dllsources += ['${LCGDIR}/pthreads/lib/pthreadVC2.dll']
- if env['WITH_BF_ICONV']:
- dllsources += ['${LCGDIR}/iconv/lib/iconv.dll']
- if env['WITH_BF_FFMPEG']:
- dllsources += ['${LCGDIR}/ffmpeg/lib/avcodec-51.dll',
- '${LCGDIR}/ffmpeg/lib/avformat-52.dll',
- '${LCGDIR}/ffmpeg/lib/avdevice-52.dll',
- '${LCGDIR}/ffmpeg/lib/avutil-49.dll',
- '${LCGDIR}/ffmpeg/lib/libfaad-0.dll',
- '${LCGDIR}/ffmpeg/lib/libfaac-0.dll',
- '${LCGDIR}/ffmpeg/lib/libmp3lame-0.dll',
- '${LCGDIR}/ffmpeg/lib/libx264-59.dll',
- '${LCGDIR}/ffmpeg/lib/xvidcore.dll',
- '${LCGDIR}/ffmpeg/lib/swscale-0.dll']
- windlls = env.Install(dir=env['BF_INSTALLDIR'], source = dllsources)
- allinstall += windlls
+ dllsources = ['${LCGDIR}/gettext/lib/gnu_gettext.dll',
+ '${BF_PNG_LIBPATH}/libpng.dll',
+ '${BF_ZLIB_LIBPATH}/zlib.dll',
+ '${BF_TIFF_LIBPATH}/${BF_TIFF_LIB}.dll']
+ dllsources += ['${BF_PTHREADS_LIBPATH}/${BF_PTHREADS_LIB}.dll']
+ if env['WITH_BF_SDL']:
+ dllsources.append('${BF_SDL_LIBPATH}/SDL.dll')
+ if env['WITH_BF_PYTHON']:
+ dllsources.append('#release/windows/extra/python25.zip')
+ dllsources.append('#release/windows/extra/zlib.pyd')
+ if env['BF_DEBUG']:
+ dllsources.append('${BF_PYTHON_LIBPATH}/${BF_PYTHON_LIB}_d.dll')
+ else:
+ dllsources.append('${BF_PYTHON_LIBPATH}/${BF_PYTHON_LIB}.dll')
+ if env['WITH_BF_ICONV']:
+ dllsources += ['${BF_ICONV_LIBPATH}/iconv.dll']
+ if env['WITH_BF_FFMPEG']:
+ dllsources += ['${LCGDIR}/ffmpeg/lib/avcodec-51.dll',
+ '${LCGDIR}/ffmpeg/lib/avformat-52.dll',
+ '${LCGDIR}/ffmpeg/lib/avdevice-52.dll',
+ '${LCGDIR}/ffmpeg/lib/avutil-49.dll',
+ '${LCGDIR}/ffmpeg/lib/libfaad-0.dll',
+ '${LCGDIR}/ffmpeg/lib/libfaac-0.dll',
+ '${LCGDIR}/ffmpeg/lib/libmp3lame-0.dll',
+ '${LCGDIR}/ffmpeg/lib/libx264-59.dll',
+ '${LCGDIR}/ffmpeg/lib/xvidcore.dll',
+ '${LCGDIR}/ffmpeg/lib/swscale-0.dll']
+ windlls = env.Install(dir=env['BF_INSTALLDIR'], source = dllsources)
+ allinstall += windlls
installtarget = env.Alias('install', allinstall)
bininstalltarget = env.Alias('install-bin', blenderinstall)
@@ -558,12 +575,12 @@ if 'blender' in B.targets:
Depends(blenderexe,installtarget)
if env['WITH_BF_PLAYER']:
- blenderplayer = env.Alias('blenderplayer', B.program_list)
- Depends(blenderplayer,installtarget)
+ blenderplayer = env.Alias('blenderplayer', B.program_list)
+ Depends(blenderplayer,installtarget)
if not env['WITH_BF_GAMEENGINE']:
- blendernogame = env.Alias('blendernogame', B.program_list)
- Depends(blendernogame,installtarget)
+ blendernogame = env.Alias('blendernogame', B.program_list)
+ Depends(blendernogame,installtarget)
if 'blenderlite' in B.targets:
blenderlite = env.Alias('blenderlite', B.program_list)
@@ -574,7 +591,7 @@ Depends(nsiscmd, allinstall)
Default(B.program_list)
if not env['WITHOUT_BF_INSTALL']:
- Default(installtarget)
+ Default(installtarget)
#------------ RELEASE
# TODO: zipup the installation
@@ -584,6 +601,6 @@ if not env['WITHOUT_BF_INSTALL']:
#------------ EPYDOC
if env['WITH_BF_DOCS']:
- SConscript('source/blender/python/api2_2x/doc/SConscript')
- SConscript('source/gameengine/PyDoc/SConscript')
+ SConscript('source/blender/python/api2_2x/doc/SConscript')
+ SConscript('source/gameengine/PyDoc/SConscript')
diff --git a/config/linuxcross-config.py b/config/linuxcross-config.py
index 4c5f4859a6c..f3ac6d905f7 100644
--- a/config/linuxcross-config.py
+++ b/config/linuxcross-config.py
@@ -1,4 +1,4 @@
-LCGDIR = '../lib/windows'
+LCGDIR = '#../lib/windows'
LIBDIR = '${LCGDIR}'
WITH_BF_VERSE = False
@@ -101,6 +101,9 @@ BF_SOLID = '#extern/solid'
BF_SOLID_INC = '${BF_SOLID}'
BF_SOLID_LIB = 'extern_solid'
+BF_WINTAB = LIBDIR + '/wintab'
+BF_WINTAB_INC = '${BF_WINTAB}/INCLUDE'
+
# enable freetype2 support for text objects
BF_FREETYPE = LIBDIR + '/gcc/freetype'
BF_FREETYPE_INC = '${BF_FREETYPE}/include ${BF_FREETYPE}/include/freetype2'
diff --git a/config/win32-mingw-config.py b/config/win32-mingw-config.py
index 15bfce80f89..22666851f28 100644
--- a/config/win32-mingw-config.py
+++ b/config/win32-mingw-config.py
@@ -9,7 +9,7 @@ BF_PYTHON_VERSION = '2.5'
BF_PYTHON_INC = '${BF_PYTHON}/include/python${BF_PYTHON_VERSION}'
BF_PYTHON_BINARY = 'python'
BF_PYTHON_LIB = 'python25'
-BF_PYTHON_LIBPATH = '${BF_PYTHON}/lib'
+BF_PYTHON_LIBPATH = '${BF_PYTHON}/lib/lib25_vs2005'
WITH_BF_OPENAL = True
WITH_BF_STATICOPENAL = False
@@ -64,6 +64,8 @@ BF_PNG_LIBPATH = '${BF_PNG}/lib'
BF_TIFF = LIBDIR + '/tiff'
BF_TIFF_INC = '${BF_TIFF}/include'
+BF_TIFF_LIB = 'libtiff'
+BF_TIFF_LIBPATH = '${BF_TIFF}/lib'
WITH_BF_ZLIB = True
BF_ZLIB = LIBDIR + '/zlib'
diff --git a/config/win32-vc-config.py b/config/win32-vc-config.py
index 9a41f7ee557..fe51abe0a89 100644
--- a/config/win32-vc-config.py
+++ b/config/win32-vc-config.py
@@ -77,6 +77,8 @@ BF_PNG_LIBPATH = '${BF_PNG}/lib'
BF_TIFF = LIBDIR + '/tiff'
BF_TIFF_INC = '${BF_TIFF}/include'
+BF_TIFF_LIB = 'libtiff'
+BF_TIFF_LIBPATH = '${BF_TIFF}/lib'
WITH_BF_ZLIB = True
BF_ZLIB = LIBDIR + '/zlib'
diff --git a/doc/blender-scons.txt b/doc/blender-scons.txt
index f7ea7767441..016ba39fd09 100644
--- a/doc/blender-scons.txt
+++ b/doc/blender-scons.txt
@@ -26,8 +26,9 @@ $Id$
----------------
To build Blender with the SCons scripts you need a full Python
- install, version 2.4 or later (http://www.python.org) and a SCons
- installation, version v1.1.0 (http://www.scons.org).
+ install, version 2.4 or later (http://www.python.org). We already provide
+ a scons-local installation, which can be found in the scons/ subdirectory.
+ This document uses the scons-local installation for its examples.
Check from the page
http://www.blender.org/development/building-blender/getting-dependencies/
@@ -38,9 +39,14 @@ $Id$
In the base directory of the sources (from now on called $BLENDERHOME)
you'll see a file named SConstruct. This is the entry point for the
SCons build system. In a terminal, change to this directory. To just
- build, issue the command 'scons':
+ build, start the SCons entry script on Windows (will be used for the remainder
+ of this document):
- % scons
+ % python scons\scons.py
+
+ On a Unix-compatible system it would be
+
+ % python ./scons/scons.py
This will start the build process with default values. Depending
on your platform you may see colour in your output (non-Windows
@@ -49,8 +55,9 @@ $Id$
build are configured.
The build uses BF_BUILDDIR to build into and BF_INSTALLDIR to
- finally copy all needed files to get a proper setup. These
- variabbles have default values for every platform in
+ finally copy all needed files to get a proper setup. The BF_DOCDIR is
+ used to generate Blender Python documentation files to. These
+ variables have default values for every platform in
$BLENDERHOME/config/(platform)-config.py. After the build successfully
completes, you can find everything you need in BF_INSTALLDIR.
@@ -59,7 +66,7 @@ $Id$
As an extra dependency, you need the MoreInfo plugin too. The creation of
the installer is tied into the build process and can be triggered with:
- % scons nsis
+ % python scons\scons.py nsis
Configuring the build
@@ -76,20 +83,21 @@ $Id$
(TBD: add cygwin, solaris and freebsd support)
These files you will normally not change. If you need to override
- a default value, make a copy of the proper configuration to
- $BLENDERHOME/user-config.py. This file you can modify to your
- likings. Any value set here will override the ones from the
- (platform)-config.py.
+ a default value, make a file called $BLENDERHOME/user-config.py, and copy
+ settings from the config/(platform)-config.py that you want to change. Don't
+ copy the entire file (unless explicitely stated in the configuration file),
+ because you may not get updated options you don't change yourself, which may
+ result in build errors.
You can use BF_CONFIG argument to override the default user-config.py
check. This is just like the user-config.py, but just with another name:
- % scons BF_CONFIG=myownsettings
+ % python scons\scons.py BF_CONFIG=myownsettings
If you want to quickly test a new setting, you can give the option
also on the command-line:
- % scons BF_BUILDDIR=../mybuilddir WITH_BF_OPENEXR=0
+ % python scons\scons.py BF_BUILDDIR=../mybuilddir WITH_BF_OPENEXR=0
This command sets the build directory to BF_BUILDDIR and disables
OpenEXR support.
@@ -97,7 +105,7 @@ $Id$
If you need to know what can be set through the command-line, run
scons with -h:
- % scons -h
+ % python scons\scons.py -h
This command will print a long list with settable options and what
every option means. Many of the default values will be empty, and
@@ -118,11 +126,11 @@ $Id$
you need to see the full command-line for compiles, then you can
change that behaviour. Also the use of colours can be changed:
- % scons BF_FANCY=0
+ % python scons\scons.py BF_FANCY=0
This will disable the use of colours.
- % scons BF_QUIET=0
+ % python scons\scons.py BF_QUIET=0
This will give the old, noisy output. Every command-line per
compile is printed out in its full glory. This is very useful when
@@ -133,11 +141,11 @@ $Id$
Compiling Only Some Libraries
-----------------------------
- Scons now has support for specifying a list of libraries that are
+ Our implementation now has support for specifying a list of libraries that are
exclusively compiled, ignoring all other libraries. This is invoked
with the BF_QUICK arguments; for example:
- % scons BF_QUICK=src,bf_blenkernel
+ % python scons\scons.py BF_QUICK=src,bf_blenkernel
Note that this not the same as passing a list of folders as in the
makefile's "quicky" command. In Scons, all of Blender's code modules
@@ -157,7 +165,7 @@ $Id$
BF_QUICKDEBUG is similar to BF_QUICK:
- % scons BF_QUICKDEBUG=src,bf_blenkernel,some-other-lib
+ % python scons\scons.py BF_QUICKDEBUG=src,bf_blenkernel,some-other-lib
To use BF_DEBUG_LIBS, put something like the following in you user-config.py:
@@ -184,14 +192,8 @@ $Id$
On Windows with all of the three toolset installed you need to
specify what toolset to use
- % scons BF_TOOLSET=msvc
- % scons BF_TOOLSET=mingw
-
- If you have only the toolkit installed, you will also need to give
- BF_TOOLSET=mstoolkit on the command-line, to make sure everything is
- setup properly. Currently there is no good mechanism to automatically
- determine wether the found 'cl.exe' is from the toolkit or from a
- complete install.
+ % python scons\scons.py BF_TOOLSET=msvc
+ % python scons\scons.py BF_TOOLSET=mingw
LINUX and OS X
@@ -204,30 +206,26 @@ $Id$
Build Blender with the defaults:
- % scons
+ % python scons\scons.py
Build Blender, but disable OpenEXR support:
- % scons WITH_BF_OPENEXR=0
+ % python scons\scons.py WITH_BF_OPENEXR=0
Build Blender, enable debug symbols:
- % scons BF_DEBUG=1
+ % python scons\scons.py BF_DEBUG=1
Build Blender, install to different directory:
- % scons BF_INSTALLDIR=/tmp/testbuild
+ % python scons\scons.py BF_INSTALLDIR=../myown/installdir
- Build Blender in /tmp/obj and install to /usr/local:
+ Build Blender in ../myown/builddir and install to ../myown/installdir:
- % scons BF_BUILDDIR=/tmp/obj BF_INSTALLDIR=/usr/local
+ % python scons\scons.py BF_BUILDDIR=../myown/builddir BF_INSTALLDIR=../myown/installdir
Clean BF_BUILDDIR:
- % scons clean
-
- Clean out the installed files:
-
- % scons -c
+ % python scons\scons.py clean
/Nathan Letwory (jesterKing)
diff --git a/extern/bFTGL/make/msvc_9_0/ftgl_static_lib.vcproj b/extern/bFTGL/make/msvc_9_0/ftgl_static_lib.vcproj
new file mode 100644
index 00000000000..eefbecb3653
--- /dev/null
+++ b/extern/bFTGL/make/msvc_9_0/ftgl_static_lib.vcproj
@@ -0,0 +1,537 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/extern/bullet2/make/msvc_9_0/Bullet.vcproj b/extern/bullet2/make/msvc_9_0/Bullet.vcproj
new file mode 100644
index 00000000000..d22b98efade
--- /dev/null
+++ b/extern/bullet2/make/msvc_9_0/Bullet.vcproj
@@ -0,0 +1,1497 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/extern/glew/make/msvc_9_0/glew.vcproj b/extern/glew/make/msvc_9_0/glew.vcproj
new file mode 100644
index 00000000000..f9d8df478ca
--- /dev/null
+++ b/extern/glew/make/msvc_9_0/glew.vcproj
@@ -0,0 +1,196 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/extern/make/msvc_9_0/build_install_all.vcproj b/extern/make/msvc_9_0/build_install_all.vcproj
new file mode 100644
index 00000000000..523b1c5d0a3
--- /dev/null
+++ b/extern/make/msvc_9_0/build_install_all.vcproj
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/extern/qhull/make/msvc_9_0/qhull.vcproj b/extern/qhull/make/msvc_9_0/qhull.vcproj
new file mode 100644
index 00000000000..fe5b3e806b6
--- /dev/null
+++ b/extern/qhull/make/msvc_9_0/qhull.vcproj
@@ -0,0 +1,877 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/extern/solid/make/msvc_9_0/broad/broad.vcproj b/extern/solid/make/msvc_9_0/broad/broad.vcproj
new file mode 100644
index 00000000000..c58cb08b2c3
--- /dev/null
+++ b/extern/solid/make/msvc_9_0/broad/broad.vcproj
@@ -0,0 +1,369 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/extern/solid/make/msvc_9_0/complex/complex.vcproj b/extern/solid/make/msvc_9_0/complex/complex.vcproj
new file mode 100644
index 00000000000..1828c489fc6
--- /dev/null
+++ b/extern/solid/make/msvc_9_0/complex/complex.vcproj
@@ -0,0 +1,355 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/extern/solid/make/msvc_9_0/convex/convex.vcproj b/extern/solid/make/msvc_9_0/convex/convex.vcproj
new file mode 100644
index 00000000000..cb35a0ea199
--- /dev/null
+++ b/extern/solid/make/msvc_9_0/convex/convex.vcproj
@@ -0,0 +1,469 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/extern/solid/make/msvc_9_0/solid.vcproj b/extern/solid/make/msvc_9_0/solid.vcproj
new file mode 100644
index 00000000000..ed81c374696
--- /dev/null
+++ b/extern/solid/make/msvc_9_0/solid.vcproj
@@ -0,0 +1,595 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/extern/verse/make/msvc_9_0/libverse.vcproj b/extern/verse/make/msvc_9_0/libverse.vcproj
new file mode 100644
index 00000000000..cbe236d5b55
--- /dev/null
+++ b/extern/verse/make/msvc_9_0/libverse.vcproj
@@ -0,0 +1,368 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/extern/verse/make/msvc_9_0/verse.vcproj b/extern/verse/make/msvc_9_0/verse.vcproj
new file mode 100644
index 00000000000..39363156181
--- /dev/null
+++ b/extern/verse/make/msvc_9_0/verse.vcproj
@@ -0,0 +1,669 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/intern/SoundSystem/intern/SND_Utils.cpp b/intern/SoundSystem/intern/SND_Utils.cpp
index 78115807970..26ce106a24e 100644
--- a/intern/SoundSystem/intern/SND_Utils.cpp
+++ b/intern/SoundSystem/intern/SND_Utils.cpp
@@ -40,8 +40,13 @@
#include
#include
-#if defined(WIN32)
+#if defined(_WIN32)
#include
+#define open _open
+#define read _read
+#define close _close
+#define write _write
+#define lseek _lseek
#else
#include
#endif
diff --git a/intern/SoundSystem/make/msvc_9_0/SoundSystem.vcproj b/intern/SoundSystem/make/msvc_9_0/SoundSystem.vcproj
new file mode 100644
index 00000000000..bd75fe88d43
--- /dev/null
+++ b/intern/SoundSystem/make/msvc_9_0/SoundSystem.vcproj
@@ -0,0 +1,447 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/intern/SoundSystem/make/msvc_9_0/dummy/DummySoundSystem.vcproj b/intern/SoundSystem/make/msvc_9_0/dummy/DummySoundSystem.vcproj
new file mode 100644
index 00000000000..2109d92d430
--- /dev/null
+++ b/intern/SoundSystem/make/msvc_9_0/dummy/DummySoundSystem.vcproj
@@ -0,0 +1,343 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/intern/SoundSystem/make/msvc_9_0/openal/OpenALSoundSystem.vcproj b/intern/SoundSystem/make/msvc_9_0/openal/OpenALSoundSystem.vcproj
new file mode 100644
index 00000000000..5593f00cb2b
--- /dev/null
+++ b/intern/SoundSystem/make/msvc_9_0/openal/OpenALSoundSystem.vcproj
@@ -0,0 +1,351 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/intern/bmfont/make/msvc_9_0/bmfont.vcproj b/intern/bmfont/make/msvc_9_0/bmfont.vcproj
new file mode 100644
index 00000000000..91d6e6afc1a
--- /dev/null
+++ b/intern/bmfont/make/msvc_9_0/bmfont.vcproj
@@ -0,0 +1,413 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/intern/boolop/make/msvc_9_0/boolop.vcproj b/intern/boolop/make/msvc_9_0/boolop.vcproj
new file mode 100644
index 00000000000..7fe83962695
--- /dev/null
+++ b/intern/boolop/make/msvc_9_0/boolop.vcproj
@@ -0,0 +1,487 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/intern/bsp/make/msvc_9_0/bsplib.vcproj b/intern/bsp/make/msvc_9_0/bsplib.vcproj
new file mode 100644
index 00000000000..a1b16d5b93f
--- /dev/null
+++ b/intern/bsp/make/msvc_9_0/bsplib.vcproj
@@ -0,0 +1,371 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/intern/container/make/msvc_9_0/container.vcproj b/intern/container/make/msvc_9_0/container.vcproj
new file mode 100644
index 00000000000..2b40571672d
--- /dev/null
+++ b/intern/container/make/msvc_9_0/container.vcproj
@@ -0,0 +1,387 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/intern/decimation/make/msvc_9_0/decimation.vcproj b/intern/decimation/make/msvc_9_0/decimation.vcproj
new file mode 100644
index 00000000000..7d58bf1f4c6
--- /dev/null
+++ b/intern/decimation/make/msvc_9_0/decimation.vcproj
@@ -0,0 +1,423 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/intern/elbeem/SConscript b/intern/elbeem/SConscript
index f1c09423f04..dc8d84ef5a0 100644
--- a/intern/elbeem/SConscript
+++ b/intern/elbeem/SConscript
@@ -12,7 +12,7 @@ if env['WITH_BF_OPENMP']:
if env['OURPLATFORM']=='win32-vc':
defs += ' USE_MSVC6FIXES'
-incs = env['BF_PNG_INC'] + ' ' + env['BF_ZLIB_INC'] + ' ' +env['BF_SDL_INC']
+incs = env['BF_PNG_INC'] + ' ' + env['BF_ZLIB_INC']
incs += ' extern '
env.BlenderLib ('bf_elbeem', sources, Split(incs), Split(defs), libtype='blender', priority=0 )
diff --git a/intern/elbeem/make/msvc_9_0/elbeem.vcproj b/intern/elbeem/make/msvc_9_0/elbeem.vcproj
new file mode 100644
index 00000000000..4108e09799d
--- /dev/null
+++ b/intern/elbeem/make/msvc_9_0/elbeem.vcproj
@@ -0,0 +1,524 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/intern/ghost/make/msvc_9_0/ghost.vcproj b/intern/ghost/make/msvc_9_0/ghost.vcproj
new file mode 100644
index 00000000000..fa128786a90
--- /dev/null
+++ b/intern/ghost/make/msvc_9_0/ghost.vcproj
@@ -0,0 +1,539 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/intern/guardedalloc/make/msvc_9_0/guardedalloc.vcproj b/intern/guardedalloc/make/msvc_9_0/guardedalloc.vcproj
new file mode 100644
index 00000000000..d59b80f7b62
--- /dev/null
+++ b/intern/guardedalloc/make/msvc_9_0/guardedalloc.vcproj
@@ -0,0 +1,369 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/intern/iksolver/make/msvc_9_0/iksolver.vcproj b/intern/iksolver/make/msvc_9_0/iksolver.vcproj
new file mode 100644
index 00000000000..0e87556380b
--- /dev/null
+++ b/intern/iksolver/make/msvc_9_0/iksolver.vcproj
@@ -0,0 +1,487 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/intern/make/msvc_9_0/INT_build_install_all.vcproj b/intern/make/msvc_9_0/INT_build_install_all.vcproj
new file mode 100644
index 00000000000..dbb58134b0f
--- /dev/null
+++ b/intern/make/msvc_9_0/INT_build_install_all.vcproj
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/intern/memutil/make/msvc_9_0/memutil.vcproj b/intern/memutil/make/msvc_9_0/memutil.vcproj
new file mode 100644
index 00000000000..6f642fb16bc
--- /dev/null
+++ b/intern/memutil/make/msvc_9_0/memutil.vcproj
@@ -0,0 +1,385 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/intern/moto/make/msvc_9_0/moto.vcproj b/intern/moto/make/msvc_9_0/moto.vcproj
new file mode 100644
index 00000000000..b33bb165a75
--- /dev/null
+++ b/intern/moto/make/msvc_9_0/moto.vcproj
@@ -0,0 +1,713 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/intern/opennl/make/msvc_9_0/opennl.vcproj b/intern/opennl/make/msvc_9_0/opennl.vcproj
new file mode 100644
index 00000000000..28051a491d2
--- /dev/null
+++ b/intern/opennl/make/msvc_9_0/opennl.vcproj
@@ -0,0 +1,993 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/intern/string/make/msvc_9_0/string.vcproj b/intern/string/make/msvc_9_0/string.vcproj
new file mode 100644
index 00000000000..16df974ff9c
--- /dev/null
+++ b/intern/string/make/msvc_9_0/string.vcproj
@@ -0,0 +1,355 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc7/gameengine/videotexture/TEX_Video.vcproj b/projectfiles_vc7/gameengine/videotexture/TEX_Video.vcproj
new file mode 100644
index 00000000000..0c35bc62e99
--- /dev/null
+++ b/projectfiles_vc7/gameengine/videotexture/TEX_Video.vcproj
@@ -0,0 +1,226 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/blender/BLO_readblenfile/BLO_readblenfile.vcproj b/projectfiles_vc9/blender/BLO_readblenfile/BLO_readblenfile.vcproj
new file mode 100644
index 00000000000..07afe8c5b30
--- /dev/null
+++ b/projectfiles_vc9/blender/BLO_readblenfile/BLO_readblenfile.vcproj
@@ -0,0 +1,489 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/blender/BPY_python/BPY_python.vcproj b/projectfiles_vc9/blender/BPY_python/BPY_python.vcproj
new file mode 100644
index 00000000000..2ffc9afa67c
--- /dev/null
+++ b/projectfiles_vc9/blender/BPY_python/BPY_python.vcproj
@@ -0,0 +1,906 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/blender/avi/BL_avi.vcproj b/projectfiles_vc9/blender/avi/BL_avi.vcproj
new file mode 100644
index 00000000000..e92139fa61a
--- /dev/null
+++ b/projectfiles_vc9/blender/avi/BL_avi.vcproj
@@ -0,0 +1,536 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/blender/blender.sln b/projectfiles_vc9/blender/blender.sln
new file mode 100644
index 00000000000..4a12fcb2963
--- /dev/null
+++ b/projectfiles_vc9/blender/blender.sln
@@ -0,0 +1,820 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "blender", "blender.vcproj", "{F78B7FC9-DE32-465E-9F26-BB0B6B7A2EAF}"
+ ProjectSection(ProjectDependencies) = postProject
+ {E5F2F004-C704-4DCC-A08F-6EB1E38EAB9F} = {E5F2F004-C704-4DCC-A08F-6EB1E38EAB9F}
+ {6E24BF09-9653-4166-A871-F65CC9E98A9B} = {6E24BF09-9653-4166-A871-F65CC9E98A9B}
+ {F9850C15-FF0A-429E-9D47-89FB433C9BD8} = {F9850C15-FF0A-429E-9D47-89FB433C9BD8}
+ {A90C4918-4B21-4277-93BD-AF65F30951D9} = {A90C4918-4B21-4277-93BD-AF65F30951D9}
+ {FB88301F-F725-401B-ACD7-D2ABBF333B71} = {FB88301F-F725-401B-ACD7-D2ABBF333B71}
+ {98330220-47A6-42E0-9DE4-AD0FF5D204D6} = {98330220-47A6-42E0-9DE4-AD0FF5D204D6}
+ {BAAE3F2B-BCF8-4E84-B8BA-CFB2D64945FE} = {BAAE3F2B-BCF8-4E84-B8BA-CFB2D64945FE}
+ {C66F722C-46BE-40C9-ABAE-2EAC7A697EB8} = {C66F722C-46BE-40C9-ABAE-2EAC7A697EB8}
+ {9625642D-6F20-4FB6-A089-BE7441B223E3} = {9625642D-6F20-4FB6-A089-BE7441B223E3}
+ {E645CC32-4823-463E-82F0-46ADDE664018} = {E645CC32-4823-463E-82F0-46ADDE664018}
+ {FAF46346-65CC-4DB2-85C4-B99826F79D0C} = {FAF46346-65CC-4DB2-85C4-B99826F79D0C}
+ {51FB3D48-2467-4BFA-A321-D848252B437E} = {51FB3D48-2467-4BFA-A321-D848252B437E}
+ {FFD3C64A-30E2-4BC7-BC8F-51818C320400} = {FFD3C64A-30E2-4BC7-BC8F-51818C320400}
+ {31628053-825D-4C06-8A21-D13883489718} = {31628053-825D-4C06-8A21-D13883489718}
+ {EADC3C5A-6C51-4F03-8038-1553E7D7F740} = {EADC3C5A-6C51-4F03-8038-1553E7D7F740}
+ {B093415D-C0F6-4E76-8F5A-6BC1917BCE9E} = {B093415D-C0F6-4E76-8F5A-6BC1917BCE9E}
+ {DB6BE55D-B6D9-494D-856A-8764FF7BA91D} = {DB6BE55D-B6D9-494D-856A-8764FF7BA91D}
+ {6461F05D-4698-47AB-A8E8-1CA2ACC9948B} = {6461F05D-4698-47AB-A8E8-1CA2ACC9948B}
+ {0A73055E-4DED-40CD-9F72-9093ED3EEC7E} = {0A73055E-4DED-40CD-9F72-9093ED3EEC7E}
+ {09222F5E-1625-4FF3-A89A-384D16875EE5} = {09222F5E-1625-4FF3-A89A-384D16875EE5}
+ {531D4862-D0E7-4B9B-A0B6-B3A6A25B547A} = {531D4862-D0E7-4B9B-A0B6-B3A6A25B547A}
+ {E013786A-9575-4F34-81B2-33290357EE87} = {E013786A-9575-4F34-81B2-33290357EE87}
+ {D696C86B-0B53-4471-A50D-5B983A6FA4AD} = {D696C86B-0B53-4471-A50D-5B983A6FA4AD}
+ {138DD16C-CC78-4F6C-A898-C8DA68D89067} = {138DD16C-CC78-4F6C-A898-C8DA68D89067}
+ {415BFD6E-64CF-422B-AF88-C07F040A7292} = {415BFD6E-64CF-422B-AF88-C07F040A7292}
+ {106AE171-0083-41D6-A949-20DB0E8DC251} = {106AE171-0083-41D6-A949-20DB0E8DC251}
+ {670EC17A-0548-4BBF-A27B-636C7C188139} = {670EC17A-0548-4BBF-A27B-636C7C188139}
+ {4C3AB78A-52CA-4276-A041-39776E52D8C8} = {4C3AB78A-52CA-4276-A041-39776E52D8C8}
+ {E784098D-3ED8-433A-9353-9679415DDDC5} = {E784098D-3ED8-433A-9353-9679415DDDC5}
+ {6B801390-5F95-4F07-81A7-97FBA046AACC} = {6B801390-5F95-4F07-81A7-97FBA046AACC}
+ {CAE37E91-6570-43AC-A4B4-7A37A4B0FC94} = {CAE37E91-6570-43AC-A4B4-7A37A4B0FC94}
+ {76D90B92-ECC7-409C-9F98-A8814B90F3C0} = {76D90B92-ECC7-409C-9F98-A8814B90F3C0}
+ {F90BD995-FFA4-4B18-81E8-FA4322C939E8} = {F90BD995-FFA4-4B18-81E8-FA4322C939E8}
+ {BB6AA598-B336-4F8B-9DF9-8CAE7BE71C23} = {BB6AA598-B336-4F8B-9DF9-8CAE7BE71C23}
+ {8154A59A-CAED-403D-AB94-BC4E7C032666} = {8154A59A-CAED-403D-AB94-BC4E7C032666}
+ {3648FB9A-C36F-43AB-AED0-1F1361E67FC7} = {3648FB9A-C36F-43AB-AED0-1F1361E67FC7}
+ {542A9FA1-B7FF-441C-AE15-054DB31D3488} = {542A9FA1-B7FF-441C-AE15-054DB31D3488}
+ {E109F1A5-FDD3-4F56-A1C4-96867EEA4C5B} = {E109F1A5-FDD3-4F56-A1C4-96867EEA4C5B}
+ {213356A9-3A1F-41DA-9819-1297BCD17DEE} = {213356A9-3A1F-41DA-9819-1297BCD17DEE}
+ {727F90AC-ABE6-40BF-8937-C2F2F1D13DEA} = {727F90AC-ABE6-40BF-8937-C2F2F1D13DEA}
+ {BAC615B0-F1AF-418B-8D23-A10FD8870D6A} = {BAC615B0-F1AF-418B-8D23-A10FD8870D6A}
+ {A1CCF5B0-08E1-4F00-B417-8BFAC34E5E90} = {A1CCF5B0-08E1-4F00-B417-8BFAC34E5E90}
+ {E90C7BC2-CF30-4A60-A8F2-0050D592E358} = {E90C7BC2-CF30-4A60-A8F2-0050D592E358}
+ {8B8D4FC3-3234-4E54-8376-5AB83D00D164} = {8B8D4FC3-3234-4E54-8376-5AB83D00D164}
+ {9991A3C3-83FE-4AFE-9E18-9D01CB57E879} = {9991A3C3-83FE-4AFE-9E18-9D01CB57E879}
+ {4B6AFCC5-968C-424A-8F20-76E41B3BEF74} = {4B6AFCC5-968C-424A-8F20-76E41B3BEF74}
+ {0112CAD5-3584-412A-A2E5-1315A00437B4} = {0112CAD5-3584-412A-A2E5-1315A00437B4}
+ {EB75F4D6-2970-4A3A-8D99-2BAD7201C0E9} = {EB75F4D6-2970-4A3A-8D99-2BAD7201C0E9}
+ {2AE0D2D9-6A7A-44DE-9EFF-99C9E3257B49} = {2AE0D2D9-6A7A-44DE-9EFF-99C9E3257B49}
+ {5A2EA6DC-1A53-4E87-9166-52870CE3B4EA} = {5A2EA6DC-1A53-4E87-9166-52870CE3B4EA}
+ {E86B7BDE-C33C-4E55-9433-E74C141D7538} = {E86B7BDE-C33C-4E55-9433-E74C141D7538}
+ {32CC75E2-EE85-45E6-8E3D-513F58464F43} = {32CC75E2-EE85-45E6-8E3D-513F58464F43}
+ {9A307EE5-CD77-47BC-BD87-62508C7E19D8} = {9A307EE5-CD77-47BC-BD87-62508C7E19D8}
+ {AB590CED-F71F-4A17-A89B-18583ECD633D} = {AB590CED-F71F-4A17-A89B-18583ECD633D}
+ {B83C6BED-11EC-46C8-AFFA-121EEDE94373} = {B83C6BED-11EC-46C8-AFFA-121EEDE94373}
+ {1CC733F1-6AB5-4904-8F63-C08C46B79DD9} = {1CC733F1-6AB5-4904-8F63-C08C46B79DD9}
+ {B789C2F3-279E-4A85-8F0A-7F7AC068E598} = {B789C2F3-279E-4A85-8F0A-7F7AC068E598}
+ {524264F4-DF21-4B79-847F-E7CA643ECD0B} = {524264F4-DF21-4B79-847F-E7CA643ECD0B}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BKE_blenkernel", "blenkernel\BKE_blenkernel.vcproj", "{CAE37E91-6570-43AC-A4B4-7A37A4B0FC94}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BLI_blenlib", "blenlib\BLI_blenlib.vcproj", "{31628053-825D-4C06-8A21-D13883489718}"
+ ProjectSection(ProjectDependencies) = postProject
+ {02110D03-59DB-4571-8787-72B3C03B2F2D} = {02110D03-59DB-4571-8787-72B3C03B2F2D}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BLO_loader", "loader\BLO_loader.vcproj", "{E5F2F004-C704-4DCC-A08F-6EB1E38EAB9F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BLO_readblenfile", "BLO_readblenfile\BLO_readblenfile.vcproj", "{DB6BE55D-B6D9-494D-856A-8764FF7BA91D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BL_avi", "avi\BL_avi.vcproj", "{9A307EE5-CD77-47BC-BD87-62508C7E19D8}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BL_imbuf", "imbuf\BL_imbuf.vcproj", "{415BFD6E-64CF-422B-AF88-C07F040A7292}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BL_src", "src\BL_src.vcproj", "{FB88301F-F725-401B-ACD7-D2ABBF333B71}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BPY_python", "BPY_python\BPY_python.vcproj", "{5A2EA6DC-1A53-4E87-9166-52870CE3B4EA}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BRA_radiosity", "radiosity\BRA_radiosity.vcproj", "{2AE0D2D9-6A7A-44DE-9EFF-99C9E3257B49}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BRE_render", "render\BRE_render.vcproj", "{106AE171-0083-41D6-A949-20DB0E8DC251}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DNA_makesdna", "makesdna\DNA_makesdna.vcproj", "{E013786A-9575-4F34-81B2-33290357EE87}"
+ ProjectSection(ProjectDependencies) = postProject
+ {31628053-825D-4C06-8A21-D13883489718} = {31628053-825D-4C06-8A21-D13883489718}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EXP_expressions", "..\gameengine\expression\EXP_expressions.vcproj", "{EADC3C5A-6C51-4F03-8038-1553E7D7F740}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FTF_ftfont", "ftfont\FTF_ftfont.vcproj", "{A1CCF5B0-08E1-4F00-B417-8BFAC34E5E90}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GP_axctl", "..\gameengine\gameplayer\axctl\GP_axctl.vcproj", "{DF25E6F2-780C-438B-8AAD-D10CF8B3820A}"
+ ProjectSection(ProjectDependencies) = postProject
+ {E5F2F004-C704-4DCC-A08F-6EB1E38EAB9F} = {E5F2F004-C704-4DCC-A08F-6EB1E38EAB9F}
+ {6E24BF09-9653-4166-A871-F65CC9E98A9B} = {6E24BF09-9653-4166-A871-F65CC9E98A9B}
+ {BAAE3F2B-BCF8-4E84-B8BA-CFB2D64945FE} = {BAAE3F2B-BCF8-4E84-B8BA-CFB2D64945FE}
+ {9625642D-6F20-4FB6-A089-BE7441B223E3} = {9625642D-6F20-4FB6-A089-BE7441B223E3}
+ {E645CC32-4823-463E-82F0-46ADDE664018} = {E645CC32-4823-463E-82F0-46ADDE664018}
+ {51FB3D48-2467-4BFA-A321-D848252B437E} = {51FB3D48-2467-4BFA-A321-D848252B437E}
+ {31628053-825D-4C06-8A21-D13883489718} = {31628053-825D-4C06-8A21-D13883489718}
+ {EADC3C5A-6C51-4F03-8038-1553E7D7F740} = {EADC3C5A-6C51-4F03-8038-1553E7D7F740}
+ {DB6BE55D-B6D9-494D-856A-8764FF7BA91D} = {DB6BE55D-B6D9-494D-856A-8764FF7BA91D}
+ {0A73055E-4DED-40CD-9F72-9093ED3EEC7E} = {0A73055E-4DED-40CD-9F72-9093ED3EEC7E}
+ {09222F5E-1625-4FF3-A89A-384D16875EE5} = {09222F5E-1625-4FF3-A89A-384D16875EE5}
+ {E013786A-9575-4F34-81B2-33290357EE87} = {E013786A-9575-4F34-81B2-33290357EE87}
+ {415BFD6E-64CF-422B-AF88-C07F040A7292} = {415BFD6E-64CF-422B-AF88-C07F040A7292}
+ {4C3AB78A-52CA-4276-A041-39776E52D8C8} = {4C3AB78A-52CA-4276-A041-39776E52D8C8}
+ {6B801390-5F95-4F07-81A7-97FBA046AACC} = {6B801390-5F95-4F07-81A7-97FBA046AACC}
+ {CAE37E91-6570-43AC-A4B4-7A37A4B0FC94} = {CAE37E91-6570-43AC-A4B4-7A37A4B0FC94}
+ {F90BD995-FFA4-4B18-81E8-FA4322C939E8} = {F90BD995-FFA4-4B18-81E8-FA4322C939E8}
+ {BB6AA598-B336-4F8B-9DF9-8CAE7BE71C23} = {BB6AA598-B336-4F8B-9DF9-8CAE7BE71C23}
+ {3648FB9A-C36F-43AB-AED0-1F1361E67FC7} = {3648FB9A-C36F-43AB-AED0-1F1361E67FC7}
+ {D8ABD6A5-1B36-4D62-934E-B5C6801130B0} = {D8ABD6A5-1B36-4D62-934E-B5C6801130B0}
+ {E109F1A5-FDD3-4F56-A1C4-96867EEA4C5B} = {E109F1A5-FDD3-4F56-A1C4-96867EEA4C5B}
+ {727F90AC-ABE6-40BF-8937-C2F2F1D13DEA} = {727F90AC-ABE6-40BF-8937-C2F2F1D13DEA}
+ {E90C7BC2-CF30-4A60-A8F2-0050D592E358} = {E90C7BC2-CF30-4A60-A8F2-0050D592E358}
+ {32CC75E2-EE85-45E6-8E3D-513F58464F43} = {32CC75E2-EE85-45E6-8E3D-513F58464F43}
+ {9A307EE5-CD77-47BC-BD87-62508C7E19D8} = {9A307EE5-CD77-47BC-BD87-62508C7E19D8}
+ {AB590CED-F71F-4A17-A89B-18583ECD633D} = {AB590CED-F71F-4A17-A89B-18583ECD633D}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GP_common", "..\gameengine\gameplayer\common\GP_common.vcproj", "{D8ABD6A5-1B36-4D62-934E-B5C6801130B0}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "blenderplayer", "..\gameengine\gameplayer\ghost\GP_ghost.vcproj", "{3D310C60-6771-48E4-BCCA-D2718CDED898}"
+ ProjectSection(ProjectDependencies) = postProject
+ {02110D03-59DB-4571-8787-72B3C03B2F2D} = {02110D03-59DB-4571-8787-72B3C03B2F2D}
+ {E5F2F004-C704-4DCC-A08F-6EB1E38EAB9F} = {E5F2F004-C704-4DCC-A08F-6EB1E38EAB9F}
+ {6E24BF09-9653-4166-A871-F65CC9E98A9B} = {6E24BF09-9653-4166-A871-F65CC9E98A9B}
+ {98330220-47A6-42E0-9DE4-AD0FF5D204D6} = {98330220-47A6-42E0-9DE4-AD0FF5D204D6}
+ {BAAE3F2B-BCF8-4E84-B8BA-CFB2D64945FE} = {BAAE3F2B-BCF8-4E84-B8BA-CFB2D64945FE}
+ {C66F722C-46BE-40C9-ABAE-2EAC7A697EB8} = {C66F722C-46BE-40C9-ABAE-2EAC7A697EB8}
+ {9625642D-6F20-4FB6-A089-BE7441B223E3} = {9625642D-6F20-4FB6-A089-BE7441B223E3}
+ {E645CC32-4823-463E-82F0-46ADDE664018} = {E645CC32-4823-463E-82F0-46ADDE664018}
+ {FAF46346-65CC-4DB2-85C4-B99826F79D0C} = {FAF46346-65CC-4DB2-85C4-B99826F79D0C}
+ {51FB3D48-2467-4BFA-A321-D848252B437E} = {51FB3D48-2467-4BFA-A321-D848252B437E}
+ {FFD3C64A-30E2-4BC7-BC8F-51818C320400} = {FFD3C64A-30E2-4BC7-BC8F-51818C320400}
+ {31628053-825D-4C06-8A21-D13883489718} = {31628053-825D-4C06-8A21-D13883489718}
+ {EADC3C5A-6C51-4F03-8038-1553E7D7F740} = {EADC3C5A-6C51-4F03-8038-1553E7D7F740}
+ {DB6BE55D-B6D9-494D-856A-8764FF7BA91D} = {DB6BE55D-B6D9-494D-856A-8764FF7BA91D}
+ {0A73055E-4DED-40CD-9F72-9093ED3EEC7E} = {0A73055E-4DED-40CD-9F72-9093ED3EEC7E}
+ {09222F5E-1625-4FF3-A89A-384D16875EE5} = {09222F5E-1625-4FF3-A89A-384D16875EE5}
+ {531D4862-D0E7-4B9B-A0B6-B3A6A25B547A} = {531D4862-D0E7-4B9B-A0B6-B3A6A25B547A}
+ {E013786A-9575-4F34-81B2-33290357EE87} = {E013786A-9575-4F34-81B2-33290357EE87}
+ {D696C86B-0B53-4471-A50D-5B983A6FA4AD} = {D696C86B-0B53-4471-A50D-5B983A6FA4AD}
+ {138DD16C-CC78-4F6C-A898-C8DA68D89067} = {138DD16C-CC78-4F6C-A898-C8DA68D89067}
+ {415BFD6E-64CF-422B-AF88-C07F040A7292} = {415BFD6E-64CF-422B-AF88-C07F040A7292}
+ {670EC17A-0548-4BBF-A27B-636C7C188139} = {670EC17A-0548-4BBF-A27B-636C7C188139}
+ {4C3AB78A-52CA-4276-A041-39776E52D8C8} = {4C3AB78A-52CA-4276-A041-39776E52D8C8}
+ {6B801390-5F95-4F07-81A7-97FBA046AACC} = {6B801390-5F95-4F07-81A7-97FBA046AACC}
+ {CAE37E91-6570-43AC-A4B4-7A37A4B0FC94} = {CAE37E91-6570-43AC-A4B4-7A37A4B0FC94}
+ {76D90B92-ECC7-409C-9F98-A8814B90F3C0} = {76D90B92-ECC7-409C-9F98-A8814B90F3C0}
+ {9C71A793-C177-4CAB-8EC5-923D500B39F8} = {9C71A793-C177-4CAB-8EC5-923D500B39F8}
+ {F90BD995-FFA4-4B18-81E8-FA4322C939E8} = {F90BD995-FFA4-4B18-81E8-FA4322C939E8}
+ {BB6AA598-B336-4F8B-9DF9-8CAE7BE71C23} = {BB6AA598-B336-4F8B-9DF9-8CAE7BE71C23}
+ {3648FB9A-C36F-43AB-AED0-1F1361E67FC7} = {3648FB9A-C36F-43AB-AED0-1F1361E67FC7}
+ {542A9FA1-B7FF-441C-AE15-054DB31D3488} = {542A9FA1-B7FF-441C-AE15-054DB31D3488}
+ {D8ABD6A5-1B36-4D62-934E-B5C6801130B0} = {D8ABD6A5-1B36-4D62-934E-B5C6801130B0}
+ {E109F1A5-FDD3-4F56-A1C4-96867EEA4C5B} = {E109F1A5-FDD3-4F56-A1C4-96867EEA4C5B}
+ {213356A9-3A1F-41DA-9819-1297BCD17DEE} = {213356A9-3A1F-41DA-9819-1297BCD17DEE}
+ {727F90AC-ABE6-40BF-8937-C2F2F1D13DEA} = {727F90AC-ABE6-40BF-8937-C2F2F1D13DEA}
+ {BAC615B0-F1AF-418B-8D23-A10FD8870D6A} = {BAC615B0-F1AF-418B-8D23-A10FD8870D6A}
+ {E90C7BC2-CF30-4A60-A8F2-0050D592E358} = {E90C7BC2-CF30-4A60-A8F2-0050D592E358}
+ {8B8D4FC3-3234-4E54-8376-5AB83D00D164} = {8B8D4FC3-3234-4E54-8376-5AB83D00D164}
+ {4B6AFCC5-968C-424A-8F20-76E41B3BEF74} = {4B6AFCC5-968C-424A-8F20-76E41B3BEF74}
+ {5A2EA6DC-1A53-4E87-9166-52870CE3B4EA} = {5A2EA6DC-1A53-4E87-9166-52870CE3B4EA}
+ {E86B7BDE-C33C-4E55-9433-E74C141D7538} = {E86B7BDE-C33C-4E55-9433-E74C141D7538}
+ {32CC75E2-EE85-45E6-8E3D-513F58464F43} = {32CC75E2-EE85-45E6-8E3D-513F58464F43}
+ {9A307EE5-CD77-47BC-BD87-62508C7E19D8} = {9A307EE5-CD77-47BC-BD87-62508C7E19D8}
+ {AB590CED-F71F-4A17-A89B-18583ECD633D} = {AB590CED-F71F-4A17-A89B-18583ECD633D}
+ {1CC733F1-6AB5-4904-8F63-C08C46B79DD9} = {1CC733F1-6AB5-4904-8F63-C08C46B79DD9}
+ {B789C2F3-279E-4A85-8F0A-7F7AC068E598} = {B789C2F3-279E-4A85-8F0A-7F7AC068E598}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "KX_blenderhook", "..\gameengine\blenderhook\KX_blenderhook.vcproj", "{8154A59A-CAED-403D-AB94-BC4E7C032666}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "KX_converter", "..\gameengine\converter\KX_converter.vcproj", "{F90BD995-FFA4-4B18-81E8-FA4322C939E8}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "KX_ketsji", "..\gameengine\ketsji\KX_ketsji.vcproj", "{E645CC32-4823-463E-82F0-46ADDE664018}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "KX_network", "..\gameengine\ketsji\network\KX_network.vcproj", "{6E24BF09-9653-4166-A871-F65CC9E98A9B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NG_loopbacknetwork", "..\gameengine\network\loopbacknetwork\NG_loopbacknetwork.vcproj", "{6B801390-5F95-4F07-81A7-97FBA046AACC}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NG_network", "..\gameengine\network\network\NG_network.vcproj", "{0A73055E-4DED-40CD-9F72-9093ED3EEC7E}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PHY_Dummy", "..\GAMEENGINE\PHYSICS\PHY_PHYSICS\PHY_Dummy\PHY_Dummy.vcproj", "{3648FB9A-C36F-43AB-AED0-1F1361E67FC7}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PHY_Ode", "..\gameengine\physics\PHY_Physics\PHY_Ode\PHY_Ode.vcproj", "{EC405272-28E3-4840-AAC2-53D6DE4E163D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PHY_Physics", "..\gameengine\physics\PHY_Physics\PHY_Physics.vcproj", "{E109F1A5-FDD3-4F56-A1C4-96867EEA4C5B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RAS_openglrasterizer", "..\gameengine\rasterizer\openglrasterizer\RAS_openglrasterizer.vcproj", "{AB590CED-F71F-4A17-A89B-18583ECD633D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RAS_rasterizer", "..\gameengine\rasterizer\RAS_rasterizer.vcproj", "{51FB3D48-2467-4BFA-A321-D848252B437E}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SCA_GameLogic", "..\gameengine\gamelogic\SCA_GameLogic.vcproj", "{32CC75E2-EE85-45E6-8E3D-513F58464F43}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SG_SceneGraph", "..\gameengine\scenegraph\SG_SceneGraph.vcproj", "{09222F5E-1625-4FF3-A89A-384D16875EE5}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SYS_system", "..\kernel\system\SYS_system.vcproj", "{BAAE3F2B-BCF8-4E84-B8BA-CFB2D64945FE}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "blenpluginapi", "blenpluginapi\blenpluginapi\blenpluginapi.vcproj", "{BB6AA598-B336-4F8B-9DF9-8CAE7BE71C23}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gen_messaging", "..\KERNEL\gen_messaging\gen_messaging.vcproj", "{727F90AC-ABE6-40BF-8937-C2F2F1D13DEA}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PHY_Sumo", "..\gameengine\physics\PHY_Physics\PHY_Sumo\PHY_Sumo.vcproj", "{9625642D-6F20-4FB6-A089-BE7441B223E3}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BRE_yafray", "yafray\BRE_yafray.vcproj", "{9991A3C3-83FE-4AFE-9E18-9D01CB57E879}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PHY_Bullet", "..\gameengine\physics\PHY_Physics\PHY_Bullet\PHY_Bullet.vcproj", "{E90C7BC2-CF30-4A60-A8F2-0050D592E358}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BL_nodes", "nodes\nodes.vcproj", "{4C3AB78A-52CA-4276-A041-39776E52D8C8}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BL_gpu", "gpu\BL_gpu.vcproj", "{138DD16C-CC78-4F6C-A898-C8DA68D89067}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TEX_Video", "..\gameengine\videotexture\TEX_Video.vcproj", "{670EC17A-0548-4BBF-A27B-636C7C188139}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EXT_broad", "..\..\extern\solid\make\msvc_9_0\broad\broad.vcproj", "{0112CAD5-3584-412A-A2E5-1315A00437B4}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EXT_complex", "..\..\extern\solid\make\msvc_9_0\complex\complex.vcproj", "{B83C6BED-11EC-46C8-AFFA-121EEDE94373}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EXT_convex", "..\..\extern\solid\make\msvc_9_0\convex\convex.vcproj", "{524264F4-DF21-4B79-847F-E7CA643ECD0B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EXT_solid", "..\..\extern\solid\make\msvc_9_0\solid.vcproj", "{D696C86B-0B53-4471-A50D-5B983A6FA4AD}"
+ ProjectSection(ProjectDependencies) = postProject
+ {6461F05D-4698-47AB-A8E8-1CA2ACC9948B} = {6461F05D-4698-47AB-A8E8-1CA2ACC9948B}
+ {BAC615B0-F1AF-418B-8D23-A10FD8870D6A} = {BAC615B0-F1AF-418B-8D23-A10FD8870D6A}
+ {0112CAD5-3584-412A-A2E5-1315A00437B4} = {0112CAD5-3584-412A-A2E5-1315A00437B4}
+ {B83C6BED-11EC-46C8-AFFA-121EEDE94373} = {B83C6BED-11EC-46C8-AFFA-121EEDE94373}
+ {524264F4-DF21-4B79-847F-E7CA643ECD0B} = {524264F4-DF21-4B79-847F-E7CA643ECD0B}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EXT_bullet2", "..\..\extern\bullet2\make\msvc_9_0\Bullet.vcproj", "{FFD3C64A-30E2-4BC7-BC8F-51818C320400}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EXT_ftgl_static_lib", "..\..\extern\bFTGL\make\msvc_9_0\ftgl_static_lib.vcproj", "{F9850C15-FF0A-429E-9D47-89FB433C9BD8}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EXT_glew", "..\..\extern\glew\make\msvc_9_0\glew.vcproj", "{BAC615B0-F1AF-418B-8D23-A10FD8870D6A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EXT_qhull", "..\..\extern\qhull\make\msvc_9_0\qhull.vcproj", "{6461F05D-4698-47AB-A8E8-1CA2ACC9948B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EXT_verse", "..\..\extern\verse\make\msvc_9_0\libverse.vcproj", "{531D4862-D0E7-4B9B-A0B6-B3A6A25B547A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EXT_verse_server", "..\..\extern\verse\make\msvc_9_0\verse.vcproj", "{FC752464-F413-4D4F-842D-A5D3AA0E6A3D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EXT_build_install_all", "..\..\extern\make\msvc_9_0\build_install_all.vcproj", "{9C71A793-C177-4CAB-8EC5-923D500B39F8}"
+ ProjectSection(ProjectDependencies) = postProject
+ {F9850C15-FF0A-429E-9D47-89FB433C9BD8} = {F9850C15-FF0A-429E-9D47-89FB433C9BD8}
+ {FFD3C64A-30E2-4BC7-BC8F-51818C320400} = {FFD3C64A-30E2-4BC7-BC8F-51818C320400}
+ {531D4862-D0E7-4B9B-A0B6-B3A6A25B547A} = {531D4862-D0E7-4B9B-A0B6-B3A6A25B547A}
+ {D696C86B-0B53-4471-A50D-5B983A6FA4AD} = {D696C86B-0B53-4471-A50D-5B983A6FA4AD}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INT_bmfont", "..\..\intern\bmfont\make\msvc_9_0\bmfont.vcproj", "{E784098D-3ED8-433A-9353-9679415DDDC5}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INT_boolop", "..\..\intern\boolop\make\msvc_9_0\boolop.vcproj", "{EB75F4D6-2970-4A3A-8D99-2BAD7201C0E9}"
+ ProjectSection(ProjectDependencies) = postProject
+ {4B6AFCC5-968C-424A-8F20-76E41B3BEF74} = {4B6AFCC5-968C-424A-8F20-76E41B3BEF74}
+ {E86B7BDE-C33C-4E55-9433-E74C141D7538} = {E86B7BDE-C33C-4E55-9433-E74C141D7538}
+ {1CC733F1-6AB5-4904-8F63-C08C46B79DD9} = {1CC733F1-6AB5-4904-8F63-C08C46B79DD9}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INT_bsplib", "..\..\intern\bsp\make\msvc_9_0\bsplib.vcproj", "{B093415D-C0F6-4E76-8F5A-6BC1917BCE9E}"
+ ProjectSection(ProjectDependencies) = postProject
+ {51A348C1-8684-4D67-B980-97B1FC74159B} = {51A348C1-8684-4D67-B980-97B1FC74159B}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INT_container", "..\..\intern\container\make\msvc_9_0\container.vcproj", "{51A348C1-8684-4D67-B980-97B1FC74159B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INT_decimation", "..\..\intern\decimation\make\msvc_9_0\decimation.vcproj", "{C66F722C-46BE-40C9-ABAE-2EAC7A697EB8}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INT_DummySoundSystem", "..\..\intern\SoundSystem\make\msvc_9_0\dummy\DummySoundSystem.vcproj", "{FAF46346-65CC-4DB2-85C4-B99826F79D0C}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INT_elbeem", "..\..\intern\elbeem\make\msvc_9_0\elbeem.vcproj", "{A90C4918-4B21-4277-93BD-AF65F30951D9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INT_ghost", "..\..\intern\ghost\make\msvc_9_0\ghost.vcproj", "{76D90B92-ECC7-409C-9F98-A8814B90F3C0}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INT_guardedalloc", "..\..\intern\guardedalloc\make\msvc_9_0\guardedalloc.vcproj", "{1CC733F1-6AB5-4904-8F63-C08C46B79DD9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INT_iksolver", "..\..\intern\iksolver\make\msvc_9_0\iksolver.vcproj", "{542A9FA1-B7FF-441C-AE15-054DB31D3488}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INT_memutil", "..\..\intern\memutil\make\msvc_9_0\memutil.vcproj", "{E86B7BDE-C33C-4E55-9433-E74C141D7538}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INT_MoTo", "..\..\intern\moto\make\msvc_9_0\moto.vcproj", "{4B6AFCC5-968C-424A-8F20-76E41B3BEF74}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INT_OpenALSoundSystem", "..\..\intern\SoundSystem\make\msvc_9_0\openal\OpenALSoundSystem.vcproj", "{213356A9-3A1F-41DA-9819-1297BCD17DEE}"
+ ProjectSection(ProjectDependencies) = postProject
+ {98330220-47A6-42E0-9DE4-AD0FF5D204D6} = {98330220-47A6-42E0-9DE4-AD0FF5D204D6}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INT_opennl", "..\..\intern\opennl\make\msvc_9_0\opennl.vcproj", "{8B8D4FC3-3234-4E54-8376-5AB83D00D164}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INT_SoundSystem", "..\..\intern\SoundSystem\make\msvc_9_0\SoundSystem.vcproj", "{98330220-47A6-42E0-9DE4-AD0FF5D204D6}"
+ ProjectSection(ProjectDependencies) = postProject
+ {4B6AFCC5-968C-424A-8F20-76E41B3BEF74} = {4B6AFCC5-968C-424A-8F20-76E41B3BEF74}
+ {B789C2F3-279E-4A85-8F0A-7F7AC068E598} = {B789C2F3-279E-4A85-8F0A-7F7AC068E598}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INT_string", "..\..\intern\string\make\msvc_9_0\string.vcproj", "{B789C2F3-279E-4A85-8F0A-7F7AC068E598}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INT_build_install_all", "..\..\intern\make\msvc_9_0\INT_build_install_all.vcproj", "{02110D03-59DB-4571-8787-72B3C03B2F2D}"
+ ProjectSection(ProjectDependencies) = postProject
+ {A90C4918-4B21-4277-93BD-AF65F30951D9} = {A90C4918-4B21-4277-93BD-AF65F30951D9}
+ {98330220-47A6-42E0-9DE4-AD0FF5D204D6} = {98330220-47A6-42E0-9DE4-AD0FF5D204D6}
+ {C66F722C-46BE-40C9-ABAE-2EAC7A697EB8} = {C66F722C-46BE-40C9-ABAE-2EAC7A697EB8}
+ {FAF46346-65CC-4DB2-85C4-B99826F79D0C} = {FAF46346-65CC-4DB2-85C4-B99826F79D0C}
+ {B093415D-C0F6-4E76-8F5A-6BC1917BCE9E} = {B093415D-C0F6-4E76-8F5A-6BC1917BCE9E}
+ {E784098D-3ED8-433A-9353-9679415DDDC5} = {E784098D-3ED8-433A-9353-9679415DDDC5}
+ {76D90B92-ECC7-409C-9F98-A8814B90F3C0} = {76D90B92-ECC7-409C-9F98-A8814B90F3C0}
+ {542A9FA1-B7FF-441C-AE15-054DB31D3488} = {542A9FA1-B7FF-441C-AE15-054DB31D3488}
+ {213356A9-3A1F-41DA-9819-1297BCD17DEE} = {213356A9-3A1F-41DA-9819-1297BCD17DEE}
+ {51A348C1-8684-4D67-B980-97B1FC74159B} = {51A348C1-8684-4D67-B980-97B1FC74159B}
+ {8B8D4FC3-3234-4E54-8376-5AB83D00D164} = {8B8D4FC3-3234-4E54-8376-5AB83D00D164}
+ {4B6AFCC5-968C-424A-8F20-76E41B3BEF74} = {4B6AFCC5-968C-424A-8F20-76E41B3BEF74}
+ {EB75F4D6-2970-4A3A-8D99-2BAD7201C0E9} = {EB75F4D6-2970-4A3A-8D99-2BAD7201C0E9}
+ {E86B7BDE-C33C-4E55-9433-E74C141D7538} = {E86B7BDE-C33C-4E55-9433-E74C141D7538}
+ {1CC733F1-6AB5-4904-8F63-C08C46B79DD9} = {1CC733F1-6AB5-4904-8F63-C08C46B79DD9}
+ {B789C2F3-279E-4A85-8F0A-7F7AC068E598} = {B789C2F3-279E-4A85-8F0A-7F7AC068E598}
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Blender Debug|Win32 = Blender Debug|Win32
+ Blender Release|Win32 = Blender Release|Win32
+ BlenderPlayer Debug|Win32 = BlenderPlayer Debug|Win32
+ BlenderPlayer Release|Win32 = BlenderPlayer Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {F78B7FC9-DE32-465E-9F26-BB0B6B7A2EAF}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {F78B7FC9-DE32-465E-9F26-BB0B6B7A2EAF}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {F78B7FC9-DE32-465E-9F26-BB0B6B7A2EAF}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {F78B7FC9-DE32-465E-9F26-BB0B6B7A2EAF}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {F78B7FC9-DE32-465E-9F26-BB0B6B7A2EAF}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {F78B7FC9-DE32-465E-9F26-BB0B6B7A2EAF}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {CAE37E91-6570-43AC-A4B4-7A37A4B0FC94}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {CAE37E91-6570-43AC-A4B4-7A37A4B0FC94}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {CAE37E91-6570-43AC-A4B4-7A37A4B0FC94}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {CAE37E91-6570-43AC-A4B4-7A37A4B0FC94}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {CAE37E91-6570-43AC-A4B4-7A37A4B0FC94}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {CAE37E91-6570-43AC-A4B4-7A37A4B0FC94}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {CAE37E91-6570-43AC-A4B4-7A37A4B0FC94}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {CAE37E91-6570-43AC-A4B4-7A37A4B0FC94}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {31628053-825D-4C06-8A21-D13883489718}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {31628053-825D-4C06-8A21-D13883489718}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {31628053-825D-4C06-8A21-D13883489718}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {31628053-825D-4C06-8A21-D13883489718}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {31628053-825D-4C06-8A21-D13883489718}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {31628053-825D-4C06-8A21-D13883489718}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {31628053-825D-4C06-8A21-D13883489718}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {31628053-825D-4C06-8A21-D13883489718}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {E5F2F004-C704-4DCC-A08F-6EB1E38EAB9F}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {E5F2F004-C704-4DCC-A08F-6EB1E38EAB9F}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {E5F2F004-C704-4DCC-A08F-6EB1E38EAB9F}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {E5F2F004-C704-4DCC-A08F-6EB1E38EAB9F}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {E5F2F004-C704-4DCC-A08F-6EB1E38EAB9F}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {E5F2F004-C704-4DCC-A08F-6EB1E38EAB9F}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {E5F2F004-C704-4DCC-A08F-6EB1E38EAB9F}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {E5F2F004-C704-4DCC-A08F-6EB1E38EAB9F}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {DB6BE55D-B6D9-494D-856A-8764FF7BA91D}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {DB6BE55D-B6D9-494D-856A-8764FF7BA91D}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {DB6BE55D-B6D9-494D-856A-8764FF7BA91D}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {DB6BE55D-B6D9-494D-856A-8764FF7BA91D}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {DB6BE55D-B6D9-494D-856A-8764FF7BA91D}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {DB6BE55D-B6D9-494D-856A-8764FF7BA91D}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {DB6BE55D-B6D9-494D-856A-8764FF7BA91D}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {DB6BE55D-B6D9-494D-856A-8764FF7BA91D}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {9A307EE5-CD77-47BC-BD87-62508C7E19D8}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {9A307EE5-CD77-47BC-BD87-62508C7E19D8}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {9A307EE5-CD77-47BC-BD87-62508C7E19D8}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {9A307EE5-CD77-47BC-BD87-62508C7E19D8}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {9A307EE5-CD77-47BC-BD87-62508C7E19D8}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {9A307EE5-CD77-47BC-BD87-62508C7E19D8}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {9A307EE5-CD77-47BC-BD87-62508C7E19D8}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {9A307EE5-CD77-47BC-BD87-62508C7E19D8}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {415BFD6E-64CF-422B-AF88-C07F040A7292}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {415BFD6E-64CF-422B-AF88-C07F040A7292}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {415BFD6E-64CF-422B-AF88-C07F040A7292}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {415BFD6E-64CF-422B-AF88-C07F040A7292}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {415BFD6E-64CF-422B-AF88-C07F040A7292}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {415BFD6E-64CF-422B-AF88-C07F040A7292}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {415BFD6E-64CF-422B-AF88-C07F040A7292}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {415BFD6E-64CF-422B-AF88-C07F040A7292}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {FB88301F-F725-401B-ACD7-D2ABBF333B71}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {FB88301F-F725-401B-ACD7-D2ABBF333B71}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {FB88301F-F725-401B-ACD7-D2ABBF333B71}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {FB88301F-F725-401B-ACD7-D2ABBF333B71}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {FB88301F-F725-401B-ACD7-D2ABBF333B71}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {FB88301F-F725-401B-ACD7-D2ABBF333B71}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {5A2EA6DC-1A53-4E87-9166-52870CE3B4EA}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {5A2EA6DC-1A53-4E87-9166-52870CE3B4EA}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {5A2EA6DC-1A53-4E87-9166-52870CE3B4EA}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {5A2EA6DC-1A53-4E87-9166-52870CE3B4EA}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {5A2EA6DC-1A53-4E87-9166-52870CE3B4EA}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {5A2EA6DC-1A53-4E87-9166-52870CE3B4EA}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {5A2EA6DC-1A53-4E87-9166-52870CE3B4EA}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {5A2EA6DC-1A53-4E87-9166-52870CE3B4EA}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {2AE0D2D9-6A7A-44DE-9EFF-99C9E3257B49}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {2AE0D2D9-6A7A-44DE-9EFF-99C9E3257B49}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {2AE0D2D9-6A7A-44DE-9EFF-99C9E3257B49}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {2AE0D2D9-6A7A-44DE-9EFF-99C9E3257B49}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {2AE0D2D9-6A7A-44DE-9EFF-99C9E3257B49}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {2AE0D2D9-6A7A-44DE-9EFF-99C9E3257B49}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {106AE171-0083-41D6-A949-20DB0E8DC251}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {106AE171-0083-41D6-A949-20DB0E8DC251}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {106AE171-0083-41D6-A949-20DB0E8DC251}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {106AE171-0083-41D6-A949-20DB0E8DC251}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {106AE171-0083-41D6-A949-20DB0E8DC251}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {106AE171-0083-41D6-A949-20DB0E8DC251}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {E013786A-9575-4F34-81B2-33290357EE87}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {E013786A-9575-4F34-81B2-33290357EE87}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {E013786A-9575-4F34-81B2-33290357EE87}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {E013786A-9575-4F34-81B2-33290357EE87}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {E013786A-9575-4F34-81B2-33290357EE87}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {E013786A-9575-4F34-81B2-33290357EE87}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {E013786A-9575-4F34-81B2-33290357EE87}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {E013786A-9575-4F34-81B2-33290357EE87}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {EADC3C5A-6C51-4F03-8038-1553E7D7F740}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {EADC3C5A-6C51-4F03-8038-1553E7D7F740}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {EADC3C5A-6C51-4F03-8038-1553E7D7F740}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {EADC3C5A-6C51-4F03-8038-1553E7D7F740}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {EADC3C5A-6C51-4F03-8038-1553E7D7F740}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {EADC3C5A-6C51-4F03-8038-1553E7D7F740}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {EADC3C5A-6C51-4F03-8038-1553E7D7F740}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {EADC3C5A-6C51-4F03-8038-1553E7D7F740}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {A1CCF5B0-08E1-4F00-B417-8BFAC34E5E90}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {A1CCF5B0-08E1-4F00-B417-8BFAC34E5E90}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {A1CCF5B0-08E1-4F00-B417-8BFAC34E5E90}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {A1CCF5B0-08E1-4F00-B417-8BFAC34E5E90}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {A1CCF5B0-08E1-4F00-B417-8BFAC34E5E90}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {A1CCF5B0-08E1-4F00-B417-8BFAC34E5E90}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {DF25E6F2-780C-438B-8AAD-D10CF8B3820A}.Blender Debug|Win32.ActiveCfg = 3D Plugin Debug|Win32
+ {DF25E6F2-780C-438B-8AAD-D10CF8B3820A}.Blender Release|Win32.ActiveCfg = 3D Plugin Release|Win32
+ {DF25E6F2-780C-438B-8AAD-D10CF8B3820A}.BlenderPlayer Debug|Win32.ActiveCfg = 3D Plugin Debug|Win32
+ {DF25E6F2-780C-438B-8AAD-D10CF8B3820A}.BlenderPlayer Release|Win32.ActiveCfg = 3D Plugin Release|Win32
+ {D8ABD6A5-1B36-4D62-934E-B5C6801130B0}.Blender Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {D8ABD6A5-1B36-4D62-934E-B5C6801130B0}.Blender Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {D8ABD6A5-1B36-4D62-934E-B5C6801130B0}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {D8ABD6A5-1B36-4D62-934E-B5C6801130B0}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {D8ABD6A5-1B36-4D62-934E-B5C6801130B0}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {D8ABD6A5-1B36-4D62-934E-B5C6801130B0}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {3D310C60-6771-48E4-BCCA-D2718CDED898}.Blender Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {3D310C60-6771-48E4-BCCA-D2718CDED898}.Blender Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {3D310C60-6771-48E4-BCCA-D2718CDED898}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {3D310C60-6771-48E4-BCCA-D2718CDED898}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {3D310C60-6771-48E4-BCCA-D2718CDED898}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {3D310C60-6771-48E4-BCCA-D2718CDED898}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {8154A59A-CAED-403D-AB94-BC4E7C032666}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {8154A59A-CAED-403D-AB94-BC4E7C032666}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {8154A59A-CAED-403D-AB94-BC4E7C032666}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {8154A59A-CAED-403D-AB94-BC4E7C032666}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {8154A59A-CAED-403D-AB94-BC4E7C032666}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {8154A59A-CAED-403D-AB94-BC4E7C032666}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {F90BD995-FFA4-4B18-81E8-FA4322C939E8}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {F90BD995-FFA4-4B18-81E8-FA4322C939E8}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {F90BD995-FFA4-4B18-81E8-FA4322C939E8}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {F90BD995-FFA4-4B18-81E8-FA4322C939E8}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {F90BD995-FFA4-4B18-81E8-FA4322C939E8}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {F90BD995-FFA4-4B18-81E8-FA4322C939E8}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {F90BD995-FFA4-4B18-81E8-FA4322C939E8}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {F90BD995-FFA4-4B18-81E8-FA4322C939E8}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {E645CC32-4823-463E-82F0-46ADDE664018}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {E645CC32-4823-463E-82F0-46ADDE664018}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {E645CC32-4823-463E-82F0-46ADDE664018}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {E645CC32-4823-463E-82F0-46ADDE664018}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {E645CC32-4823-463E-82F0-46ADDE664018}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {E645CC32-4823-463E-82F0-46ADDE664018}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {E645CC32-4823-463E-82F0-46ADDE664018}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {E645CC32-4823-463E-82F0-46ADDE664018}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {6E24BF09-9653-4166-A871-F65CC9E98A9B}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {6E24BF09-9653-4166-A871-F65CC9E98A9B}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {6E24BF09-9653-4166-A871-F65CC9E98A9B}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {6E24BF09-9653-4166-A871-F65CC9E98A9B}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {6E24BF09-9653-4166-A871-F65CC9E98A9B}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {6E24BF09-9653-4166-A871-F65CC9E98A9B}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {6E24BF09-9653-4166-A871-F65CC9E98A9B}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {6E24BF09-9653-4166-A871-F65CC9E98A9B}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {6B801390-5F95-4F07-81A7-97FBA046AACC}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {6B801390-5F95-4F07-81A7-97FBA046AACC}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {6B801390-5F95-4F07-81A7-97FBA046AACC}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {6B801390-5F95-4F07-81A7-97FBA046AACC}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {6B801390-5F95-4F07-81A7-97FBA046AACC}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {6B801390-5F95-4F07-81A7-97FBA046AACC}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {6B801390-5F95-4F07-81A7-97FBA046AACC}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {6B801390-5F95-4F07-81A7-97FBA046AACC}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {0A73055E-4DED-40CD-9F72-9093ED3EEC7E}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {0A73055E-4DED-40CD-9F72-9093ED3EEC7E}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {0A73055E-4DED-40CD-9F72-9093ED3EEC7E}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {0A73055E-4DED-40CD-9F72-9093ED3EEC7E}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {0A73055E-4DED-40CD-9F72-9093ED3EEC7E}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {0A73055E-4DED-40CD-9F72-9093ED3EEC7E}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {0A73055E-4DED-40CD-9F72-9093ED3EEC7E}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {0A73055E-4DED-40CD-9F72-9093ED3EEC7E}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {3648FB9A-C36F-43AB-AED0-1F1361E67FC7}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {3648FB9A-C36F-43AB-AED0-1F1361E67FC7}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {3648FB9A-C36F-43AB-AED0-1F1361E67FC7}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {3648FB9A-C36F-43AB-AED0-1F1361E67FC7}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {3648FB9A-C36F-43AB-AED0-1F1361E67FC7}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {3648FB9A-C36F-43AB-AED0-1F1361E67FC7}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {3648FB9A-C36F-43AB-AED0-1F1361E67FC7}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {3648FB9A-C36F-43AB-AED0-1F1361E67FC7}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {EC405272-28E3-4840-AAC2-53D6DE4E163D}.Blender Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {EC405272-28E3-4840-AAC2-53D6DE4E163D}.Blender Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {EC405272-28E3-4840-AAC2-53D6DE4E163D}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {EC405272-28E3-4840-AAC2-53D6DE4E163D}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {E109F1A5-FDD3-4F56-A1C4-96867EEA4C5B}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {E109F1A5-FDD3-4F56-A1C4-96867EEA4C5B}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {E109F1A5-FDD3-4F56-A1C4-96867EEA4C5B}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {E109F1A5-FDD3-4F56-A1C4-96867EEA4C5B}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {E109F1A5-FDD3-4F56-A1C4-96867EEA4C5B}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {E109F1A5-FDD3-4F56-A1C4-96867EEA4C5B}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {E109F1A5-FDD3-4F56-A1C4-96867EEA4C5B}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {E109F1A5-FDD3-4F56-A1C4-96867EEA4C5B}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {AB590CED-F71F-4A17-A89B-18583ECD633D}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {AB590CED-F71F-4A17-A89B-18583ECD633D}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {AB590CED-F71F-4A17-A89B-18583ECD633D}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {AB590CED-F71F-4A17-A89B-18583ECD633D}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {AB590CED-F71F-4A17-A89B-18583ECD633D}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {AB590CED-F71F-4A17-A89B-18583ECD633D}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {AB590CED-F71F-4A17-A89B-18583ECD633D}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {AB590CED-F71F-4A17-A89B-18583ECD633D}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {51FB3D48-2467-4BFA-A321-D848252B437E}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {51FB3D48-2467-4BFA-A321-D848252B437E}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {51FB3D48-2467-4BFA-A321-D848252B437E}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {51FB3D48-2467-4BFA-A321-D848252B437E}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {51FB3D48-2467-4BFA-A321-D848252B437E}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {51FB3D48-2467-4BFA-A321-D848252B437E}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {51FB3D48-2467-4BFA-A321-D848252B437E}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {51FB3D48-2467-4BFA-A321-D848252B437E}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {32CC75E2-EE85-45E6-8E3D-513F58464F43}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {32CC75E2-EE85-45E6-8E3D-513F58464F43}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {32CC75E2-EE85-45E6-8E3D-513F58464F43}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {32CC75E2-EE85-45E6-8E3D-513F58464F43}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {32CC75E2-EE85-45E6-8E3D-513F58464F43}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {32CC75E2-EE85-45E6-8E3D-513F58464F43}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {32CC75E2-EE85-45E6-8E3D-513F58464F43}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {32CC75E2-EE85-45E6-8E3D-513F58464F43}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {09222F5E-1625-4FF3-A89A-384D16875EE5}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {09222F5E-1625-4FF3-A89A-384D16875EE5}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {09222F5E-1625-4FF3-A89A-384D16875EE5}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {09222F5E-1625-4FF3-A89A-384D16875EE5}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {09222F5E-1625-4FF3-A89A-384D16875EE5}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {09222F5E-1625-4FF3-A89A-384D16875EE5}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {09222F5E-1625-4FF3-A89A-384D16875EE5}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {09222F5E-1625-4FF3-A89A-384D16875EE5}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {BAAE3F2B-BCF8-4E84-B8BA-CFB2D64945FE}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {BAAE3F2B-BCF8-4E84-B8BA-CFB2D64945FE}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {BAAE3F2B-BCF8-4E84-B8BA-CFB2D64945FE}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {BAAE3F2B-BCF8-4E84-B8BA-CFB2D64945FE}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {BAAE3F2B-BCF8-4E84-B8BA-CFB2D64945FE}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {BAAE3F2B-BCF8-4E84-B8BA-CFB2D64945FE}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {BAAE3F2B-BCF8-4E84-B8BA-CFB2D64945FE}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {BAAE3F2B-BCF8-4E84-B8BA-CFB2D64945FE}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {BB6AA598-B336-4F8B-9DF9-8CAE7BE71C23}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {BB6AA598-B336-4F8B-9DF9-8CAE7BE71C23}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {BB6AA598-B336-4F8B-9DF9-8CAE7BE71C23}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {BB6AA598-B336-4F8B-9DF9-8CAE7BE71C23}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {BB6AA598-B336-4F8B-9DF9-8CAE7BE71C23}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {BB6AA598-B336-4F8B-9DF9-8CAE7BE71C23}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {BB6AA598-B336-4F8B-9DF9-8CAE7BE71C23}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {BB6AA598-B336-4F8B-9DF9-8CAE7BE71C23}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {727F90AC-ABE6-40BF-8937-C2F2F1D13DEA}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {727F90AC-ABE6-40BF-8937-C2F2F1D13DEA}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {727F90AC-ABE6-40BF-8937-C2F2F1D13DEA}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {727F90AC-ABE6-40BF-8937-C2F2F1D13DEA}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {727F90AC-ABE6-40BF-8937-C2F2F1D13DEA}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {727F90AC-ABE6-40BF-8937-C2F2F1D13DEA}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {727F90AC-ABE6-40BF-8937-C2F2F1D13DEA}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {727F90AC-ABE6-40BF-8937-C2F2F1D13DEA}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {9625642D-6F20-4FB6-A089-BE7441B223E3}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {9625642D-6F20-4FB6-A089-BE7441B223E3}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {9625642D-6F20-4FB6-A089-BE7441B223E3}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {9625642D-6F20-4FB6-A089-BE7441B223E3}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {9625642D-6F20-4FB6-A089-BE7441B223E3}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {9625642D-6F20-4FB6-A089-BE7441B223E3}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {9625642D-6F20-4FB6-A089-BE7441B223E3}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {9625642D-6F20-4FB6-A089-BE7441B223E3}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {9991A3C3-83FE-4AFE-9E18-9D01CB57E879}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {9991A3C3-83FE-4AFE-9E18-9D01CB57E879}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {9991A3C3-83FE-4AFE-9E18-9D01CB57E879}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {9991A3C3-83FE-4AFE-9E18-9D01CB57E879}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {9991A3C3-83FE-4AFE-9E18-9D01CB57E879}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {9991A3C3-83FE-4AFE-9E18-9D01CB57E879}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {E90C7BC2-CF30-4A60-A8F2-0050D592E358}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {E90C7BC2-CF30-4A60-A8F2-0050D592E358}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {E90C7BC2-CF30-4A60-A8F2-0050D592E358}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {E90C7BC2-CF30-4A60-A8F2-0050D592E358}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {E90C7BC2-CF30-4A60-A8F2-0050D592E358}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {E90C7BC2-CF30-4A60-A8F2-0050D592E358}.BlenderPlayer Debug|Win32.Build.0 = Blender Debug|Win32
+ {E90C7BC2-CF30-4A60-A8F2-0050D592E358}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {E90C7BC2-CF30-4A60-A8F2-0050D592E358}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {4C3AB78A-52CA-4276-A041-39776E52D8C8}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {4C3AB78A-52CA-4276-A041-39776E52D8C8}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {4C3AB78A-52CA-4276-A041-39776E52D8C8}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {4C3AB78A-52CA-4276-A041-39776E52D8C8}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {4C3AB78A-52CA-4276-A041-39776E52D8C8}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {4C3AB78A-52CA-4276-A041-39776E52D8C8}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {4C3AB78A-52CA-4276-A041-39776E52D8C8}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {4C3AB78A-52CA-4276-A041-39776E52D8C8}.BlenderPlayer Release|Win32.Build.0 = Blender Release|Win32
+ {138DD16C-CC78-4F6C-A898-C8DA68D89067}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {138DD16C-CC78-4F6C-A898-C8DA68D89067}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {138DD16C-CC78-4F6C-A898-C8DA68D89067}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {138DD16C-CC78-4F6C-A898-C8DA68D89067}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {138DD16C-CC78-4F6C-A898-C8DA68D89067}.BlenderPlayer Debug|Win32.ActiveCfg = BlenderPlayer Debug|Win32
+ {138DD16C-CC78-4F6C-A898-C8DA68D89067}.BlenderPlayer Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
+ {138DD16C-CC78-4F6C-A898-C8DA68D89067}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {138DD16C-CC78-4F6C-A898-C8DA68D89067}.BlenderPlayer Release|Win32.Build.0 = BlenderPlayer Release|Win32
+ {670EC17A-0548-4BBF-A27B-636C7C188139}.Blender Debug|Win32.ActiveCfg = Debug|Win32
+ {670EC17A-0548-4BBF-A27B-636C7C188139}.Blender Debug|Win32.Build.0 = Debug|Win32
+ {670EC17A-0548-4BBF-A27B-636C7C188139}.Blender Release|Win32.ActiveCfg = Release|Win32
+ {670EC17A-0548-4BBF-A27B-636C7C188139}.Blender Release|Win32.Build.0 = Release|Win32
+ {670EC17A-0548-4BBF-A27B-636C7C188139}.BlenderPlayer Debug|Win32.ActiveCfg = Debug|Win32
+ {670EC17A-0548-4BBF-A27B-636C7C188139}.BlenderPlayer Debug|Win32.Build.0 = Debug|Win32
+ {670EC17A-0548-4BBF-A27B-636C7C188139}.BlenderPlayer Release|Win32.ActiveCfg = Release|Win32
+ {670EC17A-0548-4BBF-A27B-636C7C188139}.BlenderPlayer Release|Win32.Build.0 = Release|Win32
+ {0112CAD5-3584-412A-A2E5-1315A00437B4}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {0112CAD5-3584-412A-A2E5-1315A00437B4}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {0112CAD5-3584-412A-A2E5-1315A00437B4}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {0112CAD5-3584-412A-A2E5-1315A00437B4}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {0112CAD5-3584-412A-A2E5-1315A00437B4}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {0112CAD5-3584-412A-A2E5-1315A00437B4}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {B83C6BED-11EC-46C8-AFFA-121EEDE94373}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {B83C6BED-11EC-46C8-AFFA-121EEDE94373}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {B83C6BED-11EC-46C8-AFFA-121EEDE94373}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {B83C6BED-11EC-46C8-AFFA-121EEDE94373}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {B83C6BED-11EC-46C8-AFFA-121EEDE94373}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {B83C6BED-11EC-46C8-AFFA-121EEDE94373}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {524264F4-DF21-4B79-847F-E7CA643ECD0B}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {524264F4-DF21-4B79-847F-E7CA643ECD0B}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {524264F4-DF21-4B79-847F-E7CA643ECD0B}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {524264F4-DF21-4B79-847F-E7CA643ECD0B}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {524264F4-DF21-4B79-847F-E7CA643ECD0B}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {524264F4-DF21-4B79-847F-E7CA643ECD0B}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {D696C86B-0B53-4471-A50D-5B983A6FA4AD}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {D696C86B-0B53-4471-A50D-5B983A6FA4AD}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {D696C86B-0B53-4471-A50D-5B983A6FA4AD}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {D696C86B-0B53-4471-A50D-5B983A6FA4AD}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {D696C86B-0B53-4471-A50D-5B983A6FA4AD}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {D696C86B-0B53-4471-A50D-5B983A6FA4AD}.BlenderPlayer Debug|Win32.Build.0 = Blender Debug|Win32
+ {D696C86B-0B53-4471-A50D-5B983A6FA4AD}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {D696C86B-0B53-4471-A50D-5B983A6FA4AD}.BlenderPlayer Release|Win32.Build.0 = Blender Release|Win32
+ {FFD3C64A-30E2-4BC7-BC8F-51818C320400}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {FFD3C64A-30E2-4BC7-BC8F-51818C320400}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {FFD3C64A-30E2-4BC7-BC8F-51818C320400}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {FFD3C64A-30E2-4BC7-BC8F-51818C320400}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {FFD3C64A-30E2-4BC7-BC8F-51818C320400}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {FFD3C64A-30E2-4BC7-BC8F-51818C320400}.BlenderPlayer Debug|Win32.Build.0 = Blender Debug|Win32
+ {FFD3C64A-30E2-4BC7-BC8F-51818C320400}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {FFD3C64A-30E2-4BC7-BC8F-51818C320400}.BlenderPlayer Release|Win32.Build.0 = Blender Release|Win32
+ {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {BAC615B0-F1AF-418B-8D23-A10FD8870D6A}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {BAC615B0-F1AF-418B-8D23-A10FD8870D6A}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {BAC615B0-F1AF-418B-8D23-A10FD8870D6A}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {BAC615B0-F1AF-418B-8D23-A10FD8870D6A}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {BAC615B0-F1AF-418B-8D23-A10FD8870D6A}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {BAC615B0-F1AF-418B-8D23-A10FD8870D6A}.BlenderPlayer Debug|Win32.Build.0 = Blender Debug|Win32
+ {BAC615B0-F1AF-418B-8D23-A10FD8870D6A}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {BAC615B0-F1AF-418B-8D23-A10FD8870D6A}.BlenderPlayer Release|Win32.Build.0 = Blender Release|Win32
+ {6461F05D-4698-47AB-A8E8-1CA2ACC9948B}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {6461F05D-4698-47AB-A8E8-1CA2ACC9948B}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {6461F05D-4698-47AB-A8E8-1CA2ACC9948B}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {6461F05D-4698-47AB-A8E8-1CA2ACC9948B}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {6461F05D-4698-47AB-A8E8-1CA2ACC9948B}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {6461F05D-4698-47AB-A8E8-1CA2ACC9948B}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {6461F05D-4698-47AB-A8E8-1CA2ACC9948B}.BlenderPlayer Release|Win32.Build.0 = Blender Release|Win32
+ {531D4862-D0E7-4B9B-A0B6-B3A6A25B547A}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {531D4862-D0E7-4B9B-A0B6-B3A6A25B547A}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {531D4862-D0E7-4B9B-A0B6-B3A6A25B547A}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {531D4862-D0E7-4B9B-A0B6-B3A6A25B547A}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {531D4862-D0E7-4B9B-A0B6-B3A6A25B547A}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {531D4862-D0E7-4B9B-A0B6-B3A6A25B547A}.BlenderPlayer Debug|Win32.Build.0 = Blender Debug|Win32
+ {531D4862-D0E7-4B9B-A0B6-B3A6A25B547A}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {531D4862-D0E7-4B9B-A0B6-B3A6A25B547A}.BlenderPlayer Release|Win32.Build.0 = Blender Release|Win32
+ {FC752464-F413-4D4F-842D-A5D3AA0E6A3D}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {FC752464-F413-4D4F-842D-A5D3AA0E6A3D}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {FC752464-F413-4D4F-842D-A5D3AA0E6A3D}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {FC752464-F413-4D4F-842D-A5D3AA0E6A3D}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {FC752464-F413-4D4F-842D-A5D3AA0E6A3D}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {FC752464-F413-4D4F-842D-A5D3AA0E6A3D}.BlenderPlayer Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
+ {9C71A793-C177-4CAB-8EC5-923D500B39F8}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {9C71A793-C177-4CAB-8EC5-923D500B39F8}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {9C71A793-C177-4CAB-8EC5-923D500B39F8}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {9C71A793-C177-4CAB-8EC5-923D500B39F8}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {E784098D-3ED8-433A-9353-9679415DDDC5}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {E784098D-3ED8-433A-9353-9679415DDDC5}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {E784098D-3ED8-433A-9353-9679415DDDC5}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {E784098D-3ED8-433A-9353-9679415DDDC5}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {E784098D-3ED8-433A-9353-9679415DDDC5}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {E784098D-3ED8-433A-9353-9679415DDDC5}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {EB75F4D6-2970-4A3A-8D99-2BAD7201C0E9}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {EB75F4D6-2970-4A3A-8D99-2BAD7201C0E9}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {EB75F4D6-2970-4A3A-8D99-2BAD7201C0E9}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {EB75F4D6-2970-4A3A-8D99-2BAD7201C0E9}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {EB75F4D6-2970-4A3A-8D99-2BAD7201C0E9}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {EB75F4D6-2970-4A3A-8D99-2BAD7201C0E9}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {B093415D-C0F6-4E76-8F5A-6BC1917BCE9E}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {B093415D-C0F6-4E76-8F5A-6BC1917BCE9E}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {B093415D-C0F6-4E76-8F5A-6BC1917BCE9E}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {B093415D-C0F6-4E76-8F5A-6BC1917BCE9E}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {B093415D-C0F6-4E76-8F5A-6BC1917BCE9E}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {B093415D-C0F6-4E76-8F5A-6BC1917BCE9E}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {51A348C1-8684-4D67-B980-97B1FC74159B}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {51A348C1-8684-4D67-B980-97B1FC74159B}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {51A348C1-8684-4D67-B980-97B1FC74159B}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {51A348C1-8684-4D67-B980-97B1FC74159B}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {51A348C1-8684-4D67-B980-97B1FC74159B}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {51A348C1-8684-4D67-B980-97B1FC74159B}.BlenderPlayer Debug|Win32.Build.0 = Blender Debug|Win32
+ {51A348C1-8684-4D67-B980-97B1FC74159B}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {51A348C1-8684-4D67-B980-97B1FC74159B}.BlenderPlayer Release|Win32.Build.0 = Blender Release|Win32
+ {C66F722C-46BE-40C9-ABAE-2EAC7A697EB8}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {C66F722C-46BE-40C9-ABAE-2EAC7A697EB8}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {C66F722C-46BE-40C9-ABAE-2EAC7A697EB8}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {C66F722C-46BE-40C9-ABAE-2EAC7A697EB8}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {C66F722C-46BE-40C9-ABAE-2EAC7A697EB8}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {C66F722C-46BE-40C9-ABAE-2EAC7A697EB8}.BlenderPlayer Debug|Win32.Build.0 = Blender Debug|Win32
+ {C66F722C-46BE-40C9-ABAE-2EAC7A697EB8}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {C66F722C-46BE-40C9-ABAE-2EAC7A697EB8}.BlenderPlayer Release|Win32.Build.0 = Blender Release|Win32
+ {FAF46346-65CC-4DB2-85C4-B99826F79D0C}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {FAF46346-65CC-4DB2-85C4-B99826F79D0C}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {FAF46346-65CC-4DB2-85C4-B99826F79D0C}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {FAF46346-65CC-4DB2-85C4-B99826F79D0C}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {FAF46346-65CC-4DB2-85C4-B99826F79D0C}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {FAF46346-65CC-4DB2-85C4-B99826F79D0C}.BlenderPlayer Debug|Win32.Build.0 = Blender Debug|Win32
+ {FAF46346-65CC-4DB2-85C4-B99826F79D0C}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {FAF46346-65CC-4DB2-85C4-B99826F79D0C}.BlenderPlayer Release|Win32.Build.0 = Blender Release|Win32
+ {A90C4918-4B21-4277-93BD-AF65F30951D9}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {A90C4918-4B21-4277-93BD-AF65F30951D9}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {A90C4918-4B21-4277-93BD-AF65F30951D9}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {A90C4918-4B21-4277-93BD-AF65F30951D9}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {A90C4918-4B21-4277-93BD-AF65F30951D9}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {A90C4918-4B21-4277-93BD-AF65F30951D9}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {76D90B92-ECC7-409C-9F98-A8814B90F3C0}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {76D90B92-ECC7-409C-9F98-A8814B90F3C0}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {76D90B92-ECC7-409C-9F98-A8814B90F3C0}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {76D90B92-ECC7-409C-9F98-A8814B90F3C0}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {76D90B92-ECC7-409C-9F98-A8814B90F3C0}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {76D90B92-ECC7-409C-9F98-A8814B90F3C0}.BlenderPlayer Debug|Win32.Build.0 = Blender Debug|Win32
+ {76D90B92-ECC7-409C-9F98-A8814B90F3C0}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {76D90B92-ECC7-409C-9F98-A8814B90F3C0}.BlenderPlayer Release|Win32.Build.0 = Blender Release|Win32
+ {1CC733F1-6AB5-4904-8F63-C08C46B79DD9}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {1CC733F1-6AB5-4904-8F63-C08C46B79DD9}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {1CC733F1-6AB5-4904-8F63-C08C46B79DD9}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {1CC733F1-6AB5-4904-8F63-C08C46B79DD9}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {1CC733F1-6AB5-4904-8F63-C08C46B79DD9}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {1CC733F1-6AB5-4904-8F63-C08C46B79DD9}.BlenderPlayer Debug|Win32.Build.0 = Blender Debug|Win32
+ {1CC733F1-6AB5-4904-8F63-C08C46B79DD9}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {1CC733F1-6AB5-4904-8F63-C08C46B79DD9}.BlenderPlayer Release|Win32.Build.0 = Blender Release|Win32
+ {542A9FA1-B7FF-441C-AE15-054DB31D3488}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {542A9FA1-B7FF-441C-AE15-054DB31D3488}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {542A9FA1-B7FF-441C-AE15-054DB31D3488}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {542A9FA1-B7FF-441C-AE15-054DB31D3488}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {542A9FA1-B7FF-441C-AE15-054DB31D3488}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {542A9FA1-B7FF-441C-AE15-054DB31D3488}.BlenderPlayer Debug|Win32.Build.0 = Blender Debug|Win32
+ {542A9FA1-B7FF-441C-AE15-054DB31D3488}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {542A9FA1-B7FF-441C-AE15-054DB31D3488}.BlenderPlayer Release|Win32.Build.0 = Blender Release|Win32
+ {E86B7BDE-C33C-4E55-9433-E74C141D7538}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {E86B7BDE-C33C-4E55-9433-E74C141D7538}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {E86B7BDE-C33C-4E55-9433-E74C141D7538}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {E86B7BDE-C33C-4E55-9433-E74C141D7538}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {E86B7BDE-C33C-4E55-9433-E74C141D7538}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {E86B7BDE-C33C-4E55-9433-E74C141D7538}.BlenderPlayer Debug|Win32.Build.0 = Blender Debug|Win32
+ {E86B7BDE-C33C-4E55-9433-E74C141D7538}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {E86B7BDE-C33C-4E55-9433-E74C141D7538}.BlenderPlayer Release|Win32.Build.0 = Blender Release|Win32
+ {4B6AFCC5-968C-424A-8F20-76E41B3BEF74}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {4B6AFCC5-968C-424A-8F20-76E41B3BEF74}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {4B6AFCC5-968C-424A-8F20-76E41B3BEF74}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {4B6AFCC5-968C-424A-8F20-76E41B3BEF74}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {4B6AFCC5-968C-424A-8F20-76E41B3BEF74}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {4B6AFCC5-968C-424A-8F20-76E41B3BEF74}.BlenderPlayer Debug|Win32.Build.0 = Blender Debug|Win32
+ {4B6AFCC5-968C-424A-8F20-76E41B3BEF74}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {4B6AFCC5-968C-424A-8F20-76E41B3BEF74}.BlenderPlayer Release|Win32.Build.0 = Blender Release|Win32
+ {213356A9-3A1F-41DA-9819-1297BCD17DEE}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {213356A9-3A1F-41DA-9819-1297BCD17DEE}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {213356A9-3A1F-41DA-9819-1297BCD17DEE}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {213356A9-3A1F-41DA-9819-1297BCD17DEE}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {213356A9-3A1F-41DA-9819-1297BCD17DEE}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {213356A9-3A1F-41DA-9819-1297BCD17DEE}.BlenderPlayer Debug|Win32.Build.0 = Blender Debug|Win32
+ {213356A9-3A1F-41DA-9819-1297BCD17DEE}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {213356A9-3A1F-41DA-9819-1297BCD17DEE}.BlenderPlayer Release|Win32.Build.0 = Blender Release|Win32
+ {8B8D4FC3-3234-4E54-8376-5AB83D00D164}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {8B8D4FC3-3234-4E54-8376-5AB83D00D164}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {8B8D4FC3-3234-4E54-8376-5AB83D00D164}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {8B8D4FC3-3234-4E54-8376-5AB83D00D164}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {8B8D4FC3-3234-4E54-8376-5AB83D00D164}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {8B8D4FC3-3234-4E54-8376-5AB83D00D164}.BlenderPlayer Debug|Win32.Build.0 = Blender Debug|Win32
+ {8B8D4FC3-3234-4E54-8376-5AB83D00D164}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {8B8D4FC3-3234-4E54-8376-5AB83D00D164}.BlenderPlayer Release|Win32.Build.0 = Blender Release|Win32
+ {98330220-47A6-42E0-9DE4-AD0FF5D204D6}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {98330220-47A6-42E0-9DE4-AD0FF5D204D6}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {98330220-47A6-42E0-9DE4-AD0FF5D204D6}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {98330220-47A6-42E0-9DE4-AD0FF5D204D6}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {98330220-47A6-42E0-9DE4-AD0FF5D204D6}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {98330220-47A6-42E0-9DE4-AD0FF5D204D6}.BlenderPlayer Debug|Win32.Build.0 = Blender Debug|Win32
+ {98330220-47A6-42E0-9DE4-AD0FF5D204D6}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {98330220-47A6-42E0-9DE4-AD0FF5D204D6}.BlenderPlayer Release|Win32.Build.0 = Blender Release|Win32
+ {B789C2F3-279E-4A85-8F0A-7F7AC068E598}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {B789C2F3-279E-4A85-8F0A-7F7AC068E598}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
+ {B789C2F3-279E-4A85-8F0A-7F7AC068E598}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {B789C2F3-279E-4A85-8F0A-7F7AC068E598}.Blender Release|Win32.Build.0 = Blender Release|Win32
+ {B789C2F3-279E-4A85-8F0A-7F7AC068E598}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {B789C2F3-279E-4A85-8F0A-7F7AC068E598}.BlenderPlayer Debug|Win32.Build.0 = Blender Debug|Win32
+ {B789C2F3-279E-4A85-8F0A-7F7AC068E598}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ {B789C2F3-279E-4A85-8F0A-7F7AC068E598}.BlenderPlayer Release|Win32.Build.0 = Blender Release|Win32
+ {02110D03-59DB-4571-8787-72B3C03B2F2D}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {02110D03-59DB-4571-8787-72B3C03B2F2D}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
+ {02110D03-59DB-4571-8787-72B3C03B2F2D}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
+ {02110D03-59DB-4571-8787-72B3C03B2F2D}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/projectfiles_vc9/blender/blender.vcproj b/projectfiles_vc9/blender/blender.vcproj
new file mode 100644
index 00000000000..8950ef822a1
--- /dev/null
+++ b/projectfiles_vc9/blender/blender.vcproj
@@ -0,0 +1,264 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj b/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj
new file mode 100644
index 00000000000..3cc89a17f1e
--- /dev/null
+++ b/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj
@@ -0,0 +1,1080 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/blender/blenlib/BLI_blenlib.vcproj b/projectfiles_vc9/blender/blenlib/BLI_blenlib.vcproj
new file mode 100644
index 00000000000..8f36578d2b2
--- /dev/null
+++ b/projectfiles_vc9/blender/blenlib/BLI_blenlib.vcproj
@@ -0,0 +1,725 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/blender/blenpluginapi/blenpluginapi/blenpluginapi.vcproj b/projectfiles_vc9/blender/blenpluginapi/blenpluginapi/blenpluginapi.vcproj
new file mode 100644
index 00000000000..02ea370e34a
--- /dev/null
+++ b/projectfiles_vc9/blender/blenpluginapi/blenpluginapi/blenpluginapi.vcproj
@@ -0,0 +1,513 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/blender/ftfont/FTF_ftfont.vcproj b/projectfiles_vc9/blender/ftfont/FTF_ftfont.vcproj
new file mode 100644
index 00000000000..0ffc2ce2a41
--- /dev/null
+++ b/projectfiles_vc9/blender/ftfont/FTF_ftfont.vcproj
@@ -0,0 +1,207 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/blender/gpu/BL_gpu.vcproj b/projectfiles_vc9/blender/gpu/BL_gpu.vcproj
new file mode 100644
index 00000000000..82b6f30aa86
--- /dev/null
+++ b/projectfiles_vc9/blender/gpu/BL_gpu.vcproj
@@ -0,0 +1,525 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/blender/imbuf/BL_imbuf.vcproj b/projectfiles_vc9/blender/imbuf/BL_imbuf.vcproj
new file mode 100644
index 00000000000..703a6407f9a
--- /dev/null
+++ b/projectfiles_vc9/blender/imbuf/BL_imbuf.vcproj
@@ -0,0 +1,888 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/blender/img/BL_img.vcproj b/projectfiles_vc9/blender/img/BL_img.vcproj
new file mode 100644
index 00000000000..b4c4d1179b0
--- /dev/null
+++ b/projectfiles_vc9/blender/img/BL_img.vcproj
@@ -0,0 +1,287 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/blender/loader/BLO_loader.vcproj b/projectfiles_vc9/blender/loader/BLO_loader.vcproj
new file mode 100644
index 00000000000..2b82599b643
--- /dev/null
+++ b/projectfiles_vc9/blender/loader/BLO_loader.vcproj
@@ -0,0 +1,664 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/blender/makesdna/DNA_makesdna.vcproj b/projectfiles_vc9/blender/makesdna/DNA_makesdna.vcproj
new file mode 100644
index 00000000000..cb68fa41619
--- /dev/null
+++ b/projectfiles_vc9/blender/makesdna/DNA_makesdna.vcproj
@@ -0,0 +1,828 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/blender/nodes/nodes.vcproj b/projectfiles_vc9/blender/nodes/nodes.vcproj
new file mode 100644
index 00000000000..d32ef98da2f
--- /dev/null
+++ b/projectfiles_vc9/blender/nodes/nodes.vcproj
@@ -0,0 +1,713 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/blender/radiosity/BRA_radiosity.vcproj b/projectfiles_vc9/blender/radiosity/BRA_radiosity.vcproj
new file mode 100644
index 00000000000..edde52b0a07
--- /dev/null
+++ b/projectfiles_vc9/blender/radiosity/BRA_radiosity.vcproj
@@ -0,0 +1,220 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/blender/render/BRE_render.vcproj b/projectfiles_vc9/blender/render/BRE_render.vcproj
new file mode 100644
index 00000000000..27b2163f20c
--- /dev/null
+++ b/projectfiles_vc9/blender/render/BRE_render.vcproj
@@ -0,0 +1,368 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/blender/renderconverter/BRE_renderconverter.vcproj b/projectfiles_vc9/blender/renderconverter/BRE_renderconverter.vcproj
new file mode 100644
index 00000000000..d4be79e1d46
--- /dev/null
+++ b/projectfiles_vc9/blender/renderconverter/BRE_renderconverter.vcproj
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/blender/src/BL_src.vcproj b/projectfiles_vc9/blender/src/BL_src.vcproj
new file mode 100644
index 00000000000..459bd9f1ed5
--- /dev/null
+++ b/projectfiles_vc9/blender/src/BL_src.vcproj
@@ -0,0 +1,1264 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/blender/yafray/BRE_yafray.vcproj b/projectfiles_vc9/blender/yafray/BRE_yafray.vcproj
new file mode 100644
index 00000000000..92e1bd2595a
--- /dev/null
+++ b/projectfiles_vc9/blender/yafray/BRE_yafray.vcproj
@@ -0,0 +1,225 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/gameengine/blenderhook/KX_blenderhook.vcproj b/projectfiles_vc9/gameengine/blenderhook/KX_blenderhook.vcproj
new file mode 100644
index 00000000000..64f6b92ef29
--- /dev/null
+++ b/projectfiles_vc9/gameengine/blenderhook/KX_blenderhook.vcproj
@@ -0,0 +1,247 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/gameengine/converter/KX_converter.vcproj b/projectfiles_vc9/gameengine/converter/KX_converter.vcproj
new file mode 100644
index 00000000000..53a628ed5ee
--- /dev/null
+++ b/projectfiles_vc9/gameengine/converter/KX_converter.vcproj
@@ -0,0 +1,623 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/gameengine/expression/EXP_expressions.vcproj b/projectfiles_vc9/gameengine/expression/EXP_expressions.vcproj
new file mode 100644
index 00000000000..436a007dffb
--- /dev/null
+++ b/projectfiles_vc9/gameengine/expression/EXP_expressions.vcproj
@@ -0,0 +1,640 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/gameengine/gamelogic/SCA_GameLogic.vcproj b/projectfiles_vc9/gameengine/gamelogic/SCA_GameLogic.vcproj
new file mode 100644
index 00000000000..e350db5dad8
--- /dev/null
+++ b/projectfiles_vc9/gameengine/gamelogic/SCA_GameLogic.vcproj
@@ -0,0 +1,800 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/gameengine/gameplayer/axctl/GP_axctl.vcproj b/projectfiles_vc9/gameengine/gameplayer/axctl/GP_axctl.vcproj
new file mode 100644
index 00000000000..6f189714a42
--- /dev/null
+++ b/projectfiles_vc9/gameengine/gameplayer/axctl/GP_axctl.vcproj
@@ -0,0 +1,429 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/gameengine/gameplayer/common/GP_common.vcproj b/projectfiles_vc9/gameengine/gameplayer/common/GP_common.vcproj
new file mode 100644
index 00000000000..69845ef8069
--- /dev/null
+++ b/projectfiles_vc9/gameengine/gameplayer/common/GP_common.vcproj
@@ -0,0 +1,440 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/gameengine/gameplayer/ghost/GP_ghost.vcproj b/projectfiles_vc9/gameengine/gameplayer/ghost/GP_ghost.vcproj
new file mode 100644
index 00000000000..43e692e9bad
--- /dev/null
+++ b/projectfiles_vc9/gameengine/gameplayer/ghost/GP_ghost.vcproj
@@ -0,0 +1,297 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/gameengine/ketsji/KX_ketsji.vcproj b/projectfiles_vc9/gameengine/ketsji/KX_ketsji.vcproj
new file mode 100644
index 00000000000..62a0d7a7bfa
--- /dev/null
+++ b/projectfiles_vc9/gameengine/ketsji/KX_ketsji.vcproj
@@ -0,0 +1,1073 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/gameengine/ketsji/network/KX_network.vcproj b/projectfiles_vc9/gameengine/ketsji/network/KX_network.vcproj
new file mode 100644
index 00000000000..a3f43b01763
--- /dev/null
+++ b/projectfiles_vc9/gameengine/ketsji/network/KX_network.vcproj
@@ -0,0 +1,524 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/gameengine/network/loopbacknetwork/NG_loopbacknetwork.vcproj b/projectfiles_vc9/gameengine/network/loopbacknetwork/NG_loopbacknetwork.vcproj
new file mode 100644
index 00000000000..bbb8cc5ec25
--- /dev/null
+++ b/projectfiles_vc9/gameengine/network/loopbacknetwork/NG_loopbacknetwork.vcproj
@@ -0,0 +1,492 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/gameengine/network/network/NG_network.vcproj b/projectfiles_vc9/gameengine/network/network/NG_network.vcproj
new file mode 100644
index 00000000000..a9e0ce1acd2
--- /dev/null
+++ b/projectfiles_vc9/gameengine/network/network/NG_network.vcproj
@@ -0,0 +1,512 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/gameengine/physics/PHY_Physics/PHY_Bullet/PHY_Bullet.vcproj b/projectfiles_vc9/gameengine/physics/PHY_Physics/PHY_Bullet/PHY_Bullet.vcproj
new file mode 100644
index 00000000000..9d55727e90f
--- /dev/null
+++ b/projectfiles_vc9/gameengine/physics/PHY_Physics/PHY_Bullet/PHY_Bullet.vcproj
@@ -0,0 +1,468 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/gameengine/physics/PHY_Physics/PHY_Dummy/PHY_Dummy.vcproj b/projectfiles_vc9/gameengine/physics/PHY_Physics/PHY_Dummy/PHY_Dummy.vcproj
new file mode 100644
index 00000000000..5c0159d5aa9
--- /dev/null
+++ b/projectfiles_vc9/gameengine/physics/PHY_Physics/PHY_Dummy/PHY_Dummy.vcproj
@@ -0,0 +1,489 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/gameengine/physics/PHY_Physics/PHY_Ode/PHY_Ode.vcproj b/projectfiles_vc9/gameengine/physics/PHY_Physics/PHY_Ode/PHY_Ode.vcproj
new file mode 100644
index 00000000000..e9773ecf683
--- /dev/null
+++ b/projectfiles_vc9/gameengine/physics/PHY_Physics/PHY_Ode/PHY_Ode.vcproj
@@ -0,0 +1,348 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/gameengine/physics/PHY_Physics/PHY_Physics.vcproj b/projectfiles_vc9/gameengine/physics/PHY_Physics/PHY_Physics.vcproj
new file mode 100644
index 00000000000..582aed500ac
--- /dev/null
+++ b/projectfiles_vc9/gameengine/physics/PHY_Physics/PHY_Physics.vcproj
@@ -0,0 +1,521 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/gameengine/physics/PHY_Physics/PHY_Sumo/PHY_Sumo.vcproj b/projectfiles_vc9/gameengine/physics/PHY_Physics/PHY_Sumo/PHY_Sumo.vcproj
new file mode 100644
index 00000000000..793c8fe554b
--- /dev/null
+++ b/projectfiles_vc9/gameengine/physics/PHY_Physics/PHY_Sumo/PHY_Sumo.vcproj
@@ -0,0 +1,544 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/gameengine/rasterizer/RAS_rasterizer.vcproj b/projectfiles_vc9/gameengine/rasterizer/RAS_rasterizer.vcproj
new file mode 100644
index 00000000000..924babfbd21
--- /dev/null
+++ b/projectfiles_vc9/gameengine/rasterizer/RAS_rasterizer.vcproj
@@ -0,0 +1,588 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/gameengine/rasterizer/openglrasterizer/RAS_openglrasterizer.vcproj b/projectfiles_vc9/gameengine/rasterizer/openglrasterizer/RAS_openglrasterizer.vcproj
new file mode 100644
index 00000000000..155290e5e39
--- /dev/null
+++ b/projectfiles_vc9/gameengine/rasterizer/openglrasterizer/RAS_openglrasterizer.vcproj
@@ -0,0 +1,560 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/gameengine/scenegraph/SG_SceneGraph.vcproj b/projectfiles_vc9/gameengine/scenegraph/SG_SceneGraph.vcproj
new file mode 100644
index 00000000000..9c63f625820
--- /dev/null
+++ b/projectfiles_vc9/gameengine/scenegraph/SG_SceneGraph.vcproj
@@ -0,0 +1,536 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/gameengine/videotexture/TEX_Video.vcproj b/projectfiles_vc9/gameengine/videotexture/TEX_Video.vcproj
new file mode 100644
index 00000000000..4a3b4b865fc
--- /dev/null
+++ b/projectfiles_vc9/gameengine/videotexture/TEX_Video.vcproj
@@ -0,0 +1,312 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/kernel/gen_messaging/gen_messaging.vcproj b/projectfiles_vc9/kernel/gen_messaging/gen_messaging.vcproj
new file mode 100644
index 00000000000..ac958a10f54
--- /dev/null
+++ b/projectfiles_vc9/kernel/gen_messaging/gen_messaging.vcproj
@@ -0,0 +1,489 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/projectfiles_vc9/kernel/system/SYS_system.vcproj b/projectfiles_vc9/kernel/system/SYS_system.vcproj
new file mode 100644
index 00000000000..a666f1f0737
--- /dev/null
+++ b/projectfiles_vc9/kernel/system/SYS_system.vcproj
@@ -0,0 +1,520 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/release/scripts/image_edit.py b/release/scripts/image_edit.py
index a7132a4f986..cae40b74097 100644
--- a/release/scripts/image_edit.py
+++ b/release/scripts/image_edit.py
@@ -1,6 +1,6 @@
#!BPY
"""
-Name: 'Edit Externaly'
+Name: 'Edit Externally'
Blender: 242a
Group: 'Image'
Tooltip: 'Open in an application for editing. (hold Shift to configure)'
@@ -9,22 +9,23 @@ Tooltip: 'Open in an application for editing. (hold Shift to configure)'
__author__ = "Campbell Barton"
__url__ = ["blender", "blenderartists.org"]
__version__ = "1.0"
-
__bpydoc__ = """\
This script opens the current image in an external application for editing.
-Useage:
+Usage:
Choose an image for editing in the UV/Image view.
-To configure the application to open the image with, hold Shift as you click on
-this menu item.
+To configure the application to open the image with, hold Shift as you
+click on this menu item.
-For first time users try running the default application for your operating system.
-If the application does not open you can type in the full path.
-You can choose that the last entered application will be saved as a default.
+For first time users try running the default application for your
+operating system. If the application does not open you can type in
+the full path. You can choose that the last entered application will
+be saved as a default.
-* Note, default commants for opening an image are "start" for win32 and "open" for macos.
-This will use the system default assosiated application.
+* Note, default commants for opening an image are "start" for win32
+and "open" for macos. This will use the system default associated
+application.
"""
# ***** BEGIN GPL LICENSE BLOCK *****
@@ -48,17 +49,36 @@ This will use the system default assosiated application.
# ***** END GPL LICENCE BLOCK *****
# --------------------------------------------------------------------------
+import Blender
+from Blender import Image, sys, Draw, Registry
try:
- import os
+ import subprocess
import sys as py_sys
platform = py_sys.platform
except:
- Draw.PupMenu('Error, python not installed')
- os=None
+ Draw.PupMenu('Error: Recent version of Python not installed.')
+ subprocess=None
-import Blender
-from Blender import Image, sys, Draw, Registry
+def os_run(appstring, filename):
+ '''
+ Run the app, take into account different python versions etc
+ looks like python 2.6 wants a list for
+ '''
+
+ # evil trick, temp replace spaces so we can allow spaces in filenames
+ # also allows multiple instances of %f
+ appstring = appstring.replace(' ', '\t')
+ appstring = appstring.replace('%f', filename)
+ appstring = appstring.split('\t')
+
+ print ' '.join(appstring)
+
+ try: # only python 2.6 wants a list?
+ p = subprocess.Popen(appstring)
+ except:
+ p = subprocess.Popen(' '.join(appstring))
+
def edit_extern(image=None):
@@ -66,7 +86,7 @@ def edit_extern(image=None):
image = Image.GetCurrent()
if not image: # Image is None
- Draw.PupMenu('ERROR: You must select an active Image.')
+ Draw.PupMenu('ERROR: Please select active Image.')
return
if image.packed:
Draw.PupMenu('ERROR: Image is packed, unpack before editing.')
@@ -94,16 +114,19 @@ def edit_extern(image=None):
if new_text:
pupblock.append('first time, set path.')
if platform == 'win32':
- appstring = 'start "" /B "%f"'
+ # Example of path to popular image editor... ;-)
+ # appstring = '"C:\\Program Files\\Adobe\\Photoshop CS\\photoshop.exe" "%f"'
+ # Have to add "cmd /c" to make sure we're using Windows shell.
+ appstring = 'cmd /c start "" /B "%f"'
elif platform == 'darwin':
appstring = 'open "%f"'
else:
- appstring = 'gimp-remote "%f"'
+ appstring = 'gimp %f'
appstring_but = Draw.Create(appstring)
save_default_but = Draw.Create(0)
- pupblock.append(('editor: ', appstring_but, 0, 48, 'Path to application, %f will be replaced with the image path.'))
+ pupblock.append(('editor: ', appstring_but, 0, 99, 'Path to application, %f will be replaced with the image path.'))
pupblock.append(('Set Default', save_default_but, 'Store this path in the blender registry.'))
# Only configure if Shift is held,
@@ -118,19 +141,18 @@ def edit_extern(image=None):
Registry.SetKey('ExternalImageEditor', {'path':appstring}, True)
if appstring.find('%f') == -1:
- Draw.PupMenu('ERROR: The comment you entered did not contain the filename ("%f")')
+ Draw.PupMenu('ERROR: No filename specified! ("%f")')
return
# -------------------------------
- appstring = appstring.replace('%f', imageFileName)
- print '\tediting image with command "%s"' % appstring
- os.system(appstring)
+ os_run(appstring, imageFileName)
+
def main():
edit_extern()
-if __name__ == '__main__' and os != None:
- main()
\ No newline at end of file
+if __name__ == '__main__' and subprocess:
+ main()
diff --git a/source/Makefile b/source/Makefile
index 558a844eca7..662cb1df0a6 100644
--- a/source/Makefile
+++ b/source/Makefile
@@ -97,6 +97,7 @@ COMLIB += $(OCGDIR)/blender/blenloader/$(DEBUG_DIR)libblenloader.a
COMLIB += $(OCGDIR)/blender/blenpluginapi/$(DEBUG_DIR)libblenpluginapi.a
COMLIB += $(OCGDIR)/blender/nodes_shd/$(DEBUG_DIR)libnodes_shd.a
COMLIB += $(OCGDIR)/blender/nodes_cmp/$(DEBUG_DIR)libnodes_cmp.a
+COMLIB += $(OCGDIR)/blender/nodes_tex/$(DEBUG_DIR)libnodes_tex.a
COMLIB += $(OCGDIR)/blender/nodes/$(DEBUG_DIR)libnodes.a
COMLIB += $(OCGDIR)/blender/imbuf/$(DEBUG_DIR)libimbuf.a
COMLIB += $(OCGDIR)/blender/blenlib/$(DEBUG_DIR)libblenlib.a
diff --git a/source/blender/blenkernel/BKE_bad_level_calls.h b/source/blender/blenkernel/BKE_bad_level_calls.h
index 0b623526562..93bfb2339be 100644
--- a/source/blender/blenkernel/BKE_bad_level_calls.h
+++ b/source/blender/blenkernel/BKE_bad_level_calls.h
@@ -230,5 +230,12 @@ void PE_free_particle_edit(struct ParticleSystem *psys);
void PE_get_colors(char sel[4], char nosel[4]);
void PE_recalc_world_cos(struct Object *ob, struct ParticleSystem *psys);
+/* texture.c */
+struct Tex;
+struct TexResult;
+int multitex_thread(struct Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, struct TexResult *texres, short thread, short which_output);
+
+
+
#endif
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 01c54663c6d..fa3a654c1c2 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -47,6 +47,7 @@ struct rctf;
struct ListBase;
struct RenderData;
struct Scene;
+struct Tex;
struct GPUMaterial;
struct GPUNode;
struct GPUNodeStack;
@@ -118,6 +119,8 @@ typedef struct bNodeType {
#define NODE_CLASS_MATTE 9
#define NODE_CLASS_DISTORT 10
#define NODE_CLASS_OP_DYNAMIC 11
+#define NODE_CLASS_PATTERN 12
+#define NODE_CLASS_TEXTURE 13
/* ************** GENERIC API, TREES *************** */
@@ -377,6 +380,45 @@ void ntreeCompositForceHidden(struct bNodeTree *ntree);
void free_compbuf(struct CompBuf *cbuf); /* internal...*/
+
+/* ************** TEXTURE NODES *************** */
+
+struct TexResult;
+
+#define TEX_NODE_OUTPUT 101
+#define TEX_NODE_CHECKER 102
+#define TEX_NODE_TEXTURE 103
+#define TEX_NODE_BRICKS 104
+#define TEX_NODE_MATH 105
+#define TEX_NODE_MIX_RGB 106
+#define TEX_NODE_RGBTOBW 107
+#define TEX_NODE_VALTORGB 108
+#define TEX_NODE_IMAGE 109
+#define TEX_NODE_CURVE_RGB 110
+#define TEX_NODE_INVERT 111
+#define TEX_NODE_HUE_SAT 112
+#define TEX_NODE_CURVE_TIME 113
+#define TEX_NODE_ROTATE 114
+#define TEX_NODE_VIEWER 115
+#define TEX_NODE_TRANSLATE 116
+
+/* 201-299 reserved. Use like this: TEX_NODE_PROC + TEX_CLOUDS, etc */
+#define TEX_NODE_PROC 200
+#define TEX_NODE_PROC_MAX 300
+
+extern struct ListBase node_all_textures;
+
+/* API */
+int ntreeTexTagAnimated(struct bNodeTree *ntree);
+void ntreeTexUpdatePreviews( struct bNodeTree* nodetree );
+void ntreeTexExecTree(struct bNodeTree *ntree, struct TexResult *target, float *coord, char do_preview, short thread, struct Tex *tex, short which_output);
+void ntreeTexCheckCyclics(struct bNodeTree *ntree);
+void ntreeTexAssignIndex(struct bNodeTree *ntree, struct bNode *node);
+char* ntreeTexOutputMenu(struct bNodeTree *ntree);
+
+
+/**/
+
void init_nodesystem(void);
void free_nodesystem(void);
diff --git a/source/blender/blenkernel/SConscript b/source/blender/blenkernel/SConscript
index 4c5cd51b836..ab122e40bfc 100644
--- a/source/blender/blenkernel/SConscript
+++ b/source/blender/blenkernel/SConscript
@@ -6,7 +6,7 @@ sources = env.Glob('intern/*.c')
incs = '. #/intern/guardedalloc ../include ../blenlib ../makesdna'
incs += ' ../render/extern/include #/intern/decimation/extern'
incs += ' ../imbuf ../avi #/intern/elbeem/extern ../nodes'
-incs += ' #/intern/iksolver/extern ../blenloader ../quicktime'
+incs += ' #/intern/iksolver/extern ../blenloader'
incs += ' #/extern/bullet2/src'
incs += ' #/intern/bmfont'
incs += ' #/intern/opennl/extern'
@@ -14,7 +14,6 @@ incs += ' ../gpu #/extern/glew/include'
incs += ' ' + env['BF_OPENGL_INC']
incs += ' ' + env['BF_ZLIB_INC']
-incs += ' ' + env['BF_SDL_INC']
defs = ''
@@ -24,6 +23,12 @@ else:
incs += ' ../python'
incs += ' ' + env['BF_PYTHON_INC']
+if env['WITH_BF_QUICKTIME']:
+ incs += ' ../quicktime'
+
+if env['WITH_BF_SDL']:
+ incs += ' ' + env['BF_SDL_INC']
+
if env['WITH_BF_INTERNATIONAL']:
defs += ' WITH_FREETYPE2'
diff --git a/source/blender/blenkernel/bad_level_call_stubs/stubs.c b/source/blender/blenkernel/bad_level_call_stubs/stubs.c
index ae336d0fc26..91fb9031597 100644
--- a/source/blender/blenkernel/bad_level_call_stubs/stubs.c
+++ b/source/blender/blenkernel/bad_level_call_stubs/stubs.c
@@ -347,3 +347,6 @@ void txt_copy_clipboard (struct Text *text){}
char stipple_quarttone[1];
+/* texture.c */
+int multitex_thread(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, TexResult *texres, short thread, short which_output) {return 0;}
+
diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c
index 3b6820461be..35097c05358 100644
--- a/source/blender/blenkernel/intern/displist.c
+++ b/source/blender/blenkernel/intern/displist.c
@@ -1381,7 +1381,7 @@ void makeDispListSurf(Object *ob, ListBase *dispbase, int forRender)
for (nu=nubase->first; nu; nu=nu->next) {
if(forRender || nu->hide==0) {
if(nu->pntsv==1) {
- len= nu->resolu*SEGMENTSU(nu)+1;
+ len= nu->pntsu*nu->resolu;
dl= MEM_callocN(sizeof(DispList), "makeDispListsurf");
dl->verts= MEM_callocN(len*3*sizeof(float), "dlverts");
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index 3d1b342bf73..33c1a4da4c7 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -597,6 +597,8 @@ static void get_flags_for_id(ID *id, char *buf)
if(GS(id->name)==ID_MA)
isnode= ((Material *)id)->use_nodes;
+ if(GS(id->name)==ID_TE)
+ isnode= ((Tex *)id)->use_nodes;
if (id->us<0)
sprintf(buf, "-1W ");
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index 27f4fd3bc05..753058b1fdd 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -650,7 +650,7 @@ static void do_init_render_material(Material *ma, int r_mode, float *amb)
if(ma->septex & (1<mtex[a];
- if(mtex && mtex->tex && mtex->tex->type) {
+ if(mtex && mtex->tex && (mtex->tex->type | (mtex->tex->use_nodes && mtex->tex->nodetree) )) {
ma->texco |= mtex->texco;
ma->mapto |= mtex->mapto;
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index b881b681ed9..ae81a31c373 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -38,6 +38,7 @@
#include "DNA_image_types.h"
#include "DNA_node_types.h"
#include "DNA_material_types.h"
+#include "DNA_texture_types.h"
#include "DNA_text_types.h"
#include "DNA_scene_types.h"
@@ -70,6 +71,8 @@
#include "intern/CMP_util.h" /* stupid include path... */
#include "SHD_node.h"
+#include "TEX_node.h"
+#include "intern/TEX_util.h"
#include "GPU_extensions.h"
#include "GPU_material.h"
@@ -77,6 +80,7 @@
static ListBase empty_list = {NULL, NULL};
ListBase node_all_composit = {NULL, NULL};
ListBase node_all_shaders = {NULL, NULL};
+ListBase node_all_textures = {NULL, NULL};
/* ************** Type stuff ********** */
@@ -106,6 +110,8 @@ void ntreeInitTypes(bNodeTree *ntree)
ntree->alltypes= node_all_shaders;
else if(ntree->type==NTREE_COMPOSIT)
ntree->alltypes= node_all_composit;
+ else if(ntree->type==NTREE_TEXTURE)
+ ntree->alltypes= node_all_textures;
else {
ntree->alltypes= empty_list;
printf("Error: no type definitions for nodes\n");
@@ -661,6 +667,28 @@ void nodeVerifyGroup(bNodeTree *ngroup)
}
}
}
+ else if(ngroup->type==NTREE_TEXTURE) {
+ Tex *tx;
+ for(tx= G.main->tex.first; tx; tx= tx->id.next) {
+ if(tx->nodetree) {
+ bNode *node;
+
+ /* find if group is in tree */
+ for(node= tx->nodetree->nodes.first; node; node= node->next)
+ if(node->id == (ID *)ngroup)
+ break;
+
+ if(node) {
+ /* set all type pointers OK */
+ ntreeInitTypes(tx->nodetree);
+
+ for(node= tx->nodetree->nodes.first; node; node= node->next)
+ if(node->id == (ID *)ngroup)
+ nodeVerifyType(tx->nodetree, node);
+ }
+ }
+ }
+ }
}
/* also to check all users of groups. Now only used in editor for hide/unhide */
@@ -717,6 +745,26 @@ void nodeGroupSocketUseFlags(bNodeTree *ngroup)
}
}
}
+ else if(ngroup->type==NTREE_TEXTURE) {
+ Tex *tx;
+ for(tx= G.main->tex.first; tx; tx= tx->id.next) {
+ if(tx->nodetree) {
+ for(node= tx->nodetree->nodes.first; node; node= node->next) {
+ if(node->id==(ID *)ngroup) {
+ for(sock= node->inputs.first; sock; sock= sock->next)
+ if(sock->link)
+ if(sock->tosock)
+ sock->tosock->flag |= SOCK_IN_USE;
+ for(sock= node->outputs.first; sock; sock= sock->next)
+ if(nodeCountSocketLinks(tx->nodetree, sock))
+ if(sock->tosock)
+ sock->tosock->flag |= SOCK_IN_USE;
+ }
+ }
+ }
+ }
+ }
+
}
/* finds a node based on given socket */
@@ -901,9 +949,12 @@ bNode *nodeAddNodeType(bNodeTree *ntree, int type, bNodeTree *ngroup, ID *id)
/* got it-bob*/
if(ntype->initfunc!=NULL)
ntype->initfunc(node);
+
+ if(type==TEX_NODE_OUTPUT)
+ ntreeTexAssignIndex(ntree, node);
nodeAddSockets(node, ntype);
-
+
return node;
}
@@ -970,6 +1021,9 @@ bNode *nodeCopyNode(struct bNodeTree *ntree, struct bNode *node, int internal)
node->new_node= nnode;
nnode->new_node= NULL;
nnode->preview= NULL;
+
+ if(node->type==TEX_NODE_OUTPUT)
+ ntreeTexAssignIndex(ntree, node);
return nnode;
}
@@ -1260,6 +1314,22 @@ void ntreeMakeLocal(bNodeTree *ntree)
}
}
}
+ else if(ntree->type==NTREE_TEXTURE) {
+ Tex *tx;
+ for(tx= G.main->tex.first; tx; tx= tx->id.next) {
+ if(tx->nodetree) {
+ bNode *node;
+
+ /* find if group is in tree */
+ for(node= tx->nodetree->nodes.first; node; node= node->next) {
+ if(node->id == (ID *)ntree) {
+ if(tx->id.lib) lib= 1;
+ else local= 1;
+ }
+ }
+ }
+ }
+ }
/* if all users are local, we simply make tree local */
if(local && lib==0) {
@@ -1311,6 +1381,25 @@ void ntreeMakeLocal(bNodeTree *ntree)
}
}
}
+ else if(ntree->type==NTREE_TEXTURE) {
+ Tex *tx;
+ for(tx= G.main->tex.first; tx; tx= tx->id.next) {
+ if(tx->nodetree) {
+ bNode *node;
+
+ /* find if group is in tree */
+ for(node= tx->nodetree->nodes.first; node; node= node->next) {
+ if(node->id == (ID *)ntree) {
+ if(tx->id.lib==NULL) {
+ node->id= &newtree->id;
+ newtree->id.us++;
+ ntree->id.us--;
+ }
+ }
+ }
+ }
+ }
+ }
}
}
@@ -1575,6 +1664,8 @@ void NodeTagChanged(bNodeTree *ntree, bNode *node)
}
node->need_exec= 1;
}
+ else if(ntree->type == NTREE_TEXTURE)
+ ntreeTexUpdatePreviews(ntree);
}
void NodeTagIDChanged(bNodeTree *ntree, ID *id)
@@ -1813,7 +1904,7 @@ static void composit_begin_exec(bNodeTree *ntree, int is_group)
sock->ns.data= NULL;
}
}
- }
+ }
/* cannot initialize them while using in threads */
if(ELEM3(node->type, CMP_NODE_TIME, CMP_NODE_CURVE_VEC, CMP_NODE_CURVE_RGB)) {
curvemapping_initialize(node->storage);
@@ -1929,12 +2020,28 @@ static void ntreeReleaseThreadStack(bNodeThreadStack *nts)
nts->used= 0;
}
+/* free texture delegates */
+static void tex_end_exec(bNodeTree *ntree)
+{
+ bNodeThreadStack *nts;
+ bNodeStack *ns;
+ int th, a;
+
+ if(ntree->threadstack)
+ for(th=0; ththreadstack[th].first; nts; nts=nts->next)
+ for(ns= nts->stack, a=0; astacksize; a++, ns++)
+ if(ns->data)
+ MEM_freeN(ns->data);
+
+}
+
void ntreeBeginExecTree(bNodeTree *ntree)
{
/* let's make it sure */
if(ntree->init & NTREE_EXEC_INIT)
return;
-
+
/* allocate the thread stack listbase array */
if(ntree->type!=NTREE_COMPOSIT)
ntree->threadstack= MEM_callocN(BLENDER_MAX_THREADS*sizeof(ListBase), "thread stack array");
@@ -1986,6 +2093,8 @@ void ntreeEndExecTree(bNodeTree *ntree)
/* another callback candidate! */
if(ntree->type==NTREE_COMPOSIT)
composit_end_exec(ntree, 0);
+ else if(ntree->type==NTREE_TEXTURE)
+ tex_end_exec(ntree);
if(ntree->stack) {
MEM_freeN(ntree->stack);
@@ -2622,6 +2731,27 @@ void ntreeCompositTagGenerators(bNodeTree *ntree)
}
}
+int ntreeTexTagAnimated(bNodeTree *ntree)
+{
+ bNode *node;
+
+ if(ntree==NULL) return 0;
+
+ for(node= ntree->nodes.first; node; node= node->next) {
+ if(node->type==TEX_NODE_CURVE_TIME) {
+ NodeTagChanged(ntree, node);
+ return 1;
+ }
+ else if(node->type==NODE_GROUP) {
+ if( ntreeTexTagAnimated((bNodeTree *)node->id) ) {
+ return 1;
+ }
+ }
+ }
+
+ return 0;
+}
+
/* ************* node definition init ********** */
static bNodeType *is_nodetype_registered(ListBase *typelist, int type, ID *id)
@@ -2745,6 +2875,41 @@ static void registerShaderNodes(ListBase *ntypelist)
nodeRegisterType(ntypelist, &sh_node_hue_sat);
}
+static void registerTextureNodes(ListBase *ntypelist)
+{
+ nodeRegisterType(ntypelist, &node_group_typeinfo);
+ nodeRegisterType(ntypelist, &tex_node_math);
+ nodeRegisterType(ntypelist, &tex_node_mix_rgb);
+ nodeRegisterType(ntypelist, &tex_node_valtorgb);
+ nodeRegisterType(ntypelist, &tex_node_rgbtobw);
+ nodeRegisterType(ntypelist, &tex_node_curve_rgb);
+ nodeRegisterType(ntypelist, &tex_node_curve_time);
+ nodeRegisterType(ntypelist, &tex_node_invert);
+ nodeRegisterType(ntypelist, &tex_node_hue_sat);
+
+ nodeRegisterType(ntypelist, &tex_node_output);
+ nodeRegisterType(ntypelist, &tex_node_viewer);
+
+ nodeRegisterType(ntypelist, &tex_node_checker);
+ nodeRegisterType(ntypelist, &tex_node_texture);
+ nodeRegisterType(ntypelist, &tex_node_bricks);
+ nodeRegisterType(ntypelist, &tex_node_image);
+
+ nodeRegisterType(ntypelist, &tex_node_rotate);
+ nodeRegisterType(ntypelist, &tex_node_translate);
+
+ nodeRegisterType(ntypelist, &tex_node_proc_voronoi);
+ nodeRegisterType(ntypelist, &tex_node_proc_blend);
+ nodeRegisterType(ntypelist, &tex_node_proc_magic);
+ nodeRegisterType(ntypelist, &tex_node_proc_marble);
+ nodeRegisterType(ntypelist, &tex_node_proc_clouds);
+ nodeRegisterType(ntypelist, &tex_node_proc_wood);
+ nodeRegisterType(ntypelist, &tex_node_proc_musgrave);
+ nodeRegisterType(ntypelist, &tex_node_proc_noise);
+ nodeRegisterType(ntypelist, &tex_node_proc_stucci);
+ nodeRegisterType(ntypelist, &tex_node_proc_distnoise);
+}
+
static void remove_dynamic_typeinfos(ListBase *list)
{
bNodeType *ntype= list->first;
@@ -2782,6 +2947,7 @@ void init_nodesystem(void)
{
registerCompositNodes(&node_all_composit);
registerShaderNodes(&node_all_shaders);
+ registerTextureNodes(&node_all_textures);
}
void free_nodesystem(void)
@@ -2790,4 +2956,5 @@ void free_nodesystem(void)
BLI_freelistN(&node_all_composit);
remove_dynamic_typeinfos(&node_all_shaders);
BLI_freelistN(&node_all_shaders);
+ BLI_freelistN(&node_all_textures);
}
diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c
index ab9e6f9af41..52b88de06e0 100644
--- a/source/blender/blenkernel/intern/texture.c
+++ b/source/blender/blenkernel/intern/texture.c
@@ -421,6 +421,11 @@ void free_texture(Tex *tex)
BKE_previewimg_free(&tex->preview);
BKE_icon_delete((struct ID*)tex);
tex->id.icon_id = 0;
+
+ if(tex->nodetree) {
+ ntreeFreeTree(tex->nodetree);
+ MEM_freeN(tex->nodetree);
+ }
}
/* ------------------------------------------------------------------------- */
@@ -578,6 +583,11 @@ Tex *copy_texture(Tex *tex)
if(tex->preview) texn->preview = BKE_previewimg_copy(tex->preview);
+ if(tex->nodetree) {
+ ntreeEndExecTree(tex->nodetree);
+ texn->nodetree= ntreeCopyTree(tex->nodetree, 0); /* 0 == full new tree */
+ }
+
return texn;
}
@@ -728,6 +738,10 @@ void autotexname(Tex *tex)
char di[FILE_MAXDIR], fi[FILE_MAXFILE];
if(tex) {
+ if(tex->use_nodes) {
+ new_id(&G.main->tex, (ID *)tex, "Noddy");
+ }
+ else
if(tex->type==TEX_IMAGE) {
ima= tex->ima;
if(ima) {
diff --git a/source/blender/blenlib/BLI_blenlib.h b/source/blender/blenlib/BLI_blenlib.h
index 4bbda9709d7..13d5b5fe829 100644
--- a/source/blender/blenlib/BLI_blenlib.h
+++ b/source/blender/blenlib/BLI_blenlib.h
@@ -416,7 +416,7 @@ void *BLI_pointer_from_int(int val);
* @param member The name of a member field of @a strct
* @retval The offset in bytes of @a member within @a strct
*/
-#define BLI_STRUCT_OFFSET(strct, member) ((int) &((strct*) 0)->member)
+#define BLI_STRUCT_OFFSET(strct, member) ((int)(intptr_t) &((strct*) 0)->member)
#ifdef __cplusplus
}
diff --git a/source/blender/blenlib/BLI_linklist.h b/source/blender/blenlib/BLI_linklist.h
index e840ffd167a..ed202c11429 100644
--- a/source/blender/blenlib/BLI_linklist.h
+++ b/source/blender/blenlib/BLI_linklist.h
@@ -45,6 +45,7 @@ typedef struct LinkNode {
} LinkNode;
int BLI_linklist_length (struct LinkNode *list);
+int BLI_linklist_index (struct LinkNode *list, void *ptr);
void BLI_linklist_reverse (struct LinkNode **listp);
diff --git a/source/blender/blenlib/BLI_memarena.h b/source/blender/blenlib/BLI_memarena.h
index 34d732e1862..a2954f8fa0d 100644
--- a/source/blender/blenlib/BLI_memarena.h
+++ b/source/blender/blenlib/BLI_memarena.h
@@ -50,6 +50,7 @@ typedef struct MemArena MemArena;
struct MemArena* BLI_memarena_new (int bufsize);
void BLI_memarena_free (struct MemArena *ma);
+void BLI_memarena_use_malloc (struct MemArena *ma);
void BLI_memarena_use_calloc (struct MemArena *ma);
void* BLI_memarena_alloc (struct MemArena *ma, int size);
diff --git a/source/blender/blenlib/SConscript b/source/blender/blenlib/SConscript
index e7a4f2eaf13..829b39f4a61 100644
--- a/source/blender/blenlib/SConscript
+++ b/source/blender/blenlib/SConscript
@@ -7,9 +7,11 @@ cflags=''
incs = '. ../makesdna ../blenkernel #/intern/guardedalloc ../include'
incs += ' ' + env['BF_FREETYPE_INC']
incs += ' ' + env['BF_ZLIB_INC']
-incs += ' ' + env['BF_SDL_INC']
defs = ''
+if env['WITH_BF_SDL']:
+ incs += ' ' + env['BF_SDL_INC']
+
if env['WITH_BF_INTERNATIONAL']:
defs = 'WITH_FREETYPE2'
@@ -21,7 +23,7 @@ if env['OURPLATFORM'] == 'linux2':
cflags='-pthread'
incs += ' ../../../extern/binreloc/include'
-if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw'):
+if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross'):
incs += ' ' + env['BF_PTHREADS_INC']
env.BlenderLib ( 'bf_blenlib', sources, Split(incs), Split(defs), libtype=['core', 'intern', 'player'], priority = [85,150,195], compileflags =cflags )
diff --git a/source/blender/blenlib/intern/BLI_linklist.c b/source/blender/blenlib/intern/BLI_linklist.c
index 506a1036ed6..962bbeea373 100644
--- a/source/blender/blenlib/intern/BLI_linklist.c
+++ b/source/blender/blenlib/intern/BLI_linklist.c
@@ -50,6 +50,18 @@ int BLI_linklist_length(LinkNode *list) {
}
}
+int BLI_linklist_index(struct LinkNode *list, void *ptr)
+{
+ int index;
+
+ for (index = 0; list; list= list->next, index++) {
+ if (list->link == ptr)
+ return index;
+ }
+
+ return -1;
+}
+
void BLI_linklist_reverse(LinkNode **listp) {
LinkNode *rhead= NULL, *cur= *listp;
diff --git a/source/blender/blenlib/intern/BLI_memarena.c b/source/blender/blenlib/intern/BLI_memarena.c
index 69dd13cd335..87d2f0426b2 100644
--- a/source/blender/blenlib/intern/BLI_memarena.c
+++ b/source/blender/blenlib/intern/BLI_memarena.c
@@ -60,6 +60,10 @@ void BLI_memarena_use_calloc(MemArena *ma) {
ma->use_calloc= 1;
}
+void BLI_memarena_use_malloc(MemArena *ma) {
+ ma->use_calloc= 0;
+}
+
void BLI_memarena_free(MemArena *ma) {
BLI_linklist_free(ma->bufs, (void(*)(void*)) MEM_freeN);
MEM_freeN(ma);
diff --git a/source/blender/blenlib/intern/threads.c b/source/blender/blenlib/intern/threads.c
index 9df8bbc81e3..07c02b8024f 100644
--- a/source/blender/blenlib/intern/threads.c
+++ b/source/blender/blenlib/intern/threads.c
@@ -42,7 +42,7 @@
/* for checking system threads - BLI_system_thread_count */
#ifdef WIN32
-#include "Windows.h"
+#include "windows.h"
#elif defined(__APPLE__)
#include
#include
diff --git a/source/blender/blenloader/SConscript b/source/blender/blenloader/SConscript
index fb36b15e3e7..e4e39e6cac4 100644
--- a/source/blender/blenloader/SConscript
+++ b/source/blender/blenloader/SConscript
@@ -5,7 +5,6 @@ sources = env.Glob('intern/*.c')
incs = '. #/intern/guardedalloc ../blenlib ../blenkernel'
incs += ' ../makesdna ../readblenfile ../include'
-incs += ' ../python ../../kernel/gen_messaging'
incs += ' ../render/extern/include'
incs += ' ' + env['BF_ZLIB_INC']
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index ea8db51a300..9001e75b55b 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -1524,6 +1524,7 @@ static void lib_verify_nodetree(Main *main, int open)
{
Scene *sce;
Material *ma;
+ Tex *tx;
bNodeTree *ntree;
/* this crashes blender on undo/redo
@@ -1548,6 +1549,11 @@ static void lib_verify_nodetree(Main *main, int open)
if(sce->nodetree)
ntreeVerifyTypes(sce->nodetree);
}
+ /* and texture trees */
+ for(tx= main->tex.first; tx; tx= tx->id.next) {
+ if(tx->nodetree)
+ ntreeVerifyTypes(tx->nodetree);
+ }
}
@@ -1584,6 +1590,9 @@ static void direct_link_nodetree(FileData *fd, bNodeTree *ntree)
else if(ELEM3(node->type, CMP_NODE_IMAGE, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER))
((ImageUser *)node->storage)->ok= 1;
}
+ else if( ntree->type==NTREE_TEXTURE && (node->type==TEX_NODE_CURVE_RGB || node->type==TEX_NODE_CURVE_TIME) ) {
+ direct_link_curvemapping(fd, node->storage);
+ }
}
link_list(fd, &node->inputs);
link_list(fd, &node->outputs);
@@ -2490,6 +2499,9 @@ static void lib_link_texture(FileData *fd, Main *main)
tex->ipo= newlibadr_us(fd, tex->id.lib, tex->ipo);
if(tex->env) tex->env->object= newlibadr(fd, tex->id.lib, tex->env->object);
+ if(tex->nodetree)
+ lib_link_ntree(fd, &tex->id, tex->nodetree);
+
tex->id.flag -= LIB_NEEDLINK;
}
tex= tex->id.next;
@@ -2515,6 +2527,11 @@ static void direct_link_texture(FileData *fd, Tex *tex)
memset(tex->env->cube, 0, 6*sizeof(void *));
tex->env->ok= 0;
}
+
+ tex->nodetree= newdataadr(fd, tex->nodetree);
+ if(tex->nodetree)
+ direct_link_nodetree(fd, tex->nodetree);
+
tex->preview = direct_link_preview_image(fd, tex->preview);
tex->iuser.ok= 1;
@@ -8303,11 +8320,23 @@ static void expand_key(FileData *fd, Main *mainvar, Key *key)
expand_doit(fd, mainvar, key->ipo);
}
+static void expand_nodetree(FileData *fd, Main *mainvar, bNodeTree *ntree)
+{
+ bNode *node;
+
+ for(node= ntree->nodes.first; node; node= node->next)
+ if(node->id && node->type!=CMP_NODE_R_LAYERS)
+ expand_doit(fd, mainvar, node->id);
+
+}
static void expand_texture(FileData *fd, Main *mainvar, Tex *tex)
{
expand_doit(fd, mainvar, tex->ima);
expand_doit(fd, mainvar, tex->ipo);
+
+ if(tex->nodetree)
+ expand_nodetree(fd, mainvar, tex->nodetree);
}
static void expand_brush(FileData *fd, Main *mainvar, Brush *brush)
@@ -8320,16 +8349,6 @@ static void expand_brush(FileData *fd, Main *mainvar, Brush *brush)
expand_doit(fd, mainvar, brush->clone.image);
}
-static void expand_nodetree(FileData *fd, Main *mainvar, bNodeTree *ntree)
-{
- bNode *node;
-
- for(node= ntree->nodes.first; node; node= node->next)
- if(node->id && node->type!=CMP_NODE_R_LAYERS)
- expand_doit(fd, mainvar, node->id);
-
-}
-
static void expand_material(FileData *fd, Main *mainvar, Material *ma)
{
int a;
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 3c2ca92f3fc..e06e7eb2d85 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -174,8 +174,6 @@ Important to know is that 'streaming' has been added to files, for Blender Publi
#include "BIF_verse.h"
#endif
-#include "GEN_messaging.h"
-
#include "BLO_writefile.h"
#include "BLO_readfile.h"
#include "BLO_undofile.h"
@@ -472,6 +470,8 @@ static void write_nodetree(WriteData *wd, bNodeTree *ntree)
write_curvemapping(wd, node->storage);
else if(ntree->type==NTREE_COMPOSIT && (node->type==CMP_NODE_TIME || node->type==CMP_NODE_CURVE_VEC || node->type==CMP_NODE_CURVE_RGB))
write_curvemapping(wd, node->storage);
+ else if(ntree->type==NTREE_TEXTURE && (node->type==TEX_NODE_CURVE_RGB || node->type==TEX_NODE_CURVE_TIME) )
+ write_curvemapping(wd, node->storage);
else
writestruct(wd, DATA, node->typeinfo->storagename, 1, node->storage);
}
@@ -1336,6 +1336,12 @@ static void write_textures(WriteData *wd, ListBase *idbase)
if(tex->coba) writestruct(wd, DATA, "ColorBand", 1, tex->coba);
if(tex->env) writestruct(wd, DATA, "EnvMap", 1, tex->env);
+ /* nodetree is integral part of texture, no libdata */
+ if(tex->nodetree) {
+ writestruct(wd, DATA, "bNodeTree", 1, tex->nodetree);
+ write_nodetree(wd, tex->nodetree);
+ }
+
write_previews(wd, tex->preview);
}
tex= tex->id.next;
diff --git a/source/blender/imbuf/SConscript b/source/blender/imbuf/SConscript
index 4eba4a843b2..a8c49c0394e 100644
--- a/source/blender/imbuf/SConscript
+++ b/source/blender/imbuf/SConscript
@@ -4,7 +4,7 @@ Import ('env')
sources = env.Glob('intern/*.c')
incs = '. ../makesdna #/intern/guardedalloc #/intern/memutil ../blenlib'
-incs += ' ../avi ../quicktime ../blenkernel'
+incs += ' ../avi ../blenkernel'
incs += ' ' + env['BF_JPEG_INC']
incs += ' ' + env['BF_PNG_INC']
@@ -36,7 +36,7 @@ if env['WITH_BF_REDCODE']:
incs += ' ' + env['BF_REDCODE_INC']
if env['WITH_BF_QUICKTIME']:
- incs += ' ' + env['BF_QUICKTIME_INC']
+ incs += ' ../quicktime ' + env['BF_QUICKTIME_INC']
defs.append('WITH_QUICKTIME')
env.BlenderLib ( libname = 'bf_imbuf', sources = sources, includes = Split(incs), defines = defs, libtype=['core','player'], priority = [80, 40] )
diff --git a/source/blender/imbuf/intern/imageprocess.c b/source/blender/imbuf/intern/imageprocess.c
index 30e688ebe29..d7f1ab4419d 100644
--- a/source/blender/imbuf/intern/imageprocess.c
+++ b/source/blender/imbuf/intern/imageprocess.c
@@ -93,16 +93,14 @@ void IMB_convert_rgba_to_abgr(struct ImBuf *ibuf)
*/
/* function assumes out to be zero'ed, only does RGBA */
static float P(float k){
- float aux;
- aux=(float)(1.0f/6.0f)*( pow( MAX2(k+2.0f,0) , 3.0f ) - 4.0f * pow( MAX2(k+1.0f,0) , 3.0f ) + 6.0f * pow( MAX2(k,0) , 3.0f ) - 4.0f * pow( MAX2(k-1.0f,0) , 3.0f));
- return aux ;
+ return (float)(1.0f/6.0f)*( pow( MAX2(k+2.0f,0) , 3.0f ) - 4.0f * pow( MAX2(k+1.0f,0) , 3.0f ) + 6.0f * pow( MAX2(k,0) , 3.0f ) - 4.0f * pow( MAX2(k-1.0f,0) , 3.0f));
}
void bicubic_interpolation(ImBuf *in, ImBuf *out, float x, float y, int xout, int yout)
{
int i,j,n,m,x1,y1;
unsigned char *dataI,*outI;
- float a,b, outR,outG,outB,outA,*dataF,*outF;
+ float a,b,w,wx,wy[4], outR,outG,outB,outA,*dataF,*outF;
int do_rect, do_float;
if (in == NULL) return;
@@ -120,24 +118,39 @@ void bicubic_interpolation(ImBuf *in, ImBuf *out, float x, float y, int xout, in
outG= 0.0f;
outB= 0.0f;
outA= 0.0f;
+
+ /* avoid calling multiple times */
+ wy[0] = P(b-(-1));
+ wy[1] = P(b- 0);
+ wy[2] = P(b- 1);
+ wy[3] = P(b- 2);
+
for(n= -1; n<= 2; n++){
- for(m= -1; m<= 2; m++){
- x1= i+n;
- y1= j+m;
- if (x1>0 && x1 < in->x && y1>0 && y1y) {
- if (do_float) {
- dataF= in->rect_float + in->x * y1 * 4 + 4*x1;
- outR+= dataF[0] * P(n-a) * P(b-m);
- outG+= dataF[1] * P(n-a) * P(b-m);
- outB+= dataF[2] * P(n-a) * P(b-m);
- outA+= dataF[3] * P(n-a) * P(b-m);
- }
- if (do_rect) {
- dataI= (unsigned char*)in->rect + in->x * y1 * 4 + 4*x1;
- outR+= dataI[0] * P(n-a) * P(b-m);
- outG+= dataI[1] * P(n-a) * P(b-m);
- outB+= dataI[2] * P(n-a) * P(b-m);
- outA+= dataI[3] * P(n-a) * P(b-m);
+ x1= i+n;
+ if (x1>0 && x1 < in->x) {
+ wx = P(n-a);
+ for(m= -1; m<= 2; m++){
+ y1= j+m;
+ if (y1>0 && y1y) {
+ /* normally we could do this */
+ /* w = P(n-a) * P(b-m); */
+ /* except that would call P() 16 times per pixel therefor pow() 64 times, better precalc these */
+ w = wx * wy[m+1];
+
+ if (do_float) {
+ dataF= in->rect_float + in->x * y1 * 4 + 4*x1;
+ outR+= dataF[0] * w;
+ outG+= dataF[1] * w;
+ outB+= dataF[2] * w;
+ outA+= dataF[3] * w;
+ }
+ if (do_rect) {
+ dataI= (unsigned char*)in->rect + in->x * y1 * 4 + 4*x1;
+ outR+= dataI[0] * w;
+ outG+= dataI[1] * w;
+ outB+= dataI[2] * w;
+ outA+= dataI[3] * w;
+ }
}
}
}
diff --git a/source/blender/include/BIF_editarmature.h b/source/blender/include/BIF_editarmature.h
index 1fb2343ff9d..ad3623cad60 100644
--- a/source/blender/include/BIF_editarmature.h
+++ b/source/blender/include/BIF_editarmature.h
@@ -85,7 +85,8 @@ void updateDuplicateSubtargetObjects(EditBone *dupBone, struct ListBase *editbon
/* -- */
-float rollBoneToVector(EditBone *bone, float new_up_axis[3]);
+float rollBoneToVector(EditBone *bone, float new_up_axis[3]);
+
void make_boneList(struct ListBase *list, struct ListBase *bones, EditBone *parent);
void editbones_to_armature (struct ListBase *list, struct Object *ob);
diff --git a/source/blender/include/BSE_node.h b/source/blender/include/BSE_node.h
index 0e9e511e9e6..d0656f09a46 100644
--- a/source/blender/include/BSE_node.h
+++ b/source/blender/include/BSE_node.h
@@ -81,6 +81,7 @@ void node_active_link_viewer(struct SpaceNode *snode);
void node_transform_ext(int mode, int unused);
void node_shader_default(struct Material *ma);
void node_composit_default(struct Scene *scene);
+void node_texture_default(struct Tex *tx);
int node_has_hidden_sockets(struct bNode *node);
diff --git a/source/blender/include/blendef.h b/source/blender/include/blendef.h
index 50179325609..60d3a589c51 100644
--- a/source/blender/include/blendef.h
+++ b/source/blender/include/blendef.h
@@ -415,6 +415,7 @@
/* NODE: 851-900 */
#define B_NODE_USEMAT 851
#define B_NODE_USESCENE 852
+#define B_NODE_USETEX 853
/* FREE 901 - 999 */
diff --git a/source/blender/include/butspace.h b/source/blender/include/butspace.h
index 8cac5a074ab..fd3f6e926b9 100644
--- a/source/blender/include/butspace.h
+++ b/source/blender/include/butspace.h
@@ -258,6 +258,7 @@ void curvemap_buttons(struct uiBlock *block, struct CurveMapping *cumap, char la
#define B_ENV_OB 1354
#define B_ENV_FREE_ALL 1357
+#define B_TEX_USENODES 1358
/* **************** animbuts = object buttons ******* */
diff --git a/source/blender/include/transform.h b/source/blender/include/transform.h
index 51fa39ff9d6..fa7b8fc0a19 100644
--- a/source/blender/include/transform.h
+++ b/source/blender/include/transform.h
@@ -160,7 +160,7 @@ typedef struct TransData {
TransDataExtension *ext; /* for objects, poses. 1 single malloc per TransInfo! */
TransDataIpokey *tdi; /* for objects, ipo keys. per transdata a malloc */
TransDataCurveHandleFlags *hdata; /* for curves, stores handle flags for modification/cancel */
- void *tdmir; /* mirrored element pointer, in editmode mesh to EditVert */
+ void *extra; /* extra data (mirrored element pointer, in editmode mesh to EditVert) (editbone for roll fixing) (...) */
short flag; /* Various flags */
short protectflag; /* If set, copy of Object or PoseChannel protection */
/*#ifdef WITH_VERSE*/
@@ -297,6 +297,7 @@ typedef struct TransInfo {
#define TD_NO_EXT (1 << 10) /* ext abused for particle key timing */
#define TD_SKIP (1 << 11) /* don't transform this data */
#define TD_BEZTRIPLE (1 << 12) /* if this is a bez triple, we need to restore the handles, if this is set transdata->misc.hdata needs freeing */
+#define TD_NO_LOC (1 << 13) /* when this is set, don't apply translation changes to this element */
/* transsnap->status */
#define SNAP_ON 1
diff --git a/source/blender/makesdna/DNA_armature_types.h b/source/blender/makesdna/DNA_armature_types.h
index 0648c535353..93cb9f59860 100644
--- a/source/blender/makesdna/DNA_armature_types.h
+++ b/source/blender/makesdna/DNA_armature_types.h
@@ -156,6 +156,7 @@ typedef enum eBone_Flag {
BONE_DRAWWIRE = (1<<17), /* bone should be drawn as OB_WIRE, regardless of draw-types of view+armature */
BONE_NO_CYCLICOFFSET = (1<<18), /* when no parent, bone will not get cyclic offset */
BONE_EDITMODE_LOCKED = (1<<19), /* bone transforms are locked in EditMode */
+ BONE_TRANSFORM_CHILD = (1<<20), /* Indicates that a parent is also being transformed */
} eBone_Flag;
#endif
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index eda37d952c1..d5eb4024dcc 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -121,6 +121,7 @@ typedef struct bNode {
float locx, locy; /* root offset for drawing */
float width, miniwidth;
short custom1, custom2; /* to be abused for buttons */
+ float custom3, custom4;
short need_exec, exec; /* need_exec is set as UI execution event, exec is flag during exec */
@@ -156,7 +157,7 @@ typedef struct bNodeLink {
} bNodeLink;
/* the basis for a Node tree, all links and nodes reside internal here */
-/* only re-usable node trees are in the library though, materials allocate own tree struct */
+/* only re-usable node trees are in the library though, materials and textures allocate own tree struct */
typedef struct bNodeTree {
ID id;
@@ -185,6 +186,7 @@ typedef struct bNodeTree {
/* ntree->type, index */
#define NTREE_SHADER 0
#define NTREE_COMPOSIT 1
+#define NTREE_TEXTURE 2
/* ntree->init, flag */
#define NTREE_TYPE_INIT 1
@@ -285,4 +287,9 @@ typedef struct NodeLensDist {
short jit, proj, fit, pad;
} NodeLensDist;
+/* TEX_output */
+typedef struct TexNodeOutput {
+ char name[32];
+} TexNodeOutput;
+
#endif
diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h
index fad5c020727..b885bbf084e 100644
--- a/source/blender/makesdna/DNA_object_types.h
+++ b/source/blender/makesdna/DNA_object_types.h
@@ -395,6 +395,8 @@ extern Object workob;
#define BA_FROMSET 128
+#define BA_TRANSFORM_CHILD 256 /* child of a transformed object */
+
/* an initial attempt as making selection more specific! */
#define BA_DESELECT 0
#define BA_SELECT 1
diff --git a/source/blender/makesdna/DNA_texture_types.h b/source/blender/makesdna/DNA_texture_types.h
index 111dc08ee02..6e07336a4b1 100644
--- a/source/blender/makesdna/DNA_texture_types.h
+++ b/source/blender/makesdna/DNA_texture_types.h
@@ -55,13 +55,13 @@ typedef struct MTex {
float ofs[3], size[3];
short texflag, colormodel, pmapto, pmaptoneg;
- short normapspace, pad[3];
+ short normapspace, which_output, pad[2];
float r, g, b, k;
float def_var, rt;
float colfac, norfac, varfac;
float dispfac;
- float warpfac;
+ float warpfac;
} MTex;
@@ -166,6 +166,7 @@ typedef struct Tex {
struct ImageUser iuser;
+ struct bNodeTree *nodetree;
struct Ipo *ipo;
struct Image *ima;
struct PluginTex *plugin;
@@ -173,6 +174,9 @@ typedef struct Tex {
struct EnvMap *env;
struct PreviewImage * preview;
+ char use_nodes;
+ char pad[7];
+
} Tex;
/* used for mapping node. note: rot is in degrees */
diff --git a/source/blender/makesdna/intern/SConscript b/source/blender/makesdna/intern/SConscript
index aaf5ecc910b..7d4f6d2d76b 100644
--- a/source/blender/makesdna/intern/SConscript
+++ b/source/blender/makesdna/intern/SConscript
@@ -15,31 +15,45 @@ dna = env.Clone()
makesdna_tool.Append(CCFLAGS = '-DBASE_HEADER="\\"source/blender/makesdna/\\"" ')
makesdna_tool.Append (CPPPATH = ['#/intern/guardedalloc',
- '../../makesdna'])
+ '../../makesdna'])
if env['OURPLATFORM'] == 'linuxcross':
- makesdna_tool.Replace(CC='gcc')
- makesdna_tool.Replace(AR='ar')
- makesdna_tool.Replace(LINK='gcc')
+ USE_WINE = True # when cross compiling on linux 64bit this is useful
+else:
+ USE_WINE = False
+
+if not USE_WINE:
+ if env['OURPLATFORM'] == 'linuxcross':
+ makesdna_tool.Replace(CC='gcc')
+ makesdna_tool.Replace(AR='ar')
+ makesdna_tool.Replace(LINK='gcc')
if sys.platform != 'cygwin':
- makesdna_tool.Append (CCFLAGS = cflags)
+ makesdna_tool.Append (CCFLAGS = cflags)
makesdna_tool.Append (CPPDEFINES = defines)
-makesdna_tool.Append (LIBPATH = '#'+root_build_dir+'/lib')
+targetdir = root_build_dir+'/lib'
+if not (root_build_dir[0]==os.sep or root_build_dir[1]==':'):
+ targetdir = '#'+targetdir
+makesdna_tool.Append (LIBPATH = targetdir)
if env['BF_PROFILE']:
makesdna_tool.Append (LINKFLAGS = env['BF_PROFILE_FLAGS'])
-if env['OURPLATFORM'] == 'linux2' and root_build_dir[0]==os.sep:
- makesdna = makesdna_tool.Program (target = root_build_dir+'/makesdna', source = source_files, LIBS=['bf_guardedalloc'])
-else:
- makesdna = makesdna_tool.Program (target = '#'+root_build_dir+'/makesdna', source = source_files, LIBS=['bf_guardedalloc'])
+targetdir = root_build_dir + '/makesdna'
+
+if not (root_build_dir[0]==os.sep or root_build_dir[1]==':'):
+ targetdir = '#' + targetdir
+
+makesdna = makesdna_tool.Program (target = targetdir, source = source_files, LIBS=['bf_guardedalloc'])
dna_dict = dna.Dictionary()
dna.Depends ('dna.c', makesdna)
dna.Depends ('dna.c', header_files)
if env['OURPLATFORM'] != 'linuxcross':
- dna.Command ('dna.c', '', root_build_dir+os.sep+"makesdna $TARGET")
+ if USE_WINE:
+ dna.Command ('dna.c', '', 'wine ' + root_build_dir+os.sep+"makesdna $TARGET")
+ else:
+ dna.Command ('dna.c', '', root_build_dir+os.sep+"makesdna $TARGET")
else:
- dna.Command ('dna.c', '', root_build_dir+os.sep+"makesdna.exe $TARGET")
+ dna.Command ('dna.c', '', root_build_dir+os.sep+"makesdna.exe $TARGET")
obj = 'intern/dna.c'
Return ('obj')
diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt
index cf83804b999..22e732d046b 100644
--- a/source/blender/nodes/CMakeLists.txt
+++ b/source/blender/nodes/CMakeLists.txt
@@ -23,7 +23,7 @@
#
# ***** END GPL LICENSE BLOCK *****
-FILE(GLOB SRC intern/*.c intern/CMP_nodes/*.c intern/SHD_nodes/*.c)
+FILE(GLOB SRC intern/*.c intern/CMP_nodes/*.c intern/SHD_nodes/*.c intern/TEX_nodes/*.c)
SET(INC
. ../../../intern/guardedalloc ../include ../blenlib ../makesdna
diff --git a/source/blender/nodes/Makefile b/source/blender/nodes/Makefile
index ee0c82fad62..39d85d26fef 100644
--- a/source/blender/nodes/Makefile
+++ b/source/blender/nodes/Makefile
@@ -29,6 +29,6 @@
# Bounces make to subdirectories.
SOURCEDIR = source/blender/nodes
-DIRS = intern intern/CMP_nodes intern/SHD_nodes
+DIRS = intern intern/CMP_nodes intern/SHD_nodes intern/TEX_nodes
include nan_subdirs.mk
diff --git a/source/blender/nodes/SConscript b/source/blender/nodes/SConscript
index 038ce4b749e..91ca6cd8c81 100644
--- a/source/blender/nodes/SConscript
+++ b/source/blender/nodes/SConscript
@@ -4,24 +4,25 @@ Import ('env')
sources = env.Glob('intern/*.c')
sources += env.Glob('intern/CMP_nodes/*.c')
sources += env.Glob('intern/SHD_nodes/*.c')
+sources += env.Glob('intern/TEX_nodes/*.c')
incs = '. ./intern '
incs += '#/intern/guardedalloc ../include ../blenlib ../makesdna'
-incs += ' ../python ../render/extern/include '
+incs += ' ../render/extern/include '
incs += ' ../imbuf ../avi '
-incs += ' ../blenloader ../quicktime'
+incs += ' ../blenloader'
incs += ' ../blenkernel ../renderconverter '
incs += ' ../gpu #/extern/glew/include '
-
-incs += ' ' + env['BF_PYTHON_INC']
incs += ' ' + env['BF_OPENGL_INC']
incs += ' ' + env['BF_ZLIB_INC']
-incs += ' ' + env['BF_SDL_INC']
defs = ''
-if not env['WITH_BF_PYTHON']:
+if env['WITH_BF_PYTHON']:
+ incs += ' ' + env['BF_PYTHON_INC']
+ incs += ' ../python'
+else:
defs += 'DISABLE_PYTHON'
if env['WITH_BF_INTERNATIONAL']:
diff --git a/source/blender/nodes/TEX_node.h b/source/blender/nodes/TEX_node.h
new file mode 100644
index 00000000000..6be2123b96d
--- /dev/null
+++ b/source/blender/nodes/TEX_node.h
@@ -0,0 +1,70 @@
+/**
+ * $Id: CMP_node.h 12429 2007-10-29 14:37:19Z bebraw $
+ *
+ * ***** 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. The Blender
+ * Foundation also sells licenses for use in proprietary software under
+ * the Blender License. See http://www.blender.org/BL/ for information
+ * about this.
+ *
+ * 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) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef TEX_NODE_H
+#define TEX_NODE_H
+
+#include "BKE_node.h"
+
+
+/* ****************** types array for all texture nodes ****************** */
+
+extern bNodeType tex_node_math;
+extern bNodeType tex_node_mix_rgb;
+extern bNodeType tex_node_valtorgb;
+extern bNodeType tex_node_rgbtobw;
+extern bNodeType tex_node_output;
+extern bNodeType tex_node_viewer;
+extern bNodeType tex_node_checker;
+extern bNodeType tex_node_texture;
+extern bNodeType tex_node_bricks;
+extern bNodeType tex_node_image;
+extern bNodeType tex_node_curve_rgb;
+extern bNodeType tex_node_curve_time;
+extern bNodeType tex_node_invert;
+extern bNodeType tex_node_hue_sat;
+
+extern bNodeType tex_node_rotate;
+extern bNodeType tex_node_translate;
+
+extern bNodeType tex_node_proc_voronoi;
+extern bNodeType tex_node_proc_blend;
+extern bNodeType tex_node_proc_magic;
+extern bNodeType tex_node_proc_marble;
+extern bNodeType tex_node_proc_clouds;
+extern bNodeType tex_node_proc_wood;
+extern bNodeType tex_node_proc_musgrave;
+extern bNodeType tex_node_proc_noise;
+extern bNodeType tex_node_proc_stucci;
+extern bNodeType tex_node_proc_distnoise;
+
+#endif
diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_texture.c b/source/blender/nodes/intern/SHD_nodes/SHD_texture.c
index 31dbde940fd..908cbf5abfd 100644
--- a/source/blender/nodes/intern/SHD_nodes/SHD_texture.c
+++ b/source/blender/nodes/intern/SHD_nodes/SHD_texture.c
@@ -50,6 +50,9 @@ static void node_shader_exec_texture(void *data, bNode *node, bNodeStack **in, b
TexResult texres;
float vec[3], nor[3]={0.0f, 0.0f, 0.0f};
int retval;
+ short which_output = node->custom1;
+
+ short thread = shi->thread;
/* out: value, color, normal */
@@ -61,7 +64,7 @@ static void node_shader_exec_texture(void *data, bNode *node, bNodeStack **in, b
if(in[0]->datatype==NS_OSA_VECTORS) {
float *fp= in[0]->data;
- retval= multitex_ext((Tex *)node->id, vec, fp, fp+3, shi->osatex, &texres);
+ retval= multitex_thread((Tex *)node->id, vec, fp, fp+3, shi->osatex, &texres, thread, which_output);
}
else if(in[0]->datatype==NS_OSA_VALUES) {
float *fp= in[0]->data;
@@ -69,14 +72,14 @@ static void node_shader_exec_texture(void *data, bNode *node, bNodeStack **in, b
dxt[0]= fp[0]; dxt[1]= dxt[2]= 0.0f;
dyt[0]= fp[1]; dyt[1]= dyt[2]= 0.0f;
- retval= multitex_ext((Tex *)node->id, vec, dxt, dyt, shi->osatex, &texres);
+ retval= multitex_thread((Tex *)node->id, vec, dxt, dyt, shi->osatex, &texres, thread, which_output);
}
else
- retval= multitex_ext((Tex *)node->id, vec, NULL, NULL, 0, &texres);
+ retval= multitex_thread((Tex *)node->id, vec, NULL, NULL, 0, &texres, thread, which_output);
}
- else { /* only for previewrender, so we see stuff */
+ else {
VECCOPY(vec, shi->lo);
- retval= multitex_ext((Tex *)node->id, vec, NULL, NULL, 0, &texres);
+ retval= multitex_thread((Tex *)node->id, vec, NULL, NULL, 0, &texres, thread, which_output);
}
/* stupid exception */
diff --git a/source/blender/nodes/intern/SHD_util.c b/source/blender/nodes/intern/SHD_util.c
index f673834d2b7..b5e82db8a93 100644
--- a/source/blender/nodes/intern/SHD_util.c
+++ b/source/blender/nodes/intern/SHD_util.c
@@ -82,6 +82,7 @@ void ntreeShaderExecTree(bNodeTree *ntree, ShadeInput *shi, ShadeResult *shr)
/* convert caller data to struct */
scd.shi= shi;
scd.shr= shr;
+
/* each material node has own local shaderesult, with optional copying */
memset(shr, 0, sizeof(ShadeResult));
diff --git a/source/blender/nodes/intern/TEX_nodes/Makefile b/source/blender/nodes/intern/TEX_nodes/Makefile
new file mode 100644
index 00000000000..7fad19a772c
--- /dev/null
+++ b/source/blender/nodes/intern/TEX_nodes/Makefile
@@ -0,0 +1,48 @@
+#
+# $Id: Makefile 12796 2007-12-05 16:58:52Z sirdude $
+#
+# ***** BEGIN GPL/BL DUAL 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. The Blender
+# Foundation also sells licenses for use in proprietary software under
+# the Blender License. See http://www.blender.org/BL/ for information
+# about this.
+#
+# 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/BL DUAL LICENSE BLOCK *****
+#
+#
+
+LIBNAME = nodes_tex
+DIR = $(OCGDIR)/blender/$(LIBNAME)
+
+include nan_compile.mk
+
+CFLAGS += $(LEVEL_1_C_WARNINGS)
+
+CPPFLAGS += -I../../../blenkernel
+CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
+CPPFLAGS += -I../../../makesdna
+CPPFLAGS += -I../../../blenlib
+CPPFLAGS += -I../../../include
+CPPFLAGS += -I../../../imbuf
+CPPFLAGS += -I../../../render/extern/include
+CPPFLAGS += -I$(OPENGL_HEADERS)
diff --git a/source/blender/nodes/intern/TEX_nodes/TEX_bricks.c b/source/blender/nodes/intern/TEX_nodes/TEX_bricks.c
new file mode 100644
index 00000000000..c9fa3528b02
--- /dev/null
+++ b/source/blender/nodes/intern/TEX_nodes/TEX_bricks.c
@@ -0,0 +1,123 @@
+/**
+ *
+ * ***** 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) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "../TEX_util.h"
+#include
+
+static bNodeSocketType inputs[]= {
+ { SOCK_RGBA, 1, "Bricks 1", 0.596f, 0.282f, 0.0f, 1.0f, 0.0f, 1.0f },
+ { SOCK_RGBA, 1, "Bricks 2", 0.632f, 0.504f, 0.05f, 1.0f, 0.0f, 1.0f },
+ { SOCK_RGBA, 1, "Mortar", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f },
+ { SOCK_VALUE, 1, "Thickness", 0.02f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f },
+ { SOCK_VALUE, 1, "Bias", 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f },
+ { SOCK_VALUE, 1, "Brick Width", 0.5f, 0.0f, 0.0f, 0.0f, 0.001f, 99.0f },
+ { SOCK_VALUE, 1, "Row Height", 0.25f, 0.0f, 0.0f, 0.0f, 0.001f, 99.0f },
+ { -1, 0, "" }
+};
+static bNodeSocketType outputs[]= {
+ { SOCK_RGBA, 0, "Color", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static void init(bNode *node) {
+ node->custom3 = 0.5; /* offset */
+ node->custom4 = 1.0; /* squash */
+}
+
+static void colorfn(float *out, float *coord, bNode *node, bNodeStack **in, short thread)
+{
+ float x = coord[0];
+ float y = coord[1];
+
+ float bricknum, rownum, offset = 0;
+ float ins_x, ins_y;
+ float tint;
+
+ float bricks1[4];
+ float bricks2[4];
+ float mortar[4];
+
+ float mortar_thickness = tex_input_value(in[3], coord, thread);
+ float bias = tex_input_value(in[4], coord, thread);
+ float brick_width = tex_input_value(in[5], coord, thread);
+ float row_height = tex_input_value(in[6], coord, thread);
+
+ tex_input_rgba(bricks1, in[0], coord, thread);
+ tex_input_rgba(bricks2, in[1], coord, thread);
+ tex_input_rgba(mortar, in[2], coord, thread);
+
+ rownum = floor(y / row_height);
+
+ if( node->custom1 && node->custom2 ) {
+ brick_width *= ((int)(rownum) % node->custom2 ) ? 1.0f : node->custom4; /* squash */
+ offset = ((int)(rownum) % node->custom1 ) ? 0 : (brick_width*node->custom3); /* offset */
+ }
+
+ bricknum = floor((x+offset) / brick_width);
+
+ ins_x = (x+offset) - brick_width*bricknum;
+ ins_y = y - row_height*rownum;
+
+ srand( (123456*rownum) + bricknum );
+ tint = rand() / (float)RAND_MAX + bias;
+ CLAMP(tint,0.0f,1.0f);
+
+ if( ins_x < mortar_thickness || ins_y < mortar_thickness ||
+ ins_x > (brick_width - mortar_thickness) ||
+ ins_y > (row_height - mortar_thickness) ) {
+ QUATCOPY( out, mortar );
+ } else {
+ QUATCOPY( out, bricks1 );
+ ramp_blend( MA_RAMP_BLEND, out, out+1, out+2, tint, bricks2 );
+ }
+}
+
+static void exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
+{
+ tex_output(node, in, out[0], &colorfn);
+
+ tex_do_preview(node, out[0], data);
+}
+
+bNodeType tex_node_bricks= {
+ /* *next,*prev */ NULL, NULL,
+ /* type code */ TEX_NODE_BRICKS,
+ /* name */ "Bricks",
+ /* width+range */ 150, 60, 150,
+ /* class+opts */ NODE_CLASS_PATTERN, NODE_OPTIONS | NODE_PREVIEW,
+ /* input sock */ inputs,
+ /* output sock */ outputs,
+ /* storage */ "",
+ /* execfunc */ exec,
+ /* butfunc */ NULL,
+ /* initfunc */ init,
+ /* freestoragefunc */ NULL,
+ /* copystoragefunc */ NULL,
+ /* id */ NULL
+
+};
diff --git a/source/blender/nodes/intern/TEX_nodes/TEX_checker.c b/source/blender/nodes/intern/TEX_nodes/TEX_checker.c
new file mode 100644
index 00000000000..60357782e25
--- /dev/null
+++ b/source/blender/nodes/intern/TEX_nodes/TEX_checker.c
@@ -0,0 +1,85 @@
+/**
+ *
+ * ***** 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) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "../TEX_util.h"
+#include
+
+static bNodeSocketType inputs[]= {
+ { SOCK_RGBA, 1, "Color1", 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f },
+ { SOCK_RGBA, 1, "Color2", 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f },
+ { SOCK_VALUE, 1, "Size", 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 100.0f },
+ { -1, 0, "" }
+};
+static bNodeSocketType outputs[]= {
+ { SOCK_RGBA, 0, "Color", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f },
+ { -1, 0, "" }
+};
+
+static void colorfn(float *out, float *coord, bNode *node, bNodeStack **in, short thread)
+{
+ float x = coord[0];
+ float y = coord[1];
+ float z = coord[2];
+ float sz = tex_input_value(in[2], coord, thread);
+
+ /* 0.00001 because of unit sized stuff */
+ int xi = (int)fabs(floor(0.00001 + x / sz));
+ int yi = (int)fabs(floor(0.00001 + y / sz));
+ int zi = (int)fabs(floor(0.00001 + z / sz));
+
+ if( (xi % 2 == yi % 2) == (zi % 2) ) {
+ tex_input_rgba(out, in[0], coord, thread);
+ } else {
+ tex_input_rgba(out, in[1], coord, thread);
+ }
+}
+
+static void exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
+{
+ tex_output(node, in, out[0], &colorfn);
+
+ tex_do_preview(node, out[0], data);
+}
+
+bNodeType tex_node_checker= {
+ /* *next,*prev */ NULL, NULL,
+ /* type code */ TEX_NODE_CHECKER,
+ /* name */ "Checker",
+ /* width+range */ 100, 60, 150,
+ /* class+opts */ NODE_CLASS_PATTERN, NODE_OPTIONS | NODE_PREVIEW,
+ /* input sock */ inputs,
+ /* output sock */ outputs,
+ /* storage */ "",
+ /* execfunc */ exec,
+ /* butfunc */ NULL,
+ /* initfunc */ NULL,
+ /* freestoragefunc */ NULL,
+ /* copystoragefunc */ NULL,
+ /* id */ NULL
+
+};
diff --git a/source/blender/nodes/intern/TEX_nodes/TEX_curves.c b/source/blender/nodes/intern/TEX_nodes/TEX_curves.c
new file mode 100644
index 00000000000..8c86656b4f3
--- /dev/null
+++ b/source/blender/nodes/intern/TEX_nodes/TEX_curves.c
@@ -0,0 +1,127 @@
+/**
+ *
+ * ***** 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) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "../TEX_util.h"
+
+/* **************** CURVE Time ******************** */
+
+/* custom1 = sfra, custom2 = efra */
+static bNodeSocketType time_outputs[]= {
+ { SOCK_VALUE, 0, "Value", 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f },
+ { -1, 0, "" }
+};
+
+static void time_colorfn(float *out, float *coord, bNode *node, bNodeStack **in, short thread)
+{
+ /* stack order output: fac */
+ float fac= 0.0f;
+
+ if(node->custom1 < node->custom2)
+ fac = (G.scene->r.cfra - node->custom1)/(float)(node->custom2-node->custom1);
+
+ fac = curvemapping_evaluateF(node->storage, 0, fac);
+ out[0] = CLAMPIS(fac, 0.0f, 1.0f);
+}
+
+static void time_exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
+{
+ tex_output(node, in, out[0], &time_colorfn);
+}
+
+
+static void time_init(bNode* node)
+{
+ node->custom1= G.scene->r.sfra;
+ node->custom2= G.scene->r.efra;
+ node->storage= curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+}
+
+bNodeType tex_node_curve_time= {
+ /* *next,*prev */ NULL, NULL,
+ /* type code */ TEX_NODE_CURVE_TIME,
+ /* name */ "Time",
+ /* width+range */ 140, 100, 320,
+ /* class+opts */ NODE_CLASS_INPUT, NODE_OPTIONS,
+ /* input sock */ NULL,
+ /* output sock */ time_outputs,
+ /* storage */ "CurveMapping",
+ /* execfunc */ time_exec,
+ /* butfunc */ NULL,
+ /* initfunc */ time_init,
+ /* freestoragefunc */ node_free_curves,
+ /* copystoragefunc */ node_copy_curves,
+ /* id */ NULL
+};
+
+/* **************** CURVE RGB ******************** */
+static bNodeSocketType rgb_inputs[]= {
+ { SOCK_RGBA, 1, "Color", 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static bNodeSocketType rgb_outputs[]= {
+ { SOCK_RGBA, 0, "Color", 0.0f, 0.0f, 1.0f, 1.0f, -1.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static void rgb_colorfn(float *out, float *coord, bNode *node, bNodeStack **in, short thread)
+{
+ float cin[4];
+ tex_input_rgba(cin, in[0], coord, thread);
+
+ curvemapping_evaluateRGBF(node->storage, out, cin);
+ out[3] = cin[3];
+}
+
+static void rgb_exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
+{
+ tex_output(node, in, out[0], &rgb_colorfn);
+}
+
+static void rgb_init(bNode *node)
+{
+ node->storage= curvemapping_add(4, 0.0f, 0.0f, 1.0f, 1.0f);
+}
+
+bNodeType tex_node_curve_rgb= {
+ /* *next,*prev */ NULL, NULL,
+ /* type code */ TEX_NODE_CURVE_RGB,
+ /* name */ "RGB Curves",
+ /* width+range */ 200, 140, 320,
+ /* class+opts */ NODE_CLASS_OP_COLOR, NODE_OPTIONS,
+ /* input sock */ rgb_inputs,
+ /* output sock */ rgb_outputs,
+ /* storage */ "CurveMapping",
+ /* execfunc */ rgb_exec,
+ /* butfunc */ NULL,
+ /* initfunc */ rgb_init,
+ /* freestoragefunc */ node_free_curves,
+ /* copystoragefunc */ node_copy_curves,
+ /* id */ NULL
+};
+
diff --git a/source/blender/nodes/intern/TEX_nodes/TEX_hueSatVal.c b/source/blender/nodes/intern/TEX_nodes/TEX_hueSatVal.c
new file mode 100644
index 00000000000..d1a33896fc3
--- /dev/null
+++ b/source/blender/nodes/intern/TEX_nodes/TEX_hueSatVal.c
@@ -0,0 +1,104 @@
+/**
+ *
+ * ***** 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): Juho Vepsäläinen
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "../TEX_util.h"
+
+
+static bNodeSocketType inputs[]= {
+ { SOCK_VALUE, 1, "Hue", 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
+ { SOCK_VALUE, 1, "Saturation", 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 2.0f},
+ { SOCK_VALUE, 1, "Value", 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 2.0f},
+ { SOCK_VALUE, 1, "Fac", 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
+ { SOCK_RGBA, 1, "Color", 0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+static bNodeSocketType outputs[]= {
+ { SOCK_RGBA, 0, "Color", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static void do_hue_sat_fac(bNode *node, float *out, float hue, float sat, float val, float *in, float fac)
+{
+ if(fac != 0 && (hue != 0.5f || sat != 1 || val != 1)) {
+ float col[3], hsv[3], mfac= 1.0f - fac;
+
+ rgb_to_hsv(in[0], in[1], in[2], hsv, hsv+1, hsv+2);
+ hsv[0]+= (hue - 0.5f);
+ if(hsv[0]>1.0) hsv[0]-=1.0; else if(hsv[0]<0.0) hsv[0]+= 1.0;
+ hsv[1]*= sat;
+ if(hsv[1]>1.0) hsv[1]= 1.0; else if(hsv[1]<0.0) hsv[1]= 0.0;
+ hsv[2]*= val;
+ if(hsv[2]>1.0) hsv[2]= 1.0; else if(hsv[2]<0.0) hsv[2]= 0.0;
+ hsv_to_rgb(hsv[0], hsv[1], hsv[2], col, col+1, col+2);
+
+ out[0]= mfac*in[0] + fac*col[0];
+ out[1]= mfac*in[1] + fac*col[1];
+ out[2]= mfac*in[2] + fac*col[2];
+ }
+ else {
+ QUATCOPY(out, in);
+ }
+}
+
+static void colorfn(float *out, float *coord, bNode *node, bNodeStack **in, short thread)
+{
+ float in0 = tex_input_value(in[0], coord, thread);
+ float in1 = tex_input_value(in[1], coord, thread);
+ float in2 = tex_input_value(in[2], coord, thread);
+ float in3 = tex_input_value(in[3], coord, thread);
+
+ float in4[4];
+ tex_input_rgba(in4, in[4], coord, thread);
+
+ do_hue_sat_fac(node, out, in0, in1, in2, in4, in3);
+}
+
+static void exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
+{
+ tex_output(node, in, out[0], &colorfn);
+}
+
+bNodeType tex_node_hue_sat= {
+ /* *next,*prev */ NULL, NULL,
+ /* type code */ TEX_NODE_HUE_SAT,
+ /* name */ "Hue Saturation Value",
+ /* width+range */ 150, 80, 250,
+ /* class+opts */ NODE_CLASS_OP_COLOR, NODE_OPTIONS,
+ /* input sock */ inputs,
+ /* output sock */ outputs,
+ /* storage */ "",
+ /* execfunc */ exec,
+ /* butfunc */ NULL,
+ /* initfunc */ NULL,
+ /* freestoragefunc */ NULL,
+ /* copystoragefunc */ NULL,
+ /* id */ NULL
+
+};
+
+
diff --git a/source/blender/nodes/intern/TEX_nodes/TEX_image.c b/source/blender/nodes/intern/TEX_nodes/TEX_image.c
new file mode 100644
index 00000000000..f9477fef12b
--- /dev/null
+++ b/source/blender/nodes/intern/TEX_nodes/TEX_image.c
@@ -0,0 +1,106 @@
+/**
+ * $Id: TEX_image.c 10456 2007-04-04 13:58:12Z jesterking $
+ *
+ * ***** 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): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "../TEX_util.h"
+
+static bNodeSocketType outputs[]= {
+ { SOCK_RGBA, 0, "Image", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static void colorfn(float *out, float *coord, bNode *node, bNodeStack **in, short thread)
+{
+ float x = coord[0];
+ float y = coord[1];
+ Image *ima= (Image *)node->id;
+ ImageUser *iuser= (ImageUser *)node->storage;
+
+ if( ima ) {
+ ImBuf *ibuf = BKE_image_get_ibuf(ima, iuser);
+ if( ibuf ) {
+ float xsize, ysize;
+ float xoff, yoff;
+ int px, py;
+
+ float *result;
+
+ xsize = ibuf->x / 2;
+ ysize = ibuf->y / 2;
+ xoff = yoff = -1;
+
+ px = (int)( (x-xoff) * xsize );
+ py = (int)( (y-yoff) * ysize );
+
+ if( (!xsize) || (!ysize) ) return;
+ if( !ibuf->rect_float ) IMB_float_from_rect(ibuf);
+
+ while( px < 0 ) px += ibuf->x;
+ while( py < 0 ) py += ibuf->y;
+ while( px >= ibuf->x ) px -= ibuf->x;
+ while( py >= ibuf->y ) py -= ibuf->y;
+
+ result = ibuf->rect_float + py*ibuf->x*4 + px*4;
+ QUATCOPY( out, result );
+ }
+ }
+};
+
+static void exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
+{
+ tex_output(node, in, out[0], &colorfn);
+
+ tex_do_preview(node, out[0], data);
+}
+
+static void init(bNode* node)
+{
+ ImageUser *iuser= MEM_callocN(sizeof(ImageUser), "node image user");
+ node->storage= iuser;
+ iuser->sfra= 1;
+ iuser->fie_ima= 2;
+ iuser->ok= 1;
+}
+
+bNodeType tex_node_image= {
+ /* *next,*prev */ NULL, NULL,
+ /* type code */ TEX_NODE_IMAGE,
+ /* name */ "Image",
+ /* width+range */ 120, 80, 300,
+ /* class+opts */ NODE_CLASS_INPUT, NODE_PREVIEW|NODE_OPTIONS,
+ /* input sock */ NULL,
+ /* output sock */ outputs,
+ /* storage */ "ImageUser",
+ /* execfunc */ exec,
+ /* butfunc */ NULL,
+ /* initfunc */ init,
+ /* freestoragefunc */ node_free_standard_storage,
+ /* copystoragefunc */ node_copy_standard_storage,
+ /* id */ NULL
+};
+
diff --git a/source/blender/nodes/intern/TEX_nodes/TEX_invert.c b/source/blender/nodes/intern/TEX_nodes/TEX_invert.c
new file mode 100644
index 00000000000..09716951009
--- /dev/null
+++ b/source/blender/nodes/intern/TEX_nodes/TEX_invert.c
@@ -0,0 +1,79 @@
+/**
+ *
+ * ***** 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) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "../TEX_util.h"
+
+/* **************** INVERT ******************** */
+static bNodeSocketType inputs[]= {
+ { SOCK_RGBA, 1, "Color", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static bNodeSocketType outputs[]= {
+ { SOCK_RGBA, 0, "Color", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static void colorfn(float *out, float *coord, bNode *node, bNodeStack **in, short thread)
+{
+ float col[4];
+
+ tex_input_rgba(col, in[0], coord, thread);
+
+ col[0] = 1.0f - col[0];
+ col[1] = 1.0f - col[1];
+ col[2] = 1.0f - col[2];
+
+ VECCOPY(out, col);
+ out[3] = col[3];
+}
+
+static void exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
+{
+ tex_output(node, in, out[0], &colorfn);
+
+ tex_do_preview(node, out[0], data);
+}
+
+bNodeType tex_node_invert= {
+ /* *next,*prev */ NULL, NULL,
+ /* type code */ TEX_NODE_INVERT,
+ /* name */ "Invert",
+ /* width+range */ 90, 80, 100,
+ /* class+opts */ NODE_CLASS_OP_COLOR, NODE_OPTIONS,
+ /* input sock */ inputs,
+ /* output sock */ outputs,
+ /* storage */ "",
+ /* execfunc */ exec,
+ /* butfunc */ NULL,
+ /* initfunc */ NULL,
+ /* freestoragefunc */ NULL,
+ /* copystoragefunc */ NULL,
+ /* id */ NULL
+};
+
diff --git a/source/blender/nodes/intern/TEX_nodes/TEX_math.c b/source/blender/nodes/intern/TEX_nodes/TEX_math.c
new file mode 100644
index 00000000000..a2c66078692
--- /dev/null
+++ b/source/blender/nodes/intern/TEX_nodes/TEX_math.c
@@ -0,0 +1,172 @@
+/**
+ *
+ * ***** 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) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "../TEX_util.h"
+
+
+
+/* **************** SCALAR MATH ******************** */
+static bNodeSocketType inputs[]= {
+ { SOCK_VALUE, 1, "Value", 0.5f, 0.5f, 0.5f, 1.0f, -100.0f, 100.0f},
+ { SOCK_VALUE, 1, "Value", 0.5f, 0.5f, 0.5f, 1.0f, -100.0f, 100.0f},
+ { -1, 0, "" }
+};
+
+static bNodeSocketType outputs[]= {
+ { SOCK_VALUE, 0, "Value", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static void valuefn(float *out, float *coord, bNode *node, bNodeStack **in, short thread)
+{
+ float in0 = tex_input_value(in[0], coord, thread);
+ float in1 = tex_input_value(in[1], coord, thread);
+
+ switch(node->custom1){
+
+ case 0: /* Add */
+ *out= in0 + in1;
+ break;
+ case 1: /* Subtract */
+ *out= in0 - in1;
+ break;
+ case 2: /* Multiply */
+ *out= in0 * in1;
+ break;
+ case 3: /* Divide */
+ {
+ if(in1==0) /* We don't want to divide by zero. */
+ *out= 0.0;
+ else
+ *out= in0 / in1;
+ }
+ break;
+ case 4: /* Sine */
+ {
+ *out= sin(in0);
+ }
+ break;
+ case 5: /* Cosine */
+ {
+ *out= cos(in0);
+ }
+ break;
+ case 6: /* Tangent */
+ {
+ *out= tan(in0);
+ }
+ break;
+ case 7: /* Arc-Sine */
+ {
+ /* Can't do the impossible... */
+ if( in0 <= 1 && in0 >= -1 )
+ *out= asin(in0);
+ else
+ *out= 0.0;
+ }
+ break;
+ case 8: /* Arc-Cosine */
+ {
+ /* Can't do the impossible... */
+ if( in0 <= 1 && in0 >= -1 )
+ *out= acos(in0);
+ else
+ *out= 0.0;
+ }
+ break;
+ case 9: /* Arc-Tangent */
+ {
+ *out= atan(in0);
+ }
+ break;
+ case 10: /* Power */
+ {
+ /* Don't want any imaginary numbers... */
+ if( in0 >= 0 )
+ *out= pow(in0, in1);
+ else
+ *out= 0.0;
+ }
+ break;
+ case 11: /* Logarithm */
+ {
+ /* Don't want any imaginary numbers... */
+ if( in0 > 0 && in1 > 0 )
+ *out= log(in0) / log(in1);
+ else
+ *out= 0.0;
+ }
+ break;
+ case 12: /* Minimum */
+ {
+ if( in0 < in1 )
+ *out= in0;
+ else
+ *out= in1;
+ }
+ break;
+ case 13: /* Maximum */
+ {
+ if( in0 > in1 )
+ *out= in0;
+ else
+ *out= in1;
+ }
+ break;
+ case 14: /* Round */
+ {
+ *out= (int)(in0 + 0.5f);
+ }
+ break;
+ }
+}
+
+static void exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
+{
+ tex_output(node, in, out[0], &valuefn);
+
+ tex_do_preview(node, out[0], data);
+}
+
+bNodeType tex_node_math= {
+ /* *next,*prev */ NULL, NULL,
+ /* type code */ TEX_NODE_MATH,
+ /* name */ "Math",
+ /* width+range */ 120, 110, 160,
+ /* class+opts */ NODE_CLASS_CONVERTOR, NODE_OPTIONS,
+ /* input sock */ inputs,
+ /* output sock */ outputs,
+ /* storage */ "node_math",
+ /* execfunc */ exec,
+ /* butfunc */ NULL,
+ /* initfunc */ NULL,
+ /* freestoragefunc */ NULL,
+ /* copystoragefunc */ NULL,
+ /* id */ NULL
+};
+
diff --git a/source/blender/nodes/intern/TEX_nodes/TEX_mixRgb.c b/source/blender/nodes/intern/TEX_nodes/TEX_mixRgb.c
new file mode 100644
index 00000000000..b1ccb7a3d07
--- /dev/null
+++ b/source/blender/nodes/intern/TEX_nodes/TEX_mixRgb.c
@@ -0,0 +1,81 @@
+/**
+ *
+ * ***** 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) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "../TEX_util.h"
+
+
+/* **************** MIX RGB ******************** */
+static bNodeSocketType inputs[]= {
+ { SOCK_VALUE, 1, "Factor", 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f },
+ { SOCK_RGBA, 1, "Color1", 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 1.0f },
+ { SOCK_RGBA , 1, "Color2", 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 1.0f },
+ { -1, 0, "" }
+};
+static bNodeSocketType outputs[]= {
+ { SOCK_RGBA, 0, "Color", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f },
+ { -1, 0, "" }
+};
+
+static void colorfn(float *out, float *coord, bNode *node, bNodeStack **in, short thread)
+{
+ float fac = tex_input_value(in[0], coord, thread);
+ float col1[4], col2[4];
+
+ tex_input_rgba(col1, in[1], coord, thread);
+ tex_input_rgba(col2, in[2], coord, thread);
+
+ CLAMP(fac, 0.0f, 1.0f);
+
+ QUATCOPY(out, col1);
+ ramp_blend(node->custom1, out, out+1, out+2, fac, col2);
+}
+
+static void exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
+{
+ tex_output(node, in, out[0], &colorfn);
+
+ tex_do_preview(node, out[0], data);
+}
+
+bNodeType tex_node_mix_rgb= {
+ /* *next,*prev */ NULL, NULL,
+ /* type code */ TEX_NODE_MIX_RGB,
+ /* name */ "Mix",
+ /* width+range */ 100, 60, 150,
+ /* class+opts */ NODE_CLASS_OP_COLOR, NODE_OPTIONS,
+ /* input sock */ inputs,
+ /* output sock */ outputs,
+ /* storage */ "",
+ /* execfunc */ exec,
+ /* butfunc */ NULL,
+ /* initfunc */ NULL,
+ /* freestoragefunc */ NULL,
+ /* copystoragefunc */ NULL,
+ /* id */ NULL
+
+};
diff --git a/source/blender/nodes/intern/TEX_nodes/TEX_output.c b/source/blender/nodes/intern/TEX_nodes/TEX_output.c
new file mode 100644
index 00000000000..060ea8d7e67
--- /dev/null
+++ b/source/blender/nodes/intern/TEX_nodes/TEX_output.c
@@ -0,0 +1,90 @@
+/**
+ *
+ * ***** 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): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "../TEX_util.h"
+
+/* **************** COMPOSITE ******************** */
+static bNodeSocketType inputs[]= {
+ { SOCK_RGBA, 1, "Color", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { SOCK_VECTOR, 1, "Normal", 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+/* applies to render pipeline */
+static void exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
+{
+ TexCallData *cdata = (TexCallData *)data;
+ TexResult *target = cdata->target;
+
+ if(in[1]->hasinput && !in[0]->hasinput)
+ tex_do_preview(node, in[1], data);
+ else
+ tex_do_preview(node, in[0], data);
+
+ if(!cdata->do_preview) {
+ if(cdata->which_output == node->custom1)
+ {
+ tex_input_rgba(&target->tr, in[0], cdata->coord, cdata->thread);
+
+ target->tin = (target->tr + target->tg + target->tb) / 3.0f;
+ target->talpha = 1.0f;
+
+ if(target->nor) {
+ if(in[1]->hasinput)
+ tex_input_vec(target->nor, in[1], cdata->coord, cdata->thread);
+ else
+ target->nor = 0;
+ }
+ }
+ }
+}
+
+static void init(bNode* node)
+{
+ TexNodeOutput *tno = MEM_callocN(sizeof(TexNodeOutput), "TEX_output");
+ strcpy(tno->name, "Default");
+ node->storage= tno;
+}
+
+
+bNodeType tex_node_output= {
+ /* *next,*prev */ NULL, NULL,
+ /* type code */ TEX_NODE_OUTPUT,
+ /* name */ "Output",
+ /* width+range */ 150, 60, 200,
+ /* class+opts */ NODE_CLASS_OUTPUT, NODE_PREVIEW | NODE_OPTIONS,
+ /* input sock */ inputs,
+ /* output sock */ NULL,
+ /* storage */ "TexNodeOutput",
+ /* execfunc */ exec,
+ /* butfunc */ NULL,
+ /* initfunc */ init,
+ /* freestoragefunc */ node_free_standard_storage,
+ /* copystoragefunc */ node_copy_standard_storage,
+ /* id */ NULL
+};
diff --git a/source/blender/nodes/intern/TEX_nodes/TEX_proc.c b/source/blender/nodes/intern/TEX_nodes/TEX_proc.c
new file mode 100644
index 00000000000..9078dd1be21
--- /dev/null
+++ b/source/blender/nodes/intern/TEX_nodes/TEX_proc.c
@@ -0,0 +1,310 @@
+/**
+ *
+ * ***** 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) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "../TEX_util.h"
+#include "RE_shader_ext.h"
+
+/*
+ In this file: wrappers to use procedural textures as nodes
+*/
+
+
+static bNodeSocketType outputs_both[]= {
+ { SOCK_RGBA, 0, "Color", 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f },
+ { SOCK_VECTOR, 0, "Normal", 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f },
+ { -1, 0, "" }
+};
+static bNodeSocketType outputs_color_only[]= {
+ { SOCK_RGBA, 0, "Color", 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f },
+ { -1, 0, "" }
+};
+
+/* Inputs common to all, #defined because nodes will need their own inputs too */
+#define I 2 /* count */
+#define COMMON_INPUTS \
+ { SOCK_RGBA, 1, "Color 1", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f }, \
+ { SOCK_RGBA, 1, "Color 2", 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f }
+
+/* Calls multitex and copies the result to the outputs. Called by xxx_exec, which handles inputs. */
+static void do_proc(float *result, float *coord, float *col1, float *col2, char is_normal, Tex *tex, short thread)
+{
+ TexResult texres;
+ int textype;
+
+ if(is_normal) {
+ texres.nor = result;
+ }
+ else
+ texres.nor = NULL;
+
+ textype = multitex_thread(tex, coord, 0, 0, 0, &texres, thread, 0);
+
+ if(is_normal)
+ return;
+
+ if(textype & TEX_RGB) {
+ QUATCOPY(result, &texres.tr);
+ }
+ else {
+ QUATCOPY(result, col1);
+ ramp_blend(MA_RAMP_BLEND, result, result+1, result+2, texres.tin, col2);
+ }
+}
+
+typedef void (*MapFn) (Tex *tex, bNodeStack **in, float *coord, short thread);
+
+static void texfn(
+ float *result,
+ float *coord,
+ bNode *node,
+ bNodeStack **in,
+ char is_normal,
+ MapFn map_inputs,
+ short thread)
+{
+ Tex tex = *((Tex*)(node->storage));
+ float col1[4], col2[4];
+ tex_input_rgba(col1, in[0], coord, thread);
+ tex_input_rgba(col2, in[1], coord, thread);
+
+ map_inputs(&tex, in, coord, thread);
+
+ do_proc(result, coord, col1, col2, is_normal, &tex, thread);
+}
+
+static int count_outputs(bNode *node)
+{
+ bNodeSocket *sock;
+ int num = 0;
+ for(sock= node->outputs.first; sock; sock= sock->next) {
+ num++;
+ }
+ return num;
+}
+
+/* Boilerplate generators */
+
+#define ProcNoInputs(name) \
+ static void name##_map_inputs(Tex *tex, bNodeStack **in, float *coord, short thread) \
+ {}
+
+#define ProcDef(name) \
+ static void name##_colorfn(float *result, float *coord, bNode *node, bNodeStack **in, short thread) \
+ { \
+ texfn(result, coord, node, in, 0, &name##_map_inputs, thread); \
+ } \
+ static void name##_normalfn(float *result, float *coord, bNode *node, bNodeStack **in, short thread) \
+ { \
+ texfn(result, coord, node, in, 1, &name##_map_inputs, thread); \
+ } \
+ static void name##_exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out) \
+ { \
+ int outs = count_outputs(node); \
+ if(outs >= 1) tex_output(node, in, out[0], &name##_colorfn); \
+ if(outs >= 2) tex_output(node, in, out[1], &name##_normalfn); \
+ if(outs >= 1) tex_do_preview(node, out[0], data); \
+ }
+
+
+/* --- VORONOI -- */
+static bNodeSocketType voronoi_inputs[]= {
+ COMMON_INPUTS,
+ { SOCK_VALUE, 1, "W1", 1.0f, 0.0f, 0.0f, 0.0f, -2.0f, 2.0f },
+ { SOCK_VALUE, 1, "W2", 0.0f, 0.0f, 0.0f, 0.0f, -2.0f, 2.0f },
+ { SOCK_VALUE, 1, "W3", 0.0f, 0.0f, 0.0f, 0.0f, -2.0f, 2.0f },
+ { SOCK_VALUE, 1, "W4", 0.0f, 0.0f, 0.0f, 0.0f, -2.0f, 2.0f },
+
+ { SOCK_VALUE, 1, "iScale", 1.0f, 0.0f, 0.0f, 0.0f, 0.01f, 10.0f },
+ { SOCK_VALUE, 1, "Size", 0.25f, 0.0f, 0.0f, 0.0f, 0.0001f, 4.0f },
+
+ { -1, 0, "" }
+};
+static void voronoi_map_inputs(Tex *tex, bNodeStack **in, float *coord, short thread)
+{
+ tex->vn_w1 = tex_input_value(in[I+0], coord, thread);
+ tex->vn_w2 = tex_input_value(in[I+1], coord, thread);
+ tex->vn_w3 = tex_input_value(in[I+2], coord, thread);
+ tex->vn_w4 = tex_input_value(in[I+3], coord, thread);
+
+ tex->ns_outscale = tex_input_value(in[I+4], coord, thread);
+ tex->noisesize = tex_input_value(in[I+5], coord, thread);
+}
+ProcDef(voronoi)
+
+/* --- BLEND -- */
+static bNodeSocketType blend_inputs[]= {
+ COMMON_INPUTS,
+ { -1, 0, "" }
+};
+ProcNoInputs(blend)
+ProcDef(blend)
+
+/* -- MAGIC -- */
+static bNodeSocketType magic_inputs[]= {
+ COMMON_INPUTS,
+ { SOCK_VALUE, 1, "Turbulence", 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 200.0f },
+ { -1, 0, "" }
+};
+static void magic_map_inputs(Tex *tex, bNodeStack **in, float *coord, short thread)
+{
+ tex->turbul = tex_input_value(in[I+0], coord, thread);
+}
+ProcDef(magic)
+
+/* --- MARBLE --- */
+static bNodeSocketType marble_inputs[]= {
+ COMMON_INPUTS,
+ { SOCK_VALUE, 1, "Size", 0.25f, 0.0f, 0.0f, 0.0f, 0.0001f, 2.0f },
+ { SOCK_VALUE, 1, "Turbulence", 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 200.0f },
+ { -1, 0, "" }
+};
+static void marble_map_inputs(Tex *tex, bNodeStack **in, float *coord, short thread)
+{
+ tex->noisesize = tex_input_value(in[I+0], coord, thread);
+ tex->turbul = tex_input_value(in[I+1], coord, thread);
+}
+ProcDef(marble)
+
+/* --- CLOUDS --- */
+static bNodeSocketType clouds_inputs[]= {
+ COMMON_INPUTS,
+ { SOCK_VALUE, 1, "Size", 0.25f, 0.0f, 0.0f, 0.0f, 0.0001f, 2.0f },
+ { -1, 0, "" }
+};
+static void clouds_map_inputs(Tex *tex, bNodeStack **in, float *coord, short thread)
+{
+ tex->noisesize = tex_input_value(in[I+0], coord, thread);
+}
+ProcDef(clouds)
+
+/* --- DISTORTED NOISE --- */
+static bNodeSocketType distnoise_inputs[]= {
+ COMMON_INPUTS,
+ { SOCK_VALUE, 1, "Size", 0.25f, 0.0f, 0.0f, 0.0f, 0.0001f, 2.0f },
+ { SOCK_VALUE, 1, "Distortion", 1.00f, 0.0f, 0.0f, 0.0f, 0.0000f, 10.0f },
+ { -1, 0, "" }
+};
+static void distnoise_map_inputs(Tex *tex, bNodeStack **in, float *coord, short thread)
+{
+ tex->noisesize = tex_input_value(in[I+0], coord, thread);
+ tex->dist_amount = tex_input_value(in[I+1], coord, thread);
+}
+ProcDef(distnoise)
+
+/* --- WOOD --- */
+static bNodeSocketType wood_inputs[]= {
+ COMMON_INPUTS,
+ { SOCK_VALUE, 1, "Size", 0.25f, 0.0f, 0.0f, 0.0f, 0.0001f, 2.0f },
+ { SOCK_VALUE, 1, "Turbulence", 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 200.0f },
+ { -1, 0, "" }
+};
+static void wood_map_inputs(Tex *tex, bNodeStack **in, float *coord, short thread)
+{
+ tex->noisesize = tex_input_value(in[I+0], coord, thread);
+ tex->turbul = tex_input_value(in[I+1], coord, thread);
+}
+ProcDef(wood)
+
+/* --- MUSGRAVE --- */
+static bNodeSocketType musgrave_inputs[]= {
+ COMMON_INPUTS,
+ { SOCK_VALUE, 1, "H", 1.0f, 0.0f, 0.0f, 0.0f, 0.0001f, 2.0f },
+ { SOCK_VALUE, 1, "Lacunarity", 2.0f, 0.0f, 0.0f, 0.0f, 0.0f, 6.0f },
+ { SOCK_VALUE, 1, "Octaves", 2.0f, 0.0f, 0.0f, 0.0f, 0.0f, 8.0f },
+
+ { SOCK_VALUE, 1, "iScale", 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 10.0f },
+ { SOCK_VALUE, 1, "Size", 0.25f, 0.0f, 0.0f, 0.0f, 0.0001f, 2.0f },
+ { -1, 0, "" }
+};
+static void musgrave_map_inputs(Tex *tex, bNodeStack **in, float *coord, short thread)
+{
+ tex->mg_H = tex_input_value(in[I+0], coord, thread);
+ tex->mg_lacunarity = tex_input_value(in[I+1], coord, thread);
+ tex->mg_octaves = tex_input_value(in[I+2], coord, thread);
+ tex->ns_outscale = tex_input_value(in[I+3], coord, thread);
+ tex->noisesize = tex_input_value(in[I+4], coord, thread);
+}
+ProcDef(musgrave)
+
+/* --- NOISE --- */
+static bNodeSocketType noise_inputs[]= {
+ COMMON_INPUTS,
+ { -1, 0, "" }
+};
+ProcNoInputs(noise)
+ProcDef(noise)
+
+/* --- STUCCI --- */
+static bNodeSocketType stucci_inputs[]= {
+ COMMON_INPUTS,
+ { SOCK_VALUE, 1, "Size", 0.25f, 0.0f, 0.0f, 0.0f, 0.0001f, 2.0f },
+ { SOCK_VALUE, 1, "Turbulence", 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 200.0f },
+ { -1, 0, "" }
+};
+static void stucci_map_inputs(Tex *tex, bNodeStack **in, float *coord, short thread)
+{
+ tex->noisesize = tex_input_value(in[I+0], coord, thread);
+ tex->turbul = tex_input_value(in[I+1], coord, thread);
+}
+ProcDef(stucci)
+
+/* --- */
+
+static void init(bNode *node)
+{
+ Tex *tex = MEM_callocN(sizeof(Tex), "Tex");
+ node->storage= tex;
+
+ default_tex(tex);
+ tex->type = node->type - TEX_NODE_PROC;
+
+ if(tex->type == TEX_WOOD)
+ tex->stype = TEX_BANDNOISE;
+
+}
+
+/* Node type definitions */
+#define TexDef(TEXTYPE, outputs, name, Name) \
+ { NULL, NULL, TEX_NODE_PROC+TEXTYPE, Name, 140,80,140, NODE_CLASS_TEXTURE, \
+ NODE_OPTIONS | NODE_PREVIEW, name##_inputs, outputs, "Tex", name##_exec, NULL, init, \
+ node_free_standard_storage, node_copy_standard_storage, NULL }
+
+#define C outputs_color_only
+#define CV outputs_both
+
+bNodeType tex_node_proc_voronoi = TexDef(TEX_VORONOI, CV, voronoi, "Voronoi" );
+bNodeType tex_node_proc_blend = TexDef(TEX_BLEND, C, blend, "Blend" );
+bNodeType tex_node_proc_magic = TexDef(TEX_MAGIC, C, magic, "Magic" );
+bNodeType tex_node_proc_marble = TexDef(TEX_MARBLE, CV, marble, "Marble" );
+bNodeType tex_node_proc_clouds = TexDef(TEX_CLOUDS, CV, clouds, "Clouds" );
+bNodeType tex_node_proc_wood = TexDef(TEX_WOOD, CV, wood, "Wood" );
+bNodeType tex_node_proc_musgrave = TexDef(TEX_MUSGRAVE, CV, musgrave, "Musgrave" );
+bNodeType tex_node_proc_noise = TexDef(TEX_NOISE, C, noise, "Noise" );
+bNodeType tex_node_proc_stucci = TexDef(TEX_STUCCI, CV, stucci, "Stucci" );
+bNodeType tex_node_proc_distnoise = TexDef(TEX_DISTNOISE, CV, distnoise, "Distorted Noise" );
+
diff --git a/source/blender/nodes/intern/TEX_nodes/TEX_rotate.c b/source/blender/nodes/intern/TEX_nodes/TEX_rotate.c
new file mode 100644
index 00000000000..93bf17d4862
--- /dev/null
+++ b/source/blender/nodes/intern/TEX_nodes/TEX_rotate.c
@@ -0,0 +1,114 @@
+/**
+ *
+ * ***** 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) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include
+#include "MTC_vectorops.h"
+#include "../TEX_util.h"
+
+static bNodeSocketType inputs[]= {
+ { SOCK_RGBA, 1, "Color", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { SOCK_VALUE, 1, "Turns", 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f },
+ { SOCK_VECTOR, 1, "Axis", 0.0f, 0.0f, 1.0f, 0.0f, -1.0f, 1.0f },
+ { -1, 0, "" }
+};
+
+static bNodeSocketType outputs[]= {
+ { SOCK_RGBA, 0, "Color", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static void colorfn(float *out, float *coord, bNode *node, bNodeStack **in, short thread)
+{
+ float new_coord[3];
+
+ float ax[4];
+ float para[3];
+ float perp[3];
+ float cp[3];
+
+ float magsq, ndx;
+
+ float a = tex_input_value(in[1], coord, thread);
+ float cos_a = cos(a * 2 * M_PI);
+ float sin_a = sin(a * 2 * M_PI);
+
+ // x' = xcosa + n(n.x)(1-cosa)+(x*n)sina
+
+ tex_input_vec(ax, in[2], coord, thread);
+ magsq = ax[0]*ax[0] + ax[1]*ax[1] + ax[2]*ax[2];
+
+ if(magsq == 0) magsq = 1;
+
+ ndx = MTC_dot3Float(coord, ax);
+
+ para[0] = ax[0] * ndx * (1 - cos_a);
+ para[1] = ax[1] * ndx * (1 - cos_a);
+ para[2] = ax[2] * ndx * (1 - cos_a);
+
+ MTC_diff3Float(perp, coord, para);
+
+ perp[0] = coord[0] * cos_a;
+ perp[1] = coord[1] * cos_a;
+ perp[2] = coord[2] * cos_a;
+
+ MTC_cross3Float(cp, ax, coord);
+
+ cp[0] = cp[0] * sin_a;
+ cp[1] = cp[1] * sin_a;
+ cp[2] = cp[2] * sin_a;
+
+ new_coord[0] = para[0] + perp[0] + cp[0];
+ new_coord[1] = para[1] + perp[1] + cp[1];
+ new_coord[2] = para[2] + perp[2] + cp[2];
+
+ tex_input_rgba(out, in[0], new_coord, thread);
+}
+static void exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
+{
+ tex_output(node, in, out[0], &colorfn);
+
+ tex_do_preview(node, out[0], data);
+}
+
+bNodeType tex_node_rotate= {
+ /* *next,*prev */ NULL, NULL,
+ /* type code */ TEX_NODE_ROTATE,
+ /* name */ "Rotate",
+ /* width+range */ 90, 80, 100,
+ /* class+opts */ NODE_CLASS_DISTORT, NODE_OPTIONS,
+ /* input sock */ inputs,
+ /* output sock */ outputs,
+ /* storage */ "",
+ /* execfunc */ exec,
+ /* butfunc */ NULL,
+ /* initfunc */ NULL,
+ /* freestoragefunc */ NULL,
+ /* copystoragefunc */ NULL,
+ /* id */ NULL
+};
+
diff --git a/source/blender/nodes/intern/TEX_nodes/TEX_texture.c b/source/blender/nodes/intern/TEX_nodes/TEX_texture.c
new file mode 100644
index 00000000000..884d2cd0eb6
--- /dev/null
+++ b/source/blender/nodes/intern/TEX_nodes/TEX_texture.c
@@ -0,0 +1,103 @@
+/**
+ *
+ * ***** 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) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "../TEX_util.h"
+#include "RE_shader_ext.h"
+
+static bNodeSocketType inputs[]= {
+ { SOCK_RGBA, 1, "Color1", 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f },
+ { SOCK_RGBA, 1, "Color2", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f },
+ { -1, 0, "" }
+};
+
+static bNodeSocketType outputs[]= {
+ { SOCK_RGBA, 0, "Color", 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f },
+ { -1, 0, "" }
+};
+
+static void colorfn(float *out, float *coord, bNode *node, bNodeStack **in, short thread)
+{
+ static float red[] = {1,0,0,1};
+ static float white[] = {1,1,1,1};
+
+ Tex *nodetex = (Tex *)node->id;
+
+ if(node->custom2) {
+ /* this node refers to its own texture tree! */
+ QUATCOPY(
+ out,
+ (fabs(coord[0] - coord[1]) < .01) ? white : red
+ );
+ }
+ else if(nodetex) {
+ TexResult texres;
+ int textype;
+ float nor[] = {0,0,0};
+ float col1[4], col2[4];
+
+ tex_input_rgba(col1, in[0], coord, thread);
+ tex_input_rgba(col2, in[1], coord, thread);
+
+ texres.nor = nor;
+ textype = multitex_ext(nodetex, coord, 0, 0, 0, &texres);
+
+ if(textype & TEX_RGB) {
+ QUATCOPY(out, &texres.tr);
+ }
+ else {
+ QUATCOPY(out, col1);
+ ramp_blend(MA_RAMP_BLEND, out, out+1, out+2, texres.tin, col2);
+ }
+ }
+}
+
+static void exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
+{
+ tex_output(node, in, out[0], &colorfn);
+
+ tex_do_preview(node, out[0], data);
+}
+
+bNodeType tex_node_texture= {
+ /* *next,*prev */ NULL, NULL,
+ /* type code */ TEX_NODE_TEXTURE,
+ /* name */ "Texture",
+ /* width+range */ 120, 80, 240,
+ /* class+opts */ NODE_CLASS_INPUT, NODE_OPTIONS|NODE_PREVIEW,
+ /* input sock */ inputs,
+ /* output sock */ outputs,
+ /* storage */ "",
+ /* execfunc */ exec,
+ /* butfunc */ NULL,
+ /* initfunc */ NULL,
+ /* freestoragefunc */ NULL,
+ /* copystoragefunc */ NULL,
+ /* id */ NULL
+
+};
+
diff --git a/source/blender/nodes/intern/TEX_nodes/TEX_translate.c b/source/blender/nodes/intern/TEX_nodes/TEX_translate.c
new file mode 100644
index 00000000000..bd7e61d0ff4
--- /dev/null
+++ b/source/blender/nodes/intern/TEX_nodes/TEX_translate.c
@@ -0,0 +1,78 @@
+/**
+ *
+ * ***** 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) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include
+#include "../TEX_util.h"
+
+static bNodeSocketType inputs[]= {
+ { SOCK_RGBA, 1, "Color", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { SOCK_VECTOR, 1, "Offset", 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f },
+ { -1, 0, "" }
+};
+
+static bNodeSocketType outputs[]= {
+ { SOCK_RGBA, 0, "Color", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static void colorfn(float *out, float *coord, bNode *node, bNodeStack **in, short thread)
+{
+ float offset[3], new_coord[3];
+
+ tex_input_vec(offset, in[1], coord, thread);
+
+ new_coord[0] = coord[0] + offset[0];
+ new_coord[1] = coord[1] + offset[1];
+ new_coord[2] = coord[2] + offset[2];
+
+ tex_input_rgba(out, in[0], new_coord, thread);
+}
+static void exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
+{
+ tex_output(node, in, out[0], &colorfn);
+
+ tex_do_preview(node, out[0], data);
+}
+
+bNodeType tex_node_translate = {
+ /* *next,*prev */ NULL, NULL,
+ /* type code */ TEX_NODE_TRANSLATE,
+ /* name */ "Translate",
+ /* width+range */ 90, 80, 100,
+ /* class+opts */ NODE_CLASS_DISTORT, NODE_OPTIONS,
+ /* input sock */ inputs,
+ /* output sock */ outputs,
+ /* storage */ "",
+ /* execfunc */ exec,
+ /* butfunc */ NULL,
+ /* initfunc */ NULL,
+ /* freestoragefunc */ NULL,
+ /* copystoragefunc */ NULL,
+ /* id */ NULL
+};
+
diff --git a/source/blender/nodes/intern/TEX_nodes/TEX_valToRgb.c b/source/blender/nodes/intern/TEX_nodes/TEX_valToRgb.c
new file mode 100644
index 00000000000..ec59769fdfd
--- /dev/null
+++ b/source/blender/nodes/intern/TEX_nodes/TEX_valToRgb.c
@@ -0,0 +1,122 @@
+/**
+ * $Id: SHD_valToRgb.c 10456 2007-04-04 13:58:12Z jesterking $
+ *
+ * ***** 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) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "../TEX_util.h"
+
+/* **************** VALTORGB ******************** */
+static bNodeSocketType valtorgb_in[]= {
+ { SOCK_VALUE, 1, "Fac", 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+static bNodeSocketType valtorgb_out[]= {
+ { SOCK_RGBA, 0, "Color", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static void valtorgb_colorfn(float *out, float *coord, bNode *node, bNodeStack **in, short thread)
+{
+ if(node->storage) {
+ float fac = tex_input_value(in[0], coord, thread);
+
+ do_colorband(node->storage, fac, out);
+ }
+}
+
+static void valtorgb_exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
+{
+ tex_output(node, in, out[0], &valtorgb_colorfn);
+}
+
+static void valtorgb_init(bNode *node)
+{
+ node->storage = add_colorband(1);
+}
+
+bNodeType tex_node_valtorgb= {
+ /* *next,*prev */ NULL, NULL,
+ /* type code */ TEX_NODE_VALTORGB,
+ /* name */ "ColorRamp",
+ /* width+range */ 240, 200, 300,
+ /* class+opts */ NODE_CLASS_CONVERTOR, NODE_OPTIONS,
+ /* input sock */ valtorgb_in,
+ /* output sock */ valtorgb_out,
+ /* storage */ "ColorBand",
+ /* execfunc */ valtorgb_exec,
+ /* butfunc */ NULL,
+ /* initfunc */ valtorgb_init,
+ /* freestoragefunc */ node_free_standard_storage,
+ /* copystoragefunc */ node_copy_standard_storage,
+ /* id */ NULL
+
+};
+
+/* **************** RGBTOBW ******************** */
+static bNodeSocketType rgbtobw_in[]= {
+ { SOCK_RGBA, 1, "Color", 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+static bNodeSocketType rgbtobw_out[]= {
+ { SOCK_VALUE, 0, "Val", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+
+static void rgbtobw_valuefn(float *out, float *coord, bNode *node, bNodeStack **in, short thread)
+{
+ float cin[4];
+ tex_input_rgba(cin, in[0], coord, thread);
+
+ *out = cin[0] * 0.35f + cin[1] * 0.45f + cin[2] * 0.2f;
+}
+
+static void rgbtobw_exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
+{
+ tex_output(node, in, out[0], &rgbtobw_valuefn);
+
+ tex_do_preview(node, out[0], data);
+}
+
+bNodeType tex_node_rgbtobw= {
+ /* *next,*prev */ NULL, NULL,
+ /* type code */ TEX_NODE_RGBTOBW,
+ /* name */ "RGB to BW",
+ /* width+range */ 80, 40, 120,
+ /* class+opts */ NODE_CLASS_CONVERTOR, 0,
+ /* input sock */ rgbtobw_in,
+ /* output sock */ rgbtobw_out,
+ /* storage */ "",
+ /* execfunc */ rgbtobw_exec,
+ /* butfunc */ NULL,
+ /* initfunc */ NULL,
+ /* freestoragefunc */ NULL,
+ /* copystoragefunc */ NULL,
+ /* id */ NULL
+
+};
+
diff --git a/source/blender/nodes/intern/TEX_nodes/TEX_viewer.c b/source/blender/nodes/intern/TEX_nodes/TEX_viewer.c
new file mode 100644
index 00000000000..acdaacf873c
--- /dev/null
+++ b/source/blender/nodes/intern/TEX_nodes/TEX_viewer.c
@@ -0,0 +1,61 @@
+/**
+ *
+ * ***** 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) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "../TEX_util.h"
+#include
+
+static bNodeSocketType inputs[]= {
+ { SOCK_RGBA, 1, "Color", 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f },
+ { -1, 0, "" }
+};
+static bNodeSocketType outputs[]= {
+ { -1, 0, "" }
+};
+
+static void exec(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
+{
+ tex_do_preview(node, in[0], data);
+}
+
+bNodeType tex_node_viewer = {
+ /* *next,*prev */ NULL, NULL,
+ /* type code */ TEX_NODE_VIEWER,
+ /* name */ "Viewer",
+ /* width+range */ 100, 60, 150,
+ /* class+opts */ NODE_CLASS_OUTPUT, NODE_PREVIEW,
+ /* input sock */ inputs,
+ /* output sock */ outputs,
+ /* storage */ "",
+ /* execfunc */ exec,
+ /* butfunc */ NULL,
+ /* initfunc */ NULL,
+ /* freestoragefunc */ NULL,
+ /* copystoragefunc */ NULL,
+ /* id */ NULL
+
+};
diff --git a/source/blender/nodes/intern/TEX_util.c b/source/blender/nodes/intern/TEX_util.c
new file mode 100644
index 00000000000..10fe3bab26c
--- /dev/null
+++ b/source/blender/nodes/intern/TEX_util.c
@@ -0,0 +1,270 @@
+/**
+ *
+ * ***** 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) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/*
+ HOW TEXTURE NODES WORK
+
+ In contrast to Shader nodes, which place a colour into the output
+ stack when executed, Texture nodes place a TexDelegate* there. To
+ obtain a colour value from this, a node further up the chain reads
+ the TexDelegate* from its input stack, and uses tex_call_delegate to
+ retrieve the colour from the delegate.
+*/
+
+#include
+#include "TEX_util.h"
+
+#define PREV_RES 128 /* default preview resolution */
+
+void tex_call_delegate(TexDelegate *dg, float *out, float *coord, short thread)
+{
+ dg->fn(out, coord, dg->node, dg->in, thread);
+}
+
+void tex_input_vec(float *out, bNodeStack *in, float *coord, short thread)
+{
+ TexDelegate *dg = in->data;
+ if(dg) {
+ tex_call_delegate(dg, out, coord, thread);
+
+ if(in->hasoutput && in->sockettype == SOCK_VALUE) {
+ out[1] = out[2] = out[0];
+ out[3] = 1;
+ }
+ }
+ else {
+ QUATCOPY(out, in->vec);
+ }
+}
+
+void tex_input_rgba(float *out, bNodeStack *in, float *coord, short thread)
+{
+ tex_input_vec(out, in, coord, thread);
+
+ if(in->hasoutput && in->sockettype == SOCK_VECTOR) {
+ out[0] = out[0] * .5f + .5f;
+ out[1] = out[1] * .5f + .5f;
+ out[2] = out[2] * .5f + .5f;
+ out[3] = 1;
+ }
+}
+
+float tex_input_value(bNodeStack *in, float *coord, short thread)
+{
+ float out[4];
+ tex_input_vec(out, in, coord, thread);
+ return out[0];
+}
+
+static void init_preview(bNode *node)
+{
+ int xsize = node->prvr.xmax - node->prvr.xmin;
+ int ysize = node->prvr.ymax - node->prvr.ymin;
+
+ if(xsize == 0) {
+ xsize = PREV_RES;
+ ysize = PREV_RES;
+ }
+
+ if(node->preview==NULL)
+ node->preview= MEM_callocN(sizeof(bNodePreview), "node preview");
+
+ if(node->preview->rect)
+ if(node->preview->xsize!=xsize && node->preview->ysize!=ysize) {
+ MEM_freeN(node->preview->rect);
+ node->preview->rect= NULL;
+ }
+
+ if(node->preview->rect==NULL) {
+ node->preview->rect= MEM_callocN(4*xsize + xsize*ysize*sizeof(float)*4, "node preview rect");
+ node->preview->xsize= xsize;
+ node->preview->ysize= ysize;
+ }
+}
+
+void tex_do_preview(bNode *node, bNodeStack *ns, TexCallData *cdata)
+{
+ int x, y;
+ float *result;
+ bNodePreview *preview;
+
+ if(!cdata->do_preview)
+ return;
+
+ if(!(node->typeinfo->flag & NODE_PREVIEW))
+ return;
+
+ init_preview(node);
+
+ preview = node->preview;
+
+ for(x=0; xxsize; x++)
+ for(y=0; yysize; y++)
+ {
+ cdata->coord[0] = ((float) x / preview->xsize) * 2 - 1;
+ cdata->coord[1] = ((float) y / preview->ysize) * 2 - 1;
+
+ result = preview->rect + 4 * (preview->xsize*y + x);
+
+ tex_input_rgba(result, ns, cdata->coord, cdata->thread);
+ }
+}
+
+void tex_output(bNode *node, bNodeStack **in, bNodeStack *out, TexFn texfn)
+{
+ TexDelegate *dg;
+ if(!out->data)
+ /* Freed in tex_end_exec (node.c) */
+ dg = out->data = MEM_mallocN(sizeof(TexDelegate), "tex delegate");
+ else
+ dg = out->data;
+
+
+ dg->fn = texfn;
+ dg->node = node;
+ memcpy(dg->in, in, MAX_SOCKET * sizeof(bNodeStack*));
+ dg->type = out->sockettype;
+}
+
+void ntreeTexCheckCyclics(struct bNodeTree *ntree)
+{
+ bNode *node;
+ for(node= ntree->nodes.first; node; node= node->next) {
+
+ if(node->type == TEX_NODE_TEXTURE && node->id)
+ {
+ /* custom2 stops the node from rendering */
+ if(node->custom1) {
+ node->custom2 = 1;
+ node->custom1 = 0;
+ } else {
+ Tex *tex = (Tex *)node->id;
+
+ node->custom2 = 0;
+
+ node->custom1 = 1;
+ if(tex->use_nodes && tex->nodetree) {
+ ntreeTexCheckCyclics(tex->nodetree);
+ }
+ node->custom1 = 0;
+ }
+ }
+
+ }
+}
+
+void ntreeTexExecTree(bNodeTree *nodes, TexResult *texres, float *coord, char do_preview, short thread, Tex *tex, short which_output)
+{
+ TexResult dummy_texres;
+ TexCallData data;
+
+ if(!texres) texres = &dummy_texres;
+ data.coord = coord;
+ data.target = texres;
+ data.do_preview = do_preview;
+ data.thread = thread;
+ data.which_output = which_output;
+
+ ntreeExecTree(nodes, &data, thread);
+}
+
+void ntreeTexUpdatePreviews(bNodeTree* nodetree)
+{
+ Tex *tex;
+ float coord[] = {0,0,0};
+ TexResult dummy_texres;
+
+ for(tex= G.main->tex.first; tex; tex= tex->id.next)
+ if(tex->nodetree == nodetree) break;
+ if(!tex) return;
+
+ dummy_texres.nor = 0;
+
+ ntreeBeginExecTree(nodetree);
+ ntreeTexExecTree(nodetree, &dummy_texres, coord, 1, 0, tex, 0);
+ ntreeEndExecTree(nodetree);
+
+}
+
+char* ntreeTexOutputMenu(bNodeTree *ntree)
+{
+ bNode *node;
+ int len = 1;
+ char *str;
+ char ctrl[4];
+ int index = 0;
+
+ for(node= ntree->nodes.first; node; node= node->next)
+ if(node->type == TEX_NODE_OUTPUT) {
+ len += strlen(
+ ((TexNodeOutput*)node->storage)->name
+ ) + strlen(" %xNNN|");
+ index ++;
+
+ if(node->custom1 > 999) {
+ printf("Error: too many outputs");
+ break;
+ }
+ }
+
+ str = malloc(len * sizeof(char));
+ *str = 0;
+
+ for(node= ntree->nodes.first; node; node= node->next)
+ if(node->type == TEX_NODE_OUTPUT) {
+ strcat(str, ((TexNodeOutput*)node->storage)->name);
+ strcat(str, " %x");
+
+ sprintf(ctrl, "%d", node->custom1);
+ strcat(str, ctrl);
+
+ if(--index)
+ strcat(str, "|");
+ else
+ break;
+ }
+
+ return str;
+}
+
+void ntreeTexAssignIndex(struct bNodeTree *ntree, struct bNode *node)
+{
+ bNode *tnode;
+ int index = 0;
+
+ check_index:
+ for(tnode= ntree->nodes.first; tnode; tnode= tnode->next)
+ if(tnode->type == TEX_NODE_OUTPUT && tnode != node)
+ if(tnode->custom1 == index) {
+ index ++;
+ goto check_index;
+ }
+
+ node->custom1 = index;
+}
+
diff --git a/source/blender/nodes/intern/TEX_util.h b/source/blender/nodes/intern/TEX_util.h
new file mode 100644
index 00000000000..69cf20794c9
--- /dev/null
+++ b/source/blender/nodes/intern/TEX_util.h
@@ -0,0 +1,104 @@
+/**
+ *
+ * ***** 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) 2005 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef TEX_NODE_UTIL_H_
+#define TEX_NODE_UTIL_H_
+
+#include
+#include
+
+#include "MEM_guardedalloc.h"
+
+#include "DNA_action_types.h"
+#include "DNA_color_types.h"
+#include "DNA_ipo_types.h"
+#include "DNA_ID.h"
+#include "DNA_image_types.h"
+#include "DNA_material_types.h"
+#include "DNA_node_types.h"
+#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_space_types.h"
+#include "DNA_screen_types.h"
+#include "DNA_texture_types.h"
+#include "DNA_userdef_types.h"
+
+#include "BKE_blender.h"
+#include "BKE_colortools.h"
+#include "BKE_global.h"
+#include "BKE_image.h"
+#include "BKE_main.h"
+#include "BKE_material.h"
+#include "BKE_texture.h"
+#include "BKE_utildefines.h"
+#include "BKE_library.h"
+
+#include "../SHD_node.h"
+#include "node_util.h"
+
+#include "BLI_arithb.h"
+#include "BLI_blenlib.h"
+#include "BLI_rand.h"
+#include "BLI_threads.h"
+
+#include "IMB_imbuf_types.h"
+#include "IMB_imbuf.h"
+
+#include "RE_pipeline.h"
+#include "RE_shader_ext.h"
+
+typedef struct TexCallData {
+ TexResult *target;
+ float *coord;
+ char do_preview;
+ short thread;
+ short which_output;
+} TexCallData;
+
+typedef void(*TexFn) (float *out, float *coord, bNode *node, bNodeStack **in, short thread);
+
+typedef struct TexDelegate {
+ TexFn fn;
+ bNode *node;
+ bNodeStack *in[MAX_SOCKET];
+ int type;
+} TexDelegate;
+
+void tex_call_delegate(TexDelegate*, float *out, float *coord, short thread);
+
+void tex_input_rgba(float *out, bNodeStack *in, float *coord, short thread);
+void tex_input_vec(float *out, bNodeStack *in, float *coord, short thread);
+float tex_input_value(bNodeStack *in, float *coord, short thread);
+
+void tex_output(bNode *node, bNodeStack **in, bNodeStack *out, TexFn texfn);
+void tex_do_preview(bNode *node, bNodeStack *ns, TexCallData *cdata);
+
+void ntreeTexUpdatePreviews( bNodeTree* nodetree );
+void ntreeTexExecTree(bNodeTree *nodes, TexResult *texres, float *coord, char do_preview, short thread, struct Tex *tex, short which_output);
+
+#endif
diff --git a/source/blender/python/BPY_interface.c b/source/blender/python/BPY_interface.c
index 1c8b606ace3..331f72021f2 100644
--- a/source/blender/python/BPY_interface.c
+++ b/source/blender/python/BPY_interface.c
@@ -167,7 +167,7 @@ static void DoAllScriptsFromList( ListBase * list, short event );
static PyObject *importText( char *name );
static void init_ourImport( void );
static void init_ourReload( void );
-static PyObject *blender_import( PyObject * self, PyObject * args );
+static PyObject *blender_import( PyObject * self, PyObject * args, PyObject * kw);
static void BPY_Err_Handle( char *script_name );
@@ -2849,24 +2849,28 @@ static PyObject *importText( char *name )
}
static PyMethodDef bimport[] = {
- {"blimport", blender_import, METH_VARARGS, "our own import"}
+ {"blimport", blender_import, METH_KEYWORDS, "our own import"}
};
-static PyObject *blender_import( PyObject * self, PyObject * args )
+static PyObject *blender_import( PyObject * self, PyObject * args, PyObject * kw)
{
PyObject *exception, *err, *tb;
char *name;
PyObject *globals = NULL, *locals = NULL, *fromlist = NULL;
PyObject *m;
+
//PyObject_Print(args, stderr, 0);
#if (PY_VERSION_HEX >= 0x02060000)
int dummy_val; /* what does this do?*/
+ static char *kwlist[] = {"name", "globals", "locals", "fromlist", "level", 0};
- if( !PyArg_ParseTuple( args, "s|OOOi:bimport",
+ if( !PyArg_ParseTupleAndKeywords( args, kw, "s|OOOi:bimport", kwlist,
&name, &globals, &locals, &fromlist, &dummy_val) )
return NULL;
#else
- if( !PyArg_ParseTuple( args, "s|OOO:bimport",
+ static char *kwlist[] = {"name", "globals", "locals", "fromlist", 0};
+
+ if( !PyArg_ParseTupleAndKeywords( args, kw, "s|OOO:bimport", kwlist,
&name, &globals, &locals, &fromlist ) )
return NULL;
#endif
diff --git a/source/blender/python/api2_2x/Draw.c b/source/blender/python/api2_2x/Draw.c
index e0111f099aa..c238fe5601c 100644
--- a/source/blender/python/api2_2x/Draw.c
+++ b/source/blender/python/api2_2x/Draw.c
@@ -258,7 +258,7 @@ Normal button (a sphere that you can roll to change the normal)\n\n\
[tooltip=] The button's tooltip";
static char Method_Number_doc[] =
- "(name, event, x, y, width, height, initial, min, max, [tooltip]) - Create a \
+ "(name, event, x, y, width, height, initial, min, max, [tooltip], [callback], [clickstep], [precision]) - Create a \
new Number button\n\n\
(name) A string to display on the button\n\
(event) The event number to pass to the button event function when activated\n\
@@ -266,7 +266,10 @@ new Number button\n\n\
(width, height) The button width and height\n\
(initial, min, max) Three values (int or float) specifying the initial and \
limit values.\n\
-[tooltip=] The button's tooltip";
+[tooltip=] The button's tooltip\n\
+[callback=] The button's callback\n\
+[clickstep=] Click step for the button\n\
+[precision=] How many decimal places to maintain, if not given, it is calculated depending on range, otherwise 1,2,3 or 4. Larger values are clamped to 4";
static char Method_String_doc[] =
"(name, event, x, y, width, height, initial, length, [tooltip]) - Create a \
@@ -1600,6 +1603,8 @@ static PyObject *Method_Number( PyObject * self, PyObject * args )
Button *but;
PyObject *mino, *maxo, *inio;
PyObject *callback=NULL;
+ PyObject *a1=NULL;
+ PyObject *a2=NULL;
uiBut *ubut= NULL;
if (G.background) {
@@ -1607,11 +1612,11 @@ static PyObject *Method_Number( PyObject * self, PyObject * args )
"Can't run Draw.Number() in background mode." );
}
- if( !PyArg_ParseTuple( args, "siiiiiOOO|sO", &name, &event,
- &x, &y, &w, &h, &inio, &mino, &maxo, &tip, &callback ) )
+ if( !PyArg_ParseTuple( args, "siiiiiOOO|sOOO", &name, &event,
+ &x, &y, &w, &h, &inio, &mino, &maxo, &tip, &callback, &a1, &a2 ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
"expected a string, five ints, three PyObjects and\n\
- optionally string and callback arguments" );
+ optionally string, callback, range and precision arguments" );
UI_METHOD_ERRORCHECK;
@@ -1632,14 +1637,30 @@ static PyObject *Method_Number( PyObject * self, PyObject * args )
min = (float)PyFloat_AsDouble( mino );
max = (float)PyFloat_AsDouble( maxo );
- range= (float)fabs(max-min); /* Click step will be a 10th of the range. */
- if (!range) range= 1.0f; /* avoid any odd errors */
+ if(a1 && PyNumber_Check(a1)) {
+ if(PyFloat_Check(a1))
+ range= (float)PyFloat_AsDouble(a1);
+ else
+ range= (float)PyInt_AsLong(a1);
+ } else {
+ range= (float)fabs(max-min); /* Click step will be a 10th of the range. */
+ if (!range) range= 1.0f; /* avoid any odd errors */
+ }
- /* set the precission to display*/
- if (range>=1000.0f) precission=1.0f;
- else if (range>=100.0f) precission=2.0f;
- else if (range>=10.0f) precission=3.0f;
- else precission=4.0f;
+ if(a2 && PyNumber_Check(a2)) {
+ if(PyFloat_Check(a2))
+ precission= (float)PyFloat_AsDouble(a2);
+ else
+ precission= (float)PyInt_AsLong(a2);
+ } else {
+ /* set the precission to display*/
+ if (range>=1000.0f) precission=1.0f;
+ else if (range>=100.0f) precission=2.0f;
+ else if (range>=10.0f) precission=3.0f;
+ else precission=4.0f;
+
+ range *= 10;
+ }
but->type = BFLOAT_TYPE;
but->val.asfloat = ini;
@@ -1647,7 +1668,7 @@ static PyObject *Method_Number( PyObject * self, PyObject * args )
if( block )
ubut= uiDefButF( block, NUM, event, name, (short)x, (short)y, (short)w, (short)h,
- &but->val.asfloat, min, max, 10*range, precission, but->tooltip );
+ &but->val.asfloat, min, max, range, precission, but->tooltip );
} else {
int ini, min, max;
diff --git a/source/blender/python/api2_2x/doc/Draw.py b/source/blender/python/api2_2x/doc/Draw.py
index 127f37bfbad..98e92196f8d 100644
--- a/source/blender/python/api2_2x/doc/Draw.py
+++ b/source/blender/python/api2_2x/doc/Draw.py
@@ -706,7 +706,7 @@ def Normal(event, x, y, width, height, initial, tooltip = None, callback = None)
@note: Using the same button variable with more then 1 button at a time will corrupt memory.
"""
-def Number(name, event, x, y, width, height, initial, min, max, tooltip = None, callback = None):
+def Number(name, event, x, y, width, height, initial, min, max, tooltip = None, callback = None, clickstep = None, precision = None):
"""
Create a new Number Button object.
@type name: string
@@ -735,6 +735,11 @@ def Number(name, event, x, y, width, height, initial, min, max, tooltip = None,
@param callback: an optional argument so this button can have its own
callback function. the function will run whenever this button is pressed.
This function must accept 2 arguments (event, val).
+ @type clickstep: float
+ @param clickstep: an optional argument to control the amount of change per click on the button.
+ @type precision: float
+ @param precision: an optional argument to control the amount of places after the decimal. From 1 to 4 places with 1.0..4.0.
+ Larger values are clamped to 4 places.
@rtype: Blender Button
@return: The Button created.
diff --git a/source/blender/render/SConscript b/source/blender/render/SConscript
index 607ddf5c7a3..50c4b554193 100644
--- a/source/blender/render/SConscript
+++ b/source/blender/render/SConscript
@@ -6,7 +6,7 @@ sources = env.Glob('intern/source/*.c')
incs = 'intern/include #/intern/guardedalloc ../blenlib ../makesdna'
incs += ' extern/include ../blenkernel ../radiosity/extern/include ../imbuf'
-incs += ' ../quicktime ../include ../../kernel/gen_messaging ../blenloader'
+incs += ' ../include ../blenloader'
defs = []
@@ -17,7 +17,7 @@ else:
if env['WITH_BF_QUICKTIME']:
defs.append('WITH_QUICKTIME')
- incs += ' ' + env['BF_QUICKTIME_INC']
+ incs += ' ../quicktime ' + env['BF_QUICKTIME_INC']
if env['WITH_BF_FFMPEG']:
defs.append('WITH_FFMPEG')
diff --git a/source/blender/render/extern/include/RE_shader_ext.h b/source/blender/render/extern/include/RE_shader_ext.h
index 888474ffa18..2cee2673a26 100644
--- a/source/blender/render/extern/include/RE_shader_ext.h
+++ b/source/blender/render/extern/include/RE_shader_ext.h
@@ -183,6 +183,7 @@ typedef struct ShadeInput
/* node shaders... */
struct Tex;
int multitex_ext(struct Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, struct TexResult *texres);
+int multitex_thread(struct Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, struct TexResult *texres, short thread, short which_output);
/* shaded view and bake */
struct Render;
diff --git a/source/blender/render/intern/include/pixelshading.h b/source/blender/render/intern/include/pixelshading.h
index c6b11b4af9a..799f5521017 100644
--- a/source/blender/render/intern/include/pixelshading.h
+++ b/source/blender/render/intern/include/pixelshading.h
@@ -53,8 +53,8 @@ int shadeHaloFloat(HaloRen *har,
/**
* Render the sky at pixel (x, y).
*/
-void shadeSkyPixel(float *collector, float fx, float fy);
-void shadeSkyView(float *colf, float *rco, float *view, float *dxyview);
+void shadeSkyPixel(float *collector, float fx, float fy, short thread);
+void shadeSkyView(float *colf, float *rco, float *view, float *dxyview, short thread);
void shadeAtmPixel(struct SunSky *sunsky, float *collector, float fx, float fy, float distance);
void shadeSunView(float *colf, float *view);
/* ------------------------------------------------------------------------- */
diff --git a/source/blender/render/intern/include/texture.h b/source/blender/render/intern/include/texture.h
index be5471e07c4..c254b768292 100644
--- a/source/blender/render/intern/include/texture.h
+++ b/source/blender/render/intern/include/texture.h
@@ -53,11 +53,12 @@ struct ImBuf;
/* texture.h */
void do_halo_tex(struct HaloRen *har, float xn, float yn, float *colf);
-void do_sky_tex(float *rco, float *lo, float *dxyview, float *hor, float *zen, float *blend, int skyflag);
+void do_sky_tex(float *rco, float *lo, float *dxyview, float *hor, float *zen, float *blend, int skyflag, short thread);
void do_material_tex(struct ShadeInput *shi);
void do_lamp_tex(LampRen *la, float *lavec, struct ShadeInput *shi, float *colf, int effect);
void init_render_textures(Render *re);
+void end_render_textures(void);
void render_realtime_texture(struct ShadeInput *shi, struct Image *ima);
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index 1a387ad7466..4e4e27fe286 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -2272,6 +2272,7 @@ static void displace_render_face(Render *re, ObjectRen *obr, VlakRen *vlr, float
shi.vlr= vlr; /* current render face */
shi.mat= vlr->mat; /* current input material */
+ shi.thread= 0;
/* Displace the verts, flag is set when done */
if (!vlr->v1->flag)
@@ -4407,6 +4408,7 @@ void RE_Database_Free(Render *re)
end_radio_render();
end_render_materials();
+ end_render_textures();
if(re->wrld.aosphere) {
MEM_freeN(re->wrld.aosphere);
diff --git a/source/blender/render/intern/source/pixelshading.c b/source/blender/render/intern/source/pixelshading.c
index 60723963af9..af6093ab36c 100644
--- a/source/blender/render/intern/source/pixelshading.c
+++ b/source/blender/render/intern/source/pixelshading.c
@@ -511,7 +511,7 @@ static void fillBackgroundImage(float *collector, float fx, float fy)
}
/* Only view vector is important here. Result goes to colf[3] */
-void shadeSkyView(float *colf, float *rco, float *view, float *dxyview)
+void shadeSkyView(float *colf, float *rco, float *view, float *dxyview, short thread)
{
float lo[3], zen[3], hor[3], blend, blendm;
int skyflag;
@@ -550,7 +550,7 @@ void shadeSkyView(float *colf, float *rco, float *view, float *dxyview)
SWAP(float, lo[1], lo[2]);
}
- do_sky_tex(rco, lo, dxyview, hor, zen, &blend, skyflag);
+ do_sky_tex(rco, lo, dxyview, hor, zen, &blend, skyflag, thread);
}
if(blend>1.0) blend= 1.0;
@@ -607,7 +607,7 @@ void shadeSunView(float *colf, float *view)
/*
Stuff the sky color into the collector.
*/
-void shadeSkyPixel(float *collector, float fx, float fy)
+void shadeSkyPixel(float *collector, float fx, float fy, short thread)
{
float view[3], dxyview[2];
@@ -653,7 +653,7 @@ void shadeSkyPixel(float *collector, float fx, float fy)
}
/* get sky color in the collector */
- shadeSkyView(collector, NULL, view, dxyview);
+ shadeSkyView(collector, NULL, view, dxyview, thread);
collector[3] = 0.0f;
}
diff --git a/source/blender/render/intern/source/rayshade.c b/source/blender/render/intern/source/rayshade.c
index f822d41bb85..46a7a1c556c 100644
--- a/source/blender/render/intern/source/rayshade.c
+++ b/source/blender/render/intern/source/rayshade.c
@@ -396,7 +396,7 @@ static void ray_fadeout_endcolor(float *col, ShadeInput *origshi, ShadeInput *sh
VECCOPY(shi->view, vec);
Normalize(shi->view);
- shadeSkyView(col, isec->start, shi->view, NULL);
+ shadeSkyView(col, isec->start, shi->view, NULL, shi->thread);
shadeSunView(col, shi->view);
}
}
@@ -1627,7 +1627,7 @@ static void ray_ao_qmc(ShadeInput *shi, float *shadfac)
shadfac[2]+= (1.0f-skyfac)*R.wrld.horb + skyfac*R.wrld.zenb;
}
else { /* WO_AOSKYTEX */
- shadeSkyView(skycol, isec.start, view, dxyview);
+ shadeSkyView(skycol, isec.start, view, dxyview, shi->thread);
shadeSunView(skycol, shi->view);
shadfac[0]+= skycol[0];
shadfac[1]+= skycol[1];
@@ -1752,7 +1752,7 @@ static void ray_ao_spheresamp(ShadeInput *shi, float *shadfac)
shadfac[2]+= (1.0f-fac)*R.wrld.horb + fac*R.wrld.zenb;
}
else { /* WO_AOSKYTEX */
- shadeSkyView(skycol, isec.start, view, dxyview);
+ shadeSkyView(skycol, isec.start, view, dxyview, shi->thread);
shadeSunView(skycol, shi->view);
shadfac[0]+= skycol[0];
shadfac[1]+= skycol[1];
diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c
index 1eb42bca569..c3b281f2a23 100644
--- a/source/blender/render/intern/source/rendercore.c
+++ b/source/blender/render/intern/source/rendercore.c
@@ -647,7 +647,7 @@ static void sky_tile(RenderPart *pa, RenderLayer *rl)
if(pass[3]<1.0f) {
if(done==0) {
- shadeSkyPixel(col, x, y);
+ shadeSkyPixel(col, x, y, pa->thread);
done= 1;
}
diff --git a/source/blender/render/intern/source/texture.c b/source/blender/render/intern/source/texture.c
index 7ce66ff6d12..61e9d9cf412 100644
--- a/source/blender/render/intern/source/texture.c
+++ b/source/blender/render/intern/source/texture.c
@@ -43,11 +43,13 @@
#include "DNA_meshdata_types.h"
#include "DNA_material_types.h"
#include "DNA_image_types.h"
+#include "DNA_node_types.h"
#include "IMB_imbuf_types.h"
#include "IMB_imbuf.h"
#include "BKE_image.h"
+#include "BKE_node.h"
#include "BKE_plugin_types.h"
#include "BKE_utildefines.h"
@@ -114,6 +116,10 @@ void init_render_texture(Render *re, Tex *tex)
}
}
}
+
+ if(tex->nodetree && tex->use_nodes) {
+ ntreeBeginExecTree(tex->nodetree); /* has internal flag to detect it only does it once */
+ }
}
/* ------------------------------------------------------------------------- */
@@ -129,6 +135,20 @@ void init_render_textures(Render *re)
}
}
+void end_render_texture(Tex *tex)
+{
+ if(tex && tex->use_nodes && tex->nodetree)
+ ntreeEndExecTree(tex->nodetree);
+}
+
+void end_render_textures(void)
+{
+ Tex *tex;
+ for(tex= G.main->tex.first; tex; tex= tex->id.next)
+ if(tex->id.us)
+ end_render_texture(tex);
+}
+
/* ------------------------------------------------------------------------- */
@@ -691,6 +711,19 @@ static float voronoiTex(Tex *tex, float *texvec, TexResult *texres)
}
+/* ------------------------------------------------------------------------- */
+
+static int evalnodes(Tex *tex, float *texvec, TexResult *texres, short thread, short which_output)
+{
+ short rv = TEX_INT;
+ bNodeTree *nodes = tex->nodetree;
+
+ ntreeTexExecTree(nodes, texres, texvec, 0, thread, tex, which_output);
+
+ if(texres->nor) rv |= TEX_NOR;
+ rv |= TEX_RGB;
+ return rv;
+}
/* ------------------------------------------------------------------------- */
@@ -1130,13 +1163,17 @@ static void do_2d_mapping(MTex *mtex, float *t, VlakRen *vlr, float *n, float *d
/* ************************************** */
-static int multitex(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, TexResult *texres)
+static int multitex(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, TexResult *texres, short thread, short which_output)
{
float tmpvec[3];
int retval=0; /* return value, int:0, col:1, nor:2, everything:3 */
texres->talpha= 0; /* is set when image texture returns alpha (considered premul) */
+ if(tex->use_nodes && tex->nodetree) {
+ retval = evalnodes(tex, texvec, texres, thread, which_output);
+ }
+ else
switch(tex->type) {
case 0:
@@ -1236,7 +1273,11 @@ static int multitex(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex,
* the color values are set before using the r/g/b values, otherwise you may use uninitialized values - Campbell */
int multitex_ext(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, TexResult *texres)
{
-
+ return multitex_thread(tex, texvec, dxt, dyt, osatex, texres, 0, 0);
+}
+
+int multitex_thread(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, TexResult *texres, short thread, short which_output)
+{
if(tex==NULL) {
memset(texres, 0, sizeof(TexResult));
return 0;
@@ -1264,10 +1305,10 @@ int multitex_ext(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, Te
do_2d_mapping(&mtex, texvec_l, NULL, NULL, dxt_l, dyt_l);
- return multitex(tex, texvec_l, dxt_l, dyt_l, osatex, texres);
+ return multitex(tex, texvec_l, dxt_l, dyt_l, osatex, texres, thread, which_output);
}
else
- return multitex(tex, texvec, dxt, dyt, osatex, texres);
+ return multitex(tex, texvec, dxt, dyt, osatex, texres, thread, which_output);
}
/* ------------------------------------------------------------------------- */
@@ -1671,7 +1712,7 @@ void do_material_tex(ShadeInput *shi)
}
}
- rgbnor= multitex(tex, texvec, dxt, dyt, shi->osatex, &texres);
+ rgbnor= multitex(tex, texvec, dxt, dyt, shi->osatex, &texres, shi->thread, mtex->which_output);
/* texture output */
@@ -2055,7 +2096,7 @@ void do_halo_tex(HaloRen *har, float xn, float yn, float *colf)
if(mtex->tex->type==TEX_IMAGE) do_2d_mapping(mtex, texvec, NULL, NULL, dxt, dyt);
- rgb= multitex(mtex->tex, texvec, dxt, dyt, osatex, &texres);
+ rgb= multitex(mtex->tex, texvec, dxt, dyt, osatex, &texres, 0, mtex->which_output);
/* texture output */
if(rgb && (mtex->texflag & MTEX_RGBTOINT)) {
@@ -2126,7 +2167,7 @@ void do_halo_tex(HaloRen *har, float xn, float yn, float *colf)
/* ------------------------------------------------------------------------- */
/* hor and zen are RGB vectors, blend is 1 float, should all be initialized */
-void do_sky_tex(float *rco, float *lo, float *dxyview, float *hor, float *zen, float *blend, int skyflag)
+void do_sky_tex(float *rco, float *lo, float *dxyview, float *hor, float *zen, float *blend, int skyflag, short thread)
{
MTex *mtex;
TexResult texres= {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0, NULL};
@@ -2226,7 +2267,7 @@ void do_sky_tex(float *rco, float *lo, float *dxyview, float *hor, float *zen, f
/* texture */
if(mtex->tex->type==TEX_IMAGE) do_2d_mapping(mtex, texvec, NULL, NULL, dxt, dyt);
- rgb= multitex(mtex->tex, texvec, dxt, dyt, R.osa, &texres);
+ rgb= multitex(mtex->tex, texvec, dxt, dyt, R.osa, &texres, thread, mtex->which_output);
/* texture output */
if(rgb && (mtex->texflag & MTEX_RGBTOINT)) {
@@ -2407,7 +2448,7 @@ void do_lamp_tex(LampRen *la, float *lavec, ShadeInput *shi, float *colf, int ef
do_2d_mapping(mtex, texvec, NULL, NULL, dxt, dyt);
}
- rgb= multitex(tex, texvec, dxt, dyt, shi->osatex, &texres);
+ rgb= multitex(tex, texvec, dxt, dyt, shi->osatex, &texres, shi->thread, mtex->which_output);
/* texture output */
if(rgb && (mtex->texflag & MTEX_RGBTOINT)) {
@@ -2492,7 +2533,7 @@ int externtex(MTex *mtex, float *vec, float *tin, float *tr, float *tg, float *t
do_2d_mapping(mtex, texvec, NULL, NULL, dxt, dyt);
}
- rgb= multitex(tex, texvec, dxt, dyt, 0, &texr);
+ rgb= multitex(tex, texvec, dxt, dyt, 0, &texr, 0, mtex->which_output);
if(rgb) {
texr.tin= (0.35*texr.tr+0.45*texr.tg+0.2*texr.tb);
diff --git a/source/blender/src/SConscript b/source/blender/src/SConscript
index 4ebaad673f2..c5edd711d0a 100644
--- a/source/blender/src/SConscript
+++ b/source/blender/src/SConscript
@@ -23,22 +23,22 @@ incs = ' #/intern/guardedalloc #/intern/memutil'
incs += ' ../blenlib ../makesdna ../blenkernel'
incs += ' ../include #/intern/bmfont ../imbuf ../render/extern/include'
incs += ' #/intern/bsp/extern ../radiosity/extern/include'
-incs += ' #/intern/decimation/extern ../blenloader ../python'
+incs += ' #/intern/decimation/extern ../blenloader'
incs += ' ../../kernel/gen_system #/intern/SoundSystem ../readstreamglue ../nodes'
-incs += ' ../quicktime #/intern/elbeem/extern'
+incs += ' #/intern/elbeem/extern'
incs += ' #/intern/ghost #/intern/opennl/extern'
incs += ' ../gpu #extern/glew/include'
-
-incs += ' ' + env['BF_PYTHON_INC']
-incs += ' ' + env['BF_SDL_INC']
incs += ' ' + env['BF_OPENGL_INC']
defs = []
-if not env['WITH_BF_PYTHON']:
+if env['WITH_BF_PYTHON']:
+ incs += ' ../python ' + env['BF_PYTHON_INC']
+else:
defs.append('DISABLE_PYTHON')
+
if env['BF_TWEAK_MODE']:
defs.append('TWEAK_MODE')
@@ -61,9 +61,13 @@ if env['WITH_BF_QUICKTIME']:
defs.append('WITH_QUICKTIME')
if env['WITH_BF_ICONV']:
+ incs += ' ../quicktime'
incs += ' ' + env['BF_ICONV_INC']
defs.append('WITH_ICONV')
+if env['WITH_BF_GAMEENGINE']:
+ defs.append('GAMEBLENDER=1')
+
if env['WITH_BF_FFMPEG']:
defs.append('WITH_FFMPEG')
incs += ' ' + env['BF_FFMPEG_INC']
@@ -71,7 +75,7 @@ if env['WITH_BF_FFMPEG']:
if env['WITH_BF_OGG']:
defs.append('WITH_OGG')
-if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw'):
+if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross'):
incs += ' ' + env['BF_PTHREADS_INC']
if env['WITH_BF_VERSE']:
@@ -85,7 +89,9 @@ if env['BF_BUILDINFO']:
if env['BF_NO_ELBEEM']:
defs.append('DISABLE_ELBEEM')
-if not env['WITH_BF_SDL']:
+if env['WITH_BF_SDL']:
+ incs += ' ' + env['BF_SDL_INC']
+else:
defs.append('DISABLE_SDL')
if env['BF_SPLIT_SRC'] and (env['OURPLATFORM'] == 'win32-mingw'):
diff --git a/source/blender/src/butspace.c b/source/blender/src/butspace.c
index 5b5c7f2d5ba..ba4d02d2355 100644
--- a/source/blender/src/butspace.c
+++ b/source/blender/src/butspace.c
@@ -511,7 +511,8 @@ void curvemap_buttons(uiBlock *block, CurveMapping *cumap, char labeltype, short
static void do_node_buts(unsigned short event)
{
Material *ma;
-
+ SpaceNode *snode = curarea->spacedata.first;
+
/* all operations default on active material layer here */
/* but this also gets called for lamp and world... */
ma= G.buts->lockpoin;
@@ -523,6 +524,7 @@ static void do_node_buts(unsigned short event)
if(event>=B_NODE_EXEC) {
if(ma) end_render_material(ma); /// temporal... 3d preview
BIF_preview_changed(ID_MA);
+ BIF_preview_changed(ID_TE);
allqueue(REDRAWNODE, 0);
allqueue(REDRAWBUTSSHADING, 0);
}
diff --git a/source/blender/src/buttons_editing.c b/source/blender/src/buttons_editing.c
index 46b833fb649..429c05feadc 100644
--- a/source/blender/src/buttons_editing.c
+++ b/source/blender/src/buttons_editing.c
@@ -3246,6 +3246,7 @@ void do_curvebuts(unsigned short event)
case B_CONVERTNURB:
if(G.obedit) {
setsplinetype(event-B_CONVERTPOLY);
+ BIF_undo_push("Convert type");
DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
allqueue(REDRAWVIEW3D, 0);
}
@@ -3277,6 +3278,7 @@ void do_curvebuts(unsigned short event)
}
nu= nu->next;
}
+ BIF_undo_push("Cyclic");
DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
allqueue(REDRAWVIEW3D, 0);
}
@@ -3284,6 +3286,7 @@ void do_curvebuts(unsigned short event)
case B_SETWEIGHT:
if(G.obedit) {
weightflagNurb(1, editbutweight, 0);
+ BIF_undo_push("Set weight");
DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
allqueue(REDRAWVIEW3D, 0);
}
@@ -3317,6 +3320,7 @@ void do_curvebuts(unsigned short event)
}
makeknots(nu, 2, nu->flagv>>1);
}
+ BIF_undo_push("Make knots");
DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
allqueue(REDRAWVIEW3D, 0);
}
@@ -3368,6 +3372,7 @@ void do_curvebuts(unsigned short event)
nu= nu->next;
}
}
+ BIF_undo_push("Make 2D/3D");
DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
allqueue(REDRAWVIEW3D, 0);
break;
@@ -3383,6 +3388,7 @@ void do_curvebuts(unsigned short event)
}
}
+ BIF_undo_push("Set resolution");
DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
allqueue(REDRAWVIEW3D, 0);
allqueue(REDRAWBUTSALL, 0);
diff --git a/source/blender/src/buttons_shading.c b/source/blender/src/buttons_shading.c
index f1250c975fb..4ca1c13ddb2 100644
--- a/source/blender/src/buttons_shading.c
+++ b/source/blender/src/buttons_shading.c
@@ -286,6 +286,7 @@ void do_texbuts(unsigned short event)
scrarea_queue_headredraw(curarea);
BIF_preview_changed(ID_TE);
allqueue(REDRAWBUTSSHADING, 0);
+ allqueue(REDRAWNODE, 0);
if(G.buts->texfrom == 3) /* brush texture */
allqueue(REDRAWIMAGE, 0);
break;
@@ -414,6 +415,16 @@ void do_texbuts(unsigned short event)
}
}
break;
+ case B_TEX_USENODES:
+ if(tex->use_nodes && tex->nodetree==NULL) {
+ node_texture_default(tex);
+ }
+ tex->type = 0;
+ BIF_preview_changed(ID_TE);
+ allqueue(REDRAWNODE, 0);
+ allqueue(REDRAWBUTSSHADING, 0);
+ allqueue(REDRAWIPO, 0);
+ break;
default:
if(event>=B_PLUGBUT && event<=B_PLUGBUT+23) {
@@ -1687,10 +1698,13 @@ static void texture_panel_texture(MTex *actmtex, Material *ma, World *wrld, Lamp
/* newnoise: all texture types as menu, not enough room for more buttons.
* Can widen panel, but looks ugly when other panels overlap it */
+ if( !tex->use_nodes ) {
+ sprintf(textypes, "Texture Type %%t|None %%x%d|Image %%x%d|EnvMap %%x%d|Clouds %%x%d|Marble %%x%d|Stucci %%x%d|Wood %%x%d|Magic %%x%d|Blend %%x%d|Noise %%x%d|Plugin %%x%d|Musgrave %%x%d|Voronoi %%x%d|DistortedNoise %%x%d", 0, TEX_IMAGE, TEX_ENVMAP, TEX_CLOUDS, TEX_MARBLE, TEX_STUCCI, TEX_WOOD, TEX_MAGIC, TEX_BLEND, TEX_NOISE, TEX_PLUGIN, TEX_MUSGRAVE, TEX_VORONOI, TEX_DISTNOISE);
+ uiDefBut(block, LABEL, 0, "Texture Type", 160, 150, 140, 20, 0, 0.0, 0.0, 0, 0, "");
+ uiDefButS(block, MENU, B_TEXTYPE, textypes, 160, 125, 140, 25, &tex->type, 0,0,0,0, "Select texture type");
+ }
- sprintf(textypes, "Texture Type %%t|None %%x%d|Image %%x%d|EnvMap %%x%d|Clouds %%x%d|Marble %%x%d|Stucci %%x%d|Wood %%x%d|Magic %%x%d|Blend %%x%d|Noise %%x%d|Plugin %%x%d|Musgrave %%x%d|Voronoi %%x%d|DistortedNoise %%x%d", 0, TEX_IMAGE, TEX_ENVMAP, TEX_CLOUDS, TEX_MARBLE, TEX_STUCCI, TEX_WOOD, TEX_MAGIC, TEX_BLEND, TEX_NOISE, TEX_PLUGIN, TEX_MUSGRAVE, TEX_VORONOI, TEX_DISTNOISE);
- uiDefBut(block, LABEL, 0, "Texture Type", 160, 150, 140, 20, 0, 0.0, 0.0, 0, 0, "");
- uiDefButS(block, MENU, B_TEXTYPE, textypes, 160, 125, 140, 25, &tex->type, 0,0,0,0, "Select texture type");
+ uiDefButC(block, TOG, B_TEX_USENODES, "Nodes", 160, 100, 140, 25, &tex->use_nodes, 0.0f, 0.0f, 0, 0, "");
}
else {
@@ -3684,6 +3698,12 @@ static void material_panel_texture(Object *ob, Material *ma)
uiBlockSetCol(block, TH_AUTO);
uiDefBut(block, BUT, B_TEXCLEAR, "Clear", 122, 130, 72, 20, 0, 0, 0, 0, 0, "Erases link to texture");
+ if(mtex->tex->use_nodes) {
+ char *menustr = ntreeTexOutputMenu(mtex->tex->nodetree);
+ uiDefBut(block, LABEL, 0, "Use Output:", 100, 100, 163, 20, 0, 0, 0, 0, 0, "");
+ uiDefButS(block, MENU, B_MATPRV, menustr, 100, 80, 163, 20, &mtex->which_output, 0, 0, 0, 0, "Which output to use, for multi-output textures");
+ free(menustr);
+ }
}
else
uiDefButS(block, TOG, B_EXTEXBROWSE, "Add New" ,100, 150, 163, 20, &(G.buts->texnr), -1.0, 32767.0, 0, 0, "Adds a new texture datablock");
diff --git a/source/blender/src/drawnode.c b/source/blender/src/drawnode.c
index 618eca15ac6..c9ee5d727bb 100644
--- a/source/blender/src/drawnode.c
+++ b/source/blender/src/drawnode.c
@@ -451,6 +451,9 @@ static void node_browse_tex_cb(void *ntree_v, void *node_v)
nodeSetActive(ntree, node);
+ if( ntree->type == NTREE_TEXTURE )
+ ntreeTexCheckCyclics( ntree );
+
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWNODE, 0);
NodeTagChanged(ntree, node);
@@ -491,29 +494,45 @@ static void node_dynamic_update_cb(void *ntree_v, void *node_v)
static int node_buts_texture(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr)
{
+ short multi = (
+ node->id &&
+ ((Tex*)node->id)->use_nodes &&
+ (node->type != CMP_NODE_TEXTURE) &&
+ (node->type != TEX_NODE_TEXTURE)
+ );
+
if(block) {
uiBut *bt;
char *strp;
+ short width = (short)(butr->xmax - butr->xmin);
/* browse button texture */
uiBlockBeginAlign(block);
IDnames_to_pupstring(&strp, NULL, "", &(G.main->tex), NULL, NULL);
node->menunr= 0;
bt= uiDefButS(block, MENU, B_NODE_EXEC+node->nr, strp,
- butr->xmin, butr->ymin, 20, 19,
+ butr->xmin, butr->ymin+(multi?30:0), 20, 19,
&node->menunr, 0, 0, 0, 0, "Browse texture");
uiButSetFunc(bt, node_browse_tex_cb, ntree, node);
if(strp) MEM_freeN(strp);
if(node->id) {
bt= uiDefBut(block, TEX, B_NOP, "TE:",
- butr->xmin+19, butr->ymin, butr->xmax-butr->xmin-19, 19,
+ butr->xmin+19, butr->ymin+(multi?30:0), butr->xmax-butr->xmin-19, 19,
node->id->name+2, 0.0, 19.0, 0, 0, "Texture name");
uiButSetFunc(bt, node_ID_title_cb, node, NULL);
}
+ uiBlockEndAlign(block);
+ if(multi) {
+ char *menustr = ntreeTexOutputMenu(((Tex*)node->id)->nodetree);
+ uiDefButS(block, MENU, B_MATPRV, menustr, butr->xmin, butr->ymin, width, 19, &node->custom1, 0, 0, 0, 0, "Which output to use, for multi-output textures");
+ free(menustr);
+ return 50;
+ }
+ return 20;
}
- return 19;
+ else return multi? 50: 20;
}
static int node_buts_math(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr)
@@ -2183,6 +2202,261 @@ static void node_composit_set_butfunc(bNodeType *ntype)
}
}
+/* ****************** BUTTON CALLBACKS FOR TEXTURE NODES ***************** */
+
+static int node_texture_buts_bricks(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr)
+{
+ if(block) {
+ short w = butr->xmax-butr->xmin;
+ short ofw = 32;
+
+ uiBlockBeginAlign(block);
+
+ /* Offset */
+ uiDefButF(
+ block, NUM, B_NODE_EXEC+node->nr, "Offset",
+ butr->xmin, butr->ymin+20, w-ofw, 20,
+ &node->custom3,
+ 0, 1, 0.25, 2,
+ "Offset amount" );
+ uiDefButS(
+ block, NUM, B_NODE_EXEC+node->nr, "",
+ butr->xmin+w-ofw, butr->ymin+20, ofw, 20,
+ &node->custom1,
+ 2, 99, 0, 0,
+ "Offset every N rows" );
+
+ /* Squash */
+ uiDefButF(
+ block, NUM, B_NODE_EXEC+node->nr, "Squash",
+ butr->xmin, butr->ymin+0, w-ofw, 20,
+ &node->custom4,
+ 0, 99, 0.25, 2,
+ "Stretch amount" );
+ uiDefButS(
+ block, NUM, B_NODE_EXEC+node->nr, "",
+ butr->xmin+w-ofw, butr->ymin+0, ofw, 20,
+ &node->custom2,
+ 2, 99, 0, 0,
+ "Stretch every N rows" );
+
+ uiBlockEndAlign(block);
+ }
+ return 40;
+}
+
+/* Copied from buttons_shading.c -- needs unifying */
+static char* noisebasis_menu()
+{
+ static char nbmenu[256];
+ sprintf(nbmenu, "Noise Basis %%t|Blender Original %%x%d|Original Perlin %%x%d|Improved Perlin %%x%d|Voronoi F1 %%x%d|Voronoi F2 %%x%d|Voronoi F3 %%x%d|Voronoi F4 %%x%d|Voronoi F2-F1 %%x%d|Voronoi Crackle %%x%d|CellNoise %%x%d", TEX_BLENDER, TEX_STDPERLIN, TEX_NEWPERLIN, TEX_VORONOI_F1, TEX_VORONOI_F2, TEX_VORONOI_F3, TEX_VORONOI_F4, TEX_VORONOI_F2F1, TEX_VORONOI_CRACKLE, TEX_CELLNOISE);
+ return nbmenu;
+}
+
+static int node_texture_buts_proc(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr)
+{
+ Tex *tex = (Tex *)node->storage;
+ short x,y,w,h;
+
+ if( block ) {
+ x = butr->xmin;
+ y = butr->ymin;
+ w = butr->xmax - x;
+ h = butr->ymax - y;
+ }
+
+ switch( tex->type ) {
+ case TEX_BLEND:
+ if( block ) {
+ uiBlockBeginAlign( block );
+ uiDefButS( block, MENU, B_NODE_EXEC+node->nr,
+ "Linear %x0|Quad %x1|Ease %x2|Diag %x3|Sphere %x4|Halo %x5|Radial %x6",
+ x, y+20, w, 20, &tex->stype, 0, 1, 0, 0, "Blend Type" );
+ uiDefButBitS(block, TOG, TEX_FLIPBLEND, B_NODE_EXEC+node->nr, "Flip XY", x, y, w, 20,
+ &tex->flag, 0, 0, 0, 0, "Flips the direction of the progression 90 degrees");
+ uiBlockEndAlign( block );
+ }
+ return 40;
+
+
+ case TEX_MARBLE:
+ if( block ) {
+ uiBlockBeginAlign(block);
+
+ uiDefButS(block, ROW, B_NODE_EXEC+node->nr, "Soft", 0*w/3+x, 40+y, w/3, 18, &tex->stype, 2.0, (float)TEX_SOFT, 0, 0, "Uses soft marble");
+ uiDefButS(block, ROW, B_NODE_EXEC+node->nr, "Sharp", 1*w/3+x, 40+y, w/3, 18, &tex->stype, 2.0, (float)TEX_SHARP, 0, 0, "Uses more clearly defined marble");
+ uiDefButS(block, ROW, B_NODE_EXEC+node->nr, "Sharper", 2*w/3+x, 40+y, w/3, 18, &tex->stype, 2.0, (float)TEX_SHARPER, 0, 0, "Uses very clearly defined marble");
+
+ uiDefButS(block, ROW, B_NODE_EXEC+node->nr, "Soft noise", 0*w/2+x, 20+y, w/2, 19, &tex->noisetype, 12.0, (float)TEX_NOISESOFT, 0, 0, "Generates soft noise");
+ uiDefButS(block, ROW, B_NODE_EXEC+node->nr, "Hard noise", 1*w/2+x, 20+y, w/2, 19, &tex->noisetype, 12.0, (float)TEX_NOISEPERL, 0, 0, "Generates hard noise");
+
+ uiDefButS(block, ROW, B_NODE_EXEC+node->nr, "Sin", 0*w/3+x, 0+y, w/3, 18, &tex->noisebasis2, 8.0, 0.0, 0, 0, "Uses a sine wave to produce bands.");
+ uiDefButS(block, ROW, B_NODE_EXEC+node->nr, "Saw", 1*w/3+x, 0+y, w/3, 18, &tex->noisebasis2, 8.0, 1.0, 0, 0, "Uses a saw wave to produce bands");
+ uiDefButS(block, ROW, B_NODE_EXEC+node->nr, "Tri", 2*w/3+x, 0+y, w/3, 18, &tex->noisebasis2, 8.0, 2.0, 0, 0, "Uses a triangle wave to produce bands");
+
+ uiBlockEndAlign(block);
+ }
+ return 60;
+
+ case TEX_WOOD:
+ if( block ) {
+ uiDefButS(block, MENU, B_TEXPRV, noisebasis_menu(), x, y+64, w, 18, &tex->noisebasis, 0,0,0,0, "Sets the noise basis used for turbulence");
+
+ uiBlockBeginAlign(block);
+ uiDefButS(block, ROW, B_TEXPRV, "Bands", x, 40+y, w/2, 18, &tex->stype, 2.0, (float)TEX_BANDNOISE, 0, 0, "Uses standard noise");
+ uiDefButS(block, ROW, B_TEXPRV, "Rings", w/2+x, 40+y, w/2, 18, &tex->stype, 2.0, (float)TEX_RINGNOISE, 0, 0, "Lets Noise return RGB value");
+
+ uiDefButS(block, ROW, B_NODE_EXEC+node->nr, "Sin", 0*w/3+x, 20+y, w/3, 18, &tex->noisebasis2, 8.0, (float)TEX_SIN, 0, 0, "Uses a sine wave to produce bands.");
+ uiDefButS(block, ROW, B_NODE_EXEC+node->nr, "Saw", 1*w/3+x, 20+y, w/3, 18, &tex->noisebasis2, 8.0, (float)TEX_SAW, 0, 0, "Uses a saw wave to produce bands");
+ uiDefButS(block, ROW, B_NODE_EXEC+node->nr, "Tri", 2*w/3+x, 20+y, w/3, 18, &tex->noisebasis2, 8.0, (float)TEX_TRI, 0, 0, "Uses a triangle wave to produce bands");
+
+ uiDefButS(block, ROW, B_NODE_EXEC+node->nr, "Soft noise", 0*w/2+x, 0+y, w/2, 19, &tex->noisetype, 12.0, (float)TEX_NOISESOFT, 0, 0, "Generates soft noise");
+ uiDefButS(block, ROW, B_NODE_EXEC+node->nr, "Hard noise", 1*w/2+x, 0+y, w/2, 19, &tex->noisetype, 12.0, (float)TEX_NOISEPERL, 0, 0, "Generates hard noise");
+ uiBlockEndAlign(block);
+ }
+ return 80;
+
+ case TEX_CLOUDS:
+ if( block ) {
+ uiDefButS(block, MENU, B_TEXPRV, noisebasis_menu(), x, y+60, w, 18, &tex->noisebasis, 0,0,0,0, "Sets the noise basis used for turbulence");
+
+ uiBlockBeginAlign(block);
+ uiDefButS(block, ROW, B_TEXPRV, "B/W", x, y+38, w/2, 18, &tex->stype, 2.0, (float)TEX_DEFAULT, 0, 0, "Uses standard noise");
+ uiDefButS(block, ROW, B_TEXPRV, "Color", w/2+x, y+38, w/2, 18, &tex->stype, 2.0, (float)TEX_COLOR, 0, 0, "Lets Noise return RGB value");
+ uiDefButS(block, ROW, B_TEXPRV, "Soft", x, y+20, w/2, 18, &tex->noisetype, 12.0, (float)TEX_NOISESOFT, 0, 0, "Generates soft noise");
+ uiDefButS(block, ROW, B_TEXPRV, "Hard", w/2+x, y+20, w/2, 18, &tex->noisetype, 12.0, (float)TEX_NOISEPERL, 0, 0, "Generates hard noise");
+ uiBlockEndAlign(block);
+
+ uiDefButS(block, NUM, B_TEXPRV, "Depth:", x, y, w, 18, &tex->noisedepth, 0.0, 6.0, 0, 0, "Sets the depth of the cloud calculation");
+ }
+ return 80;
+
+ case TEX_DISTNOISE:
+ if( block ) {
+ uiBlockBeginAlign(block);
+ uiDefButS(block, MENU, B_TEXPRV, noisebasis_menu(), x, y+18, w, 18, &tex->noisebasis2, 0,0,0,0, "Sets the noise basis to distort");
+ uiDefButS(block, MENU, B_TEXPRV, noisebasis_menu(), x, y, w, 18, &tex->noisebasis, 0,0,0,0, "Sets the noise basis which does the distortion");
+ uiBlockEndAlign(block);
+ }
+ return 36;
+ }
+ return 0;
+}
+
+static int node_texture_buts_image(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr)
+{
+ char *strp;
+ uiBut *bt;
+
+ if( block ) {
+ uiBlockBeginAlign(block);
+ uiBlockSetCol(block, TH_BUT_SETTING2);
+
+ /* browse button */
+ IMAnames_to_pupstring(&strp, NULL, "LOAD NEW %x32767", &(G.main->image), NULL, NULL);
+ node->menunr= 0;
+ bt= uiDefButS(block, MENU, B_NOP, strp,
+ butr->xmin, butr->ymin, 19, 19,
+ &node->menunr, 0, 0, 0, 0, "Browses existing choices");
+ uiButSetFunc(bt, node_browse_image_cb, ntree, node);
+ if(strp) MEM_freeN(strp);
+
+ /* Add New button */
+ if(node->id==NULL) {
+ bt= uiDefBut(block, BUT, B_NODE_LOADIMAGE, "Load New",
+ butr->xmin+19, butr->ymin, (short)(butr->xmax-butr->xmin-19.0f), 19,
+ NULL, 0.0, 0.0, 0, 0, "Add new Image");
+ uiButSetFunc(bt, node_active_cb, ntree, node);
+ uiBlockSetCol(block, TH_AUTO);
+ }
+ else {
+ /* name button */
+ short xmin= (short)butr->xmin, xmax= (short)butr->xmax;
+ short width= xmax - xmin - 19;
+
+ bt= uiDefBut(block, TEX, B_NOP, "IM:",
+ xmin+19, butr->ymin, width, 19,
+ node->id->name+2, 0.0, 19.0, 0, 0, "Image name");
+ uiButSetFunc(bt, node_ID_title_cb, node, NULL);
+ }
+ }
+ return 20;
+}
+
+static int node_texture_buts_output(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *butr)
+{
+ if( block ) {
+ uiBut *bt;
+ short width;
+ char *name = ((TexNodeOutput*)node->storage)->name;
+
+ uiBlockBeginAlign(block);
+
+ width = (short)(butr->xmax - butr->xmin);
+
+ bt = uiDefBut(
+ block, TEX, B_NOP,
+ "Name:",
+ butr->xmin, butr->ymin,
+ width, 19,
+ name, 0, 31,
+ 0, 0,
+ "Name this output"
+ );
+
+ uiBlockEndAlign(block);
+ }
+ return 19;
+}
+
+/* only once called */
+static void node_texture_set_butfunc(bNodeType *ntype)
+{
+ if( ntype->type >= TEX_NODE_PROC && ntype->type < TEX_NODE_PROC_MAX ) {
+ ntype->butfunc = node_texture_buts_proc;
+ }
+ else switch(ntype->type) {
+
+ case TEX_NODE_MATH:
+ ntype->butfunc = node_buts_math;
+ break;
+
+ case TEX_NODE_MIX_RGB:
+ ntype->butfunc = node_buts_mix_rgb;
+ break;
+
+ case TEX_NODE_VALTORGB:
+ ntype->butfunc = node_buts_valtorgb;
+ break;
+
+ case TEX_NODE_CURVE_RGB:
+ ntype->butfunc= node_buts_curvecol;
+ break;
+
+ case TEX_NODE_CURVE_TIME:
+ ntype->butfunc = node_buts_time;
+ break;
+
+ case TEX_NODE_TEXTURE:
+ ntype->butfunc = node_buts_texture;
+ break;
+
+ case TEX_NODE_BRICKS:
+ ntype->butfunc = node_texture_buts_bricks;
+ break;
+
+ case TEX_NODE_IMAGE:
+ ntype->butfunc = node_texture_buts_image;
+ break;
+
+ case TEX_NODE_OUTPUT:
+ ntype->butfunc = node_texture_buts_output;
+ break;
+
+ default:
+ ntype->butfunc= NULL;
+ }
+}
/* ******* init draw callbacks for all tree types, only called in usiblender.c, once ************* */
@@ -2202,6 +2476,11 @@ void init_node_butfuncs(void)
node_composit_set_butfunc(ntype);
ntype= ntype->next;
}
+ ntype = node_all_textures.first;
+ while(ntype) {
+ node_texture_set_butfunc(ntype);
+ ntype= ntype->next;
+ }
}
/* ************** Generic drawing ************** */
diff --git a/source/blender/src/editnode.c b/source/blender/src/editnode.c
index 23387673f95..f5de20891b4 100644
--- a/source/blender/src/editnode.c
+++ b/source/blender/src/editnode.c
@@ -40,6 +40,7 @@
#include "DNA_ipo_types.h"
#include "DNA_object_types.h"
#include "DNA_material_types.h"
+#include "DNA_texture_types.h"
#include "DNA_node_types.h"
#include "DNA_space_types.h"
#include "DNA_screen_types.h"
@@ -53,6 +54,7 @@
#include "BKE_main.h"
#include "BKE_node.h"
#include "BKE_material.h"
+#include "BKE_texture.h"
#include "BKE_scene.h"
#include "BKE_utildefines.h"
@@ -176,6 +178,10 @@ static void snode_handle_recalc(SpaceNode *snode)
allqueue(REDRAWNODE, 1);
}
+ else if(snode->treetype==NTREE_TEXTURE) {
+ ntreeTexUpdatePreviews(snode->nodetree);
+ BIF_preview_changed(ID_TE);
+ }
}
static void shader_node_event(SpaceNode *snode, short event)
@@ -423,6 +429,36 @@ static void composit_node_event(SpaceNode *snode, short event)
}
}
+static void texture_node_event(SpaceNode *snode, short event)
+{
+ switch(event) {
+ case B_REDR:
+ allqueue(REDRAWNODE, 1);
+ break;
+ case B_NODE_LOADIMAGE:
+ {
+ bNode *node= nodeGetActive(snode->edittree);
+ char name[FILE_MAXDIR+FILE_MAXFILE];
+
+ if(node->id)
+ strcpy(name, ((Image *)node->id)->name);
+ else strcpy(name, U.textudir);
+ if (G.qual & LR_CTRLKEY) {
+ activate_imageselect(FILE_SPECIAL, "SELECT IMAGE", name, load_node_image);
+ } else {
+ activate_fileselect(FILE_SPECIAL, "SELECT IMAGE", name, load_node_image);
+ }
+ break;
+ }
+ default:
+ /* B_NODE_EXEC */
+ ntreeTexCheckCyclics( snode->nodetree );
+ snode_handle_recalc(snode);
+ allqueue(REDRAWNODE, 1);
+ break;
+ }
+}
+
/* assumes nothing being done in ntree yet, sets the default in/out node */
/* called from shading buttons or header */
@@ -486,6 +522,36 @@ void node_composit_default(Scene *sce)
ntreeCompositForceHidden(sce->nodetree);
}
+/* assumes nothing being done in ntree yet, sets the default in/out node */
+/* called from shading buttons or header */
+void node_texture_default(Tex *tx)
+{
+ bNode *in, *out;
+ bNodeSocket *fromsock, *tosock;
+
+ /* but lets check it anyway */
+ if(tx->nodetree) {
+ printf("error in texture initialize\n");
+ return;
+ }
+
+ tx->nodetree= ntreeAddTree(NTREE_TEXTURE);
+
+ out= nodeAddNodeType(tx->nodetree, TEX_NODE_OUTPUT, NULL, NULL);
+ out->locx= 300.0f; out->locy= 300.0f;
+
+ in= nodeAddNodeType(tx->nodetree, TEX_NODE_CHECKER, NULL, NULL);
+ in->locx= 10.0f; in->locy= 300.0f;
+ nodeSetActive(tx->nodetree, in);
+
+ fromsock= in->outputs.first;
+ tosock= out->inputs.first;
+ nodeAddLink(tx->nodetree, in, fromsock, out, tosock);
+
+ ntreeSolveOrder(tx->nodetree); /* needed for pointers */
+ ntreeTexUpdatePreviews(tx->nodetree);
+}
+
/* Here we set the active tree(s), even called for each redraw now, so keep it fast :) */
void snode_set_context(SpaceNode *snode)
{
@@ -516,6 +582,16 @@ void snode_set_context(SpaceNode *snode)
snode->nodetree= G.scene->nodetree;
}
+ else if(snode->treetype==NTREE_TEXTURE) {
+ if(ob) {
+ Tex *tx= give_current_texture(ob, ob->actcol);
+ if(tx) {
+ snode->from= (ID*)ob; /* please check this; i have no idea what 'from' is. */
+ snode->id= &tx->id;
+ snode->nodetree= tx->nodetree;
+ }
+ }
+ }
/* find editable group */
if(snode->nodetree)
@@ -608,6 +684,12 @@ static void node_set_active(SpaceNode *snode, bNode *node)
}
}
}
+ else if(snode->treetype==NTREE_TEXTURE) {
+ if(node->id)
+ BIF_preview_changed(-1);
+ allqueue(REDRAWBUTSSHADING, 1);
+ allqueue(REDRAWIPO, 0);
+ }
}
}
@@ -1188,6 +1270,9 @@ static void scale_node(SpaceNode *snode, bNode *node)
BIF_undo_push("Scale Node");
allqueue(REDRAWNODE, 1);
+
+ if(snode->nodetree->type == NTREE_TEXTURE)
+ ntreeTexUpdatePreviews(snode->nodetree);
}
/* ******************** rename ******************* */
@@ -1702,6 +1787,12 @@ bNode *node_add_node(SpaceNode *snode, int type, float locx, float locy)
NodeTagChanged(snode->edittree, node);
}
+
+ if(snode->nodetree->type==NTREE_TEXTURE) {
+ ntreeTexCheckCyclics(snode->edittree);
+ ntreeTexUpdatePreviews(snode->edittree);
+ }
+
return node;
}
@@ -2481,6 +2572,8 @@ void winqreadnodespace(ScrArea *sa, void *spacedata, BWinEvent *evt)
shader_node_event(snode, val);
else if(snode->treetype==NTREE_COMPOSIT)
composit_node_event(snode, val);
+ else if(snode->treetype==NTREE_TEXTURE)
+ texture_node_event(snode, val);
break;
case RENDERPREVIEW:
diff --git a/source/blender/src/gpencil.c b/source/blender/src/gpencil.c
index 8d64e17bb8a..f4cfc0c0dd6 100644
--- a/source/blender/src/gpencil.c
+++ b/source/blender/src/gpencil.c
@@ -267,6 +267,7 @@ bGPDframe *gpencil_frame_duplicate (bGPDframe *src)
/* make a copy of the source frame */
dst= MEM_dupallocN(src);
+ dst->prev= dst->next= NULL;
/* copy strokes */
dst->strokes.first = dst->strokes.last= NULL;
@@ -294,13 +295,18 @@ bGPDlayer *gpencil_layer_duplicate (bGPDlayer *src)
/* make a copy of source layer */
dst= MEM_dupallocN(src);
+ dst->prev= dst->next= NULL;
/* copy frames */
dst->frames.first= dst->frames.last= NULL;
for (gpf= src->frames.first; gpf; gpf= gpf->next) {
- /* make a copy of source stroke */
+ /* make a copy of source frame */
gpfd= gpencil_frame_duplicate(gpf);
BLI_addtail(&dst->frames, gpfd);
+
+ /* if source frame was the current layer's 'active' frame, reassign that too */
+ if (gpf == dst->actframe)
+ dst->actframe= gpfd;
}
/* return new layer */
diff --git a/source/blender/src/header_node.c b/source/blender/src/header_node.c
index d27a41c59f5..2bd028766d1 100644
--- a/source/blender/src/header_node.c
+++ b/source/blender/src/header_node.c
@@ -68,6 +68,7 @@ void do_node_buttons(ScrArea *sa, unsigned short event)
{
SpaceNode *snode= sa->spacedata.first;
Material *ma;
+ Tex *tx;
switch(event) {
case B_NODE_USEMAT:
@@ -93,6 +94,21 @@ void do_node_buttons(ScrArea *sa, unsigned short event)
snode_set_context(snode);
allqueue(REDRAWNODE, 0);
break;
+
+ case B_NODE_USETEX:
+ tx = (Tex *)snode->id;
+ if(tx) {
+ tx->type = 0;
+ if(tx->use_nodes && tx->nodetree==NULL) {
+ node_texture_default(tx);
+ snode_set_context(snode);
+ }
+ BIF_preview_changed(ID_TE);
+ allqueue(REDRAWNODE, 0);
+ allqueue(REDRAWBUTSSHADING, 0);
+ allqueue(REDRAWIPO, 0);
+ }
+ break;
}
}
@@ -424,6 +440,36 @@ static uiBlock *node_add_distortmenu(void *arg_unused)
return block;
}
+static uiBlock *node_add_patternmenu(void *arg_unused)
+{
+ SpaceNode *snode= curarea->spacedata.first;
+ uiBlock *block;
+
+ block= uiNewBlock(&curarea->uiblocks, "node_add_patternmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
+ uiBlockSetButmFunc(block, do_node_addmenu, NULL);
+
+ node_make_addmenu(snode, NODE_CLASS_PATTERN, block);
+
+ uiBlockSetDirection(block, UI_RIGHT);
+ uiTextBoundsBlock(block, 60);
+
+ return block;
+}
+static uiBlock *node_add_texturemenu(void *arg_unused)
+{
+ SpaceNode *snode= curarea->spacedata.first;
+ uiBlock *block;
+
+ block= uiNewBlock(&curarea->uiblocks, "node_add_texturemenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
+ uiBlockSetButmFunc(block, do_node_addmenu, NULL);
+
+ node_make_addmenu(snode, NODE_CLASS_TEXTURE, block);
+
+ uiBlockSetDirection(block, UI_RIGHT);
+ uiTextBoundsBlock(block, 60);
+
+ return block;
+}
static uiBlock *node_add_groupmenu(void *arg_unused)
{
SpaceNode *snode= curarea->spacedata.first;
@@ -486,7 +532,17 @@ static uiBlock *node_addmenu(void *arg_unused)
uiDefIconTextBlockBut(block, node_add_distortmenu, NULL, ICON_RIGHTARROW_THIN, "Distort", 0, yco-=20, 120, 19, "");
uiDefIconTextBlockBut(block, node_add_groupmenu, NULL, ICON_RIGHTARROW_THIN, "Group", 0, yco-=20, 120, 19, "");
- } else
+ } else if(snode->treetype==NTREE_TEXTURE) {
+ uiDefIconTextBlockBut(block, node_add_inputmenu, NULL, ICON_RIGHTARROW_THIN, "Input", 0, yco-=20, 120, 19, "");
+ uiDefIconTextBlockBut(block, node_add_outputmenu, NULL, ICON_RIGHTARROW_THIN, "Output", 0, yco-=20, 120, 19, "");
+ uiDefIconTextBlockBut(block, node_add_colormenu, NULL, ICON_RIGHTARROW_THIN, "Color", 0, yco-=20, 120, 19, "");
+ uiDefIconTextBlockBut(block, node_add_patternmenu, NULL, ICON_RIGHTARROW_THIN, "Patterns", 0, yco-=20, 120, 19, "");
+ uiDefIconTextBlockBut(block, node_add_texturemenu, NULL, ICON_RIGHTARROW_THIN, "Textures", 0, yco-=20, 120, 19, "");
+ uiDefIconTextBlockBut(block, node_add_convertermenu, NULL, ICON_RIGHTARROW_THIN, "Convertor", 0, yco-=20, 120, 19, "");
+ uiDefIconTextBlockBut(block, node_add_distortmenu, NULL, ICON_RIGHTARROW_THIN, "Distort", 0, yco-=20, 120, 19, "");
+ uiDefIconTextBlockBut(block, node_add_groupmenu, NULL, ICON_RIGHTARROW_THIN, "Group", 0, yco-=20, 120, 19, "");
+ }
+ else
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
if(curarea->headertype==HEADERTOP) {
@@ -696,6 +752,9 @@ void node_buttons(ScrArea *sa)
xco+= XIC;
uiDefIconButI(block, ROW, B_REDR, ICON_IMAGE_DEHLT, xco,2,XIC,YIC-2,
&(snode->treetype), 2, 1, 0, 0, "Composite Nodes");
+ xco+= XIC;
+ uiDefIconButI(block, ROW, B_REDR, ICON_TEXTURE_DEHLT, xco,2,XIC,YIC-2,
+ &(snode->treetype), 2, 2, 0, 0, "Texture Nodes");
xco+= 2*XIC;
uiBlockEndAlign(block);
@@ -723,6 +782,19 @@ void node_buttons(ScrArea *sa)
uiDefButBitS(block, TOG, SNODE_BACKDRAW, REDRAWNODE, "Backdrop", xco+5,0,80,19, &snode->flag, 0.0f, 0.0f, 0, 0, "Use active Viewer Node output as backdrop");
xco+= 80;
}
+ else if(snode->treetype==NTREE_TEXTURE) {
+ if(snode->from) {
+
+ xco= std_libbuttons(block, xco, 0, 0, NULL, B_TEXBROWSE, ID_TE, 1, snode->id, snode->from, &(snode->menunr),
+ B_TEXALONE, B_TEXLOCAL, B_TEXDELETE, B_AUTOTEXNAME, B_KEEPDATA);
+
+ if(snode->id) {
+ Tex *tx= (Tex *)snode->id;
+ uiDefButC(block, TOG, B_NODE_USETEX, "Use Nodes", xco+5,0,70,19, &tx->use_nodes, 0.0f, 0.0f, 0, 0, "");
+ xco+=80;
+ }
+ }
+ }
/* always as last */
sa->headbutlen= xco+2*XIC;
diff --git a/source/blender/src/headerbuttons.c b/source/blender/src/headerbuttons.c
index 7c97fa8431d..f4135071e3e 100644
--- a/source/blender/src/headerbuttons.c
+++ b/source/blender/src/headerbuttons.c
@@ -427,6 +427,15 @@ static void do_update_for_newframe(int mute, int events)
/* composite */
if(G.scene->use_nodes && G.scene->nodetree)
ntreeCompositTagAnimated(G.scene->nodetree);
+
+ /* update animated texture nodes */
+ {
+ Tex *tex;
+ for(tex= G.main->tex.first; tex; tex= tex->id.next)
+ if( tex->use_nodes && tex->nodetree ) {
+ ntreeTexTagAnimated( tex->nodetree );
+ }
+ }
}
void update_for_newframe(void)
@@ -858,10 +867,25 @@ void do_global_buttons(unsigned short event)
break;
case B_EXTEXBROWSE:
case B_TEXBROWSE:
-
- if(G.buts->texnr== -2) {
+ {
+ void *lockpoin = NULL;
+ short *menunr = 0;
+
+ /* this is called now from Node editor too, buttons might not exist */
+ if(curarea->spacetype==SPACE_NODE) {
+ SpaceNode *snode = curarea->spacedata.first;
+ menunr = &snode->menunr;
+ lockpoin = snode->id;
+ }
+ else if(G.buts) {
+ menunr = &G.buts->texnr;
+ lockpoin = G.buts->lockpoin;
+ }
+ else return;
+
+ if(*menunr == -2) {
- id= G.buts->lockpoin;
+ id= lockpoin;
if(event==B_EXTEXBROWSE) {
id= NULL;
ma= give_current_material(ob, ob->actcol);
@@ -872,16 +896,16 @@ void do_global_buttons(unsigned short event)
}
}
if(G.qual & LR_CTRLKEY) {
- activate_databrowse_imasel(id, ID_TE, 0, B_TEXBROWSE, &G.buts->texnr, do_global_buttons);
+ activate_databrowse_imasel((ID*)lockpoin, ID_TE, 0, B_TEXBROWSE, menunr, do_global_buttons);
}
else {
- activate_databrowse(id, ID_TE, 0, B_TEXBROWSE, &G.buts->texnr, do_global_buttons);
+ activate_databrowse((ID*)lockpoin, ID_TE, 0, B_TEXBROWSE, menunr, do_global_buttons);
}
return;
}
- if(G.buts->texnr < 0) break;
+ if(*menunr < 0) break;
- if(G.buts->pin) {
+ if(G.buts && G.buts->pin) {
}
else {
@@ -896,7 +920,7 @@ void do_global_buttons(unsigned short event)
idtest= G.main->tex.first;
while(idtest) {
- if(nr==G.buts->texnr) {
+ if(nr==*menunr) {
break;
}
nr++;
@@ -919,10 +943,12 @@ void do_global_buttons(unsigned short event)
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWIPO, 0);
allqueue(REDRAWOOPS, 0);
+ allqueue(REDRAWNODE, 0);
BIF_preview_changed(ID_MA);
}
}
break;
+ }
case B_ACTIONDELETE:
/* only available when not pinned */
if (G.saction->pin == 0) {
diff --git a/source/blender/src/interface_draw.c b/source/blender/src/interface_draw.c
index 83ae449b989..78e74442342 100644
--- a/source/blender/src/interface_draw.c
+++ b/source/blender/src/interface_draw.c
@@ -68,6 +68,7 @@
#include "BKE_global.h"
#include "BKE_key.h"
#include "BKE_utildefines.h"
+#include "BKE_texture.h"
#include "datatoc.h" /* std font */
@@ -1978,6 +1979,7 @@ static void ui_draw_but_COLORBAND(uiBut *but)
CBData *cbd;
float x1, y1, sizex, sizey;
float dx, v3[2], v1[2], v2[2], v1a[2], v2a[2];
+ float pos, colf[4];
int a;
if(coba==NULL) return;
@@ -1998,7 +2000,7 @@ static void ui_draw_but_COLORBAND(uiBut *but)
v1[0]+= dx;
}
- glShadeModel(GL_SMOOTH);
+ glShadeModel(GL_FLAT);
glEnable(GL_BLEND);
cbd= coba->data;
@@ -2012,17 +2014,16 @@ static void ui_draw_but_COLORBAND(uiBut *but)
glColor4fv( &cbd->r );
glVertex2fv(v1); glVertex2fv(v2);
- for(a=0; atot; a++, cbd++) {
-
- v1[0]=v2[0]= x1+ cbd->pos*sizex;
-
- glColor4fv( &cbd->r );
+ for( a = 1; a < sizex; a++ ) {
+ pos = ((float)a) / (sizex-1);
+ do_colorband( coba, pos, colf );
+
+ v1[0]=v2[0]= x1 + a;
+
+ glColor4fv( colf );
glVertex2fv(v1); glVertex2fv(v2);
}
-
- v1[0]=v2[0]= x1+ sizex;
- glVertex2fv(v1); glVertex2fv(v2);
-
+
glEnd();
glShadeModel(GL_FLAT);
glDisable(GL_BLEND);
diff --git a/source/blender/src/poselib.c b/source/blender/src/poselib.c
index b819dd2a865..13520c94b87 100644
--- a/source/blender/src/poselib.c
+++ b/source/blender/src/poselib.c
@@ -508,7 +508,7 @@ void poselib_rename_pose (Object *ob)
if (marker == NULL) return;
/* get name of pose */
- sprintf(name, marker->name);
+ strncpy(name, marker->name, sizeof(name));
if (sbutton(name, 0, sizeof(name)-1, "Name: ") == 0)
return;
diff --git a/source/blender/src/seqaudio.c b/source/blender/src/seqaudio.c
index 9b4e3361625..0bc40674350 100644
--- a/source/blender/src/seqaudio.c
+++ b/source/blender/src/seqaudio.c
@@ -398,11 +398,7 @@ static void audio_fill_seq(Sequence * seq, void * mixdown,
if (!seq->hdaudio) {
char name[FILE_MAXDIR+FILE_MAXFILE];
- strncpy(name, seq->strip->dir,
- FILE_MAXDIR-1);
- strncat(name,
- seq->strip->stripdata->name,
- FILE_MAXFILE-1);
+ BLI_join_dirfile(name, seq->strip->dir, seq->strip->stripdata->name);
BLI_convertstringcode(name, G.sce);
seq->hdaudio= sound_open_hdaudio(name);
diff --git a/source/blender/src/toolbox.c b/source/blender/src/toolbox.c
index 1c028c3f18b..b675f6868f8 100644
--- a/source/blender/src/toolbox.c
+++ b/source/blender/src/toolbox.c
@@ -1595,6 +1595,17 @@ static TBitem tb_node_addcomp[]= {
{ 0, "Group", 9, NULL},
{ 0, "Dynamic", 10, NULL},
{ -1, "", 0, NULL}};
+
+static TBitem tb_node_addtex[]= {
+ { 0, "Input", 1, NULL},
+ { 0, "Output", 2, NULL},
+ { 0, "Color", 3, NULL},
+ { 0, "Convertor", 4, NULL},
+ { 0, "Patterns", 5, NULL},
+ { 0, "Textures", 6, NULL},
+ { 0, "Distort", 7, NULL},
+ { 0, "Group", 8, NULL},
+ { -1, "", 0, NULL}};
/* do_node_addmenu() in header_node.c, prototype in BSE_headerbuttons.h */
@@ -2126,7 +2137,7 @@ void toolbox_n(void)
menu3= tb__select;
menu4= tb_edit;
menu5= tb_transform_editmode2;
- }
+ }
else if(G.obedit->type==OB_LATTICE) {
menu1= tb_empty;str1= "Lattice";
menu2= tb_empty;
@@ -2145,8 +2156,11 @@ void toolbox_n(void)
if(snode->treetype==NTREE_COMPOSIT)
menu1= tb_node_addcomp;
- else
+ else if(snode->treetype==NTREE_SHADER)
menu1= tb_node_addsh;
+ else if(snode->treetype==NTREE_TEXTURE)
+ menu1= tb_node_addtex;
+
str1= "Add";
menu2= tb_node_node; str2= "Node";
menu3= tb_node_select; str3= "Select";
@@ -2173,8 +2187,17 @@ void toolbox_n(void)
menu1[7].poin= node_add_sublevel(&storage, snode->nodetree, NODE_CLASS_DISTORT);
menu1[8].poin= node_add_sublevel(&storage, snode->nodetree, NODE_CLASS_GROUP);
menu1[9].poin= node_add_sublevel(&storage, snode->nodetree, NODE_CLASS_OP_DYNAMIC);
-
}
+ else if(snode->treetype==NTREE_TEXTURE) {
+ menu1[0].poin= node_add_sublevel(&storage, snode->nodetree, NODE_CLASS_INPUT);
+ menu1[1].poin= node_add_sublevel(&storage, snode->nodetree, NODE_CLASS_OUTPUT);
+ menu1[2].poin= node_add_sublevel(&storage, snode->nodetree, NODE_CLASS_OP_COLOR);
+ menu1[3].poin= node_add_sublevel(&storage, snode->nodetree, NODE_CLASS_CONVERTOR);
+ menu1[4].poin= node_add_sublevel(&storage, snode->nodetree, NODE_CLASS_PATTERN);
+ menu1[5].poin= node_add_sublevel(&storage, snode->nodetree, NODE_CLASS_TEXTURE);
+ menu1[6].poin= node_add_sublevel(&storage, snode->nodetree, NODE_CLASS_DISTORT);
+ menu1[7].poin= node_add_sublevel(&storage, snode->nodetree, NODE_CLASS_GROUP);
+ }
dx= 96;
tot= 5;
diff --git a/source/blender/src/transform.c b/source/blender/src/transform.c
index b9b8a4a21a9..7a13943d0e0 100644
--- a/source/blender/src/transform.c
+++ b/source/blender/src/transform.c
@@ -2486,25 +2486,28 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short
Mat3CpyMat4(pmtx, t->poseobj->obmat);
Mat3Inv(imtx, pmtx);
- VecSubf(vec, td->center, center);
-
- Mat3MulVecfl(pmtx, vec); // To Global space
- Mat3MulVecfl(mat, vec); // Applying rotation
- Mat3MulVecfl(imtx, vec); // To Local space
-
- VecAddf(vec, vec, center);
- /* vec now is the location where the object has to be */
-
- VecSubf(vec, vec, td->center); // Translation needed from the initial location
-
- Mat3MulVecfl(pmtx, vec); // To Global space
- Mat3MulVecfl(td->smtx, vec);// To Pose space
-
- protectedTransBits(td->protectflag, vec);
-
- VecAddf(td->loc, td->iloc, vec);
-
- constraintTransLim(t, td);
+ if ((td->flag & TD_NO_LOC) == 0)
+ {
+ VecSubf(vec, td->center, center);
+
+ Mat3MulVecfl(pmtx, vec); // To Global space
+ Mat3MulVecfl(mat, vec); // Applying rotation
+ Mat3MulVecfl(imtx, vec); // To Local space
+
+ VecAddf(vec, vec, center);
+ /* vec now is the location where the object has to be */
+
+ VecSubf(vec, vec, td->center); // Translation needed from the initial location
+
+ Mat3MulVecfl(pmtx, vec); // To Global space
+ Mat3MulVecfl(td->smtx, vec);// To Pose space
+
+ protectedTransBits(td->protectflag, vec);
+
+ VecAddf(td->loc, td->iloc, vec);
+
+ constraintTransLim(t, td);
+ }
/* rotation */
if ((t->flag & T_V3D_ALIGN)==0) { // align mode doesn't rotate objects itself
@@ -2520,23 +2523,28 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short
}
}
else {
- /* translation */
- VecSubf(vec, td->center, center);
- Mat3MulVecfl(mat, vec);
- VecAddf(vec, vec, center);
- /* vec now is the location where the object has to be */
- VecSubf(vec, vec, td->center);
- Mat3MulVecfl(td->smtx, vec);
- protectedTransBits(td->protectflag, vec);
-
- if(td->tdi) {
- TransDataIpokey *tdi= td->tdi;
- add_tdi_poin(tdi->locx, tdi->oldloc, vec[0]);
- add_tdi_poin(tdi->locy, tdi->oldloc+1, vec[1]);
- add_tdi_poin(tdi->locz, tdi->oldloc+2, vec[2]);
+ if ((td->flag & TD_NO_LOC) == 0)
+ {
+ /* translation */
+ VecSubf(vec, td->center, center);
+ Mat3MulVecfl(mat, vec);
+ VecAddf(vec, vec, center);
+ /* vec now is the location where the object has to be */
+ VecSubf(vec, vec, td->center);
+ Mat3MulVecfl(td->smtx, vec);
+
+ protectedTransBits(td->protectflag, vec);
+
+ if(td->tdi) {
+ TransDataIpokey *tdi= td->tdi;
+ add_tdi_poin(tdi->locx, tdi->oldloc, vec[0]);
+ add_tdi_poin(tdi->locy, tdi->oldloc+1, vec[1]);
+ add_tdi_poin(tdi->locz, tdi->oldloc+2, vec[2]);
+ }
+ else VecAddf(td->loc, td->iloc, vec);
}
- else VecAddf(td->loc, td->iloc, vec);
+
constraintTransLim(t, td);
diff --git a/source/blender/src/transform_conversions.c b/source/blender/src/transform_conversions.c
index 3465983d110..f58eaefc628 100644
--- a/source/blender/src/transform_conversions.c
+++ b/source/blender/src/transform_conversions.c
@@ -540,8 +540,17 @@ static void add_pose_transdata(TransInfo *t, bPoseChannel *pchan, Object *ob, Tr
td->ob = ob;
td->flag= TD_SELECTED|TD_USEQUAT;
- if(bone->flag & BONE_HINGE_CHILD_TRANSFORM)
+ if (bone->flag & BONE_HINGE_CHILD_TRANSFORM)
+ {
td->flag |= TD_NOCENTER;
+ }
+
+ if (bone->flag & BONE_TRANSFORM_CHILD)
+ {
+ td->flag |= TD_NOCENTER;
+ td->flag |= TD_NO_LOC;
+ }
+
td->protectflag= pchan->protectflag;
td->loc = pchan->loc;
@@ -628,17 +637,25 @@ static void add_pose_transdata(TransInfo *t, bPoseChannel *pchan, Object *ob, Tr
td->con= pchan->constraints.first;
}
-static void bone_children_clear_transflag(ListBase *lb)
+static void bone_children_clear_transflag(TransInfo *t, ListBase *lb)
{
Bone *bone= lb->first;
for(;bone;bone= bone->next) {
if((bone->flag & BONE_HINGE) && (bone->flag & BONE_CONNECTED))
+ {
bone->flag |= BONE_HINGE_CHILD_TRANSFORM;
+ }
+ else if (bone->flag & BONE_TRANSFORM && (t->mode == TFM_ROTATION || t->mode == TFM_TRACKBALL))
+ {
+ bone->flag |= BONE_TRANSFORM_CHILD;
+ }
else
+ {
bone->flag &= ~BONE_TRANSFORM;
+ }
- bone_children_clear_transflag(&bone->childbase);
+ bone_children_clear_transflag(t, &bone->childbase);
}
}
@@ -661,6 +678,7 @@ static void set_pose_transflags(TransInfo *t, Object *ob)
bone->flag &= ~BONE_TRANSFORM;
bone->flag &= ~BONE_HINGE_CHILD_TRANSFORM;
+ bone->flag &= ~BONE_TRANSFORM_CHILD;
}
}
@@ -670,7 +688,7 @@ static void set_pose_transflags(TransInfo *t, Object *ob)
for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) {
bone= pchan->bone;
if(bone->flag & BONE_TRANSFORM)
- bone_children_clear_transflag(&bone->childbase);
+ bone_children_clear_transflag(t, &bone->childbase);
}
}
/* now count, and check if we have autoIK or have to switch from translate to rotate */
@@ -1115,6 +1133,14 @@ static void createTransArmatureVerts(TransInfo *t)
Mat3CpyMat3(td->smtx, smtx);
Mat3CpyMat3(td->mtx, mtx);
+ VecSubf(delta, ebo->tail, ebo->head);
+ vec_roll_to_mat3(delta, ebo->roll, td->axismtx);
+
+ if ((ebo->flag & BONE_ROOTSEL) == 0)
+ {
+ td->extra = ebo;
+ }
+
td->ext = NULL;
td->tdi = NULL;
td->val = NULL;
@@ -1132,6 +1158,11 @@ static void createTransArmatureVerts(TransInfo *t)
Mat3CpyMat3(td->smtx, smtx);
Mat3CpyMat3(td->mtx, mtx);
+ VecSubf(delta, ebo->tail, ebo->head);
+ vec_roll_to_mat3(delta, ebo->roll, td->axismtx);
+
+ td->extra = ebo; /* to fix roll */
+
td->ext = NULL;
td->tdi = NULL;
td->val = NULL;
@@ -1845,7 +1876,7 @@ static void VertsToTransData(TransData *td, EditVert *eve)
td->ext = NULL;
td->tdi = NULL;
td->val = NULL;
- td->tdmir = NULL;
+ td->extra = NULL;
if (BIF_GetTransInfo()->mode == TFM_BWEIGHT) {
td->val = &(eve->bweight);
td->ival = eve->bweight;
@@ -2198,7 +2229,7 @@ static void createTransEditVerts(TransInfo *t)
/* Mirror? */
if( (mirror>0 && tob->iloc[0]>0.0f) || (mirror<0 && tob->iloc[0]<0.0f)) {
EditVert *vmir= editmesh_get_x_mirror_vert(G.obedit, tob->iloc); /* initializes octree on first call */
- if(vmir != eve) tob->tdmir = vmir;
+ if(vmir != eve) tob->extra = vmir;
}
tob++;
}
@@ -3497,9 +3528,17 @@ static void set_trans_object_base_flags(TransInfo *t)
parsel= parsel->parent;
}
- if(parsel) {
- base->flag &= ~SELECT;
- base->flag |= BA_WAS_SEL;
+ if(parsel)
+ {
+ if (t->mode == TFM_ROTATION || t->mode == TFM_TRACKBALL)
+ {
+ base->flag |= BA_TRANSFORM_CHILD;
+ }
+ else
+ {
+ base->flag &= ~SELECT;
+ base->flag |= BA_WAS_SEL;
+ }
}
/* used for flush, depgraph will change recalcs if needed :) */
ob->recalc |= OB_RECALC_OB;
@@ -3526,7 +3565,7 @@ static void clear_trans_object_base_flags(void)
base= FIRSTBASE;
while(base) {
if(base->flag & BA_WAS_SEL) base->flag |= SELECT;
- base->flag &= ~(BA_WAS_SEL|BA_HAS_RECALC_OB|BA_HAS_RECALC_DATA|BA_DO_IPO);
+ base->flag &= ~(BA_WAS_SEL|BA_HAS_RECALC_OB|BA_HAS_RECALC_DATA|BA_DO_IPO|BA_TRANSFORM_CHILD);
base = base->next;
}
@@ -4097,6 +4136,12 @@ static void createTransObject(TransInfo *t)
td->protectflag= ob->protectflag;
td->ext = tx;
+ if (base->flag & BA_TRANSFORM_CHILD)
+ {
+ td->flag |= TD_NOCENTER;
+ td->flag |= TD_NO_LOC;
+ }
+
/* select linked objects, but skip them later */
if (ob->id.lib != 0) {
td->flag |= TD_SKIP;
diff --git a/source/blender/src/transform_generics.c b/source/blender/src/transform_generics.c
index a1440b8cbce..229889d15ff 100644
--- a/source/blender/src/transform_generics.c
+++ b/source/blender/src/transform_generics.c
@@ -254,7 +254,7 @@ static void editmesh_apply_to_mirror(TransInfo *t)
if (td->flag & TD_SKIP)
continue;
- eve = td->tdmir;
+ eve = td->extra;
if(eve) {
eve->co[0]= -td->loc[0];
eve->co[1]= td->loc[1];
@@ -470,6 +470,8 @@ void recalcData(TransInfo *t)
else if(G.obedit->type==OB_ARMATURE){ /* no recalc flag, does pose */
bArmature *arm= G.obedit->data;
EditBone *ebo;
+ TransData *td = t->data;
+ int i;
/* Ensure all bones are correctly adjusted */
for (ebo=G.edbo.first; ebo; ebo=ebo->next){
@@ -506,6 +508,38 @@ void recalcData(TransInfo *t)
ebo->oldlength= ebo->length;
}
}
+
+
+ if (t->mode != TFM_BONE_ROLL)
+ {
+ /* fix roll */
+ for(i = 0; i < t->total; i++, td++)
+ {
+ if (td->extra)
+ {
+ float vec[3], up_axis[3];
+ float qrot[4];
+
+ ebo = td->extra;
+ VECCOPY(up_axis, td->axismtx[2]);
+
+ if (t->mode != TFM_ROTATION)
+ {
+ VecSubf(vec, ebo->tail, ebo->head);
+ Normalize(vec);
+ RotationBetweenVectorsToQuat(qrot, td->axismtx[1], vec);
+ QuatMulVecf(qrot, up_axis);
+ }
+ else
+ {
+ Mat3MulVecfl(t->mat, up_axis);
+ }
+
+ ebo->roll = rollBoneToVector(ebo, up_axis);
+ }
+ }
+ }
+
if(arm->flag & ARM_MIRROR_EDIT)
transform_armature_mirror_update();
@@ -820,7 +854,10 @@ void restoreTransObjects(TransInfo *t)
((VObjectData*)vnode->data)->flag |= SCALE_SEND_READY;
}
#endif
- }
+ }
+
+ Mat3One(t->mat);
+
recalcData(t);
}
@@ -876,12 +913,16 @@ void calculateCenterCursor2D(TransInfo *t)
void calculateCenterMedian(TransInfo *t)
{
float partial[3] = {0.0f, 0.0f, 0.0f};
+ int total = 0;
int i;
for(i = 0; i < t->total; i++) {
if (t->data[i].flag & TD_SELECTED) {
if (!(t->data[i].flag & TD_NOCENTER))
+ {
VecAddf(partial, partial, t->data[i].center);
+ total++;
+ }
}
else {
/*
@@ -892,7 +933,7 @@ void calculateCenterMedian(TransInfo *t)
}
}
if(i)
- VecMulf(partial, 1.0f / i);
+ VecMulf(partial, 1.0f / total);
VECCOPY(t->center, partial);
calculateCenter2D(t);
diff --git a/source/blender/src/transform_orientations.c b/source/blender/src/transform_orientations.c
index fc9dfbb902e..0bc1ef5ca1f 100644
--- a/source/blender/src/transform_orientations.c
+++ b/source/blender/src/transform_orientations.c
@@ -40,6 +40,7 @@
#include "BKE_global.h"
#include "BKE_utildefines.h"
+#include "BKE_armature.h"
#include "BLI_arithb.h"
#include "BLI_blenlib.h"
@@ -680,21 +681,20 @@ int getTransformOrientation(float normal[3], float plane[3], int activeOnly)
{
if (ebone->flag & BONE_SELECTED)
{
+ float mat[3][3];
float vec[3];
VecSubf(vec, ebone->tail, ebone->head);
Normalize(vec);
VecAddf(normal, normal, vec);
+
+ vec_roll_to_mat3(vec, ebone->roll, mat);
+ VecAddf(plane, plane, mat[2]);
}
}
}
Normalize(normal);
- Crossf(plane, G.obedit->obmat[0], normal);
-
- if (Inpf(plane, plane) < FLT_EPSILON)
- {
- Crossf(plane, G.obedit->obmat[1], normal);
- }
+ Normalize(plane);
if (plane[0] != 0 || plane[1] != 0 || plane[2] != 0)
{
diff --git a/source/creator/SConscript b/source/creator/SConscript
index 16556643707..505b69b8e6d 100644
--- a/source/creator/SConscript
+++ b/source/creator/SConscript
@@ -6,7 +6,7 @@ sources = 'creator.c'
incs = '#/intern/guardedalloc ../blender/blenlib ../blender/blenkernel'
incs += ' ../blender/include ../blender/blenloader ../blender/imbuf'
incs += ' ../blender/renderconverter ../blender/render/extern/include'
-incs += ' ../blender/python ../blender/makesdna ../kernel/gen_messaging'
+incs += ' ../blender/makesdna ../kernel/gen_messaging'
incs += ' ../kernel/gen_system #/extern/glew/include ../blender/gpu'
incs += ' ' + env['BF_OPENGL_INC']
@@ -25,7 +25,9 @@ if env['WITH_BF_OPENEXR']:
if not env['WITH_BF_SDL']:
defs.append('DISABLE_SDL')
-if not env['WITH_BF_PYTHON']:
- defs.append('DISABLE_PYTHON')
+if env['WITH_BF_PYTHON']:
+ incs += ' ../blender/python'
+else:
+ defs.append('DISABLE_PYTHON')
env.BlenderLib ( libname = 'blender_creator', sources = Split(sources), includes = Split(incs), defines = defs, libtype='core', priority = 1 )
diff --git a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
index 2d91bbcd7c1..4410763ec53 100644
--- a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
+++ b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
@@ -656,6 +656,7 @@ extern "C" void StartKetsjiShellSimulation(struct ScrArea *area,
initGameKeys();
initPythonConstraintBinding();
initMathutils();
+ initVideoTexture();
if (sceneconverter)
{
diff --git a/source/gameengine/GameLogic/SConscript b/source/gameengine/GameLogic/SConscript
index fa5a3123215..b4e2159dc22 100644
--- a/source/gameengine/GameLogic/SConscript
+++ b/source/gameengine/GameLogic/SConscript
@@ -8,11 +8,13 @@ incs += ' #/source/gameengine/Expressions #/intern/moto/include'
incs += ' #/source/gameengine/Rasterizer'
incs += ' ' + env['BF_PYTHON_INC']
-incs += ' ' + env['BF_SDL_INC']
+
defs = ''
-if not env['WITH_BF_SDL']:
+if env['WITH_BF_SDL']:
+ incs += ' ' + env['BF_SDL_INC']
+else:
defs += ' DISABLE_SDL'
env.BlenderLib ( 'bf_logic', sources, Split(incs), Split(defs), libtype=['game','player'], priority=[30, 110] )
diff --git a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
index a9196a1a5e3..aa5e5835cdc 100644
--- a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
+++ b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
@@ -686,6 +686,7 @@ bool GPG_Application::startEngine(void)
initGameKeys();
initPythonConstraintBinding();
initMathutils();
+ initVideoTexture();
// Set the GameLogic.globalDict from marshal'd data, so we can
// load new blend files and keep data in GameLogic.globalDict
diff --git a/source/gameengine/Ketsji/SConscript b/source/gameengine/Ketsji/SConscript
index 02e7aed82a5..f5c620b583f 100644
--- a/source/gameengine/Ketsji/SConscript
+++ b/source/gameengine/Ketsji/SConscript
@@ -41,8 +41,10 @@ if env['OURPLATFORM'] == 'win32-vc':
incs += ' ' + env['BF_SOLID_INC']
incs += ' ' + env['BF_PYTHON_INC']
-incs += ' ' + env['BF_SDL_INC']
incs += ' ' + env['BF_BULLET_INC']
incs += ' ' + env['BF_OPENGL_INC']
+if env['WITH_BF_SDL']:
+ incs += ' ' + env['BF_SDL_INC']
+
env.BlenderLib ( 'bf_ketsji', sources, Split(incs), [], libtype=['game','player'], priority=[25, 72], compileflags = cflags )
diff --git a/source/gameengine/VideoTexture/ImageRender.cpp b/source/gameengine/VideoTexture/ImageRender.cpp
index 2f2d9debd48..a8f7871fa21 100644
--- a/source/gameengine/VideoTexture/ImageRender.cpp
+++ b/source/gameengine/VideoTexture/ImageRender.cpp
@@ -38,6 +38,11 @@ http://www.gnu.org/copyleft/lesser.txt.
#include "BlendType.h"
#include "Exception.h"
+ExceptionID SceneInvalid, CameraInvalid;
+ExpDesc SceneInvalidDesc (SceneInvalid, "Scene object is invalid");
+ExpDesc CameraInvalidDesc (CameraInvalid, "Camera object is invalid");
+
+#if 0 // not yet supported
// constructor
ImageRender::ImageRender (KX_Scene * scene, KX_Camera * camera) : m_scene(scene),
@@ -124,10 +129,6 @@ BlendType sceneType ("KX_Scene");
BlendType cameraType ("KX_Camera");
-ExceptionID SceneInvalid, CameraInvalid;
-ExpDesc SceneInvalidDesc (SceneInvalid, "Scene object is invalid");
-ExpDesc CameraInvalidDesc (CameraInvalid, "Camera object is invalid");
-
// object initialization
static int ImageRender_init (PyObject * pySelf, PyObject * args, PyObject * kwds)
{
@@ -263,3 +264,4 @@ PyTypeObject ImageRenderType =
};
+#endif // #if 0
diff --git a/source/gameengine/VideoTexture/Texture.cpp b/source/gameengine/VideoTexture/Texture.cpp
index 88a26e3c088..66c67023e38 100644
--- a/source/gameengine/VideoTexture/Texture.cpp
+++ b/source/gameengine/VideoTexture/Texture.cpp
@@ -112,11 +112,20 @@ short getMaterialID (PyObject * obj, char * name)
// get material
RAS_IPolyMaterial * mat = getMaterial(obj, matID);
// if material is not available, report that no material was found
- if (mat == NULL) break;
- // if material name matches
- if (strcmp(mat->GetMaterialName().ReadPtr(), name) == 0)
- // matID is found
- return matID;
+ if (mat == NULL)
+ break;
+ // name is a material name if it starts with MA and a UV texture name if it starts with IM
+ if (name[0] == 'I' && name[1] == 'M')
+ {
+ // if texture name matches
+ if (strcmp(mat->GetTextureName().ReadPtr(), name) == 0)
+ return matID;
+ } else
+ {
+ // if material name matches
+ if (strcmp(mat->GetMaterialName().ReadPtr(), name) == 0)
+ return matID;
+ }
}
// material was not found
return -1;
diff --git a/source/gameengine/VideoTexture/VideoBase.cpp b/source/gameengine/VideoTexture/VideoBase.cpp
index 038a04a55a8..10117c3af9e 100644
--- a/source/gameengine/VideoTexture/VideoBase.cpp
+++ b/source/gameengine/VideoTexture/VideoBase.cpp
@@ -54,22 +54,34 @@ void VideoBase::process (BYTE * sample)
if (m_image != NULL && !m_avail)
{
// filters used
- FilterRGB24 filtRGB;
- FilterYV12 filtYUV;
// convert video format to image
switch (m_format)
{
+ case RGBA32:
+ {
+ FilterRGBA32 filtRGBA;
+ // use filter object for format to convert image
+ filterImage(filtRGBA, sample, m_orgSize);
+ // finish
+ break;
+ }
case RGB24:
- // use filter object for format to convert image
- filterImage(filtRGB, sample, m_orgSize);
- // finish
- break;
+ {
+ FilterRGB24 filtRGB;
+ // use filter object for format to convert image
+ filterImage(filtRGB, sample, m_orgSize);
+ // finish
+ break;
+ }
case YV12:
- // use filter object for format to convert image
- filtYUV.setBuffs(sample, m_orgSize);
- filterImage(filtYUV, sample, m_orgSize);
- // finish
- break;
+ {
+ // use filter object for format to convert image
+ FilterYV12 filtYUV;
+ filtYUV.setBuffs(sample, m_orgSize);
+ filterImage(filtYUV, sample, m_orgSize);
+ // finish
+ break;
+ }
}
}
}
diff --git a/source/gameengine/VideoTexture/VideoBase.h b/source/gameengine/VideoTexture/VideoBase.h
index 5bb635e1f19..15ecb7a78f4 100644
--- a/source/gameengine/VideoTexture/VideoBase.h
+++ b/source/gameengine/VideoTexture/VideoBase.h
@@ -39,7 +39,7 @@ const int SourceStopped = 3;
// video source formats
-enum VideoFormat { None, RGB24, YV12 };
+enum VideoFormat { None, RGB24, YV12, RGBA32 };
/// base class for video source
diff --git a/source/gameengine/VideoTexture/VideoFFmpeg.cpp b/source/gameengine/VideoTexture/VideoFFmpeg.cpp
index dfbd61daee8..02798c7e596 100644
--- a/source/gameengine/VideoTexture/VideoFFmpeg.cpp
+++ b/source/gameengine/VideoTexture/VideoFFmpeg.cpp
@@ -20,6 +20,8 @@ http://www.gnu.org/copyleft/lesser.txt.
-----------------------------------------------------------------------------
*/
+#ifdef WITH_FFMPEG
+
// INT64_C fix for some linux machines (C99ism)
#define __STDC_CONSTANT_MACROS
#include
@@ -33,7 +35,6 @@ http://www.gnu.org/copyleft/lesser.txt.
#include "Exception.h"
#include "VideoFFmpeg.h"
-#ifdef WITH_FFMPEG
// default framerate
const double defFrameRate = 25.0;
@@ -53,7 +54,7 @@ VideoFFmpeg::VideoFFmpeg (HRESULT * hRslt) : VideoBase(),
m_codec(NULL), m_formatCtx(NULL), m_codecCtx(NULL),
m_frame(NULL), m_frameDeinterlaced(NULL), m_frameRGB(NULL), m_imgConvertCtx(NULL),
m_deinterlace(false), m_preseek(0), m_videoStream(-1), m_baseFrameRate(25.0),
-m_lastFrame(-1), m_curPosition(-1), m_startTime(0),
+m_lastFrame(-1), m_eof(false), m_curPosition(-1), m_startTime(0),
m_captWidth(0), m_captHeight(0), m_captRate(0.f), m_isImage(false)
{
// set video format
@@ -190,7 +191,6 @@ int VideoFFmpeg::openStream(const char *filename, AVInputFormat *inputFormat, AV
m_frameDeinterlaced = avcodec_alloc_frame();
m_frameRGB = avcodec_alloc_frame();
-
// allocate buffer if deinterlacing is required
avpicture_fill((AVPicture*)m_frameDeinterlaced,
(uint8_t*)MEM_callocN(avpicture_get_size(
@@ -199,24 +199,51 @@ int VideoFFmpeg::openStream(const char *filename, AVInputFormat *inputFormat, AV
"ffmpeg deinterlace"),
m_codecCtx->pix_fmt, m_codecCtx->width, m_codecCtx->height);
- // allocate buffer to store final decoded frame
- avpicture_fill((AVPicture*)m_frameRGB,
- (uint8_t*)MEM_callocN(avpicture_get_size(
- PIX_FMT_RGB24,
- m_codecCtx->width, m_codecCtx->height),
- "ffmpeg rgb"),
- PIX_FMT_RGB24, m_codecCtx->width, m_codecCtx->height);
- // allocate sws context
- m_imgConvertCtx = sws_getContext(
- m_codecCtx->width,
- m_codecCtx->height,
- m_codecCtx->pix_fmt,
- m_codecCtx->width,
- m_codecCtx->height,
- PIX_FMT_RGB24,
- SWS_FAST_BILINEAR,
- NULL, NULL, NULL);
-
+ // check if the pixel format supports Alpha
+ if (m_codecCtx->pix_fmt == PIX_FMT_RGB32 ||
+ m_codecCtx->pix_fmt == PIX_FMT_BGR32 ||
+ m_codecCtx->pix_fmt == PIX_FMT_RGB32_1 ||
+ m_codecCtx->pix_fmt == PIX_FMT_BGR32_1)
+ {
+ // allocate buffer to store final decoded frame
+ m_format = RGBA32;
+ avpicture_fill((AVPicture*)m_frameRGB,
+ (uint8_t*)MEM_callocN(avpicture_get_size(
+ PIX_FMT_RGBA,
+ m_codecCtx->width, m_codecCtx->height),
+ "ffmpeg rgba"),
+ PIX_FMT_RGBA, m_codecCtx->width, m_codecCtx->height);
+ // allocate sws context
+ m_imgConvertCtx = sws_getContext(
+ m_codecCtx->width,
+ m_codecCtx->height,
+ m_codecCtx->pix_fmt,
+ m_codecCtx->width,
+ m_codecCtx->height,
+ PIX_FMT_RGBA,
+ SWS_FAST_BILINEAR,
+ NULL, NULL, NULL);
+ } else
+ {
+ // allocate buffer to store final decoded frame
+ m_format = RGB24;
+ avpicture_fill((AVPicture*)m_frameRGB,
+ (uint8_t*)MEM_callocN(avpicture_get_size(
+ PIX_FMT_RGB24,
+ m_codecCtx->width, m_codecCtx->height),
+ "ffmpeg rgb"),
+ PIX_FMT_RGB24, m_codecCtx->width, m_codecCtx->height);
+ // allocate sws context
+ m_imgConvertCtx = sws_getContext(
+ m_codecCtx->width,
+ m_codecCtx->height,
+ m_codecCtx->pix_fmt,
+ m_codecCtx->width,
+ m_codecCtx->height,
+ PIX_FMT_RGB24,
+ SWS_FAST_BILINEAR,
+ NULL, NULL, NULL);
+ }
if (!m_imgConvertCtx) {
avcodec_close(m_codecCtx);
av_close_input_file(m_formatCtx);
@@ -274,6 +301,7 @@ void VideoFFmpeg::openFile (char * filename)
if (m_imageName.Ptr() != filename)
m_imageName = filename;
m_preseek = 0;
+ m_avail = false;
play();
}
@@ -479,7 +507,7 @@ void VideoFFmpeg::setPositions (void)
// set video start time
m_startTime = PIL_check_seconds_timer();
// if file is played and actual position is before end position
- if (m_isFile && m_lastFrame >= 0 && m_lastFrame < m_range[1] * actFrameRate())
+ if (m_isFile && !m_eof && m_lastFrame >= 0 && m_lastFrame < m_range[1] * actFrameRate())
// continue from actual position
m_startTime -= double(m_lastFrame) / actFrameRate();
else
@@ -518,7 +546,8 @@ bool VideoFFmpeg::grabFrame(long position)
}
}
// if the position is not in preseek, do a direct jump
- if (position != m_curPosition + 1) {
+ if (position != m_curPosition + 1)
+ {
double timeBase = av_q2d(m_formatCtx->streams[m_videoStream]->time_base);
long long pos = (long long)
((long long) (position - m_preseek) * AV_TIME_BASE / m_baseFrameRate);
@@ -530,10 +559,16 @@ bool VideoFFmpeg::grabFrame(long position)
if (startTs != AV_NOPTS_VALUE)
pos += (long long)(startTs * AV_TIME_BASE * timeBase);
- av_seek_frame(m_formatCtx, -1, pos, AVSEEK_FLAG_BACKWARD);
- // current position is now lost, guess a value.
- // It's not important because it will be set at this end of this function
- m_curPosition = position - m_preseek - 1;
+ if (position <= m_curPosition || !m_eof)
+ {
+ // no need to seek past the end of the file
+ if (av_seek_frame(m_formatCtx, -1, pos, AVSEEK_FLAG_BACKWARD) >= 0)
+ {
+ // current position is now lost, guess a value.
+ // It's not important because it will be set at this end of this function
+ m_curPosition = position - m_preseek - 1;
+ }
+ }
// this is the timestamp of the frame we're looking for
targetTs = (long long)(((double) position) / m_baseFrameRate / timeBase);
if (startTs != AV_NOPTS_VALUE)
@@ -597,6 +632,7 @@ bool VideoFFmpeg::grabFrame(long position)
}
av_free_packet(&packet);
}
+ m_eof = !frameLoaded;
if (frameLoaded)
m_curPosition = position;
return frameLoaded;
diff --git a/source/gameengine/VideoTexture/VideoFFmpeg.h b/source/gameengine/VideoTexture/VideoFFmpeg.h
index db2cb293d8b..e60f1727aab 100644
--- a/source/gameengine/VideoTexture/VideoFFmpeg.h
+++ b/source/gameengine/VideoTexture/VideoFFmpeg.h
@@ -117,6 +117,9 @@ protected:
/// last displayed frame
long m_lastFrame;
+ /// end of file reached
+ bool m_eof;
+
/// current file pointer position in file expressed in frame number
long m_curPosition;
diff --git a/tools/Blender.py b/tools/Blender.py
index 857d5c4d780..3b5e33eda59 100644
--- a/tools/Blender.py
+++ b/tools/Blender.py
@@ -52,443 +52,454 @@ possible_types = ['core'] # can be set in ie. SConstruct
libs = {}
def getresources():
- return resources
+ return resources
def init_lib_dict():
- for pt in possible_types:
- libs[pt] = {}
+ for pt in possible_types:
+ libs[pt] = {}
# helper func for add_lib_to_dict
def internal_lib_to_dict(dict = None, libtype = None, libname = None, priority = 100):
- if not libname in dict[libtype]:
- done = None
- while not done:
- if dict[libtype].has_key(priority):
- priority = priority + 1
- else:
- done = True
- dict[libtype][priority] = libname
+ if not libname in dict[libtype]:
+ done = None
+ while not done:
+ if dict[libtype].has_key(priority):
+ priority = priority + 1
+ else:
+ done = True
+ dict[libtype][priority] = libname
# libtype and priority can both be lists, for defining lib in multiple places
def add_lib_to_dict(env, dict = None, libtype = None, libname = None, priority = 100):
- if not dict or not libtype or not libname:
- print "Passed wrong arg"
- env.Exit()
+ if not dict or not libtype or not libname:
+ print "Passed wrong arg"
+ env.Exit()
- if type(libtype) is str and type(priority) is int:
- internal_lib_to_dict(dict, libtype, libname, priority)
- elif type(libtype) is list and type(priority) is list:
- if len(libtype)==len(priority):
- for lt, p in zip(libtype, priority):
- internal_lib_to_dict(dict, lt, libname, p)
- else:
- print "libtype and priority lists are unequal in length"
- env.Exit()
- else:
- print "Wrong type combinations for libtype and priority. Only str and int or list and list"
- env.Exit()
+ if type(libtype) is str and type(priority) is int:
+ internal_lib_to_dict(dict, libtype, libname, priority)
+ elif type(libtype) is list and type(priority) is list:
+ if len(libtype)==len(priority):
+ for lt, p in zip(libtype, priority):
+ internal_lib_to_dict(dict, lt, libname, p)
+ else:
+ print "libtype and priority lists are unequal in length"
+ env.Exit()
+ else:
+ print "Wrong type combinations for libtype and priority. Only str and int or list and list"
+ env.Exit()
def create_blender_liblist(lenv = None, libtype = None):
- if not lenv or not libtype:
- print "missing arg"
+ if not lenv or not libtype:
+ print "missing arg"
- lst = []
- if libtype in possible_types:
- curlib = libs[libtype]
- sortlist = curlib.keys()
- sortlist.sort()
- for sk in sortlist:
- v = curlib[sk]
- lst.append('#' + root_build_dir + 'lib/'+lenv['LIBPREFIX'] + v + lenv['LIBSUFFIX'])
+ lst = []
+ if libtype in possible_types:
+ curlib = libs[libtype]
+ sortlist = curlib.keys()
+ sortlist.sort()
+ for sk in sortlist:
+ v = curlib[sk]
+ target = root_build_dir + 'lib/'+lenv['LIBPREFIX'] + v + lenv['LIBSUFFIX']
+ if not (root_build_dir[0]==os.sep or root_build_dir[1]==':'):
+ target = '#'+target
+ lst.append(target)
- return lst
+ return lst
## TODO: static linking
def setup_staticlibs(lenv):
- statlibs = [
- #here libs for static linking
- ]
- libincs = [
- '/usr/lib',
- lenv['BF_OPENGL_LIBPATH'],
- lenv['BF_JPEG_LIBPATH'],
- lenv['BF_PNG_LIBPATH'],
- lenv['BF_ZLIB_LIBPATH'],
- lenv['BF_ICONV_LIBPATH']
- ]
+ statlibs = [
+ #here libs for static linking
+ ]
+ libincs = [
+ '/usr/lib',
+ lenv['BF_OPENGL_LIBPATH'],
+ lenv['BF_JPEG_LIBPATH'],
+ lenv['BF_PNG_LIBPATH'],
+ lenv['BF_ZLIB_LIBPATH'],
+ lenv['BF_ICONV_LIBPATH']
+ ]
- if lenv['WITH_BF_PYTHON']:
- libincs += Split(lenv['BF_PYTHON_LIBPATH'])
- if lenv['WITH_BF_SDL']:
- libincs += Split(lenv['BF_SDL_LIBPATH'])
- if lenv['WITH_BF_FFMPEG']:
- libincs += Split(lenv['BF_FFMPEG_LIBPATH'])
- if lenv['WITH_BF_STATICCXX']:
- statlibs += Split(lenv['BF_CXX_LIB_STATIC'])
- if lenv['WITH_BF_OPENEXR']:
- libincs += Split(lenv['BF_OPENEXR_LIBPATH'])
- if lenv['WITH_BF_STATICOPENEXR']:
- statlibs += Split(lenv['BF_OPENEXR_LIB_STATIC'])
- if lenv['WITH_BF_INTERNATIONAL']:
- libincs += Split(lenv['BF_GETTEXT_LIBPATH'])
- libincs += Split(lenv['BF_FREETYPE_LIBPATH'])
- if lenv['WITH_BF_OPENAL']:
- libincs += Split(lenv['BF_OPENAL_LIBPATH'])
- if lenv['WITH_BF_STATICOPENAL']:
- statlibs += Split(lenv['BF_OPENAL_LIB_STATIC'])
- if lenv['WITH_BF_STATICOPENGL']:
- statlibs += Split(lenv['BF_OPENGL_LIB_STATIC'])
+ if lenv['WITH_BF_PYTHON']:
+ libincs += Split(lenv['BF_PYTHON_LIBPATH'])
+ if lenv['WITH_BF_SDL']:
+ libincs += Split(lenv['BF_SDL_LIBPATH'])
+ if lenv['WITH_BF_FFMPEG']:
+ libincs += Split(lenv['BF_FFMPEG_LIBPATH'])
+ if lenv['WITH_BF_STATICCXX']:
+ statlibs += Split(lenv['BF_CXX_LIB_STATIC'])
+ if lenv['WITH_BF_OPENEXR']:
+ libincs += Split(lenv['BF_OPENEXR_LIBPATH'])
+ if lenv['WITH_BF_STATICOPENEXR']:
+ statlibs += Split(lenv['BF_OPENEXR_LIB_STATIC'])
+ if lenv['WITH_BF_INTERNATIONAL']:
+ libincs += Split(lenv['BF_GETTEXT_LIBPATH'])
+ libincs += Split(lenv['BF_FREETYPE_LIBPATH'])
+ if lenv['WITH_BF_OPENAL']:
+ libincs += Split(lenv['BF_OPENAL_LIBPATH'])
+ if lenv['WITH_BF_STATICOPENAL']:
+ statlibs += Split(lenv['BF_OPENAL_LIB_STATIC'])
+ if lenv['WITH_BF_STATICOPENGL']:
+ statlibs += Split(lenv['BF_OPENGL_LIB_STATIC'])
- if lenv['WITH_BF_PYTHON'] and lenv['WITH_BF_STATICPYTHON']:
- statlibs += Split(lenv['BF_PYTHON_LIB_STATIC'])
+ if lenv['WITH_BF_PYTHON'] and lenv['WITH_BF_STATICPYTHON']:
+ statlibs += Split(lenv['BF_PYTHON_LIB_STATIC'])
- if lenv['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross'):
- libincs += Split(lenv['BF_PTHREADS_LIBPATH'])
+ if lenv['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross'):
+ libincs += Split(lenv['BF_PTHREADS_LIBPATH'])
- return statlibs, libincs
+ return statlibs, libincs
def setup_syslibs(lenv):
- syslibs = [
-
- lenv['BF_JPEG_LIB'],
- lenv['BF_PNG_LIB'],
- lenv['BF_ZLIB_LIB']
- ]
+ syslibs = [
+
+ lenv['BF_JPEG_LIB'],
+ lenv['BF_PNG_LIB'],
+ lenv['BF_ZLIB_LIB']
+ ]
- if lenv['WITH_BF_PYTHON'] and not lenv['WITH_BF_STATICPYTHON']:
- if lenv['BF_DEBUG'] and lenv['OURPLATFORM'] in ('win32-vc'):
- syslibs.append(lenv['BF_PYTHON_LIB']+'_d')
- else:
- syslibs.append(lenv['BF_PYTHON_LIB'])
- if lenv['WITH_BF_INTERNATIONAL']:
- syslibs += Split(lenv['BF_FREETYPE_LIB'])
- syslibs += Split(lenv['BF_GETTEXT_LIB'])
- if lenv['WITH_BF_OPENAL']:
- if not lenv['WITH_BF_STATICOPENAL']:
- syslibs += Split(lenv['BF_OPENAL_LIB'])
- if lenv['WITH_BF_OPENMP'] and lenv['CC'] != 'icc':
- if lenv['CC'] == 'cl.exe':
- syslibs += ['vcomp']
- else:
- syslibs += ['gomp']
- if lenv['WITH_BF_ICONV']:
- syslibs += Split(lenv['BF_ICONV_LIB'])
- if lenv['WITH_BF_OPENEXR']:
- if not lenv['WITH_BF_STATICOPENEXR']:
- syslibs += Split(lenv['BF_OPENEXR_LIB'])
- if lenv['WITH_BF_FFMPEG']:
- syslibs += Split(lenv['BF_FFMPEG_LIB'])
- if lenv['WITH_BF_OGG']:
- syslibs += Split(lenv['BF_OGG_LIB'])
- if lenv['WITH_BF_SDL']:
- syslibs += Split(lenv['BF_SDL_LIB'])
- if not lenv['WITH_BF_STATICOPENGL']:
- syslibs += Split(lenv['BF_OPENGL_LIB'])
- if lenv['OURPLATFORM'] in ('win32-vc', 'win32-mingw','linuxcross'):
- syslibs += Split(lenv['BF_PTHREADS_LIB'])
+ if lenv['WITH_BF_PYTHON'] and not lenv['WITH_BF_STATICPYTHON']:
+ if lenv['BF_DEBUG'] and lenv['OURPLATFORM'] in ('win32-vc'):
+ syslibs.append(lenv['BF_PYTHON_LIB']+'_d')
+ else:
+ syslibs.append(lenv['BF_PYTHON_LIB'])
+ if lenv['WITH_BF_INTERNATIONAL']:
+ syslibs += Split(lenv['BF_FREETYPE_LIB'])
+ syslibs += Split(lenv['BF_GETTEXT_LIB'])
+ if lenv['WITH_BF_OPENAL']:
+ if not lenv['WITH_BF_STATICOPENAL']:
+ syslibs += Split(lenv['BF_OPENAL_LIB'])
+ if lenv['WITH_BF_OPENMP'] and lenv['CC'] != 'icc':
+ if lenv['CC'] == 'cl.exe':
+ syslibs += ['vcomp']
+ else:
+ syslibs += ['gomp']
+ if lenv['WITH_BF_ICONV']:
+ syslibs += Split(lenv['BF_ICONV_LIB'])
+ if lenv['WITH_BF_OPENEXR']:
+ if not lenv['WITH_BF_STATICOPENEXR']:
+ syslibs += Split(lenv['BF_OPENEXR_LIB'])
+ if lenv['WITH_BF_FFMPEG']:
+ syslibs += Split(lenv['BF_FFMPEG_LIB'])
+ if lenv['WITH_BF_OGG']:
+ syslibs += Split(lenv['BF_OGG_LIB'])
+ if lenv['WITH_BF_SDL']:
+ syslibs += Split(lenv['BF_SDL_LIB'])
+ if not lenv['WITH_BF_STATICOPENGL']:
+ syslibs += Split(lenv['BF_OPENGL_LIB'])
+ if lenv['OURPLATFORM'] in ('win32-vc', 'win32-mingw','linuxcross'):
+ syslibs += Split(lenv['BF_PTHREADS_LIB'])
- syslibs += Split(lenv['LLIBS'])
+ syslibs += Split(lenv['LLIBS'])
- return syslibs
+ return syslibs
def propose_priorities():
- print bc.OKBLUE+"Priorities:"+bc.ENDC
- for t in possible_types:
- print bc.OKGREEN+"\t"+t+bc.ENDC
- new_priority = 0
- curlib = libs[t]
- sortlist = curlib.keys()
- sortlist.sort()
+ print bc.OKBLUE+"Priorities:"+bc.ENDC
+ for t in possible_types:
+ print bc.OKGREEN+"\t"+t+bc.ENDC
+ new_priority = 0
+ curlib = libs[t]
+ sortlist = curlib.keys()
+ sortlist.sort()
- for sk in sortlist:
- v = curlib[sk]
- #for p,v in sorted(libs[t].iteritems()):
- print "\t\t",new_priority, v
- new_priority += 5
+ for sk in sortlist:
+ v = curlib[sk]
+ #for p,v in sorted(libs[t].iteritems()):
+ print "\t\t",new_priority, v
+ new_priority += 5
## TODO: see if this can be made in an emitter
def buildinfo(lenv, build_type):
- """
- Generate a buildinfo object
- """
- build_date = time.strftime ("%Y-%m-%d")
- build_time = time.strftime ("%H:%M:%S")
- build_rev = os.popen('svnversion').read()[:-1] # remove \n
+ """
+ Generate a buildinfo object
+ """
+ build_date = time.strftime ("%Y-%m-%d")
+ build_time = time.strftime ("%H:%M:%S")
+ build_rev = os.popen('svnversion').read()[:-1] # remove \n
- obj = []
- if lenv['BF_BUILDINFO']:
- if sys.platform=='win32':
- build_info_file = open("source/creator/winbuildinfo.h", 'w')
- build_info_file.write("char *build_date=\"%s\";\n"%build_date)
- build_info_file.write("char *build_time=\"%s\";\n"%build_time)
- build_info_file.write("char *build_rev=\"%s\";\n"%build_rev)
- build_info_file.write("char *build_platform=\"win32\";\n")
- build_info_file.write("char *build_type=\"dynamic\";\n")
- build_info_file.close()
- lenv.Append (CPPDEFINES = ['NAN_BUILDINFO', 'BUILD_DATE'])
- else:
- lenv.Append (CPPDEFINES = ['BUILD_TIME=\'"%s"\''%(build_time),
- 'BUILD_DATE=\'"%s"\''%(build_date),
- 'BUILD_TYPE=\'"dynamic"\'',
- 'BUILD_REV=\'"%s"\''%(build_rev),
- 'NAN_BUILDINFO',
- 'BUILD_PLATFORM=\'"%s"\''%(sys.platform)])
- obj = [lenv.Object (root_build_dir+'source/creator/%s_buildinfo'%build_type,
- [root_build_dir+'source/creator/buildinfo.c'])]
- return obj
+ obj = []
+ if lenv['BF_BUILDINFO']:
+ if sys.platform=='win32':
+ build_info_file = open("source/creator/winbuildinfo.h", 'w')
+ build_info_file.write("char *build_date=\"%s\";\n"%build_date)
+ build_info_file.write("char *build_time=\"%s\";\n"%build_time)
+ build_info_file.write("char *build_rev=\"%s\";\n"%build_rev)
+ build_info_file.write("char *build_platform=\"win32\";\n")
+ build_info_file.write("char *build_type=\"dynamic\";\n")
+ build_info_file.close()
+ lenv.Append (CPPDEFINES = ['NAN_BUILDINFO', 'BUILD_DATE'])
+ else:
+ lenv.Append (CPPDEFINES = ['BUILD_TIME=\'"%s"\''%(build_time),
+ 'BUILD_DATE=\'"%s"\''%(build_date),
+ 'BUILD_TYPE=\'"dynamic"\'',
+ 'BUILD_REV=\'"%s"\''%(build_rev),
+ 'NAN_BUILDINFO',
+ 'BUILD_PLATFORM=\'"%s"\''%(sys.platform)])
+ obj = [lenv.Object (root_build_dir+'source/creator/%s_buildinfo'%build_type,
+ [root_build_dir+'source/creator/buildinfo.c'])]
+ return obj
##### END LIB STUFF ############
##### ACTION STUFF #############
def my_compile_print(target, source, env):
- a = '%s' % (source[0])
- d, f = os.path.split(a)
- return bc.OKBLUE+"Compiling"+bc.ENDC +" ==> '"+bc.OKGREEN+"%s" % (f) + "'"+bc.ENDC
+ a = '%s' % (source[0])
+ d, f = os.path.split(a)
+ return bc.OKBLUE+"Compiling"+bc.ENDC +" ==> '"+bc.OKGREEN+"%s" % (f) + "'"+bc.ENDC
def my_moc_print(target, source, env):
- a = '%s' % (source[0])
- d, f = os.path.split(a)
- return bc.OKBLUE+"Creating MOC"+bc.ENDC+ " ==> '"+bc.OKGREEN+"%s" %(f) + "'"+bc.ENDC
+ a = '%s' % (source[0])
+ d, f = os.path.split(a)
+ return bc.OKBLUE+"Creating MOC"+bc.ENDC+ " ==> '"+bc.OKGREEN+"%s" %(f) + "'"+bc.ENDC
def my_linking_print(target, source, env):
- t = '%s' % (target[0])
- d, f = os.path.split(t)
- return bc.OKBLUE+"Linking library"+bc.ENDC +" ==> '"+bc.OKGREEN+"%s" % (f) + "'"+bc.ENDC
+ t = '%s' % (target[0])
+ d, f = os.path.split(t)
+ return bc.OKBLUE+"Linking library"+bc.ENDC +" ==> '"+bc.OKGREEN+"%s" % (f) + "'"+bc.ENDC
def my_program_print(target, source, env):
- t = '%s' % (target[0])
- d, f = os.path.split(t)
- return bc.OKBLUE+"Linking program"+bc.ENDC +" ==> '"+bc.OKGREEN+"%s" % (f) + "'"+bc.ENDC
+ t = '%s' % (target[0])
+ d, f = os.path.split(t)
+ return bc.OKBLUE+"Linking program"+bc.ENDC +" ==> '"+bc.OKGREEN+"%s" % (f) + "'"+bc.ENDC
def msvc_hack(env):
- static_lib = SCons.Tool.createStaticLibBuilder(env)
- program = SCons.Tool.createProgBuilder(env)
-
- env['BUILDERS']['Library'] = static_lib
- env['BUILDERS']['StaticLibrary'] = static_lib
- env['BUILDERS']['Program'] = program
-
+ static_lib = SCons.Tool.createStaticLibBuilder(env)
+ program = SCons.Tool.createProgBuilder(env)
+
+ env['BUILDERS']['Library'] = static_lib
+ env['BUILDERS']['StaticLibrary'] = static_lib
+ env['BUILDERS']['Program'] = program
+
def set_quiet_output(env):
- mycaction = Action("$CCCOM", strfunction=my_compile_print)
- myshcaction = Action("$SHCCCOM", strfunction=my_compile_print)
- mycppaction = Action("$CXXCOM", strfunction=my_compile_print)
- myshcppaction = Action("$SHCXXCOM", strfunction=my_compile_print)
- mylibaction = Action("$ARCOM", strfunction=my_linking_print)
- mylinkaction = Action("$LINKCOM", strfunction=my_program_print)
+ mycaction = Action("$CCCOM", strfunction=my_compile_print)
+ myshcaction = Action("$SHCCCOM", strfunction=my_compile_print)
+ mycppaction = Action("$CXXCOM", strfunction=my_compile_print)
+ myshcppaction = Action("$SHCXXCOM", strfunction=my_compile_print)
+ mylibaction = Action("$ARCOM", strfunction=my_linking_print)
+ mylinkaction = Action("$LINKCOM", strfunction=my_program_print)
- static_ob, shared_ob = SCons.Tool.createObjBuilders(env)
- static_ob.add_action('.c', mycaction)
- static_ob.add_action('.cpp', mycppaction)
- shared_ob.add_action('.c', myshcaction)
- shared_ob.add_action('.cpp', myshcppaction)
+ static_ob, shared_ob = SCons.Tool.createObjBuilders(env)
+ static_ob.add_action('.c', mycaction)
+ static_ob.add_action('.cpp', mycppaction)
+ shared_ob.add_action('.c', myshcaction)
+ shared_ob.add_action('.cpp', myshcppaction)
- static_lib = SCons.Builder.Builder(action = mylibaction,
- emitter = '$LIBEMITTER',
- prefix = '$LIBPREFIX',
- suffix = '$LIBSUFFIX',
- src_suffix = '$OBJSUFFIX',
- src_builder = 'StaticObject')
+ static_lib = SCons.Builder.Builder(action = mylibaction,
+ emitter = '$LIBEMITTER',
+ prefix = '$LIBPREFIX',
+ suffix = '$LIBSUFFIX',
+ src_suffix = '$OBJSUFFIX',
+ src_builder = 'StaticObject')
- program = SCons.Builder.Builder(action = mylinkaction,
- emitter = '$PROGEMITTER',
- prefix = '$PROGPREFIX',
- suffix = '$PROGSUFFIX',
- src_suffix = '$OBJSUFFIX',
- src_builder = 'Object',
- target_scanner = SCons.Defaults.ProgScan)
+ program = SCons.Builder.Builder(action = mylinkaction,
+ emitter = '$PROGEMITTER',
+ prefix = '$PROGPREFIX',
+ suffix = '$PROGSUFFIX',
+ src_suffix = '$OBJSUFFIX',
+ src_builder = 'Object',
+ target_scanner = SCons.Defaults.ProgScan)
- env['BUILDERS']['Object'] = static_ob
- env['BUILDERS']['StaticObject'] = static_ob
- env['BUILDERS']['StaticLibrary'] = static_lib
- env['BUILDERS']['Library'] = static_lib
- env['BUILDERS']['Program'] = program
+ env['BUILDERS']['Object'] = static_ob
+ env['BUILDERS']['StaticObject'] = static_ob
+ env['BUILDERS']['StaticLibrary'] = static_lib
+ env['BUILDERS']['Library'] = static_lib
+ env['BUILDERS']['Program'] = program
def my_appit_print(target, source, env):
- a = '%s' % (target[0])
- d, f = os.path.split(a)
- return "making bundle for " + f
+ a = '%s' % (target[0])
+ d, f = os.path.split(a)
+ return "making bundle for " + f
def AppIt(target=None, source=None, env=None):
- import shutil
- import commands
- import os.path
-
-
- a = '%s' % (target[0])
- builddir, b = os.path.split(a)
+ import shutil
+ import commands
+ import os.path
+
+
+ a = '%s' % (target[0])
+ builddir, b = os.path.split(a)
- bldroot = env.Dir('.').abspath
- binary = env['BINARYKIND']
-
- if b=='verse':
- print bc.OKBLUE+"no bundle for verse"+bc.ENDC
- return 0
-
-
- sourcedir = bldroot + '/source/darwin/%s.app'%binary
- sourceinfo = bldroot + "/source/darwin/%s.app/Contents/Info.plist"%binary
- targetinfo = builddir +'/' + "%s.app/Contents/Info.plist"%binary
- cmd = builddir + '/' +'%s.app'%binary
-
- if os.path.isdir(cmd):
- shutil.rmtree(cmd)
- shutil.copytree(sourcedir, cmd)
- cmd = "cat %s | sed s/VERSION/`cat release/VERSION`/ | sed s/DATE/`date +'%%Y-%%b-%%d'`/ > %s"%(sourceinfo,targetinfo)
- commands.getoutput(cmd)
- cmd = 'cp %s/%s %s/%s.app/Contents/MacOS/%s'%(builddir, binary,builddir, binary, binary)
- commands.getoutput(cmd)
- cmd = 'mkdir %s/%s.app/Contents/MacOS/.blender/'%(builddir, binary)
- print cmd
- commands.getoutput(cmd)
- cmd = builddir + '/%s.app/Contents/MacOS/.blender'%binary
- shutil.copy(bldroot + '/bin/.blender/.bfont.ttf', cmd)
- shutil.copy(bldroot + '/bin/.blender/.Blanguages', cmd)
- cmd = 'cp -R %s/bin/.blender/locale %s/%s.app/Contents/Resources/'%(bldroot,builddir,binary)
- commands.getoutput(cmd)
- cmd = 'cp -R %s/bin/.blender/locale %s/%s.app/Contents/MacOS/.blender/'%(bldroot,builddir,binary)
- commands.getoutput(cmd)
- cmd = 'cp %s/bin/.blender/.Blanguages %s/%s.app/Contents/Resources/'%(bldroot,builddir,binary)
- commands.getoutput(cmd)
- cmd = 'cp -R %s/release/scripts %s/%s.app/Contents/MacOS/.blender/'%(bldroot,builddir,binary)
- commands.getoutput(cmd)
- cmd = 'chmod +x %s/%s.app/Contents/MacOS/%s'%(builddir,binary, binary)
- commands.getoutput(cmd)
- cmd = 'find %s/%s.app -name .svn -prune -exec rm -rf {} \;'%(builddir, binary)
- commands.getoutput(cmd)
- cmd = 'find %s/%s.app -name .DS_Store -exec rm -rf {} \;'%(builddir, binary)
- commands.getoutput(cmd)
+ bldroot = env.Dir('.').abspath
+ binary = env['BINARYKIND']
+
+ if b=='verse':
+ print bc.OKBLUE+"no bundle for verse"+bc.ENDC
+ return 0
+
+ sourcedir = bldroot + '/source/darwin/%s.app'%binary
+ sourceinfo = bldroot + "/source/darwin/%s.app/Contents/Info.plist"%binary
+ targetinfo = builddir +'/' + "%s.app/Contents/Info.plist"%binary
+ cmd = builddir + '/' +'%s.app'%binary
+
+ if os.path.isdir(cmd):
+ shutil.rmtree(cmd)
+ shutil.copytree(sourcedir, cmd)
+ cmd = "cat %s | sed s/VERSION/`cat release/VERSION`/ | sed s/DATE/`date +'%%Y-%%b-%%d'`/ > %s"%(sourceinfo,targetinfo)
+ commands.getoutput(cmd)
+ cmd = 'cp %s/%s %s/%s.app/Contents/MacOS/%s'%(builddir, binary,builddir, binary, binary)
+ commands.getoutput(cmd)
+ cmd = 'mkdir %s/%s.app/Contents/MacOS/.blender/'%(builddir, binary)
+ print cmd
+ commands.getoutput(cmd)
+ cmd = builddir + '/%s.app/Contents/MacOS/.blender'%binary
+ shutil.copy(bldroot + '/bin/.blender/.bfont.ttf', cmd)
+ shutil.copy(bldroot + '/bin/.blender/.Blanguages', cmd)
+ cmd = 'cp -R %s/bin/.blender/locale %s/%s.app/Contents/Resources/'%(bldroot,builddir,binary)
+ commands.getoutput(cmd)
+ cmd = 'cp -R %s/bin/.blender/locale %s/%s.app/Contents/MacOS/.blender/'%(bldroot,builddir,binary)
+ commands.getoutput(cmd)
+ cmd = 'cp %s/bin/.blender/.Blanguages %s/%s.app/Contents/Resources/'%(bldroot,builddir,binary)
+ commands.getoutput(cmd)
+ cmd = 'cp -R %s/release/scripts %s/%s.app/Contents/MacOS/.blender/'%(bldroot,builddir,binary)
+ commands.getoutput(cmd)
+ cmd = 'chmod +x %s/%s.app/Contents/MacOS/%s'%(builddir,binary, binary)
+ commands.getoutput(cmd)
+ cmd = 'find %s/%s.app -name .svn -prune -exec rm -rf {} \;'%(builddir, binary)
+ commands.getoutput(cmd)
+ cmd = 'find %s/%s.app -name .DS_Store -exec rm -rf {} \;'%(builddir, binary)
+ commands.getoutput(cmd)
#### END ACTION STUFF #########
def bsc(env, target, source):
-
- bd = os.path.dirname(target[0].abspath)
- bscfile = '\"'+target[0].abspath+'\"'
- bscpathcollect = '\"'+bd + os.sep + '*.sbr\"'
- bscpathtmp = '\"'+bd + os.sep + 'bscmake.tmp\"'
+
+ bd = os.path.dirname(target[0].abspath)
+ bscfile = '\"'+target[0].abspath+'\"'
+ bscpathcollect = '\"'+bd + os.sep + '*.sbr\"'
+ bscpathtmp = '\"'+bd + os.sep + 'bscmake.tmp\"'
- os.system('dir /b/s '+bscpathcollect+' >'+bscpathtmp)
+ os.system('dir /b/s '+bscpathcollect+' >'+bscpathtmp)
- myfile = open(bscpathtmp[1:-1], 'r')
- lines = myfile.readlines()
- myfile.close()
+ myfile = open(bscpathtmp[1:-1], 'r')
+ lines = myfile.readlines()
+ myfile.close()
- newfile = open(bscpathtmp[1:-1], 'w')
- for l in lines:
- newfile.write('\"'+l[:-1]+'\"\n')
- newfile.close()
-
- os.system('bscmake /nologo /n /o'+bscfile+' @'+bscpathtmp)
- os.system('del '+bscpathtmp)
+ newfile = open(bscpathtmp[1:-1], 'w')
+ for l in lines:
+ newfile.write('\"'+l[:-1]+'\"\n')
+ newfile.close()
+
+ os.system('bscmake /nologo /n /o'+bscfile+' @'+bscpathtmp)
+ os.system('del '+bscpathtmp)
class BlenderEnvironment(SConsEnvironment):
- def BlenderRes(self=None, libname=None, source=None, libtype=['core'], priority=[100]):
- global libs
- if not self or not libname or not source:
- print bc.FAIL+'Cannot continue. Missing argument for BlenderRes '+libname+bc.ENDC
- self.Exit()
- if self['OURPLATFORM'] not in ('win32-vc','win32-mingw','linuxcross'):
- print bc.FAIL+'BlenderRes is for windows only!'+bc.END
- self.Exit()
-
- print bc.HEADER+'Configuring resource '+bc.ENDC+bc.OKGREEN+libname+bc.ENDC
- lenv = self.Clone()
- res = lenv.RES('#'+root_build_dir+'lib/'+libname, source)
-
- SConsEnvironment.Default(self, res)
- resources.append(res)
+ def BlenderRes(self=None, libname=None, source=None, libtype=['core'], priority=[100]):
+ global libs
+ if not self or not libname or not source:
+ print bc.FAIL+'Cannot continue. Missing argument for BlenderRes '+libname+bc.ENDC
+ self.Exit()
+ if self['OURPLATFORM'] not in ('win32-vc','win32-mingw','linuxcross'):
+ print bc.FAIL+'BlenderRes is for windows only!'+bc.END
+ self.Exit()
+
+ print bc.HEADER+'Configuring resource '+bc.ENDC+bc.OKGREEN+libname+bc.ENDC
+ lenv = self.Clone()
+ res = lenv.RES('#'+root_build_dir+'lib/'+libname, source)
+
+ SConsEnvironment.Default(self, res)
+ resources.append(res)
- def BlenderLib(self=None, libname=None, sources=None, includes=[], defines=[], libtype='common', priority = 100, compileflags=None, cc_compileflags=None, cxx_compileflags=None):
- if not self or not libname or not sources:
- print bc.FAIL+'Cannot continue. Missing argument for BuildBlenderLib '+libname+bc.ENDC
- self.Exit()
- if libname in quickie or len(quickie)==0:
- if libname in quickdebug:
- print bc.HEADER+'Configuring library '+bc.ENDC+bc.OKGREEN+libname +bc.ENDC+bc.OKBLUE+ " (debug mode)" + bc.ENDC
- else:
- print bc.HEADER+'Configuring library '+bc.ENDC+bc.OKGREEN+libname + bc.ENDC
- lenv = self.Clone()
- lenv.Append(CPPPATH=includes)
- lenv.Append(CPPDEFINES=defines)
- if lenv['WITH_BF_GAMEENGINE']:
- lenv.Append(CPPDEFINES=['GAMEBLENDER=1'])
- if lenv['WITH_BF_BULLET']:
- lenv.Append(CPPDEFINES=['WITH_BULLET=1'])
- if lenv['BF_DEBUG'] or (libname in quickdebug):
- lenv.Append(CFLAGS = lenv['BF_DEBUG_CFLAGS'])
- lenv.Append(CCFLAGS = lenv['BF_DEBUG_CCFLAGS'])
- lenv.Append(CXXFLAGS = lenv['BF_DEBUG_CXXFLAGS'])
- else:
- lenv.Append(CFLAGS = lenv['REL_CFLAGS'])
- lenv.Append(CCFLAGS = lenv['REL_CCFLAGS'])
- lenv.Append(CXXFLAGS = lenv['REL_CXXFLAGS'])
- if lenv['BF_PROFILE']:
- lenv.Append(CFLAGS = lenv['BF_PROFILE_CFLAGS'])
- lenv.Append(CCFLAGS = lenv['BF_PROFILE_CCFLAGS'])
- lenv.Append(CXXFLAGS = lenv['BF_PROFILE_CXXFLAGS'])
- if compileflags:
- lenv.Append(CFLAGS = compileflags)
- if cc_compileflags:
- lenv.Append(CCFLAGS = cc_compileflags)
- if cxx_compileflags:
- lenv.Append(CXXFLAGS = cxx_compileflags)
- lenv.Append(CFLAGS = lenv['C_WARN'])
- lenv.Append(CXXFLAGS = lenv['CC_WARN'])
- lenv.Append(CXXFLAGS = lenv['CXX_WARN'])
- lib = lenv.Library(target= '#'+root_build_dir+'lib/'+libname, source=sources)
- SConsEnvironment.Default(self, lib) # we add to default target, because this way we get some kind of progress info during build
- else:
- print bc.WARNING+'Not building '+bc.ENDC+bc.OKGREEN+libname+bc.ENDC+' for '+bc.OKBLUE+'BF_QUICK'+bc.ENDC
- # note: libs is a global
- add_lib_to_dict(self, libs, libtype, libname, priority)
+ def BlenderLib(self=None, libname=None, sources=None, includes=[], defines=[], libtype='common', priority = 100, compileflags=None, cc_compileflags=None, cxx_compileflags=None):
+ if not self or not libname or not sources:
+ print bc.FAIL+'Cannot continue. Missing argument for BuildBlenderLib '+libname+bc.ENDC
+ self.Exit()
- def BlenderProg(self=None, builddir=None, progname=None, sources=None, includes=None, libs=None, libpath=None, binarykind=''):
- print bc.HEADER+'Configuring program '+bc.ENDC+bc.OKGREEN+progname+bc.ENDC
- lenv = self.Clone()
- if lenv['OURPLATFORM'] in ['win32-vc', 'cygwin']:
- lenv.Append(LINKFLAGS = Split(lenv['PLATFORM_LINKFLAGS']))
- if lenv['BF_DEBUG']:
- lenv.Prepend(LINKFLAGS = ['/DEBUG','/PDB:'+progname+'.pdb'])
- if lenv['OURPLATFORM']=='linux2':
- lenv.Append(LINKFLAGS = lenv['PLATFORM_LINKFLAGS'])
- if lenv['WITH_BF_PYTHON']:
- lenv.Append(LINKFLAGS = lenv['BF_PYTHON_LINKFLAGS'])
- if lenv['OURPLATFORM']=='sunos5':
- lenv.Append(LINKFLAGS = lenv['PLATFORM_LINKFLAGS'])
- if lenv['WITH_BF_PYTHON']:
- lenv.Append(LINKFLAGS = lenv['BF_PYTHON_LINKFLAGS'])
- if lenv['CXX'].endswith('CC'):
- lenv.Replace(LINK = '$CXX')
- if lenv['OURPLATFORM']=='darwin':
- lenv.Append(LINKFLAGS = lenv['PLATFORM_LINKFLAGS'])
- if lenv['WITH_BF_PYTHON']:
- lenv.Append(LINKFLAGS = lenv['BF_PYTHON_LINKFLAGS'])
- lenv.Append(LINKFLAGS = lenv['BF_OPENGL_LINKFLAGS'])
- if lenv['BF_PROFILE']:
- lenv.Append(LINKFLAGS = lenv['BF_PROFILE_FLAGS'])
- lenv.Append(CPPPATH=includes)
- lenv.Append(LIBPATH=libpath)
- lenv.Append(LIBS=libs)
- if lenv['WITH_BF_QUICKTIME']:
- lenv.Append(LIBS = lenv['BF_QUICKTIME_LIB'])
- lenv.Append(LIBPATH = lenv['BF_QUICKTIME_LIBPATH'])
- prog = lenv.Program(target=builddir+'bin/'+progname, source=sources)
- if lenv['BF_DEBUG'] and lenv['OURPLATFORM']=='win32-vc' and lenv['BF_BSC']:
- f = lenv.File(progname + '.bsc', builddir)
- brs = lenv.Command(f, prog, [bsc])
- SConsEnvironment.Default(self, brs)
- SConsEnvironment.Default(self, prog)
- program_list.append(prog)
- if lenv['OURPLATFORM']=='darwin':
- lenv['BINARYKIND'] = binarykind
- lenv.AddPostAction(prog,Action(AppIt,strfunction=my_appit_print))
- return prog
+ def list_substring(quickie, libname):
+ for q in quickie:
+ if libname.find(q) != -1:
+ return True
+ return False
- def Glob(lenv, pattern):
- path = string.replace(GetBuildPath(lenv,'SConscript'),'SConscript', '')
- files = []
- for i in glob.glob(path + pattern):
- files.append(string.replace(i, path, ''))
- return files
+ if list_substring(quickie, libname) or len(quickie)==0:
+ if list_substring(quickdebug, libname):
+ print bc.HEADER+'Configuring library '+bc.ENDC+bc.OKGREEN+libname +bc.ENDC+bc.OKBLUE+ " (debug mode)" + bc.ENDC
+ else:
+ print bc.HEADER+'Configuring library '+bc.ENDC+bc.OKGREEN+libname + bc.ENDC
+ lenv = self.Clone()
+ lenv.Append(CPPPATH=includes)
+ lenv.Append(CPPDEFINES=defines)
+ if lenv['BF_DEBUG'] or (libname in quickdebug):
+ lenv.Append(CFLAGS = lenv['BF_DEBUG_CFLAGS'])
+ lenv.Append(CCFLAGS = lenv['BF_DEBUG_CCFLAGS'])
+ lenv.Append(CXXFLAGS = lenv['BF_DEBUG_CXXFLAGS'])
+ else:
+ lenv.Append(CFLAGS = lenv['REL_CFLAGS'])
+ lenv.Append(CCFLAGS = lenv['REL_CCFLAGS'])
+ lenv.Append(CXXFLAGS = lenv['REL_CXXFLAGS'])
+ if lenv['BF_PROFILE']:
+ lenv.Append(CFLAGS = lenv['BF_PROFILE_CFLAGS'])
+ lenv.Append(CCFLAGS = lenv['BF_PROFILE_CCFLAGS'])
+ lenv.Append(CXXFLAGS = lenv['BF_PROFILE_CXXFLAGS'])
+ if compileflags:
+ lenv.Append(CFLAGS = compileflags)
+ if cc_compileflags:
+ lenv.Append(CCFLAGS = cc_compileflags)
+ if cxx_compileflags:
+ lenv.Append(CXXFLAGS = cxx_compileflags)
+ lenv.Append(CFLAGS = lenv['C_WARN'])
+ lenv.Append(CCFLAGS = lenv['CC_WARN'])
+ lenv.Append(CXXFLAGS = lenv['CXX_WARN'])
+
+ targetdir = root_build_dir+'lib/' + libname
+ if not (root_build_dir[0]==os.sep or root_build_dir[1]==':'):
+ targetdir = '#'+targetdir
+ lib = lenv.Library(target= targetdir, source=sources)
+ SConsEnvironment.Default(self, lib) # we add to default target, because this way we get some kind of progress info during build
+ else:
+ print bc.WARNING+'Not building '+bc.ENDC+bc.OKGREEN+libname+bc.ENDC+' for '+bc.OKBLUE+'BF_QUICK'+bc.ENDC
+ # note: libs is a global
+ add_lib_to_dict(self, libs, libtype, libname, priority)
+
+ def BlenderProg(self=None, builddir=None, progname=None, sources=None, includes=None, libs=None, libpath=None, binarykind=''):
+ print bc.HEADER+'Configuring program '+bc.ENDC+bc.OKGREEN+progname+bc.ENDC
+ lenv = self.Clone()
+ if lenv['OURPLATFORM'] in ['win32-vc', 'cygwin']:
+ lenv.Append(LINKFLAGS = Split(lenv['PLATFORM_LINKFLAGS']))
+ if lenv['BF_DEBUG']:
+ lenv.Prepend(LINKFLAGS = ['/DEBUG','/PDB:'+progname+'.pdb'])
+ if lenv['OURPLATFORM']=='linux2':
+ lenv.Append(LINKFLAGS = lenv['PLATFORM_LINKFLAGS'])
+ if lenv['WITH_BF_PYTHON']:
+ lenv.Append(LINKFLAGS = lenv['BF_PYTHON_LINKFLAGS'])
+ if lenv['OURPLATFORM']=='sunos5':
+ lenv.Append(LINKFLAGS = lenv['PLATFORM_LINKFLAGS'])
+ if lenv['WITH_BF_PYTHON']:
+ lenv.Append(LINKFLAGS = lenv['BF_PYTHON_LINKFLAGS'])
+ if lenv['CXX'].endswith('CC'):
+ lenv.Replace(LINK = '$CXX')
+ if lenv['OURPLATFORM']=='darwin':
+ lenv.Append(LINKFLAGS = lenv['PLATFORM_LINKFLAGS'])
+ if lenv['WITH_BF_PYTHON']:
+ lenv.Append(LINKFLAGS = lenv['BF_PYTHON_LINKFLAGS'])
+ lenv.Append(LINKFLAGS = lenv['BF_OPENGL_LINKFLAGS'])
+ if lenv['BF_PROFILE']:
+ lenv.Append(LINKFLAGS = lenv['BF_PROFILE_FLAGS'])
+ lenv.Append(CPPPATH=includes)
+ if root_build_dir[0]==os.sep or root_build_dir[1]==':':
+ lenv.Append(LIBPATH=root_build_dir + '/lib')
+ lenv.Append(LIBPATH=libpath)
+ lenv.Append(LIBS=libs)
+ if lenv['WITH_BF_QUICKTIME']:
+ lenv.Append(LIBS = lenv['BF_QUICKTIME_LIB'])
+ lenv.Append(LIBPATH = lenv['BF_QUICKTIME_LIBPATH'])
+ prog = lenv.Program(target=builddir+'bin/'+progname, source=sources)
+ if lenv['BF_DEBUG'] and lenv['OURPLATFORM']=='win32-vc' and lenv['BF_BSC']:
+ f = lenv.File(progname + '.bsc', builddir)
+ brs = lenv.Command(f, prog, [bsc])
+ SConsEnvironment.Default(self, brs)
+ SConsEnvironment.Default(self, prog)
+ program_list.append(prog)
+ if lenv['OURPLATFORM']=='darwin':
+ lenv['BINARYKIND'] = binarykind
+ lenv.AddPostAction(prog,Action(AppIt,strfunction=my_appit_print))
+ return prog
+
+ def Glob(lenv, pattern):
+ path = string.replace(GetBuildPath(lenv,'SConscript'),'SConscript', '')
+ files = []
+ for i in glob.glob(path + pattern):
+ files.append(string.replace(i, path, ''))
+ return files
diff --git a/tools/btools.py b/tools/btools.py
index 65bdac46fbf..66d5ecc6b9a 100755
--- a/tools/btools.py
+++ b/tools/btools.py
@@ -5,9 +5,9 @@ import SCons.Options
import SCons.Variables
try:
- import subprocess
+ import subprocess
except ImportError:
- pass
+ pass
import string
import glob
import shutil
@@ -17,260 +17,262 @@ Variables = SCons.Variables
BoolVariable = SCons.Variables.BoolVariable
def print_arguments(args, bc):
- if len(args):
- for k,v in args.iteritems():
- print '\t'+bc.OKBLUE+k+bc.ENDC+' = '+bc.OKGREEN + v + bc.ENDC
- else:
- print '\t'+bc.WARNING+'No command-line arguments given'+bc.ENDC
+ if len(args):
+ for k,v in args.iteritems():
+ print '\t'+bc.OKBLUE+k+bc.ENDC+' = '+bc.OKGREEN + v + bc.ENDC
+ else:
+ print '\t'+bc.WARNING+'No command-line arguments given'+bc.ENDC
def validate_arguments(args, bc):
- opts_list = [
- 'WITH_BF_PYTHON', 'BF_PYTHON', 'BF_PYTHON_VERSION', 'BF_PYTHON_INC', 'BF_PYTHON_BINARY', 'BF_PYTHON_LIB', 'BF_PYTHON_LIBPATH', 'BF_PYTHON_LINKFLAGS', 'WITH_BF_STATICPYTHON', 'BF_PYTHON_LIB_STATIC',
- 'WITH_BF_OPENAL', 'BF_OPENAL', 'BF_OPENAL_INC', 'BF_OPENAL_LIB', 'BF_OPENAL_LIBPATH', 'WITH_BF_STATICOPENAL', 'BF_OPENAL_LIB_STATIC',
- 'WITH_BF_SDL', 'BF_SDL', 'BF_SDL_INC', 'BF_SDL_LIB', 'BF_SDL_LIBPATH',
- 'BF_PTHREADS', 'BF_PTHREADS_INC', 'BF_PTHREADS_LIB', 'BF_PTHREADS_LIBPATH',
- 'WITH_BF_FMOD',
- 'WITH_BF_OPENEXR', 'BF_OPENEXR', 'BF_OPENEXR_INC', 'BF_OPENEXR_LIB', 'BF_OPENEXR_LIBPATH', 'WITH_BF_STATICOPENEXR', 'BF_OPENEXR_LIB_STATIC',
- 'WITH_BF_DDS',
- 'WITH_BF_FFMPEG', 'BF_FFMPEG_LIB','BF_FFMPEG_EXTRA', 'BF_FFMPEG', 'BF_FFMPEG_INC',
- 'WITH_BF_OGG', 'BF_OGG', 'BF_OGG_LIB',
- 'WITH_BF_JPEG', 'BF_JPEG', 'BF_JPEG_INC', 'BF_JPEG_LIB', 'BF_JPEG_LIBPATH',
- 'WITH_BF_PNG', 'BF_PNG', 'BF_PNG_INC', 'BF_PNG_LIB', 'BF_PNG_LIBPATH',
- 'BF_TIFF', 'BF_TIFF_INC',
- 'WITH_BF_ZLIB', 'BF_ZLIB', 'BF_ZLIB_INC', 'BF_ZLIB_LIB', 'BF_ZLIB_LIBPATH',
- 'WITH_BF_INTERNATIONAL',
- 'BF_GETTEXT', 'BF_GETTEXT_INC', 'BF_GETTEXT_LIB', 'BF_GETTEXT_LIBPATH',
- 'WITH_BF_ICONV', 'BF_ICONV', 'BF_ICONV_INC', 'BF_ICONV_LIB', 'BF_ICONV_LIBPATH',
- 'WITH_BF_ODE', 'BF_ODE', 'BF_ODE_INC', 'BF_ODE_LIB',
- 'WITH_BF_GAMEENGINE', 'WITH_BF_BULLET', 'BF_BULLET', 'BF_BULLET_INC', 'BF_BULLET_LIB',
- 'BF_SOLID', 'BF_SOLID_INC', 'BF_WINTAB', 'BF_WINTAB_INC',
- 'WITH_BF_YAFRAY',
- 'WITH_BF_FREETYPE', 'BF_FREETYPE', 'BF_FREETYPE_INC', 'BF_FREETYPE_LIB', 'BF_FREETYPE_LIBPATH',
- 'WITH_BF_QUICKTIME', 'BF_QUICKTIME', 'BF_QUICKTIME_INC', 'BF_QUICKTIME_LIB', 'BF_QUICKTIME_LIBPATH',
- 'WITH_BF_STATICOPENGL', 'BF_OPENGL', 'BF_OPENGL_INC', 'BF_OPENGL_LIB', 'BF_OPENGL_LIBPATH', 'BF_OPENGL_LIB_STATIC', 'BF_OPENGL_LINKFLAGS',
- 'WITH_BF_FTGL', 'BF_FTGL', 'BF_FTGL_INC', 'BF_FTGL_LIB',
- 'WITH_BF_PLAYER',
- 'WITH_BF_NOBLENDER',
- 'WITH_BF_BINRELOC',
- 'CFLAGS', 'CCFLAGS', 'CXXFLAGS', 'CPPFLAGS',
- 'REL_CFLAGS', 'REL_CCFLAGS', 'REL_CXXFLAGS',
- 'BF_PROFILE_FLAGS', 'BF_PROFILE_FLAGS', 'BF_PROFILE_CXXFLAGS',
- 'BF_DEBUG_CFLAGS', 'BF_DEBUG_CCFLAGS', 'BF_DEBUG_CXXFLAGS',
- 'C_WARN', 'CC_WARN', 'CXX_WARN',
- 'LLIBS', 'PLATFORM_LINKFLAGS',
- 'LCGDIR',
- 'BF_CXX', 'WITH_BF_STATICCXX', 'BF_CXX_LIB_STATIC'
- 'WITH_BF_VERSE', 'BF_VERSE_INCLUDE',
- 'VERSE_BUILD_BINARY', 'VERSE_BUILD_DIR', 'VERSE_REGEN_PROTO',
- 'BF_TWEAK_MODE', 'BF_SPLIT_SRC',
- 'WITHOUT_BF_INSTALL',
- 'WITH_BF_OPENMP',
- 'WITHOUT_BF_INSTALL',
- 'BF_FANCY', 'BF_QUIET',
- 'BF_X264_CONFIG',
- 'BF_XVIDCORE_CONFIG',
- 'WITH_BF_DOCS',
- 'BF_NUMJOBS',
- ]
+ opts_list = [
+ 'WITH_BF_PYTHON', 'BF_PYTHON', 'BF_PYTHON_VERSION', 'BF_PYTHON_INC', 'BF_PYTHON_BINARY', 'BF_PYTHON_LIB', 'BF_PYTHON_LIBPATH', 'BF_PYTHON_LINKFLAGS', 'WITH_BF_STATICPYTHON', 'BF_PYTHON_LIB_STATIC',
+ 'WITH_BF_OPENAL', 'BF_OPENAL', 'BF_OPENAL_INC', 'BF_OPENAL_LIB', 'BF_OPENAL_LIBPATH', 'WITH_BF_STATICOPENAL', 'BF_OPENAL_LIB_STATIC',
+ 'WITH_BF_SDL', 'BF_SDL', 'BF_SDL_INC', 'BF_SDL_LIB', 'BF_SDL_LIBPATH',
+ 'BF_PTHREADS', 'BF_PTHREADS_INC', 'BF_PTHREADS_LIB', 'BF_PTHREADS_LIBPATH',
+ 'WITH_BF_FMOD',
+ 'WITH_BF_OPENEXR', 'BF_OPENEXR', 'BF_OPENEXR_INC', 'BF_OPENEXR_LIB', 'BF_OPENEXR_LIBPATH', 'WITH_BF_STATICOPENEXR', 'BF_OPENEXR_LIB_STATIC',
+ 'WITH_BF_DDS',
+ 'WITH_BF_FFMPEG', 'BF_FFMPEG_LIB','BF_FFMPEG_EXTRA', 'BF_FFMPEG', 'BF_FFMPEG_INC',
+ 'WITH_BF_OGG', 'BF_OGG', 'BF_OGG_LIB',
+ 'WITH_BF_JPEG', 'BF_JPEG', 'BF_JPEG_INC', 'BF_JPEG_LIB', 'BF_JPEG_LIBPATH',
+ 'WITH_BF_PNG', 'BF_PNG', 'BF_PNG_INC', 'BF_PNG_LIB', 'BF_PNG_LIBPATH',
+ 'BF_TIFF', 'BF_TIFF_INC', 'BF_TIFF_LIB', 'BF_TIFF_LIBPATH',
+ 'WITH_BF_ZLIB', 'BF_ZLIB', 'BF_ZLIB_INC', 'BF_ZLIB_LIB', 'BF_ZLIB_LIBPATH',
+ 'WITH_BF_INTERNATIONAL',
+ 'BF_GETTEXT', 'BF_GETTEXT_INC', 'BF_GETTEXT_LIB', 'BF_GETTEXT_LIBPATH',
+ 'WITH_BF_ICONV', 'BF_ICONV', 'BF_ICONV_INC', 'BF_ICONV_LIB', 'BF_ICONV_LIBPATH',
+ 'WITH_BF_ODE', 'BF_ODE', 'BF_ODE_INC', 'BF_ODE_LIB',
+ 'WITH_BF_GAMEENGINE', 'WITH_BF_BULLET', 'BF_BULLET', 'BF_BULLET_INC', 'BF_BULLET_LIB',
+ 'BF_SOLID', 'BF_SOLID_INC', 'BF_WINTAB', 'BF_WINTAB_INC',
+ 'WITH_BF_YAFRAY',
+ 'WITH_BF_FREETYPE', 'BF_FREETYPE', 'BF_FREETYPE_INC', 'BF_FREETYPE_LIB', 'BF_FREETYPE_LIBPATH',
+ 'WITH_BF_QUICKTIME', 'BF_QUICKTIME', 'BF_QUICKTIME_INC', 'BF_QUICKTIME_LIB', 'BF_QUICKTIME_LIBPATH',
+ 'WITH_BF_STATICOPENGL', 'BF_OPENGL', 'BF_OPENGL_INC', 'BF_OPENGL_LIB', 'BF_OPENGL_LIBPATH', 'BF_OPENGL_LIB_STATIC', 'BF_OPENGL_LINKFLAGS',
+ 'WITH_BF_FTGL', 'BF_FTGL', 'BF_FTGL_INC', 'BF_FTGL_LIB',
+ 'WITH_BF_PLAYER',
+ 'WITH_BF_NOBLENDER',
+ 'WITH_BF_BINRELOC',
+ 'CFLAGS', 'CCFLAGS', 'CXXFLAGS', 'CPPFLAGS',
+ 'REL_CFLAGS', 'REL_CCFLAGS', 'REL_CXXFLAGS',
+ 'BF_PROFILE_FLAGS', 'BF_PROFILE_FLAGS', 'BF_PROFILE_CXXFLAGS',
+ 'BF_DEBUG_CFLAGS', 'BF_DEBUG_CCFLAGS', 'BF_DEBUG_CXXFLAGS',
+ 'C_WARN', 'CC_WARN', 'CXX_WARN',
+ 'LLIBS', 'PLATFORM_LINKFLAGS',
+ 'LCGDIR',
+ 'BF_CXX', 'WITH_BF_STATICCXX', 'BF_CXX_LIB_STATIC',
+ 'WITH_BF_VERSE', 'BF_VERSE_INCLUDE',
+ 'VERSE_BUILD_BINARY', 'VERSE_BUILD_DIR', 'VERSE_REGEN_PROTO',
+ 'BF_TWEAK_MODE', 'BF_SPLIT_SRC',
+ 'WITHOUT_BF_INSTALL',
+ 'WITH_BF_OPENMP',
+ 'WITHOUT_BF_INSTALL',
+ 'BF_FANCY', 'BF_QUIET',
+ 'BF_X264_CONFIG',
+ 'BF_XVIDCORE_CONFIG',
+ 'WITH_BF_DOCS',
+ 'BF_NUMJOBS',
+ ]
- arg_list = ['BF_DEBUG', 'BF_QUIET', 'BF_CROSS', 'BF_UPDATE',
- 'BF_INSTALLDIR', 'BF_TOOLSET', 'BF_BINNAME',
- 'BF_BUILDDIR', 'BF_FANCY', 'BF_QUICK', 'BF_PROFILE',
- 'BF_BSC', 'BF_CONFIG',
- 'BF_PRIORITYLIST', 'BF_BUILDINFO','CC', 'CXX', 'BF_QUICKDEBUG',
- 'BF_LISTDEBUG', 'LCGDIR', 'BF_X264_CONFIG', 'BF_XVIDCORE_CONFIG',
- 'BF_DOCDIR']
+ arg_list = ['BF_DEBUG', 'BF_QUIET', 'BF_CROSS', 'BF_UPDATE',
+ 'BF_INSTALLDIR', 'BF_TOOLSET', 'BF_BINNAME',
+ 'BF_BUILDDIR', 'BF_FANCY', 'BF_QUICK', 'BF_PROFILE',
+ 'BF_BSC', 'BF_CONFIG',
+ 'BF_PRIORITYLIST', 'BF_BUILDINFO','CC', 'CXX', 'BF_QUICKDEBUG',
+ 'BF_LISTDEBUG', 'LCGDIR', 'BF_X264_CONFIG', 'BF_XVIDCORE_CONFIG',
+ 'BF_DOCDIR']
- all_list = opts_list + arg_list
- okdict = {}
+ all_list = opts_list + arg_list
+ okdict = {}
- for k,v in args.iteritems():
- if k in all_list:
- okdict[k] = v
- else:
- print '\t'+bc.WARNING+'Invalid argument: '+bc.ENDC+k+'='+v
+ for k,v in args.iteritems():
+ if k in all_list:
+ okdict[k] = v
+ else:
+ print '\t'+bc.WARNING+'Invalid argument: '+bc.ENDC+k+'='+v
- return okdict
+ return okdict
def print_targets(targs, bc):
- if len(targs)>0:
- for t in targs:
- print '\t'+bc.OKBLUE+t+bc.ENDC
- else:
- print '\t'+bc.WARNING+'No targets given, using '+bc.ENDC+bc.OKGREEN+'default'+bc.ENDC
+ if len(targs)>0:
+ for t in targs:
+ print '\t'+bc.OKBLUE+t+bc.ENDC
+ else:
+ print '\t'+bc.WARNING+'No targets given, using '+bc.ENDC+bc.OKGREEN+'default'+bc.ENDC
def validate_targets(targs, bc):
- valid_list = ['.', 'blender', 'blenderstatic', 'blenderplayer', 'webplugin',
- 'blendernogame', 'blenderstaticnogame', 'blenderlite', 'release',
- 'everything', 'clean', 'install-bin', 'install', 'nsis']
- oklist = []
- for t in targs:
- if t in valid_list:
- oklist.append(t)
- else:
- print '\t'+bc.WARNING+'Invalid target: '+bc.ENDC+t
- return oklist
+ valid_list = ['.', 'blender', 'blenderstatic', 'blenderplayer', 'webplugin',
+ 'blendernogame', 'blenderstaticnogame', 'blenderlite', 'release',
+ 'everything', 'clean', 'install-bin', 'install', 'nsis']
+ oklist = []
+ for t in targs:
+ if t in valid_list:
+ oklist.append(t)
+ else:
+ print '\t'+bc.WARNING+'Invalid target: '+bc.ENDC+t
+ return oklist
class ourSpawn:
- def ourspawn(self, sh, escape, cmd, args, env):
- newargs = string.join(args[1:], ' ')
- cmdline = cmd + " " + newargs
- startupinfo = subprocess.STARTUPINFO()
- startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
- proc = subprocess.Popen(cmdline, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
- stderr=subprocess.PIPE, startupinfo=startupinfo, shell = False)
- data, err = proc.communicate()
- rv = proc.wait()
- if rv:
- print "====="
- print err
- print "====="
- return rv
+ def ourspawn(self, sh, escape, cmd, args, env):
+ newargs = string.join(args[1:], ' ')
+ cmdline = cmd + " " + newargs
+ startupinfo = subprocess.STARTUPINFO()
+ startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
+ proc = subprocess.Popen(cmdline, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE, startupinfo=startupinfo, shell = False)
+ data, err = proc.communicate()
+ rv = proc.wait()
+ if rv:
+ print "====="
+ print err
+ print "====="
+ return rv
def SetupSpawn( env ):
- buf = ourSpawn()
- buf.ourenv = env
- env['SPAWN'] = buf.ourspawn
+ buf = ourSpawn()
+ buf.ourenv = env
+ env['SPAWN'] = buf.ourspawn
def read_opts(cfg, args):
- localopts = Variables.Variables(cfg, args)
- localopts.AddVariables(
- ('VERSE_BUILD_BINARY', 'Build a release or debug binary.', 'release'),
- ('VERSE_BUILD_DIR', 'Target directory for intermediate files.', "${BF_BUILDDIR}/extern/verse"),
- ('VERSE_REGEN_PROTO', 'Whether to regenerate the protocol files', 'yes'),
- (BoolVariable('WITH_BF_VERSE', 'Use VERSE if true', False)),
- ('BF_VERSE_INCLUDE', 'verse include dir', '/usr/include'),
- ('LCGDIR', 'location of cvs lib dir'),
- ('VERSE_BUILD_BINARY', 'Build a release or debug binary.', 'release'),
- ('VERSE_BUILD_DIR', 'Target directory for intermediate files.', "${BF_BUILDDIR}/extern/verse"),
- ('VERSE_REGEN_PROTO', 'Whether to regenerate the protocol files', 'yes'),
- ('BF_DEBUG_LIBS', 'list of libraries to build with debug symbols'),
+ localopts = Variables.Variables(cfg, args)
+ localopts.AddVariables(
+ ('VERSE_BUILD_BINARY', 'Build a release or debug binary.', 'release'),
+ ('VERSE_BUILD_DIR', 'Target directory for intermediate files.', "${BF_BUILDDIR}/extern/verse"),
+ ('VERSE_REGEN_PROTO', 'Whether to regenerate the protocol files', 'yes'),
+ (BoolVariable('WITH_BF_VERSE', 'Use VERSE if true', False)),
+ ('BF_VERSE_INCLUDE', 'verse include dir', '/usr/include'),
+ ('LCGDIR', 'location of cvs lib dir'),
+ ('VERSE_BUILD_BINARY', 'Build a release or debug binary.', 'release'),
+ ('VERSE_BUILD_DIR', 'Target directory for intermediate files.', "${BF_BUILDDIR}/extern/verse"),
+ ('VERSE_REGEN_PROTO', 'Whether to regenerate the protocol files', 'yes'),
+ ('BF_DEBUG_LIBS', 'list of libraries to build with debug symbols'),
- (BoolVariable('WITH_BF_PYTHON', 'Compile with python', True)),
- ('BF_PYTHON', 'base path for python', ''),
- ('BF_PYTHON_VERSION', 'Python version to use', ''),
- ('BF_PYTHON_INC', 'include path for Python headers', ''),
- ('BF_PYTHON_BINARY', 'Path to the Python interpreter', ''),
- ('BF_PYTHON_LIB', 'Python library', ''),
- ('BF_PYTHON_LIB_STATIC', 'Python static libraries', ''),
- ('BF_PYTHON_LIBPATH', 'Library path', ''),
- ('BF_PYTHON_LINKFLAGS', 'Python link flags', ''),
- (BoolVariable('WITH_BF_STATICPYTHON', 'Staticly link to python', False)),
+ (BoolVariable('WITH_BF_PYTHON', 'Compile with python', True)),
+ ('BF_PYTHON', 'base path for python', ''),
+ ('BF_PYTHON_VERSION', 'Python version to use', ''),
+ ('BF_PYTHON_INC', 'include path for Python headers', ''),
+ ('BF_PYTHON_BINARY', 'Path to the Python interpreter', ''),
+ ('BF_PYTHON_LIB', 'Python library', ''),
+ ('BF_PYTHON_LIB_STATIC', 'Python static libraries', ''),
+ ('BF_PYTHON_LIBPATH', 'Library path', ''),
+ ('BF_PYTHON_LINKFLAGS', 'Python link flags', ''),
+ (BoolVariable('WITH_BF_STATICPYTHON', 'Staticly link to python', False)),
- (BoolVariable('BF_NO_ELBEEM', 'Disable Fluid Sim', False)),
- (BoolVariable('WITH_BF_YAFRAY', 'Enable Yafray', True)),
+ (BoolVariable('BF_NO_ELBEEM', 'Disable Fluid Sim', False)),
+ (BoolVariable('WITH_BF_YAFRAY', 'Enable Yafray', True)),
- (BoolVariable('WITH_BF_OPENAL', 'Use OpenAL if true', False)),
- ('BF_OPENAL', 'base path for OpenAL', ''),
- ('BF_OPENAL_INC', 'include path for python headers', ''),
- ('BF_OPENAL_LIB', 'Path to OpenAL library', ''),
- ('BF_OPENAL_LIB_STATIC', 'Path to OpenAL static library', ''),
- ('BF_OPENAL_LIBPATH', 'Path to OpenAL library', ''),
- (BoolVariable('WITH_BF_STATICOPENAL', 'Staticly link to openal', False)),
+ (BoolVariable('WITH_BF_OPENAL', 'Use OpenAL if true', False)),
+ ('BF_OPENAL', 'base path for OpenAL', ''),
+ ('BF_OPENAL_INC', 'include path for python headers', ''),
+ ('BF_OPENAL_LIB', 'Path to OpenAL library', ''),
+ ('BF_OPENAL_LIB_STATIC', 'Path to OpenAL static library', ''),
+ ('BF_OPENAL_LIBPATH', 'Path to OpenAL library', ''),
+ (BoolVariable('WITH_BF_STATICOPENAL', 'Staticly link to openal', False)),
- (BoolVariable('WITH_BF_SDL', 'Use SDL if true', False)),
- ('BF_SDL', 'SDL base path', ''),
- ('BF_SDL_INC', 'SDL include path', ''), #$(shell $(BF_SDL)/bin/sdl-config --cflags)
- ('BF_SDL_LIB', 'SDL library', ''), #$(shell $(BF_SDL)/bin/sdl-config --libs) -lSDL_mixer
- ('BF_SDL_LIBPATH', 'SDL library path', ''),
+ (BoolVariable('WITH_BF_SDL', 'Use SDL if true', False)),
+ ('BF_SDL', 'SDL base path', ''),
+ ('BF_SDL_INC', 'SDL include path', ''), #$(shell $(BF_SDL)/bin/sdl-config --cflags)
+ ('BF_SDL_LIB', 'SDL library', ''), #$(shell $(BF_SDL)/bin/sdl-config --libs) -lSDL_mixer
+ ('BF_SDL_LIBPATH', 'SDL library path', ''),
- ('BF_PTHREADS', 'Pthreads base path', ''),
- ('BF_PTHREADS_INC', 'Pthreads include path', ''),
- ('BF_PTHREADS_LIB', 'Pthreads library', ''),
- ('BF_PTHREADS_LIBPATH', 'Pthreads library path', ''),
+ ('BF_PTHREADS', 'Pthreads base path', ''),
+ ('BF_PTHREADS_INC', 'Pthreads include path', ''),
+ ('BF_PTHREADS_LIB', 'Pthreads library', ''),
+ ('BF_PTHREADS_LIBPATH', 'Pthreads library path', ''),
- (BoolVariable('WITH_BF_FMOD', 'Use FMOD if true', False)),
- # BF_FMOD = $(LCGDIR)/fmod
+ (BoolVariable('WITH_BF_FMOD', 'Use FMOD if true', False)),
+ # BF_FMOD = $(LCGDIR)/fmod
- (BoolVariable('WITH_BF_OPENEXR', 'Use OPENEXR if true', True)),
- (BoolVariable('WITH_BF_STATICOPENEXR', 'Staticly link to OpenEXR', False)),
- ('BF_OPENEXR', 'OPENEXR base path', ''),
- ('BF_OPENEXR_INC', 'OPENEXR include path', ''),
- ('BF_OPENEXR_LIB', 'OPENEXR library', ''),
- ('BF_OPENEXR_LIBPATH', 'OPENEXR library path', ''),
- ('BF_OPENEXR_LIB_STATIC', 'OPENEXR static library', ''),
+ (BoolVariable('WITH_BF_OPENEXR', 'Use OPENEXR if true', True)),
+ (BoolVariable('WITH_BF_STATICOPENEXR', 'Staticly link to OpenEXR', False)),
+ ('BF_OPENEXR', 'OPENEXR base path', ''),
+ ('BF_OPENEXR_INC', 'OPENEXR include path', ''),
+ ('BF_OPENEXR_LIB', 'OPENEXR library', ''),
+ ('BF_OPENEXR_LIBPATH', 'OPENEXR library path', ''),
+ ('BF_OPENEXR_LIB_STATIC', 'OPENEXR static library', ''),
- (BoolVariable('WITH_BF_DDS', 'Use DDS if true', True)),
+ (BoolVariable('WITH_BF_DDS', 'Use DDS if true', True)),
- (BoolVariable('WITH_BF_FFMPEG', 'Use FFMPEG if true', False)),
- ('BF_FFMPEG', 'FFMPEG base path', ''),
- ('BF_FFMPEG_LIB', 'FFMPEG library', ''),
- ('BF_FFMPEG_EXTRA', 'FFMPEG flags that must be preserved', ''),
+ (BoolVariable('WITH_BF_FFMPEG', 'Use FFMPEG if true', False)),
+ ('BF_FFMPEG', 'FFMPEG base path', ''),
+ ('BF_FFMPEG_LIB', 'FFMPEG library', ''),
+ ('BF_FFMPEG_EXTRA', 'FFMPEG flags that must be preserved', ''),
- ('BF_FFMPEG_INC', 'FFMPEG includes', ''),
- ('BF_FFMPEG_LIBPATH', 'FFMPEG library path', ''),
-
- (BoolVariable('WITH_BF_OGG', 'Use OGG, THEORA, VORBIS in FFMPEG if true',
- False)),
- ('BF_OGG', 'OGG base path', ''),
- ('BF_OGG_LIB', 'OGG library', ''),
+ ('BF_FFMPEG_INC', 'FFMPEG includes', ''),
+ ('BF_FFMPEG_LIBPATH', 'FFMPEG library path', ''),
+
+ (BoolVariable('WITH_BF_OGG', 'Use OGG, THEORA, VORBIS in FFMPEG if true',
+ False)),
+ ('BF_OGG', 'OGG base path', ''),
+ ('BF_OGG_LIB', 'OGG library', ''),
- (BoolVariable('WITH_BF_JPEG', 'Use JPEG if true', True)),
- ('BF_JPEG', 'JPEG base path', ''),
- ('BF_JPEG_INC', 'JPEG include path', ''),
- ('BF_JPEG_LIB', 'JPEG library', ''),
- ('BF_JPEG_LIBPATH', 'JPEG library path', ''),
+ (BoolVariable('WITH_BF_JPEG', 'Use JPEG if true', True)),
+ ('BF_JPEG', 'JPEG base path', ''),
+ ('BF_JPEG_INC', 'JPEG include path', ''),
+ ('BF_JPEG_LIB', 'JPEG library', ''),
+ ('BF_JPEG_LIBPATH', 'JPEG library path', ''),
- (BoolVariable('WITH_BF_OPENJPEG', 'Use OPENJPEG if true', False)),
- ('BF_OPENJPEG', 'OPENJPEG base path', ''),
- ('BF_OPENJPEG_INC', 'OPENJPEG include path', ''),
- ('BF_OPENJPEG_LIB', 'OPENJPEG library', ''),
- ('BF_OPENJPEG_LIBPATH', 'OPENJPEG library path', ''),
+ (BoolVariable('WITH_BF_OPENJPEG', 'Use OPENJPEG if true', False)),
+ ('BF_OPENJPEG', 'OPENJPEG base path', ''),
+ ('BF_OPENJPEG_INC', 'OPENJPEG include path', ''),
+ ('BF_OPENJPEG_LIB', 'OPENJPEG library', ''),
+ ('BF_OPENJPEG_LIBPATH', 'OPENJPEG library path', ''),
- (BoolVariable('WITH_BF_REDCODE', 'Use REDCODE if true', False)),
- ('BF_REDCODE', 'REDCODE base path', ''),
- ('BF_REDCODE_INC', 'REDCODE include path', ''),
- ('BF_REDCODE_LIB', 'REDCODE library', ''),
- ('BF_REDCODE_LIBPATH', 'REDCODE library path', ''),
+ (BoolVariable('WITH_BF_REDCODE', 'Use REDCODE if true', False)),
+ ('BF_REDCODE', 'REDCODE base path', ''),
+ ('BF_REDCODE_INC', 'REDCODE include path', ''),
+ ('BF_REDCODE_LIB', 'REDCODE library', ''),
+ ('BF_REDCODE_LIBPATH', 'REDCODE library path', ''),
- (BoolVariable('WITH_BF_PNG', 'Use PNG if true', True)),
- ('BF_PNG', 'PNG base path', ''),
- ('BF_PNG_INC', 'PNG include path', ''),
- ('BF_PNG_LIB', 'PNG library', ''),
- ('BF_PNG_LIBPATH', 'PNG library path', ''),
+ (BoolVariable('WITH_BF_PNG', 'Use PNG if true', True)),
+ ('BF_PNG', 'PNG base path', ''),
+ ('BF_PNG_INC', 'PNG include path', ''),
+ ('BF_PNG_LIB', 'PNG library', ''),
+ ('BF_PNG_LIBPATH', 'PNG library path', ''),
- ('BF_TIFF', 'TIFF base path', ''),
- ('BF_TIFF_INC', 'TIFF include path', ''),
+ ('BF_TIFF', 'TIFF base path', ''),
+ ('BF_TIFF_INC', 'TIFF include path', ''),
+ ('BF_TIFF_LIB', 'TIFF library', ''),
+ ('BF_TIFF_LIBPATH', 'TIFF library path', ''),
- (BoolVariable('WITH_BF_ZLIB', 'Use ZLib if true', True)),
- ('BF_ZLIB', 'ZLib base path', ''),
- ('BF_ZLIB_INC', 'ZLib include path', ''),
- ('BF_ZLIB_LIB', 'ZLib library', ''),
- ('BF_ZLIB_LIBPATH', 'ZLib library path', ''),
+ (BoolVariable('WITH_BF_ZLIB', 'Use ZLib if true', True)),
+ ('BF_ZLIB', 'ZLib base path', ''),
+ ('BF_ZLIB_INC', 'ZLib include path', ''),
+ ('BF_ZLIB_LIB', 'ZLib library', ''),
+ ('BF_ZLIB_LIBPATH', 'ZLib library path', ''),
- (BoolVariable('WITH_BF_INTERNATIONAL', 'Use Gettext and Freetype if true', True)),
+ (BoolVariable('WITH_BF_INTERNATIONAL', 'Use Gettext and Freetype if true', True)),
- ('BF_GETTEXT', 'gettext base path', ''),
- ('BF_GETTEXT_INC', 'gettext include path', ''),
- ('BF_GETTEXT_LIB', 'gettext library', ''),
- ('BF_GETTEXT_LIBPATH', 'gettext library path', ''),
-
- (BoolVariable('WITH_BF_ICONV', 'Use iconv if true', True)),
- ('BF_ICONV', 'iconv base path', ''),
- ('BF_ICONV_INC', 'iconv include path', ''),
- ('BF_ICONV_LIB', 'iconv library', ''),
- ('BF_ICONV_LIBPATH', 'iconv library path', ''),
-
- (BoolVariable('WITH_BF_GAMEENGINE', 'Build with gameengine' , True)),
+ ('BF_GETTEXT', 'gettext base path', ''),
+ ('BF_GETTEXT_INC', 'gettext include path', ''),
+ ('BF_GETTEXT_LIB', 'gettext library', ''),
+ ('BF_GETTEXT_LIBPATH', 'gettext library path', ''),
+
+ (BoolVariable('WITH_BF_ICONV', 'Use iconv if true', True)),
+ ('BF_ICONV', 'iconv base path', ''),
+ ('BF_ICONV_INC', 'iconv include path', ''),
+ ('BF_ICONV_LIB', 'iconv library', ''),
+ ('BF_ICONV_LIBPATH', 'iconv library path', ''),
+
+ (BoolVariable('WITH_BF_GAMEENGINE', 'Build with gameengine' , True)),
- (BoolVariable('WITH_BF_ODE', 'Use ODE if true', True)),
- ('BF_ODE', 'ODE base path', ''),
- ('BF_ODE_INC', 'ODE include path' , ''),
- ('BF_ODE_LIB', 'ODE library', ''),
+ (BoolVariable('WITH_BF_ODE', 'Use ODE if true', True)),
+ ('BF_ODE', 'ODE base path', ''),
+ ('BF_ODE_INC', 'ODE include path' , ''),
+ ('BF_ODE_LIB', 'ODE library', ''),
- (BoolVariable('WITH_BF_BULLET', 'Use Bullet if true', True)),
- ('BF_BULLET', 'Bullet base dir', ''),
- ('BF_BULLET_INC', 'Bullet include path', ''),
- ('BF_BULLET_LIB', 'Bullet library', ''),
-
- ('BF_SOLID', 'Solid base dir', '#/extern/solid'),
- ('BF_SOLID_INC', 'Solid include path', ''),
- ('BF_WINTAB', 'WinTab base dir', ''),
- ('BF_WINTAB_INC', 'WinTab include dir', ''),
- ('BF_CXX', 'c++ base path for libstdc++, only used when static linking', ''),
- (BoolVariable('WITH_BF_STATICCXX', 'static link to stdc++', False)),
- ('BF_CXX_LIB_STATIC', 'static library path for stdc++', ''),
+ (BoolVariable('WITH_BF_BULLET', 'Use Bullet if true', True)),
+ ('BF_BULLET', 'Bullet base dir', ''),
+ ('BF_BULLET_INC', 'Bullet include path', ''),
+ ('BF_BULLET_LIB', 'Bullet library', ''),
+
+ ('BF_SOLID', 'Solid base dir', '#/extern/solid'),
+ ('BF_SOLID_INC', 'Solid include path', ''),
+ ('BF_WINTAB', 'WinTab base dir', ''),
+ ('BF_WINTAB_INC', 'WinTab include dir', ''),
+ ('BF_CXX', 'c++ base path for libstdc++, only used when static linking', ''),
+ (BoolVariable('WITH_BF_STATICCXX', 'static link to stdc++', False)),
+ ('BF_CXX_LIB_STATIC', 'static library path for stdc++', ''),
##
##WITH_BF_NSPR = True
##BF_NSPR = $(LCGDIR)/nspr
@@ -289,273 +291,273 @@ def read_opts(cfg, args):
##BF_PARANOID = True
##
### enable freetype2 support for text objects
- (BoolVariable('WITH_BF_FREETYPE', 'Use FreeType2 if true', False)),
- ('BF_FREETYPE', 'Freetype base path', ''),
- ('BF_FREETYPE_INC', 'Freetype include path', ''),
- ('BF_FREETYPE_LIB', 'Freetype library', ''),
- ('BF_FREETYPE_LIBPATH', 'Freetype library path', ''),
+ (BoolVariable('WITH_BF_FREETYPE', 'Use FreeType2 if true', False)),
+ ('BF_FREETYPE', 'Freetype base path', ''),
+ ('BF_FREETYPE_INC', 'Freetype include path', ''),
+ ('BF_FREETYPE_LIB', 'Freetype library', ''),
+ ('BF_FREETYPE_LIBPATH', 'Freetype library path', ''),
- (BoolVariable('WITH_BF_OPENMP', 'Use OpenMP if true', False)),
+ (BoolVariable('WITH_BF_OPENMP', 'Use OpenMP if true', False)),
- (BoolVariable('WITH_BF_QUICKTIME', 'Use QuickTime if true', False)),
- ('BF_QUICKTIME', 'QuickTime base path', ''),
- ('BF_QUICKTIME_INC', 'QuickTime include path', ''),
- ('BF_QUICKTIME_LIB', 'QuickTime library', ''),
- ('BF_QUICKTIME_LIBPATH', 'QuickTime library path', ''),
+ (BoolVariable('WITH_BF_QUICKTIME', 'Use QuickTime if true', False)),
+ ('BF_QUICKTIME', 'QuickTime base path', ''),
+ ('BF_QUICKTIME_INC', 'QuickTime include path', ''),
+ ('BF_QUICKTIME_LIB', 'QuickTime library', ''),
+ ('BF_QUICKTIME_LIBPATH', 'QuickTime library path', ''),
- (BoolVariable('WITH_BF_STATICOPENGL', 'Use MESA if true', True)),
- ('BF_OPENGL', 'OpenGL base path', ''),
- ('BF_OPENGL_INC', 'OpenGL include path', ''),
- ('BF_OPENGL_LIB', 'OpenGL libraries', ''),
- ('BF_OPENGL_LIBPATH', 'OpenGL library path', ''),
- ('BF_OPENGL_LIB_STATIC', 'OpenGL static libraries', ''),
- ('BF_OPENGL_LINKFLAGS', 'OpenGL link flags', ''),
-
- (BoolVariable('WITH_BF_FTGL', 'Use FTGL if true', True)),
- ('BF_FTGL', 'FTGL base path', ''),
- ('BF_FTGL_INC', 'FTGL include path', ''),
- ('BF_FTGL_LIB', 'FTGL libraries', ''),
+ (BoolVariable('WITH_BF_STATICOPENGL', 'Use MESA if true', True)),
+ ('BF_OPENGL', 'OpenGL base path', ''),
+ ('BF_OPENGL_INC', 'OpenGL include path', ''),
+ ('BF_OPENGL_LIB', 'OpenGL libraries', ''),
+ ('BF_OPENGL_LIBPATH', 'OpenGL library path', ''),
+ ('BF_OPENGL_LIB_STATIC', 'OpenGL static libraries', ''),
+ ('BF_OPENGL_LINKFLAGS', 'OpenGL link flags', ''),
+
+ (BoolVariable('WITH_BF_FTGL', 'Use FTGL if true', True)),
+ ('BF_FTGL', 'FTGL base path', ''),
+ ('BF_FTGL_INC', 'FTGL include path', ''),
+ ('BF_FTGL_LIB', 'FTGL libraries', ''),
- (BoolVariable('WITH_BF_PLAYER', 'Build blenderplayer if true', False)),
- (BoolVariable('WITH_BF_NOBLENDER', 'Do not build blender if true', False)),
+ (BoolVariable('WITH_BF_PLAYER', 'Build blenderplayer if true', False)),
+ (BoolVariable('WITH_BF_NOBLENDER', 'Do not build blender if true', False)),
- ('CFLAGS', 'C only flags', ''),
- ('CCFLAGS', 'Generic C and C++ flags', ''),
- ('CXXFLAGS', 'C++ only flags', ''),
- ('CPPFLAGS', 'Defines', ''),
- ('REL_CFLAGS', 'C only release flags', ''),
- ('REL_CCFLAGS', 'Generic C and C++ release flags', ''),
- ('REL_CXXFLAGS', 'C++ only release flags', ''),
+ ('CFLAGS', 'C only flags', ''),
+ ('CCFLAGS', 'Generic C and C++ flags', ''),
+ ('CXXFLAGS', 'C++ only flags', ''),
+ ('CPPFLAGS', 'Defines', ''),
+ ('REL_CFLAGS', 'C only release flags', ''),
+ ('REL_CCFLAGS', 'Generic C and C++ release flags', ''),
+ ('REL_CXXFLAGS', 'C++ only release flags', ''),
- ('C_WARN', 'C warning flags', ''),
- ('CC_WARN', 'Generic C and C++ warning flags', ''),
- ('CXX_WARN', 'C++ only warning flags', ''),
+ ('C_WARN', 'C warning flags', ''),
+ ('CC_WARN', 'Generic C and C++ warning flags', ''),
+ ('CXX_WARN', 'C++ only warning flags', ''),
- ('LLIBS', 'Platform libs', ''),
- ('PLATFORM_LINKFLAGS', 'Platform linkflags', ''),
+ ('LLIBS', 'Platform libs', ''),
+ ('PLATFORM_LINKFLAGS', 'Platform linkflags', ''),
- (BoolVariable('BF_PROFILE', 'Add profiling information if true', False)),
- ('BF_PROFILE_CFLAGS', 'C only profiling flags', ''),
- ('BF_PROFILE_CCFLAGS', 'C and C++ profiling flags', ''),
- ('BF_PROFILE_CXXFLAGS', 'C++ only profiling flags', ''),
+ (BoolVariable('BF_PROFILE', 'Add profiling information if true', False)),
+ ('BF_PROFILE_CFLAGS', 'C only profiling flags', ''),
+ ('BF_PROFILE_CCFLAGS', 'C and C++ profiling flags', ''),
+ ('BF_PROFILE_CXXFLAGS', 'C++ only profiling flags', ''),
- (BoolVariable('BF_DEBUG', 'Add debug flags if true', False)),
- ('BF_DEBUG_CFLAGS', 'C only debug flags', ''),
- ('BF_DEBUG_CCFLAGS', 'C and C++ debug flags', ''),
- ('BF_DEBUG_CXXFLAGS', 'C++ only debug flags', ''),
+ (BoolVariable('BF_DEBUG', 'Add debug flags if true', False)),
+ ('BF_DEBUG_CFLAGS', 'C only debug flags', ''),
+ ('BF_DEBUG_CCFLAGS', 'C and C++ debug flags', ''),
+ ('BF_DEBUG_CXXFLAGS', 'C++ only debug flags', ''),
- (BoolVariable('BF_BSC', 'Create .bsc files (msvc only)', True)),
+ (BoolVariable('BF_BSC', 'Create .bsc files (msvc only)', True)),
- ('BF_BUILDDIR', 'Build dir', ''),
- ('BF_INSTALLDIR', 'Installation dir', ''),
- ('BF_DOCDIR', 'Dir where BPy documentation will be created', ''),
+ ('BF_BUILDDIR', 'Build dir', ''),
+ ('BF_INSTALLDIR', 'Installation dir', ''),
+ ('BF_DOCDIR', 'Dir where BPy documentation will be created', ''),
- ('CC', 'C compiler to use', ''),
- ('CXX', 'C++ compiler to use', ''),
+ ('CC', 'C compiler to use', ''),
+ ('CXX', 'C++ compiler to use', ''),
- (BoolVariable('BF_BUILDINFO', 'Buildtime in splash if true', True)),
+ (BoolVariable('BF_BUILDINFO', 'Buildtime in splash if true', True)),
- (BoolVariable('BF_TWEAK_MODE', 'Enable tweak mode if true', False)),
- (BoolVariable('BF_SPLIT_SRC', 'Split src lib into several chunks if true', False)),
- (BoolVariable('WITHOUT_BF_INSTALL', 'dont install if true', False)),
- (BoolVariable('BF_FANCY', 'Enable fancy output if true', True)),
- (BoolVariable('BF_QUIET', 'Enable silent output if true', True)),
- (BoolVariable('WITH_BF_BINRELOC', 'Enable relocatable binary (linux only)', False)),
+ (BoolVariable('BF_TWEAK_MODE', 'Enable tweak mode if true', False)),
+ (BoolVariable('BF_SPLIT_SRC', 'Split src lib into several chunks if true', False)),
+ (BoolVariable('WITHOUT_BF_INSTALL', 'dont install if true', False)),
+ (BoolVariable('BF_FANCY', 'Enable fancy output if true', True)),
+ (BoolVariable('BF_QUIET', 'Enable silent output if true', True)),
+ (BoolVariable('WITH_BF_BINRELOC', 'Enable relocatable binary (linux only)', False)),
- ('BF_X264_CONFIG', 'configuration flags for x264', ''),
- ('BF_XVIDCORE_CONFIG', 'configuration flags for xvidcore', ''),
- (BoolVariable('WITH_BF_DOCS', 'Generate API documentation', False)),
-
- ('BF_CONFIG', 'SCons python config file used to set default options', 'user_config.py'),
- ('BF_NUMJOBS', 'Number of build processes to spawn', '1')
+ ('BF_X264_CONFIG', 'configuration flags for x264', ''),
+ ('BF_XVIDCORE_CONFIG', 'configuration flags for xvidcore', ''),
+ (BoolVariable('WITH_BF_DOCS', 'Generate API documentation', False)),
+
+ ('BF_CONFIG', 'SCons python config file used to set default options', 'user_config.py'),
+ ('BF_NUMJOBS', 'Number of build processes to spawn', '1')
- ) # end of opts.AddOptions()
+ ) # end of opts.AddOptions()
- return localopts
+ return localopts
def NSIS_print(target, source, env):
- return "Creating NSIS installer for Blender 3D"
+ return "Creating NSIS installer for Blender 3D"
def NSIS_Installer(target=None, source=None, env=None):
- if env['OURPLATFORM'] != 'win32-vc' and env['OURPLATFORM'] != 'win32-mingw':
- print "NSIS installer is only available on Windows."
- Exit()
-
- start_dir = os.getcwd()
- rel_dir = start_dir + "\\release\\windows\\installer\\"
- install_base_dir = start_dir + "\\"
-
- if not os.path.exists(install_base_dir+env['BF_INSTALLDIR']+'/plugins/include'):
- os.mkdir(install_base_dir+env['BF_INSTALLDIR']+'/plugins/include')
-
- for f in glob.glob('source/blender/blenpluginapi/*.h'):
- shutil.copy(f,install_base_dir+env['BF_INSTALLDIR']+'/plugins/include')
+ if env['OURPLATFORM'] != 'win32-vc' and env['OURPLATFORM'] != 'win32-mingw':
+ print "NSIS installer is only available on Windows."
+ Exit()
+
+ start_dir = os.getcwd()
+ rel_dir = start_dir + "\\release\\windows\\installer\\"
+ install_base_dir = start_dir + "\\"
+
+ if not os.path.exists(install_base_dir+env['BF_INSTALLDIR']+'/plugins/include'):
+ os.mkdir(install_base_dir+env['BF_INSTALLDIR']+'/plugins/include')
+
+ for f in glob.glob('source/blender/blenpluginapi/*.h'):
+ shutil.copy(f,install_base_dir+env['BF_INSTALLDIR']+'/plugins/include')
- shutil.copy('source/blender/blenpluginapi/plugin.def',install_base_dir+env['BF_INSTALLDIR']+'/plugins/include/')
-
- os.chdir("release")
- v = open("VERSION")
- version = v.read()[:-1]
- shortver = version.split('.')[0] + version.split('.')[1]
- v.close()
+ shutil.copy('source/blender/blenpluginapi/plugin.def',install_base_dir+env['BF_INSTALLDIR']+'/plugins/include/')
+
+ os.chdir("release")
+ v = open("VERSION")
+ version = v.read()[:-1]
+ shortver = version.split('.')[0] + version.split('.')[1]
+ v.close()
- #### change to suit install dir ####
- inst_dir = install_base_dir + env['BF_INSTALLDIR']
-
- os.chdir("windows/installer")
+ #### change to suit install dir ####
+ inst_dir = install_base_dir + env['BF_INSTALLDIR']
+
+ os.chdir("windows/installer")
- ns = open("00.sconsblender.nsi","r")
+ ns = open("00.sconsblender.nsi","r")
- ns_cnt = str(ns.read())
- ns.close()
+ ns_cnt = str(ns.read())
+ ns.close()
- # do root
- rootlist = []
- rootdir = os.listdir(inst_dir+"\\")
- for rootitem in rootdir:
- if os.path.isdir(inst_dir+"\\"+ rootitem) == 0:
- rootlist.append("File \"" + os.path.normpath(inst_dir) + "\\" + rootitem+"\"")
- rootstring = string.join(rootlist, "\n ")
- rootstring += "\n\n"
- ns_cnt = string.replace(ns_cnt, "[ROOTDIRCONTS]", rootstring)
+ # do root
+ rootlist = []
+ rootdir = os.listdir(inst_dir+"\\")
+ for rootitem in rootdir:
+ if os.path.isdir(inst_dir+"\\"+ rootitem) == 0:
+ rootlist.append("File \"" + os.path.normpath(inst_dir) + "\\" + rootitem+"\"")
+ rootstring = string.join(rootlist, "\n ")
+ rootstring += "\n\n"
+ ns_cnt = string.replace(ns_cnt, "[ROOTDIRCONTS]", rootstring)
- # do delete items
- delrootlist = []
- for rootitem in rootdir:
- if os.path.isdir(inst_dir + rootitem) == 0:
- delrootlist.append("Delete $INSTDIR\\" + rootitem)
- delrootstring = string.join(delrootlist, "\n ")
- delrootstring += "\n"
- ns_cnt = string.replace(ns_cnt, "[DELROOTDIRCONTS]", delrootstring)
+ # do delete items
+ delrootlist = []
+ for rootitem in rootdir:
+ if os.path.isdir(inst_dir + rootitem) == 0:
+ delrootlist.append("Delete $INSTDIR\\" + rootitem)
+ delrootstring = string.join(delrootlist, "\n ")
+ delrootstring += "\n"
+ ns_cnt = string.replace(ns_cnt, "[DELROOTDIRCONTS]", delrootstring)
- # do scripts
- scriptlist = []
- scriptpath = "%s%s" % (inst_dir, "\\.blender\\scripts")
- scriptdir = os.listdir(scriptpath)
- for scriptitem in scriptdir:
- scriptfile = "%s\\%s" % (scriptpath, scriptitem)
- if os.path.isdir(scriptfile) == 0:
- scriptfile = os.path.normpath(scriptfile)
- scriptlist.append("File \"%s\"" % scriptfile)
- scriptstring = string.join(scriptlist, "\n ")
- scriptstring += "\n\n"
- ns_cnt = string.replace(ns_cnt, "[SCRIPTCONTS]", scriptstring)
+ # do scripts
+ scriptlist = []
+ scriptpath = "%s%s" % (inst_dir, "\\.blender\\scripts")
+ scriptdir = os.listdir(scriptpath)
+ for scriptitem in scriptdir:
+ scriptfile = "%s\\%s" % (scriptpath, scriptitem)
+ if os.path.isdir(scriptfile) == 0:
+ scriptfile = os.path.normpath(scriptfile)
+ scriptlist.append("File \"%s\"" % scriptfile)
+ scriptstring = string.join(scriptlist, "\n ")
+ scriptstring += "\n\n"
+ ns_cnt = string.replace(ns_cnt, "[SCRIPTCONTS]", scriptstring)
- # do scripts\bpymodules
- bpymodlist = []
- bpymodpath = "%s%s" % (inst_dir, "\\.blender\\scripts\\bpymodules")
- bpymoddir = os.listdir(bpymodpath)
+ # do scripts\bpymodules
+ bpymodlist = []
+ bpymodpath = "%s%s" % (inst_dir, "\\.blender\\scripts\\bpymodules")
+ bpymoddir = os.listdir(bpymodpath)
- for bpymoditem in bpymoddir:
- bpymodfile = "%s\\%s" % (bpymodpath, bpymoditem)
- if os.path.isdir(bpymodfile) == 0:
- bpymodfile = os.path.normpath(bpymodfile)
- bpymodlist.append("File \"%s\"" % bpymodfile)
- bpymodstring = string.join(bpymodlist, "\n ")
- bpymodstring += "\n\n"
- ns_cnt = string.replace(ns_cnt, "[SCRIPTMODCONTS]", bpymodstring)
+ for bpymoditem in bpymoddir:
+ bpymodfile = "%s\\%s" % (bpymodpath, bpymoditem)
+ if os.path.isdir(bpymodfile) == 0:
+ bpymodfile = os.path.normpath(bpymodfile)
+ bpymodlist.append("File \"%s\"" % bpymodfile)
+ bpymodstring = string.join(bpymodlist, "\n ")
+ bpymodstring += "\n\n"
+ ns_cnt = string.replace(ns_cnt, "[SCRIPTMODCONTS]", bpymodstring)
- # do scripts\bpymodules\colladaimex
- colladalist = []
- bpymodpath = "%s%s" % (inst_dir, "\\.blender\\scripts\\bpymodules\\ColladaImEx")
- bpymoddir = os.listdir(bpymodpath)
+ # do scripts\bpymodules\colladaimex
+ colladalist = []
+ bpymodpath = "%s%s" % (inst_dir, "\\.blender\\scripts\\bpymodules\\ColladaImEx")
+ bpymoddir = os.listdir(bpymodpath)
- for bpymoditem in bpymoddir:
- bpymodfile = "%s\\%s" % (bpymodpath, bpymoditem)
- if os.path.isdir(bpymodfile) == 0:
- bpymodfile=os.path.normpath(bpymodfile)
- colladalist.append("File \"%s\"" % bpymodfile)
- bpymodstring = string.join(colladalist, "\n ")
- bpymodstring += "\n\n"
- ns_cnt = string.replace(ns_cnt, "[SCRIPTMODCOLLADACONT]", bpymodstring)
+ for bpymoditem in bpymoddir:
+ bpymodfile = "%s\\%s" % (bpymodpath, bpymoditem)
+ if os.path.isdir(bpymodfile) == 0:
+ bpymodfile=os.path.normpath(bpymodfile)
+ colladalist.append("File \"%s\"" % bpymodfile)
+ bpymodstring = string.join(colladalist, "\n ")
+ bpymodstring += "\n\n"
+ ns_cnt = string.replace(ns_cnt, "[SCRIPTMODCOLLADACONT]", bpymodstring)
- # do scripts\bpydata
- bpydatalist = []
- bpydatapath = "%s%s" % (inst_dir, "\\.blender\\scripts\\bpydata")
- bpydatadir = os.listdir(bpydatapath)
- for bpydataitem in bpydatadir:
- bpydatafile = "%s\\%s" % (bpydatapath, bpydataitem)
- if os.path.isdir(bpydatafile) == 0:
- bpydatalist.append("File \"%s\"" % bpydatafile)
- bpydatastring = string.join(bpydatalist, "\n ")
- bpydatastring += "\n\n"
- ns_cnt = string.replace(ns_cnt, "[SCRIPTDATACONTS]", bpydatastring)
+ # do scripts\bpydata
+ bpydatalist = []
+ bpydatapath = "%s%s" % (inst_dir, "\\.blender\\scripts\\bpydata")
+ bpydatadir = os.listdir(bpydatapath)
+ for bpydataitem in bpydatadir:
+ bpydatafile = "%s\\%s" % (bpydatapath, bpydataitem)
+ if os.path.isdir(bpydatafile) == 0:
+ bpydatalist.append("File \"%s\"" % bpydatafile)
+ bpydatastring = string.join(bpydatalist, "\n ")
+ bpydatastring += "\n\n"
+ ns_cnt = string.replace(ns_cnt, "[SCRIPTDATACONTS]", bpydatastring)
- # do plugins\include
- plugincludelist = []
- plugincludepath = "%s%s" % (inst_dir, "\\plugins\\include")
- plugincludedir = os.listdir(plugincludepath)
- for plugincludeitem in plugincludedir:
- plugincludefile = "%s\\%s" % (plugincludepath, plugincludeitem)
- if os.path.isdir(plugincludefile) == 0:
- if plugincludefile.find('.h') or plugincludefile.find('.DEF'):
- plugincludefile = os.path.normpath(plugincludefile)
- plugincludelist.append("File \"%s\"" % plugincludefile)
- plugincludestring = string.join(plugincludelist, "\n ")
- plugincludestring += "\n\n"
- ns_cnt = string.replace(ns_cnt, "[PLUGINCONTS]", plugincludestring)
+ # do plugins\include
+ plugincludelist = []
+ plugincludepath = "%s%s" % (inst_dir, "\\plugins\\include")
+ plugincludedir = os.listdir(plugincludepath)
+ for plugincludeitem in plugincludedir:
+ plugincludefile = "%s\\%s" % (plugincludepath, plugincludeitem)
+ if os.path.isdir(plugincludefile) == 0:
+ if plugincludefile.find('.h') or plugincludefile.find('.DEF'):
+ plugincludefile = os.path.normpath(plugincludefile)
+ plugincludelist.append("File \"%s\"" % plugincludefile)
+ plugincludestring = string.join(plugincludelist, "\n ")
+ plugincludestring += "\n\n"
+ ns_cnt = string.replace(ns_cnt, "[PLUGINCONTS]", plugincludestring)
- # do scripts\bpydata\config
- cfglist = []
- cfgpath = "%s%s" % (inst_dir, "\\.blender\\scripts\\bpydata\\config")
- cfgdir = os.listdir(cfgpath)
- for cfgitem in cfgdir:
- cfgfile = "%s\\%s" % (cfgpath, cfgitem)
- if os.path.isdir(cfgfile) == 0:
- cfglist.append("File \"%s\"" % cfgfile)
- cfgstring = string.join(cfglist, "\n ")
- cfgstring += "\n\n"
- ns_cnt = string.replace(ns_cnt, "[SCRIPTDATACFGCONTS]", cfgstring)
+ # do scripts\bpydata\config
+ cfglist = []
+ cfgpath = "%s%s" % (inst_dir, "\\.blender\\scripts\\bpydata\\config")
+ cfgdir = os.listdir(cfgpath)
+ for cfgitem in cfgdir:
+ cfgfile = "%s\\%s" % (cfgpath, cfgitem)
+ if os.path.isdir(cfgfile) == 0:
+ cfglist.append("File \"%s\"" % cfgfile)
+ cfgstring = string.join(cfglist, "\n ")
+ cfgstring += "\n\n"
+ ns_cnt = string.replace(ns_cnt, "[SCRIPTDATACFGCONTS]", cfgstring)
- # do dotblender
- dotblendlist = []
- dotblenddir = os.listdir(inst_dir+"\\.blender")
- for dotblenditem in dotblenddir:
- if os.path.isdir(inst_dir + "\\.blender\\" + dotblenditem) == 0:
- dotblendlist.append("File \"" + os.path.normpath(inst_dir) + "\\.blender\\" +
- dotblenditem+"\"")
- dotblendstring = string.join(dotblendlist, "\n ")
- dotblendstring += "\n\n"
- ns_cnt = string.replace(ns_cnt, "[DOTBLENDERCONTS]", dotblendstring)
+ # do dotblender
+ dotblendlist = []
+ dotblenddir = os.listdir(inst_dir+"\\.blender")
+ for dotblenditem in dotblenddir:
+ if os.path.isdir(inst_dir + "\\.blender\\" + dotblenditem) == 0:
+ dotblendlist.append("File \"" + os.path.normpath(inst_dir) + "\\.blender\\" +
+ dotblenditem+"\"")
+ dotblendstring = string.join(dotblendlist, "\n ")
+ dotblendstring += "\n\n"
+ ns_cnt = string.replace(ns_cnt, "[DOTBLENDERCONTS]", dotblendstring)
- # do language files
- langlist = []
- langfiles = []
- langdir = os.listdir(inst_dir + "\\.blender\\locale")
- for langitem in langdir:
- if os.path.isdir(inst_dir + "\\.blender\\locale\\" + langitem) == 1:
- langfiles.append("SetOutPath $BLENDERHOME\\.blender\\locale\\" + langitem + "\\LC_MESSAGES")
- langfiles.append("File \"" + os.path.normpath(inst_dir) + "\\.blender\\locale\\"
- + langitem + "\\LC_MESSAGES\\blender.mo\"")
- langstring = string.join(langfiles, "\n ")
- langstring += "\n\n"
- ns_cnt = string.replace(ns_cnt, "[LANGUAGECONTS]", langstring)
+ # do language files
+ langlist = []
+ langfiles = []
+ langdir = os.listdir(inst_dir + "\\.blender\\locale")
+ for langitem in langdir:
+ if os.path.isdir(inst_dir + "\\.blender\\locale\\" + langitem) == 1:
+ langfiles.append("SetOutPath $BLENDERHOME\\.blender\\locale\\" + langitem + "\\LC_MESSAGES")
+ langfiles.append("File \"" + os.path.normpath(inst_dir) + "\\.blender\\locale\\"
+ + langitem + "\\LC_MESSAGES\\blender.mo\"")
+ langstring = string.join(langfiles, "\n ")
+ langstring += "\n\n"
+ ns_cnt = string.replace(ns_cnt, "[LANGUAGECONTS]", langstring)
- # var replacements
- ns_cnt = string.replace(ns_cnt, "DISTDIR", os.path.normpath(inst_dir+"\\"))
- ns_cnt = string.replace(ns_cnt, "SHORTVER", shortver)
- ns_cnt = string.replace(ns_cnt, "VERSION", version)
- ns_cnt = string.replace(ns_cnt, "RELDIR", os.path.normpath(rel_dir))
+ # var replacements
+ ns_cnt = string.replace(ns_cnt, "DISTDIR", os.path.normpath(inst_dir+"\\"))
+ ns_cnt = string.replace(ns_cnt, "SHORTVER", shortver)
+ ns_cnt = string.replace(ns_cnt, "VERSION", version)
+ ns_cnt = string.replace(ns_cnt, "RELDIR", os.path.normpath(rel_dir))
- tmpnsi = os.path.normpath(install_base_dir+os.sep+env['BF_BUILDDIR']+os.sep+"00.blender_tmp.nsi")
- new_nsis = open(tmpnsi, 'w')
- new_nsis.write(ns_cnt)
- new_nsis.close()
+ tmpnsi = os.path.normpath(install_base_dir+os.sep+env['BF_BUILDDIR']+os.sep+"00.blender_tmp.nsi")
+ new_nsis = open(tmpnsi, 'w')
+ new_nsis.write(ns_cnt)
+ new_nsis.close()
- os.chdir(start_dir)
+ os.chdir(start_dir)
- cmdline = "makensis " + "\""+tmpnsi+"\""
+ cmdline = "makensis " + "\""+tmpnsi+"\""
- startupinfo = subprocess.STARTUPINFO()
- startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
- proc = subprocess.Popen(cmdline, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
- stderr=subprocess.PIPE, startupinfo=startupinfo, shell = True)
- data, err = proc.communicate()
- rv = proc.wait()
+ startupinfo = subprocess.STARTUPINFO()
+ startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
+ proc = subprocess.Popen(cmdline, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE, startupinfo=startupinfo, shell = True)
+ data, err = proc.communicate()
+ rv = proc.wait()
- if rv != 0:
- print
- print data.strip().split("\n")[-1]
- return rv
+ if rv != 0:
+ print
+ print data.strip().split("\n")[-1]
+ return rv
diff --git a/tools/crossmingw.py b/tools/crossmingw.py
index 1c8924ca7f6..299bfca929d 100755
--- a/tools/crossmingw.py
+++ b/tools/crossmingw.py
@@ -109,7 +109,7 @@ def shlib_emitter(target, source, env):
#JB """ I'm blindly susbstuting lines from the mingw.py
#JB file becase these lines cause python errors here. """
#JB shlib_action = SCons.Action.Action(shlib_generator,generator=1)
-shlib_action = SCons.Action.CommandGenerator(shlib_generator)
+shlib_action = SCons.Action.CommandGeneratorAction(shlib_generator)
res_action = SCons.Action.Action('$RCCOM', '$RCCOMSTR')