From 9111213a98760edb2f379c807efa098ed9d2b306 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Thu, 10 Nov 2011 10:34:26 +0000 Subject: [PATCH 01/22] Whitespace tweaks --- SConstruct | 2 +- build_files/scons/tools/mstoolkit.py | 444 +++++++++++++-------------- 2 files changed, 223 insertions(+), 223 deletions(-) diff --git a/SConstruct b/SConstruct index 5bc76c57091..161bbbc0378 100644 --- a/SConstruct +++ b/SConstruct @@ -162,7 +162,7 @@ if cxx: if sys.platform=='win32': if env['CC'] in ['cl', 'cl.exe']: - platform = 'win64-vc' if bitness == 64 else 'win32-vc' + platform = 'win64-vc' if bitness == 64 else 'win32-vc' elif env['CC'] in ['gcc']: platform = 'win32-mingw' diff --git a/build_files/scons/tools/mstoolkit.py b/build_files/scons/tools/mstoolkit.py index 4eeefa5ed9d..68e8c4b6475 100644 --- a/build_files/scons/tools/mstoolkit.py +++ b/build_files/scons/tools/mstoolkit.py @@ -49,198 +49,198 @@ CSuffixes = ['.c', '.C'] CXXSuffixes = ['.cc', '.cpp', '.cxx', '.c++', '.C++'] def get_msvctoolkit_paths(): - """Return a 4-tuple of (INCLUDE, LIB, PATH, TOOLKIT) as the values of those - three environment variables that should be set in order to execute - the MSVC .NET tools properly, if the information wasn't available - from the registry.""" + """Return a 4-tuple of (INCLUDE, LIB, PATH, TOOLKIT) as the values of those + three environment variables that should be set in order to execute + the MSVC .NET tools properly, if the information wasn't available + from the registry.""" - MSToolkitDir = None - paths = {} - exe_path = '' - lib_path = '' - include_path = '' + MSToolkitDir = None + paths = {} + exe_path = '' + lib_path = '' + include_path = '' - # First, we get the shell folder for this user: - if not SCons.Util.can_read_reg: - raise SCons.Errors.InternalError, "No Windows registry module was found" + # First, we get the shell folder for this user: + if not SCons.Util.can_read_reg: + raise SCons.Errors.InternalError, "No Windows registry module was found" - # look for toolkit - if os.environ.has_key('VCToolkitInstallDir'): - MSToolkitDir = os.path.normpath(os.environ['VCToolkitInstallDir']) - else: - # last resort -- default install location - MSToolkitDir = r'C:\Program Files\Microsoft Visual C++ Toolkit 2003' + # look for toolkit + if os.environ.has_key('VCToolkitInstallDir'): + MSToolkitDir = os.path.normpath(os.environ['VCToolkitInstallDir']) + else: + # last resort -- default install location + MSToolkitDir = r'C:\Program Files\Microsoft Visual C++ Toolkit 2003' - # look for platform sdk - if os.environ.has_key('MSSdk'): - PlatformSDKDir = os.path.normpath(os.environ['MSSdk']) - else: - try: - PlatformSDKDir = SCons.Util.RegGetValue(SCons.Util.HKEY_LOCAL_MACHINE, r'SOFTWARE\Microsoft\MicrosoftSDK\Directories\Install Dir')[0] - PlatformSDKDir = str(PlatformSDKDir) - except SCons.Util.RegError: - raise SCons.Errors.InternalError, "The Platform SDK directory was not found in the registry or in the `MSSdk` environment variable." + # look for platform sdk + if os.environ.has_key('MSSdk'): + PlatformSDKDir = os.path.normpath(os.environ['MSSdk']) + else: + try: + PlatformSDKDir = SCons.Util.RegGetValue(SCons.Util.HKEY_LOCAL_MACHINE, r'SOFTWARE\Microsoft\MicrosoftSDK\Directories\Install Dir')[0] + PlatformSDKDir = str(PlatformSDKDir) + except SCons.Util.RegError: + raise SCons.Errors.InternalError, "The Platform SDK directory was not found in the registry or in the `MSSdk` environment variable." - # look for DX Sdk (expecting DX9) - # dxsdk docs have a directory key, look for it, extract path - #dxsdkdocs = "" - DXsdkDir = "" - #try: - # dxsdkdocs = SCons.Util.RegGetValue(SCons.Util.HKEY_LOCAL_MACHINE, r'SOFTWARE\Microsoft\DirectX SDK\DX9SDK Doc Path') - #except SCons.Util.RegError: - # raise SCons.Errors.InternalError, "The DXSDK directory was not found in the registry." - if os.environ.has_key('DXSDK_DIR'): - DXsdkDir = os.path.normpath(os.environ['DXSDK_DIR']) + # look for DX Sdk (expecting DX9) + # dxsdk docs have a directory key, look for it, extract path + #dxsdkdocs = "" + DXsdkDir = "" + #try: + # dxsdkdocs = SCons.Util.RegGetValue(SCons.Util.HKEY_LOCAL_MACHINE, r'SOFTWARE\Microsoft\DirectX SDK\DX9SDK Doc Path') + #except SCons.Util.RegError: + # raise SCons.Errors.InternalError, "The DXSDK directory was not found in the registry." + if os.environ.has_key('DXSDK_DIR'): + DXsdkDir = os.path.normpath(os.environ['DXSDK_DIR']) - #DXsdkDir = os.path.split(dxsdkdocs[0])[0] - DXsdkDir = os.path.split(DXsdkDir)[0] + #DXsdkDir = os.path.split(dxsdkdocs[0])[0] + DXsdkDir = os.path.split(DXsdkDir)[0] - include_path = r'%s\include;%s\include;%s\include' % (MSToolkitDir, PlatformSDKDir, DXsdkDir) - lib_path = r'%s\lib;%s\lib;%s\lib' % (MSToolkitDir, PlatformSDKDir, DXsdkDir) - exe_path = r'%s\bin;%s\bin\win95;%s\bin' % (MSToolkitDir, PlatformSDKDir, PlatformSDKDir) - return (include_path, lib_path, exe_path, PlatformSDKDir) + include_path = r'%s\include;%s\include;%s\include' % (MSToolkitDir, PlatformSDKDir, DXsdkDir) + lib_path = r'%s\lib;%s\lib;%s\lib' % (MSToolkitDir, PlatformSDKDir, DXsdkDir) + exe_path = r'%s\bin;%s\bin\win95;%s\bin' % (MSToolkitDir, PlatformSDKDir, PlatformSDKDir) + return (include_path, lib_path, exe_path, PlatformSDKDir) def validate_vars(env): - """Validate the PDB, PCH, and PCHSTOP construction variables.""" - if env.has_key('PCH') and env['PCH']: - if not env.has_key('PCHSTOP'): - raise SCons.Errors.UserError, "The PCHSTOP construction must be defined if PCH is defined." - if not SCons.Util.is_String(env['PCHSTOP']): - raise SCons.Errors.UserError, "The PCHSTOP construction variable must be a string: %r"%env['PCHSTOP'] + """Validate the PDB, PCH, and PCHSTOP construction variables.""" + if env.has_key('PCH') and env['PCH']: + if not env.has_key('PCHSTOP'): + raise SCons.Errors.UserError, "The PCHSTOP construction must be defined if PCH is defined." + if not SCons.Util.is_String(env['PCHSTOP']): + raise SCons.Errors.UserError, "The PCHSTOP construction variable must be a string: %r"%env['PCHSTOP'] def pch_emitter(target, source, env): - """Sets up the PDB dependencies for a pch file, and adds the object - file target.""" + """Sets up the PDB dependencies for a pch file, and adds the object + file target.""" - validate_vars(env) + validate_vars(env) - pch = None - obj = None + pch = None + obj = None - for t in target: - if SCons.Util.splitext(str(t))[1] == '.pch': - pch = t - if SCons.Util.splitext(str(t))[1] == '.obj': - obj = t + for t in target: + if SCons.Util.splitext(str(t))[1] == '.pch': + pch = t + if SCons.Util.splitext(str(t))[1] == '.obj': + obj = t - if not obj: - obj = SCons.Util.splitext(str(pch))[0]+'.obj' + if not obj: + obj = SCons.Util.splitext(str(pch))[0]+'.obj' - target = [pch, obj] # pch must be first, and obj second for the PCHCOM to work + target = [pch, obj] # pch must be first, and obj second for the PCHCOM to work - if env.has_key('PDB') and env['PDB']: - env.SideEffect(env['PDB'], target) - env.Precious(env['PDB']) + if env.has_key('PDB') and env['PDB']: + env.SideEffect(env['PDB'], target) + env.Precious(env['PDB']) - return (target, source) + return (target, source) def object_emitter(target, source, env, parent_emitter): - """Sets up the PDB and PCH dependencies for an object file.""" + """Sets up the PDB and PCH dependencies for an object file.""" - validate_vars(env) + validate_vars(env) - parent_emitter(target, source, env) + parent_emitter(target, source, env) - if env.has_key('PDB') and env['PDB']: - env.SideEffect(env['PDB'], target) - env.Precious(env['PDB']) + if env.has_key('PDB') and env['PDB']: + env.SideEffect(env['PDB'], target) + env.Precious(env['PDB']) - if env.has_key('PCH') and env['PCH']: - env.Depends(target, env['PCH']) + if env.has_key('PCH') and env['PCH']: + env.Depends(target, env['PCH']) - return (target, source) + return (target, source) def static_object_emitter(target, source, env): - return object_emitter(target, source, env, - SCons.Defaults.StaticObjectEmitter) + return object_emitter(target, source, env, + SCons.Defaults.StaticObjectEmitter) def shared_object_emitter(target, source, env): - return object_emitter(target, source, env, - SCons.Defaults.SharedObjectEmitter) + return object_emitter(target, source, env, + SCons.Defaults.SharedObjectEmitter) pch_builder = SCons.Builder.Builder(action='$PCHCOM', suffix='.pch', emitter=pch_emitter) res_builder = SCons.Builder.Builder(action='$RCCOM', suffix='.res') def pdbGenerator(env, target, source, for_signature): - if target and env.has_key('PDB') and env['PDB']: - return ['/PDB:%s'%target[0].File(env['PDB']).get_string(for_signature), - '/DEBUG'] + if target and env.has_key('PDB') and env['PDB']: + return ['/PDB:%s'%target[0].File(env['PDB']).get_string(for_signature), + '/DEBUG'] def win32ShlinkTargets(target, source, env, for_signature): - listCmd = [] - dll = env.FindIxes(target, 'SHLIBPREFIX', 'SHLIBSUFFIX') - if dll: listCmd.append("/out:%s"%dll.get_string(for_signature)) + listCmd = [] + dll = env.FindIxes(target, 'SHLIBPREFIX', 'SHLIBSUFFIX') + if dll: listCmd.append("/out:%s"%dll.get_string(for_signature)) - implib = env.FindIxes(target, 'LIBPREFIX', 'LIBSUFFIX') - if implib: listCmd.append("/implib:%s"%implib.get_string(for_signature)) + implib = env.FindIxes(target, 'LIBPREFIX', 'LIBSUFFIX') + if implib: listCmd.append("/implib:%s"%implib.get_string(for_signature)) - return listCmd + return listCmd def win32ShlinkSources(target, source, env, for_signature): - listCmd = [] + listCmd = [] - deffile = env.FindIxes(source, "WIN32DEFPREFIX", "WIN32DEFSUFFIX") - for src in source: - if src == deffile: - # Treat this source as a .def file. - listCmd.append("/def:%s" % src.get_string(for_signature)) - else: - # Just treat it as a generic source file. - listCmd.append(src) - return listCmd + deffile = env.FindIxes(source, "WIN32DEFPREFIX", "WIN32DEFSUFFIX") + for src in source: + if src == deffile: + # Treat this source as a .def file. + listCmd.append("/def:%s" % src.get_string(for_signature)) + else: + # Just treat it as a generic source file. + listCmd.append(src) + return listCmd def win32LibEmitter(target, source, env): - # SCons.Tool.msvc.validate_vars(env) + # SCons.Tool.msvc.validate_vars(env) - dll = env.FindIxes(target, "SHLIBPREFIX", "SHLIBSUFFIX") - no_import_lib = env.get('no_import_lib', 0) + dll = env.FindIxes(target, "SHLIBPREFIX", "SHLIBSUFFIX") + no_import_lib = env.get('no_import_lib', 0) - if not dll: - raise SCons.Errors.UserError, "A shared library should have exactly one target with the suffix: %s" % env.subst("$SHLIBSUFFIX") + if not dll: + raise SCons.Errors.UserError, "A shared library should have exactly one target with the suffix: %s" % env.subst("$SHLIBSUFFIX") - if env.get("WIN32_INSERT_DEF", 0) and \ - not env.FindIxes(source, "WIN32DEFPREFIX", "WIN32DEFSUFFIX"): + if env.get("WIN32_INSERT_DEF", 0) and \ + not env.FindIxes(source, "WIN32DEFPREFIX", "WIN32DEFSUFFIX"): - # append a def file to the list of sources - source.append(env.ReplaceIxes(dll, - "SHLIBPREFIX", "SHLIBSUFFIX", - "WIN32DEFPREFIX", "WIN32DEFSUFFIX")) + # append a def file to the list of sources + source.append(env.ReplaceIxes(dll, + "SHLIBPREFIX", "SHLIBSUFFIX", + "WIN32DEFPREFIX", "WIN32DEFSUFFIX")) - if env.has_key('PDB') and env['PDB']: - env.SideEffect(env['PDB'], target) - env.Precious(env['PDB']) + if env.has_key('PDB') and env['PDB']: + env.SideEffect(env['PDB'], target) + env.Precious(env['PDB']) - if not no_import_lib and \ - not env.FindIxes(target, "LIBPREFIX", "LIBSUFFIX"): - # Append an import library to the list of targets. - target.append(env.ReplaceIxes(dll, - "SHLIBPREFIX", "SHLIBSUFFIX", - "LIBPREFIX", "LIBSUFFIX")) - # and .exp file is created if there are exports from a DLL - target.append(env.ReplaceIxes(dll, - "SHLIBPREFIX", "SHLIBSUFFIX", - "WIN32EXPPREFIX", "WIN32EXPSUFFIX")) + if not no_import_lib and \ + not env.FindIxes(target, "LIBPREFIX", "LIBSUFFIX"): + # Append an import library to the list of targets. + target.append(env.ReplaceIxes(dll, + "SHLIBPREFIX", "SHLIBSUFFIX", + "LIBPREFIX", "LIBSUFFIX")) + # and .exp file is created if there are exports from a DLL + target.append(env.ReplaceIxes(dll, + "SHLIBPREFIX", "SHLIBSUFFIX", + "WIN32EXPPREFIX", "WIN32EXPSUFFIX")) - return (target, source) + return (target, source) def prog_emitter(target, source, env): - #SCons.Tool.msvc.validate_vars(env) + #SCons.Tool.msvc.validate_vars(env) - if env.has_key('PDB') and env['PDB']: - env.SideEffect(env['PDB'], target) - env.Precious(env['PDB']) + if env.has_key('PDB') and env['PDB']: + env.SideEffect(env['PDB'], target) + env.Precious(env['PDB']) - return (target,source) + return (target,source) def RegServerFunc(target, source, env): - if env.has_key('register') and env['register']: - ret = regServerAction([target[0]], [source[0]], env) - if ret: - raise SCons.Errors.UserError, "Unable to register %s" % target[0] - else: - print "Registered %s sucessfully" % target[0] - return ret - return 0 + if env.has_key('register') and env['register']: + ret = regServerAction([target[0]], [source[0]], env) + if ret: + raise SCons.Errors.UserError, "Unable to register %s" % target[0] + else: + print "Registered %s sucessfully" % target[0] + return ret + return 0 regServerAction = SCons.Action.Action("$REGSVRCOM") regServerCheck = SCons.Action.Action(RegServerFunc, None) @@ -248,106 +248,106 @@ shlibLinkAction = SCons.Action.Action('${TEMPFILE("$SHLINK $SHLINKFLAGS $_SHLINK compositeLinkAction = shlibLinkAction + regServerCheck def generate(env): - """Add Builders and construction variables for MSVC++ to an Environment.""" - static_obj, shared_obj = SCons.Tool.createObjBuilders(env) + """Add Builders and construction variables for MSVC++ to an Environment.""" + static_obj, shared_obj = SCons.Tool.createObjBuilders(env) - for suffix in CSuffixes: - static_obj.add_action(suffix, SCons.Defaults.CAction) - shared_obj.add_action(suffix, SCons.Defaults.ShCAction) + for suffix in CSuffixes: + static_obj.add_action(suffix, SCons.Defaults.CAction) + shared_obj.add_action(suffix, SCons.Defaults.ShCAction) - for suffix in CXXSuffixes: - static_obj.add_action(suffix, SCons.Defaults.CXXAction) - shared_obj.add_action(suffix, SCons.Defaults.ShCXXAction) + for suffix in CXXSuffixes: + static_obj.add_action(suffix, SCons.Defaults.CXXAction) + shared_obj.add_action(suffix, SCons.Defaults.ShCXXAction) - SCons.Tool.createStaticLibBuilder(env) - SCons.Tool.createSharedLibBuilder(env) - SCons.Tool.createProgBuilder(env) + SCons.Tool.createStaticLibBuilder(env) + SCons.Tool.createSharedLibBuilder(env) + SCons.Tool.createProgBuilder(env) - env['CCPDBFLAGS'] = SCons.Util.CLVar(['${(PDB and "/Zi /Fd%s"%File(PDB)) or ""}']) - env['CCPCHFLAGS'] = SCons.Util.CLVar(['${(PCH and "/Yu%s /Fp%s"%(PCHSTOP or "",File(PCH))) or ""}']) - env['CCCOMFLAGS'] = '$CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS /c $SOURCES /Fo$TARGET $CCPCHFLAGS $CCPDBFLAGS' - env['CC'] = 'cl' - env['CCFLAGS'] = SCons.Util.CLVar('/nologo') - env['CCCOM'] = '$CC $CCFLAGS $CCCOMFLAGS' - env['SHCC'] = '$CC' - env['SHCCFLAGS'] = SCons.Util.CLVar('$CCFLAGS') - env['SHCCCOM'] = '$SHCC $SHCCFLAGS $CCCOMFLAGS' - env['CXX'] = '$CC' - env['CXXFLAGS'] = SCons.Util.CLVar('$CCFLAGS $( /TP $)') - env['CXXCOM'] = '$CXX $CXXFLAGS $CCCOMFLAGS' - env['SHCXX'] = '$CXX' - env['SHCXXFLAGS'] = SCons.Util.CLVar('$CXXFLAGS') - env['SHCXXCOM'] = '$SHCXX $SHCXXFLAGS $CCCOMFLAGS' - env['CPPDEFPREFIX'] = '/D' - env['CPPDEFSUFFIX'] = '' - env['INCPREFIX'] = '/I' - env['INCSUFFIX'] = '' - env['OBJEMITTER'] = static_object_emitter - env['SHOBJEMITTER'] = shared_object_emitter - env['STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME'] = 1 + env['CCPDBFLAGS'] = SCons.Util.CLVar(['${(PDB and "/Zi /Fd%s"%File(PDB)) or ""}']) + env['CCPCHFLAGS'] = SCons.Util.CLVar(['${(PCH and "/Yu%s /Fp%s"%(PCHSTOP or "",File(PCH))) or ""}']) + env['CCCOMFLAGS'] = '$CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS /c $SOURCES /Fo$TARGET $CCPCHFLAGS $CCPDBFLAGS' + env['CC'] = 'cl' + env['CCFLAGS'] = SCons.Util.CLVar('/nologo') + env['CCCOM'] = '$CC $CCFLAGS $CCCOMFLAGS' + env['SHCC'] = '$CC' + env['SHCCFLAGS'] = SCons.Util.CLVar('$CCFLAGS') + env['SHCCCOM'] = '$SHCC $SHCCFLAGS $CCCOMFLAGS' + env['CXX'] = '$CC' + env['CXXFLAGS'] = SCons.Util.CLVar('$CCFLAGS $( /TP $)') + env['CXXCOM'] = '$CXX $CXXFLAGS $CCCOMFLAGS' + env['SHCXX'] = '$CXX' + env['SHCXXFLAGS'] = SCons.Util.CLVar('$CXXFLAGS') + env['SHCXXCOM'] = '$SHCXX $SHCXXFLAGS $CCCOMFLAGS' + env['CPPDEFPREFIX'] = '/D' + env['CPPDEFSUFFIX'] = '' + env['INCPREFIX'] = '/I' + env['INCSUFFIX'] = '' + env['OBJEMITTER'] = static_object_emitter + env['SHOBJEMITTER'] = shared_object_emitter + env['STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME'] = 1 - env['RC'] = 'rc' - env['RCFLAGS'] = SCons.Util.CLVar('') - env['RCCOM'] = '$RC $_CPPDEFFLAGS $_CPPINCFLAGS $RCFLAGS /fo$TARGET $SOURCES' - CScan = env.get_scanner('.c') - if CScan: - CScan.add_skey('.rc') - env['BUILDERS']['RES'] = res_builder + env['RC'] = 'rc' + env['RCFLAGS'] = SCons.Util.CLVar('') + env['RCCOM'] = '$RC $_CPPDEFFLAGS $_CPPINCFLAGS $RCFLAGS /fo$TARGET $SOURCES' + CScan = env.get_scanner('.c') + if CScan: + CScan.add_skey('.rc') + env['BUILDERS']['RES'] = res_builder - include_path, lib_path, exe_path, sdk_path = get_msvctoolkit_paths() - env.PrependENVPath('INCLUDE', include_path) - env.PrependENVPath('LIB', lib_path) - env.PrependENVPath('PATH', exe_path) + include_path, lib_path, exe_path, sdk_path = get_msvctoolkit_paths() + env.PrependENVPath('INCLUDE', include_path) + env.PrependENVPath('LIB', lib_path) + env.PrependENVPath('PATH', exe_path) - env['ENV']['CPU'] = 'i386' - env['ENV']['MSSDK'] = sdk_path - env['ENV']['BkOffice'] = sdk_path - env['ENV']['Basemake'] = sdk_path + "\\Include\\BKOffice.Mak" - env['ENV']['INETSDK'] = sdk_path - env['ENV']['MSSDK'] = sdk_path - env['ENV']['MSTOOLS'] = sdk_path - env['ENV']['TARGETOS'] = 'WINNT' - env['ENV']['APPVER'] = '5.0' + env['ENV']['CPU'] = 'i386' + env['ENV']['MSSDK'] = sdk_path + env['ENV']['BkOffice'] = sdk_path + env['ENV']['Basemake'] = sdk_path + "\\Include\\BKOffice.Mak" + env['ENV']['INETSDK'] = sdk_path + env['ENV']['MSSDK'] = sdk_path + env['ENV']['MSTOOLS'] = sdk_path + env['ENV']['TARGETOS'] = 'WINNT' + env['ENV']['APPVER'] = '5.0' - env['CFILESUFFIX'] = '.c' - env['CXXFILESUFFIX'] = '.cc' + env['CFILESUFFIX'] = '.c' + env['CXXFILESUFFIX'] = '.cc' - env['PCHCOM'] = '$CXX $CXXFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS /c $SOURCES /Fo${TARGETS[1]} /Yc$PCHSTOP /Fp${TARGETS[0]} $CCPDBFLAGS' - env['BUILDERS']['PCH'] = pch_builder + env['PCHCOM'] = '$CXX $CXXFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS /c $SOURCES /Fo${TARGETS[1]} /Yc$PCHSTOP /Fp${TARGETS[0]} $CCPDBFLAGS' + env['BUILDERS']['PCH'] = pch_builder - env['AR'] = 'lib.exe' #'"' +sdk_path + '\\bin\\Win64\\lib.exe"' - env['ARFLAGS'] = SCons.Util.CLVar('/nologo') - env['ARCOM'] = "${TEMPFILE('$AR $ARFLAGS /OUT:$TARGET $SOURCES')}" + env['AR'] = 'lib.exe' #'"' +sdk_path + '\\bin\\Win64\\lib.exe"' + env['ARFLAGS'] = SCons.Util.CLVar('/nologo') + env['ARCOM'] = "${TEMPFILE('$AR $ARFLAGS /OUT:$TARGET $SOURCES')}" - env['SHLINK'] = '$LINK' - env['SHLINKFLAGS'] = SCons.Util.CLVar('$LINKFLAGS /dll') - env['_SHLINK_TARGETS'] = win32ShlinkTargets - env['_SHLINK_SOURCES'] = win32ShlinkSources - env['SHLINKCOM'] = compositeLinkAction - env['SHLIBEMITTER']= win32LibEmitter - env['LINK'] = 'link.exe' #'"' +sdk_path + '\\bin\\Win64\\' + 'link.exe"' - env['LINKFLAGS'] = SCons.Util.CLVar('/nologo') - env['_PDB'] = pdbGenerator - env["TEMPFILE"] = SCons.Platform.win32.TempFileMunge - env['LINKCOM'] = '${TEMPFILE("$LINK $LINKFLAGS /OUT:$TARGET $( $_LIBDIRFLAGS $) $_LIBFLAGS $_PDB $SOURCES")}' - env['PROGEMITTER'] = prog_emitter - env['LIBDIRPREFIX']='/LIBPATH:' - env['LIBDIRSUFFIX']='' - env['LIBLINKPREFIX']='' - env['LIBLINKSUFFIX']='$LIBSUFFIX' + env['SHLINK'] = '$LINK' + env['SHLINKFLAGS'] = SCons.Util.CLVar('$LINKFLAGS /dll') + env['_SHLINK_TARGETS'] = win32ShlinkTargets + env['_SHLINK_SOURCES'] = win32ShlinkSources + env['SHLINKCOM'] = compositeLinkAction + env['SHLIBEMITTER']= win32LibEmitter + env['LINK'] = 'link.exe' #'"' +sdk_path + '\\bin\\Win64\\' + 'link.exe"' + env['LINKFLAGS'] = SCons.Util.CLVar('/nologo') + env['_PDB'] = pdbGenerator + env["TEMPFILE"] = SCons.Platform.win32.TempFileMunge + env['LINKCOM'] = '${TEMPFILE("$LINK $LINKFLAGS /OUT:$TARGET $( $_LIBDIRFLAGS $) $_LIBFLAGS $_PDB $SOURCES")}' + env['PROGEMITTER'] = prog_emitter + env['LIBDIRPREFIX']='/LIBPATH:' + env['LIBDIRSUFFIX']='' + env['LIBLINKPREFIX']='' + env['LIBLINKSUFFIX']='$LIBSUFFIX' - env['WIN32DEFPREFIX'] = '' - env['WIN32DEFSUFFIX'] = '.def' - env['WIN32_INSERT_DEF'] = 0 + env['WIN32DEFPREFIX'] = '' + env['WIN32DEFSUFFIX'] = '.def' + env['WIN32_INSERT_DEF'] = 0 - env['WIN32EXPPREFIX'] = '' - env['WIN32EXPSUFFIX'] = '.exp' + env['WIN32EXPPREFIX'] = '' + env['WIN32EXPSUFFIX'] = '.exp' - env['REGSVRACTION'] = regServerCheck - env['REGSVR'] = os.path.join(SCons.Platform.win32.get_system_root(),'System32','regsvr32') - env['REGSVRFLAGS'] = '/s ' - env['REGSVRCOM'] = '$REGSVR $REGSVRFLAGS $TARGET' + env['REGSVRACTION'] = regServerCheck + env['REGSVR'] = os.path.join(SCons.Platform.win32.get_system_root(),'System32','regsvr32') + env['REGSVRFLAGS'] = '/s ' + env['REGSVRCOM'] = '$REGSVR $REGSVRFLAGS $TARGET' def exists(env): - return env.Detect('cl') + return env.Detect('cl') From 662549b4ec29ae285af0a8c98450fb85e2636d30 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Thu, 10 Nov 2011 11:33:57 +0000 Subject: [PATCH 02/22] Restored GPL header of NOD_composite.h (funny s&r ?!?). --- source/blender/nodes/NOD_composite.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/blender/nodes/NOD_composite.h b/source/blender/nodes/NOD_composite.h index f1415a8c8f0..6deea004417 100644 --- a/source/blender/nodes/NOD_composite.h +++ b/source/blender/nodes/NOD_composite.h @@ -1,21 +1,21 @@ /* * ***** BEGIN GPL LICENSE BLOCK ***** * - * This program is free software(ListBase *lb); you can redistribute it and/or + * 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(ListBase *lb); either version 2 + * 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(ListBase *lb); without even the implied warranty of + * 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(ListBase *lb); if not, write to the Free Software Foundation, + * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * The Original Code is Copyright (C) 2005 Blender Foundation. From ba9794af021696eae92813546a069d902f7988c0 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Thu, 10 Nov 2011 12:15:09 +0000 Subject: [PATCH 03/22] Fixed possible issue drawing undistorted clip in clip editor. Check for marker's visibility was a bit odd. --- source/blender/editors/space_clip/clip_draw.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/source/blender/editors/space_clip/clip_draw.c b/source/blender/editors/space_clip/clip_draw.c index 9eb96a9a4c5..630038d4c6b 100644 --- a/source/blender/editors/space_clip/clip_draw.c +++ b/source/blender/editors/space_clip/clip_draw.c @@ -936,7 +936,8 @@ static void draw_tracking_tracks(SpaceClip *sc, ARegion *ar, MovieClip *clip, draw_marker_slide_zones(sc, track, marker, cur_pos, 1, 0, 0, width, height); draw_marker_slide_zones(sc, track, marker, cur_pos, 0, 0, 0, width, height); - if(fp) fp+= 2; + if(fp) + fp+= 2; } } @@ -950,20 +951,19 @@ static void draw_tracking_tracks(SpaceClip *sc, ARegion *ar, MovieClip *clip, while(track) { if((track->flag&TRACK_HIDDEN)==0) { int act= track==act_track; + marker= BKE_tracking_get_marker(track, framenr); - if(!act) { - marker= BKE_tracking_get_marker(track, framenr); - - if(MARKER_VISIBLE(sc, marker)) { + if(MARKER_VISIBLE(sc, marker)) { + if(!act) { copy_v2_v2(cur_pos, fp ? fp : marker->pos); draw_marker_areas(sc, track, marker, cur_pos, width, height, 0, 1); draw_marker_slide_zones(sc, track, marker, cur_pos, 0, 1, 0, width, height); } - } - if(MARKER_VISIBLE(sc, marker) && fp) - fp+= 2; + if(fp) + fp+= 2; + } } track= track->next; From dfc30d12292987cde384d999a52a9d52d13bdb2c Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 10 Nov 2011 12:28:26 +0000 Subject: [PATCH 04/22] quiet some warnings from recent merge --- source/blender/blenkernel/BKE_dynamicpaint.h | 4 +-- .../blender/blenkernel/intern/dynamicpaint.c | 36 ++++++++++++------- source/blender/blenkernel/intern/pointcache.c | 10 +++--- .../editors/physics/dynamicpaint_ops.c | 7 ++-- .../blender/editors/space_view3d/drawmesh.c | 2 +- .../blender/makesdna/DNA_dynamicpaint_types.h | 2 +- .../makesrna/intern/rna_dynamicpaint.c | 2 +- .../modifiers/intern/MOD_dynamicpaint.c | 16 +++++---- 8 files changed, 47 insertions(+), 32 deletions(-) diff --git a/source/blender/blenkernel/BKE_dynamicpaint.h b/source/blender/blenkernel/BKE_dynamicpaint.h index 75b1f74a403..14094cb2ac6 100644 --- a/source/blender/blenkernel/BKE_dynamicpaint.h +++ b/source/blender/blenkernel/BKE_dynamicpaint.h @@ -6,7 +6,7 @@ * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * - * Contributor(s): Miika Hämäläinen + * Contributor(s): Miika Hämäläinen * * ***** END GPL LICENSE BLOCK ***** */ @@ -66,7 +66,7 @@ void dynamicPaint_cacheUpdateFrames(struct DynamicPaintSurface *surface); int dynamicPaint_surfaceHasColorPreview(struct DynamicPaintSurface *surface); int dynamicPaint_outputLayerExists(struct DynamicPaintSurface *surface, struct Object *ob, int index); void dynamicPaintSurface_updateType(struct DynamicPaintSurface *surface); -void dynamicPaintSurface_setUniqueName(struct DynamicPaintSurface *surface, char *basename); +void dynamicPaintSurface_setUniqueName(struct DynamicPaintSurface *surface, const char *basename); void dynamicPaint_resetPreview(struct DynamicPaintCanvasSettings *canvas); struct DynamicPaintSurface *get_activeSurface(struct DynamicPaintCanvasSettings *canvas); diff --git a/source/blender/blenkernel/intern/dynamicpaint.c b/source/blender/blenkernel/intern/dynamicpaint.c index 9d1401acdfc..55b8b045509 100644 --- a/source/blender/blenkernel/intern/dynamicpaint.c +++ b/source/blender/blenkernel/intern/dynamicpaint.c @@ -6,7 +6,7 @@ * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * - * Contributor(s): Miika Hämäläinen + * Contributor(s): Miika Hämäläinen * * ***** END GPL LICENSE BLOCK ***** */ @@ -204,7 +204,7 @@ typedef struct PaintAdjData { /***************************** General Utils ******************************/ /* Set canvas error string to display at the bake report */ -static int setError(DynamicPaintCanvasSettings *canvas, char *string) +static int setError(DynamicPaintCanvasSettings *canvas, const char *string) { /* Add error to canvas ui info label */ BLI_snprintf(canvas->error, sizeof(canvas->error), string); @@ -339,7 +339,7 @@ static int surface_duplicateNameExists(void *arg, const char *name) return 0; } -void dynamicPaintSurface_setUniqueName(DynamicPaintSurface *surface, char *basename) +void dynamicPaintSurface_setUniqueName(DynamicPaintSurface *surface, const char *basename) { char name[64]; BLI_strncpy(name, basename, sizeof(name)); /* in case basename is surface->name use a copy */ @@ -488,7 +488,7 @@ static void scene_setSubframe(Scene *scene, float subframe) #define BRUSH_USES_VELOCITY (1<<0) -static int surface_getBrushFlags(DynamicPaintSurface *surface, Scene *scene, Object *ob) +static int surface_getBrushFlags(DynamicPaintSurface *surface, Scene *scene, Object *UNUSED(ob)) { Base *base = NULL; GroupObject *go = NULL; @@ -1516,7 +1516,10 @@ static void dynamicPaint_applySurfaceDisplace(DynamicPaintSurface *surface, Deri /* * Apply canvas data to the object derived mesh */ -static struct DerivedMesh *dynamicPaint_Modifier_apply(DynamicPaintModifierData *pmd, Scene *scene, Object *ob, DerivedMesh *dm) +static struct DerivedMesh *dynamicPaint_Modifier_apply(DynamicPaintModifierData *pmd, + Scene *UNUSED(scene), + Object *ob, + DerivedMesh *dm) { DerivedMesh *result = CDDM_copy(dm); @@ -2068,7 +2071,7 @@ int dynamicPaint_createUVSurface(DynamicPaintSurface *surface) PaintUVPoint *tempPoints = NULL; Vec3f *tempWeights = NULL; - MVert *mvert = NULL; + /* MVert *mvert = NULL; */ /* UNUSED */ MFace *mface = NULL; MTFace *tface = NULL; Bounds2D *faceBB = NULL; @@ -2079,7 +2082,7 @@ int dynamicPaint_createUVSurface(DynamicPaintSurface *surface) if (surface->format != MOD_DPAINT_SURFACE_F_IMAGESEQ) return setError(canvas, "Can't bake non-\"image sequence\" formats."); numOfFaces = dm->getNumFaces(dm); - mvert = dm->getVertArray(dm); + /* mvert = dm->getVertArray(dm); */ /* UNUSED */ mface = dm->getFaceArray(dm); /* get uv layer */ @@ -3039,7 +3042,7 @@ static void dynamicPaint_brushMeshCalculateVelocity(Scene *scene, Object *ob, Dy } /* calculate velocity for object center point */ -static void dynamicPaint_brushObjectCalculateVelocity(Scene *scene, Object *ob, DynamicPaintBrushSettings *brush, Vec3f *brushVel, float timescale) +static void dynamicPaint_brushObjectCalculateVelocity(Scene *scene, Object *ob, DynamicPaintBrushSettings *UNUSED(brush), Vec3f *brushVel, float timescale) { float prev_obmat[4][4]; float cur_loc[3] = {0.0f}, prev_loc[3] = {0.0f}; @@ -3076,7 +3079,13 @@ static void dynamicPaint_brushObjectCalculateVelocity(Scene *scene, Object *ob, /* * Paint a brush object mesh to the surface */ -static int dynamicPaint_paintMesh(DynamicPaintSurface *surface, DynamicPaintBrushSettings *brush, Object *canvasOb, Object *brushOb, BrushMaterials *bMats, Scene *scene, float timescale) +static int dynamicPaint_paintMesh(DynamicPaintSurface *surface, + DynamicPaintBrushSettings *brush, + Object *UNUSED(canvasOb), + Object *brushOb, + BrushMaterials *bMats, + Scene *scene, + float timescale) { PaintSurfaceData *sData = surface->data; PaintBakeData *bData = sData->bData; @@ -3449,7 +3458,10 @@ static int dynamicPaint_paintMesh(DynamicPaintSurface *surface, DynamicPaintBrus /* * Paint a particle system to the surface */ -static int dynamicPaint_paintParticles(DynamicPaintSurface *surface, ParticleSystem *psys, DynamicPaintBrushSettings *brush, Object *canvasOb, float timescale) +static int dynamicPaint_paintParticles(DynamicPaintSurface *surface, + ParticleSystem *psys, + DynamicPaintBrushSettings *brush, + Object *UNUSED(canvasOb), float timescale) { ParticleSettings *part=psys->part; ParticleData *pa = NULL; @@ -3686,7 +3698,7 @@ static int dynamicPaint_paintParticles(DynamicPaintSurface *surface, ParticleSys /* paint a single point of defined proximity radius to the surface */ static int dynamicPaint_paintSinglePoint(DynamicPaintSurface *surface, float *pointCoord, DynamicPaintBrushSettings *brush, - Object *canvasOb, Object *brushOb, BrushMaterials *bMats, Scene *scene, float timescale) + Object *UNUSED(canvasOb), Object *brushOb, BrushMaterials *bMats, Scene *scene, float timescale) { int index; PaintSurfaceData *sData = surface->data; @@ -4878,4 +4890,4 @@ int dynamicPaint_calculateFrame(DynamicPaintSurface *surface, Scene *scene, Obje } return dynamicPaint_doStep(scene, cObject, surface, timescale, 0.0f); -} \ No newline at end of file +} diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c index c256e99cd24..d5460a4e6ce 100644 --- a/source/blender/blenkernel/intern/pointcache.c +++ b/source/blender/blenkernel/intern/pointcache.c @@ -122,7 +122,7 @@ static int ptcache_extra_datasize[] = { /* forward declerations */ static int ptcache_file_compressed_read(PTCacheFile *pf, unsigned char *result, unsigned int len); static int ptcache_file_compressed_write(PTCacheFile *pf, unsigned char *in, unsigned int in_len, unsigned char *out, int mode); -static int ptcache_file_write(PTCacheFile *pf, void *f, unsigned int tot, unsigned int size); +static int ptcache_file_write(PTCacheFile *pf, const void *f, unsigned int tot, unsigned int size); static int ptcache_file_read(PTCacheFile *pf, void *f, unsigned int tot, unsigned int size); /* Common functions */ @@ -657,11 +657,11 @@ static int ptcache_smoke_read(PTCacheFile *pf, void *smoke_v) } #else // WITH_SMOKE static int ptcache_smoke_totpoint(void *UNUSED(smoke_v), int UNUSED(cfra)) { return 0; }; -static void ptcache_smoke_read(PTCacheFile *UNUSED(pf), void *UNUSED(smoke_v)) {} +static int ptcache_smoke_read(PTCacheFile *UNUSED(pf), void *UNUSED(smoke_v)) { return 0; } static int ptcache_smoke_write(PTCacheFile *UNUSED(pf), void *UNUSED(smoke_v)) { return 0; } #endif // WITH_SMOKE -static int ptcache_dynamicpaint_totpoint(void *sd, int cfra) +static int ptcache_dynamicpaint_totpoint(void *sd, int UNUSED(cfra)) { DynamicPaintSurface *surface = (DynamicPaintSurface*)sd; @@ -677,7 +677,7 @@ static int ptcache_dynamicpaint_write(PTCacheFile *pf, void *dp_v) int cache_compress = 1; /* version header */ - ptcache_file_write(pf, DPAINT_CACHE_VERSION, 1, sizeof(char)*4); + ptcache_file_write(pf, (void *)DPAINT_CACHE_VERSION, 1, sizeof(char)*4); if(surface->format != MOD_DPAINT_SURFACE_F_IMAGESEQ && surface->data) { unsigned int total_points=surface->data->total_points; @@ -1261,7 +1261,7 @@ static int ptcache_file_read(PTCacheFile *pf, void *f, unsigned int tot, unsigne { return (fread(f, size, tot, pf->fp) == tot); } -static int ptcache_file_write(PTCacheFile *pf, void *f, unsigned int tot, unsigned int size) +static int ptcache_file_write(PTCacheFile *pf, const void *f, unsigned int tot, unsigned int size) { return (fwrite(f, size, tot, pf->fp) == tot); } diff --git a/source/blender/editors/physics/dynamicpaint_ops.c b/source/blender/editors/physics/dynamicpaint_ops.c index 888b5af01bb..550da63d7aa 100644 --- a/source/blender/editors/physics/dynamicpaint_ops.c +++ b/source/blender/editors/physics/dynamicpaint_ops.c @@ -24,6 +24,7 @@ #include "BLI_blenlib.h" #include "BLI_string.h" +#include "BLI_utildefines.h" #include "DNA_dynamicpaint_types.h" #include "DNA_modifier_types.h" @@ -52,7 +53,7 @@ #include "WM_types.h" #include "WM_api.h" -static int surface_slot_add_exec(bContext *C, wmOperator *op) +static int surface_slot_add_exec(bContext *C, wmOperator *UNUSED(op)) { DynamicPaintModifierData *pmd = 0; Object *cObject = CTX_data_pointer_get_type(C, "object", &RNA_Object).data; @@ -94,7 +95,7 @@ void DPAINT_OT_surface_slot_add(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } -static int surface_slot_remove_exec(bContext *C, wmOperator *op) +static int surface_slot_remove_exec(bContext *C, wmOperator *UNUSED(op)) { DynamicPaintModifierData *pmd = 0; Object *cObject = CTX_data_pointer_get_type(C, "object", &RNA_Object).data; @@ -418,4 +419,4 @@ void DPAINT_OT_bake(wmOperatorType *ot) /* api callbacks */ ot->exec= dynamicpaint_bake_exec; ot->poll= ED_operator_object_active_editable; -} \ No newline at end of file +} diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c index ade3a65054f..1bc55b8d73f 100644 --- a/source/blender/editors/space_view3d/drawmesh.c +++ b/source/blender/editors/space_view3d/drawmesh.c @@ -403,7 +403,7 @@ static int draw_tface__set_draw_legacy(MTFace *tface, int has_mcol, int matnr) } } -static int draw_mcol__set_draw_legacy(MTFace *tface, int has_mcol, int matnr) +static int draw_mcol__set_draw_legacy(MTFace *UNUSED(tface), int has_mcol, int UNUSED(matnr)) { if (has_mcol) return 1; else return 2; diff --git a/source/blender/makesdna/DNA_dynamicpaint_types.h b/source/blender/makesdna/DNA_dynamicpaint_types.h index c8dfdf83a57..04d50c78652 100644 --- a/source/blender/makesdna/DNA_dynamicpaint_types.h +++ b/source/blender/makesdna/DNA_dynamicpaint_types.h @@ -6,7 +6,7 @@ * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * -* Contributor(s): Miika Hämäläinen +* Contributor(s): Miika Hämäläinen * * ***** END GPL LICENSE BLOCK ***** */ diff --git a/source/blender/makesrna/intern/rna_dynamicpaint.c b/source/blender/makesrna/intern/rna_dynamicpaint.c index 1f678faf421..754ed82e010 100644 --- a/source/blender/makesrna/intern/rna_dynamicpaint.c +++ b/source/blender/makesrna/intern/rna_dynamicpaint.c @@ -6,7 +6,7 @@ * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * - * Contributor(s): Miika Hämäläinen + * Contributor(s): Miika Hämäläinen * * ***** END GPL LICENSE BLOCK ***** */ diff --git a/source/blender/modifiers/intern/MOD_dynamicpaint.c b/source/blender/modifiers/intern/MOD_dynamicpaint.c index f697f149ce4..c6b9e5752e0 100644 --- a/source/blender/modifiers/intern/MOD_dynamicpaint.c +++ b/source/blender/modifiers/intern/MOD_dynamicpaint.c @@ -6,7 +6,7 @@ * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * -* Contributor(s): Miika Hämäläinen +* Contributor(s): Miika Hämäläinen * * ***** END GPL LICENSE BLOCK ***** * @@ -21,6 +21,8 @@ #include "MEM_guardedalloc.h" +#include "BLI_utildefines.h" + #include "BKE_cdderivedmesh.h" #include "BKE_dynamicpaint.h" #include "BKE_modifier.h" @@ -53,7 +55,7 @@ static void freeData(ModifierData *md) dynamicPaint_Modifier_free(pmd); } -static CustomDataMask requiredDataMask(Object *ob, ModifierData *md) +static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) { DynamicPaintModifierData *pmd = (DynamicPaintModifierData*)md; CustomDataMask dataMask = 0; @@ -88,8 +90,8 @@ static CustomDataMask requiredDataMask(Object *ob, ModifierData *md) static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *dm, - int useRenderParams, - int isFinalCalc) + int UNUSED(useRenderParams), + int UNUSED(isFinalCalc)) { DynamicPaintModifierData *pmd = (DynamicPaintModifierData*) md; @@ -120,7 +122,7 @@ static void updateDepgraph(ModifierData *md, DagForest *forest, } } -static int dependsOnTime(ModifierData *md) +static int dependsOnTime(ModifierData *UNUSED(md)) { return 1; } @@ -143,8 +145,8 @@ static void foreachIDLink(ModifierData *md, Object *ob, } } -static void foreachTexLink(ModifierData *md, Object *ob, - TexWalkFunc walk, void *userData) +static void foreachTexLink(ModifierData *UNUSED(md), Object *UNUSED(ob), + TexWalkFunc UNUSED(walk), void *UNUSED(userData)) { //walk(userData, ob, md, ""); /* re-enable when possible */ } From c42772fc95d62b4cb67e2ca09e5928ef7a6e054d Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 10 Nov 2011 12:52:17 +0000 Subject: [PATCH 05/22] Cycles: * Add back option to bundle CUDA kernel binaries with builds. * Disable runtime CUDA kernel compilation on Windows, couldn't get this working, since it seems to depend on visual studio being installed, even though for this particular case it shouldn't be needed. CMake only at the moment. * Runtime compilation on linux/mac should now work if nvcc is not installed in the default location, but available in PATH. --- CMakeLists.txt | 6 ++++-- intern/cycles/CMakeLists.txt | 5 +++++ intern/cycles/cmake/external_libs.cmake | 13 +++++++++++++ intern/cycles/device/device_cuda.cpp | 5 +++++ intern/cycles/kernel/CMakeLists.txt | 26 +++++++++++++++++++++++++ intern/cycles/util/util_cuda.cpp | 16 ++++++++++++++- 6 files changed, 68 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4bc6cab1dc5..3b328669e48 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -214,8 +214,10 @@ endif() option(WITH_PYTHON_INSTALL "Copy system python into the blender install folder" ON) # Cycles -option(WITH_CYCLES "Enable Cycles Render Engine" ON) -OPTION(WITH_CYCLES_TEST "Build cycles test application" OFF) +option(WITH_CYCLES "Enable cycles Render Engine" ON) +option(WITH_CYCLES_TEST "Build cycles test application" OFF) +option(WITH_CYCLES_CUDA_BINARIES "Build cycles CUDA binaries" OFF) +set(CYCLES_CUDA_BINARIES_ARCH sm_13 sm_20 sm_21 CACHE STRING "CUDA architectures to build binaries for") # disable for now, but plan to support on all platforms eventually option(WITH_MEM_JEMALLOC "Enable malloc replacement (http://www.canonware.com/jemalloc)" OFF) diff --git a/intern/cycles/CMakeLists.txt b/intern/cycles/CMakeLists.txt index bb876a90a7c..86fb6e49e33 100644 --- a/intern/cycles/CMakeLists.txt +++ b/intern/cycles/CMakeLists.txt @@ -49,6 +49,10 @@ if(WITH_CYCLES_PARTIO) add_definitions(-DWITH_PARTIO) endif() +if(WITH_CYCLES_CUDA_BINARIES) + add_definitions(-DWITH_CUDA_BINARIES) +endif() + add_definitions(-DWITH_OPENCL) add_definitions(-DWITH_CUDA) add_definitions(-DWITH_MULTI) @@ -72,3 +76,4 @@ add_subdirectory(kernel) add_subdirectory(render) add_subdirectory(subd) add_subdirectory(util) + diff --git a/intern/cycles/cmake/external_libs.cmake b/intern/cycles/cmake/external_libs.cmake index b6b8b351e13..9037362f1ab 100644 --- a/intern/cycles/cmake/external_libs.cmake +++ b/intern/cycles/cmake/external_libs.cmake @@ -85,3 +85,16 @@ if(WITH_CYCLES_BLENDER) add_definitions(-DBLENDER_PLUGIN) endif() +########################################################################### +# CUDA + +if(WITH_CYCLES_CUDA_BINARIES) + find_package(CUDA) # Try to auto locate CUDA toolkit + if(CUDA_FOUND) + message(STATUS "CUDA nvcc = ${CUDA_NVCC_EXECUTABLE}") + else() + message(STATUS "CUDA compiler not found, disabling WITH_CYCLES_CUDA_BINARIES") + set(WITH_CYCLES_CUDA_BINARIES OFF) + endif() +endif() + diff --git a/intern/cycles/device/device_cuda.cpp b/intern/cycles/device/device_cuda.cpp index 14c2a765a8e..1158cc6c77c 100644 --- a/intern/cycles/device/device_cuda.cpp +++ b/intern/cycles/device/device_cuda.cpp @@ -223,6 +223,10 @@ public: if(path_exists(cubin)) return cubin; +#ifdef WITH_CUDA_BINARIES + fprintf(stderr, "CUDA binary kernel for this graphics card not found.\n"); + return ""; +#else /* if not, find CUDA compiler */ string nvcc = cuCompilerPath(); @@ -260,6 +264,7 @@ public: printf("Kernel compilation finished in %.2lfs.\n", time_dt() - starttime); return cubin; +#endif } bool load_kernels() diff --git a/intern/cycles/kernel/CMakeLists.txt b/intern/cycles/kernel/CMakeLists.txt index 3a06aecdfcf..614391bd3f2 100644 --- a/intern/cycles/kernel/CMakeLists.txt +++ b/intern/cycles/kernel/CMakeLists.txt @@ -83,6 +83,32 @@ set(SRC_UTIL_HEADERS ../util/util_transform.h ../util/util_types.h ) +# CUDA module + +if(WITH_CYCLES_CUDA_BINARIES) + if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8") + set(CUDA_BITS 64) + else() + set(CUDA_BITS 32) + endif() + + set(cuda_sources kernel.cu ${headers} ${svm_headers}) + set(cuda_cubins) + + foreach(arch ${CYCLES_CUDA_BINARIES_ARCH}) + set(cuda_cubin kernel_${arch}.cubin) + + add_custom_command( + OUTPUT ${cuda_cubin} + COMMAND ${CUDA_NVCC_EXECUTABLE} -arch=${arch} -m${CUDA_BITS} --cubin ${CMAKE_CURRENT_SOURCE_DIR}/kernel.cu --use_fast_math -o ${CMAKE_CURRENT_BINARY_DIR}/${cuda_cubin} --ptxas-options="-v" --maxrregcount=24 --opencc-options -OPT:Olimit=0 -I${CMAKE_CURRENT_SOURCE_DIR}/../util -I${CMAKE_CURRENT_SOURCE_DIR}/svm -DCCL_NAMESPACE_BEGIN= -DCCL_NAMESPACE_END= -DNVCC + DEPENDS ${cuda_sources}) + + delayed_install("${CMAKE_CURRENT_BINARY_DIR}" "${cuda_cubin}" ${CYCLES_INSTALL_PATH}/lib) + list(APPEND cuda_cubins ${cuda_cubin}) + endforeach() + + add_custom_target(cycles_kernel_cuda ALL DEPENDS ${cuda_cubins}) +endif() # OSL module diff --git a/intern/cycles/util/util_cuda.cpp b/intern/cycles/util/util_cuda.cpp index bd5583b9718..fdf3d664a11 100644 --- a/intern/cycles/util/util_cuda.cpp +++ b/intern/cycles/util/util_cuda.cpp @@ -373,8 +373,14 @@ bool cuLibraryInit() /* cuda 4.0 */ CUDA_LIBRARY_FIND(cuCtxSetCurrent); +#ifndef WITH_CUDA_BINARIES +#ifdef _WIN32 + return false; /* runtime build doesn't work at the moment */ +#else if(cuCompilerPath() == "") return false; +#endif +#endif /* success */ result = true; @@ -401,7 +407,15 @@ string cuCompilerPath() else nvcc = path_join(defaultpath, executable); - return (path_exists(nvcc))? nvcc: ""; + if(path_exists(nvcc)) + return nvcc; + +#ifndef _WIN32 + if(system("which nvcc") == 0) + return "nvcc"; +#endif + + return ""; } CCL_NAMESPACE_END From bce0ce5f0c48f6dab208b0762e1352737f0729f8 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 10 Nov 2011 12:53:40 +0000 Subject: [PATCH 06/22] Cycles: many of the new nodes were not showing properties/buttons in nodes in the node editor. --- source/blender/nodes/shader/nodes/node_shader_bsdf_glass.c | 2 +- source/blender/nodes/shader/nodes/node_shader_bsdf_glossy.c | 2 +- source/blender/nodes/shader/nodes/node_shader_geom.c | 1 - source/blender/nodes/shader/nodes/node_shader_tex_environment.c | 2 +- source/blender/nodes/shader/nodes/node_shader_tex_gradient.c | 2 +- source/blender/nodes/shader/nodes/node_shader_tex_image.c | 2 +- source/blender/nodes/shader/nodes/node_shader_tex_magic.c | 2 +- source/blender/nodes/shader/nodes/node_shader_tex_musgrave.c | 2 +- source/blender/nodes/shader/nodes/node_shader_tex_sky.c | 2 +- source/blender/nodes/shader/nodes/node_shader_tex_voronoi.c | 2 +- source/blender/nodes/shader/nodes/node_shader_tex_wave.c | 2 +- 11 files changed, 10 insertions(+), 11 deletions(-) diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_glass.c b/source/blender/nodes/shader/nodes/node_shader_bsdf_glass.c index 1bb62fead6d..7d3b91d34d4 100644 --- a/source/blender/nodes/shader/nodes/node_shader_bsdf_glass.c +++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_glass.c @@ -53,7 +53,7 @@ void register_node_type_sh_bsdf_glass(ListBase *lb) { static bNodeType ntype; - node_type_base(&ntype, SH_NODE_BSDF_GLASS, "Glass BSDF", NODE_CLASS_SHADER, 0); + node_type_base(&ntype, SH_NODE_BSDF_GLASS, "Glass BSDF", NODE_CLASS_SHADER, NODE_OPTIONS); node_type_compatibility(&ntype, NODE_NEW_SHADING); node_type_socket_templates(&ntype, sh_node_bsdf_glass_in, sh_node_bsdf_glass_out); node_type_size(&ntype, 150, 60, 200); diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_glossy.c b/source/blender/nodes/shader/nodes/node_shader_bsdf_glossy.c index 2338a8a3cd2..5ccc1cf4a61 100644 --- a/source/blender/nodes/shader/nodes/node_shader_bsdf_glossy.c +++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_glossy.c @@ -53,7 +53,7 @@ void register_node_type_sh_bsdf_glossy(ListBase *lb) { static bNodeType ntype; - node_type_base(&ntype, SH_NODE_BSDF_GLOSSY, "Glossy BSDF", NODE_CLASS_SHADER, 0); + node_type_base(&ntype, SH_NODE_BSDF_GLOSSY, "Glossy BSDF", NODE_CLASS_SHADER, NODE_OPTIONS); node_type_compatibility(&ntype, NODE_NEW_SHADING); node_type_socket_templates(&ntype, sh_node_bsdf_glossy_in, sh_node_bsdf_glossy_out); node_type_size(&ntype, 150, 60, 200); diff --git a/source/blender/nodes/shader/nodes/node_shader_geom.c b/source/blender/nodes/shader/nodes/node_shader_geom.c index ddf1180df9e..6547194b33a 100644 --- a/source/blender/nodes/shader/nodes/node_shader_geom.c +++ b/source/blender/nodes/shader/nodes/node_shader_geom.c @@ -144,7 +144,6 @@ void register_node_type_sh_geom(ListBase *lb) node_type_base(&ntype, SH_NODE_GEOMETRY, "Geometry", NODE_CLASS_INPUT, NODE_OPTIONS); node_type_compatibility(&ntype, NODE_OLD_SHADING); - node_type_compatibility(&ntype, NODE_OLD_SHADING); node_type_socket_templates(&ntype, NULL, sh_node_geom_out); node_type_size(&ntype, 120, 80, 160); node_type_init(&ntype, node_shader_init_geometry); diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_environment.c b/source/blender/nodes/shader/nodes/node_shader_tex_environment.c index f9ab16ae84a..ecf5a053ad3 100644 --- a/source/blender/nodes/shader/nodes/node_shader_tex_environment.c +++ b/source/blender/nodes/shader/nodes/node_shader_tex_environment.c @@ -75,7 +75,7 @@ void register_node_type_sh_tex_environment(ListBase *lb) { static bNodeType ntype; - node_type_base(&ntype, SH_NODE_TEX_ENVIRONMENT, "Environment Texture", NODE_CLASS_TEXTURE, 0); + node_type_base(&ntype, SH_NODE_TEX_ENVIRONMENT, "Environment Texture", NODE_CLASS_TEXTURE, NODE_OPTIONS); node_type_compatibility(&ntype, NODE_NEW_SHADING); node_type_socket_templates(&ntype, sh_node_tex_environment_in, sh_node_tex_environment_out); node_type_size(&ntype, 150, 60, 200); diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_gradient.c b/source/blender/nodes/shader/nodes/node_shader_tex_gradient.c index 076759fa75f..d78a5e9693a 100644 --- a/source/blender/nodes/shader/nodes/node_shader_tex_gradient.c +++ b/source/blender/nodes/shader/nodes/node_shader_tex_gradient.c @@ -67,7 +67,7 @@ void register_node_type_sh_tex_gradient(ListBase *lb) { static bNodeType ntype; - node_type_base(&ntype, SH_NODE_TEX_GRADIENT, "Gradient Texture", NODE_CLASS_TEXTURE, 0); + node_type_base(&ntype, SH_NODE_TEX_GRADIENT, "Gradient Texture", NODE_CLASS_TEXTURE, NODE_OPTIONS); node_type_compatibility(&ntype, NODE_NEW_SHADING); node_type_socket_templates(&ntype, sh_node_tex_gradient_in, sh_node_tex_gradient_out); node_type_size(&ntype, 150, 60, 200); diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_image.c b/source/blender/nodes/shader/nodes/node_shader_tex_image.c index a7b0925d001..75b5f26b252 100644 --- a/source/blender/nodes/shader/nodes/node_shader_tex_image.c +++ b/source/blender/nodes/shader/nodes/node_shader_tex_image.c @@ -75,7 +75,7 @@ void register_node_type_sh_tex_image(ListBase *lb) { static bNodeType ntype; - node_type_base(&ntype, SH_NODE_TEX_IMAGE, "Image Texture", NODE_CLASS_TEXTURE, 0); + node_type_base(&ntype, SH_NODE_TEX_IMAGE, "Image Texture", NODE_CLASS_TEXTURE, NODE_OPTIONS); node_type_compatibility(&ntype, NODE_NEW_SHADING); node_type_socket_templates(&ntype, sh_node_tex_image_in, sh_node_tex_image_out); node_type_size(&ntype, 150, 60, 200); diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_magic.c b/source/blender/nodes/shader/nodes/node_shader_tex_magic.c index 00327311da4..6c021a7f900 100644 --- a/source/blender/nodes/shader/nodes/node_shader_tex_magic.c +++ b/source/blender/nodes/shader/nodes/node_shader_tex_magic.c @@ -72,7 +72,7 @@ void register_node_type_sh_tex_magic(ListBase *lb) { static bNodeType ntype; - node_type_base(&ntype, SH_NODE_TEX_MAGIC, "Magic Texture", NODE_CLASS_TEXTURE, 0); + node_type_base(&ntype, SH_NODE_TEX_MAGIC, "Magic Texture", NODE_CLASS_TEXTURE, NODE_OPTIONS); node_type_compatibility(&ntype, NODE_NEW_SHADING); node_type_socket_templates(&ntype, sh_node_tex_magic_in, sh_node_tex_magic_out); node_type_size(&ntype, 150, 60, 200); diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_musgrave.c b/source/blender/nodes/shader/nodes/node_shader_tex_musgrave.c index 45fa6338bfa..4aefea3e383 100644 --- a/source/blender/nodes/shader/nodes/node_shader_tex_musgrave.c +++ b/source/blender/nodes/shader/nodes/node_shader_tex_musgrave.c @@ -73,7 +73,7 @@ void register_node_type_sh_tex_musgrave(ListBase *lb) { static bNodeType ntype; - node_type_base(&ntype, SH_NODE_TEX_MUSGRAVE, "Musgrave Texture", NODE_CLASS_TEXTURE, 0); + node_type_base(&ntype, SH_NODE_TEX_MUSGRAVE, "Musgrave Texture", NODE_CLASS_TEXTURE, NODE_OPTIONS); node_type_compatibility(&ntype, NODE_NEW_SHADING); node_type_socket_templates(&ntype, sh_node_tex_musgrave_in, sh_node_tex_musgrave_out); node_type_size(&ntype, 150, 60, 200); diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_sky.c b/source/blender/nodes/shader/nodes/node_shader_tex_sky.c index 3ab5e61196c..1abcec86b12 100644 --- a/source/blender/nodes/shader/nodes/node_shader_tex_sky.c +++ b/source/blender/nodes/shader/nodes/node_shader_tex_sky.c @@ -69,7 +69,7 @@ void register_node_type_sh_tex_sky(ListBase *lb) { static bNodeType ntype; - node_type_base(&ntype, SH_NODE_TEX_SKY, "Sky Texture", NODE_CLASS_TEXTURE, 0); + node_type_base(&ntype, SH_NODE_TEX_SKY, "Sky Texture", NODE_CLASS_TEXTURE, NODE_OPTIONS); node_type_compatibility(&ntype, NODE_NEW_SHADING); node_type_socket_templates(&ntype, sh_node_tex_sky_in, sh_node_tex_sky_out); node_type_size(&ntype, 150, 60, 200); diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_voronoi.c b/source/blender/nodes/shader/nodes/node_shader_tex_voronoi.c index c32063c8b2d..6be3a2e928b 100644 --- a/source/blender/nodes/shader/nodes/node_shader_tex_voronoi.c +++ b/source/blender/nodes/shader/nodes/node_shader_tex_voronoi.c @@ -68,7 +68,7 @@ void register_node_type_sh_tex_voronoi(ListBase *lb) { static bNodeType ntype; - node_type_base(&ntype, SH_NODE_TEX_VORONOI, "Voronoi Texture", NODE_CLASS_TEXTURE, 0); + node_type_base(&ntype, SH_NODE_TEX_VORONOI, "Voronoi Texture", NODE_CLASS_TEXTURE, NODE_OPTIONS); node_type_compatibility(&ntype, NODE_NEW_SHADING); node_type_socket_templates(&ntype, sh_node_tex_voronoi_in, sh_node_tex_voronoi_out); node_type_size(&ntype, 150, 60, 200); diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_wave.c b/source/blender/nodes/shader/nodes/node_shader_tex_wave.c index 3574975c7b8..ed0aa230721 100644 --- a/source/blender/nodes/shader/nodes/node_shader_tex_wave.c +++ b/source/blender/nodes/shader/nodes/node_shader_tex_wave.c @@ -71,7 +71,7 @@ void register_node_type_sh_tex_wave(ListBase *lb) { static bNodeType ntype; - node_type_base(&ntype, SH_NODE_TEX_WAVE, "Wave Texture", NODE_CLASS_TEXTURE, 0); + node_type_base(&ntype, SH_NODE_TEX_WAVE, "Wave Texture", NODE_CLASS_TEXTURE, NODE_OPTIONS); node_type_compatibility(&ntype, NODE_NEW_SHADING); node_type_socket_templates(&ntype, sh_node_tex_wave_in, sh_node_tex_wave_out); node_type_size(&ntype, 150, 60, 200); From 7bcd1a6c47c69b6b7f84e71e24277f68c9e3f629 Mon Sep 17 00:00:00 2001 From: Miika Hamalainen Date: Thu, 10 Nov 2011 13:00:27 +0000 Subject: [PATCH 07/22] Dynamic Paint: * Added BKE_dynamicpaint.h to CMake list. * Changed some unsigned integers back to signed, as OpenMP can't iterate unsigned values anyway. * Fixed more warnings. --- source/blender/blenkernel/BKE_dynamicpaint.h | 2 +- source/blender/blenkernel/CMakeLists.txt | 1 + .../blender/blenkernel/intern/dynamicpaint.c | 54 +++++++++---------- source/blender/blenkernel/intern/pointcache.c | 2 +- 4 files changed, 29 insertions(+), 30 deletions(-) diff --git a/source/blender/blenkernel/BKE_dynamicpaint.h b/source/blender/blenkernel/BKE_dynamicpaint.h index 14094cb2ac6..d7e0f8bdaae 100644 --- a/source/blender/blenkernel/BKE_dynamicpaint.h +++ b/source/blender/blenkernel/BKE_dynamicpaint.h @@ -24,7 +24,7 @@ typedef struct PaintSurfaceData { struct PaintAdjData *adj_data; /* adjacency data for current surface */ struct PaintBakeData *bData; /* temporary per step data used for frame calculation */ - unsigned int total_points; + int total_points; } PaintSurfaceData; diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt index 98a317d684d..1fc851bfa72 100644 --- a/source/blender/blenkernel/CMakeLists.txt +++ b/source/blender/blenkernel/CMakeLists.txt @@ -178,6 +178,7 @@ set(SRC BKE_deform.h BKE_depsgraph.h BKE_displist.h + BKE_dynamicpaint.h BKE_effect.h BKE_fcurve.h BKE_fluidsim.h diff --git a/source/blender/blenkernel/intern/dynamicpaint.c b/source/blender/blenkernel/intern/dynamicpaint.c index 55b8b045509..e1debd5cd5f 100644 --- a/source/blender/blenkernel/intern/dynamicpaint.c +++ b/source/blender/blenkernel/intern/dynamicpaint.c @@ -120,9 +120,9 @@ typedef struct VolumeGrid { Bounds3D grid_bounds; /* whole grid bounds */ Bounds3D *bounds; /* (x*y*z) precalculated grid cell bounds */ - unsigned int *s_pos; /* (x*y*z) t_index begin id */ - unsigned int *s_num; /* (x*y*z) number of t_index points */ - unsigned int *t_index; /* actual surface point index, + int *s_pos; /* (x*y*z) t_index begin id */ + int *s_num; /* (x*y*z) number of t_index points */ + int *t_index; /* actual surface point index, access: (s_pos+s_num) */ } VolumeGrid; @@ -145,8 +145,8 @@ typedef struct PaintBakeNormal { typedef struct PaintBakeData { /* point space data */ PaintBakeNormal *bNormal; - unsigned int *s_pos; /* index to start reading point sample realCoord */ - unsigned int *s_num; /* num of realCoord samples */ + int *s_pos; /* index to start reading point sample realCoord */ + int *s_num; /* num of realCoord samples */ Vec3f *realCoord; /* current pixel center world-space coordinates for each sample * ordered as (s_pos+s_num)*/ @@ -193,12 +193,12 @@ typedef struct EffVelPoint { #define ADJ_ON_MESH_EDGE (1<<0) typedef struct PaintAdjData { - unsigned int *n_target; /* array of neighbouring point indexes, + int *n_target; /* array of neighbouring point indexes, for single sample use (n_index+neigh_num) */ - unsigned int *n_index; /* index to start reading n_target for each point */ - unsigned int *n_num; /* num of neighs for each point */ - unsigned int *flags; /* vertex adjacency flags */ - unsigned int total_targets; /* size of n_target */ + int *n_index; /* index to start reading n_target for each point */ + int *n_num; /* num of neighs for each point */ + int *flags; /* vertex adjacency flags */ + int total_targets; /* size of n_target */ } PaintAdjData; /***************************** General Utils ******************************/ @@ -488,7 +488,7 @@ static void scene_setSubframe(Scene *scene, float subframe) #define BRUSH_USES_VELOCITY (1<<0) -static int surface_getBrushFlags(DynamicPaintSurface *surface, Scene *scene, Object *UNUSED(ob)) +static int surface_getBrushFlags(DynamicPaintSurface *surface, Scene *scene) { Base *base = NULL; GroupObject *go = NULL; @@ -704,7 +704,7 @@ static void surfaceGenerateGrid(struct DynamicPaintSurface *surface) for (i=0; itotal_points; i++) { int co[3], j; for (j=0; j<3; j++) { - co[j] = floor((bData->realCoord[bData->s_pos[i]].v[j] - grid->grid_bounds.min[j])/dim[j]*grid->dim[j]); + co[j] = (int)floor((bData->realCoord[bData->s_pos[i]].v[j] - grid->grid_bounds.min[j])/dim[j]*grid->dim[j]); CLAMP(co[j], 0, grid->dim[j]-1); } @@ -972,7 +972,7 @@ struct DynamicPaintSurface *dynamicPaint_createNewSurface(DynamicPaintCanvasSett surface->wave_damping = 0.05f; surface->wave_speed = 1.0f; surface->wave_timescale = 1.0f; - surface->wave_spring = 0.20; + surface->wave_spring = 0.20f; BLI_snprintf(surface->image_output_path, sizeof(surface->image_output_path), "%sdynamicpaint", U.textudir); BLI_cleanup_dir(NULL, surface->image_output_path); @@ -1517,7 +1517,6 @@ static void dynamicPaint_applySurfaceDisplace(DynamicPaintSurface *surface, Deri * Apply canvas data to the object derived mesh */ static struct DerivedMesh *dynamicPaint_Modifier_apply(DynamicPaintModifierData *pmd, - Scene *UNUSED(scene), Object *ob, DerivedMesh *dm) { @@ -1804,7 +1803,7 @@ static void dynamicPaint_frameUpdate(DynamicPaintModifierData *pmd, Scene *scene BKE_ptcache_id_from_dynamicpaint(&pid, ob, surface); pid.cache->startframe = surface->start_frame; pid.cache->endframe = surface->end_frame; - BKE_ptcache_id_time(&pid, scene, scene->r.cfra, NULL, NULL, NULL); + BKE_ptcache_id_time(&pid, scene, (float)scene->r.cfra, NULL, NULL, NULL); /* reset non-baked cache at first frame */ if((int)scene->r.cfra == surface->start_frame && !(cache->flag & PTCACHE_BAKED)) @@ -1846,7 +1845,7 @@ struct DerivedMesh *dynamicPaint_Modifier_do(DynamicPaintModifierData *pmd, Scen dynamicPaint_frameUpdate(pmd, scene, ob, dm); /* Return output mesh */ - return dynamicPaint_Modifier_apply(pmd, scene, ob, dm); + return dynamicPaint_Modifier_apply(pmd, ob, dm); } @@ -3042,7 +3041,7 @@ static void dynamicPaint_brushMeshCalculateVelocity(Scene *scene, Object *ob, Dy } /* calculate velocity for object center point */ -static void dynamicPaint_brushObjectCalculateVelocity(Scene *scene, Object *ob, DynamicPaintBrushSettings *UNUSED(brush), Vec3f *brushVel, float timescale) +static void dynamicPaint_brushObjectCalculateVelocity(Scene *scene, Object *ob, Vec3f *brushVel, float timescale) { float prev_obmat[4][4]; float cur_loc[3] = {0.0f}, prev_loc[3] = {0.0f}; @@ -3081,7 +3080,6 @@ static void dynamicPaint_brushObjectCalculateVelocity(Scene *scene, Object *ob, */ static int dynamicPaint_paintMesh(DynamicPaintSurface *surface, DynamicPaintBrushSettings *brush, - Object *UNUSED(canvasOb), Object *brushOb, BrushMaterials *bMats, Scene *scene, @@ -3461,7 +3459,7 @@ static int dynamicPaint_paintMesh(DynamicPaintSurface *surface, static int dynamicPaint_paintParticles(DynamicPaintSurface *surface, ParticleSystem *psys, DynamicPaintBrushSettings *brush, - Object *UNUSED(canvasOb), float timescale) + float timescale) { ParticleSettings *part=psys->part; ParticleData *pa = NULL; @@ -3698,7 +3696,7 @@ static int dynamicPaint_paintParticles(DynamicPaintSurface *surface, /* paint a single point of defined proximity radius to the surface */ static int dynamicPaint_paintSinglePoint(DynamicPaintSurface *surface, float *pointCoord, DynamicPaintBrushSettings *brush, - Object *UNUSED(canvasOb), Object *brushOb, BrushMaterials *bMats, Scene *scene, float timescale) + Object *brushOb, BrushMaterials *bMats, Scene *scene, float timescale) { int index; PaintSurfaceData *sData = surface->data; @@ -3706,7 +3704,7 @@ static int dynamicPaint_paintSinglePoint(DynamicPaintSurface *surface, float *po Vec3f brushVel; if (brush->flags & MOD_DPAINT_USES_VELOCITY) - dynamicPaint_brushObjectCalculateVelocity(scene, brushOb, brush, &brushVel, timescale); + dynamicPaint_brushObjectCalculateVelocity(scene, brushOb, &brushVel, timescale); /* * Loop through every surface point @@ -4220,7 +4218,7 @@ static void dynamicPaint_doEffectStep(DynamicPaintSurface *surface, float *force float closest_d[2]; /* adjust drip speed depending on wetness */ - float w_factor = pPoint_prev->wetness*0.5 - 0.025f; + float w_factor = pPoint_prev->wetness*0.5f - 0.025f; if (w_factor <= 0) continue; /* get force affect points */ @@ -4295,7 +4293,7 @@ void dynamicPaint_doWaveStep(DynamicPaintSurface *surface, float timescale) average_dist /= sData->adj_data->total_targets; /* determine number of required steps */ - steps = ceil((WAVE_TIME_FAC*timescale*surface->wave_timescale) / (average_dist/wave_speed/3)); + steps = (int)ceil((WAVE_TIME_FAC*timescale*surface->wave_timescale) / (average_dist/wave_speed/3)); CLAMP(steps, 1, 15); timescale /= steps; @@ -4489,7 +4487,7 @@ static int surface_needsVelocityData(DynamicPaintSurface *surface, Scene *scene, if (surface->effect & MOD_DPAINT_EFFECT_DO_DRIP) return 1; - if (surface_getBrushFlags(surface, scene, ob) & BRUSH_USES_VELOCITY) + if (surface_getBrushFlags(surface, scene) & BRUSH_USES_VELOCITY) return 1; return 0; @@ -4795,16 +4793,16 @@ static int dynamicPaint_doStep(Scene *scene, Object *ob, DynamicPaintSurface *su /* Paint a particle system */ BKE_animsys_evaluate_animdata(scene, &brush->psys->part->id, brush->psys->part->adt, BKE_curframe(scene), ADT_RECALC_ANIM); - dynamicPaint_paintParticles(surface, brush->psys, brush, ob, timescale); + dynamicPaint_paintParticles(surface, brush->psys, brush, timescale); } } /* Object center distance: */ else if (brush->collision == MOD_DPAINT_COL_POINT && brushObj != ob) { - dynamicPaint_paintSinglePoint(surface, brushObj->loc, brush, ob, brushObj, &bMats, scene, timescale); + dynamicPaint_paintSinglePoint(surface, brushObj->loc, brush, brushObj, &bMats, scene, timescale); } /* Mesh volume/proximity: */ else if (brushObj != ob) { - dynamicPaint_paintMesh(surface, brush, ob, brushObj, &bMats, scene, timescale); + dynamicPaint_paintMesh(surface, brush, brushObj, &bMats, scene, timescale); } /* free temp material data */ @@ -4890,4 +4888,4 @@ int dynamicPaint_calculateFrame(DynamicPaintSurface *surface, Scene *scene, Obje } return dynamicPaint_doStep(scene, cObject, surface, timescale, 0.0f); -} +} \ No newline at end of file diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c index d5460a4e6ce..9b094d7f1f6 100644 --- a/source/blender/blenkernel/intern/pointcache.c +++ b/source/blender/blenkernel/intern/pointcache.c @@ -680,7 +680,7 @@ static int ptcache_dynamicpaint_write(PTCacheFile *pf, void *dp_v) ptcache_file_write(pf, (void *)DPAINT_CACHE_VERSION, 1, sizeof(char)*4); if(surface->format != MOD_DPAINT_SURFACE_F_IMAGESEQ && surface->data) { - unsigned int total_points=surface->data->total_points; + int total_points=surface->data->total_points; unsigned int in_len; unsigned char *out; From 2adcac7661ea475d6f309698fe93068d070bf460 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 10 Nov 2011 13:00:53 +0000 Subject: [PATCH 08/22] Cycles: when material/world/lamp doesn't use nodes, show color in the UI. --- intern/cycles/blender/addon/ui.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py index dfbfb769170..01b358869ec 100644 --- a/intern/cycles/blender/addon/ui.py +++ b/intern/cycles/blender/addon/ui.py @@ -350,7 +350,7 @@ def find_node_input(node, name): def panel_node_draw(layout, id, output_type, input_name): if not id.node_tree: layout.prop(id, "use_nodes", icon='NODETREE') - return + return False ntree = id.node_tree @@ -360,6 +360,8 @@ def panel_node_draw(layout, id, output_type, input_name): else: input = find_node_input(node, input_name) layout.template_node_view(ntree, node, input); + + return True class CyclesLamp_PT_lamp(CyclesButtonsPanel, Panel): bl_label = "Lamp" @@ -411,8 +413,9 @@ class CyclesLamp_PT_nodes(CyclesButtonsPanel, Panel): def draw(self, context): layout = self.layout - mat = context.lamp - panel_node_draw(layout, mat, 'OUTPUT_LAMP', 'Surface') + lamp = context.lamp + if not panel_node_draw(layout, lamp, 'OUTPUT_LAMP', 'Surface'): + layout.prop(lamp, "color") class CyclesWorld_PT_surface(CyclesButtonsPanel, Panel): bl_label = "Surface" @@ -425,8 +428,9 @@ class CyclesWorld_PT_surface(CyclesButtonsPanel, Panel): def draw(self, context): layout = self.layout - mat = context.world - panel_node_draw(layout, mat, 'OUTPUT_WORLD', 'Surface') + world = context.world + if not panel_node_draw(layout, world, 'OUTPUT_WORLD', 'Surface'): + layout.prop(world, "horizon_color", text="Color") class CyclesWorld_PT_volume(CyclesButtonsPanel, Panel): bl_label = "Volume" @@ -457,7 +461,8 @@ class CyclesMaterial_PT_surface(CyclesButtonsPanel, Panel): layout = self.layout mat = context.material - panel_node_draw(layout, mat, 'OUTPUT_MATERIAL', 'Surface') + if not panel_node_draw(layout, mat, 'OUTPUT_MATERIAL', 'Surface'): + layout.prop(mat, "diffuse_color") class CyclesMaterial_PT_volume(CyclesButtonsPanel, Panel): bl_label = "Volume" From da93c1fde2fbb370e9b4dae3158b30e8488e4546 Mon Sep 17 00:00:00 2001 From: Andrew Wiggin Date: Thu, 10 Nov 2011 13:28:58 +0000 Subject: [PATCH 09/22] Fix [#29214] build modifier calculates wrong fraction of faces/verts/edges to draw --- source/blender/modifiers/intern/MOD_build.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/modifiers/intern/MOD_build.c b/source/blender/modifiers/intern/MOD_build.c index 266bff35bbd..119934ea2f0 100644 --- a/source/blender/modifiers/intern/MOD_build.c +++ b/source/blender/modifiers/intern/MOD_build.c @@ -106,7 +106,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *UNUSED(ob), faceMap = MEM_callocN(sizeof(*faceMap) * maxFaces, "build modifier faceMap"); for(i = 0; i < maxFaces; ++i) faceMap[i] = i; - frac = BKE_curframe(md->scene) - bmd->start / bmd->length; + frac = (BKE_curframe(md->scene) - bmd->start) / bmd->length; CLAMP(frac, 0.0f, 1.0f); numFaces = dm->getNumFaces(dm) * frac; From 7e518bca5370e0a0abdba02468ed948d0130632e Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 10 Nov 2011 13:38:55 +0000 Subject: [PATCH 10/22] Nodes: fix crash loading old files that have node sockets changed, the version patch for the default value storage needs to be done before lib linking, otherwise this can crash. Fixes problem opening some old cycles files. --- source/blender/blenloader/intern/readfile.c | 97 +++++++++++---------- 1 file changed, 50 insertions(+), 47 deletions(-) diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index ca98849a469..852b4adcfda 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -2123,11 +2123,61 @@ static void lib_link_nodetree(FileData *fd, Main *main) } } +static void do_versions_socket_default_value(bNodeSocket *sock) +{ + bNodeSocketValueFloat *valfloat; + bNodeSocketValueVector *valvector; + bNodeSocketValueRGBA *valrgba; + + if (sock->default_value) + return; + + switch (sock->type) { + case SOCK_FLOAT: + valfloat = sock->default_value = MEM_callocN(sizeof(bNodeSocketValueFloat), "default socket value"); + valfloat->value = sock->ns.vec[0]; + valfloat->min = sock->ns.min; + valfloat->max = sock->ns.max; + valfloat->subtype = PROP_NONE; + break; + case SOCK_VECTOR: + valvector = sock->default_value = MEM_callocN(sizeof(bNodeSocketValueVector), "default socket value"); + copy_v3_v3(valvector->value, sock->ns.vec); + valvector->min = sock->ns.min; + valvector->max = sock->ns.max; + valvector->subtype = PROP_NONE; + break; + case SOCK_RGBA: + valrgba = sock->default_value = MEM_callocN(sizeof(bNodeSocketValueRGBA), "default socket value"); + copy_v4_v4(valrgba->value, sock->ns.vec); + break; + } +} + +static void do_versions_nodetree_default_value(bNodeTree *ntree) +{ + bNode *node; + bNodeSocket *sock; + for (node=ntree->nodes.first; node; node=node->next) { + for (sock=node->inputs.first; sock; sock=sock->next) + do_versions_socket_default_value(sock); + for (sock=node->outputs.first; sock; sock=sock->next) + do_versions_socket_default_value(sock); + } + for (sock=ntree->inputs.first; sock; sock=sock->next) + do_versions_socket_default_value(sock); + for (sock=ntree->outputs.first; sock; sock=sock->next) + do_versions_socket_default_value(sock); +} + static void lib_nodetree_init_types_cb(void *UNUSED(data), ID *UNUSED(id), bNodeTree *ntree) { bNode *node; ntreeInitTypes(ntree); + + /* need to do this here instead of in do_versions, otherwise next function can crash */ + do_versions_nodetree_default_value(ntree); /* XXX could be replaced by do_versions for new nodes */ for (node=ntree->nodes.first; node; node=node->next) @@ -7181,53 +7231,6 @@ static void do_version_bone_roll_256(Bone *bone) do_version_bone_roll_256(child); } -static void do_versions_socket_default_value(bNodeSocket *sock) -{ - bNodeSocketValueFloat *valfloat; - bNodeSocketValueVector *valvector; - bNodeSocketValueRGBA *valrgba; - - if (sock->default_value) - return; - - switch (sock->type) { - case SOCK_FLOAT: - valfloat = sock->default_value = MEM_callocN(sizeof(bNodeSocketValueFloat), "default socket value"); - valfloat->value = sock->ns.vec[0]; - valfloat->min = sock->ns.min; - valfloat->max = sock->ns.max; - valfloat->subtype = PROP_NONE; - break; - case SOCK_VECTOR: - valvector = sock->default_value = MEM_callocN(sizeof(bNodeSocketValueVector), "default socket value"); - copy_v3_v3(valvector->value, sock->ns.vec); - valvector->min = sock->ns.min; - valvector->max = sock->ns.max; - valvector->subtype = PROP_NONE; - break; - case SOCK_RGBA: - valrgba = sock->default_value = MEM_callocN(sizeof(bNodeSocketValueRGBA), "default socket value"); - copy_v4_v4(valrgba->value, sock->ns.vec); - break; - } -} - -static void do_versions_nodetree_default_value(bNodeTree *ntree) -{ - bNode *node; - bNodeSocket *sock; - for (node=ntree->nodes.first; node; node=node->next) { - for (sock=node->inputs.first; sock; sock=sock->next) - do_versions_socket_default_value(sock); - for (sock=node->outputs.first; sock; sock=sock->next) - do_versions_socket_default_value(sock); - } - for (sock=ntree->inputs.first; sock; sock=sock->next) - do_versions_socket_default_value(sock); - for (sock=ntree->outputs.first; sock; sock=sock->next) - do_versions_socket_default_value(sock); -} - static void do_versions_nodetree_dynamic_sockets(bNodeTree *ntree) { bNodeSocket *sock; From 3863aa91140a8fde20a5add8ada976ee764b735b Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 10 Nov 2011 13:39:25 +0000 Subject: [PATCH 11/22] Cycles: fix crash in image assign/remove in image editor. --- source/blender/editors/include/ED_image.h | 2 +- source/blender/editors/space_image/image_ops.c | 4 ++-- source/blender/editors/space_image/space_image.c | 16 +++++++--------- source/blender/makesrna/intern/rna_space.c | 2 +- .../blenderplayer/bad_level_call_stubs/stubs.c | 4 +++- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/source/blender/editors/include/ED_image.h b/source/blender/editors/include/ED_image.h index 4e8aadecfc7..27c61e98e21 100644 --- a/source/blender/editors/include/ED_image.h +++ b/source/blender/editors/include/ED_image.h @@ -41,7 +41,7 @@ struct wmWindowManager; /* space_image.c, exported for transform */ struct Image *ED_space_image(struct SpaceImage *sima); -void ED_space_image_set(struct bContext *C, struct SpaceImage *sima, struct Scene *scene, struct Object *obedit, struct Image *ima); +void ED_space_image_set(struct SpaceImage *sima, struct Scene *scene, struct Object *obedit, struct Image *ima); struct ImBuf *ED_space_image_acquire_buffer(struct SpaceImage *sima, void **lock_r); void ED_space_image_release_buffer(struct SpaceImage *sima, void *lock); diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c index 7121e4872eb..77c92b2d9c3 100644 --- a/source/blender/editors/space_image/image_ops.c +++ b/source/blender/editors/space_image/image_ops.c @@ -804,7 +804,7 @@ static int image_open_exec(bContext *C, wmOperator *op) RNA_property_update(C, &pprop->ptr, pprop->prop); } else if(sima) { - ED_space_image_set(C, sima, scene, obedit, ima); + ED_space_image_set(sima, scene, obedit, ima); iuser= &sima->iuser; } else { @@ -1420,7 +1420,7 @@ static int image_new_exec(bContext *C, wmOperator *op) RNA_property_update(C, &ptr, prop); } else if(sima) - ED_space_image_set(C, sima, scene, obedit, ima); + ED_space_image_set(sima, scene, obedit, ima); // XXX other users? BKE_image_signal(ima, (sima)? &sima->iuser: NULL, IMA_SIGNAL_USER_NEW_IMAGE); diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c index c29553a9c87..99c190cd2dd 100644 --- a/source/blender/editors/space_image/space_image.c +++ b/source/blender/editors/space_image/space_image.c @@ -82,9 +82,10 @@ Image *ED_space_image(SpaceImage *sima) } /* called to assign images to UV faces */ -void ED_space_image_set(bContext *C, SpaceImage *sima, Scene *scene, Object *obedit, Image *ima) +void ED_space_image_set(SpaceImage *sima, Scene *scene, Object *obedit, Image *ima) { - ED_uvedit_assign_image(CTX_data_main(C), scene, obedit, ima, sima->image); + /* context may be NULL, so use global */ + ED_uvedit_assign_image(G.main, scene, obedit, ima, sima->image); /* change the space ima after because uvedit_face_visible uses the space ima * to check if the face is displayed in UV-localview */ @@ -99,13 +100,10 @@ void ED_space_image_set(bContext *C, SpaceImage *sima, Scene *scene, Object *obe if(sima->image && sima->image->id.us==0) sima->image->id.us= 1; - if(C) { - if(obedit) - WM_event_add_notifier(C, NC_GEOM|ND_DATA, obedit->data); - - ED_area_tag_redraw(CTX_wm_area(C)); - - } + if(obedit) + WM_main_add_notifier(NC_GEOM|ND_DATA, obedit->data); + + WM_main_add_notifier(NC_SPACE|ND_SPACE_IMAGE, NULL); } ImBuf *ED_space_image_acquire_buffer(SpaceImage *sima, void **lock_r) diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index db4db299f92..31f3d59e643 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -514,7 +514,7 @@ static void rna_SpaceImageEditor_image_set(PointerRNA *ptr, PointerRNA value) SpaceImage *sima= (SpaceImage*)(ptr->data); bScreen *sc= (bScreen*)ptr->id.data; - ED_space_image_set(NULL, sima, sc->scene, sc->scene->obedit, (Image*)value.data); + ED_space_image_set(sima, sc->scene, sc->scene->obedit, (Image*)value.data); } static EnumPropertyItem *rna_SpaceImageEditor_draw_channels_itemf(bContext *UNUSED(C), PointerRNA *ptr, diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c b/source/blenderplayer/bad_level_call_stubs/stubs.c index 6af05dd1361..48dcf8a1c7f 100644 --- a/source/blenderplayer/bad_level_call_stubs/stubs.c +++ b/source/blenderplayer/bad_level_call_stubs/stubs.c @@ -47,6 +47,7 @@ struct CSG_VertexIteratorDescriptor; struct ColorBand; struct CurveMapping; struct Curve; +struct DerivedMesh; struct EditBone; struct EditFace; struct EditMesh; @@ -77,6 +78,7 @@ struct RenderEngine; struct RenderEngineType; struct RenderLayer; struct RenderResult; +struct Scene; struct ScrArea; struct SculptSession; struct ShadeInput; @@ -198,7 +200,7 @@ int ED_space_image_show_uvedit(struct SpaceImage *sima, struct Object *obedit){r int ED_space_image_show_render(struct SpaceImage *sima){return 0;} int ED_space_image_show_paint(struct SpaceImage *sima){return 0;} void ED_space_image_paint_update(struct wmWindowManager *wm, struct ToolSettings *settings){} -void ED_space_image_set(struct bContext *C, struct SpaceImage *sima, struct Scene *scene, struct Object *obedit, struct Image *ima){} +void ED_space_image_set(struct SpaceImage *sima, struct Scene *scene, struct Object *obedit, struct Image *ima){} struct ImBuf *ED_space_image_buffer(struct SpaceImage *sima){return (struct ImBuf *) NULL;} void ED_screen_set_scene(struct bContext *C, struct Scene *scene){} void ED_space_clip_set(struct bContext *C, struct SpaceClip *sc, struct MovieClip *clip){} From cf6a1320a8ba5e8952766ad97da6c6a5aaa5472e Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 10 Nov 2011 14:13:32 +0000 Subject: [PATCH 12/22] Cycles: attempted fix for error building with sse/mtune optimization flags. --- intern/cycles/CMakeLists.txt | 4 +++- intern/cycles/SConscript | 8 +++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/intern/cycles/CMakeLists.txt b/intern/cycles/CMakeLists.txt index 86fb6e49e33..c0992aae7da 100644 --- a/intern/cycles/CMakeLists.txt +++ b/intern/cycles/CMakeLists.txt @@ -8,7 +8,9 @@ include(cmake/external_libs.cmake) # Build Flags -set(GCC_OPTIM_FLAGS "-ffast-math -msse -msse2 -msse3 -mtune=native") +if(WITH_RAYOPTIMIZATION AND SUPPORT_SSE_BUILD) + set(GCC_OPTIM_FLAGS "-ffast-math -msse -msse2 -msse3") +endif() if(APPLE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_OPTIM_FLAGS}") diff --git a/intern/cycles/SConscript b/intern/cycles/SConscript index 27943ed6ac6..5ecd52d369f 100644 --- a/intern/cycles/SConscript +++ b/intern/cycles/SConscript @@ -24,10 +24,12 @@ defs.append('WITH_MULTI') defs.append('WITH_CUDA') if env['OURPLATFORM'] in ('win32-mingw'): - cxxflags.append('-fno-rtti -ffast-math -msse -msse2 -msse3 -mtune=native'.split()) - ccflags.append('-ffast-math -msse -msse2 -msse3 -mtune=native'.split()) + cxxflags.append('-fno-rtti'.split()) + if env['WITH_BF_RAYOPTIMIZATION']: + cxxflags.append('-ffast-math -msse -msse2 -msse3'.split()) + ccflags.append('-ffast-math -msse -msse2 -msse3'.split()) defs.append('BOOST_NO_RTTI BOOST_NO_TYPEID'.split()) - + incs.extend('. bvh render device kernel kernel/osl kernel/svm util subd'.split()) incs.extend('#intern/guardedalloc #source/blender/makesrna #source/blender/makesdna'.split()) incs.extend('#source/blender/blenloader ../../source/blender/makesrna/intern'.split()) From 5b1a42cb17e13af08803a61eb65ce7e068ecb127 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 10 Nov 2011 14:32:16 +0000 Subject: [PATCH 13/22] Cycles: * Fix excessive fireflies in Velvet BSDF (patch by David). * Disable some unused SSE code * Remove RTTI disabling flags for now, this is giving some compile issues and was only needed of OSL which we're not using yet. --- build_files/scons/config/linux-config.py | 12 +++++ build_files/scons/tools/btools.py | 2 +- intern/cycles/CMakeLists.txt | 3 ++ intern/cycles/SConscript | 5 ++- intern/cycles/kernel/kernel_compat_cpu.h | 4 +- .../cycles/kernel/svm/bsdf_ashikhmin_velvet.h | 45 +++++++++++-------- intern/cycles/util/util_types.h | 3 +- 7 files changed, 50 insertions(+), 24 deletions(-) diff --git a/build_files/scons/config/linux-config.py b/build_files/scons/config/linux-config.py index 9e2352c51fc..1ac1db62a28 100644 --- a/build_files/scons/config/linux-config.py +++ b/build_files/scons/config/linux-config.py @@ -180,6 +180,18 @@ BF_JEMALLOC_LIB_STATIC = '${BF_JEMALLOC_LIBPATH}/libjemalloc.a' WITH_BF_CYCLES = False +WITH_BF_OIIO = True +BF_OIIO = LIBDIR + '/openimageio' +BF_OIIO_INC = BF_OIIO + '/include' +BF_OIIO_LIB = 'OpenImageIO' +BF_OIIO_LIBPATH = BF_OIIO + '/lib' + +WITH_BF_BOOST = True +BF_BOOST = LIBDIR + '/boost' +BF_BOOST_INC = BF_BOOST + '/include' +BF_BOOST_LIB = 'boost_date_time-mt boost_filesystem-mt boost_regex-mt boost_system-mt boost_thread-mt' +BF_BOOST_LIBPATH = BF_BOOST + '/lib' + WITH_BF_OPENMP = True #Ray trace optimization diff --git a/build_files/scons/tools/btools.py b/build_files/scons/tools/btools.py index 7de1649fd62..417bbcc48ba 100644 --- a/build_files/scons/tools/btools.py +++ b/build_files/scons/tools/btools.py @@ -156,7 +156,7 @@ def validate_arguments(args, bc): 'WITH_BF_JEMALLOC', 'WITH_BF_STATICJEMALLOC', 'BF_JEMALLOC', 'BF_JEMALLOC_INC', 'BF_JEMALLOC_LIBPATH', 'BF_JEMALLOC_LIB', 'BF_JEMALLOC_LIB_STATIC', 'BUILDBOT_BRANCH', 'WITH_BF_3DMOUSE', 'WITH_BF_STATIC3DMOUSE', 'BF_3DMOUSE', 'BF_3DMOUSE_INC', 'BF_3DMOUSE_LIB', 'BF_3DMOUSE_LIBPATH', 'BF_3DMOUSE_LIB_STATIC', - 'WITH_BF_CYCLES', + 'WITH_BF_CYCLES', 'WITH_BF_CYCLES_BINARIES' 'BF_CYCLES_BINARIES_ARCH', 'WITH_BF_OIIO', 'WITH_BF_STATICOIIO', 'BF_OIIO', 'BF_OIIO_INC', 'BF_OIIO_LIB', 'BF_OIIO_LIB_STATIC', 'BF_OIIO_LIBPATH', 'WITH_BF_BOOST', 'WITH_BF_STATICBOOST', 'BF_BOOST', 'BF_BOOST_INC', 'BF_BOOST_LIB', 'BF_BOOST_LIB_STATIC', 'BF_BOOST_LIBPATH' ] diff --git a/intern/cycles/CMakeLists.txt b/intern/cycles/CMakeLists.txt index c0992aae7da..d1ee5e0050d 100644 --- a/intern/cycles/CMakeLists.txt +++ b/intern/cycles/CMakeLists.txt @@ -32,6 +32,9 @@ if(UNIX AND NOT APPLE) set(RTTI_DISABLE_FLAGS "-fno-rtti -DBOOST_NO_RTTI -DBOOST_NO_TYPEID") endif() +# not needed yet, is for open shading language +set(RTTI_DISABLE_FLAGS "") + # Definitions and Includes add_definitions(${BOOST_DEFINITIONS} ${OPENIMAGEIO_DEFINITIONS}) diff --git a/intern/cycles/SConscript b/intern/cycles/SConscript index 5ecd52d369f..e2c81edea37 100644 --- a/intern/cycles/SConscript +++ b/intern/cycles/SConscript @@ -24,11 +24,12 @@ defs.append('WITH_MULTI') defs.append('WITH_CUDA') if env['OURPLATFORM'] in ('win32-mingw'): - cxxflags.append('-fno-rtti'.split()) if env['WITH_BF_RAYOPTIMIZATION']: cxxflags.append('-ffast-math -msse -msse2 -msse3'.split()) ccflags.append('-ffast-math -msse -msse2 -msse3'.split()) - defs.append('BOOST_NO_RTTI BOOST_NO_TYPEID'.split()) + # not needed yet, is for open shading language + # cxxflags.append('-fno-rtti'.split()) + # defs.append('BOOST_NO_RTTI BOOST_NO_TYPEID'.split()) incs.extend('. bvh render device kernel kernel/osl kernel/svm util subd'.split()) incs.extend('#intern/guardedalloc #source/blender/makesrna #source/blender/makesdna'.split()) diff --git a/intern/cycles/kernel/kernel_compat_cpu.h b/intern/cycles/kernel/kernel_compat_cpu.h index cee0710492f..fd96148968f 100644 --- a/intern/cycles/kernel/kernel_compat_cpu.h +++ b/intern/cycles/kernel/kernel_compat_cpu.h @@ -43,7 +43,7 @@ template struct texture { return data[index]; } - __m128 fetch_m128(int index) + /*__m128 fetch_m128(int index) { kernel_assert(index >= 0 && index < width); return ((__m128*)data)[index]; @@ -53,7 +53,7 @@ template struct texture { { kernel_assert(index >= 0 && index < width); return ((__m128i*)data)[index]; - } + }*/ float interp(float x) { diff --git a/intern/cycles/kernel/svm/bsdf_ashikhmin_velvet.h b/intern/cycles/kernel/svm/bsdf_ashikhmin_velvet.h index e16efebf5bb..2e9343647b8 100644 --- a/intern/cycles/kernel/svm/bsdf_ashikhmin_velvet.h +++ b/intern/cycles/kernel/svm/bsdf_ashikhmin_velvet.h @@ -68,8 +68,11 @@ __device float3 bsdf_ashikhmin_velvet_eval_reflect(const ShaderData *sd, const S float cosNH = dot(m_N, H); float cosHO = fabsf(dot(I, H)); + if(!(fabsf(cosNH) < 1.0f-1e-5f && cosHO > 1e-5f)) + return make_float3(0, 0, 0); + float cosNHdivHO = cosNH / cosHO; - cosNHdivHO = fmaxf(cosNHdivHO, 0.00001f); + cosNHdivHO = fmaxf(cosNHdivHO, 1e-5f); float fac1 = 2 * fabsf(cosNHdivHO * cosNO); float fac2 = 2 * fabsf(cosNHdivHO * cosNI); @@ -86,6 +89,7 @@ __device float3 bsdf_ashikhmin_velvet_eval_reflect(const ShaderData *sd, const S *pdf = 0.5f * M_1_PI_F; return make_float3(out, out, out); } + return make_float3(0, 0, 0); } @@ -116,31 +120,36 @@ __device int bsdf_ashikhmin_velvet_sample(const ShaderData *sd, const ShaderClos float cosNH = dot(m_N, H); float cosHO = fabsf(dot(sd->I, H)); - float cosNHdivHO = cosNH / cosHO; - cosNHdivHO = fmaxf(cosNHdivHO, 0.00001f); + if(fabsf(cosNO) > 1e-5f && fabsf(cosNH) < 1.0f-1e-5f && cosHO > 1e-5f) { + float cosNHdivHO = cosNH / cosHO; + cosNHdivHO = fmaxf(cosNHdivHO, 1e-5f); - float fac1 = 2 * fabsf(cosNHdivHO * cosNO); - float fac2 = 2 * fabsf(cosNHdivHO * cosNI); + float fac1 = 2 * fabsf(cosNHdivHO * cosNO); + float fac2 = 2 * fabsf(cosNHdivHO * cosNI); - float sinNH2 = 1 - cosNH * cosNH; - float sinNH4 = sinNH2 * sinNH2; - float cotangent2 = (cosNH * cosNH) / sinNH2; + float sinNH2 = 1 - cosNH * cosNH; + float sinNH4 = sinNH2 * sinNH2; + float cotangent2 = (cosNH * cosNH) / sinNH2; - float D = expf(-cotangent2 * m_invsigma2) * m_invsigma2 * M_1_PI_F / sinNH4; - float G = min(1.0f, min(fac1, fac2)); // TODO: derive G from D analytically + float D = expf(-cotangent2 * m_invsigma2) * m_invsigma2 * M_1_PI_F / sinNH4; + float G = min(1.0f, min(fac1, fac2)); // TODO: derive G from D analytically - float power = 0.25f * (D * G) / cosNO; + float power = 0.25f * (D * G) / cosNO; - *eval = make_float3(power, power, power); + *eval = make_float3(power, power, power); #ifdef __RAY_DIFFERENTIALS__ - // TODO: find a better approximation for the retroreflective bounce - *domega_in_dx = (2 * dot(m_N, sd->dI.dx)) * m_N - sd->dI.dx; - *domega_in_dy = (2 * dot(m_N, sd->dI.dy)) * m_N - sd->dI.dy; - *domega_in_dx *= 125.0f; - *domega_in_dy *= 125.0f; + // TODO: find a better approximation for the retroreflective bounce + *domega_in_dx = (2 * dot(m_N, sd->dI.dx)) * m_N - sd->dI.dx; + *domega_in_dy = (2 * dot(m_N, sd->dI.dy)) * m_N - sd->dI.dy; + *domega_in_dx *= 125.0f; + *domega_in_dy *= 125.0f; #endif - } else + } + else + *pdf = 0.0f; + } + else *pdf = 0.0f; return LABEL_REFLECT|LABEL_DIFFUSE; diff --git a/intern/cycles/util/util_types.h b/intern/cycles/util/util_types.h index af5b91c963a..2c0ae13ad2a 100644 --- a/intern/cycles/util/util_types.h +++ b/intern/cycles/util/util_types.h @@ -46,12 +46,13 @@ /* SIMD Types */ +/* not needed yet, will be for qbvh #ifndef __KERNEL_GPU__ #include #include -#endif +#endif*/ #ifndef _WIN32 #ifndef __KERNEL_GPU__ From 9dcf4bf0a6887b625678311a0c3b72ab6a7d311c Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 10 Nov 2011 14:53:56 +0000 Subject: [PATCH 14/22] Cycles: attempt to fix build issue with mingw. --- intern/cycles/util/util_math.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/intern/cycles/util/util_math.h b/intern/cycles/util/util_math.h index 38e90f0b2b2..c0dd627a606 100644 --- a/intern/cycles/util/util_math.h +++ b/intern/cycles/util/util_math.h @@ -766,7 +766,7 @@ __device_inline float __uint_as_float(uint i) /* Interpolation */ -template __device_inline A lerp(const A& a, const A& b, const B& t) +template A lerp(const A& a, const A& b, const B& t) { return (A)(a * ((B)1 - t) + b * t); } From 7d110c2923c1dcd458c1a772b486c3c17caa5e65 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 10 Nov 2011 16:02:46 +0000 Subject: [PATCH 15/22] Cycles: fix missing particle panels and show emitter option not being respected. --- intern/cycles/blender/addon/ui.py | 17 ++++++++++++++++- intern/cycles/blender/blender_object.cpp | 11 ++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py index 01b358869ec..7c7d4c81b89 100644 --- a/intern/cycles/blender/addon/ui.py +++ b/intern/cycles/blender/addon/ui.py @@ -735,7 +735,22 @@ def get_panels(): bpy.types.TEXTURE_PT_distortednoise, bpy.types.TEXTURE_PT_voxeldata, bpy.types.TEXTURE_PT_pointdensity, - bpy.types.TEXTURE_PT_pointdensity_turbulence] + bpy.types.TEXTURE_PT_pointdensity_turbulence, + bpy.types.PARTICLE_PT_context_particles, + bpy.types.PARTICLE_PT_emission, + bpy.types.PARTICLE_PT_hair_dynamics, + bpy.types.PARTICLE_PT_cache, + bpy.types.PARTICLE_PT_velocity, + bpy.types.PARTICLE_PT_rotation, + bpy.types.PARTICLE_PT_physics, + bpy.types.PARTICLE_PT_boidbrain, + bpy.types.PARTICLE_PT_render, + bpy.types.PARTICLE_PT_draw, + bpy.types.PARTICLE_PT_children, + bpy.types.PARTICLE_PT_field_weights, + bpy.types.PARTICLE_PT_force_fields, + bpy.types.PARTICLE_PT_vertexgroups, + bpy.types.PARTICLE_PT_custom_props] def register(): bpy.types.RENDER_PT_render.append(draw_device) diff --git a/intern/cycles/blender/blender_object.cpp b/intern/cycles/blender/blender_object.cpp index 1095a3ee026..0edac820e94 100644 --- a/intern/cycles/blender/blender_object.cpp +++ b/intern/cycles/blender/blender_object.cpp @@ -229,8 +229,17 @@ void BlenderSync::sync_objects(BL::SpaceView3D b_v3d) } object_free_duplilist(*b_ob); + + /* check if we should render duplicator */ + hide = true; + BL::Object::particle_systems_iterator b_psys; + + for(b_ob->particle_systems.begin(b_psys); b_psys != b_ob->particle_systems.end(); ++b_psys) + if(b_psys->settings().use_render_emitter()) + hide = false; } - else { + + if(!hide) { /* object itself */ Transform tfm = get_transform(b_ob->matrix_world()); sync_object(*b_ob, 0, *b_ob, tfm, visibility); From 8ef6d501859e232eb8d3108b025b8dbbc6104f74 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Thu, 10 Nov 2011 17:19:12 +0000 Subject: [PATCH 16/22] Mark unused variable. --- source/blender/blenkernel/intern/dynamicpaint.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/blenkernel/intern/dynamicpaint.c b/source/blender/blenkernel/intern/dynamicpaint.c index e1debd5cd5f..3fbd706ea2e 100644 --- a/source/blender/blenkernel/intern/dynamicpaint.c +++ b/source/blender/blenkernel/intern/dynamicpaint.c @@ -4482,7 +4482,7 @@ static int dynamicPaint_surfaceHasMoved(DynamicPaintSurface *surface, Object *ob return ret; } -static int surface_needsVelocityData(DynamicPaintSurface *surface, Scene *scene, Object *ob) +static int surface_needsVelocityData(DynamicPaintSurface *surface, Scene *scene, Object *UNUSED(ob)) { if (surface->effect & MOD_DPAINT_EFFECT_DO_DRIP) return 1; From c8cb79a11f41bde65c762a334d48ce4bf854dd47 Mon Sep 17 00:00:00 2001 From: "Guillermo S. Romero" Date: Thu, 10 Nov 2011 17:43:37 +0000 Subject: [PATCH 17/22] SVN maintenance. --- source/blender/blenkernel/intern/dynamicpaint.c | 2 +- source/blender/blenlib/intern/threads.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/blenkernel/intern/dynamicpaint.c b/source/blender/blenkernel/intern/dynamicpaint.c index 3fbd706ea2e..354aa57e200 100644 --- a/source/blender/blenkernel/intern/dynamicpaint.c +++ b/source/blender/blenkernel/intern/dynamicpaint.c @@ -4888,4 +4888,4 @@ int dynamicPaint_calculateFrame(DynamicPaintSurface *surface, Scene *scene, Obje } return dynamicPaint_doStep(scene, cObject, surface, timescale, 0.0f); -} \ No newline at end of file +} diff --git a/source/blender/blenlib/intern/threads.c b/source/blender/blenlib/intern/threads.c index 38b3fe669b6..98d2179e2dd 100644 --- a/source/blender/blenlib/intern/threads.c +++ b/source/blender/blenlib/intern/threads.c @@ -682,4 +682,4 @@ void BLI_end_threaded_malloc(void) thread_levels--; if(thread_levels==0) MEM_set_lock_callback(NULL, NULL); -} \ No newline at end of file +} From 9e3deee808e127e3700a91d6547c22716f7d7ccd Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Thu, 10 Nov 2011 19:10:23 +0000 Subject: [PATCH 18/22] 2.6 Physics UI Files: * Remove redundant check for md, this is already done in the super class poll. --- .../startup/bl_ui/properties_physics_cloth.py | 80 +++---- .../bl_ui/properties_physics_dynamicpaint.py | 121 +++++----- .../startup/bl_ui/properties_physics_fluid.py | 222 +++++++++--------- .../startup/bl_ui/properties_physics_smoke.py | 83 ++++--- .../bl_ui/properties_physics_softbody.py | 27 +-- 5 files changed, 262 insertions(+), 271 deletions(-) diff --git a/release/scripts/startup/bl_ui/properties_physics_cloth.py b/release/scripts/startup/bl_ui/properties_physics_cloth.py index afb3c000980..490b510587d 100644 --- a/release/scripts/startup/bl_ui/properties_physics_cloth.py +++ b/release/scripts/startup/bl_ui/properties_physics_cloth.py @@ -60,61 +60,59 @@ class PHYSICS_PT_cloth(PhysicButtonsPanel, Panel): md = context.cloth ob = context.object + cloth = md.settings - if md: - cloth = md.settings + split = layout.split() - split = layout.split() + split.active = cloth_panel_enabled(md) - split.active = cloth_panel_enabled(md) + col = split.column() - col = split.column() + col.label(text="Presets:") + sub = col.row(align=True) + sub.menu("CLOTH_MT_presets", text=bpy.types.CLOTH_MT_presets.bl_label) + sub.operator("cloth.preset_add", text="", icon='ZOOMIN') + sub.operator("cloth.preset_add", text="", icon='ZOOMOUT').remove_active = True - col.label(text="Presets:") - sub = col.row(align=True) - sub.menu("CLOTH_MT_presets", text=bpy.types.CLOTH_MT_presets.bl_label) - sub.operator("cloth.preset_add", text="", icon='ZOOMIN') - sub.operator("cloth.preset_add", text="", icon='ZOOMOUT').remove_active = True + col.label(text="Quality:") + col.prop(cloth, "quality", text="Steps", slider=True) - col.label(text="Quality:") - col.prop(cloth, "quality", text="Steps", slider=True) + col.label(text="Material:") + col.prop(cloth, "mass") + col.prop(cloth, "structural_stiffness", text="Structural") + col.prop(cloth, "bending_stiffness", text="Bending") - col.label(text="Material:") - col.prop(cloth, "mass") - col.prop(cloth, "structural_stiffness", text="Structural") - col.prop(cloth, "bending_stiffness", text="Bending") + col = split.column() - col = split.column() + col.label(text="Damping:") + col.prop(cloth, "spring_damping", text="Spring") + col.prop(cloth, "air_damping", text="Air") - col.label(text="Damping:") - col.prop(cloth, "spring_damping", text="Spring") - col.prop(cloth, "air_damping", text="Air") + col.prop(cloth, "use_pin_cloth", text="Pinning") + sub = col.column() + sub.active = cloth.use_pin_cloth + sub.prop_search(cloth, "vertex_group_mass", ob, "vertex_groups", text="") + sub.prop(cloth, "pin_stiffness", text="Stiffness") - col.prop(cloth, "use_pin_cloth", text="Pinning") - sub = col.column() - sub.active = cloth.use_pin_cloth - sub.prop_search(cloth, "vertex_group_mass", ob, "vertex_groups", text="") - sub.prop(cloth, "pin_stiffness", text="Stiffness") + col.label(text="Pre roll:") + col.prop(cloth, "pre_roll", text="Frame") - col.label(text="Pre roll:") - col.prop(cloth, "pre_roll", text="Frame") + # Disabled for now + """ + if cloth.vertex_group_mass: + layout.label(text="Goal:") - # Disabled for now - """ - if cloth.vertex_group_mass: - layout.label(text="Goal:") + col = layout.column_flow() + col.prop(cloth, "goal_default", text="Default") + col.prop(cloth, "goal_spring", text="Stiffness") + col.prop(cloth, "goal_friction", text="Friction") + """ - col = layout.column_flow() - col.prop(cloth, "goal_default", text="Default") - col.prop(cloth, "goal_spring", text="Stiffness") - col.prop(cloth, "goal_friction", text="Friction") - """ + key = ob.data.shape_keys - key = ob.data.shape_keys - - if key: - col.label(text="Rest Shape Key:") - col.prop_search(cloth, "rest_shape_key", key, "key_blocks", text="") + if key: + col.label(text="Rest Shape Key:") + col.prop_search(cloth, "rest_shape_key", key, "key_blocks", text="") class PHYSICS_PT_cloth_cache(PhysicButtonsPanel, Panel): diff --git a/release/scripts/startup/bl_ui/properties_physics_dynamicpaint.py b/release/scripts/startup/bl_ui/properties_physics_dynamicpaint.py index fdaa1ae7a60..9d6013a2531 100644 --- a/release/scripts/startup/bl_ui/properties_physics_dynamicpaint.py +++ b/release/scripts/startup/bl_ui/properties_physics_dynamicpaint.py @@ -45,73 +45,72 @@ class PHYSICS_PT_dynamic_paint(PhysicButtonsPanel, bpy.types.Panel): md = context.dynamic_paint ob = context.object - if md: - layout.prop(md, "ui_type", expand=True) + layout.prop(md, "ui_type", expand=True) - if (md.ui_type == "CANVAS"): - canvas = md.canvas_settings + if (md.ui_type == "CANVAS"): + canvas = md.canvas_settings + + if (not canvas): + layout.operator("dpaint.type_toggle", text="Add Canvas").type = 'CANVAS' + else: + layout.operator("dpaint.type_toggle", text="Remove Canvas", icon='X').type = 'CANVAS' + + surface = canvas.canvas_surfaces.active + row = layout.row() + row.template_list(canvas, "canvas_surfaces", canvas.canvas_surfaces, "active_index", rows=2) + + col = row.column(align=True) + col.operator("dpaint.surface_slot_add", icon='ZOOMIN', text="") + col.operator("dpaint.surface_slot_remove", icon='ZOOMOUT', text="") - if (not canvas): - layout.operator("dpaint.type_toggle", text="Add Canvas").type = 'CANVAS' - else: - layout.operator("dpaint.type_toggle", text="Remove Canvas", icon='X').type = 'CANVAS' - - surface = canvas.canvas_surfaces.active - row = layout.row() - row.template_list(canvas, "canvas_surfaces", canvas.canvas_surfaces, "active_index", rows=2) - - col = row.column(align=True) - col.operator("dpaint.surface_slot_add", icon='ZOOMIN', text="") - col.operator("dpaint.surface_slot_remove", icon='ZOOMOUT', text="") + if surface: + layout.prop(surface, "name") + layout.prop(surface, "surface_format", expand=False) + col = layout.column() - if surface: - layout.prop(surface, "name") - layout.prop(surface, "surface_format", expand=False) - col = layout.column() - - if surface.surface_format != "VERTEX": - col.label(text="Quality:") - col.prop(surface, "image_resolution") - col.prop(surface, "use_antialiasing") - - col = layout.column() - col.label(text="Frames:") - split = col.split() - - col = split.column(align=True) - col.prop(surface, "frame_start", text="Start") - col.prop(surface, "frame_end", text="End") - - col = split.column() - col.prop(surface, "frame_substeps") - - elif (md.ui_type == "BRUSH"): - brush = md.brush_settings - engine = context.scene.render.engine + if surface.surface_format != "VERTEX": + col.label(text="Quality:") + col.prop(surface, "image_resolution") + col.prop(surface, "use_antialiasing") - if (not brush): - layout.operator("dpaint.type_toggle", text="Add Brush").type = 'BRUSH' - else: - layout.operator("dpaint.type_toggle", text="Remove Brush", icon='X').type = 'BRUSH' - - split = layout.split() - - col = split.column() - col.prop(brush, "absolute_alpha") - col.prop(brush, "paint_erase") - col.prop(brush, "paint_wetness", text="Wetness") + col = layout.column() + col.label(text="Frames:") + split = col.split() + + col = split.column(align=True) + col.prop(surface, "frame_start", text="Start") + col.prop(surface, "frame_end", text="End") col = split.column() - if (engine == 'BLENDER_RENDER'): - sub = col.column() - sub.active = (brush.paint_source != "PARTICLE_SYSTEM"); - sub.prop(brush, "use_material") - if brush.use_material and brush.paint_source != "PARTICLE_SYSTEM" and (engine == 'BLENDER_RENDER'): - col.prop(brush, "material", text="") - col.prop(brush, "paint_alpha", text="Alpha Factor") - else: - col.prop(brush, "paint_color", text="") - col.prop(brush, "paint_alpha", text="Alpha") + col.prop(surface, "frame_substeps") + + elif (md.ui_type == "BRUSH"): + brush = md.brush_settings + engine = context.scene.render.engine + + if (not brush): + layout.operator("dpaint.type_toggle", text="Add Brush").type = 'BRUSH' + else: + layout.operator("dpaint.type_toggle", text="Remove Brush", icon='X').type = 'BRUSH' + + split = layout.split() + + col = split.column() + col.prop(brush, "absolute_alpha") + col.prop(brush, "paint_erase") + col.prop(brush, "paint_wetness", text="Wetness") + + col = split.column() + if (engine == 'BLENDER_RENDER'): + sub = col.column() + sub.active = (brush.paint_source != "PARTICLE_SYSTEM"); + sub.prop(brush, "use_material") + if brush.use_material and brush.paint_source != "PARTICLE_SYSTEM" and (engine == 'BLENDER_RENDER'): + col.prop(brush, "material", text="") + col.prop(brush, "paint_alpha", text="Alpha Factor") + else: + col.prop(brush, "paint_color", text="") + col.prop(brush, "paint_alpha", text="Alpha") class PHYSICS_PT_dp_advanced_canvas(PhysicButtonsPanel, bpy.types.Panel): diff --git a/release/scripts/startup/bl_ui/properties_physics_fluid.py b/release/scripts/startup/bl_ui/properties_physics_fluid.py index ce65350e69b..a89249a6f75 100644 --- a/release/scripts/startup/bl_ui/properties_physics_fluid.py +++ b/release/scripts/startup/bl_ui/properties_physics_fluid.py @@ -40,151 +40,149 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel, Panel): layout = self.layout md = context.fluid + fluid = md.settings - if md: - fluid = md.settings + row = layout.row() + if fluid is None: + row.label("Built without fluids") + return - row = layout.row() - if fluid is None: - row.label("Built without fluids") - return + row.prop(fluid, "type") + if fluid.type not in {'NONE', 'DOMAIN', 'PARTICLE', 'FLUID'}: + row.prop(fluid, "use", text="") - row.prop(fluid, "type") - if fluid.type not in {'NONE', 'DOMAIN', 'PARTICLE', 'FLUID'}: - row.prop(fluid, "use", text="") + layout = layout.column() + if fluid.type not in {'NONE', 'DOMAIN', 'PARTICLE', 'FLUID'}: + layout.active = fluid.use - layout = layout.column() - if fluid.type not in {'NONE', 'DOMAIN', 'PARTICLE', 'FLUID'}: - layout.active = fluid.use + if fluid.type == 'DOMAIN': + layout.operator("fluid.bake", text="Bake (Req. Memory:" + " %s)" % fluid.memory_estimate, icon='MOD_FLUIDSIM') + split = layout.split() - if fluid.type == 'DOMAIN': - layout.operator("fluid.bake", text="Bake (Req. Memory:" + " %s)" % fluid.memory_estimate, icon='MOD_FLUIDSIM') - split = layout.split() + col = split.column() + col.label(text="Resolution:") + col.prop(fluid, "resolution", text="Final") + col.label(text="Render Display:") + col.prop(fluid, "render_display_mode", text="") - col = split.column() - col.label(text="Resolution:") - col.prop(fluid, "resolution", text="Final") - col.label(text="Render Display:") - col.prop(fluid, "render_display_mode", text="") + col = split.column() + col.label() + col.prop(fluid, "preview_resolution", text="Preview") + col.label(text="Viewport Display:") + col.prop(fluid, "viewport_display_mode", text="") - col = split.column() - col.label() - col.prop(fluid, "preview_resolution", text="Preview") - col.label(text="Viewport Display:") - col.prop(fluid, "viewport_display_mode", text="") + split = layout.split() - split = layout.split() + col = split.column() + col.label(text="Time:") + sub = col.column(align=True) + sub.prop(fluid, "start_time", text="Start") + sub.prop(fluid, "end_time", text="End") - col = split.column() - col.label(text="Time:") - sub = col.column(align=True) - sub.prop(fluid, "start_time", text="Start") - sub.prop(fluid, "end_time", text="End") + col = split.column() + col.label() + col.prop(fluid, "use_speed_vectors") + col.prop(fluid, "use_reverse_frames") - col = split.column() - col.label() - col.prop(fluid, "use_speed_vectors") - col.prop(fluid, "use_reverse_frames") + layout.prop(fluid, "filepath", text="") - layout.prop(fluid, "filepath", text="") + elif fluid.type == 'FLUID': + split = layout.split() - elif fluid.type == 'FLUID': - split = layout.split() + col = split.column() + col.label(text="Volume Initialization:") + col.prop(fluid, "volume_initialization", text="") + col.prop(fluid, "use_animated_mesh") - col = split.column() - col.label(text="Volume Initialization:") - col.prop(fluid, "volume_initialization", text="") - col.prop(fluid, "use_animated_mesh") + col = split.column() + col.label(text="Initial Velocity:") + col.prop(fluid, "initial_velocity", text="") - col = split.column() - col.label(text="Initial Velocity:") - col.prop(fluid, "initial_velocity", text="") + elif fluid.type == 'OBSTACLE': + split = layout.split() - elif fluid.type == 'OBSTACLE': - split = layout.split() + col = split.column() + col.label(text="Volume Initialization:") + col.prop(fluid, "volume_initialization", text="") + col.prop(fluid, "use_animated_mesh") - col = split.column() - col.label(text="Volume Initialization:") - col.prop(fluid, "volume_initialization", text="") - col.prop(fluid, "use_animated_mesh") + col = split.column() + col.label(text="Slip Type:") + col.prop(fluid, "slip_type", text="") + if fluid.slip_type == 'PARTIALSLIP': + col.prop(fluid, "partial_slip_factor", slider=True, text="Amount") - col = split.column() - col.label(text="Slip Type:") - col.prop(fluid, "slip_type", text="") - if fluid.slip_type == 'PARTIALSLIP': - col.prop(fluid, "partial_slip_factor", slider=True, text="Amount") + col.label(text="Impact:") + col.prop(fluid, "impact_factor", text="Factor") - col.label(text="Impact:") - col.prop(fluid, "impact_factor", text="Factor") + elif fluid.type == 'INFLOW': + split = layout.split() - elif fluid.type == 'INFLOW': - split = layout.split() + col = split.column() + col.label(text="Volume Initialization:") + col.prop(fluid, "volume_initialization", text="") + col.prop(fluid, "use_animated_mesh") + row = col.row() + row.active = not fluid.use_animated_mesh + row.prop(fluid, "use_local_coords") - col = split.column() - col.label(text="Volume Initialization:") - col.prop(fluid, "volume_initialization", text="") - col.prop(fluid, "use_animated_mesh") - row = col.row() - row.active = not fluid.use_animated_mesh - row.prop(fluid, "use_local_coords") + col = split.column() + col.label(text="Inflow Velocity:") + col.prop(fluid, "inflow_velocity", text="") - col = split.column() - col.label(text="Inflow Velocity:") - col.prop(fluid, "inflow_velocity", text="") + elif fluid.type == 'OUTFLOW': + split = layout.split() - elif fluid.type == 'OUTFLOW': - split = layout.split() + col = split.column() + col.label(text="Volume Initialization:") + col.prop(fluid, "volume_initialization", text="") + col.prop(fluid, "use_animated_mesh") - col = split.column() - col.label(text="Volume Initialization:") - col.prop(fluid, "volume_initialization", text="") - col.prop(fluid, "use_animated_mesh") + split.column() - split.column() + elif fluid.type == 'PARTICLE': + split = layout.split() - elif fluid.type == 'PARTICLE': - split = layout.split() + col = split.column() + col.label(text="Influence:") + col.prop(fluid, "particle_influence", text="Size") + col.prop(fluid, "alpha_influence", text="Alpha") - col = split.column() - col.label(text="Influence:") - col.prop(fluid, "particle_influence", text="Size") - col.prop(fluid, "alpha_influence", text="Alpha") + col = split.column() + col.label(text="Type:") + col.prop(fluid, "use_drops") + col.prop(fluid, "use_floats") + col.prop(fluid, "show_tracer") - col = split.column() - col.label(text="Type:") - col.prop(fluid, "use_drops") - col.prop(fluid, "use_floats") - col.prop(fluid, "show_tracer") + layout.prop(fluid, "filepath", text="") - layout.prop(fluid, "filepath", text="") + elif fluid.type == 'CONTROL': + split = layout.split() - elif fluid.type == 'CONTROL': - split = layout.split() + col = split.column() + col.label(text="") + col.prop(fluid, "quality", slider=True) + col.prop(fluid, "use_reverse_frames") - col = split.column() - col.label(text="") - col.prop(fluid, "quality", slider=True) - col.prop(fluid, "use_reverse_frames") + col = split.column() + col.label(text="Time:") + sub = col.column(align=True) + sub.prop(fluid, "start_time", text="Start") + sub.prop(fluid, "end_time", text="End") - col = split.column() - col.label(text="Time:") - sub = col.column(align=True) - sub.prop(fluid, "start_time", text="Start") - sub.prop(fluid, "end_time", text="End") + split = layout.split() - split = layout.split() + col = split.column() + col.label(text="Attraction Force:") + sub = col.column(align=True) + sub.prop(fluid, "attraction_strength", text="Strength") + sub.prop(fluid, "attraction_radius", text="Radius") - col = split.column() - col.label(text="Attraction Force:") - sub = col.column(align=True) - sub.prop(fluid, "attraction_strength", text="Strength") - sub.prop(fluid, "attraction_radius", text="Radius") - - col = split.column() - col.label(text="Velocity Force:") - sub = col.column(align=True) - sub.prop(fluid, "velocity_strength", text="Strength") - sub.prop(fluid, "velocity_radius", text="Radius") + col = split.column() + col.label(text="Velocity Force:") + sub = col.column(align=True) + sub.prop(fluid, "velocity_strength", text="Strength") + sub.prop(fluid, "velocity_radius", text="Radius") class PHYSICS_PT_domain_gravity(PhysicButtonsPanel, Panel): diff --git a/release/scripts/startup/bl_ui/properties_physics_smoke.py b/release/scripts/startup/bl_ui/properties_physics_smoke.py index e270b53d6bb..9f760f2f024 100644 --- a/release/scripts/startup/bl_ui/properties_physics_smoke.py +++ b/release/scripts/startup/bl_ui/properties_physics_smoke.py @@ -47,60 +47,59 @@ class PHYSICS_PT_smoke(PhysicButtonsPanel, Panel): md = context.smoke ob = context.object - if md: - layout.prop(md, "smoke_type", expand=True) + layout.prop(md, "smoke_type", expand=True) - if md.smoke_type == 'DOMAIN': - domain = md.domain_settings + if md.smoke_type == 'DOMAIN': + domain = md.domain_settings - split = layout.split() + split = layout.split() - split.enabled = not domain.point_cache.is_baked + split.enabled = not domain.point_cache.is_baked - col = split.column() - col.label(text="Resolution:") - col.prop(domain, "resolution_max", text="Divisions") - col.label(text="Time:") - col.prop(domain, "time_scale", text="Scale") - col.label(text="Border Collisions:") - col.prop(domain, "collision_extents", text="") + col = split.column() + col.label(text="Resolution:") + col.prop(domain, "resolution_max", text="Divisions") + col.label(text="Time:") + col.prop(domain, "time_scale", text="Scale") + col.label(text="Border Collisions:") + col.prop(domain, "collision_extents", text="") - col = split.column() - col.label(text="Behavior:") - col.prop(domain, "alpha") - col.prop(domain, "beta", text="Temp. Diff.") - col.prop(domain, "vorticity") - col.prop(domain, "use_dissolve_smoke", text="Dissolve") - sub = col.column() - sub.active = domain.use_dissolve_smoke - sub.prop(domain, "dissolve_speed", text="Time") - sub.prop(domain, "use_dissolve_smoke_log", text="Slow") + col = split.column() + col.label(text="Behavior:") + col.prop(domain, "alpha") + col.prop(domain, "beta", text="Temp. Diff.") + col.prop(domain, "vorticity") + col.prop(domain, "use_dissolve_smoke", text="Dissolve") + sub = col.column() + sub.active = domain.use_dissolve_smoke + sub.prop(domain, "dissolve_speed", text="Time") + sub.prop(domain, "use_dissolve_smoke_log", text="Slow") - elif md.smoke_type == 'FLOW': + elif md.smoke_type == 'FLOW': - flow = md.flow_settings + flow = md.flow_settings - split = layout.split() + split = layout.split() - col = split.column() - col.prop(flow, "use_outflow") - col.label(text="Particle System:") - col.prop_search(flow, "particle_system", ob, "particle_systems", text="") + col = split.column() + col.prop(flow, "use_outflow") + col.label(text="Particle System:") + col.prop_search(flow, "particle_system", ob, "particle_systems", text="") - sub = col.column() - sub.active = not md.flow_settings.use_outflow + sub = col.column() + sub.active = not md.flow_settings.use_outflow - sub.prop(flow, "initial_velocity", text="Initial Velocity") - sub = sub.column() - sub.active = flow.initial_velocity - sub.prop(flow, "velocity_factor", text="Multiplier") + sub.prop(flow, "initial_velocity", text="Initial Velocity") + sub = sub.column() + sub.active = flow.initial_velocity + sub.prop(flow, "velocity_factor", text="Multiplier") - sub = split.column() - sub.active = not md.flow_settings.use_outflow - sub.label(text="Initial Values:") - sub.prop(flow, "use_absolute") - sub.prop(flow, "density") - sub.prop(flow, "temperature") + sub = split.column() + sub.active = not md.flow_settings.use_outflow + sub.label(text="Initial Values:") + sub.prop(flow, "use_absolute") + sub.prop(flow, "density") + sub.prop(flow, "temperature") class PHYSICS_PT_smoke_groups(PhysicButtonsPanel, Panel): diff --git a/release/scripts/startup/bl_ui/properties_physics_softbody.py b/release/scripts/startup/bl_ui/properties_physics_softbody.py index b9f8910fa59..ea4180c891f 100644 --- a/release/scripts/startup/bl_ui/properties_physics_softbody.py +++ b/release/scripts/startup/bl_ui/properties_physics_softbody.py @@ -39,8 +39,6 @@ class PhysicButtonsPanel(): def poll(cls, context): ob = context.object rd = context.scene.render -# return (ob and ob.type == 'MESH') and (not rd.use_game_engine) -# i really hate touching things i do not understand completely .. but i think this should read (bjornmose) return (ob and (ob.type == 'MESH' or ob.type == 'LATTICE'or ob.type == 'CURVE')) and (not rd.use_game_engine) and (context.soft_body) @@ -53,22 +51,21 @@ class PHYSICS_PT_softbody(PhysicButtonsPanel, Panel): md = context.soft_body ob = context.object - if md: - softbody = md.settings + softbody = md.settings - # General - split = layout.split() - split.enabled = softbody_panel_enabled(md) + # General + split = layout.split() + split.enabled = softbody_panel_enabled(md) - col = split.column() - col.label(text="Object:") - col.prop(softbody, "friction") - col.prop(softbody, "mass") - col.prop_search(softbody, "vertex_group_mass", ob, "vertex_groups", text="Mass:") + col = split.column() + col.label(text="Object:") + col.prop(softbody, "friction") + col.prop(softbody, "mass") + col.prop_search(softbody, "vertex_group_mass", ob, "vertex_groups", text="Mass:") - col = split.column() - col.label(text="Simulation:") - col.prop(softbody, "speed") + col = split.column() + col.label(text="Simulation:") + col.prop(softbody, "speed") class PHYSICS_PT_softbody_cache(PhysicButtonsPanel, Panel): From cea9c518d57ff7587469ac2cc0fb3450e2ba5833 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Thu, 10 Nov 2011 20:31:50 +0000 Subject: [PATCH 19/22] Dynamic Paint UI: * Code cleanup, changed some splits to row's, much nicer when you only use 2 properties in a row. * if > elif * Removed some duplicated code for an if/elif/else check Did some minor separator() changes too. --- .../bl_ui/properties_physics_dynamicpaint.py | 163 ++++++++---------- 1 file changed, 74 insertions(+), 89 deletions(-) diff --git a/release/scripts/startup/bl_ui/properties_physics_dynamicpaint.py b/release/scripts/startup/bl_ui/properties_physics_dynamicpaint.py index 9d6013a2531..f4bea3b4a52 100644 --- a/release/scripts/startup/bl_ui/properties_physics_dynamicpaint.py +++ b/release/scripts/startup/bl_ui/properties_physics_dynamicpaint.py @@ -54,8 +54,9 @@ class PHYSICS_PT_dynamic_paint(PhysicButtonsPanel, bpy.types.Panel): layout.operator("dpaint.type_toggle", text="Add Canvas").type = 'CANVAS' else: layout.operator("dpaint.type_toggle", text="Remove Canvas", icon='X').type = 'CANVAS' - + surface = canvas.canvas_surfaces.active + row = layout.row() row.template_list(canvas, "canvas_surfaces", canvas.canvas_surfaces, "active_index", rows=2) @@ -65,9 +66,9 @@ class PHYSICS_PT_dynamic_paint(PhysicButtonsPanel, bpy.types.Panel): if surface: layout.prop(surface, "name") - layout.prop(surface, "surface_format", expand=False) - col = layout.column() + layout.prop(surface, "surface_format") + col = layout.column() if surface.surface_format != "VERTEX": col.label(text="Quality:") col.prop(surface, "image_resolution") @@ -81,8 +82,7 @@ class PHYSICS_PT_dynamic_paint(PhysicButtonsPanel, bpy.types.Panel): col.prop(surface, "frame_start", text="Start") col.prop(surface, "frame_end", text="End") - col = split.column() - col.prop(surface, "frame_substeps") + split.prop(surface, "frame_substeps") elif (md.ui_type == "BRUSH"): brush = md.brush_settings @@ -128,47 +128,39 @@ class PHYSICS_PT_dp_advanced_canvas(PhysicButtonsPanel, bpy.types.Panel): surface = canvas.canvas_surfaces.active ob = context.object - layout.prop(surface, "surface_type", expand=False) + layout.prop(surface, "surface_type") layout.separator() # dissolve if (surface.surface_type == "PAINT"): split = layout.split(percentage=0.35) - col = split.column() - col.label(text="Wetmap drying:") + split.label(text="Wetmap drying:") + col = split.column() split = col.split(percentage=0.7) - col = split.column() - col.prop(surface, "dry_speed", text="Time") - col = split.column() - col.prop(surface, "use_dry_log", text="Slow") + split.prop(surface, "dry_speed", text="Time") + split.prop(surface, "use_dry_log", text="Slow") if (surface.surface_type != "WAVE"): split = layout.split(percentage=0.35) col = split.column() - if (surface.surface_type == "DISPLACE"): - col.prop(surface, "use_dissolve", text="Dissolve:") - elif (surface.surface_type == "WEIGHT"): + if (surface.surface_type == "WEIGHT"): col.prop(surface, "use_dissolve", text="Fade:") else: col.prop(surface, "use_dissolve", text="Dissolve:") col = split.column() col.active = surface.use_dissolve split = col.split(percentage=0.7) - col = split.column() - col.prop(surface, "dissolve_speed", text="Time") - col = split.column() - col.prop(surface, "use_dissolve_log", text="Slow") + split.prop(surface, "dissolve_speed", text="Time") + split.prop(surface, "use_dissolve_log", text="Slow") # per type settings if (surface.surface_type == "DISPLACE"): layout.prop(surface, "use_incremental_displace") if (surface.surface_format == "VERTEX"): - split = layout.split() - col = split.column() - col.prop(surface, "depth_clamp") - col = split.column() - col.prop(surface, "displace_factor") + row = layout.row() + row.prop(surface, "depth_clamp") + row.prop(surface, "displace_factor") if (surface.surface_type == "WAVE"): layout.prop(surface, "wave_open_borders") @@ -214,58 +206,54 @@ class PHYSICS_PT_dp_canvas_output(PhysicButtonsPanel, bpy.types.Panel): # paintmap output row = layout.row() row.prop_search(surface, "output_name", ob.data, "vertex_colors", text="Paintmap layer: ") - ic = 'ZOOMIN' if (surface.output_exists(object=ob, index=0)): ic = 'ZOOMOUT' - col = row.column(align=True) - col.operator("dpaint.output_toggle", icon=ic, text="").index = 0 + else: + ic = 'ZOOMIN' + + row.operator("dpaint.output_toggle", icon=ic, text="").index = 0 # wetmap output row = layout.row() row.prop_search(surface, "output_name2", ob.data, "vertex_colors", text="Wetmap layer: ") - ic = 'ZOOMIN' if (surface.output_exists(object=ob, index=1)): ic = 'ZOOMOUT' - col = row.column(align=True) - col.operator("dpaint.output_toggle", icon=ic, text="").index = 1 - if (surface.surface_type == "WEIGHT"): + else: + ic = 'ZOOMIN' + + row.operator("dpaint.output_toggle", icon=ic, text="").index = 1 + + elif (surface.surface_type == "WEIGHT"): row = layout.row() row.prop_search(surface, "output_name", ob, "vertex_groups", text="Vertex Group: ") - ic = 'ZOOMIN' if (surface.output_exists(object=ob, index=0)): ic = 'ZOOMOUT' - col = row.column(align=True) - col.operator("dpaint.output_toggle", icon=ic, text="").index = 0 + else: + ic = 'ZOOMIN' + + row.operator("dpaint.output_toggle", icon=ic, text="").index = 0 # image format outputs if (surface.surface_format == "IMAGE"): - col = layout.column() - col.operator("dpaint.bake", text="Bake Image Sequence", icon='MOD_DYNAMICPAINT') - col.prop_search(surface, "uv_layer", ob.data, "uv_textures", text="UV layer:") + layout.operator("dpaint.bake", text="Bake Image Sequence", icon='MOD_DYNAMICPAINT') + layout.prop_search(surface, "uv_layer", ob.data, "uv_textures", text="UV layer:") layout.separator() - col.separator() - col = layout.column() - col.prop(surface, "image_output_path", text="") - split = layout.split() - col = split.column() - col.prop(surface, "image_fileformat", text="") - col = split.column() - col.prop(surface, "premultiply", text="Premultiply alpha") - col.separator() + layout.prop(surface, "image_output_path", text="") + row = layout.row() + row.prop(surface, "image_fileformat", text="") + row.prop(surface, "premultiply", text="Premultiply alpha") if (surface.surface_type == "PAINT"): split = layout.split(percentage=0.4) - col = split.column() - col.prop(surface, "do_output1", text="Paintmaps:") - sub = split.column() + split.prop(surface, "do_output1", text="Paintmaps:") + sub = split.row() sub.active = surface.do_output1 sub.prop(surface, "output_name", text="") split = layout.split(percentage=0.4) - col = split.column() - col.prop(surface, "do_output2", text="Wetmaps:") - sub = split.column() + split.prop(surface, "do_output2", text="Wetmaps:") + sub = split.row() sub.active = surface.do_output2 sub.prop(surface, "output_name2", text="") else: @@ -274,7 +262,7 @@ class PHYSICS_PT_dp_canvas_output(PhysicButtonsPanel, bpy.types.Panel): if (surface.surface_type == "DISPLACE"): col.prop(surface, "displace_type", text="Displace Type") col.prop(surface, "depth_clamp") - if (surface.surface_type == "WAVE"): + elif (surface.surface_type == "WAVE"): col.prop(surface, "depth_clamp", text="Wave Clamp") class PHYSICS_PT_dp_canvas_initial_color(PhysicButtonsPanel, bpy.types.Panel): @@ -303,11 +291,11 @@ class PHYSICS_PT_dp_canvas_initial_color(PhysicButtonsPanel, bpy.types.Panel): if (surface.init_color_type == "COLOR"): layout.prop(surface, "init_color") - if (surface.init_color_type == "TEXTURE"): + elif (surface.init_color_type == "TEXTURE"): layout.prop(surface, "init_texture") layout.prop_search(surface, "init_layername", ob.data, "uv_textures", text="UV Layer:") - if (surface.init_color_type == "VERTEX_COLOR"): + elif (surface.init_color_type == "VERTEX_COLOR"): layout.prop_search(surface, "init_layername", ob.data, "vertex_colors", text="Color Layer: ") class PHYSICS_PT_dp_effects(PhysicButtonsPanel, bpy.types.Panel): @@ -332,33 +320,30 @@ class PHYSICS_PT_dp_effects(PhysicButtonsPanel, bpy.types.Panel): if surface.effect_ui == "SPREAD": layout.prop(surface, "use_spread") - col = layout.column() - col.active = surface.use_spread - split = col.split() - sub = split.column() - sub.prop(surface, "spread_speed") - sub = split.column() - sub.prop(surface, "color_spread_speed") + + row = layout.row() + row.active = surface.use_spread + row.prop(surface, "spread_speed") + row.prop(surface, "color_spread_speed") elif surface.effect_ui == "DRIP": layout.prop(surface, "use_drip") + col = layout.column() col.active = surface.use_drip effector_weights_ui(self, context, surface.effector_weights) - split = layout.split() layout.label(text="Surface Movement:") - split = layout.split() - col = split.column() - col.prop(surface, "drip_velocity", slider=True) - col = split.column() - col.prop(surface, "drip_acceleration", slider=True) + row = layout.row() + row.prop(surface, "drip_velocity", slider=True) + row.prop(surface, "drip_acceleration", slider=True) elif surface.effect_ui == "SHRINK": layout.prop(surface, "use_shrink") - col = layout.column() - col.active = surface.use_shrink - col.prop(surface, "shrink_speed") + + row = layout.row() + row.active = surface.use_shrink + row.prop(surface, "shrink_speed") class PHYSICS_PT_dp_cache(PhysicButtonsPanel, bpy.types.Panel): @@ -414,7 +399,7 @@ class PHYSICS_PT_dp_brush_source(PhysicButtonsPanel, bpy.types.Panel): sub = split.column() if brush.paint_source == 'DISTANCE': sub.prop(brush, "proximity_project") - if brush.paint_source == "VOLUME_DISTANCE": + elif brush.paint_source == "VOLUME_DISTANCE": sub.prop(brush, "proximity_inverse") sub = split.column() @@ -445,22 +430,24 @@ class PHYSICS_PT_dp_brush_velocity(PhysicButtonsPanel, bpy.types.Panel): ob = context.object split = layout.split() + col = split.column() col.prop(brush, "velocity_alpha") col.prop(brush, "velocity_color") - col = split.column() - col.prop(brush, "velocity_depth") - sub = layout.row().column() - sub.active = (brush.velocity_alpha or brush.velocity_color or brush.velocity_depth) - sub.prop(brush, "max_velocity") - sub.template_color_ramp(brush, "velocity_ramp", expand=True) + + split.prop(brush, "velocity_depth") + + col = layout.column() + col.active = (brush.velocity_alpha or brush.velocity_color or brush.velocity_depth) + col.prop(brush, "max_velocity") + col.template_color_ramp(brush, "velocity_ramp", expand=True) layout.separator() - split = layout.split() - col = split.column() - col.prop(brush, "do_smudge") - col = split.column() - col.active = brush.do_smudge - col.prop(brush, "smudge_strength") + + row = layout.row() + row.prop(brush, "do_smudge") + sub = row.row() + sub.active = brush.do_smudge + sub.prop(brush, "smudge_strength") class PHYSICS_PT_dp_brush_wave(PhysicButtonsPanel, bpy.types.Panel): bl_label = "Dynamic Paint Waves" @@ -479,11 +466,9 @@ class PHYSICS_PT_dp_brush_wave(PhysicButtonsPanel, bpy.types.Panel): layout.prop(brush, "wave_type") if (brush.wave_type != "REFLECT"): - split = layout.split(percentage=0.5) - col = split.column() - col.prop(brush, "wave_factor") - col = split.column() - col.prop(brush, "wave_clamp") + row = layout.row() + row.prop(brush, "wave_factor") + row.prop(brush, "wave_clamp") def register(): bpy.utils.register_module(__name__) From 4e5c03f06ea0834bc6575b653924a1749891bf5f Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 11 Nov 2011 00:44:48 +0000 Subject: [PATCH 20/22] Bugfix [#29210] ChildOf constraint Set Inverse For Objects, Set Inverse was unreliable as the constraint didn't get reset properly before being calculated --- .../blender/editors/object/object_constraint.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/source/blender/editors/object/object_constraint.c b/source/blender/editors/object/object_constraint.c index b36416151a9..991ed0ebd51 100644 --- a/source/blender/editors/object/object_constraint.c +++ b/source/blender/editors/object/object_constraint.c @@ -700,6 +700,9 @@ static int childof_set_inverse_exec (bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } + /* nullify inverse matrix first */ + unit_m4(data->invmat); + /* try to find a pose channel */ // TODO: get from context instead? if (ob && ob->pose) @@ -733,18 +736,15 @@ static int childof_set_inverse_exec (bContext *C, wmOperator *op) where_is_pose(scene, ob); } else if (ob) { - Object workob; - /* use what_does_parent to find inverse - just like for normal parenting. - * NOTE: what_does_parent uses a static workob defined in object.c - */ + Object workob = {0}; + + /* use what_does_parent to find inverse - just like for normal parenting */ what_does_parent(scene, ob, &workob); invert_m4_m4(data->invmat, workob.obmat); } - else - unit_m4(data->invmat); - + WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, ob); - + return OPERATOR_FINISHED; } From 11947f1a67ab6fb26cc36e8f9c421d7e464a70c9 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 11 Nov 2011 03:28:46 +0000 Subject: [PATCH 21/22] pep/style edits & quiet some warnings --- .../bl_operators/uvcalc_follow_active.py | 11 +- .../startup/bl_operators/uvcalc_lightmap.py | 6 +- .../startup/bl_ui/properties_data_armature.py | 4 +- .../startup/bl_ui/properties_data_camera.py | 6 +- .../startup/bl_ui/properties_data_speaker.py | 11 +- .../scripts/startup/bl_ui/properties_game.py | 2 +- .../startup/bl_ui/properties_material.py | 4 +- .../startup/bl_ui/properties_object.py | 2 +- .../bl_ui/properties_object_constraint.py | 2 +- .../startup/bl_ui/properties_particle.py | 12 +- .../startup/bl_ui/properties_physics_cloth.py | 2 +- .../bl_ui/properties_physics_dynamicpaint.py | 222 ++++++++++-------- .../startup/bl_ui/properties_physics_field.py | 2 +- .../startup/bl_ui/properties_physics_smoke.py | 2 +- .../bl_ui/properties_physics_softbody.py | 2 +- .../startup/bl_ui/properties_texture.py | 4 +- release/scripts/startup/bl_ui/space_graph.py | 2 +- release/scripts/startup/bl_ui/space_image.py | 8 +- release/scripts/startup/bl_ui/space_nla.py | 2 +- .../scripts/startup/bl_ui/space_sequencer.py | 2 +- release/scripts/startup/bl_ui/space_time.py | 2 +- .../scripts/startup/bl_ui/space_userpref.py | 2 +- release/scripts/startup/bl_ui/space_view3d.py | 14 +- source/blender/blenkernel/intern/pointcache.c | 4 +- .../editors/object/object_constraint.c | 2 +- 25 files changed, 173 insertions(+), 159 deletions(-) diff --git a/release/scripts/startup/bl_operators/uvcalc_follow_active.py b/release/scripts/startup/bl_operators/uvcalc_follow_active.py index 324414b8bcb..919677fff8b 100644 --- a/release/scripts/startup/bl_operators/uvcalc_follow_active.py +++ b/release/scripts/startup/bl_operators/uvcalc_follow_active.py @@ -233,10 +233,13 @@ class FollowActiveQuads(Operator): bl_label = "Follow Active Quads" bl_options = {'REGISTER', 'UNDO'} - mode = bpy.props.EnumProperty(items=(("EVEN", "Even", "Space all UVs evently"), ("LENGTH", "Length", "Average space UVs edge length of each loop")), - name="Edge Length Mode", - description="Method to space UV edge loops", - default="LENGTH") + mode = bpy.props.EnumProperty( + name="Edge Length Mode", + description="Method to space UV edge loops", + items=(('EVEN', "Even", "Space all UVs evently"), + ('LENGTH', "Length", "Average space UVs edge length of each loop")), + default='LENGTH', + ) @classmethod def poll(cls, context): diff --git a/release/scripts/startup/bl_operators/uvcalc_lightmap.py b/release/scripts/startup/bl_operators/uvcalc_lightmap.py index 52548817620..ae4add72a08 100644 --- a/release/scripts/startup/bl_operators/uvcalc_lightmap.py +++ b/release/scripts/startup/bl_operators/uvcalc_lightmap.py @@ -552,9 +552,9 @@ class LightMapPack(Operator): PREF_CONTEXT = bpy.props.EnumProperty( name="Selection", - items=(("SEL_FACES", "Selected Faces", "Space all UVs evently"), - ("ALL_FACES", "All Faces", "Average space UVs edge length of each loop"), - ("ALL_OBJECTS", "Selected Mesh Object", "Average space UVs edge length of each loop") + items=(('SEL_FACES', "Selected Faces", "Space all UVs evently"), + ('ALL_FACES', "All Faces", "Average space UVs edge length of each loop"), + ('ALL_OBJECTS', "Selected Mesh Object", "Average space UVs edge length of each loop") ), ) diff --git a/release/scripts/startup/bl_ui/properties_data_armature.py b/release/scripts/startup/bl_ui/properties_data_armature.py index 5dadcba2621..d1bc0694a89 100644 --- a/release/scripts/startup/bl_ui/properties_data_armature.py +++ b/release/scripts/startup/bl_ui/properties_data_armature.py @@ -71,7 +71,7 @@ class DATA_PT_skeleton(ArmatureButtonsPanel, Panel): flow.prop(arm, "use_deform_envelopes", text="Envelopes") flow.prop(arm, "use_deform_preserve_volume", text="Quaternion") - if context.scene.render.engine == "BLENDER_GAME": + if context.scene.render.engine == 'BLENDER_GAME': layout.row().prop(arm, "deform_method", expand=True) @@ -289,7 +289,7 @@ class DATA_PT_iksolver_itasc(ArmatureButtonsPanel, Panel): row.prop(itasc, "damping_max", text="Damp", slider=True) row.prop(itasc, "damping_epsilon", text="Eps", slider=True) -from bl_ui.properties_animviz import ( +from .properties_animviz import ( MotionPathButtonsPanel, OnionSkinButtonsPanel, ) diff --git a/release/scripts/startup/bl_ui/properties_data_camera.py b/release/scripts/startup/bl_ui/properties_data_camera.py index 1a0fb0ef4ac..1d7559b2ceb 100644 --- a/release/scripts/startup/bl_ui/properties_data_camera.py +++ b/release/scripts/startup/bl_ui/properties_data_camera.py @@ -18,7 +18,7 @@ # import bpy -from bpy.types import Panel +from bpy.types import Panel, Menu from rna_prop_ui import PropertyPanel @@ -33,12 +33,12 @@ class CameraButtonsPanel(): return context.camera and (engine in cls.COMPAT_ENGINES) -class CAMERA_MT_presets(bpy.types.Menu): +class CAMERA_MT_presets(Menu): bl_label = "Camera Presets" preset_subdir = "camera" preset_operator = "script.execute_preset" COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'} - draw = bpy.types.Menu.draw_preset + draw = Menu.draw_preset class DATA_PT_context_camera(CameraButtonsPanel, Panel): diff --git a/release/scripts/startup/bl_ui/properties_data_speaker.py b/release/scripts/startup/bl_ui/properties_data_speaker.py index a1b86b51f5f..853c11c96c6 100644 --- a/release/scripts/startup/bl_ui/properties_data_speaker.py +++ b/release/scripts/startup/bl_ui/properties_data_speaker.py @@ -18,6 +18,7 @@ # import bpy +from bpy.types import Panel from rna_prop_ui import PropertyPanel @@ -32,7 +33,7 @@ class DataButtonsPanel(): return context.speaker and (engine in cls.COMPAT_ENGINES) -class DATA_PT_context_speaker(DataButtonsPanel, bpy.types.Panel): +class DATA_PT_context_speaker(DataButtonsPanel, Panel): bl_label = "" bl_options = {'HIDE_HEADER'} COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'} @@ -52,7 +53,7 @@ class DATA_PT_context_speaker(DataButtonsPanel, bpy.types.Panel): split.template_ID(space, "pin_id") -class DATA_PT_speaker(DataButtonsPanel, bpy.types.Panel): +class DATA_PT_speaker(DataButtonsPanel, Panel): bl_label = "Sound" COMPAT_ENGINES = {'BLENDER_RENDER'} @@ -71,7 +72,7 @@ class DATA_PT_speaker(DataButtonsPanel, bpy.types.Panel): row.prop(speaker, "pitch") -class DATA_PT_distance(DataButtonsPanel, bpy.types.Panel): +class DATA_PT_distance(DataButtonsPanel, Panel): bl_label = "Distance" COMPAT_ENGINES = {'BLENDER_RENDER'} @@ -94,7 +95,7 @@ class DATA_PT_distance(DataButtonsPanel, bpy.types.Panel): col.prop(speaker, "distance_reference", text="Reference") -class DATA_PT_cone(DataButtonsPanel, bpy.types.Panel): +class DATA_PT_cone(DataButtonsPanel, Panel): bl_label = "Cone" COMPAT_ENGINES = {'BLENDER_RENDER'} @@ -116,7 +117,7 @@ class DATA_PT_cone(DataButtonsPanel, bpy.types.Panel): col.prop(speaker, "cone_volume_outer", text="Outer") -class DATA_PT_custom_props_speaker(DataButtonsPanel, PropertyPanel, bpy.types.Panel): +class DATA_PT_custom_props_speaker(DataButtonsPanel, PropertyPanel, Panel): COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'} _context_path = "object.data" _property_type = bpy.types.Speaker diff --git a/release/scripts/startup/bl_ui/properties_game.py b/release/scripts/startup/bl_ui/properties_game.py index ba9bb4a624d..877b6c0893d 100644 --- a/release/scripts/startup/bl_ui/properties_game.py +++ b/release/scripts/startup/bl_ui/properties_game.py @@ -406,7 +406,7 @@ class SceneButtonsPanel(): bl_context = "scene" -class SCENE_PT_game_navmesh(SceneButtonsPanel, bpy.types.Panel): +class SCENE_PT_game_navmesh(SceneButtonsPanel, Panel): bl_label = "Navigation mesh" bl_default_closed = True COMPAT_ENGINES = {'BLENDER_GAME'} diff --git a/release/scripts/startup/bl_ui/properties_material.py b/release/scripts/startup/bl_ui/properties_material.py index f5a95016baa..6e66bd0d98b 100644 --- a/release/scripts/startup/bl_ui/properties_material.py +++ b/release/scripts/startup/bl_ui/properties_material.py @@ -612,7 +612,7 @@ class MATERIAL_PT_flare(MaterialButtonsPanel, Panel): col.prop(halo, "flare_subflare_size", text="Subsize") -class MATERIAL_PT_game_settings(MaterialButtonsPanel, bpy.types.Panel): +class MATERIAL_PT_game_settings(MaterialButtonsPanel, Panel): bl_label = "Game Settings" COMPAT_ENGINES = {'BLENDER_GAME'} @@ -637,7 +637,7 @@ class MATERIAL_PT_game_settings(MaterialButtonsPanel, bpy.types.Panel): row.prop(game, "face_orientation", text="") -class MATERIAL_PT_physics(MaterialButtonsPanel, bpy.types.Panel): +class MATERIAL_PT_physics(MaterialButtonsPanel, Panel): bl_label = "Physics" COMPAT_ENGINES = {'BLENDER_GAME'} diff --git a/release/scripts/startup/bl_ui/properties_object.py b/release/scripts/startup/bl_ui/properties_object.py index 36b8129ad8a..27b6aa721a4 100644 --- a/release/scripts/startup/bl_ui/properties_object.py +++ b/release/scripts/startup/bl_ui/properties_object.py @@ -280,7 +280,7 @@ class OBJECT_PT_relations_extras(ObjectButtonsPanel, Panel): row.prop(ob, "slow_parent_offset", text="Offset") -from bl_ui.properties_animviz import ( +from .properties_animviz import ( MotionPathButtonsPanel, OnionSkinButtonsPanel, ) diff --git a/release/scripts/startup/bl_ui/properties_object_constraint.py b/release/scripts/startup/bl_ui/properties_object_constraint.py index c493124c5bb..508818b62dc 100644 --- a/release/scripts/startup/bl_ui/properties_object_constraint.py +++ b/release/scripts/startup/bl_ui/properties_object_constraint.py @@ -131,7 +131,7 @@ class ConstraintButtonsPanel(): self.space_template(layout, con) def IK(self, context, layout, con): - if context.object.pose.ik_solver == "ITASC": + if context.object.pose.ik_solver == 'ITASC': layout.prop(con, "ik_type") getattr(self, 'IK_' + con.ik_type)(context, layout, con) else: diff --git a/release/scripts/startup/bl_ui/properties_particle.py b/release/scripts/startup/bl_ui/properties_particle.py index 2216d2b2170..a541f43be66 100644 --- a/release/scripts/startup/bl_ui/properties_particle.py +++ b/release/scripts/startup/bl_ui/properties_particle.py @@ -21,7 +21,7 @@ import bpy from bpy.types import Panel from rna_prop_ui import PropertyPanel -from bl_ui.properties_physics_common import ( +from .properties_physics_common import ( point_cache_ui, effector_weights_ui, basic_force_field_settings_ui, @@ -76,21 +76,15 @@ class ParticleButtonsPanel(): class PARTICLE_PT_context_particles(ParticleButtonsPanel, Panel): bl_label = "" bl_options = {'HIDE_HEADER'} - # COMPAT_ENGINES = {'BLENDER_RENDER'} + COMPAT_ENGINES = {'BLENDER_RENDER'} @classmethod def poll(cls, context): engine = context.scene.render.engine - return (context.particle_system or context.object or context.space_data.pin_id)# and (engine in cls.COMPAT_ENGINES) + return (context.particle_system or context.object or context.space_data.pin_id) and (engine in cls.COMPAT_ENGINES) def draw(self, context): layout = self.layout - - if context.scene.render.engine == "BLENDER_GAME": - layout.label("The Blender particle system is") - layout.label("not available for use in the") - layout.label("Blender Game Engine") - return ob = context.object psys = context.particle_system diff --git a/release/scripts/startup/bl_ui/properties_physics_cloth.py b/release/scripts/startup/bl_ui/properties_physics_cloth.py index 490b510587d..32b94504525 100644 --- a/release/scripts/startup/bl_ui/properties_physics_cloth.py +++ b/release/scripts/startup/bl_ui/properties_physics_cloth.py @@ -20,7 +20,7 @@ import bpy from bpy.types import Menu, Panel -from bl_ui.properties_physics_common import ( +from .properties_physics_common import ( point_cache_ui, effector_weights_ui, ) diff --git a/release/scripts/startup/bl_ui/properties_physics_dynamicpaint.py b/release/scripts/startup/bl_ui/properties_physics_dynamicpaint.py index f4bea3b4a52..f03d4793be0 100644 --- a/release/scripts/startup/bl_ui/properties_physics_dynamicpaint.py +++ b/release/scripts/startup/bl_ui/properties_physics_dynamicpaint.py @@ -17,13 +17,16 @@ # ##### END GPL LICENSE BLOCK ##### # -import bpy -from bl_ui.properties_physics_common import ( +import bpy +from bpy.types import Panel + +from .properties_physics_common import ( point_cache_ui, effector_weights_ui, ) + class PhysicButtonsPanel(): bl_space_type = 'PROPERTIES' bl_region_type = 'WINDOW' @@ -33,10 +36,10 @@ class PhysicButtonsPanel(): def poll(cls, context): ob = context.object rd = context.scene.render - return (ob and ob.type == 'MESH') and (not rd.use_game_engine) and (context.dynamic_paint) + return (ob and ob.type == 'MESH') and (not rd.use_game_engine) and context.dynamic_paint -class PHYSICS_PT_dynamic_paint(PhysicButtonsPanel, bpy.types.Panel): +class PHYSICS_PT_dynamic_paint(PhysicButtonsPanel, Panel): bl_label = "Dynamic Paint" def draw(self, context): @@ -47,14 +50,14 @@ class PHYSICS_PT_dynamic_paint(PhysicButtonsPanel, bpy.types.Panel): layout.prop(md, "ui_type", expand=True) - if (md.ui_type == "CANVAS"): + if md.ui_type == 'CANVAS': canvas = md.canvas_settings - - if (not canvas): + + if canvas is None: layout.operator("dpaint.type_toggle", text="Add Canvas").type = 'CANVAS' else: layout.operator("dpaint.type_toggle", text="Remove Canvas", icon='X').type = 'CANVAS' - + surface = canvas.canvas_surfaces.active row = layout.row() @@ -63,32 +66,32 @@ class PHYSICS_PT_dynamic_paint(PhysicButtonsPanel, bpy.types.Panel): col = row.column(align=True) col.operator("dpaint.surface_slot_add", icon='ZOOMIN', text="") col.operator("dpaint.surface_slot_remove", icon='ZOOMOUT', text="") - + if surface: layout.prop(surface, "name") layout.prop(surface, "surface_format") - + col = layout.column() - if surface.surface_format != "VERTEX": + if surface.surface_format != 'VERTEX': col.label(text="Quality:") col.prop(surface, "image_resolution") col.prop(surface, "use_antialiasing") - + col = layout.column() col.label(text="Frames:") split = col.split() - + col = split.column(align=True) col.prop(surface, "frame_start", text="Start") col.prop(surface, "frame_end", text="End") - + split.prop(surface, "frame_substeps") - elif (md.ui_type == "BRUSH"): + elif md.ui_type == 'BRUSH': brush = md.brush_settings engine = context.scene.render.engine - - if (not brush): + + if brush is None: layout.operator("dpaint.type_toggle", text="Add Brush").type = 'BRUSH' else: layout.operator("dpaint.type_toggle", text="Remove Brush", icon='X').type = 'BRUSH' @@ -99,13 +102,13 @@ class PHYSICS_PT_dynamic_paint(PhysicButtonsPanel, bpy.types.Panel): col.prop(brush, "absolute_alpha") col.prop(brush, "paint_erase") col.prop(brush, "paint_wetness", text="Wetness") - + col = split.column() - if (engine == 'BLENDER_RENDER'): + if engine == 'BLENDER_RENDER': sub = col.column() - sub.active = (brush.paint_source != "PARTICLE_SYSTEM"); + sub.active = (brush.paint_source != 'PARTICLE_SYSTEM') sub.prop(brush, "use_material") - if brush.use_material and brush.paint_source != "PARTICLE_SYSTEM" and (engine == 'BLENDER_RENDER'): + if brush.use_material and brush.paint_source != 'PARTICLE_SYSTEM' and engine == 'BLENDER_RENDER': col.prop(brush, "material", text="") col.prop(brush, "paint_alpha", text="Alpha Factor") else: @@ -113,13 +116,13 @@ class PHYSICS_PT_dynamic_paint(PhysicButtonsPanel, bpy.types.Panel): col.prop(brush, "paint_alpha", text="Alpha") -class PHYSICS_PT_dp_advanced_canvas(PhysicButtonsPanel, bpy.types.Panel): +class PHYSICS_PT_dp_advanced_canvas(PhysicButtonsPanel, Panel): bl_label = "Dynamic Paint Advanced" @classmethod def poll(cls, context): md = context.dynamic_paint - return md and (md.ui_type == "CANVAS") and (md.canvas_settings) and (md.canvas_settings.canvas_surfaces.active) + return md and md.ui_type == 'CANVAS' and md.canvas_settings and md.canvas_settings.canvas_surfaces.active def draw(self, context): layout = self.layout @@ -128,23 +131,25 @@ class PHYSICS_PT_dp_advanced_canvas(PhysicButtonsPanel, bpy.types.Panel): surface = canvas.canvas_surfaces.active ob = context.object + surface_type = surface.surface_type + layout.prop(surface, "surface_type") layout.separator() # dissolve - if (surface.surface_type == "PAINT"): + if surface_type == 'PAINT': split = layout.split(percentage=0.35) split.label(text="Wetmap drying:") - + col = split.column() split = col.split(percentage=0.7) split.prop(surface, "dry_speed", text="Time") split.prop(surface, "use_dry_log", text="Slow") - - if (surface.surface_type != "WAVE"): + + if surface_type != 'WAVE': split = layout.split(percentage=0.35) col = split.column() - if (surface.surface_type == "WEIGHT"): + if surface_type == 'WEIGHT': col.prop(surface, "use_dissolve", text="Fade:") else: col.prop(surface, "use_dissolve", text="Dissolve:") @@ -153,42 +158,43 @@ class PHYSICS_PT_dp_advanced_canvas(PhysicButtonsPanel, bpy.types.Panel): split = col.split(percentage=0.7) split.prop(surface, "dissolve_speed", text="Time") split.prop(surface, "use_dissolve_log", text="Slow") - + # per type settings - if (surface.surface_type == "DISPLACE"): + if surface_type == 'DISPLACE': layout.prop(surface, "use_incremental_displace") - if (surface.surface_format == "VERTEX"): + if surface.surface_format == 'VERTEX': row = layout.row() row.prop(surface, "depth_clamp") row.prop(surface, "displace_factor") - - if (surface.surface_type == "WAVE"): + + elif surface_type == 'WAVE': layout.prop(surface, "wave_open_borders") - + split = layout.split() - + col = split.column(align=True) col.prop(surface, "wave_timescale") col.prop(surface, "wave_speed") - + col = split.column(align=True) col.prop(surface, "wave_damping") col.prop(surface, "wave_spring") - + layout.separator() layout.prop(surface, "brush_group", text="Brush Group") -class PHYSICS_PT_dp_canvas_output(PhysicButtonsPanel, bpy.types.Panel): + +class PHYSICS_PT_dp_canvas_output(PhysicButtonsPanel, Panel): bl_label = "Dynamic Paint Output" bl_options = {'DEFAULT_CLOSED'} @classmethod def poll(cls, context): md = context.dynamic_paint - if (not (md and (md.ui_type == "CANVAS") and (md.canvas_settings))): + if not (md and md.ui_type == 'CANVAS' and md.canvas_settings): return 0 surface = context.dynamic_paint.canvas_settings.canvas_surfaces.active - return (surface and not (surface.surface_format=="VERTEX" and (surface.surface_type=="DISPLACE" or surface.surface_type=="WAVE"))) + return surface and not (surface.surface_format == 'VERTEX' and (surface.surface_type in {'DISPLACE', 'WAVE'})) def draw(self, context): layout = self.layout @@ -196,37 +202,39 @@ class PHYSICS_PT_dp_canvas_output(PhysicButtonsPanel, bpy.types.Panel): canvas = context.dynamic_paint.canvas_settings surface = canvas.canvas_surfaces.active ob = context.object - + + surface_type = surface.surface_type + # vertex format outputs - if (surface.surface_format == "VERTEX"): - if (surface.surface_type == "PAINT"): + if surface.surface_format == 'VERTEX': + if surface_type == 'PAINT': # toggle active preview layout.prop(surface, "preview_id") - + # paintmap output row = layout.row() row.prop_search(surface, "output_name", ob.data, "vertex_colors", text="Paintmap layer: ") - if (surface.output_exists(object=ob, index=0)): + if surface.output_exists(object=ob, index=0): ic = 'ZOOMOUT' else: ic = 'ZOOMIN' - + row.operator("dpaint.output_toggle", icon=ic, text="").index = 0 - + # wetmap output row = layout.row() row.prop_search(surface, "output_name2", ob.data, "vertex_colors", text="Wetmap layer: ") - if (surface.output_exists(object=ob, index=1)): + if surface.output_exists(object=ob, index=1): ic = 'ZOOMOUT' else: ic = 'ZOOMIN' - + row.operator("dpaint.output_toggle", icon=ic, text="").index = 1 - - elif (surface.surface_type == "WEIGHT"): + + elif surface_type == 'WEIGHT': row = layout.row() row.prop_search(surface, "output_name", ob, "vertex_groups", text="Vertex Group: ") - if (surface.output_exists(object=ob, index=0)): + if surface.output_exists(object=ob, index=0): ic = 'ZOOMOUT' else: ic = 'ZOOMIN' @@ -234,23 +242,23 @@ class PHYSICS_PT_dp_canvas_output(PhysicButtonsPanel, bpy.types.Panel): row.operator("dpaint.output_toggle", icon=ic, text="").index = 0 # image format outputs - if (surface.surface_format == "IMAGE"): + if surface.surface_format == 'IMAGE': layout.operator("dpaint.bake", text="Bake Image Sequence", icon='MOD_DYNAMICPAINT') layout.prop_search(surface, "uv_layer", ob.data, "uv_textures", text="UV layer:") layout.separator() - + layout.prop(surface, "image_output_path", text="") row = layout.row() row.prop(surface, "image_fileformat", text="") row.prop(surface, "premultiply", text="Premultiply alpha") - - if (surface.surface_type == "PAINT"): + + if surface_type == 'PAINT': split = layout.split(percentage=0.4) split.prop(surface, "do_output1", text="Paintmaps:") sub = split.row() sub.active = surface.do_output1 sub.prop(surface, "output_name", text="") - + split = layout.split(percentage=0.4) split.prop(surface, "do_output2", text="Wetmaps:") sub = split.row() @@ -259,23 +267,24 @@ class PHYSICS_PT_dp_canvas_output(PhysicButtonsPanel, bpy.types.Panel): else: col = layout.column() col.prop(surface, "output_name", text="Filename: ") - if (surface.surface_type == "DISPLACE"): + if surface_type == 'DISPLACE': col.prop(surface, "displace_type", text="Displace Type") col.prop(surface, "depth_clamp") - elif (surface.surface_type == "WAVE"): + elif surface_type == 'WAVE': col.prop(surface, "depth_clamp", text="Wave Clamp") -class PHYSICS_PT_dp_canvas_initial_color(PhysicButtonsPanel, bpy.types.Panel): + +class PHYSICS_PT_dp_canvas_initial_color(PhysicButtonsPanel, Panel): bl_label = "Dynamic Paint Initial Color" bl_options = {'DEFAULT_CLOSED'} @classmethod def poll(cls, context): md = context.dynamic_paint - if (not (md and (md.ui_type == "CANVAS") and (md.canvas_settings))): + if not (md and md.ui_type == 'CANVAS' and md.canvas_settings): return 0 surface = context.dynamic_paint.canvas_settings.canvas_surfaces.active - return (surface and surface.surface_type=="PAINT") + return (surface and surface.surface_type == 'PAINT') def draw(self, context): layout = self.layout @@ -288,27 +297,28 @@ class PHYSICS_PT_dp_canvas_initial_color(PhysicButtonsPanel, bpy.types.Panel): layout.separator() # dissolve - if (surface.init_color_type == "COLOR"): + if surface.init_color_type == 'COLOR': layout.prop(surface, "init_color") - - elif (surface.init_color_type == "TEXTURE"): + + elif surface.init_color_type == 'TEXTURE': layout.prop(surface, "init_texture") layout.prop_search(surface, "init_layername", ob.data, "uv_textures", text="UV Layer:") - - elif (surface.init_color_type == "VERTEX_COLOR"): + + elif surface.init_color_type == 'VERTEX_COLOR': layout.prop_search(surface, "init_layername", ob.data, "vertex_colors", text="Color Layer: ") -class PHYSICS_PT_dp_effects(PhysicButtonsPanel, bpy.types.Panel): + +class PHYSICS_PT_dp_effects(PhysicButtonsPanel, Panel): bl_label = "Dynamic Paint Effects" bl_options = {'DEFAULT_CLOSED'} @classmethod def poll(cls, context): md = context.dynamic_paint - if (not (md and (md.ui_type == "CANVAS") and (md.canvas_settings))): - return False; + if not (md and md.ui_type == 'CANVAS' and md.canvas_settings): + return False surface = context.dynamic_paint.canvas_settings.canvas_surfaces.active - return surface and (surface.surface_type == "PAINT") + return (surface and surface.surface_type == 'PAINT') def draw(self, context): layout = self.layout @@ -318,17 +328,17 @@ class PHYSICS_PT_dp_effects(PhysicButtonsPanel, bpy.types.Panel): layout.prop(surface, "effect_ui", expand=True) - if surface.effect_ui == "SPREAD": + if surface.effect_ui == 'SPREAD': layout.prop(surface, "use_spread") - + row = layout.row() row.active = surface.use_spread row.prop(surface, "spread_speed") row.prop(surface, "color_spread_speed") - elif surface.effect_ui == "DRIP": + elif surface.effect_ui == 'DRIP': layout.prop(surface, "use_drip") - + col = layout.column() col.active = surface.use_drip effector_weights_ui(self, context, surface.effector_weights) @@ -338,52 +348,55 @@ class PHYSICS_PT_dp_effects(PhysicButtonsPanel, bpy.types.Panel): row.prop(surface, "drip_velocity", slider=True) row.prop(surface, "drip_acceleration", slider=True) - elif surface.effect_ui == "SHRINK": + elif surface.effect_ui == 'SHRINK': layout.prop(surface, "use_shrink") - + row = layout.row() row.active = surface.use_shrink row.prop(surface, "shrink_speed") - -class PHYSICS_PT_dp_cache(PhysicButtonsPanel, bpy.types.Panel): + +class PHYSICS_PT_dp_cache(PhysicButtonsPanel, Panel): bl_label = "Dynamic Paint Cache" bl_options = {'DEFAULT_CLOSED'} @classmethod def poll(cls, context): md = context.dynamic_paint - return md and (md.ui_type == "CANVAS") and (md.canvas_settings) and \ - (md.canvas_settings.canvas_surfaces.active) and (md.canvas_settings.canvas_surfaces.active.uses_cache) + return (md and + md.ui_type == 'CANVAS' and + md.canvas_settings and + md.canvas_settings.canvas_surfaces.active and + md.canvas_settings.canvas_surfaces.active.uses_cache) def draw(self, context): layout = self.layout surface = context.dynamic_paint.canvas_settings.canvas_surfaces.active cache = surface.point_cache - + point_cache_ui(self, context, cache, (cache.is_baked is False), 'DYNAMIC_PAINT') -class PHYSICS_PT_dp_brush_source(PhysicButtonsPanel, bpy.types.Panel): +class PHYSICS_PT_dp_brush_source(PhysicButtonsPanel, Panel): bl_label = "Dynamic Paint Source" @classmethod def poll(cls, context): md = context.dynamic_paint - return md and (md.ui_type == "BRUSH") and (md.brush_settings) + return md and md.ui_type == 'BRUSH' and md.brush_settings def draw(self, context): layout = self.layout brush = context.dynamic_paint.brush_settings ob = context.object - + split = layout.split() col = split.column() col.prop(brush, "paint_source") - if brush.paint_source == "PARTICLE_SYSTEM": + if brush.paint_source == 'PARTICLE_SYSTEM': col.prop_search(brush, "particle_system", ob, "particle_systems", text="") if brush.particle_system: col.label(text="Particle effect:") @@ -392,84 +405,87 @@ class PHYSICS_PT_dp_brush_source(PhysicButtonsPanel, bpy.types.Panel): sub.prop(brush, "solid_radius", text="Solid Radius") col.prop(brush, "use_particle_radius", text="Use Particle's Radius") col.prop(brush, "smooth_radius", text="Smooth radius") - + if brush.paint_source in {'DISTANCE', 'VOLUME_DISTANCE', 'POINT'}: col.prop(brush, "paint_distance", text="Paint Distance") split = layout.row().split(percentage=0.4) sub = split.column() if brush.paint_source == 'DISTANCE': sub.prop(brush, "proximity_project") - elif brush.paint_source == "VOLUME_DISTANCE": + elif brush.paint_source == 'VOLUME_DISTANCE': sub.prop(brush, "proximity_inverse") - + sub = split.column() if brush.paint_source == 'DISTANCE': column = sub.column() column.active = brush.proximity_project column.prop(brush, "ray_direction") sub.prop(brush, "proximity_falloff") - if brush.proximity_falloff == "RAMP": + if brush.proximity_falloff == 'RAMP': col = layout.row().column() col.separator() col.prop(brush, "proximity_ramp_alpha", text="Only Use Alpha") col.template_color_ramp(brush, "paint_ramp", expand=True) - -class PHYSICS_PT_dp_brush_velocity(PhysicButtonsPanel, bpy.types.Panel): + + +class PHYSICS_PT_dp_brush_velocity(PhysicButtonsPanel, Panel): bl_label = "Dynamic Paint Velocity" bl_options = {'DEFAULT_CLOSED'} @classmethod def poll(cls, context): md = context.dynamic_paint - return md and (md.ui_type == "BRUSH") and (md.brush_settings) + return md and md.ui_type == 'BRUSH' and md.brush_settings def draw(self, context): layout = self.layout brush = context.dynamic_paint.brush_settings ob = context.object - + split = layout.split() - + col = split.column() col.prop(brush, "velocity_alpha") col.prop(brush, "velocity_color") - + split.prop(brush, "velocity_depth") - + col = layout.column() col.active = (brush.velocity_alpha or brush.velocity_color or brush.velocity_depth) col.prop(brush, "max_velocity") col.template_color_ramp(brush, "velocity_ramp", expand=True) layout.separator() - + row = layout.row() row.prop(brush, "do_smudge") sub = row.row() sub.active = brush.do_smudge sub.prop(brush, "smudge_strength") - -class PHYSICS_PT_dp_brush_wave(PhysicButtonsPanel, bpy.types.Panel): + + +class PHYSICS_PT_dp_brush_wave(PhysicButtonsPanel, Panel): bl_label = "Dynamic Paint Waves" bl_options = {'DEFAULT_CLOSED'} @classmethod def poll(cls, context): md = context.dynamic_paint - return md and (md.ui_type == "BRUSH") and (md.brush_settings) + return md and md.ui_type == 'BRUSH' and md.brush_settings def draw(self, context): layout = self.layout brush = context.dynamic_paint.brush_settings ob = context.object - + layout.prop(brush, "wave_type") - if (brush.wave_type != "REFLECT"): + if brush.wave_type != 'REFLECT': row = layout.row() row.prop(brush, "wave_factor") row.prop(brush, "wave_clamp") + def register(): bpy.utils.register_module(__name__) diff --git a/release/scripts/startup/bl_ui/properties_physics_field.py b/release/scripts/startup/bl_ui/properties_physics_field.py index 2229b9dc3da..bc7f330a546 100644 --- a/release/scripts/startup/bl_ui/properties_physics_field.py +++ b/release/scripts/startup/bl_ui/properties_physics_field.py @@ -20,7 +20,7 @@ import bpy from bpy.types import Panel -from bl_ui.properties_physics_common import ( +from .properties_physics_common import ( basic_force_field_settings_ui, basic_force_field_falloff_ui, ) diff --git a/release/scripts/startup/bl_ui/properties_physics_smoke.py b/release/scripts/startup/bl_ui/properties_physics_smoke.py index 9f760f2f024..4c413647210 100644 --- a/release/scripts/startup/bl_ui/properties_physics_smoke.py +++ b/release/scripts/startup/bl_ui/properties_physics_smoke.py @@ -20,7 +20,7 @@ import bpy from bpy.types import Panel -from bl_ui.properties_physics_common import ( +from .properties_physics_common import ( point_cache_ui, effector_weights_ui, ) diff --git a/release/scripts/startup/bl_ui/properties_physics_softbody.py b/release/scripts/startup/bl_ui/properties_physics_softbody.py index ea4180c891f..78c74a7e1d3 100644 --- a/release/scripts/startup/bl_ui/properties_physics_softbody.py +++ b/release/scripts/startup/bl_ui/properties_physics_softbody.py @@ -20,7 +20,7 @@ import bpy from bpy.types import Panel -from bl_ui.properties_physics_common import ( +from .properties_physics_common import ( point_cache_ui, effector_weights_ui, ) diff --git a/release/scripts/startup/bl_ui/properties_texture.py b/release/scripts/startup/bl_ui/properties_texture.py index 73947c21a80..9ba0309aacd 100644 --- a/release/scripts/startup/bl_ui/properties_texture.py +++ b/release/scripts/startup/bl_ui/properties_texture.py @@ -44,7 +44,7 @@ class TEXTURE_MT_envmap_specials(Menu): layout.operator("texture.envmap_clear", icon='FILE_REFRESH') layout.operator("texture.envmap_clear_all", icon='FILE_REFRESH') -from bl_ui.properties_material import active_node_mat +from .properties_material import active_node_mat def context_tex_datablock(context): @@ -726,7 +726,7 @@ class TEXTURE_PT_pointdensity(TextureButtonsPanel, Panel): col.prop(pd, "falloff", text="") if pd.falloff == 'SOFT': col.prop(pd, "falloff_soft") - if pd.falloff == "PARTICLE_VELOCITY": + if pd.falloff == 'PARTICLE_VELOCITY': col.prop(pd, "falloff_speed_scale") col.prop(pd, "use_falloff_curve") diff --git a/release/scripts/startup/bl_ui/space_graph.py b/release/scripts/startup/bl_ui/space_graph.py index b57d421dfaf..5f7462ce44e 100644 --- a/release/scripts/startup/bl_ui/space_graph.py +++ b/release/scripts/startup/bl_ui/space_graph.py @@ -26,7 +26,7 @@ class GRAPH_HT_header(Header): bl_space_type = 'GRAPH_EDITOR' def draw(self, context): - from bl_ui.space_dopesheet import dopesheet_filter + from .space_dopesheet import dopesheet_filter layout = self.layout diff --git a/release/scripts/startup/bl_ui/space_image.py b/release/scripts/startup/bl_ui/space_image.py index 170ba3ccd0e..81526797109 100644 --- a/release/scripts/startup/bl_ui/space_image.py +++ b/release/scripts/startup/bl_ui/space_image.py @@ -312,19 +312,19 @@ class IMAGE_MT_uvs_select_mode(Menu): else: prop = layout.operator("wm.context_set_string", text="Vertex", icon='UV_VERTEXSEL') - prop.value = "VERTEX" + prop.value = 'VERTEX' prop.data_path = "tool_settings.uv_select_mode" prop = layout.operator("wm.context_set_string", text="Edge", icon='UV_EDGESEL') - prop.value = "EDGE" + prop.value = 'EDGE' prop.data_path = "tool_settings.uv_select_mode" prop = layout.operator("wm.context_set_string", text="Face", icon='UV_FACESEL') - prop.value = "FACE" + prop.value = 'FACE' prop.data_path = "tool_settings.uv_select_mode" prop = layout.operator("wm.context_set_string", text="Island", icon='UV_ISLANDSEL') - prop.value = "ISLAND" + prop.value = 'ISLAND' prop.data_path = "tool_settings.uv_select_mode" diff --git a/release/scripts/startup/bl_ui/space_nla.py b/release/scripts/startup/bl_ui/space_nla.py index c878c20c8a7..59057166ec4 100644 --- a/release/scripts/startup/bl_ui/space_nla.py +++ b/release/scripts/startup/bl_ui/space_nla.py @@ -26,7 +26,7 @@ class NLA_HT_header(Header): bl_space_type = 'NLA_EDITOR' def draw(self, context): - from bl_ui.space_dopesheet import dopesheet_filter + from .space_dopesheet import dopesheet_filter layout = self.layout diff --git a/release/scripts/startup/bl_ui/space_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py index a4dcf64b679..c1c9bc12b2d 100644 --- a/release/scripts/startup/bl_ui/space_sequencer.py +++ b/release/scripts/startup/bl_ui/space_sequencer.py @@ -456,7 +456,7 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel, Panel): elif strip.type == 'TRANSFORM': self.draw_panel_transform(strip) - elif strip.type == "MULTICAM": + elif strip.type == 'MULTICAM': layout.prop(strip, "multicam_source") row = layout.row(align=True) diff --git a/release/scripts/startup/bl_ui/space_time.py b/release/scripts/startup/bl_ui/space_time.py index 0ce2df0e47e..72818dfc642 100644 --- a/release/scripts/startup/bl_ui/space_time.py +++ b/release/scripts/startup/bl_ui/space_time.py @@ -92,7 +92,7 @@ class TIME_HT_header(Header): row.operator("anim.keyframe_delete", text="", icon='KEY_DEHLT') -class TIME_MT_marker(bpy.types.Menu): +class TIME_MT_marker(Menu): bl_label = "Marker" def draw(self, context): diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py index a2ede26ecc6..51f55fe019c 100644 --- a/release/scripts/startup/bl_ui/space_userpref.py +++ b/release/scripts/startup/bl_ui/space_userpref.py @@ -743,7 +743,7 @@ class USERPREF_PT_file(Panel): sub.active = paths.use_auto_save_temporary_files sub.prop(paths, "auto_save_time", text="Timer (mins)") -from bl_ui.space_userpref_keymap import InputKeyMapPanel +from .space_userpref_keymap import InputKeyMapPanel class USERPREF_MT_ndof_settings(Menu): diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index 2d3be2015d7..9ca542103ad 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -1537,10 +1537,10 @@ class VIEW3D_MT_edit_mesh_extrude(Menu): bl_label = "Extrude" _extrude_funcs = { - "VERT": lambda layout: layout.operator("mesh.extrude_vertices_move", text="Vertices Only"), - "EDGE": lambda layout: layout.operator("mesh.extrude_edges_move", text="Edges Only"), - "FACE": lambda layout: layout.operator("mesh.extrude_faces_move", text="Individual Faces"), - "REGION": lambda layout: layout.operator("view3d.edit_mesh_extrude_move_normal", text="Region"), + 'VERT': lambda layout: layout.operator("mesh.extrude_vertices_move", text="Vertices Only"), + 'EDGE': lambda layout: layout.operator("mesh.extrude_edges_move", text="Edges Only"), + 'FACE': lambda layout: layout.operator("mesh.extrude_faces_move", text="Individual Faces"), + 'REGION': lambda layout: layout.operator("view3d.edit_mesh_extrude_move_normal", text="Region"), } @staticmethod @@ -1550,11 +1550,11 @@ class VIEW3D_MT_edit_mesh_extrude(Menu): menu = [] if mesh.total_face_sel: - menu += ["REGION", "FACE"] + menu += ['REGION', 'FACE'] if mesh.total_edge_sel and (select_mode[0] or select_mode[1]): - menu += ["EDGE"] + menu += ['EDGE'] if mesh.total_vert_sel and select_mode[0]: - menu += ["VERT"] + menu += ['VERT'] # should never get here return menu diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c index 9b094d7f1f6..a9aeb37e478 100644 --- a/source/blender/blenkernel/intern/pointcache.c +++ b/source/blender/blenkernel/intern/pointcache.c @@ -656,7 +656,7 @@ static int ptcache_smoke_read(PTCacheFile *pf, void *smoke_v) return 1; } #else // WITH_SMOKE -static int ptcache_smoke_totpoint(void *UNUSED(smoke_v), int UNUSED(cfra)) { return 0; }; +static int ptcache_smoke_totpoint(void *UNUSED(smoke_v), int UNUSED(cfra)) { return 0; } static int ptcache_smoke_read(PTCacheFile *UNUSED(pf), void *UNUSED(smoke_v)) { return 0; } static int ptcache_smoke_write(PTCacheFile *UNUSED(pf), void *UNUSED(smoke_v)) { return 0; } #endif // WITH_SMOKE @@ -677,7 +677,7 @@ static int ptcache_dynamicpaint_write(PTCacheFile *pf, void *dp_v) int cache_compress = 1; /* version header */ - ptcache_file_write(pf, (void *)DPAINT_CACHE_VERSION, 1, sizeof(char)*4); + ptcache_file_write(pf, DPAINT_CACHE_VERSION, 1, sizeof(char)*4); if(surface->format != MOD_DPAINT_SURFACE_F_IMAGESEQ && surface->data) { int total_points=surface->data->total_points; diff --git a/source/blender/editors/object/object_constraint.c b/source/blender/editors/object/object_constraint.c index 991ed0ebd51..0fbf5a8bd92 100644 --- a/source/blender/editors/object/object_constraint.c +++ b/source/blender/editors/object/object_constraint.c @@ -736,7 +736,7 @@ static int childof_set_inverse_exec (bContext *C, wmOperator *op) where_is_pose(scene, ob); } else if (ob) { - Object workob = {0}; + Object workob = {{0}}; /* use what_does_parent to find inverse - just like for normal parenting */ what_does_parent(scene, ob, &workob); From 1649521abe637b5af74174eda0d8ca0b5f1c6ceb Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 11 Nov 2011 05:34:07 +0000 Subject: [PATCH 22/22] fix [#29203] Camera can still move even when transforms locked added object_tfm_protected_backup, object_tfm_protected_restore so its easier to transform the object and respect protected channels (otherwise you need checks everywhere for each channel which is verbose). --- source/blender/blenkernel/BKE_object.h | 16 +++++ source/blender/blenkernel/intern/object.c | 65 +++++++++++++++++++ .../editors/space_view3d/view3d_edit.c | 31 ++++++--- .../editors/space_view3d/view3d_view.c | 6 ++ 4 files changed, 109 insertions(+), 9 deletions(-) diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h index 2ef942a2e09..ecc00901dd5 100644 --- a/source/blender/blenkernel/BKE_object.h +++ b/source/blender/blenkernel/BKE_object.h @@ -116,6 +116,22 @@ int ray_hit_boundbox(struct BoundBox *bb, float ray_start[3], float ray_normal[3 void *object_tfm_backup(struct Object *ob); void object_tfm_restore(struct Object *ob, void *obtfm_pt); +typedef struct ObjectTfmProtectedChannels { + float loc[3], dloc[3]; + float size[3], dsize[3]; + float rot[3], drot[3]; + float quat[4], dquat[4]; + float rotAxis[3], drotAxis[3]; + float rotAngle, drotAngle; +} ObjectTfmProtectedChannels; + +void object_tfm_protected_backup(const struct Object *ob, + ObjectTfmProtectedChannels *obtfm); + +void object_tfm_protected_restore(struct Object *ob, + const ObjectTfmProtectedChannels *obtfm, + const short protectflag); + void object_handle_update(struct Scene *scene, struct Object *ob); void object_sculpt_modifiers_changed(struct Object *ob); diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 45bd8f095a4..4e6bc4eee89 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -1498,6 +1498,71 @@ void object_mat3_to_rot(Object *ob, float mat[][3], short use_compat) } } +void object_tfm_protected_backup(const Object *ob, + ObjectTfmProtectedChannels *obtfm) +{ + +#define TFMCPY( _v) (obtfm->_v = ob->_v) +#define TFMCPY3D( _v) copy_v3_v3(obtfm->_v, ob->_v) +#define TFMCPY4D( _v) copy_v4_v4(obtfm->_v, ob->_v) + + TFMCPY3D(loc); + TFMCPY3D(dloc); + TFMCPY3D(size); + TFMCPY3D(dsize); + TFMCPY3D(rot); + TFMCPY3D(drot); + TFMCPY4D(quat); + TFMCPY4D(dquat); + TFMCPY3D(rotAxis); + TFMCPY3D(drotAxis); + TFMCPY(rotAngle); + TFMCPY(drotAngle); + +#undef TFMCPY +#undef TFMCPY3D +#undef TFMCPY4D + +} + +void object_tfm_protected_restore(Object *ob, + const ObjectTfmProtectedChannels *obtfm, + const short protectflag) +{ + unsigned int i; + + for (i= 0; i < 3; i++) { + if (protectflag & (OB_LOCK_LOCX<loc[i]= obtfm->loc[i]; + ob->dloc[i]= obtfm->dloc[i]; + } + + if (protectflag & (OB_LOCK_SCALEX<size[i]= obtfm->size[i]; + ob->dsize[i]= obtfm->dsize[i]; + } + + if (protectflag & (OB_LOCK_ROTX<rot[i]= obtfm->rot[i]; + ob->drot[i]= obtfm->drot[i]; + + ob->quat[i + 1]= obtfm->quat[i + 1]; + ob->dquat[i + 1]= obtfm->dquat[i + 1]; + + ob->rotAxis[i]= obtfm->rotAxis[i]; + ob->drotAxis[i]= obtfm->drotAxis[i]; + } + } + + if ((protectflag & OB_LOCK_ROT4D) && (protectflag & OB_LOCK_ROTW)) { + ob->quat[0]= obtfm->quat[0]; + ob->dquat[0]= obtfm->dquat[0]; + + ob->rotAngle= obtfm->rotAngle; + ob->drotAngle= obtfm->drotAngle; + } +} + /* see pchan_apply_mat4() for the equivalent 'pchan' function */ void object_apply_mat4(Object *ob, float mat[][4], const short use_compat, const short use_parent) { diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 7331959ef51..0329b6c3739 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -99,6 +99,7 @@ void ED_view3d_camera_lock_init(View3D *v3d, RegionView3D *rv3d) int ED_view3d_camera_lock_sync(View3D *v3d, RegionView3D *rv3d) { if(ED_view3d_camera_lock_check(v3d, rv3d)) { + ObjectTfmProtectedChannels obtfm; Object *root_parent; if((U.uiflag & USER_CAM_LOCK_NO_PARENT)==0 && (root_parent= v3d->camera->parent)) { @@ -117,7 +118,10 @@ int ED_view3d_camera_lock_sync(View3D *v3d, RegionView3D *rv3d) mul_m4_m4m4(diff_mat, v3d->camera->imat, view_mat); mul_m4_m4m4(parent_mat, root_parent->obmat, diff_mat); + + object_tfm_protected_backup(root_parent, &obtfm); object_apply_mat4(root_parent, parent_mat, TRUE, FALSE); + object_tfm_protected_restore(root_parent, &obtfm, root_parent->protectflag); ob_update= v3d->camera; while(ob_update) { @@ -127,7 +131,10 @@ int ED_view3d_camera_lock_sync(View3D *v3d, RegionView3D *rv3d) } } else { + object_tfm_protected_backup(v3d->camera, &obtfm); ED_view3d_to_object(v3d->camera, rv3d->ofs, rv3d->viewquat, rv3d->dist); + object_tfm_protected_restore(v3d->camera, &obtfm, v3d->camera->protectflag); + DAG_id_tag_update(&v3d->camera->id, OB_RECALC_OB); WM_main_add_notifier(NC_OBJECT|ND_TRANSFORM, v3d->camera); } @@ -346,6 +353,7 @@ typedef struct ViewOpsData { double timer_lastdraw; float oldquat[4]; + float viewquat[4]; /* working copy of rv3d->viewquat */ float trackvec[3]; float mousevec[3]; /* dolly only */ float reverse, dist0; @@ -408,6 +416,7 @@ static void viewops_data_create(bContext *C, wmOperator *op, wmEvent *event) ED_view3d_camera_lock_init(vod->v3d, vod->rv3d); vod->dist0= rv3d->dist; + copy_qt_qt(vod->viewquat, rv3d->viewquat); copy_qt_qt(vod->oldquat, rv3d->viewquat); vod->origx= vod->oldx= event->x; vod->origy= vod->oldy= event->y; @@ -643,13 +652,13 @@ static void viewrotate_apply(ViewOpsData *vod, int x, int y) q1[0]= cos(phi); mul_v3_fl(q1+1, sin(phi)); - mul_qt_qtqt(rv3d->viewquat, q1, vod->oldquat); + mul_qt_qtqt(vod->viewquat, q1, vod->oldquat); if (vod->use_dyn_ofs) { /* compute the post multiplication quat, to rotate the offset correctly */ copy_qt_qt(q1, vod->oldquat); conjugate_qt(q1); - mul_qt_qtqt(q1, q1, rv3d->viewquat); + mul_qt_qtqt(q1, q1, vod->viewquat); conjugate_qt(q1); /* conj == inv for unit quat */ copy_v3_v3(rv3d->ofs, vod->ofs); @@ -671,7 +680,7 @@ static void viewrotate_apply(ViewOpsData *vod, int x, int y) const float sensitivity = 0.0035f; /* Get the 3x3 matrix and its inverse from the quaternion */ - quat_to_mat3( m,rv3d->viewquat); + quat_to_mat3( m,vod->viewquat); invert_m3_m3(m_inv,m); /* Determine the direction of the x vector (for rotating up and down) */ @@ -682,7 +691,7 @@ static void viewrotate_apply(ViewOpsData *vod, int x, int y) phi = sensitivity * -(y - vod->oldy); q1[0] = cos(phi); mul_v3_v3fl(q1+1, xvec, sin(phi)); - mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, q1); + mul_qt_qtqt(vod->viewquat, vod->viewquat, q1); if (vod->use_dyn_ofs) { conjugate_qt(q1); /* conj == inv for unit quat */ @@ -696,7 +705,7 @@ static void viewrotate_apply(ViewOpsData *vod, int x, int y) q1[0] = cos(phi); q1[1] = q1[2] = 0.0; q1[3] = sin(phi); - mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, q1); + mul_qt_qtqt(vod->viewquat, vod->viewquat, q1); if (vod->use_dyn_ofs) { conjugate_qt(q1); @@ -711,7 +720,7 @@ static void viewrotate_apply(ViewOpsData *vod, int x, int y) int i; float viewquat_inv[4]; float zaxis[3]={0,0,1}; - invert_qt_qt(viewquat_inv, rv3d->viewquat); + invert_qt_qt(viewquat_inv, vod->viewquat); mul_qt_v3(viewquat_inv, zaxis); @@ -736,7 +745,7 @@ static void viewrotate_apply(ViewOpsData *vod, int x, int y) * for testing roll */ rotation_between_vecs_to_quat(viewquat_align, zaxis_test, zaxis); normalize_qt(viewquat_align); - mul_qt_qtqt(viewquat_align, rv3d->viewquat, viewquat_align); + mul_qt_qtqt(viewquat_align, vod->viewquat, viewquat_align); normalize_qt(viewquat_align); invert_qt_qt(viewquat_align_inv, viewquat_align); @@ -766,7 +775,7 @@ static void viewrotate_apply(ViewOpsData *vod, int x, int y) } } - copy_qt_qt(rv3d->viewquat, quat_best); + copy_qt_qt(vod->viewquat, quat_best); rv3d->view= view; /* if we snap to a rolled camera the grid is invalid */ break; @@ -777,7 +786,11 @@ static void viewrotate_apply(ViewOpsData *vod, int x, int y) vod->oldy= y; /* avoid precision loss over time */ - normalize_qt(rv3d->viewquat); + normalize_qt(vod->viewquat); + + /* use a working copy so view rotation locking doesnt overwrite the locked + * rotation back into the view we calculate with */ + copy_qt_qt(rv3d->viewquat, vod->viewquat); ED_view3d_camera_lock_sync(vod->v3d, rv3d); diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 7de1f2a85bb..a5849864d86 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -370,6 +370,7 @@ static int view3d_setcameratoview_exec(bContext *C, wmOperator *UNUSED(op)) { View3D *v3d = CTX_wm_view3d(C); RegionView3D *rv3d= CTX_wm_region_view3d(C); + ObjectTfmProtectedChannels obtfm; copy_qt_qt(rv3d->lviewquat, rv3d->viewquat); rv3d->lview= rv3d->view; @@ -377,7 +378,12 @@ static int view3d_setcameratoview_exec(bContext *C, wmOperator *UNUSED(op)) rv3d->lpersp= rv3d->persp; } + object_tfm_protected_backup(v3d->camera, &obtfm); + ED_view3d_to_object(v3d->camera, rv3d->ofs, rv3d->viewquat, rv3d->dist); + + object_tfm_protected_restore(v3d->camera, &obtfm, v3d->camera->protectflag); + DAG_id_tag_update(&v3d->camera->id, OB_RECALC_OB); rv3d->persp = RV3D_CAMOB;