forked from bartvdbraak/blender
Merge with trunk r37677
This commit is contained in:
commit
207911bdb3
450
CMakeLists.txt
450
CMakeLists.txt
@ -49,8 +49,13 @@ endif()
|
||||
|
||||
cmake_minimum_required(VERSION 2.8)
|
||||
|
||||
if(NOT EXECUTABLE_OUTPUT_PATH)
|
||||
set(FIRST_RUN "TRUE")
|
||||
endif()
|
||||
|
||||
|
||||
# this starts out unset
|
||||
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/build_files/cmake/Modules/")
|
||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/build_files/cmake/Modules")
|
||||
|
||||
# quiet output for Makefiles, 'make -s' helps too
|
||||
# set_property(GLOBAL PROPERTY RULE_MESSAGES OFF)
|
||||
@ -246,13 +251,12 @@ set(CXX_WARNINGS "")
|
||||
# On Unix:
|
||||
# cmake ../blender \
|
||||
# -D PYTHON_VERSION=3.2 \
|
||||
# -D PYTHON_INCLUDE_DIRS=/opt/py32/include/python3.2d \
|
||||
# -D PYTHON_LIBPATH=/opt/py32/lib \
|
||||
# -D PYTHON_LIBRARY=python3.2d
|
||||
# -D PYTHON_INCLUDE_DIR=/opt/py32/include/python3.2d \
|
||||
# -D PYTHON_LIBRARY=/opt/py32/lib/libpython3.2d.so
|
||||
#
|
||||
# On Macs:
|
||||
# cmake ../blender \
|
||||
# -D PYTHON_INCLUDE_DIRS=/System/Library/Frameworks/Python.framework/Versions/3.2/include/python3.2 \
|
||||
# -D PYTHON_INCLUDE_DIR=/System/Library/Frameworks/Python.framework/Versions/3.2/include/python3.2 \
|
||||
# -D PYTHON_LIBPATH=/System/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/config \
|
||||
# -G Xcode
|
||||
#
|
||||
@ -268,6 +272,43 @@ if(UNIX AND NOT APPLE)
|
||||
set(CMAKE_LIBRARY_PATH "/usr/lib/x86_64-linux-gnu;${CMAKE_LIBRARY_PATH}")
|
||||
endif()
|
||||
|
||||
find_package(JPEG REQUIRED)
|
||||
find_package(PNG REQUIRED)
|
||||
find_package(ZLIB REQUIRED)
|
||||
find_package(Freetype REQUIRED)
|
||||
|
||||
if(WITH_PYTHON)
|
||||
# No way to set py32. remove for now.
|
||||
# find_package(PythonLibs)
|
||||
|
||||
# Use our own instead, since wothout py is such a rare case,
|
||||
# require this package
|
||||
find_package(PythonLibsUnix REQUIRED)
|
||||
endif()
|
||||
|
||||
|
||||
if(WITH_IMAGE_OPENEXR)
|
||||
find_package(OpenEXR) # our own module
|
||||
if(NOT OPENEXR_FOUND)
|
||||
set(WITH_IMAGE_OPENEXR OFF)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(WITH_IMAGE_OPENJPEG)
|
||||
find_package(OpenJPEG)
|
||||
if(NOT OPENJPEG_FOUND)
|
||||
set(WITH_IMAGE_OPENJPEG OFF)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(WITH_IMAGE_TIFF)
|
||||
find_package(TIFF)
|
||||
if(NOT TIFF_FOUND)
|
||||
set(WITH_IMAGE_TIFF OFF)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Audio IO
|
||||
if(WITH_OPENAL)
|
||||
find_package(OpenAL)
|
||||
if(NOT OPENAL_FOUND)
|
||||
@ -275,18 +316,41 @@ if(UNIX AND NOT APPLE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(WITH_JACK)
|
||||
set(JACK /usr)
|
||||
set(JACK_INC ${JACK}/include/jack)
|
||||
set(JACK_LIB jack)
|
||||
set(JACK_LIBPATH ${JACK}/lib)
|
||||
if(WITH_SDL)
|
||||
find_package(SDL)
|
||||
mark_as_advanced(SDLMAIN_LIBRARY)
|
||||
mark_as_advanced(SDL_INCLUDE_DIR)
|
||||
mark_as_advanced(SDL_LIBRARY)
|
||||
mark_as_advanced(SDL_LIBRARY_TEMP)
|
||||
# unset(SDLMAIN_LIBRARY CACHE)
|
||||
if(NOT SDL_FOUND)
|
||||
set(WITH_SDL OFF)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(WITH_JACK)
|
||||
find_package(Jack)
|
||||
if(NOT JACK_FOUND)
|
||||
set(WITH_JACK OFF)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Codecs
|
||||
if(WITH_CODEC_SNDFILE)
|
||||
set(SNDFILE /usr)
|
||||
set(SNDFILE_INC ${SNDFILE}/include)
|
||||
set(SNDFILE_LIB sndfile)
|
||||
set(SNDFILE_LIBPATH ${SNDFILE}/lib)
|
||||
find_package(SndFile)
|
||||
if(NOT SNDFILE_FOUND)
|
||||
set(WITH_CODEC_SNDFILE OFF)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(WITH_CODEC_FFMPEG)
|
||||
set(FFMPEG /usr CACHE FILEPATH "FFMPEG Directory")
|
||||
mark_as_advanced(FFMPEG)
|
||||
set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
|
||||
set(FFMPEG_LIBRARIES avformat avcodec avutil avdevice swscale CACHE STRING "FFMPEG Libraries")
|
||||
mark_as_advanced(FFMPEG_LIBRARIES)
|
||||
set(FFMPEG_LIBPATH ${FFMPEG}/lib)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__STDC_CONSTANT_MACROS")
|
||||
endif()
|
||||
|
||||
if(WITH_INTERNATIONAL)
|
||||
@ -309,103 +373,26 @@ if(UNIX AND NOT APPLE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
find_package(Freetype)
|
||||
# unset(FREETYPE_INCLUDE_DIRS CACHE) # cant use
|
||||
|
||||
|
||||
if(WITH_PYTHON)
|
||||
# No way to set py32. remove for now.
|
||||
# find_package(PythonLibs)
|
||||
|
||||
# defines...
|
||||
|
||||
# PYTHON_VERSION
|
||||
# PYTHON_INCLUDE_DIRS
|
||||
# PYTHON_LIBRARY
|
||||
# PYTHON_LIBPATH
|
||||
# PYTHON_LINKFLAGS
|
||||
|
||||
include(build_files/cmake/FindPythonLibsUnix.cmake)
|
||||
|
||||
endif()
|
||||
|
||||
if(WITH_SDL)
|
||||
find_package(SDL)
|
||||
mark_as_advanced(SDLMAIN_LIBRARY)
|
||||
mark_as_advanced(SDL_INCLUDE_DIR)
|
||||
mark_as_advanced(SDL_LIBRARY)
|
||||
mark_as_advanced(SDL_LIBRARY_TEMP)
|
||||
# unset(SDLMAIN_LIBRARY CACHE)
|
||||
if(NOT SDL_FOUND)
|
||||
set(WITH_SDL OFF)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(WITH_IMAGE_OPENEXR)
|
||||
set(OPENEXR /usr CACHE FILEPATH "OPENEXR Directory")
|
||||
mark_as_advanced(OPENEXR)
|
||||
find_path(OPENEXR_INC
|
||||
ImfXdr.h
|
||||
PATHS
|
||||
${OPENEXR}/include/OpenEXR
|
||||
/usr/local/include/OpenEXR
|
||||
/sw/include/OpenEXR
|
||||
/opt/local/include/OpenEXR
|
||||
/opt/csw/include/OpenEXR
|
||||
/opt/include/OpenEXR
|
||||
)
|
||||
mark_as_advanced(OPENEXR_INC)
|
||||
|
||||
set(OPENEXR_LIB Half IlmImf Iex Imath)
|
||||
|
||||
if(NOT OPENEXR_INC)
|
||||
set(WITH_IMAGE_OPENEXR OFF)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(WITH_IMAGE_TIFF)
|
||||
find_package(TIFF)
|
||||
if(NOT TIFF_FOUND)
|
||||
set(WITH_IMAGE_TIFF OFF)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
find_package(JPEG REQUIRED)
|
||||
|
||||
find_package(PNG REQUIRED)
|
||||
|
||||
find_package(ZLIB REQUIRED)
|
||||
|
||||
if(WITH_CODEC_FFMPEG)
|
||||
set(FFMPEG /usr CACHE FILEPATH "FFMPEG Directory")
|
||||
mark_as_advanced(FFMPEG)
|
||||
set(FFMPEG_INC ${FFMPEG}/include)
|
||||
set(FFMPEG_LIB avformat avcodec avutil avdevice swscale CACHE STRING "FFMPEG Libraries")
|
||||
mark_as_advanced(FFMPEG_LIB)
|
||||
set(FFMPEG_LIBPATH ${FFMPEG}/lib)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__STDC_CONSTANT_MACROS")
|
||||
endif()
|
||||
|
||||
if(WITH_FFTW3)
|
||||
set(FFTW3 /usr)
|
||||
set(FFTW3_INC ${FFTW3}/include)
|
||||
set(FFTW3_LIB fftw3)
|
||||
set(FFTW3_LIBPATH ${FFTW3}/lib)
|
||||
find_package(Fftw3)
|
||||
if(NOT FFTW3_FOUND)
|
||||
set(WITH_FFTW3 OFF)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(WITH_SAMPLERATE)
|
||||
set(LIBSAMPLERATE /usr)
|
||||
set(LIBSAMPLERATE_INC ${LIBSAMPLERATE}/include)
|
||||
set(LIBSAMPLERATE_LIB samplerate)
|
||||
set(LIBSAMPLERATE_LIBPATH ${LIBSAMPLERATE}/lib)
|
||||
find_package(Samplerate)
|
||||
if(NOT SAMPLERATE_FOUND)
|
||||
set(WITH_SAMPLERATE OFF)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(WITH_OPENCOLLADA)
|
||||
set(OPENCOLLADA /usr/local/opencollada CACHE FILEPATH "OpenCollada Directory")
|
||||
mark_as_advanced(OPENCOLLADA)
|
||||
set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib)
|
||||
set(OPENCOLLADA_LIB OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver pcre ftoa buffer xml2)
|
||||
set(OPENCOLLADA_INC ${OPENCOLLADA})
|
||||
set(OPENCOLLADA_LIBRARIES OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver pcre ftoa buffer xml2)
|
||||
set(OPENCOLLADA_INCLUDE_DIR ${OPENCOLLADA})
|
||||
|
||||
set(PCRE /usr CACHE FILEPATH "PCRE Directory")
|
||||
mark_as_advanced(PCRE)
|
||||
@ -419,12 +406,10 @@ if(UNIX AND NOT APPLE)
|
||||
endif()
|
||||
|
||||
if(WITH_MEM_JEMALLOC)
|
||||
set(JEMALLOC /usr)
|
||||
set(JEMALLOC_LIBRARY jemalloc CACHE STRING "JeMalloc library")
|
||||
set(JEMALLOC_LIBPATH ${JEMALLOC}/lib CACHE FILEPATH "JeMalloc library path")
|
||||
# no use for this yet.
|
||||
# set(JEMALLOC_INCLUDE_DIR ${JEMALLOC}/include CACHE FILEPATH "JeMalloc include path")
|
||||
unset(JEMALLOC)
|
||||
find_package(JeMalloc)
|
||||
if(NOT JEMALLOC_FOUND)
|
||||
set(WITH_MEM_JEMALLOC OFF)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# OpenSuse needs lutil, ArchLinux not, for now keep, can avoid by using --as-needed
|
||||
@ -446,10 +431,8 @@ if(UNIX AND NOT APPLE)
|
||||
if(NOT WITH_PYTHON_MODULE)
|
||||
# BSD's dont use libdl.so
|
||||
list(APPEND LLIBS -ldl)
|
||||
|
||||
# binreloc is linux only
|
||||
set(BINRELOC ${CMAKE_SOURCE_DIR}/extern/binreloc)
|
||||
set(BINRELOC_INC ${BINRELOC}/include)
|
||||
set(BINRELOC_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extern/binreloc/include)
|
||||
set(WITH_BINRELOC ON)
|
||||
endif()
|
||||
endif()
|
||||
@ -502,16 +485,16 @@ elseif(WIN32)
|
||||
|
||||
if(WITH_INTERNATIONAL)
|
||||
set(ICONV ${LIBDIR}/iconv)
|
||||
set(ICONV_INC ${ICONV}/include)
|
||||
set(ICONV_LIB iconv)
|
||||
set(ICONV_INCLUDE_DIRS ${ICONV}/include)
|
||||
set(ICONV_LIBRARIES iconv)
|
||||
set(ICONV_LIBPATH ${ICONV}/lib)
|
||||
endif()
|
||||
|
||||
if(WITH_SAMPLERATE)
|
||||
set(LIBSAMPLERATE ${LIBDIR}/samplerate)
|
||||
set(LIBSAMPLERATE_INC ${LIBSAMPLERATE}/include)
|
||||
set(LIBSAMPLERATE_LIB libsamplerate)
|
||||
set(LIBSAMPLERATE_LIBPATH ${LIBSAMPLERATE}/lib)
|
||||
set(SAMPLERATE ${LIBDIR}/samplerate)
|
||||
set(SAMPLERATE_INCLUDE_DIRS ${SAMPLERATE}/include)
|
||||
set(SAMPLERATE_LIBRARIES libsamplerate)
|
||||
set(SAMPLERATE_LIBPATH ${SAMPLERATE}/lib)
|
||||
endif()
|
||||
|
||||
set(PNG "${LIBDIR}/png")
|
||||
@ -533,9 +516,9 @@ elseif(WIN32)
|
||||
|
||||
if(WITH_CODEC_SNDFILE)
|
||||
set(SNDFILE ${LIBDIR}/sndfile)
|
||||
set(SNDFILE_INC ${SNDFILE}/include)
|
||||
set(SNDFILE_LIB libsndfile-1)
|
||||
set(SNDFILE_LIBPATH ${SNDFILE}/lib)
|
||||
set(SNDFILE_INCLUDE_DIRS ${SNDFILE}/include)
|
||||
set(SNDFILE_LIBRARIES libsndfile-1)
|
||||
set(SNDFILE_LIBPATH ${SNDFILE}/lib) # TODO, deprecate
|
||||
endif()
|
||||
|
||||
if(WITH_SDL)
|
||||
@ -547,8 +530,8 @@ elseif(WIN32)
|
||||
|
||||
if(WITH_CODEC_QUICKTIME)
|
||||
set(QUICKTIME ${LIBDIR}/QTDevWin)
|
||||
set(QUICKTIME_INC ${QUICKTIME}/CIncludes)
|
||||
set(QUICKTIME_LIB qtmlClient)
|
||||
set(QUICKTIME_INCLUDE_DIRS ${QUICKTIME}/CIncludes)
|
||||
set(QUICKTIME_LIBRARIES qtmlClient)
|
||||
set(QUICKTIME_LIBPATH ${QUICKTIME}/Libraries)
|
||||
endif()
|
||||
|
||||
@ -611,9 +594,9 @@ elseif(WIN32)
|
||||
endif()
|
||||
|
||||
set(PTHREADS ${LIBDIR}/pthreads)
|
||||
set(PTHREADS_INC ${PTHREADS}/include)
|
||||
set(PTHREADS_INCLUDE_DIRS ${PTHREADS}/include)
|
||||
set(PTHREADS_LIBPATH ${PTHREADS}/lib)
|
||||
set(PTHREADS_LIB pthreadVC2)
|
||||
set(PTHREADS_LIBRARIES pthreadVC2)
|
||||
|
||||
set(FREETYPE ${LIBDIR}/freetype)
|
||||
set(FREETYPE_INCLUDE_DIRS ${FREETYPE}/include ${FREETYPE}/include/freetype2)
|
||||
@ -622,31 +605,41 @@ elseif(WIN32)
|
||||
|
||||
if(WITH_FFTW3)
|
||||
set(FFTW3 ${LIBDIR}/fftw3)
|
||||
set(FFTW3_LIB libfftw)
|
||||
set(FFTW3_INC ${FFTW3}/include)
|
||||
set(FFTW3_LIBRARIES libfftw)
|
||||
set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
|
||||
set(FFTW3_LIBPATH ${FFTW3}/lib)
|
||||
endif()
|
||||
|
||||
if(WITH_OPENCOLLADA)
|
||||
set(OPENCOLLADA ${LIBDIR}/opencollada)
|
||||
set(OPENCOLLADA_INC ${OPENCOLLADA}/include)
|
||||
set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib)
|
||||
set(OPENCOLLADA_LIB OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils OpenCOLLADAStreamWriter MathMLSolver GeneratedSaxParser xml2 buffer ftoa UTF)
|
||||
set(PCRE_LIB pcre)
|
||||
set(OPENCOLLADA_INCLUDE_DIR
|
||||
${LIBDIR}/opencollada/include
|
||||
)
|
||||
set(OPENCOLLADA_LIBRARIES
|
||||
${LIBDIR}/opencollada/lib/OpenCOLLADASaxFrameworkLoader.lib
|
||||
${LIBDIR}/opencollada/lib/OpenCOLLADAFramework.lib
|
||||
${LIBDIR}/opencollada/lib/OpenCOLLADABaseUtils.lib
|
||||
${LIBDIR}/opencollada/lib/OpenCOLLADAStreamWriter.lib
|
||||
${LIBDIR}/opencollada/lib/MathMLSolver.lib
|
||||
${LIBDIR}/opencollada/lib/GeneratedSaxParser.lib
|
||||
${LIBDIR}/opencollada/lib/xml2.lib
|
||||
${LIBDIR}/opencollada/lib/buffer.lib
|
||||
${LIBDIR}/opencollada/lib/ftoa.lib
|
||||
${LIBDIR}/opencollada/lib/UTF.lib
|
||||
)
|
||||
set(PCRE_LIB
|
||||
${LIBDIR}/opencollada/lib/pcre.lib
|
||||
)
|
||||
endif()
|
||||
|
||||
|
||||
if(WITH_CODEC_FFMPEG)
|
||||
set(FFMPEG ${LIBDIR}/ffmpeg)
|
||||
set(FFMPEG_INC ${FFMPEG}/include ${FFMPEG}/include/msvc)
|
||||
set(FFMPEG_LIB avcodec-52 avformat-52 avdevice-52 avutil-50 swscale-0)
|
||||
set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include ${FFMPEG}/include/msvc)
|
||||
set(FFMPEG_LIBRARIES avcodec-52 avformat-52 avdevice-52 avutil-50 swscale-0)
|
||||
set(FFMPEG_LIBPATH ${FFMPEG}/lib)
|
||||
endif()
|
||||
|
||||
if(WITH_IMAGE_OPENEXR)
|
||||
if(MSVC80)
|
||||
set(MSVC_LIB _vs2005)
|
||||
set(MSVC_INC)
|
||||
elseif(MSVC90)
|
||||
if(MSVC90)
|
||||
set(MSVC_LIB _vs2008)
|
||||
set(MSVC_INC)
|
||||
elseif(MSVC10)
|
||||
@ -656,11 +649,24 @@ elseif(WIN32)
|
||||
set(MSVC_LIB msvc)
|
||||
set(MSVC_INC)
|
||||
endif()
|
||||
set(OPENEXR ${LIBDIR}/openexr)
|
||||
set(OPENEXR_LIB Iex Half IlmImf Imath IlmThread)
|
||||
set(OPENEXR ${LIBDIR}/openexr)
|
||||
set(OPENEXR_LIBPATH ${OPENEXR}/lib${MSVC_LIB})
|
||||
set(OPENEXR_LIBRARIES
|
||||
${OPENEXR_LIBPATH}/Iex.lib
|
||||
${OPENEXR_LIBPATH}/Half.lib
|
||||
${OPENEXR_LIBPATH}/IlmImf.lib
|
||||
${OPENEXR_LIBPATH}/Imath.lib
|
||||
${OPENEXR_LIBPATH}/IlmThread.lib
|
||||
)
|
||||
set(OPENEXR_INCUDE ${OPENEXR}/include${MSVC_INC})
|
||||
set(OPENEXR_INC ${OPENEXR_INCUDE}/ ${OPENEXR_INCUDE}/IlmImf ${OPENEXR_INCUDE}/Iex ${OPENEXR_INCUDE}/Imath)
|
||||
set(OPENEXR_INCLUDE_DIRS
|
||||
${OPENEXR_INCUDE}
|
||||
${OPENEXR_INCUDE}/IlmImf
|
||||
${OPENEXR_INCUDE}/Iex
|
||||
${OPENEXR_INCUDE}/Imath
|
||||
)
|
||||
unset(OPENEXR_INCUDE)
|
||||
unset(OPENEXR_LIBPATH)
|
||||
endif()
|
||||
|
||||
if(WITH_IMAGE_TIFF)
|
||||
@ -672,18 +678,16 @@ elseif(WIN32)
|
||||
|
||||
if(WITH_JACK)
|
||||
set(JACK ${LIBDIR}/jack)
|
||||
set(JACK_INC ${JACK}/include/jack ${JACK}/include)
|
||||
set(JACK_LIB libjack)
|
||||
set(JACK_INCLUDE_DIRS ${JACK}/include/jack ${JACK}/include)
|
||||
set(JACK_LIBRARIES libjack)
|
||||
set(JACK_LIBPATH ${JACK}/lib)
|
||||
endif()
|
||||
|
||||
if(WITH_PYTHON)
|
||||
set(PYTHON ${LIBDIR}/python)
|
||||
set(PYTHON_VERSION 3.2)
|
||||
set(PYTHON_INCLUDE_DIRS "${PYTHON}/include/python${PYTHON_VERSION}")
|
||||
set(PYTHON_INCLUDE_DIRS "${LIBDIR}/python/include/python${PYTHON_VERSION}")
|
||||
# set(PYTHON_BINARY python) # not used yet
|
||||
set(PYTHON_LIBRARY python32)
|
||||
set(PYTHON_LIBPATH ${PYTHON}/lib)
|
||||
set(PYTHON_LIBRARIES ${LIBDIR}/python/lib/python32.lib)
|
||||
endif()
|
||||
|
||||
# MSVC only, Mingw doesnt need
|
||||
@ -726,9 +730,9 @@ elseif(WIN32)
|
||||
set(ZLIB_LIBRARIES z)
|
||||
|
||||
set(PTHREADS ${LIBDIR}/pthreads)
|
||||
set(PTHREADS_INC ${PTHREADS}/include)
|
||||
set(PTHREADS_INCLUDE_DIRS ${PTHREADS}/include)
|
||||
set(PTHREADS_LIBPATH ${PTHREADS}/lib)
|
||||
set(PTHREADS_LIB pthreadGC2)
|
||||
set(PTHREADS_LIBRARIES pthreadGC2)
|
||||
|
||||
set(FREETYPE ${LIBDIR}/gcc/freetype)
|
||||
set(FREETYPE_INCLUDE_DIRS ${FREETYPE}/include ${FREETYPE}/include/freetype2)
|
||||
@ -737,30 +741,30 @@ elseif(WIN32)
|
||||
|
||||
if(WITH_FFTW3)
|
||||
set(FFTW3 ${LIBDIR}/gcc/fftw3)
|
||||
set(FFTW3_LIB fftw3)
|
||||
set(FFTW3_INC ${FFTW3}/include)
|
||||
set(FFTW3_LIBRARIES fftw3)
|
||||
set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
|
||||
set(FFTW3_LIBPATH ${FFTW3}/lib)
|
||||
endif()
|
||||
|
||||
if(WITH_OPENCOLLADA)
|
||||
set(OPENCOLLADA ${LIBDIR}/gcc/opencollada)
|
||||
set(OPENCOLLADA_INC ${OPENCOLLADA}/include)
|
||||
set(OPENCOLLADA_INCLUDE_DIR ${OPENCOLLADA}/include)
|
||||
set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib ${OPENCOLLADA}/lib)
|
||||
set(OPENCOLLADA_LIB OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver expat pcre buffer ftoa)
|
||||
set(OPENCOLLADA_LIBRARIES OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver expat pcre buffer ftoa)
|
||||
set(PCRE_LIB pcre)
|
||||
endif()
|
||||
|
||||
if(WITH_CODEC_FFMPEG)
|
||||
set(FFMPEG ${LIBDIR}/ffmpeg)
|
||||
set(FFMPEG_INC ${FFMPEG}/include ${FFMPEG}/include)
|
||||
set(FFMPEG_LIB avcodec-52 avformat-52 avdevice-52 avutil-50 swscale-0)
|
||||
set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include ${FFMPEG}/include)
|
||||
set(FFMPEG_LIBRARIES avcodec-52 avformat-52 avdevice-52 avutil-50 swscale-0)
|
||||
set(FFMPEG_LIBPATH ${FFMPEG}/lib)
|
||||
endif()
|
||||
|
||||
if(WITH_IMAGE_OPENEXR)
|
||||
set(OPENEXR ${LIBDIR}/gcc/openexr)
|
||||
set(OPENEXR_INC ${OPENEXR}/include ${OPENEXR}/include/OpenEXR)
|
||||
set(OPENEXR_LIB Half IlmImf Imath IlmThread)
|
||||
set(OPENEXR_INCLUDE_DIRS ${OPENEXR}/include/OpenEXR)
|
||||
set(OPENEXR_LIBRARIES Half IlmImf Imath IlmThread)
|
||||
set(OPENEXR_LIBPATH ${OPENEXR}/lib)
|
||||
|
||||
# TODO, gives linking errors, force off
|
||||
@ -776,8 +780,8 @@ elseif(WIN32)
|
||||
|
||||
if(WITH_JACK)
|
||||
set(JACK ${LIBDIR}/jack)
|
||||
set(JACK_INC ${JACK}/include/jack ${JACK}/include)
|
||||
set(JACK_LIB jack)
|
||||
set(JACK_INCLUDE_DIRS ${JACK}/include/jack ${JACK}/include)
|
||||
set(JACK_LIBRARIES jack)
|
||||
set(JACK_LIBPATH ${JACK}/lib)
|
||||
|
||||
# TODO, gives linking errors, force off
|
||||
@ -789,7 +793,7 @@ elseif(WIN32)
|
||||
set(PYTHON_VERSION 3.2)
|
||||
set(PYTHON_INCLUDE_DIRS "${PYTHON}/include/python${PYTHON_VERSION}")
|
||||
# set(PYTHON_BINARY python) # not used yet
|
||||
set(PYTHON_LIBRARY python32mw)
|
||||
set(PYTHON_LIBRARIES python32mw)
|
||||
set(PYTHON_LIBPATH ${PYTHON}/lib)
|
||||
endif()
|
||||
|
||||
@ -798,7 +802,7 @@ elseif(WIN32)
|
||||
endif()
|
||||
|
||||
# used in many places so include globally, like OpenGL
|
||||
blender_include_dirs("${PTHREADS_INC}")
|
||||
blender_include_dirs("${PTHREADS_INCLUDE_DIRS}")
|
||||
|
||||
elseif(APPLE)
|
||||
|
||||
@ -829,16 +833,16 @@ elseif(APPLE)
|
||||
|
||||
if(WITH_JACK)
|
||||
set(JACK /usr)
|
||||
set(JACK_INC ${JACK}/include/jack)
|
||||
set(JACK_LIB jack)
|
||||
set(JACK_INCLUDE_DIRS ${JACK}/include/jack)
|
||||
set(JACK_LIBRARIES jack)
|
||||
set(JACK_LIBPATH ${JACK}/lib)
|
||||
endif()
|
||||
|
||||
if(WITH_CODEC_SNDFILE)
|
||||
set(SNDFILE ${LIBDIR}/sndfile)
|
||||
set(SNDFILE_INC ${SNDFILE}/include)
|
||||
set(SNDFILE_LIB sndfile FLAC ogg vorbis vorbisenc)
|
||||
set(SNDFILE_LIBPATH ${SNDFILE}/lib ${FFMPEG}/lib)
|
||||
set(SNDFILE_INCLUDE_DIRS ${SNDFILE}/include)
|
||||
set(SNDFILE_LIBRARIES sndfile FLAC ogg vorbis vorbisenc)
|
||||
set(SNDFILE_LIBPATH ${SNDFILE}/lib ${FFMPEG}/lib) # TODO, deprecate
|
||||
endif()
|
||||
|
||||
set(PYTHON_VERSION 3.2)
|
||||
@ -849,7 +853,7 @@ elseif(APPLE)
|
||||
set(PYTHON ${LIBDIR}/python)
|
||||
set(PYTHON_INCLUDE_DIRS "${PYTHON}/include/python${PYTHON_VERSION}")
|
||||
# set(PYTHON_BINARY "${PYTHON}/bin/python${PYTHON_VERSION}") # not used yet
|
||||
set(PYTHON_LIBRARY python${PYTHON_VERSION})
|
||||
set(PYTHON_LIBRARIES python${PYTHON_VERSION})
|
||||
set(PYTHON_LIBPATH "${PYTHON}/lib/python${PYTHON_VERSION}")
|
||||
# set(PYTHON_LINKFLAGS "-u _PyMac_Error") # won't build with this enabled
|
||||
else()
|
||||
@ -859,7 +863,7 @@ elseif(APPLE)
|
||||
set(PYTHON_VERSION 3.2)
|
||||
set(PYTHON_INCLUDE_DIRS "${PYTHON}${PYTHON_VERSION}/include/python${PYTHON_VERSION}")
|
||||
# set(PYTHON_BINARY ${PYTHON}${PYTHON_VERSION}/bin/python${PYTHON_VERSION}) # not used yet
|
||||
set(PYTHON_LIBRARY "")
|
||||
set(PYTHON_LIBRARIES "")
|
||||
set(PYTHON_LIBPATH ${PYTHON}${PYTHON_VERSION}/lib/python${PYTHON_VERSION}/config)
|
||||
set(PYTHON_LINKFLAGS "-u _PyMac_Error -framework System -framework Python")
|
||||
endif()
|
||||
@ -873,8 +877,8 @@ elseif(APPLE)
|
||||
|
||||
if(WITH_FFTW3)
|
||||
set(FFTW3 ${LIBDIR}/fftw3)
|
||||
set(FFTW3_INC ${FFTW3}/include)
|
||||
set(FFTW3_LIB fftw3)
|
||||
set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
|
||||
set(FFTW3_LIBRARIES fftw3)
|
||||
set(FFTW3_LIBPATH ${FFTW3}/lib)
|
||||
endif()
|
||||
|
||||
@ -892,24 +896,24 @@ elseif(APPLE)
|
||||
|
||||
if(WITH_IMAGE_OPENEXR)
|
||||
set(OPENEXR ${LIBDIR}/openexr)
|
||||
set(OPENEXR_INC ${OPENEXR}/include/OpenEXR ${OPENEXR}/include)
|
||||
set(OPENEXR_LIB Iex Half IlmImf Imath IlmThread)
|
||||
set(OPENEXR_INCLUDE_DIRS ${OPENEXR}/include/OpenEXR)
|
||||
set(OPENEXR_LIBRARIES Iex Half IlmImf Imath IlmThread)
|
||||
set(OPENEXR_LIBPATH ${OPENEXR}/lib)
|
||||
endif()
|
||||
|
||||
if(WITH_CODEC_FFMPEG)
|
||||
set(FFMPEG ${LIBDIR}/ffmpeg)
|
||||
set(FFMPEG_INC ${FFMPEG}/include)
|
||||
set(FFMPEG_LIB avcodec avdevice avformat avutil mp3lame swscale x264 xvidcore theora theoradec theoraenc vorbis vorbisenc vorbisfile ogg)
|
||||
set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
|
||||
set(FFMPEG_LIBRARIES avcodec avdevice avformat avutil mp3lame swscale x264 xvidcore theora theoradec theoraenc vorbis vorbisenc vorbisfile ogg)
|
||||
set(FFMPEG_LIBPATH ${FFMPEG}/lib)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__STDC_CONSTANT_MACROS")
|
||||
endif()
|
||||
|
||||
if(WITH_SAMPLERATE)
|
||||
set(LIBSAMPLERATE ${LIBDIR}/samplerate)
|
||||
set(LIBSAMPLERATE_INC ${LIBSAMPLERATE}/include)
|
||||
set(LIBSAMPLERATE_LIB samplerate)
|
||||
set(LIBSAMPLERATE_LIBPATH ${LIBSAMPLERATE}/lib)
|
||||
set(SAMPLERATE ${LIBDIR}/samplerate)
|
||||
set(SAMPLERATE_INCLUDE_DIRS ${SAMPLERATE}/include)
|
||||
set(SAMPLERATE_LIBRARIES samplerate)
|
||||
set(SAMPLERATE_LIBPATH ${SAMPLERATE}/lib)
|
||||
endif()
|
||||
|
||||
set(LLIBS stdc++ SystemStubs)
|
||||
@ -934,9 +938,9 @@ elseif(APPLE)
|
||||
|
||||
if(WITH_OPENCOLLADA)
|
||||
set(OPENCOLLADA ${LIBDIR}/opencollada)
|
||||
set(OPENCOLLADA_INC ${OPENCOLLADA}/include)
|
||||
set(OPENCOLLADA_INCLUDE_DIR ${OPENCOLLADA}/include)
|
||||
set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib)
|
||||
set(OPENCOLLADA_LIB "OpenCOLLADASaxFrameworkLoader -lOpenCOLLADAFramework -lOpenCOLLADABaseUtils -lOpenCOLLADAStreamWriter -lMathMLSolver -lGeneratedSaxParser -lUTF -lxml2 -lbuffer -lftoa" )
|
||||
set(OPENCOLLADA_LIBRARIES "OpenCOLLADASaxFrameworkLoader -lOpenCOLLADAFramework -lOpenCOLLADABaseUtils -lOpenCOLLADAStreamWriter -lMathMLSolver -lGeneratedSaxParser -lUTF -lxml2 -lbuffer -lftoa" )
|
||||
#pcre is bundled with openCollada
|
||||
#set(PCRE ${LIBDIR}/pcre)
|
||||
#set(PCRE_LIBPATH ${PCRE}/lib)
|
||||
@ -1012,13 +1016,9 @@ endif()
|
||||
|
||||
if(WITH_IMAGE_OPENJPEG)
|
||||
if(UNIX AND NOT APPLE)
|
||||
set(OPENJPEG /usr)
|
||||
set(OPENJPEG_INC ${OPENJPEG}/include)
|
||||
set(OPENJPEG_LIB openjpeg)
|
||||
set(OPENJPEG_LIBPATH ${OPENJPEG}/lib)
|
||||
# dealt with above
|
||||
else()
|
||||
set(OPENJPEG ${CMAKE_SOURCE_DIR}/extern/libopenjpeg)
|
||||
set(OPENJPEG_INC ${OPENJPEG})
|
||||
set(OPENJPEG_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/extern/libopenjpeg")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@ -1188,3 +1188,83 @@ endif()
|
||||
#-----------------------------------------------------------------------------
|
||||
# CPack for generating packages
|
||||
include(build_files/cmake/packaging.cmake)
|
||||
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Print Final Configuration
|
||||
|
||||
if(FIRST_RUN)
|
||||
set(_config_msg "\n* Blender Configuration *")
|
||||
macro(info_cfg_option
|
||||
_setting)
|
||||
set(_msg " * ${_setting}")
|
||||
string(LENGTH "${_msg}" _len)
|
||||
while("28" GREATER "${_len}")
|
||||
set(_msg "${_msg} ")
|
||||
math(EXPR _len "${_len} + 1")
|
||||
endwhile()
|
||||
|
||||
set(_config_msg "${_config_msg}\n${_msg}${${_setting}}")
|
||||
endmacro()
|
||||
|
||||
macro(info_cfg_text
|
||||
_text)
|
||||
set(_config_msg "${_config_msg}\n\n ${_text}")
|
||||
|
||||
|
||||
endmacro()
|
||||
|
||||
info_cfg_text("Build Options:")
|
||||
info_cfg_option(WITH_GAMEENGINE)
|
||||
info_cfg_option(WITH_PLAYER)
|
||||
info_cfg_option(WITH_BULLET)
|
||||
info_cfg_option(WITH_IK_ITASC)
|
||||
info_cfg_option(WITH_OPENCOLLADA)
|
||||
info_cfg_option(WITH_FFTW3)
|
||||
info_cfg_option(WITH_INTERNATIONAL)
|
||||
|
||||
info_cfg_text("Compiler Options:")
|
||||
info_cfg_option(WITH_BUILDINFO)
|
||||
info_cfg_option(WITH_OPENMP)
|
||||
info_cfg_option(WITH_RAYOPTIMIZATION)
|
||||
|
||||
info_cfg_text("System Options:")
|
||||
info_cfg_option(WITH_INSTALL_PORTABLE)
|
||||
info_cfg_option(WITH_X11_XINPUT)
|
||||
info_cfg_option(WITH_BUILTIN_GLEW)
|
||||
|
||||
info_cfg_text("Image Formats:")
|
||||
info_cfg_option(WITH_IMAGE_CINEON)
|
||||
info_cfg_option(WITH_IMAGE_DDS)
|
||||
info_cfg_option(WITH_IMAGE_HDR)
|
||||
info_cfg_option(WITH_IMAGE_OPENEXR)
|
||||
info_cfg_option(WITH_IMAGE_OPENJPEG)
|
||||
info_cfg_option(WITH_IMAGE_REDCODE)
|
||||
info_cfg_option(WITH_IMAGE_TIFF)
|
||||
|
||||
info_cfg_text("Audio:")
|
||||
info_cfg_option(WITH_OPENAL)
|
||||
info_cfg_option(WITH_SDL)
|
||||
info_cfg_option(WITH_JACK)
|
||||
info_cfg_option(WITH_CODEC_FFMPEG)
|
||||
info_cfg_option(WITH_CODEC_SNDFILE)
|
||||
info_cfg_option(WITH_SAMPLERATE)
|
||||
|
||||
info_cfg_text("Compression:")
|
||||
info_cfg_option(WITH_LZMA)
|
||||
info_cfg_option(WITH_LZO)
|
||||
|
||||
info_cfg_text("Python:")
|
||||
info_cfg_option(WITH_PYTHON_INSTALL)
|
||||
info_cfg_option(WITH_PYTHON_MODULE)
|
||||
info_cfg_option(WITH_PYTHON_SAFETY)
|
||||
|
||||
info_cfg_text("Modifiers:")
|
||||
info_cfg_option(WITH_MOD_BOOLEAN)
|
||||
info_cfg_option(WITH_MOD_DECIMATE)
|
||||
info_cfg_option(WITH_MOD_FLUID)
|
||||
|
||||
info_cfg_text("")
|
||||
|
||||
message("${_config_msg}")
|
||||
endif()
|
||||
|
@ -1,89 +0,0 @@
|
||||
# - Find python libraries
|
||||
#
|
||||
# PYTHON_VERSION
|
||||
# PYTHON_INCLUDE_DIRS
|
||||
# PYTHON_LIBRARY
|
||||
# PYTHON_LIBPATH
|
||||
# PYTHON_LINKFLAGS
|
||||
|
||||
#=============================================================================
|
||||
|
||||
set(PYTHON_VERSION 3.2 CACHE STRING "")
|
||||
mark_as_advanced(PYTHON_VERSION)
|
||||
|
||||
set(PYTHON_LINKFLAGS "-Xlinker -export-dynamic")
|
||||
mark_as_advanced(PYTHON_LINKFLAGS)
|
||||
|
||||
set(_Python_ABI_FLAGS
|
||||
"m;mu;u; ")
|
||||
|
||||
string(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
|
||||
|
||||
set(_Python_PATHS
|
||||
"$ENV{HOME}/py${_PYTHON_VERSION_NO_DOTS}"
|
||||
"/opt/py${_PYTHON_VERSION_NO_DOTS}"
|
||||
"/usr"
|
||||
"/usr/local"
|
||||
)
|
||||
|
||||
if(NOT DEFINED PYTHON_INCLUDE_DIRS OR
|
||||
NOT DEFINED PYTHON_LIBRARY OR
|
||||
NOT DEFINED PYTHON_LIBPATH)
|
||||
|
||||
message(STATUS "Looking for include Python.h")
|
||||
set(_Found_PYTHON_H OFF)
|
||||
|
||||
foreach(_CURRENT_PATH ${_Python_PATHS})
|
||||
foreach(_CURRENT_ABI_FLAGS ${_Python_ABI_FLAGS})
|
||||
if(CMAKE_BUILD_TYPE STREQUAL Debug)
|
||||
set(_CURRENT_ABI_FLAGS "d${_CURRENT_ABI_FLAGS}")
|
||||
endif()
|
||||
string(REPLACE " " "" _CURRENT_ABI_FLAGS ${_CURRENT_ABI_FLAGS})
|
||||
|
||||
set(_Python_HEADER "${_CURRENT_PATH}/include/python${PYTHON_VERSION}${_CURRENT_ABI_FLAGS}/Python.h")
|
||||
|
||||
if(EXISTS ${_Python_HEADER})
|
||||
message(STATUS "Checking for header: ${_Python_HEADER} - found")
|
||||
set(_Found_PYTHON_H ON)
|
||||
set(PYTHON ${_CURRENT_PATH})
|
||||
set(PYTHON_ABI_FLAGS ${_CURRENT_ABI_FLAGS})
|
||||
break()
|
||||
else()
|
||||
message(STATUS "Checking for header: ${_Python_HEADER}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(_Found_PYTHON_H)
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(NOT _Found_PYTHON_H)
|
||||
message(FATAL_ERROR "Python.h not found")
|
||||
endif()
|
||||
|
||||
unset(_Found_PYTHON_H)
|
||||
unset(_Python_HEADER)
|
||||
unset(_CURRENT_ABI_FLAGS)
|
||||
unset(_CURRENT_PATH)
|
||||
|
||||
|
||||
set(PYTHON_INCLUDE_DIRS "${PYTHON}/include/python${PYTHON_VERSION}${PYTHON_ABI_FLAGS}" CACHE STRING "")
|
||||
mark_as_advanced(PYTHON_INCLUDE_DIRS)
|
||||
set(PYTHON_LIBRARY "python${PYTHON_VERSION}${PYTHON_ABI_FLAGS}" CACHE STRING "")
|
||||
mark_as_advanced(PYTHON_LIBRARY)
|
||||
set(PYTHON_LIBPATH ${PYTHON}/lib CACHE STRING "")
|
||||
mark_as_advanced(PYTHON_LIBPATH)
|
||||
# set(PYTHON_BINARY ${PYTHON_EXECUTABLE} CACHE STRING "")
|
||||
endif()
|
||||
|
||||
unset(_Python_ABI_FLAGS)
|
||||
unset(_Python_PATHS)
|
||||
|
||||
#=============================================================================
|
||||
# now the python versions are found
|
||||
|
||||
|
||||
if(NOT EXISTS "${PYTHON_INCLUDE_DIRS}/Python.h")
|
||||
message(FATAL_ERROR " Missing python header: ${PYTHON_INCLUDE_DIRS}/Python.h")
|
||||
endif()
|
70
build_files/cmake/Modules/FindFftw3.cmake
Normal file
70
build_files/cmake/Modules/FindFftw3.cmake
Normal file
@ -0,0 +1,70 @@
|
||||
# - Find Fftw3 library
|
||||
# Find the native Fftw3 includes and library
|
||||
# This module defines
|
||||
# FFTW3_INCLUDE_DIRS, where to find fftw3.h, Set when
|
||||
# FFTW3_INCLUDE_DIR is found.
|
||||
# FFTW3_LIBRARIES, libraries to link against to use Fftw3.
|
||||
# FFTW3_ROOT_DIR, The base directory to search for Fftw3.
|
||||
# This can also be an environment variable.
|
||||
# FFTW3_FOUND, If false, do not try to use Fftw3.
|
||||
#
|
||||
# also defined, but not for general use are
|
||||
# FFTW3_LIBRARY, where to find the Fftw3 library.
|
||||
|
||||
#=============================================================================
|
||||
# Copyright 2011 Blender Foundation.
|
||||
#
|
||||
# Distributed under the OSI-approved BSD License (the "License");
|
||||
# see accompanying file Copyright.txt for details.
|
||||
#
|
||||
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
# See the License for more information.
|
||||
#=============================================================================
|
||||
|
||||
# If FFTW3_ROOT_DIR was defined in the environment, use it.
|
||||
IF(NOT FFTW3_ROOT_DIR AND NOT $ENV{FFTW3_ROOT_DIR} STREQUAL "")
|
||||
SET(FFTW3_ROOT_DIR $ENV{FFTW3_ROOT_DIR})
|
||||
ENDIF()
|
||||
|
||||
SET(_fftw3_SEARCH_DIRS
|
||||
${FFTW3_ROOT_DIR}
|
||||
/usr/local
|
||||
/sw # Fink
|
||||
/opt/local # DarwinPorts
|
||||
/opt/csw # Blastwave
|
||||
)
|
||||
|
||||
FIND_PATH(FFTW3_INCLUDE_DIR
|
||||
NAMES
|
||||
fftw3.h
|
||||
HINTS
|
||||
${_fftw3_SEARCH_DIRS}
|
||||
PATH_SUFFIXES
|
||||
include
|
||||
)
|
||||
|
||||
FIND_LIBRARY(FFTW3_LIBRARY
|
||||
NAMES
|
||||
fftw3
|
||||
HINTS
|
||||
${_fftw3_SEARCH_DIRS}
|
||||
PATH_SUFFIXES
|
||||
lib64 lib
|
||||
)
|
||||
|
||||
# handle the QUIETLY and REQUIRED arguments and set FFTW3_FOUND to TRUE if
|
||||
# all listed variables are TRUE
|
||||
INCLUDE(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Fftw3 DEFAULT_MSG
|
||||
FFTW3_LIBRARY FFTW3_INCLUDE_DIR)
|
||||
|
||||
IF(FFTW3_FOUND)
|
||||
SET(FFTW3_LIBRARIES ${FFTW3_LIBRARY})
|
||||
SET(FFTW3_INCLUDE_DIRS ${FFTW3_INCLUDE_DIR})
|
||||
ENDIF(FFTW3_FOUND)
|
||||
|
||||
MARK_AS_ADVANCED(
|
||||
FFTW3_INCLUDE_DIR
|
||||
FFTW3_LIBRARY
|
||||
)
|
70
build_files/cmake/Modules/FindJack.cmake
Normal file
70
build_files/cmake/Modules/FindJack.cmake
Normal file
@ -0,0 +1,70 @@
|
||||
# - Find Jack library
|
||||
# Find the native Jack includes and library
|
||||
# This module defines
|
||||
# JACK_INCLUDE_DIRS, where to find jack.h, Set when
|
||||
# JACK_INCLUDE_DIR is found.
|
||||
# JACK_LIBRARIES, libraries to link against to use Jack.
|
||||
# JACK_ROOT_DIR, The base directory to search for Jack.
|
||||
# This can also be an environment variable.
|
||||
# JACK_FOUND, If false, do not try to use Jack.
|
||||
#
|
||||
# also defined, but not for general use are
|
||||
# JACK_LIBRARY, where to find the Jack library.
|
||||
|
||||
#=============================================================================
|
||||
# Copyright 2011 Blender Foundation.
|
||||
#
|
||||
# Distributed under the OSI-approved BSD License (the "License");
|
||||
# see accompanying file Copyright.txt for details.
|
||||
#
|
||||
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
# See the License for more information.
|
||||
#=============================================================================
|
||||
|
||||
# If JACK_ROOT_DIR was defined in the environment, use it.
|
||||
IF(NOT JACK_ROOT_DIR AND NOT $ENV{JACK_ROOT_DIR} STREQUAL "")
|
||||
SET(JACK_ROOT_DIR $ENV{JACK_ROOT_DIR})
|
||||
ENDIF()
|
||||
|
||||
SET(_jack_SEARCH_DIRS
|
||||
${JACK_ROOT_DIR}
|
||||
/usr/local
|
||||
/sw # Fink
|
||||
/opt/local # DarwinPorts
|
||||
/opt/csw # Blastwave
|
||||
)
|
||||
|
||||
FIND_PATH(JACK_INCLUDE_DIR
|
||||
NAMES
|
||||
jack.h
|
||||
HINTS
|
||||
${_jack_SEARCH_DIRS}
|
||||
PATH_SUFFIXES
|
||||
include/jack
|
||||
)
|
||||
|
||||
FIND_LIBRARY(JACK_LIBRARY
|
||||
NAMES
|
||||
jack
|
||||
HINTS
|
||||
${_jack_SEARCH_DIRS}
|
||||
PATH_SUFFIXES
|
||||
lib64 lib
|
||||
)
|
||||
|
||||
# handle the QUIETLY and REQUIRED arguments and set JACK_FOUND to TRUE if
|
||||
# all listed variables are TRUE
|
||||
INCLUDE(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Jack DEFAULT_MSG
|
||||
JACK_LIBRARY JACK_INCLUDE_DIR)
|
||||
|
||||
IF(JACK_FOUND)
|
||||
SET(JACK_LIBRARIES ${JACK_LIBRARY})
|
||||
SET(JACK_INCLUDE_DIRS ${JACK_INCLUDE_DIR})
|
||||
ENDIF(JACK_FOUND)
|
||||
|
||||
MARK_AS_ADVANCED(
|
||||
JACK_INCLUDE_DIR
|
||||
JACK_LIBRARY
|
||||
)
|
70
build_files/cmake/Modules/FindJeMalloc.cmake
Normal file
70
build_files/cmake/Modules/FindJeMalloc.cmake
Normal file
@ -0,0 +1,70 @@
|
||||
# - Find JeMalloc library
|
||||
# Find the native JeMalloc includes and library
|
||||
# This module defines
|
||||
# JEMALLOC_INCLUDE_DIRS, where to find jemalloc.h, Set when
|
||||
# JEMALLOC_INCLUDE_DIR is found.
|
||||
# JEMALLOC_LIBRARIES, libraries to link against to use JeMalloc.
|
||||
# JEMALLOC_ROOT_DIR, The base directory to search for JeMalloc.
|
||||
# This can also be an environment variable.
|
||||
# JEMALLOC_FOUND, If false, do not try to use JeMalloc.
|
||||
#
|
||||
# also defined, but not for general use are
|
||||
# JEMALLOC_LIBRARY, where to find the JeMalloc library.
|
||||
|
||||
#=============================================================================
|
||||
# Copyright 2011 Blender Foundation.
|
||||
#
|
||||
# Distributed under the OSI-approved BSD License (the "License");
|
||||
# see accompanying file Copyright.txt for details.
|
||||
#
|
||||
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
# See the License for more information.
|
||||
#=============================================================================
|
||||
|
||||
# If JEMALLOC_ROOT_DIR was defined in the environment, use it.
|
||||
IF(NOT JEMALLOC_ROOT_DIR AND NOT $ENV{JEMALLOC_ROOT_DIR} STREQUAL "")
|
||||
SET(JEMALLOC_ROOT_DIR $ENV{JEMALLOC_ROOT_DIR})
|
||||
ENDIF()
|
||||
|
||||
SET(_jemalloc_SEARCH_DIRS
|
||||
${JEMALLOC_ROOT_DIR}
|
||||
/usr/local
|
||||
/sw # Fink
|
||||
/opt/local # DarwinPorts
|
||||
/opt/csw # Blastwave
|
||||
)
|
||||
|
||||
FIND_PATH(JEMALLOC_INCLUDE_DIR
|
||||
NAMES
|
||||
jemalloc.h
|
||||
HINTS
|
||||
${_jemalloc_SEARCH_DIRS}
|
||||
PATH_SUFFIXES
|
||||
include/jemalloc
|
||||
)
|
||||
|
||||
FIND_LIBRARY(JEMALLOC_LIBRARY
|
||||
NAMES
|
||||
jemalloc
|
||||
HINTS
|
||||
${_jemalloc_SEARCH_DIRS}
|
||||
PATH_SUFFIXES
|
||||
lib64 lib
|
||||
)
|
||||
|
||||
# handle the QUIETLY and REQUIRED arguments and set JEMALLOC_FOUND to TRUE if
|
||||
# all listed variables are TRUE
|
||||
INCLUDE(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(JeMalloc DEFAULT_MSG
|
||||
JEMALLOC_LIBRARY JEMALLOC_INCLUDE_DIR)
|
||||
|
||||
IF(JEMALLOC_FOUND)
|
||||
SET(JEMALLOC_LIBRARIES ${JEMALLOC_LIBRARY})
|
||||
SET(JEMALLOC_INCLUDE_DIRS ${JEMALLOC_INCLUDE_DIR})
|
||||
ENDIF(JEMALLOC_FOUND)
|
||||
|
||||
MARK_AS_ADVANCED(
|
||||
JEMALLOC_INCLUDE_DIR
|
||||
JEMALLOC_LIBRARY
|
||||
)
|
92
build_files/cmake/Modules/FindOpenEXR.cmake
Normal file
92
build_files/cmake/Modules/FindOpenEXR.cmake
Normal file
@ -0,0 +1,92 @@
|
||||
# - Find OpenEXR library
|
||||
# Find the native OpenEXR includes and library
|
||||
# This module defines
|
||||
# OPENEXR_INCLUDE_DIRS, where to find ImfXdr.h, etc. Set when
|
||||
# OPENEXR_INCLUDE_DIR is found.
|
||||
# OPENEXR_LIBRARIES, libraries to link against to use OpenEXR.
|
||||
# OPENEXR_ROOT_DIR, The base directory to search for OpenEXR.
|
||||
# This can also be an environment variable.
|
||||
# OPENEXR_FOUND, If false, do not try to use OpenEXR.
|
||||
#
|
||||
# For indervidual library access these advanced settings are available
|
||||
# OPENEXR_HALF_LIBRARY, Path to Half library
|
||||
# OPENEXR_IEX_LIBRARY, Path to Half library
|
||||
# OPENEXR_ILMIMF_LIBRARY, Path to Ilmimf library
|
||||
# OPENEXR_ILMTHREAD_LIBRARY, Path to IlmThread library
|
||||
# OPENEXR_IMATH_LIBRARY, Path to Imath library
|
||||
#
|
||||
# also defined, but not for general use are
|
||||
# OPENEXR_LIBRARY, where to find the OpenEXR library.
|
||||
|
||||
#=============================================================================
|
||||
# Copyright 2011 Blender Foundation.
|
||||
#
|
||||
# Distributed under the OSI-approved BSD License (the "License");
|
||||
# see accompanying file Copyright.txt for details.
|
||||
#
|
||||
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
# See the License for more information.
|
||||
#=============================================================================
|
||||
|
||||
# If OPENEXR_ROOT_DIR was defined in the environment, use it.
|
||||
IF(NOT OPENEXR_ROOT_DIR AND NOT $ENV{OPENEXR_ROOT_DIR} STREQUAL "")
|
||||
SET(OPENEXR_ROOT_DIR $ENV{OPENEXR_ROOT_DIR})
|
||||
ENDIF()
|
||||
|
||||
SET(_openexr_FIND_COMPONENTS
|
||||
Half
|
||||
Iex
|
||||
IlmImf
|
||||
IlmThread
|
||||
Imath
|
||||
)
|
||||
|
||||
SET(_openexr_SEARCH_DIRS
|
||||
${OPENEXR_ROOT_DIR}
|
||||
/usr/local
|
||||
/sw # Fink
|
||||
/opt/local # DarwinPorts
|
||||
/opt/csw # Blastwave
|
||||
)
|
||||
|
||||
FIND_PATH(OPENEXR_INCLUDE_DIR
|
||||
NAMES
|
||||
ImfXdr.h
|
||||
HINTS
|
||||
${_openexr_SEARCH_DIRS}
|
||||
PATH_SUFFIXES
|
||||
include/OpenEXR
|
||||
)
|
||||
|
||||
SET(_openexr_LIBRARIES)
|
||||
FOREACH(COMPONENT ${_openexr_FIND_COMPONENTS})
|
||||
STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT)
|
||||
|
||||
FIND_LIBRARY(OPENEXR_${UPPERCOMPONENT}_LIBRARY
|
||||
NAMES
|
||||
${COMPONENT}
|
||||
HINTS
|
||||
${_openexr_SEARCH_DIRS}
|
||||
PATH_SUFFIXES
|
||||
lib64 lib
|
||||
)
|
||||
LIST(APPEND _openexr_LIBRARIES "${OPENEXR_${UPPERCOMPONENT}_LIBRARY}")
|
||||
ENDFOREACH()
|
||||
|
||||
# handle the QUIETLY and REQUIRED arguments and set OPENEXR_FOUND to TRUE if
|
||||
# all listed variables are TRUE
|
||||
INCLUDE(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenEXR DEFAULT_MSG
|
||||
_openexr_LIBRARIES OPENEXR_INCLUDE_DIR)
|
||||
|
||||
IF(OPENEXR_FOUND)
|
||||
SET(OPENEXR_LIBRARIES ${_openexr_LIBRARIES})
|
||||
SET(OPENEXR_INCLUDE_DIRS ${OPENEXR_INCLUDE_DIR})
|
||||
ENDIF()
|
||||
|
||||
MARK_AS_ADVANCED(OPENEXR_INCLUDE_DIR)
|
||||
FOREACH(COMPONENT ${_openexr_FIND_COMPONENTS})
|
||||
STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT)
|
||||
MARK_AS_ADVANCED(OPENEXR_${UPPERCOMPONENT}_LIBRARY)
|
||||
ENDFOREACH()
|
70
build_files/cmake/Modules/FindOpenJPEG.cmake
Normal file
70
build_files/cmake/Modules/FindOpenJPEG.cmake
Normal file
@ -0,0 +1,70 @@
|
||||
# - Find OpenJPEG library
|
||||
# Find the native OpenJPEG includes and library
|
||||
# This module defines
|
||||
# OPENJPEG_INCLUDE_DIRS, where to find openjpeg.h, Set when
|
||||
# OPENJPEG_INCLUDE_DIR is found.
|
||||
# OPENJPEG_LIBRARIES, libraries to link against to use OpenJPEG.
|
||||
# OPENJPEG_ROOT_DIR, The base directory to search for OpenJPEG.
|
||||
# This can also be an environment variable.
|
||||
# OPENJPEG_FOUND, If false, do not try to use OpenJPEG.
|
||||
#
|
||||
# also defined, but not for general use are
|
||||
# OPENJPEG_LIBRARY, where to find the OpenJPEG library.
|
||||
|
||||
#=============================================================================
|
||||
# Copyright 2011 Blender Foundation.
|
||||
#
|
||||
# Distributed under the OSI-approved BSD License (the "License");
|
||||
# see accompanying file Copyright.txt for details.
|
||||
#
|
||||
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
# See the License for more information.
|
||||
#=============================================================================
|
||||
|
||||
# If OPENJPEG_ROOT_DIR was defined in the environment, use it.
|
||||
IF(NOT OPENJPEG_ROOT_DIR AND NOT $ENV{OPENJPEG_ROOT_DIR} STREQUAL "")
|
||||
SET(OPENJPEG_ROOT_DIR $ENV{OPENJPEG_ROOT_DIR})
|
||||
ENDIF()
|
||||
|
||||
SET(_openjpeg_SEARCH_DIRS
|
||||
${OPENJPEG_ROOT_DIR}
|
||||
/usr/local
|
||||
/sw # Fink
|
||||
/opt/local # DarwinPorts
|
||||
/opt/csw # Blastwave
|
||||
)
|
||||
|
||||
FIND_PATH(OPENJPEG_INCLUDE_DIR
|
||||
NAMES
|
||||
openjpeg.h
|
||||
HINTS
|
||||
${_openjpeg_SEARCH_DIRS}
|
||||
PATH_SUFFIXES
|
||||
include
|
||||
)
|
||||
|
||||
FIND_LIBRARY(OPENJPEG_LIBRARY
|
||||
NAMES
|
||||
openjpeg
|
||||
HINTS
|
||||
${_openjpeg_SEARCH_DIRS}
|
||||
PATH_SUFFIXES
|
||||
lib64 lib
|
||||
)
|
||||
|
||||
# handle the QUIETLY and REQUIRED arguments and set OPENJPEG_FOUND to TRUE if
|
||||
# all listed variables are TRUE
|
||||
INCLUDE(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenJPEG DEFAULT_MSG
|
||||
OPENJPEG_LIBRARY OPENJPEG_INCLUDE_DIR)
|
||||
|
||||
IF(OPENJPEG_FOUND)
|
||||
SET(OPENJPEG_LIBRARIES ${OPENJPEG_LIBRARY})
|
||||
SET(OPENJPEG_INCLUDE_DIRS ${OPENJPEG_INCLUDE_DIR})
|
||||
ENDIF(OPENJPEG_FOUND)
|
||||
|
||||
MARK_AS_ADVANCED(
|
||||
OPENJPEG_INCLUDE_DIR
|
||||
OPENJPEG_LIBRARY
|
||||
)
|
121
build_files/cmake/Modules/FindPythonLibsUnix.cmake
Normal file
121
build_files/cmake/Modules/FindPythonLibsUnix.cmake
Normal file
@ -0,0 +1,121 @@
|
||||
# - Find Python libraries
|
||||
# Find the native Python includes and library
|
||||
#
|
||||
# Note:, This is not _yet_ intended to be a general python module for other
|
||||
# projects to use since its hard coded to python 3.2 as blender only supports
|
||||
# a single python version.
|
||||
# This is for blender/unix python only.
|
||||
#
|
||||
# This module defines
|
||||
# PYTHON_VERSION
|
||||
# PYTHON_INCLUDE_DIRS
|
||||
# PYTHON_LIBRARIES
|
||||
# PYTHON_LIBPATH, Used for installation
|
||||
# PYTHON_LINKFLAGS
|
||||
# PYTHON_ROOT_DIR, The base directory to search for Python.
|
||||
# This can also be an environment variable.
|
||||
#
|
||||
# also defined, but not for general use are
|
||||
# PYTHON_LIBRARY, where to find the python library.
|
||||
|
||||
#=============================================================================
|
||||
# Copyright 2011 Blender Foundation.
|
||||
#
|
||||
# Distributed under the OSI-approved BSD License (the "License");
|
||||
# see accompanying file Copyright.txt for details.
|
||||
#
|
||||
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
# See the License for more information.
|
||||
#=============================================================================
|
||||
|
||||
# If PYTHON_ROOT_DIR was defined in the environment, use it.
|
||||
IF(NOT PYTHON_ROOT_DIR AND NOT $ENV{PYTHON_ROOT_DIR} STREQUAL "")
|
||||
SET(PYTHON_ROOT_DIR $ENV{PYTHON_ROOT_DIR})
|
||||
ENDIF()
|
||||
|
||||
IF(DEFINED PYTHON_VERSION)
|
||||
SET(PYTHON_VERSION "${PYTHON_VERSION}" CACHE STRING "")
|
||||
ELSE()
|
||||
SET(PYTHON_VERSION 3.2 CACHE STRING "")
|
||||
ENDIF()
|
||||
MARK_AS_ADVANCED(PYTHON_VERSION)
|
||||
|
||||
SET(PYTHON_LINKFLAGS "-Xlinker -export-dynamic")
|
||||
MARK_AS_ADVANCED(PYTHON_LINKFLAGS)
|
||||
|
||||
SET(_python_ABI_FLAGS
|
||||
"m;mu;u; " # release
|
||||
"md;mud;ud;d" # debug
|
||||
)
|
||||
|
||||
STRING(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
|
||||
|
||||
SET(_python_SEARCH_DIRS
|
||||
${PYTHON_ROOT_DIR}
|
||||
"$ENV{HOME}/py${_PYTHON_VERSION_NO_DOTS}"
|
||||
"/opt/py${_PYTHON_VERSION_NO_DOTS}"
|
||||
)
|
||||
|
||||
FOREACH(_CURRENT_ABI_FLAGS ${_python_ABI_FLAGS})
|
||||
#IF(CMAKE_BUILD_TYPE STREQUAL Debug)
|
||||
# SET(_CURRENT_ABI_FLAGS "d${_CURRENT_ABI_FLAGS}")
|
||||
#ENDIF()
|
||||
STRING(REPLACE " " "" _CURRENT_ABI_FLAGS ${_CURRENT_ABI_FLAGS})
|
||||
|
||||
FIND_PATH(PYTHON_INCLUDE_DIR
|
||||
NAMES
|
||||
Python.h
|
||||
HINTS
|
||||
${_python_SEARCH_DIRS}
|
||||
PATH_SUFFIXES
|
||||
include/python${PYTHON_VERSION}${_CURRENT_ABI_FLAGS}
|
||||
)
|
||||
|
||||
FIND_LIBRARY(PYTHON_LIBRARY
|
||||
NAMES
|
||||
"python${PYTHON_VERSION}${_CURRENT_ABI_FLAGS}"
|
||||
HINTS
|
||||
${_python_SEARCH_DIRS}
|
||||
PATH_SUFFIXES
|
||||
lib64 lib
|
||||
)
|
||||
|
||||
IF(PYTHON_LIBRARY AND PYTHON_INCLUDE_DIR)
|
||||
break()
|
||||
ELSE()
|
||||
# ensure we dont find values from 2 different ABI versions
|
||||
UNSET(PYTHON_INCLUDE_DIR CACHE)
|
||||
UNSET(PYTHON_LIBRARY CACHE)
|
||||
ENDIF()
|
||||
ENDFOREACH()
|
||||
|
||||
UNSET(_CURRENT_ABI_FLAGS)
|
||||
UNSET(_CURRENT_PATH)
|
||||
|
||||
UNSET(_python_ABI_FLAGS)
|
||||
UNSET(_python_SEARCH_DIRS)
|
||||
|
||||
# handle the QUIETLY and REQUIRED arguments and SET PYTHONLIBSUNIX_FOUND to TRUE IF
|
||||
# all listed variables are TRUE
|
||||
INCLUDE(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(PythonLibsUnix DEFAULT_MSG
|
||||
PYTHON_LIBRARY PYTHON_INCLUDE_DIR)
|
||||
|
||||
|
||||
IF(PYTHONLIBSUNIX_FOUND)
|
||||
# Assign cache items
|
||||
SET(PYTHON_INCLUDE_DIRS ${PYTHON_INCLUDE_DIR})
|
||||
SET(PYTHON_LIBRARIES ${PYTHON_LIBRARY})
|
||||
|
||||
# we need this for installation
|
||||
GET_FILENAME_COMPONENT(PYTHON_LIBPATH ${PYTHON_LIBRARY} PATH)
|
||||
|
||||
# not used
|
||||
# SET(PYTHON_BINARY ${PYTHON_EXECUTABLE} CACHE STRING "")
|
||||
|
||||
MARK_AS_ADVANCED(
|
||||
PYTHON_INCLUDE_DIR
|
||||
PYTHON_LIBRARY
|
||||
)
|
||||
ENDIF()
|
70
build_files/cmake/Modules/FindSamplerate.cmake
Normal file
70
build_files/cmake/Modules/FindSamplerate.cmake
Normal file
@ -0,0 +1,70 @@
|
||||
# - Find Samplerate library
|
||||
# Find the native Samplerate includes and library
|
||||
# This module defines
|
||||
# SAMPLERATE_INCLUDE_DIRS, where to find samplerate.h, Set when
|
||||
# SAMPLERATE_INCLUDE_DIR is found.
|
||||
# SAMPLERATE_LIBRARIES, libraries to link against to use Samplerate.
|
||||
# SAMPLERATE_ROOT_DIR, The base directory to search for Samplerate.
|
||||
# This can also be an environment variable.
|
||||
# SAMPLERATE_FOUND, If false, do not try to use Samplerate.
|
||||
#
|
||||
# also defined, but not for general use are
|
||||
# SAMPLERATE_LIBRARY, where to find the Samplerate library.
|
||||
|
||||
#=============================================================================
|
||||
# Copyright 2011 Blender Foundation.
|
||||
#
|
||||
# Distributed under the OSI-approved BSD License (the "License");
|
||||
# see accompanying file Copyright.txt for details.
|
||||
#
|
||||
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
# See the License for more information.
|
||||
#=============================================================================
|
||||
|
||||
# If SAMPLERATE_ROOT_DIR was defined in the environment, use it.
|
||||
IF(NOT SAMPLERATE_ROOT_DIR AND NOT $ENV{SAMPLERATE_ROOT_DIR} STREQUAL "")
|
||||
SET(SAMPLERATE_ROOT_DIR $ENV{SAMPLERATE_ROOT_DIR})
|
||||
ENDIF()
|
||||
|
||||
SET(_samplerate_SEARCH_DIRS
|
||||
${SAMPLERATE_ROOT_DIR}
|
||||
/usr/local
|
||||
/sw # Fink
|
||||
/opt/local # DarwinPorts
|
||||
/opt/csw # Blastwave
|
||||
)
|
||||
|
||||
FIND_PATH(SAMPLERATE_INCLUDE_DIR
|
||||
NAMES
|
||||
samplerate.h
|
||||
HINTS
|
||||
${_samplerate_SEARCH_DIRS}
|
||||
PATH_SUFFIXES
|
||||
include
|
||||
)
|
||||
|
||||
FIND_LIBRARY(SAMPLERATE_LIBRARY
|
||||
NAMES
|
||||
samplerate
|
||||
HINTS
|
||||
${_samplerate_SEARCH_DIRS}
|
||||
PATH_SUFFIXES
|
||||
lib64 lib
|
||||
)
|
||||
|
||||
# handle the QUIETLY and REQUIRED arguments and set SAMPLERATE_FOUND to TRUE if
|
||||
# all listed variables are TRUE
|
||||
INCLUDE(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Samplerate DEFAULT_MSG
|
||||
SAMPLERATE_LIBRARY SAMPLERATE_INCLUDE_DIR)
|
||||
|
||||
IF(SAMPLERATE_FOUND)
|
||||
SET(SAMPLERATE_LIBRARIES ${SAMPLERATE_LIBRARY})
|
||||
SET(SAMPLERATE_INCLUDE_DIRS ${SAMPLERATE_INCLUDE_DIR})
|
||||
ENDIF(SAMPLERATE_FOUND)
|
||||
|
||||
MARK_AS_ADVANCED(
|
||||
SAMPLERATE_INCLUDE_DIR
|
||||
SAMPLERATE_LIBRARY
|
||||
)
|
68
build_files/cmake/Modules/FindSndFile.cmake
Normal file
68
build_files/cmake/Modules/FindSndFile.cmake
Normal file
@ -0,0 +1,68 @@
|
||||
# - Find SndFile library
|
||||
# Find the native SndFile includes and library
|
||||
# This module defines
|
||||
# SNDFILE_INCLUDE_DIRS, where to find sndfile.h, Set when
|
||||
# SNDFILE_INCLUDE_DIR is found.
|
||||
# SNDFILE_LIBRARIES, libraries to link against to use SndFile.
|
||||
# SNDFILE_ROOT_DIR, The base directory to search for SndFile.
|
||||
# This can also be an environment variable.
|
||||
# SNDFILE_FOUND, If false, do not try to use SndFile.
|
||||
#
|
||||
# also defined, but not for general use are
|
||||
# SNDFILE_LIBRARY, where to find the SndFile library.
|
||||
|
||||
#=============================================================================
|
||||
# Copyright 2011 Blender Foundation.
|
||||
#
|
||||
# Distributed under the OSI-approved BSD License (the "License");
|
||||
# see accompanying file Copyright.txt for details.
|
||||
#
|
||||
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
# See the License for more information.
|
||||
#=============================================================================
|
||||
|
||||
# If SNDFILE_ROOT_DIR was defined in the environment, use it.
|
||||
IF(NOT SNDFILE_ROOT_DIR AND NOT $ENV{SNDFILE_ROOT_DIR} STREQUAL "")
|
||||
SET(SNDFILE_ROOT_DIR $ENV{SNDFILE_ROOT_DIR})
|
||||
ENDIF()
|
||||
|
||||
SET(_sndfile_SEARCH_DIRS
|
||||
${SNDFILE_ROOT_DIR}
|
||||
/usr/local
|
||||
/sw # Fink
|
||||
/opt/local # DarwinPorts
|
||||
/opt/csw # Blastwave
|
||||
)
|
||||
|
||||
FIND_PATH(SNDFILE_INCLUDE_DIR sndfile.h
|
||||
HINTS
|
||||
${_sndfile_SEARCH_DIRS}
|
||||
PATH_SUFFIXES
|
||||
include
|
||||
)
|
||||
|
||||
FIND_LIBRARY(SNDFILE_LIBRARY
|
||||
NAMES
|
||||
sndfile
|
||||
HINTS
|
||||
${_sndfile_SEARCH_DIRS}
|
||||
PATH_SUFFIXES
|
||||
lib64 lib
|
||||
)
|
||||
|
||||
# handle the QUIETLY and REQUIRED arguments and set SNDFILE_FOUND to TRUE if
|
||||
# all listed variables are TRUE
|
||||
INCLUDE(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(SndFile DEFAULT_MSG
|
||||
SNDFILE_LIBRARY SNDFILE_INCLUDE_DIR)
|
||||
|
||||
IF(SNDFILE_FOUND)
|
||||
SET(SNDFILE_LIBRARIES ${SNDFILE_LIBRARY})
|
||||
SET(SNDFILE_INCLUDE_DIRS ${SNDFILE_INCLUDE_DIR})
|
||||
ENDIF(SNDFILE_FOUND)
|
||||
|
||||
MARK_AS_ADVANCED(
|
||||
SNDFILE_INCLUDE_DIR
|
||||
SNDFILE_LIBRARY
|
||||
)
|
@ -1,6 +1,44 @@
|
||||
# -*- mode: cmake; indent-tabs-mode: t; -*-
|
||||
# $Id$
|
||||
|
||||
|
||||
# foo_bar.spam --> foo_barMySuffix.spam
|
||||
macro(file_suffix
|
||||
file_name_new file_name file_suffix
|
||||
)
|
||||
|
||||
get_filename_component(_file_name_PATH ${file_name} PATH)
|
||||
get_filename_component(_file_name_NAME_WE ${file_name} NAME_WE)
|
||||
get_filename_component(_file_name_EXT ${file_name} EXT)
|
||||
set(${file_name_new} "${_file_name_PATH}/${_file_name_NAME_WE}${file_suffix}${_file_name_EXT}")
|
||||
|
||||
unset(_file_name_PATH)
|
||||
unset(_file_name_NAME_WE)
|
||||
unset(_file_name_EXT)
|
||||
endmacro()
|
||||
|
||||
# usefil for adding debug suffix to library lists:
|
||||
# /somepath/foo.lib --> /somepath/foo_d.lib
|
||||
macro(file_list_suffix
|
||||
fp_list_new fp_list fn_suffix
|
||||
)
|
||||
|
||||
# incase of empty list
|
||||
set(_fp)
|
||||
set(_fp_suffixed)
|
||||
|
||||
set(fp_list_new)
|
||||
|
||||
foreach(_fp ${fp_list})
|
||||
file_suffix(_fp_suffixed "${_fp}" "${fn_suffix}")
|
||||
list(APPEND "${fp_list_new}" "${_fp_suffixed}")
|
||||
endforeach()
|
||||
|
||||
unset(_fp)
|
||||
unset(_fp_suffixed)
|
||||
|
||||
endmacro()
|
||||
|
||||
# Nicer makefiles with -I/1/foo/ instead of -I/1/2/3/../../foo/
|
||||
# use it instead of include_directories()
|
||||
macro(blender_include_dirs
|
||||
@ -37,7 +75,7 @@ macro(blender_source_group
|
||||
|
||||
foreach(_SRC ${sources})
|
||||
get_filename_component(_SRC_EXT ${_SRC} EXT)
|
||||
if(${_SRC_EXT} MATCHES ".h" OR ${_SRC_EXT} MATCHES ".hpp")
|
||||
if((${_SRC_EXT} MATCHES ".h") OR (${_SRC_EXT} MATCHES ".hpp"))
|
||||
source_group("Header Files" FILES ${_SRC})
|
||||
else()
|
||||
source_group("Source Files" FILES ${_SRC})
|
||||
@ -127,7 +165,7 @@ macro(SETUP_LIBDIRS)
|
||||
link_directories(${SNDFILE_LIBPATH})
|
||||
endif()
|
||||
if(WITH_SAMPLERATE)
|
||||
link_directories(${LIBSAMPLERATE_LIBPATH})
|
||||
link_directories(${SAMPLERATE_LIBPATH})
|
||||
endif()
|
||||
if(WITH_FFTW3)
|
||||
link_directories(${FFTW3_LIBPATH})
|
||||
@ -150,17 +188,26 @@ macro(setup_liblinks
|
||||
target)
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${PLATFORM_LINKFLAGS} ")
|
||||
|
||||
target_link_libraries(${target} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ${JPEG_LIBRARIES} ${PNG_LIBRARIES} ${ZLIB_LIBRARIES} ${LLIBS})
|
||||
target_link_libraries(${target}
|
||||
${OPENGL_gl_LIBRARY}
|
||||
${OPENGL_glu_LIBRARY}
|
||||
${JPEG_LIBRARIES}
|
||||
${PNG_LIBRARIES}
|
||||
${ZLIB_LIBRARIES}
|
||||
${LLIBS})
|
||||
|
||||
# since we are using the local libs for python when compiling msvc projects, we need to add _d when compiling debug versions
|
||||
if(WITH_PYTHON) # AND NOT WITH_PYTHON_MODULE # WIN32 needs
|
||||
target_link_libraries(${target} ${PYTHON_LINKFLAGS})
|
||||
|
||||
if(WIN32 AND NOT UNIX)
|
||||
target_link_libraries(${target} debug ${PYTHON_LIBRARY}_d)
|
||||
target_link_libraries(${target} optimized ${PYTHON_LIBRARY})
|
||||
file_list_suffix(PYTHON_LIBRARIES_DEBUG "${PYTHON_LIBRARIES}" "_d")
|
||||
target_link_libraries(${target}
|
||||
debug ${PYTHON_LIBRARIES_DEBUG}
|
||||
optimized ${PYTHON_LIBRARIES})
|
||||
unset(PYTHON_LIBRARIES_DEBUG)
|
||||
else()
|
||||
target_link_libraries(${target} ${PYTHON_LIBRARY})
|
||||
target_link_libraries(${target} ${PYTHON_LIBRARIES})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@ -168,14 +215,18 @@ macro(setup_liblinks
|
||||
target_link_libraries(${target} ${GLEW_LIBRARY})
|
||||
endif()
|
||||
|
||||
target_link_libraries(${target} ${OPENGL_glu_LIBRARY} ${JPEG_LIBRARIES} ${PNG_LIBRARIES} ${ZLIB_LIBRARIES})
|
||||
target_link_libraries(${target} ${FREETYPE_LIBRARY})
|
||||
target_link_libraries(${target}
|
||||
${OPENGL_glu_LIBRARY}
|
||||
${JPEG_LIBRARIES}
|
||||
${PNG_LIBRARIES}
|
||||
${ZLIB_LIBRARIES}
|
||||
${FREETYPE_LIBRARY})
|
||||
|
||||
if(WITH_INTERNATIONAL)
|
||||
target_link_libraries(${target} ${GETTEXT_LIB})
|
||||
|
||||
if(WIN32 AND NOT UNIX)
|
||||
target_link_libraries(${target} ${ICONV_LIB})
|
||||
target_link_libraries(${target} ${ICONV_LIBRARIES})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@ -183,67 +234,76 @@ macro(setup_liblinks
|
||||
target_link_libraries(${target} ${OPENAL_LIBRARY})
|
||||
endif()
|
||||
if(WITH_FFTW3)
|
||||
target_link_libraries(${target} ${FFTW3_LIB})
|
||||
target_link_libraries(${target} ${FFTW3_LIBRARIES})
|
||||
endif()
|
||||
if(WITH_JACK)
|
||||
target_link_libraries(${target} ${JACK_LIB})
|
||||
target_link_libraries(${target} ${JACK_LIBRARIES})
|
||||
endif()
|
||||
if(WITH_CODEC_SNDFILE)
|
||||
target_link_libraries(${target} ${SNDFILE_LIB})
|
||||
target_link_libraries(${target} ${SNDFILE_LIBRARIES})
|
||||
endif()
|
||||
if(WITH_SAMPLERATE)
|
||||
target_link_libraries(${target} ${LIBSAMPLERATE_LIB})
|
||||
target_link_libraries(${target} ${SAMPLERATE_LIBRARIES})
|
||||
endif()
|
||||
if(WITH_SDL)
|
||||
target_link_libraries(${target} ${SDL_LIBRARY})
|
||||
endif()
|
||||
if(WITH_CODEC_QUICKTIME)
|
||||
target_link_libraries(${target} ${QUICKTIME_LIB})
|
||||
target_link_libraries(${target} ${QUICKTIME_LIBRARIES})
|
||||
endif()
|
||||
if(WITH_IMAGE_TIFF)
|
||||
target_link_libraries(${target} ${TIFF_LIBRARY})
|
||||
endif()
|
||||
if(WITH_IMAGE_OPENEXR)
|
||||
if(WIN32 AND NOT UNIX)
|
||||
foreach(_LOOP_VAR ${OPENEXR_LIB})
|
||||
target_link_libraries(${target} debug ${_LOOP_VAR}_d)
|
||||
target_link_libraries(${target} optimized ${_LOOP_VAR})
|
||||
endforeach()
|
||||
unset(_LOOP_VAR)
|
||||
file_list_suffix(OPENEXR_LIBRARIES_DEBUG "${OPENEXR_LIBRARIES}" "_d")
|
||||
target_link_libraries(${target}
|
||||
debug ${OPENEXR_LIBRARIES_DEBUG}
|
||||
optimized ${OPENEXR_LIBRARIES})
|
||||
unset(OPENEXR_LIBRARIES_DEBUG)
|
||||
else()
|
||||
target_link_libraries(${target} ${OPENEXR_LIB})
|
||||
target_link_libraries(${target} ${OPENEXR_LIBRARIES})
|
||||
endif()
|
||||
endif()
|
||||
if(WITH_IMAGE_OPENJPEG AND UNIX AND NOT APPLE)
|
||||
target_link_libraries(${target} ${OPENJPEG_LIB})
|
||||
target_link_libraries(${target} ${OPENJPEG_LIBRARIES})
|
||||
endif()
|
||||
if(WITH_CODEC_FFMPEG)
|
||||
target_link_libraries(${target} ${FFMPEG_LIB})
|
||||
target_link_libraries(${target} ${FFMPEG_LIBRARIES})
|
||||
endif()
|
||||
if(WITH_OPENCOLLADA)
|
||||
if(WIN32 AND NOT UNIX)
|
||||
foreach(_LOOP_VAR ${OPENCOLLADA_LIB})
|
||||
target_link_libraries(${target} debug ${_LOOP_VAR}_d)
|
||||
target_link_libraries(${target} optimized ${_LOOP_VAR})
|
||||
endforeach()
|
||||
unset(_LOOP_VAR)
|
||||
target_link_libraries(${target} debug ${PCRE_LIB}_d)
|
||||
target_link_libraries(${target} optimized ${PCRE_LIB})
|
||||
file_list_suffix(OPENCOLLADA_LIBRARIES_DEBUG "${OPENCOLLADA_LIBRARIES}" "_d")
|
||||
target_link_libraries(${target}
|
||||
debug ${OPENCOLLADA_LIBRARIES_DEBUG}
|
||||
optimized ${OPENCOLLADA_LIBRARIES})
|
||||
unset(OPENCOLLADA_LIBRARIES_DEBUG)
|
||||
|
||||
file_list_suffix(PCRE_LIB_DEBUG "${PCRE_LIB}" "_d")
|
||||
target_link_libraries(${target}
|
||||
debug ${PCRE_LIB_DEBUG}
|
||||
optimized ${PCRE_LIB})
|
||||
unset(PCRE_LIB_DEBUG)
|
||||
|
||||
if(EXPAT_LIB)
|
||||
target_link_libraries(${target} debug ${EXPAT_LIB}_d)
|
||||
target_link_libraries(${target} optimized ${EXPAT_LIB})
|
||||
file_list_suffix(EXPAT_LIB_DEBUG "${EXPAT_LIB}" "_d")
|
||||
target_link_libraries(${target}
|
||||
debug ${EXPAT_LIB_DEBUG}
|
||||
optimized ${EXPAT_LIB})
|
||||
unset(EXPAT_LIB_DEBUG)
|
||||
endif()
|
||||
else()
|
||||
target_link_libraries(${target} ${OPENCOLLADA_LIB})
|
||||
target_link_libraries(${target} ${PCRE_LIB})
|
||||
target_link_libraries(${target} ${EXPAT_LIB})
|
||||
target_link_libraries(${target}
|
||||
${OPENCOLLADA_LIBRARIES}
|
||||
${PCRE_LIB}
|
||||
${EXPAT_LIB})
|
||||
endif()
|
||||
endif()
|
||||
if(WITH_MEM_JEMALLOC)
|
||||
target_link_libraries(${target} ${JEMALLOC_LIBRARY})
|
||||
target_link_libraries(${target} ${JEMALLOC_LIBRARIES})
|
||||
endif()
|
||||
if(WIN32 AND NOT UNIX)
|
||||
target_link_libraries(${target} ${PTHREADS_LIB})
|
||||
target_link_libraries(${target} ${PTHREADS_LIBRARIES})
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
|
@ -99,7 +99,7 @@ BF_GETTEXT_LIB = 'gnu_gettext'
|
||||
BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib'
|
||||
|
||||
WITH_BF_GAMEENGINE = True
|
||||
WITH_BF_PLAYER = False
|
||||
WITH_BF_PLAYER = True
|
||||
|
||||
WITH_BF_BULLET = True
|
||||
BF_BULLET = '#extern/bullet2/src'
|
||||
@ -181,7 +181,7 @@ CXX_WARN = []
|
||||
|
||||
LLIBS = ['ws2_32', 'vfw32', 'winmm', 'kernel32', 'user32', 'gdi32', 'comdlg32', 'advapi32', 'shfolder', 'shell32', 'ole32', 'oleaut32', 'uuid']
|
||||
|
||||
PLATFORM_LINKFLAGS = ['/SUBSYSTEM:CONSOLE','/MACHINE:IX86','/STACK:2097152','/INCREMENTAL:NO', '/LARGEADDRESSAWARE']
|
||||
PLATFORM_LINKFLAGS = ['/SUBSYSTEM:CONSOLE','/MACHINE:IX86','/STACK:2097152','/INCREMENTAL:NO', '/LARGEADDRESSAWARE', '/NODEFAULTLIB:"msvcrt.lib"', '/NODEFAULTLIB:"msvcmrt.lib"', '/NODEFAULTLIB:"msvcurt.lib"', '/NODEFAULTLIB:"msvcrtd.lib"']
|
||||
|
||||
# # Todo
|
||||
# BF_PROFILE_CCFLAGS = ['-pg', '-g ']
|
||||
|
@ -101,7 +101,7 @@ BF_GETTEXT_LIB = 'gettext'
|
||||
BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib'
|
||||
|
||||
WITH_BF_GAMEENGINE = True
|
||||
WITH_BF_PLAYER = False
|
||||
WITH_BF_PLAYER = True
|
||||
|
||||
WITH_BF_BULLET = True
|
||||
BF_BULLET = '#extern/bullet2/src'
|
||||
@ -188,7 +188,7 @@ if BF_DEBUG:
|
||||
else:
|
||||
BF_NUMJOBS=6
|
||||
|
||||
PLATFORM_LINKFLAGS = ['/SUBSYSTEM:CONSOLE','/MACHINE:X64','/STACK:2097152','/OPT:NOREF','/INCREMENTAL:NO']
|
||||
PLATFORM_LINKFLAGS = ['/SUBSYSTEM:CONSOLE','/MACHINE:X64','/STACK:2097152','/OPT:NOREF','/INCREMENTAL:NO', '/NODEFAULTLIB:"msvcrt.lib"', '/NODEFAULTLIB:"msvcmrt.lib"', '/NODEFAULTLIB:"msvcurt.lib"', '/NODEFAULTLIB:"msvcrtd.lib"']
|
||||
|
||||
BF_BUILDDIR = '..\\build\\blender25-win64-vc'
|
||||
BF_INSTALLDIR='..\\install\\blender25-win64-vc'
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
{%- macro relbar() %}
|
||||
<div class="subnav boxheader">
|
||||
<ul class="noprint"><li><a href="http://www.blender.org/development/coding-guides/">Coding Guides</a></li><li>•</li><li><a href="http://www.blender.org/development/report-a-bug/">Report a Bug</a></li><li>•</li><li><a href="http://www.blender.org/development/submit-a-patch/">Submit a Patch</a></li><li>•</li><li><a href="http://www.blender.org/development/release-logs/">Release Logs</a></li><li>•</li><li><a href="http://www.blender.org/development/current-projects/">Current Projects</a></li><li>•</li><li><a href="http://www.blender.org/development/architecture/">Architecture</a></li><li>•</li><li><a href="http://www.blender.org/development/building-blender/">Building Blender</a></li><li>•</li><li class="subnav-active"><a href="http://www.blender.org/documentation/250PythonDoc/contents.html">PyAPI</a></li><li>•</li><li><a href="http://wiki.blender.org/index.php/Main_Page">Wiki</a></li></ul>
|
||||
<ul class="noprint"><li><a href="http://wiki.blender.org/index.php/Dev:Contents">Documentation</a></li><li>•</li><li><a href="http://www.blender.org/development/report-a-bug/">Report a Bug</a></li><li>•</li><li><a href="http://wiki.blender.org/index.php/Dev:Doc/Process/Patches">Submit a Patch</a></li><li>•</li><li><a href="http://www.blender.org/development/release-logs/">Release Logs</a></li><li>•</li><li><a href="http://www.blender.org/development/building-blender/">Building Blender</a></li><li>•</li><li><a href="http://wiki.blender.org/index.php/Dev:Doc/Projects">Current Projects</a></li><li>•</li><li><a href="http://wiki.blender.org/index.php/Dev:Source/Architecture">Architecture</a></li><li>•</li><li><a href="http://www.blender.org/documentation/250PythonDoc/contents.html">Python API</a></li><li>•</li><li><a href="http://wiki.blender.org">Wiki</a></li></ul>
|
||||
</div>
|
||||
<div class="related subnav">
|
||||
<h3>{{ _('Navigation') }}</h3>
|
||||
|
20
doc/python_api/examples/bpy.props.4.py
Normal file
20
doc/python_api/examples/bpy.props.4.py
Normal file
@ -0,0 +1,20 @@
|
||||
"""
|
||||
Update Example
|
||||
++++++++++++++
|
||||
|
||||
It can be useful to perform an action when a property is changed and can be
|
||||
used to update other properties or synchronize with external data.
|
||||
|
||||
All properties define update functions except for CollectionProperty.
|
||||
"""
|
||||
|
||||
import bpy
|
||||
|
||||
def update_func(self, context):
|
||||
print("my test function", self)
|
||||
|
||||
bpy.types.Scene.testprop = bpy.props.FloatProperty(update=update_func)
|
||||
|
||||
bpy.context.scene.testprop = 11.0
|
||||
|
||||
# >>> my test function <bpy_struct, Scene("Scene")>
|
4
extern/libopenjpeg/CMakeLists.txt
vendored
4
extern/libopenjpeg/CMakeLists.txt
vendored
@ -32,6 +32,10 @@ set(INC_SYS
|
||||
|
||||
)
|
||||
|
||||
if(WIN32)
|
||||
add_definitions(-DOPJ_STATIC)
|
||||
endif()
|
||||
|
||||
set(SRC
|
||||
bio.c
|
||||
cio.c
|
||||
|
@ -1,7 +1,7 @@
|
||||
# $Id$
|
||||
# ***** BEGIN LGPL LICENSE BLOCK *****
|
||||
#
|
||||
# Copyright 2009 Jörg Hermann Müller
|
||||
# Copyright 2009 Jrg Hermann Mller
|
||||
#
|
||||
# This file is part of AudaSpace.
|
||||
#
|
||||
@ -29,7 +29,7 @@ set(INC
|
||||
)
|
||||
|
||||
set(INC_SYS
|
||||
${PTHREADS_INC}
|
||||
${PTHREADS_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
set(SRC
|
||||
@ -160,7 +160,7 @@ set(SRC
|
||||
if(WITH_CODEC_FFMPEG)
|
||||
add_definitions(-DWITH_FFMPEG)
|
||||
list(APPEND INC ffmpeg)
|
||||
list(APPEND INC_SYS ${FFMPEG_INC})
|
||||
list(APPEND INC_SYS ${FFMPEG_INCLUDE_DIRS})
|
||||
list(APPEND SRC
|
||||
ffmpeg/AUD_FFMPEGFactory.cpp
|
||||
ffmpeg/AUD_FFMPEGReader.cpp
|
||||
@ -195,7 +195,7 @@ endif()
|
||||
if(WITH_JACK)
|
||||
add_definitions(-DWITH_JACK)
|
||||
list(APPEND INC jack)
|
||||
list(APPEND INC_SYS ${JACK_INC})
|
||||
list(APPEND INC_SYS ${JACK_INCLUDE_DIRS})
|
||||
list(APPEND SRC
|
||||
jack/AUD_JackDevice.cpp
|
||||
|
||||
@ -206,7 +206,7 @@ endif()
|
||||
if(WITH_CODEC_SNDFILE)
|
||||
add_definitions(-DWITH_SNDFILE)
|
||||
list(APPEND INC sndfile)
|
||||
list(APPEND INC_SYS ${SNDFILE_INC})
|
||||
list(APPEND INC_SYS ${SNDFILE_INCLUDE_DIRS})
|
||||
list(APPEND SRC
|
||||
sndfile/AUD_SndFileFactory.cpp
|
||||
sndfile/AUD_SndFileReader.cpp
|
||||
@ -218,7 +218,7 @@ endif()
|
||||
|
||||
if(WITH_SAMPLERATE)
|
||||
add_definitions(-DWITH_SAMPLERATE)
|
||||
list(APPEND INC_SYS ${LIBSAMPLERATE_INC})
|
||||
list(APPEND INC_SYS ${SAMPLERATE_INCLUDE_DIRS})
|
||||
list(APPEND SRC
|
||||
SRC/AUD_SRCResampleFactory.cpp
|
||||
SRC/AUD_SRCResampleReader.cpp
|
||||
@ -231,7 +231,7 @@ endif()
|
||||
if(WITH_FFTW3 AND FALSE)
|
||||
add_definitions(-DWITH_FFTW3)
|
||||
list(APPEND INC fftw)
|
||||
list(APPEND INC_SYS ${FFTW3_INC})
|
||||
list(APPEND INC_SYS ${FFTW3_INCLUDE_DIRS})
|
||||
list(APPEND SRC
|
||||
fftw/AUD_BandPassFactory.cpp
|
||||
fftw/AUD_BandPassReader.cpp
|
||||
|
@ -89,7 +89,7 @@ endif()
|
||||
|
||||
if(WITH_FFTW3)
|
||||
add_definitions(-DFFTW3=1)
|
||||
list(APPEND INC ${FFTW3_INC})
|
||||
list(APPEND INC ${FFTW3_INCLUDE_DIRS})
|
||||
endif()
|
||||
|
||||
blender_add_lib(bf_intern_smoke "${SRC}" "${INC}" "${INC_SYS}")
|
||||
|
@ -267,6 +267,7 @@ def ngon_tesselate(from_data, indices, fix_loops=True):
|
||||
fix_loops: If this is enabled polylines that use loops to make multiple polylines are delt with correctly.
|
||||
'''
|
||||
|
||||
from mathutils.geometry import tesselate_polygon
|
||||
from mathutils import Vector
|
||||
vector_to_tuple = Vector.to_tuple
|
||||
|
||||
|
@ -114,6 +114,8 @@ def location_3d_to_region_2d(region, rv3d, coord):
|
||||
:return: 2d location
|
||||
:rtype: :class:`Vector`
|
||||
"""
|
||||
from mathutils import Vector
|
||||
|
||||
prj = Vector((coord[0], coord[1], coord[2], 1.0)) * rv3d.perspective_matrix
|
||||
if prj.w > 0.0:
|
||||
width_half = region.width / 2.0
|
||||
|
@ -20,7 +20,6 @@
|
||||
|
||||
from _bpy import types as bpy_types
|
||||
import _bpy
|
||||
from mathutils import Vector
|
||||
|
||||
StructRNA = bpy_types.Struct.__bases__[0]
|
||||
StructMetaPropGroup = _bpy.StructMetaPropGroup
|
||||
@ -144,18 +143,21 @@ class _GenericBone:
|
||||
def x_axis(self):
|
||||
""" Vector pointing down the x-axis of the bone.
|
||||
"""
|
||||
from mathutils import Vector
|
||||
return Vector((1.0, 0.0, 0.0)) * self.matrix.to_3x3()
|
||||
|
||||
@property
|
||||
def y_axis(self):
|
||||
""" Vector pointing down the x-axis of the bone.
|
||||
"""
|
||||
from mathutils import Vector
|
||||
return Vector((0.0, 1.0, 0.0)) * self.matrix.to_3x3()
|
||||
|
||||
@property
|
||||
def z_axis(self):
|
||||
""" Vector pointing down the x-axis of the bone.
|
||||
"""
|
||||
from mathutils import Vector
|
||||
return Vector((0.0, 0.0, 1.0)) * self.matrix.to_3x3()
|
||||
|
||||
@property
|
||||
|
@ -111,12 +111,16 @@ def draw(layout, context, context_member, property_type, use_edit=True):
|
||||
continue
|
||||
|
||||
row = layout.row()
|
||||
convert_to_pyobject = getattr(val, "convert_to_pyobject", None)
|
||||
to_dict = getattr(val, "to_dict", None)
|
||||
to_list = getattr(val, "to_list", None)
|
||||
|
||||
val_orig = val
|
||||
if convert_to_pyobject:
|
||||
val_draw = val = val.convert_to_pyobject()
|
||||
val_draw = str(val_draw)
|
||||
if to_dict:
|
||||
val = to_dict()
|
||||
val_draw = str(val)
|
||||
elif to_list:
|
||||
val = to_list()
|
||||
val_draw = str(val)
|
||||
else:
|
||||
val_draw = val
|
||||
|
||||
@ -131,7 +135,7 @@ def draw(layout, context, context_member, property_type, use_edit=True):
|
||||
row.label(text=key)
|
||||
|
||||
# explicit exception for arrays
|
||||
if convert_to_pyobject and not hasattr(val_orig, "len"):
|
||||
if to_dict or to_list:
|
||||
row.label(text=val_draw)
|
||||
else:
|
||||
if key in rna_properties:
|
||||
|
@ -16,17 +16,16 @@
|
||||
#
|
||||
# ##### END GPL LICENSE BLOCK #####
|
||||
|
||||
# <pep8 compliant>
|
||||
# <pep8-80 compliant>
|
||||
|
||||
import bpy
|
||||
|
||||
|
||||
def pose_info():
|
||||
def pose_frame_info(obj):
|
||||
from mathutils import Matrix
|
||||
|
||||
info = {}
|
||||
|
||||
obj = bpy.context.object
|
||||
pose = obj.pose
|
||||
|
||||
pose_items = pose.bones.items()
|
||||
@ -51,7 +50,6 @@ def pose_info():
|
||||
except:
|
||||
binfo["matrix_pose_inv"] = Matrix()
|
||||
|
||||
print(binfo["matrix_pose"])
|
||||
info[name] = binfo
|
||||
|
||||
for name, pbone in pose_items:
|
||||
@ -67,45 +65,86 @@ def pose_info():
|
||||
matrix = binfo_parent["matrix_pose_inv"] * matrix
|
||||
rest_matrix = binfo_parent["matrix_local_inv"] * rest_matrix
|
||||
|
||||
matrix = rest_matrix.inverted() * matrix
|
||||
|
||||
binfo["matrix_key"] = matrix.copy()
|
||||
binfo["matrix_key"] = rest_matrix.inverted() * matrix
|
||||
|
||||
return info
|
||||
|
||||
|
||||
def bake(frame_start, frame_end, step=1, only_selected=False):
|
||||
def obj_frame_info(obj):
|
||||
info = {}
|
||||
# parent = obj.parent
|
||||
info["matrix_key"] = obj.matrix_local.copy()
|
||||
return info
|
||||
|
||||
|
||||
def bake(frame_start,
|
||||
frame_end, step=1,
|
||||
only_selected=False,
|
||||
do_pose=True,
|
||||
do_object=True,
|
||||
do_constraint_clear=False,
|
||||
):
|
||||
|
||||
scene = bpy.context.scene
|
||||
obj = bpy.context.object
|
||||
pose = obj.pose
|
||||
frame_back = scene.frame_current
|
||||
|
||||
info_ls = []
|
||||
if pose is None:
|
||||
do_pose = False
|
||||
|
||||
if do_pose is None and do_object is None:
|
||||
return None
|
||||
|
||||
pose_info = []
|
||||
obj_info = []
|
||||
|
||||
frame_range = range(frame_start, frame_end + 1, step)
|
||||
|
||||
# could spped this up by applying steps here too...
|
||||
# -------------------------------------------------------------------------
|
||||
# Collect transformations
|
||||
|
||||
# could speed this up by applying steps here too...
|
||||
for f in frame_range:
|
||||
scene.frame_set(f)
|
||||
|
||||
info = pose_info()
|
||||
info_ls.append(info)
|
||||
if do_pose:
|
||||
pose_info.append(pose_frame_info(obj))
|
||||
if do_object:
|
||||
obj_info.append(obj_frame_info(obj))
|
||||
|
||||
f += 1
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# Create action
|
||||
|
||||
# incase animation data hassnt been created
|
||||
atd = obj.animation_data_create()
|
||||
action = bpy.data.actions.new("Action")
|
||||
atd.action = action
|
||||
|
||||
bpy.context.object.animation_data.action = action
|
||||
if do_pose:
|
||||
pose_items = pose.bones.items()
|
||||
else:
|
||||
pose_items = [] # skip
|
||||
|
||||
pose_items = pose.bones.items()
|
||||
# -------------------------------------------------------------------------
|
||||
# Apply transformations to action
|
||||
|
||||
for name, pbone in pose_items:
|
||||
# pose
|
||||
for name, pbone in (pose_items if do_pose else ()):
|
||||
if only_selected and not pbone.bone.select:
|
||||
continue
|
||||
|
||||
for f in frame_range:
|
||||
matrix = info_ls[int((f - frame_start) / step)][name]["matrix_key"]
|
||||
if do_constraint_clear:
|
||||
while pbone.constraints:
|
||||
pbone.constraints.remove(pbone.constraints[0])
|
||||
|
||||
#pbone.location = matrix.to_translation()
|
||||
#pbone.rotation_quaternion = matrix.to_quaternion()
|
||||
for f in frame_range:
|
||||
matrix = pose_info[(f - frame_start) // step][name]["matrix_key"]
|
||||
|
||||
# pbone.location = matrix.to_translation()
|
||||
# pbone.rotation_quaternion = matrix.to_quaternion()
|
||||
pbone.matrix_basis = matrix
|
||||
|
||||
pbone.keyframe_insert("location", -1, f, name)
|
||||
@ -121,10 +160,35 @@ def bake(frame_start, frame_end, step=1, only_selected=False):
|
||||
|
||||
pbone.keyframe_insert("scale", -1, f, name)
|
||||
|
||||
# object. TODO. multiple objects
|
||||
if do_object:
|
||||
if do_constraint_clear:
|
||||
while obj.constraints:
|
||||
obj.constraints.remove(obj.constraints[0])
|
||||
|
||||
for f in frame_range:
|
||||
matrix = obj_info[(f - frame_start) // step]["matrix_key"]
|
||||
obj.matrix_local = matrix
|
||||
|
||||
obj.keyframe_insert("location", -1, f)
|
||||
|
||||
rotation_mode = obj.rotation_mode
|
||||
|
||||
if rotation_mode == 'QUATERNION':
|
||||
obj.keyframe_insert("rotation_quaternion", -1, f)
|
||||
elif rotation_mode == 'AXIS_ANGLE':
|
||||
obj.keyframe_insert("rotation_axis_angle", -1, f)
|
||||
else: # euler, XYZ, ZXY etc
|
||||
obj.keyframe_insert("rotation_euler", -1, f)
|
||||
|
||||
obj.keyframe_insert("scale", -1, f)
|
||||
|
||||
scene.frame_set(frame_back)
|
||||
|
||||
return action
|
||||
|
||||
|
||||
from bpy.props import IntProperty, BoolProperty
|
||||
from bpy.props import IntProperty, BoolProperty, EnumProperty
|
||||
|
||||
|
||||
class BakeAction(bpy.types.Operator):
|
||||
@ -144,10 +208,31 @@ class BakeAction(bpy.types.Operator):
|
||||
default=1, min=1, max=120)
|
||||
only_selected = BoolProperty(name="Only Selected",
|
||||
default=True)
|
||||
clear_consraints = BoolProperty(name="Clear Constraints",
|
||||
default=False)
|
||||
bake_types = EnumProperty(
|
||||
name="Bake Data",
|
||||
options={'ENUM_FLAG'},
|
||||
items=(('POSE', "Pose", ""),
|
||||
('OBJECT', "Object", ""),
|
||||
),
|
||||
default={'POSE'},
|
||||
)
|
||||
|
||||
def execute(self, context):
|
||||
|
||||
action = bake(self.frame_start, self.frame_end, self.step, self.only_selected)
|
||||
action = bake(self.frame_start,
|
||||
self.frame_end,
|
||||
self.step,
|
||||
self.only_selected,
|
||||
'POSE' in self.bake_types,
|
||||
'OBJECT' in self.bake_types,
|
||||
self.clear_consraints,
|
||||
)
|
||||
|
||||
if action is None:
|
||||
self.report({'INFO'}, "Nothing to bake")
|
||||
return {'CANCELLED'}
|
||||
|
||||
# basic cleanup, could move elsewhere
|
||||
for fcu in action.fcurves:
|
||||
|
@ -22,6 +22,24 @@ from mathutils import Vector
|
||||
import bpy
|
||||
from bpy.props import BoolProperty, EnumProperty, IntProperty, FloatProperty, FloatVectorProperty
|
||||
|
||||
|
||||
def object_ensure_material(obj, mat_name):
|
||||
""" Use an existing material or add a new one.
|
||||
"""
|
||||
mat = mat_slot = None
|
||||
for mat_slot in obj.material_slots:
|
||||
mat = mat_slot.material
|
||||
if mat:
|
||||
break
|
||||
if mat is None:
|
||||
mat = bpy.data.materials.new(mat_name)
|
||||
if mat_slot:
|
||||
mat_slot.material = mat
|
||||
else:
|
||||
obj.data.materials.append(mat)
|
||||
return mat
|
||||
|
||||
|
||||
class QuickFur(bpy.types.Operator):
|
||||
bl_idname = "object.quick_fur"
|
||||
bl_label = "Quick Fur"
|
||||
@ -78,6 +96,7 @@ class QuickFur(bpy.types.Operator):
|
||||
|
||||
return {'FINISHED'}
|
||||
|
||||
|
||||
class QuickExplode(bpy.types.Operator):
|
||||
bl_idname = "object.quick_explode"
|
||||
bl_label = "Quick Explode"
|
||||
@ -93,40 +112,44 @@ class QuickExplode(bpy.types.Operator):
|
||||
amount = IntProperty(name="Amount of pieces",
|
||||
default=100, min=2, max=10000, soft_min=2, soft_max=10000)
|
||||
|
||||
duration = IntProperty(name="Duration",
|
||||
default=50, min=1, max=10000, soft_min=1, soft_max=10000)
|
||||
frame_duration = IntProperty(name="Duration",
|
||||
default=50, min=1, max=300000, soft_min=1, soft_max=10000)
|
||||
|
||||
start_frame = IntProperty(name="Start Frame",
|
||||
default=1, min=1, max=10000, soft_min=1, soft_max=10000)
|
||||
frame_start = IntProperty(name="Start Frame",
|
||||
default=1, min=1, max=300000, soft_min=1, soft_max=10000)
|
||||
|
||||
end_frame = IntProperty(name="End Frame",
|
||||
default=10, min=1, max=10000, soft_min=1, soft_max=10000)
|
||||
frame_end = IntProperty(name="End Frame",
|
||||
default=10, min=1, max=300000, soft_min=1, soft_max=10000)
|
||||
|
||||
velocity = FloatProperty(name="Outwards Velocity",
|
||||
default=1, min=0, max=1000, soft_min=0, soft_max=10)
|
||||
default=1, min=0, max=300000, soft_min=0, soft_max=10)
|
||||
|
||||
fade = BoolProperty(name="Fade",
|
||||
description="Fade the pieces over time.",
|
||||
default=True)
|
||||
|
||||
invert_order = BoolProperty(name="Invert Order",
|
||||
description="Blend objects in the opposite direction (only for Blend style explosion).",
|
||||
default=False)
|
||||
|
||||
def execute(self, context):
|
||||
fake_context = bpy.context.copy()
|
||||
mesh_objects = [obj for obj in context.selected_objects if obj.type == 'MESH']
|
||||
obj_act = context.active_object
|
||||
|
||||
if obj_act.type != 'MESH':
|
||||
self.report({'ERROR'}, "Active object is not a mesh")
|
||||
return {'CANCELLED'}
|
||||
|
||||
mesh_objects = [obj for obj in context.selected_objects
|
||||
if obj.type == 'MESH' and obj != obj_act]
|
||||
mesh_objects.insert(0, obj_act)
|
||||
|
||||
if self.style == 'BLEND' and len(mesh_objects) != 2:
|
||||
self.report({'ERROR'}, "Select two mesh objects.")
|
||||
self.report({'ERROR'}, "Select two mesh objects")
|
||||
return {'CANCELLED'}
|
||||
elif not mesh_objects:
|
||||
self.report({'ERROR'}, "Select at least one mesh object.")
|
||||
self.report({'ERROR'}, "Select at least one mesh object")
|
||||
return {'CANCELLED'}
|
||||
|
||||
for obj in mesh_objects:
|
||||
if len(obj.particle_systems) > 0:
|
||||
self.report({'ERROR'}, "Selected object's can't have particle systems.")
|
||||
if obj.particle_systems:
|
||||
self.report({'ERROR'}, "Object %r already has a particle system" % obj.name)
|
||||
return {'CANCELLED'}
|
||||
|
||||
if self.fade:
|
||||
@ -137,16 +160,12 @@ class QuickExplode(bpy.types.Operator):
|
||||
tex.color_ramp.elements[0].position = 0.333
|
||||
tex.color_ramp.elements[1].position = 0.666
|
||||
|
||||
tex.color_ramp.elements[0].color[3] = 1
|
||||
tex.color_ramp.elements[1].color[3] = 0
|
||||
tex.color_ramp.elements[0].color[3] = 1.0
|
||||
tex.color_ramp.elements[1].color[3] = 0.0
|
||||
|
||||
if self.style == 'BLEND':
|
||||
if self.invert_order:
|
||||
from_obj = mesh_objects[1]
|
||||
to_obj = mesh_objects[0]
|
||||
else:
|
||||
from_obj = mesh_objects[0]
|
||||
to_obj = mesh_objects[1]
|
||||
from_obj = mesh_objects[1]
|
||||
to_obj = mesh_objects[0]
|
||||
|
||||
for obj in mesh_objects:
|
||||
fake_context["object"] = obj
|
||||
@ -154,31 +173,28 @@ class QuickExplode(bpy.types.Operator):
|
||||
|
||||
settings = obj.particle_systems[-1].settings
|
||||
settings.count = self.amount
|
||||
settings.frame_start = self.start_frame
|
||||
settings.frame_end = self.end_frame - self.duration
|
||||
settings.lifetime = self.duration
|
||||
settings.frame_start = self.frame_start
|
||||
settings.frame_end = self.frame_end - self.frame_duration
|
||||
settings.lifetime = self.frame_duration
|
||||
settings.normal_factor = self.velocity
|
||||
settings.render_type = 'NONE'
|
||||
|
||||
bpy.ops.object.modifier_add(fake_context, type='EXPLODE')
|
||||
explode = obj.modifiers[-1]
|
||||
explode = obj.modifiers.new(name='Explode', type='EXPLODE')
|
||||
explode.use_edge_cut = True
|
||||
|
||||
if self.fade:
|
||||
explode.show_dead = False
|
||||
bpy.ops.mesh.uv_texture_add(fake_context);
|
||||
bpy.ops.mesh.uv_texture_add(fake_context)
|
||||
uv = obj.data.uv_textures[-1]
|
||||
uv.name = "Explode fade"
|
||||
explode.particle_uv = uv.name
|
||||
|
||||
if len(obj.material_slots) == 0:
|
||||
obj.data.materials.append(bpy.data.materials.new("Explode fade"))
|
||||
mat = object_ensure_material(obj, "Explode Fade")
|
||||
|
||||
mat = obj.data.materials[0]
|
||||
mat.use_transparency = True
|
||||
mat.use_transparent_shadows = True
|
||||
mat.alpha = 0
|
||||
mat.specular_alpha = 0
|
||||
mat.alpha = 0.0
|
||||
mat.specular_alpha = 0.0
|
||||
|
||||
tex_slot = mat.texture_slots.add()
|
||||
|
||||
@ -190,16 +206,12 @@ class QuickExplode(bpy.types.Operator):
|
||||
|
||||
if self.style == 'BLEND':
|
||||
if obj == to_obj:
|
||||
tex_slot.alpha_factor = -1
|
||||
tex_slot.alpha_factor = -1.0
|
||||
elem = tex.color_ramp.elements[1]
|
||||
elem.color[0] = mat.diffuse_color[0]
|
||||
elem.color[1] = mat.diffuse_color[1]
|
||||
elem.color[2] = mat.diffuse_color[2]
|
||||
elem.color = mat.diffuse_color
|
||||
else:
|
||||
elem = tex.color_ramp.elements[0]
|
||||
elem.color[0] = mat.diffuse_color[0]
|
||||
elem.color[1] = mat.diffuse_color[1]
|
||||
elem.color[2] = mat.diffuse_color[2]
|
||||
elem.color = mat.diffuse_color
|
||||
else:
|
||||
tex_slot.use_map_color_diffuse = False
|
||||
|
||||
@ -223,14 +235,18 @@ class QuickExplode(bpy.types.Operator):
|
||||
explode.show_dead = True
|
||||
else:
|
||||
settings.factor_random = self.velocity
|
||||
settings.angular_velocity_factor = self.velocity/10
|
||||
settings.angular_velocity_factor = self.velocity / 10.0
|
||||
|
||||
return {'FINISHED'}
|
||||
|
||||
def invoke(self, context, event):
|
||||
self.frame_start = context.scene.frame_current
|
||||
self.frame_end = self.frame_start + self.frame_duration
|
||||
return self.execute(context)
|
||||
|
||||
def obj_bb_minmax(obj, min_co, max_co):
|
||||
for i in range(0, 8):
|
||||
bb_vec = Vector((obj.bound_box[i][0], obj.bound_box[i][1], obj.bound_box[i][2])) * obj.matrix_world
|
||||
bb_vec = Vector(obj.bound_box[i]) * obj.matrix_world
|
||||
|
||||
min_co[0] = min(bb_vec[0], min_co[0])
|
||||
min_co[1] = min(bb_vec[1], min_co[1])
|
||||
@ -260,8 +276,8 @@ class QuickSmoke(bpy.types.Operator):
|
||||
def execute(self, context):
|
||||
fake_context = bpy.context.copy()
|
||||
mesh_objects = [obj for obj in context.selected_objects if obj.type == 'MESH']
|
||||
min_co = Vector((100000, 100000, 100000))
|
||||
max_co = Vector((-100000, -100000, -100000))
|
||||
min_co = Vector((100000.0, 100000.0, 100000.0))
|
||||
max_co = -min_co
|
||||
|
||||
if not mesh_objects:
|
||||
self.report({'ERROR'}, "Select at least one mesh object.")
|
||||
@ -441,4 +457,4 @@ class QuickFluid(bpy.types.Operator):
|
||||
if self.start_baking:
|
||||
bpy.ops.fluid.bake()
|
||||
|
||||
return {'FINISHED'}
|
||||
return {'FINISHED'}
|
||||
|
@ -112,14 +112,25 @@ class DATA_PT_shape_curve(CurveButtonsPanel, bpy.types.Panel):
|
||||
sub.prop(curve, "use_fill_front")
|
||||
sub.prop(curve, "use_fill_back")
|
||||
col.prop(curve, "use_fill_deform", text="Fill Deformed")
|
||||
|
||||
class DATA_PT_curve_texture_space(CurveButtonsPanel, bpy.types.Panel):
|
||||
bl_label = "Texture Space"
|
||||
bl_options = {'DEFAULT_CLOSED'}
|
||||
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
ob = context.object
|
||||
curve = context.curve
|
||||
|
||||
col.label(text="Textures:")
|
||||
col.prop(curve, "use_uv_as_generated")
|
||||
col.prop(curve, "use_auto_texspace")
|
||||
row = layout.row()
|
||||
row.prop(curve, "use_auto_texspace")
|
||||
row.prop(curve, "use_uv_as_generated")
|
||||
|
||||
row = layout.row()
|
||||
row.column().prop(curve, "texspace_location")
|
||||
row.column().prop(curve, "texspace_size")
|
||||
row.column().prop(curve, "texspace_location", text="Location")
|
||||
row.column().prop(curve, "texspace_size", text="Size")
|
||||
|
||||
|
||||
class DATA_PT_geometry_curve(CurveButtonsPanel, bpy.types.Panel):
|
||||
|
@ -71,9 +71,22 @@ class DATA_PT_metaball(DataButtonsPanel, bpy.types.Panel):
|
||||
layout.label(text="Update:")
|
||||
layout.prop(mball, "update_method", expand=True)
|
||||
|
||||
|
||||
class DATA_PT_mball_texture_space(DataButtonsPanel, bpy.types.Panel):
|
||||
bl_label = "Texture Space"
|
||||
bl_options = {'DEFAULT_CLOSED'}
|
||||
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
mball = context.meta_ball
|
||||
|
||||
layout.prop(mball, "use_auto_texspace")
|
||||
|
||||
row = layout.row()
|
||||
row.column().prop(mball, "texspace_location")
|
||||
row.column().prop(mball, "texspace_size")
|
||||
row.column().prop(mball, "texspace_location", text="Location")
|
||||
row.column().prop(mball, "texspace_size", text="Size")
|
||||
|
||||
|
||||
class DATA_PT_metaball_element(DataButtonsPanel, bpy.types.Panel):
|
||||
|
@ -350,7 +350,7 @@ class INFO_MT_help(bpy.types.Menu):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator("wm.url_open", text="Manual", icon='HELP').url = 'http://wiki.blender.org/index.php/Doc:Manual'
|
||||
layout.operator("wm.url_open", text="Release Log", icon='URL').url = 'http://www.blender.org/development/release-logs/blender-257/'
|
||||
layout.operator("wm.url_open", text="Release Log", icon='URL').url = 'http://www.blender.org/development/release-logs/blender-258/'
|
||||
|
||||
layout.separator()
|
||||
|
||||
|
@ -438,6 +438,8 @@ class USERPREF_PT_system(bpy.types.Panel):
|
||||
col.label(text="OpenGL:")
|
||||
col.prop(system, "gl_clip_alpha", slider=True)
|
||||
col.prop(system, "use_mipmaps")
|
||||
col.label(text="Anisotropic Filtering")
|
||||
col.prop(system, "anisotropic_filter", text="")
|
||||
col.prop(system, "use_vertex_buffer_objects")
|
||||
#Anti-aliasing is disabled as it breaks broder/lasso select
|
||||
#col.prop(system, "use_antialiasing")
|
||||
|
@ -98,6 +98,8 @@ class VIEW3D_HT_header(bpy.types.Header):
|
||||
row.prop(toolsettings, "use_snap_peel_object", text="")
|
||||
elif toolsettings.snap_element == 'FACE':
|
||||
row.prop(toolsettings, "use_snap_project", text="")
|
||||
if toolsettings.use_snap_project and obj.mode == 'EDIT':
|
||||
row.prop(toolsettings, "use_snap_project_self", text="")
|
||||
|
||||
# OpenGL render
|
||||
row = layout.row(align=True)
|
||||
|
@ -12,22 +12,22 @@
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<p class="title"><b>Blender 2.57</b></p>
|
||||
<p class="title"><b>Blender 2.58</b></p>
|
||||
<p><br></p>
|
||||
<p class="header"><b>About</b></p>
|
||||
<p class="body">Welcome to Blender, the free, open source 3D application for modeling, animation, rendering, compositing, video editing and game creation. Blender is available for Linux, Mac OS X, Windows, Solaris and FreeBSD and has a large world-wide community.</p>
|
||||
<p class="body">Blender can be used freely for any purpose, including commercial use and distribution. It's free and open-source software, released under the GNU GPL licence. The entire source code is available on our website.</p>
|
||||
<p class="body">For more information, visit <a href="http://www.blender.org">blender.org</a>.</p>
|
||||
<p><br></p>
|
||||
<p class="header"><b>2.57</b></p>
|
||||
<p class="body">The Blender Foundation and online developer community is proud to present Blender 2.57. This release is the first official stable release of the Blender 2.5 series, and represents the culmination of many years of redesign and development work. <a href="http://www.blender.org/development/release-logs/blender-256-beta/">More information about this release</a>.</p>
|
||||
<p class="header"><b>2.58</b></p>
|
||||
<p class="body">The Blender Foundation and online developer community is proud to present Blender 2.58. This release is the second official stable release of the Blender 2.5 series, and represents the culmination of many years of redesign and development work. <a href="http://www.blender.org/development/release-logs/blender-258/">More information about this release</a>.</p>
|
||||
<p class="body">What to Expect:</p>
|
||||
<p class="body"> • Big improvements - This is our most exciting version to date, already a significant improvement in many ways over 2.49</p>
|
||||
<p class="body"> • Missing/Incomplete Features - Although most of it is there, not all functionality from pre-2.5 versions has been restored yet. Some functionality may be re-implemented a different way.</p>
|
||||
<p class="body"> • Changes - If you're used to the old Blenders, Blender 2.5 may seem quite different at first, but it won't be long before it grows on you even more than before.</p>
|
||||
<p><br></p>
|
||||
<p class="header"><b>Bugs</b></p>
|
||||
<p class="body">Although Blender 2.57 is considered a stable release, you may encounter a bug. If you do, please help us by posting it in the bug tracker or using Help → Report a Bug from inside Blender 2.57. If it wasn’t reported yet, please log in (or register) and fill in detailed information about the error. Please post detailed instructions on how to reproduce it or post a .blend file showcasing the bug.</p>
|
||||
<p class="body">Although Blender 2.58 is considered a stable release, you may encounter a bug. If you do, please help us by posting it in the bug tracker or using Help → Report a Bug from inside Blender 2.58. If it wasn’t reported yet, please log in (or register) and fill in detailed information about the error. Please post detailed instructions on how to reproduce it or post a .blend file showcasing the bug.</p>
|
||||
<p><br></p>
|
||||
<p class="header"><b>Package Contents</b></p>
|
||||
<p class="body">The downloaded Blender package includes:</p>
|
||||
@ -51,7 +51,7 @@
|
||||
<p class="header"><b>Links</b></p>
|
||||
<p class="body">Users:</p>
|
||||
<p class="body"> General information <a href="http://www.blender.org">www.blender.org</a> <br>
|
||||
Full release log <a href="http://www.blender.org/development/release-logs/blender-257/">www.blender.org/development/release-logs/blender-257/</a><br>
|
||||
Full release log <a href="http://www.blender.org/development/release-logs/blender-258/">www.blender.org/development/release-logs/blender-258/</a><br>
|
||||
Tutorials <a href="http://www.blender.org/education-help/">www.blender.org/education-help/</a> <br>
|
||||
Manual <a href="http://wiki.blender.org/index.php/Doc:Manual">wiki.blender.org/index.php/Doc:Manual</a><br>
|
||||
User Forum <a href="http://www.blenderartists.org">www.blenderartists.org</a><br>
|
||||
|
@ -216,7 +216,7 @@ void pose_remove_group(struct Object *ob);
|
||||
/* Assorted Evaluation ----------------- */
|
||||
|
||||
/* Used for the Action Constraint */
|
||||
void what_does_obaction(struct Scene *scene, struct Object *ob, struct Object *workob, struct bPose *pose, struct bAction *act, char groupname[], float cframe);
|
||||
void what_does_obaction(struct Object *ob, struct Object *workob, struct bPose *pose, struct bAction *act, char groupname[], float cframe);
|
||||
|
||||
/* for proxy */
|
||||
void copy_pose_result(struct bPose *to, struct bPose *from);
|
||||
|
@ -97,15 +97,10 @@ extern void makeDispListCurveTypes_forRender(struct Scene *scene, struct Object
|
||||
extern void makeDispListCurveTypes_forOrco(struct Scene *scene, struct Object *ob, struct ListBase *dispbase);
|
||||
extern void makeDispListMBall(struct Scene *scene, struct Object *ob);
|
||||
extern void makeDispListMBall_forRender(struct Scene *scene, struct Object *ob, struct ListBase *dispbase);
|
||||
extern void shadeDispList(struct Scene *scene, struct Base *base);
|
||||
extern void shadeMeshMCol(struct Scene *scene, struct Object *ob, struct Mesh *me);
|
||||
|
||||
int surfindex_displist(DispList *dl, int a, int *b, int *p1, int *p2, int *p3, int *p4);
|
||||
void reshadeall_displist(struct Scene *scene);
|
||||
void filldisplist(struct ListBase *dispbase, struct ListBase *to, int flipnormal);
|
||||
|
||||
void fastshade_free_render(void);
|
||||
|
||||
float calc_taper(struct Scene *scene, struct Object *taperobj, int cur, int tot);
|
||||
|
||||
/* add Orco layer to the displist object which has got derived mesh and return orco */
|
||||
|
@ -273,12 +273,12 @@ endif()
|
||||
|
||||
if(WITH_CODEC_QUICKTIME)
|
||||
list(APPEND INC ../quicktime)
|
||||
list(APPEND INC_SYS ${QUICKTIME_INC})
|
||||
list(APPEND INC_SYS ${QUICKTIME_INCLUDE_DIRS})
|
||||
add_definitions(-DWITH_QUICKTIME)
|
||||
endif()
|
||||
|
||||
if(WITH_CODEC_FFMPEG)
|
||||
list(APPEND INC_SYS ${FFMPEG_INC})
|
||||
list(APPEND INC_SYS ${FFMPEG_INCLUDE_DIRS})
|
||||
add_definitions(-DWITH_FFMPEG)
|
||||
endif()
|
||||
|
||||
|
@ -69,8 +69,9 @@ typedef struct DagNode
|
||||
void * ob;
|
||||
void * first_ancestor;
|
||||
int ancestor_count;
|
||||
unsigned int lay; // accumulated layers of its relations + itself
|
||||
unsigned int lay; // accumulated layers of its relations + itself
|
||||
unsigned int scelay; // layers due to being in scene
|
||||
unsigned int customdata_mask; // customdata mask
|
||||
int lasttime; // if lasttime != DagForest->time, this node was not evaluated yet for flushing
|
||||
int BFS_dist; // BFS distance
|
||||
int DFS_dist; // DFS distance
|
||||
|
@ -1123,7 +1123,7 @@ void copy_pose_result(bPose *to, bPose *from)
|
||||
/* For the calculation of the effects of an Action at the given frame on an object
|
||||
* This is currently only used for the Action Constraint
|
||||
*/
|
||||
void what_does_obaction (Scene *UNUSED(scene), Object *ob, Object *workob, bPose *pose, bAction *act, char groupname[], float cframe)
|
||||
void what_does_obaction (Object *ob, Object *workob, bPose *pose, bAction *act, char groupname[], float cframe)
|
||||
{
|
||||
bActionGroup *agrp= action_groups_find_named(act, groupname);
|
||||
|
||||
|
@ -171,7 +171,12 @@ bMotionPath *animviz_verify_motionpaths(Scene *scene, Object *ob, bPoseChannel *
|
||||
avs= &ob->avs;
|
||||
dst= &ob->mpath;
|
||||
}
|
||||
|
||||
|
||||
/* avoid 0 size allocs */
|
||||
if(avs->path_sf >= avs->path_ef) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* if there is already a motionpath, just return that,
|
||||
* but provided it's settings are ok
|
||||
*/
|
||||
|
@ -1343,8 +1343,12 @@ void vec_roll_to_mat3(float *vec, float roll, float mat[][3])
|
||||
cross_v3_v3v3(axis,target,nor);
|
||||
|
||||
/* was 0.0000000000001, caused bug [#23954], smaller values give unstable
|
||||
* roll when toggling editmode */
|
||||
if (dot_v3v3(axis,axis) > 0.00001f) {
|
||||
* roll when toggling editmode.
|
||||
*
|
||||
* was 0.00001, causes bug [#27675], with 0.00000495,
|
||||
* so a value inbetween these is needed.
|
||||
*/
|
||||
if (dot_v3v3(axis,axis) > 0.000001f) {
|
||||
/* if nor is *not* a multiple of target ... */
|
||||
normalize_v3(axis);
|
||||
|
||||
|
@ -154,7 +154,6 @@ static void clear_global(void)
|
||||
{
|
||||
// extern short winqueue_break; /* screen.c */
|
||||
|
||||
fastshade_free_render(); /* lamps hang otherwise */
|
||||
free_main(G.main); /* free all lib data */
|
||||
|
||||
// free_vertexpaint();
|
||||
|
@ -424,7 +424,7 @@ void constraint_mat_convertspace (Object *ob, bPoseChannel *pchan, float mat[][4
|
||||
/* ------------ General Target Matrix Tools ---------- */
|
||||
|
||||
/* function that sets the given matrix based on given vertex group in mesh */
|
||||
static void contarget_get_mesh_mat (Scene *scene, Object *ob, const char *substring, float mat[][4])
|
||||
static void contarget_get_mesh_mat (Object *ob, const char *substring, float mat[][4])
|
||||
{
|
||||
DerivedMesh *dm = NULL;
|
||||
Mesh *me= ob->data;
|
||||
@ -449,16 +449,9 @@ static void contarget_get_mesh_mat (Scene *scene, Object *ob, const char *substr
|
||||
freeDM= 1;
|
||||
}
|
||||
else {
|
||||
/* when not in EditMode, use the 'final' derived mesh
|
||||
* - check if the custom data masks for derivedFinal mean that we can just use that
|
||||
* (this is more effficient + sufficient for most cases)
|
||||
*/
|
||||
if (!(ob->lastDataMask & CD_MASK_MDEFORMVERT)) {
|
||||
dm = mesh_get_derived_final(scene, ob, CD_MASK_MDEFORMVERT);
|
||||
freeDM= 1;
|
||||
}
|
||||
else
|
||||
dm = (DerivedMesh *)ob->derivedFinal;
|
||||
/* when not in EditMode, use the 'final' derived mesh, depsgraph
|
||||
* ensures we build with CD_MDEFORMVERT layer */
|
||||
dm = (DerivedMesh *)ob->derivedFinal;
|
||||
}
|
||||
|
||||
/* only continue if there's a valid DerivedMesh */
|
||||
@ -587,7 +580,7 @@ static void contarget_get_lattice_mat (Object *ob, const char *substring, float
|
||||
|
||||
/* generic function to get the appropriate matrix for most target cases */
|
||||
/* The cases where the target can be object data have not been implemented */
|
||||
static void constraint_target_to_mat4 (Scene *scene, Object *ob, const char *substring, float mat[][4], short from, short to, float headtail)
|
||||
static void constraint_target_to_mat4 (Object *ob, const char *substring, float mat[][4], short from, short to, float headtail)
|
||||
{
|
||||
/* Case OBJECT */
|
||||
if (!strlen(substring)) {
|
||||
@ -604,7 +597,7 @@ static void constraint_target_to_mat4 (Scene *scene, Object *ob, const char *sub
|
||||
* way as constraints can only really affect things on object/bone level.
|
||||
*/
|
||||
else if (ob->type == OB_MESH) {
|
||||
contarget_get_mesh_mat(scene, ob, substring, mat);
|
||||
contarget_get_mesh_mat(ob, substring, mat);
|
||||
constraint_mat_convertspace(ob, NULL, mat, from, to);
|
||||
}
|
||||
else if (ob->type == OB_LATTICE) {
|
||||
@ -684,10 +677,10 @@ static bConstraintTypeInfo CTI_CONSTRNAME = {
|
||||
/* This function should be used for the get_target_matrix member of all
|
||||
* constraints that are not picky about what happens to their target matrix.
|
||||
*/
|
||||
static void default_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraintTarget *ct, float UNUSED(ctime))
|
||||
static void default_get_tarmat (bConstraint *con, bConstraintOb *UNUSED(cob), bConstraintTarget *ct, float UNUSED(ctime))
|
||||
{
|
||||
if (VALID_CONS_TARGET(ct))
|
||||
constraint_target_to_mat4(cob->scene, ct->tar, ct->subtarget, ct->matrix, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail);
|
||||
constraint_target_to_mat4(ct->tar, ct->subtarget, ct->matrix, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail);
|
||||
else if (ct)
|
||||
unit_m4(ct->matrix);
|
||||
}
|
||||
@ -1159,7 +1152,7 @@ static void kinematic_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstra
|
||||
bKinematicConstraint *data= con->data;
|
||||
|
||||
if (VALID_CONS_TARGET(ct))
|
||||
constraint_target_to_mat4(cob->scene, ct->tar, ct->subtarget, ct->matrix, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail);
|
||||
constraint_target_to_mat4(ct->tar, ct->subtarget, ct->matrix, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail);
|
||||
else if (ct) {
|
||||
if (data->flag & CONSTRAINT_IK_AUTO) {
|
||||
Object *ob= cob->ob;
|
||||
@ -2046,7 +2039,7 @@ static void pycon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraintT
|
||||
/* firstly calculate the matrix the normal way, then let the py-function override
|
||||
* this matrix if it needs to do so
|
||||
*/
|
||||
constraint_target_to_mat4(cob->scene, ct->tar, ct->subtarget, ct->matrix, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail);
|
||||
constraint_target_to_mat4(ct->tar, ct->subtarget, ct->matrix, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail);
|
||||
|
||||
/* only execute target calculation if allowed */
|
||||
#ifdef WITH_PYTHON
|
||||
@ -2165,7 +2158,7 @@ static void actcon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraint
|
||||
unit_m4(ct->matrix);
|
||||
|
||||
/* get the transform matrix of the target */
|
||||
constraint_target_to_mat4(cob->scene, ct->tar, ct->subtarget, tempmat, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail);
|
||||
constraint_target_to_mat4(ct->tar, ct->subtarget, tempmat, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail);
|
||||
|
||||
/* determine where in transform range target is */
|
||||
/* data->type is mapped as follows for backwards compatability:
|
||||
@ -2216,7 +2209,7 @@ static void actcon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraint
|
||||
tchan->rotmode= pchan->rotmode;
|
||||
|
||||
/* evaluate action using workob (it will only set the PoseChannel in question) */
|
||||
what_does_obaction(cob->scene, cob->ob, &workob, pose, data->act, pchan->name, t);
|
||||
what_does_obaction(cob->ob, &workob, pose, data->act, pchan->name, t);
|
||||
|
||||
/* convert animation to matrices for use here */
|
||||
pchan_calc_mat(tchan);
|
||||
@ -2230,7 +2223,7 @@ static void actcon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraint
|
||||
|
||||
/* evaluate using workob */
|
||||
// FIXME: we don't have any consistent standards on limiting effects on object...
|
||||
what_does_obaction(cob->scene, cob->ob, &workob, NULL, data->act, NULL, t);
|
||||
what_does_obaction(cob->ob, &workob, NULL, data->act, NULL, t);
|
||||
object_to_mat4(&workob, ct->matrix);
|
||||
}
|
||||
else {
|
||||
|
@ -372,6 +372,9 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, O
|
||||
node2->first_ancestor = ob;
|
||||
node2->ancestor_count += 1;
|
||||
}
|
||||
|
||||
/* also build a custom data mask for dependencies that need certain layers */
|
||||
node->customdata_mask= 0;
|
||||
|
||||
if (ob->type == OB_ARMATURE) {
|
||||
if (ob->pose){
|
||||
@ -451,8 +454,12 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, O
|
||||
case PARSKEL:
|
||||
dag_add_relation(dag,node2,node,DAG_RL_DATA_DATA|DAG_RL_OB_OB, "Parent");
|
||||
break;
|
||||
case PARVERT1: case PARVERT3: case PARBONE:
|
||||
case PARVERT1: case PARVERT3:
|
||||
dag_add_relation(dag,node2,node,DAG_RL_DATA_OB|DAG_RL_OB_OB, "Vertex Parent");
|
||||
node2->customdata_mask |= CD_MASK_ORIGINDEX;
|
||||
break;
|
||||
case PARBONE:
|
||||
dag_add_relation(dag,node2,node,DAG_RL_DATA_OB|DAG_RL_OB_OB, "Bone Parent");
|
||||
break;
|
||||
default:
|
||||
if(ob->parent->type==OB_LATTICE)
|
||||
@ -647,8 +654,11 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, O
|
||||
if (ELEM(con->type, CONSTRAINT_TYPE_FOLLOWPATH, CONSTRAINT_TYPE_CLAMPTO))
|
||||
dag_add_relation(dag, node2, node, DAG_RL_DATA_OB|DAG_RL_OB_OB, cti->name);
|
||||
else {
|
||||
if (ELEM3(obt->type, OB_ARMATURE, OB_MESH, OB_LATTICE) && (ct->subtarget[0]))
|
||||
if (ELEM3(obt->type, OB_ARMATURE, OB_MESH, OB_LATTICE) && (ct->subtarget[0])) {
|
||||
dag_add_relation(dag, node2, node, DAG_RL_DATA_OB|DAG_RL_OB_OB, cti->name);
|
||||
if (obt->type == OB_MESH)
|
||||
node2->customdata_mask |= CD_MASK_MDEFORMVERT;
|
||||
}
|
||||
else
|
||||
dag_add_relation(dag, node2, node, DAG_RL_OB_OB, cti->name);
|
||||
}
|
||||
@ -722,6 +732,9 @@ struct DagForest *build_dag(Main *bmain, Scene *sce, short mask)
|
||||
itA->node->color |= itA->type;
|
||||
}
|
||||
}
|
||||
|
||||
/* also flush custom data mask */
|
||||
((Object*)node->ob)->customdata_mask= node->customdata_mask;
|
||||
}
|
||||
}
|
||||
/* now set relations equal, so that when only one parent changes, the correct recalcs are found */
|
||||
|
@ -65,9 +65,6 @@
|
||||
#include "BKE_lattice.h"
|
||||
#include "BKE_modifier.h"
|
||||
|
||||
#include "RE_pipeline.h"
|
||||
#include "RE_shader_ext.h"
|
||||
|
||||
#include "BLO_sys_types.h" // for intptr_t support
|
||||
|
||||
#include "ED_curve.h" /* for BKE_curve_nurbs */
|
||||
@ -286,499 +283,6 @@ int surfindex_displist(DispList *dl, int a, int *b, int *p1, int *p2, int *p3, i
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* ***************************** shade displist. note colors now are in rgb(a) order ******************** */
|
||||
|
||||
/* create default shade input... save cpu cycles with ugly global */
|
||||
/* XXXX bad code warning: local ShadeInput initialize... */
|
||||
static ShadeInput shi;
|
||||
static void init_fastshade_shadeinput(Render *re)
|
||||
{
|
||||
memset(&shi, 0, sizeof(ShadeInput));
|
||||
shi.lay= RE_GetScene(re)->lay;
|
||||
shi.view[2]= -1.0f;
|
||||
shi.passflag= SCE_PASS_COMBINED;
|
||||
shi.combinedflag= -1;
|
||||
}
|
||||
|
||||
static Render *fastshade_get_render(Scene *UNUSED(scene))
|
||||
{
|
||||
// XXX 2.5: this crashes combined with previewrender
|
||||
// due to global R so disabled for now
|
||||
#if 0
|
||||
/* XXX ugly global still, but we can't do preview while rendering */
|
||||
if(G.rendering==0) {
|
||||
|
||||
Render *re= RE_GetRender("_Shade View_");
|
||||
if(re==NULL) {
|
||||
re= RE_NewRender("_Shade View_");
|
||||
|
||||
RE_Database_Baking(re, scene, 0, 0); /* 0= no faces */
|
||||
}
|
||||
return re;
|
||||
}
|
||||
#endif
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* called on file reading */
|
||||
void fastshade_free_render(void)
|
||||
{
|
||||
Render *re= RE_GetRender("_Shade View_");
|
||||
|
||||
if(re) {
|
||||
RE_Database_Free(re);
|
||||
RE_FreeRender(re);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void fastshade_customdata(CustomData *fdata, int a, int j, Material *ma)
|
||||
{
|
||||
CustomDataLayer *layer;
|
||||
MTFace *mtface;
|
||||
int index, needuv= ma->texco & TEXCO_UV;
|
||||
char *vertcol;
|
||||
|
||||
shi.totuv= 0;
|
||||
shi.totcol= 0;
|
||||
|
||||
for(index=0; index<fdata->totlayer; index++) {
|
||||
layer= &fdata->layers[index];
|
||||
|
||||
if(needuv && layer->type == CD_MTFACE && shi.totuv < MAX_MTFACE) {
|
||||
mtface= &((MTFace*)layer->data)[a];
|
||||
|
||||
shi.uv[shi.totuv].uv[0]= 2.0f*mtface->uv[j][0]-1.0f;
|
||||
shi.uv[shi.totuv].uv[1]= 2.0f*mtface->uv[j][1]-1.0f;
|
||||
shi.uv[shi.totuv].uv[2]= 1.0f;
|
||||
|
||||
shi.uv[shi.totuv].name= layer->name;
|
||||
shi.totuv++;
|
||||
}
|
||||
else if(layer->type == CD_MCOL && shi.totcol < MAX_MCOL) {
|
||||
vertcol= (char*)&((MCol*)layer->data)[a*4 + j];
|
||||
|
||||
shi.col[shi.totcol].col[0]= ((float)vertcol[3])/255.0f;
|
||||
shi.col[shi.totcol].col[1]= ((float)vertcol[2])/255.0f;
|
||||
shi.col[shi.totcol].col[2]= ((float)vertcol[1])/255.0f;
|
||||
|
||||
shi.col[shi.totcol].name= layer->name;
|
||||
shi.totcol++;
|
||||
}
|
||||
}
|
||||
|
||||
if(needuv && shi.totuv == 0)
|
||||
VECCOPY(shi.uv[0].uv, shi.lo);
|
||||
|
||||
if(shi.totcol)
|
||||
VECCOPY(shi.vcol, shi.col[0].col);
|
||||
}
|
||||
|
||||
static void fastshade(float *co, float *nor, float *orco, Material *ma, char *col1, char *col2)
|
||||
{
|
||||
ShadeResult shr;
|
||||
int a;
|
||||
|
||||
VECCOPY(shi.co, co);
|
||||
shi.vn[0]= -nor[0];
|
||||
shi.vn[1]= -nor[1];
|
||||
shi.vn[2]= -nor[2];
|
||||
VECCOPY(shi.vno, shi.vn);
|
||||
VECCOPY(shi.facenor, shi.vn);
|
||||
|
||||
if(ma->texco) {
|
||||
VECCOPY(shi.lo, orco);
|
||||
|
||||
if(ma->texco & TEXCO_GLOB) {
|
||||
VECCOPY(shi.gl, shi.lo);
|
||||
}
|
||||
if(ma->texco & TEXCO_WINDOW) {
|
||||
VECCOPY(shi.winco, shi.lo);
|
||||
}
|
||||
if(ma->texco & TEXCO_STICKY) {
|
||||
VECCOPY(shi.sticky, shi.lo);
|
||||
}
|
||||
if(ma->texco & TEXCO_OBJECT) {
|
||||
VECCOPY(shi.co, shi.lo);
|
||||
}
|
||||
if(ma->texco & TEXCO_NORM) {
|
||||
VECCOPY(shi.orn, shi.vn);
|
||||
}
|
||||
if(ma->texco & TEXCO_REFL) {
|
||||
float inp= 2.0f * (shi.vn[2]);
|
||||
shi.ref[0]= (inp*shi.vn[0]);
|
||||
shi.ref[1]= (inp*shi.vn[1]);
|
||||
shi.ref[2]= (-1.0f + inp*shi.vn[2]);
|
||||
}
|
||||
}
|
||||
|
||||
shi.mat= ma; /* set each time... node shaders change it */
|
||||
RE_shade_external(NULL, &shi, &shr);
|
||||
|
||||
a= 256.0f*(shr.combined[0]);
|
||||
col1[0]= CLAMPIS(a, 0, 255);
|
||||
a= 256.0f*(shr.combined[1]);
|
||||
col1[1]= CLAMPIS(a, 0, 255);
|
||||
a= 256.0f*(shr.combined[2]);
|
||||
col1[2]= CLAMPIS(a, 0, 255);
|
||||
|
||||
if(col2) {
|
||||
shi.vn[0]= -shi.vn[0];
|
||||
shi.vn[1]= -shi.vn[1];
|
||||
shi.vn[2]= -shi.vn[2];
|
||||
|
||||
shi.mat= ma; /* set each time... node shaders change it */
|
||||
RE_shade_external(NULL, &shi, &shr);
|
||||
|
||||
a= 256.0f*(shr.combined[0]);
|
||||
col2[0]= CLAMPIS(a, 0, 255);
|
||||
a= 256.0f*(shr.combined[1]);
|
||||
col2[1]= CLAMPIS(a, 0, 255);
|
||||
a= 256.0f*(shr.combined[2]);
|
||||
col2[2]= CLAMPIS(a, 0, 255);
|
||||
}
|
||||
}
|
||||
|
||||
static void init_fastshade_for_ob(Render *re, Object *ob, int *need_orco_r, float mat[4][4], float imat[3][3])
|
||||
{
|
||||
float tmat[4][4];
|
||||
float amb[3]= {0.0f, 0.0f, 0.0f};
|
||||
int a;
|
||||
|
||||
/* initialize globals in render */
|
||||
RE_shade_external(re, NULL, NULL);
|
||||
|
||||
/* initialize global here */
|
||||
init_fastshade_shadeinput(re);
|
||||
|
||||
RE_DataBase_GetView(re, tmat);
|
||||
mul_m4_m4m4(mat, ob->obmat, tmat);
|
||||
|
||||
invert_m4_m4(tmat, mat);
|
||||
copy_m3_m4(imat, tmat);
|
||||
if(ob->transflag & OB_NEG_SCALE) mul_m3_fl(imat, -1.0);
|
||||
|
||||
if (need_orco_r) *need_orco_r= 0;
|
||||
for(a=0; a<ob->totcol; a++) {
|
||||
Material *ma= give_current_material(ob, a+1);
|
||||
if(ma) {
|
||||
init_render_material(ma, 0, amb);
|
||||
|
||||
if(ma->texco & TEXCO_ORCO) {
|
||||
if (need_orco_r) *need_orco_r= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void end_fastshade_for_ob(Object *ob)
|
||||
{
|
||||
int a;
|
||||
|
||||
for(a=0; a<ob->totcol; a++) {
|
||||
Material *ma= give_current_material(ob, a+1);
|
||||
if(ma)
|
||||
end_render_material(ma);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void mesh_create_shadedColors(Render *re, Object *ob, int onlyForMesh, unsigned int **col1_r, unsigned int **col2_r)
|
||||
{
|
||||
Mesh *me= ob->data;
|
||||
DerivedMesh *dm;
|
||||
MVert *mvert;
|
||||
MFace *mface;
|
||||
unsigned int *col1, *col2;
|
||||
float *orco, *vnors, *nors, imat[3][3], mat[4][4], vec[3];
|
||||
int a, i, need_orco, totface, totvert;
|
||||
CustomDataMask dataMask = CD_MASK_BAREMESH | CD_MASK_MCOL
|
||||
| CD_MASK_MTFACE | CD_MASK_NORMAL;
|
||||
|
||||
|
||||
init_fastshade_for_ob(re, ob, &need_orco, mat, imat);
|
||||
|
||||
if(need_orco)
|
||||
dataMask |= CD_MASK_ORCO;
|
||||
|
||||
if (onlyForMesh)
|
||||
dm = mesh_get_derived_deform(RE_GetScene(re), ob, dataMask);
|
||||
else
|
||||
dm = mesh_get_derived_final(RE_GetScene(re), ob, dataMask);
|
||||
|
||||
mvert = dm->getVertArray(dm);
|
||||
mface = dm->getFaceArray(dm);
|
||||
nors = dm->getFaceDataArray(dm, CD_NORMAL);
|
||||
totvert = dm->getNumVerts(dm);
|
||||
totface = dm->getNumFaces(dm);
|
||||
orco= dm->getVertDataArray(dm, CD_ORCO);
|
||||
|
||||
if (onlyForMesh) {
|
||||
col1 = *col1_r;
|
||||
col2 = NULL;
|
||||
} else {
|
||||
*col1_r = col1 = MEM_mallocN(sizeof(*col1)*totface*4, "col1");
|
||||
|
||||
if (col2_r && (me->flag & ME_TWOSIDED))
|
||||
col2 = MEM_mallocN(sizeof(*col2)*totface*4, "col2");
|
||||
else
|
||||
col2 = NULL;
|
||||
|
||||
if (col2_r) *col2_r = col2;
|
||||
}
|
||||
|
||||
/* vertexnormals */
|
||||
vnors= MEM_mallocN(totvert*3*sizeof(float), "vnors disp");
|
||||
for (a=0; a<totvert; a++) {
|
||||
MVert *mv = &mvert[a];
|
||||
float *vn= &vnors[a*3];
|
||||
float xn= mv->no[0];
|
||||
float yn= mv->no[1];
|
||||
float zn= mv->no[2];
|
||||
|
||||
/* transpose ! */
|
||||
vn[0]= imat[0][0]*xn+imat[0][1]*yn+imat[0][2]*zn;
|
||||
vn[1]= imat[1][0]*xn+imat[1][1]*yn+imat[1][2]*zn;
|
||||
vn[2]= imat[2][0]*xn+imat[2][1]*yn+imat[2][2]*zn;
|
||||
normalize_v3(vn);
|
||||
}
|
||||
|
||||
for (i=0; i<totface; i++) {
|
||||
MFace *mf= &mface[i];
|
||||
Material *ma= give_current_material(ob, mf->mat_nr+1);
|
||||
int j, vidx[4], nverts= mf->v4?4:3;
|
||||
unsigned char *col1base= (unsigned char*) &col1[i*4];
|
||||
unsigned char *col2base= (unsigned char*) (col2?&col2[i*4]:NULL);
|
||||
float nor[3], n1[3];
|
||||
|
||||
if(ma==NULL) ma= &defmaterial;
|
||||
|
||||
vidx[0]= mf->v1;
|
||||
vidx[1]= mf->v2;
|
||||
vidx[2]= mf->v3;
|
||||
vidx[3]= mf->v4;
|
||||
|
||||
if (nors) {
|
||||
VECCOPY(nor, &nors[i*3]);
|
||||
} else {
|
||||
if (mf->v4)
|
||||
normal_quad_v3( nor,mvert[mf->v1].co, mvert[mf->v2].co, mvert[mf->v3].co, mvert[mf->v4].co);
|
||||
else
|
||||
normal_tri_v3( nor,mvert[mf->v1].co, mvert[mf->v2].co, mvert[mf->v3].co);
|
||||
}
|
||||
|
||||
n1[0]= imat[0][0]*nor[0]+imat[0][1]*nor[1]+imat[0][2]*nor[2];
|
||||
n1[1]= imat[1][0]*nor[0]+imat[1][1]*nor[1]+imat[1][2]*nor[2];
|
||||
n1[2]= imat[2][0]*nor[0]+imat[2][1]*nor[1]+imat[2][2]*nor[2];
|
||||
normalize_v3(n1);
|
||||
|
||||
for (j=0; j<nverts; j++) {
|
||||
MVert *mv= &mvert[vidx[j]];
|
||||
char *col1= (char*)&col1base[j*4];
|
||||
char *col2= (char*)(col2base?&col2base[j*4]:NULL);
|
||||
float *vn = (mf->flag & ME_SMOOTH)?&vnors[3*vidx[j]]:n1;
|
||||
|
||||
mul_v3_m4v3(vec, mat, mv->co);
|
||||
|
||||
mul_v3_v3fl(vec, vn, 0.001f);
|
||||
|
||||
fastshade_customdata(&dm->faceData, i, j, ma);
|
||||
fastshade(vec, vn, orco?&orco[vidx[j]*3]:mv->co, ma, col1, col2);
|
||||
}
|
||||
}
|
||||
MEM_freeN(vnors);
|
||||
|
||||
dm->release(dm);
|
||||
|
||||
end_fastshade_for_ob(ob);
|
||||
}
|
||||
|
||||
void shadeMeshMCol(Scene *scene, Object *ob, Mesh *me)
|
||||
{
|
||||
Render *re= fastshade_get_render(scene);
|
||||
int a;
|
||||
char *cp;
|
||||
unsigned int *mcol= (unsigned int*)me->mcol;
|
||||
|
||||
if(re) {
|
||||
mesh_create_shadedColors(re, ob, 1, &mcol, NULL);
|
||||
me->mcol= (MCol*)mcol;
|
||||
|
||||
/* swap bytes */
|
||||
for(cp= (char *)me->mcol, a= 4*me->totface; a>0; a--, cp+=4) {
|
||||
SWAP(char, cp[0], cp[3]);
|
||||
SWAP(char, cp[1], cp[2]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* has base pointer, to check for layer */
|
||||
/* called from drawobject.c */
|
||||
void shadeDispList(Scene *scene, Base *base)
|
||||
{
|
||||
Object *ob= base->object;
|
||||
DispList *dl, *dlob;
|
||||
Material *ma = NULL;
|
||||
Render *re;
|
||||
float imat[3][3], mat[4][4], vec[3];
|
||||
float *fp, *nor, n1[3];
|
||||
unsigned int *col1;
|
||||
int a, need_orco;
|
||||
|
||||
re= fastshade_get_render(scene);
|
||||
if(re==NULL)
|
||||
return;
|
||||
|
||||
dl = find_displist(&ob->disp, DL_VERTCOL);
|
||||
if (dl) {
|
||||
BLI_remlink(&ob->disp, dl);
|
||||
free_disp_elem(dl);
|
||||
}
|
||||
|
||||
if(ob->type==OB_MESH) {
|
||||
dl= MEM_callocN(sizeof(DispList), "displistshade");
|
||||
dl->type= DL_VERTCOL;
|
||||
|
||||
mesh_create_shadedColors(re, ob, 0, &dl->col1, &dl->col2);
|
||||
|
||||
/* add dl to ob->disp after mesh_create_shadedColors, because it
|
||||
might indirectly free ob->disp */
|
||||
BLI_addtail(&ob->disp, dl);
|
||||
}
|
||||
else {
|
||||
|
||||
init_fastshade_for_ob(re, ob, &need_orco, mat, imat);
|
||||
|
||||
if (ELEM3(ob->type, OB_CURVE, OB_SURF, OB_FONT)) {
|
||||
|
||||
/* now we need the normals */
|
||||
dl= ob->disp.first;
|
||||
|
||||
while(dl) {
|
||||
dlob= MEM_callocN(sizeof(DispList), "displistshade");
|
||||
BLI_addtail(&ob->disp, dlob);
|
||||
dlob->type= DL_VERTCOL;
|
||||
dlob->parts= dl->parts;
|
||||
dlob->nr= dl->nr;
|
||||
|
||||
if(dl->type==DL_INDEX3) {
|
||||
col1= dlob->col1= MEM_mallocN(sizeof(int)*dl->nr, "col1");
|
||||
}
|
||||
else {
|
||||
col1= dlob->col1= MEM_mallocN(sizeof(int)*dl->parts*dl->nr, "col1");
|
||||
}
|
||||
|
||||
|
||||
ma= give_current_material(ob, dl->col+1);
|
||||
if(ma==NULL) ma= &defmaterial;
|
||||
|
||||
if(dl->type==DL_INDEX3) {
|
||||
if(dl->nors) {
|
||||
/* there's just one normal */
|
||||
n1[0]= imat[0][0]*dl->nors[0]+imat[0][1]*dl->nors[1]+imat[0][2]*dl->nors[2];
|
||||
n1[1]= imat[1][0]*dl->nors[0]+imat[1][1]*dl->nors[1]+imat[1][2]*dl->nors[2];
|
||||
n1[2]= imat[2][0]*dl->nors[0]+imat[2][1]*dl->nors[1]+imat[2][2]*dl->nors[2];
|
||||
normalize_v3(n1);
|
||||
|
||||
fp= dl->verts;
|
||||
|
||||
a= dl->nr;
|
||||
while(a--) {
|
||||
mul_v3_m4v3(vec, mat, fp);
|
||||
|
||||
fastshade(vec, n1, fp, ma, (char *)col1, NULL);
|
||||
|
||||
fp+= 3; col1++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(dl->type==DL_SURF) {
|
||||
if(dl->nors) {
|
||||
a= dl->nr*dl->parts;
|
||||
fp= dl->verts;
|
||||
nor= dl->nors;
|
||||
|
||||
while(a--) {
|
||||
mul_v3_m4v3(vec, mat, fp);
|
||||
|
||||
n1[0]= imat[0][0]*nor[0]+imat[0][1]*nor[1]+imat[0][2]*nor[2];
|
||||
n1[1]= imat[1][0]*nor[0]+imat[1][1]*nor[1]+imat[1][2]*nor[2];
|
||||
n1[2]= imat[2][0]*nor[0]+imat[2][1]*nor[1]+imat[2][2]*nor[2];
|
||||
normalize_v3(n1);
|
||||
|
||||
fastshade(vec, n1, fp, ma, (char *)col1, NULL);
|
||||
|
||||
fp+= 3; nor+= 3; col1++;
|
||||
}
|
||||
}
|
||||
}
|
||||
dl= dl->next;
|
||||
}
|
||||
}
|
||||
else if(ob->type==OB_MBALL) {
|
||||
/* there are normals already */
|
||||
dl= ob->disp.first;
|
||||
|
||||
while(dl) {
|
||||
|
||||
if(dl->type==DL_INDEX4) {
|
||||
if(dl->nors) {
|
||||
if(dl->col1) MEM_freeN(dl->col1);
|
||||
col1= dl->col1= MEM_mallocN(sizeof(int)*dl->nr, "col1");
|
||||
|
||||
ma= give_current_material(ob, dl->col+1);
|
||||
if(ma==NULL) ma= &defmaterial;
|
||||
|
||||
fp= dl->verts;
|
||||
nor= dl->nors;
|
||||
|
||||
a= dl->nr;
|
||||
while(a--) {
|
||||
mul_v3_m4v3(vec, mat, fp);
|
||||
|
||||
/* transpose ! */
|
||||
n1[0]= imat[0][0]*nor[0]+imat[0][1]*nor[1]+imat[0][2]*nor[2];
|
||||
n1[1]= imat[1][0]*nor[0]+imat[1][1]*nor[1]+imat[1][2]*nor[2];
|
||||
n1[2]= imat[2][0]*nor[0]+imat[2][1]*nor[1]+imat[2][2]*nor[2];
|
||||
normalize_v3(n1);
|
||||
|
||||
fastshade(vec, n1, fp, ma, (char *)col1, NULL);
|
||||
|
||||
fp+= 3; col1++; nor+= 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
dl= dl->next;
|
||||
}
|
||||
}
|
||||
|
||||
end_fastshade_for_ob(ob);
|
||||
}
|
||||
}
|
||||
|
||||
/* frees render and shade part of displists */
|
||||
/* note: dont do a shade again, until a redraw happens */
|
||||
void reshadeall_displist(Scene *scene)
|
||||
{
|
||||
Base *base;
|
||||
Object *ob;
|
||||
|
||||
fastshade_free_render();
|
||||
|
||||
for(base= scene->base.first; base; base= base->next) {
|
||||
ob= base->object;
|
||||
|
||||
if(ELEM5(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL))
|
||||
freedisplist(&ob->disp);
|
||||
|
||||
if(base->lay & scene->lay) {
|
||||
/* Metaballs have standard displist at the Object */
|
||||
if(ob->type==OB_MBALL) shadeDispList(scene, base);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* ****************** make displists ********************* */
|
||||
|
||||
static void curve_to_displist(Curve *cu, ListBase *nubase, ListBase *dispbase, int forRender)
|
||||
|
@ -32,8 +32,10 @@
|
||||
*/
|
||||
|
||||
|
||||
#ifdef WITH_PYTHON
|
||||
#include <Python.h>
|
||||
#if 0 /* pynodes commented for now */
|
||||
# ifdef WITH_PYTHON
|
||||
# include <Python.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include "MEM_guardedalloc.h"
|
||||
|
@ -2641,11 +2641,12 @@ void object_handle_update(Scene *scene, Object *ob)
|
||||
|
||||
#else /* ensure CD_MASK_BAREMESH for now */
|
||||
EditMesh *em = (ob == scene->obedit)? BKE_mesh_get_editmesh(ob->data): NULL;
|
||||
unsigned int data_mask= scene->customdata_mask | ob->customdata_mask | CD_MASK_BAREMESH;
|
||||
if(em) {
|
||||
makeDerivedMesh(scene, ob, em, scene->customdata_mask | CD_MASK_BAREMESH); /* was CD_MASK_BAREMESH */
|
||||
makeDerivedMesh(scene, ob, em, data_mask); /* was CD_MASK_BAREMESH */
|
||||
BKE_mesh_end_editmesh(ob->data, em);
|
||||
} else
|
||||
makeDerivedMesh(scene, ob, NULL, scene->customdata_mask | CD_MASK_BAREMESH);
|
||||
makeDerivedMesh(scene, ob, NULL, data_mask);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
@ -137,7 +137,7 @@ set(SRC
|
||||
)
|
||||
|
||||
if(WITH_BINRELOC)
|
||||
list(APPEND INC_SYS "${BINRELOC_INC}")
|
||||
list(APPEND INC_SYS "${BINRELOC_INCLUDE_DIRS}")
|
||||
add_definitions(-DWITH_BINRELOC)
|
||||
endif()
|
||||
|
||||
|
@ -4321,6 +4321,7 @@ static void direct_link_object(FileData *fd, Object *ob)
|
||||
MEM_freeN(hook);
|
||||
}
|
||||
|
||||
ob->customdata_mask= 0;
|
||||
ob->bb= NULL;
|
||||
ob->derivedDeform= NULL;
|
||||
ob->derivedFinal= NULL;
|
||||
|
@ -50,7 +50,7 @@ set(SRC
|
||||
)
|
||||
|
||||
if(WITH_CODEC_QUICKTIME)
|
||||
list(APPEND INC_SYS ${QUICKTIME_INC})
|
||||
list(APPEND INC_SYS ${QUICKTIME_INCLUDE_DIRS})
|
||||
add_definitions(-DWITH_QUICKTIME)
|
||||
endif()
|
||||
|
||||
|
@ -113,9 +113,10 @@ LIBIMPORT void interlace(struct ImBuf *ib);
|
||||
LIBIMPORT void IMB_rectcpy(struct ImBuf *dbuf, struct ImBuf *sbuf,
|
||||
int destx, int desty, int srcx, int srcy, int width, int height);
|
||||
|
||||
LIBIMPORT void IMB_rectfill(struct ImBuf *drect, float col[4]);
|
||||
LIBIMPORT void IMB_rectfill(struct ImBuf *drect, const float col[4]);
|
||||
LIBIMPORT void IMB_rectfill_area(struct ImBuf *ibuf, float *col, int x1, int y1, int x2, int y2);
|
||||
LIBIMPORT void buf_rectfill_area(unsigned char *rect, float *rectf, int width, int height, float *col, int x1, int y1, int x2, int y2);
|
||||
LIBIMPORT void IMB_rectfill_alpha(struct ImBuf *drect, const float value);
|
||||
|
||||
#endif /* IFF_H */
|
||||
|
||||
|
@ -53,12 +53,12 @@
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
// use this for retrieving bone names, since these must be unique
|
||||
// first try node name, if not available (since is optional), fall back to original id
|
||||
template<class T>
|
||||
static const char *bc_get_joint_name(T *node)
|
||||
{
|
||||
const std::string& id = node->getOriginalId();
|
||||
return id.size() ? id.c_str() : node->getName().c_str();
|
||||
const std::string& id = node->getName();
|
||||
return id.size() ? id.c_str() : node->getOriginalId().c_str();
|
||||
}
|
||||
|
||||
FCurve *AnimationImporter::create_fcurve(int array_index, const char *rna_path)
|
||||
@ -1134,7 +1134,8 @@ void AnimationImporter::evaluate_transform_at_frame(float mat[4][4], COLLADAFW::
|
||||
|
||||
unit_m4(m);
|
||||
|
||||
if (!evaluate_animation(tm, m, fra, node->getOriginalId().c_str())) {
|
||||
std::string nodename = node->getName().size() ? node->getName() : node->getOriginalId();
|
||||
if (!evaluate_animation(tm, m, fra, nodename.c_str())) {
|
||||
switch (type) {
|
||||
case COLLADAFW::Transformation::ROTATE:
|
||||
dae_rotate_to_mat4(tm, m);
|
||||
|
@ -42,12 +42,12 @@
|
||||
|
||||
#include "ArmatureImporter.h"
|
||||
|
||||
// use this for retrieving bone names, since these must be unique
|
||||
// use node name, or fall back to original id if not present (name is optional)
|
||||
template<class T>
|
||||
static const char *bc_get_joint_name(T *node)
|
||||
{
|
||||
const std::string& id = node->getOriginalId();
|
||||
return id.size() ? id.c_str() : node->getName().c_str();
|
||||
const std::string& id = node->getName();
|
||||
return id.size() ? id.c_str() : node->getOriginalId().c_str();
|
||||
}
|
||||
|
||||
ArmatureImporter::ArmatureImporter(UnitConverter *conv, MeshImporterBase *mesh, AnimationImporterBase *anim, Scene *sce) :
|
||||
|
@ -44,19 +44,19 @@ set(INC_SYS
|
||||
|
||||
if(APPLE)
|
||||
list(APPEND INC_SYS
|
||||
${OPENCOLLADA_INC}/COLLADAStreamWriter
|
||||
${OPENCOLLADA_INC}/COLLADABaseUtils
|
||||
${OPENCOLLADA_INC}/COLLADAFramework
|
||||
${OPENCOLLADA_INC}/COLLADASaxFrameworkLoader
|
||||
${OPENCOLLADA_INC}/GeneratedSaxParser
|
||||
${OPENCOLLADA_INCLUDE_DIR}/COLLADAStreamWriter
|
||||
${OPENCOLLADA_INCLUDE_DIR}/COLLADABaseUtils
|
||||
${OPENCOLLADA_INCLUDE_DIR}/COLLADAFramework
|
||||
${OPENCOLLADA_INCLUDE_DIR}/COLLADASaxFrameworkLoader
|
||||
${OPENCOLLADA_INCLUDE_DIR}/GeneratedSaxParser
|
||||
)
|
||||
else()
|
||||
list(APPEND INC_SYS
|
||||
${OPENCOLLADA_INC}/COLLADAStreamWriter/include
|
||||
${OPENCOLLADA_INC}/COLLADABaseUtils/include
|
||||
${OPENCOLLADA_INC}/COLLADAFramework/include
|
||||
${OPENCOLLADA_INC}/COLLADASaxFrameworkLoader/include
|
||||
${OPENCOLLADA_INC}/GeneratedSaxParser/include
|
||||
${OPENCOLLADA_INCLUDE_DIR}/COLLADAStreamWriter/include
|
||||
${OPENCOLLADA_INCLUDE_DIR}/COLLADABaseUtils/include
|
||||
${OPENCOLLADA_INCLUDE_DIR}/COLLADAFramework/include
|
||||
${OPENCOLLADA_INCLUDE_DIR}/COLLADASaxFrameworkLoader/include
|
||||
${OPENCOLLADA_INCLUDE_DIR}/GeneratedSaxParser/include
|
||||
)
|
||||
endif()
|
||||
|
||||
|
@ -310,7 +310,7 @@ Object* DocumentImporter::create_lamp_object(COLLADAFW::InstanceLight *lamp, Sce
|
||||
return ob;
|
||||
}
|
||||
|
||||
Object* DocumentImporter::create_instance_node(Object *source_ob, COLLADAFW::Node *source_node, COLLADAFW::Node *instance_node, Scene *sce, bool is_library_node)
|
||||
Object* DocumentImporter::create_instance_node(Object *source_ob, COLLADAFW::Node *source_node, COLLADAFW::Node *instance_node, Scene *sce, Object *par_ob, bool is_library_node)
|
||||
{
|
||||
Object *obn = copy_object(source_ob);
|
||||
obn->recalc |= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME;
|
||||
@ -354,10 +354,10 @@ Object* DocumentImporter::create_instance_node(Object *source_ob, COLLADAFW::Nod
|
||||
Object *new_child = NULL;
|
||||
if (inodes.getCount()) { // \todo loop through instance nodes
|
||||
const COLLADAFW::UniqueId& id = inodes[0]->getInstanciatedObjectId();
|
||||
new_child = create_instance_node(object_map[id], node_map[id], child_node, sce, is_library_node);
|
||||
new_child = create_instance_node(object_map[id], node_map[id], child_node, sce, NULL, is_library_node);
|
||||
}
|
||||
else {
|
||||
new_child = create_instance_node(object_map[child_id], child_node, NULL, sce, is_library_node);
|
||||
new_child = create_instance_node(object_map[child_id], child_node, NULL, sce, NULL, is_library_node);
|
||||
}
|
||||
bc_set_parent(new_child, obn, mContext, true);
|
||||
|
||||
@ -368,7 +368,12 @@ Object* DocumentImporter::create_instance_node(Object *source_ob, COLLADAFW::Nod
|
||||
|
||||
// when we have an instance_node, don't return the object, because otherwise
|
||||
// its correct location gets overwritten in write_node(). Fixes bug #26012.
|
||||
if(instance_node) return NULL;
|
||||
if(instance_node) {
|
||||
if (par_ob && obn)
|
||||
bc_set_parent(obn, par_ob, mContext);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
else return obn;
|
||||
}
|
||||
|
||||
@ -393,11 +398,11 @@ void DocumentImporter::write_node (COLLADAFW::Node *node, COLLADAFW::Node *paren
|
||||
COLLADAFW::InstanceLightPointerArray &lamp = node->getInstanceLights();
|
||||
COLLADAFW::InstanceControllerPointerArray &controller = node->getInstanceControllers();
|
||||
COLLADAFW::InstanceNodePointerArray &inst_node = node->getInstanceNodes();
|
||||
int geom_done = 0;
|
||||
int camera_done = 0;
|
||||
int lamp_done = 0;
|
||||
int controller_done = 0;
|
||||
int inst_done = 0;
|
||||
size_t geom_done = 0;
|
||||
size_t camera_done = 0;
|
||||
size_t lamp_done = 0;
|
||||
size_t controller_done = 0;
|
||||
size_t inst_done = 0;
|
||||
|
||||
// XXX linking object with the first <instance_geometry>, though a node may have more of them...
|
||||
// maybe join multiple <instance_...> meshes into 1, and link object with it? not sure...
|
||||
@ -431,7 +436,7 @@ void DocumentImporter::write_node (COLLADAFW::Node *node, COLLADAFW::Node *paren
|
||||
Object *source_ob = object_map[node_id];
|
||||
COLLADAFW::Node *source_node = node_map[node_id];
|
||||
|
||||
ob = create_instance_node(source_ob, source_node, node, sce, is_library_node);
|
||||
ob = create_instance_node(source_ob, source_node, node, sce, par, is_library_node);
|
||||
}
|
||||
++inst_done;
|
||||
}
|
||||
@ -444,7 +449,8 @@ void DocumentImporter::write_node (COLLADAFW::Node *node, COLLADAFW::Node *paren
|
||||
// check if object is not NULL
|
||||
if (!ob) return;
|
||||
|
||||
rename_id(&ob->id, (char*)node->getOriginalId().c_str());
|
||||
std::string nodename = node->getName().size() ? node->getName() : node->getOriginalId();
|
||||
rename_id(&ob->id, (char*)nodename.c_str());
|
||||
|
||||
object_map[node->getUniqueId()] = ob;
|
||||
node_map[node->getUniqueId()] = node;
|
||||
@ -526,7 +532,7 @@ bool DocumentImporter::writeMaterial( const COLLADAFW::Material* cmat )
|
||||
if(mImportStage!=General)
|
||||
return true;
|
||||
|
||||
const std::string& str_mat_id = cmat->getOriginalId();
|
||||
const std::string& str_mat_id = cmat->getName().size() ? cmat->getName() : cmat->getOriginalId();
|
||||
Material *ma = add_material((char*)str_mat_id.c_str());
|
||||
|
||||
this->uid_effect_map[cmat->getInstantiatedEffect()] = ma;
|
||||
@ -678,6 +684,18 @@ void DocumentImporter::write_profile_COMMON(COLLADAFW::EffectCommon *ef, Materia
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
if(ef->getOpacity().isTexture()) {
|
||||
COLLADAFW::Texture ctex = ef->getOpacity().getTexture();
|
||||
mtex = create_texture(ef, ctex, ma, i, texindex_texarray_map);
|
||||
if(mtex != NULL) {
|
||||
mtex->mapto = MAP_ALPHA;
|
||||
mtex->tex->imaflag |= TEX_USEALPHA;
|
||||
i++;
|
||||
ma->spectra = ma->alpha = 0;
|
||||
ma->mode |= MA_ZTRANSP|MA_TRANSP;
|
||||
}
|
||||
}
|
||||
// TRANSPARENT
|
||||
// color
|
||||
// if (ef->getOpacity().isColor()) {
|
||||
|
@ -72,7 +72,7 @@ public:
|
||||
/** these should not be here */
|
||||
Object* create_camera_object(COLLADAFW::InstanceCamera*, Scene*);
|
||||
Object* create_lamp_object(COLLADAFW::InstanceLight*, Scene*);
|
||||
Object* create_instance_node(Object*, COLLADAFW::Node*, COLLADAFW::Node*, Scene*, bool);
|
||||
Object* create_instance_node(Object*, COLLADAFW::Node*, COLLADAFW::Node*, Scene*, Object*, bool);
|
||||
void write_node(COLLADAFW::Node*, COLLADAFW::Node*, Scene*, Object*, bool);
|
||||
MTex* create_texture(COLLADAFW::EffectCommon*, COLLADAFW::Texture&, Material*, int, TexIndexTextureArrayMap&);
|
||||
void write_profile_COMMON(COLLADAFW::EffectCommon*, Material*);
|
||||
|
@ -67,7 +67,7 @@ void LightsExporter::operator()(Object *ob)
|
||||
std::string la_id(get_light_id(ob));
|
||||
std::string la_name(id_name(la));
|
||||
COLLADASW::Color col(la->r * la->energy, la->g * la->energy, la->b * la->energy);
|
||||
float e, d, constatt, linatt, quadatt;
|
||||
float d, constatt, linatt, quadatt;
|
||||
|
||||
d = la->dist;
|
||||
|
||||
@ -84,7 +84,7 @@ void LightsExporter::operator()(Object *ob)
|
||||
|
||||
// sun
|
||||
if (la->type == LA_SUN) {
|
||||
COLLADASW::DirectionalLight cla(mSW, la_id, la_name, e);
|
||||
COLLADASW::DirectionalLight cla(mSW, la_id, la_name);
|
||||
cla.setColor(col);
|
||||
cla.setConstantAttenuation(constatt);
|
||||
exportBlenderProfile(cla, la);
|
||||
@ -92,7 +92,7 @@ void LightsExporter::operator()(Object *ob)
|
||||
}
|
||||
// hemi
|
||||
else if (la->type == LA_HEMI) {
|
||||
COLLADASW::AmbientLight cla(mSW, la_id, la_name, e);
|
||||
COLLADASW::AmbientLight cla(mSW, la_id, la_name);
|
||||
cla.setColor(col);
|
||||
cla.setConstantAttenuation(constatt);
|
||||
exportBlenderProfile(cla, la);
|
||||
@ -100,7 +100,7 @@ void LightsExporter::operator()(Object *ob)
|
||||
}
|
||||
// spot
|
||||
else if (la->type == LA_SPOT) {
|
||||
COLLADASW::SpotLight cla(mSW, la_id, la_name, e);
|
||||
COLLADASW::SpotLight cla(mSW, la_id, la_name);
|
||||
cla.setColor(col);
|
||||
cla.setFallOffAngle(la->spotsize);
|
||||
cla.setFallOffExponent(la->spotblend);
|
||||
@ -112,7 +112,7 @@ void LightsExporter::operator()(Object *ob)
|
||||
}
|
||||
// lamp
|
||||
else if (la->type == LA_LOCAL) {
|
||||
COLLADASW::PointLight cla(mSW, la_id, la_name, e);
|
||||
COLLADASW::PointLight cla(mSW, la_id, la_name);
|
||||
cla.setColor(col);
|
||||
cla.setConstantAttenuation(constatt);
|
||||
cla.setLinearAttenuation(linatt);
|
||||
@ -123,7 +123,7 @@ void LightsExporter::operator()(Object *ob)
|
||||
// area lamp is not supported
|
||||
// it will be exported as a local lamp
|
||||
else {
|
||||
COLLADASW::PointLight cla(mSW, la_id, la_name, e);
|
||||
COLLADASW::PointLight cla(mSW, la_id, la_name);
|
||||
cla.setColor(col);
|
||||
cla.setConstantAttenuation(constatt);
|
||||
cla.setLinearAttenuation(linatt);
|
||||
|
@ -62,7 +62,7 @@ extern "C" {
|
||||
#include "MeshImporter.h"
|
||||
#include "collada_utils.h"
|
||||
|
||||
// works for COLLADAFW::Node, COLLADAFW::Geometry
|
||||
// get node name, or fall back to original id if not present (name is optional)
|
||||
template<class T>
|
||||
static const char *bc_get_dae_name(T *node)
|
||||
{
|
||||
@ -755,9 +755,11 @@ MTex *MeshImporter::assign_textures_to_uvlayer(COLLADAFW::TextureCoordinateBindi
|
||||
MTex *color_texture)
|
||||
{
|
||||
const COLLADAFW::TextureMapId texture_index = ctexture.getTextureMapId();
|
||||
const size_t setindex = ctexture.getSetIndex();
|
||||
size_t setindex = ctexture.getSetIndex();
|
||||
std::string uvname = ctexture.getSemantic();
|
||||
|
||||
if(setindex==-1) return NULL;
|
||||
|
||||
const CustomData *data = &me->fdata;
|
||||
int layer_index = CustomData_get_layer_index(data, CD_MTFACE);
|
||||
CustomDataLayer *cdl = &data->layers[layer_index+setindex];
|
||||
@ -833,7 +835,6 @@ MTFace *MeshImporter::assign_material_to_geom(COLLADAFW::MaterialBinding cmateri
|
||||
if (*color_texture &&
|
||||
strlen((*color_texture)->uvname) &&
|
||||
strcmp(layername, (*color_texture)->uvname) != 0) {
|
||||
|
||||
texture_face = (MTFace*)CustomData_get_layer_named(&me->fdata, CD_MTFACE,
|
||||
(*color_texture)->uvname);
|
||||
strcpy(layername, (*color_texture)->uvname);
|
||||
@ -903,7 +904,7 @@ Object *MeshImporter::create_mesh_object(COLLADAFW::Node *node, COLLADAFW::Insta
|
||||
uid_object_map[*geom_uid] = ob;
|
||||
|
||||
// name Object
|
||||
const std::string& id = node->getOriginalId();
|
||||
const std::string& id = node->getName().size() ? node->getName() : node->getOriginalId();
|
||||
if (id.length())
|
||||
rename_id(&ob->id, (char*)id.c_str());
|
||||
|
||||
@ -915,6 +916,7 @@ Object *MeshImporter::create_mesh_object(COLLADAFW::Node *node, COLLADAFW::Insta
|
||||
if (old_mesh->id.us == 0) free_libblock(&G.main->mesh, old_mesh);
|
||||
|
||||
char layername[100];
|
||||
layername[0] = '\0';
|
||||
MTFace *texture_face = NULL;
|
||||
MTex *color_texture = NULL;
|
||||
|
||||
@ -957,7 +959,7 @@ bool MeshImporter::write_geometry(const COLLADAFW::Geometry* geom)
|
||||
return true;
|
||||
}
|
||||
|
||||
const std::string& str_geom_id = mesh->getOriginalId();
|
||||
const std::string& str_geom_id = mesh->getName().size() ? mesh->getName() : mesh->getOriginalId();
|
||||
Mesh *me = add_mesh((char*)str_geom_id.c_str());
|
||||
|
||||
// store the Mesh pointer to link it later with an Object
|
||||
|
@ -48,12 +48,12 @@
|
||||
#include "SkinInfo.h"
|
||||
#include "collada_utils.h"
|
||||
|
||||
// use this for retrieving bone names, since these must be unique
|
||||
// use name, or fall back to original id if name not present (name is optional)
|
||||
template<class T>
|
||||
static const char *bc_get_joint_name(T *node)
|
||||
{
|
||||
const std::string& id = node->getOriginalId();
|
||||
return id.size() ? id.c_str() : node->getName().c_str();
|
||||
const std::string& id = node->getName();
|
||||
return id.size() ? id.c_str() : node->getOriginalId().c_str();
|
||||
}
|
||||
|
||||
// This is used to store data passed in write_controller_data.
|
||||
|
@ -265,7 +265,7 @@ std::string get_light_id(Object *ob)
|
||||
|
||||
std::string get_joint_id(Bone *bone, Object *ob_arm)
|
||||
{
|
||||
return translate_id(id_name(ob_arm) + "_" + bone->name);
|
||||
return translate_id(bone->name);
|
||||
}
|
||||
|
||||
std::string get_camera_id(Object *ob)
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -298,10 +298,12 @@ void uiPupMenuInvoke(struct bContext *C, const char *idname); /* popup registere
|
||||
* but allow using all button types and creating an own layout. */
|
||||
|
||||
typedef uiBlock* (*uiBlockCreateFunc)(struct bContext *C, struct ARegion *ar, void *arg1);
|
||||
typedef void (*uiBlockCancelFunc)(void *arg1);
|
||||
|
||||
void uiPupBlock(struct bContext *C, uiBlockCreateFunc func, void *arg);
|
||||
void uiPupBlockO(struct bContext *C, uiBlockCreateFunc func, void *arg, const char *opname, int opcontext);
|
||||
void uiPupBlockOperator(struct bContext *C, uiBlockCreateFunc func, struct wmOperator *op, int opcontext);
|
||||
void uiPupBlockEx(struct bContext *C, uiBlockCreateFunc func, uiBlockCancelFunc cancel_func, void *arg);
|
||||
/* void uiPupBlockOperator(struct bContext *C, uiBlockCreateFunc func, struct wmOperator *op, int opcontext); */ /* UNUSED */
|
||||
|
||||
void uiPupBlockClose(struct bContext *C, uiBlock *block);
|
||||
|
||||
|
@ -77,6 +77,10 @@
|
||||
#define PRECISION_FLOAT_MAX 7
|
||||
#define PRECISION_FLOAT_MAX_POW 10000000 /* pow(10, PRECISION_FLOAT_MAX) */
|
||||
|
||||
/* avoid unneeded calls to ui_get_but_val */
|
||||
#define UI_BUT_VALUE_UNSET DBL_MAX
|
||||
#define UI_GET_BUT_VALUE_INIT(_but, _value) if(_value == DBL_MAX) { (_value)= ui_get_but_val(_but); }
|
||||
|
||||
/*
|
||||
* a full doc with API notes can be found in bf-blender/trunk/blender/doc/guides/interface_API.txt
|
||||
*
|
||||
@ -967,17 +971,16 @@ void uiDrawBlock(const bContext *C, uiBlock *block)
|
||||
|
||||
/* ************* EVENTS ************* */
|
||||
|
||||
static void ui_is_but_sel(uiBut *but)
|
||||
static void ui_is_but_sel(uiBut *but, double *value)
|
||||
{
|
||||
double value; /* only initialized when needed, to avoid calling when not used */
|
||||
short push=0, true=1;
|
||||
|
||||
if(ELEM3(but->type, TOGN, ICONTOGN, OPTIONN)) true= 0;
|
||||
|
||||
if( but->bit ) {
|
||||
int lvalue;
|
||||
value= ui_get_but_val(but);
|
||||
lvalue= (int)value;
|
||||
UI_GET_BUT_VALUE_INIT(but, *value)
|
||||
lvalue= (int)*value;
|
||||
if( BTST(lvalue, (but->bitnr)) ) push= true;
|
||||
else push= !true;
|
||||
}
|
||||
@ -997,24 +1000,24 @@ static void ui_is_but_sel(uiBut *but)
|
||||
case BUT_TOGDUAL:
|
||||
case ICONTOG:
|
||||
case OPTION:
|
||||
value= ui_get_but_val(but);
|
||||
if(value != (double)but->hardmin) push= 1;
|
||||
UI_GET_BUT_VALUE_INIT(but, *value)
|
||||
if(*value != (double)but->hardmin) push= 1;
|
||||
break;
|
||||
case ICONTOGN:
|
||||
case TOGN:
|
||||
case OPTIONN:
|
||||
value= ui_get_but_val(but);
|
||||
if(value==0.0) push= 1;
|
||||
UI_GET_BUT_VALUE_INIT(but, *value)
|
||||
if(*value==0.0) push= 1;
|
||||
break;
|
||||
case ROW:
|
||||
case LISTROW:
|
||||
value= ui_get_but_val(but);
|
||||
UI_GET_BUT_VALUE_INIT(but, *value)
|
||||
/* support for rna enum buts */
|
||||
if(but->rnaprop && (RNA_property_flag(but->rnaprop) & PROP_ENUM_FLAG)) {
|
||||
if((int)value & (int)but->hardmax) push= 1;
|
||||
if((int)*value & (int)but->hardmax) push= 1;
|
||||
}
|
||||
else {
|
||||
if(value == (double)but->hardmax) push= 1;
|
||||
if(*value == (double)but->hardmax) push= 1;
|
||||
}
|
||||
break;
|
||||
case COL:
|
||||
@ -1385,6 +1388,10 @@ void ui_set_but_val(uiBut *but, double value)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* we can't be sure what RNA set functions actually do,
|
||||
* so leave this unset */
|
||||
value= UI_BUT_VALUE_UNSET;
|
||||
}
|
||||
else if(but->pointype==0);
|
||||
else if(but->type==HSVSLI ) {
|
||||
@ -1425,19 +1432,19 @@ void ui_set_but_val(uiBut *but, double value)
|
||||
|
||||
/* then set value with possible edit override */
|
||||
if(but->editval)
|
||||
*but->editval= value;
|
||||
value= *but->editval= value;
|
||||
else if(but->pointype==CHA)
|
||||
*((char *)but->poin)= (char)value;
|
||||
value= *((char *)but->poin)= (char)value;
|
||||
else if(but->pointype==SHO)
|
||||
*((short *)but->poin)= (short)value;
|
||||
value= *((short *)but->poin)= (short)value;
|
||||
else if(but->pointype==INT)
|
||||
*((int *)but->poin)= (int)value;
|
||||
value= *((int *)but->poin)= (int)value;
|
||||
else if(but->pointype==FLO)
|
||||
*((float *)but->poin)= (float)value;
|
||||
value= *((float *)but->poin)= (float)value;
|
||||
}
|
||||
|
||||
/* update select flag */
|
||||
ui_is_but_sel(but);
|
||||
ui_is_but_sel(but, &value);
|
||||
}
|
||||
|
||||
int ui_get_but_string_max_length(uiBut *but)
|
||||
@ -1758,50 +1765,70 @@ static double soft_range_round_down(double value, double max)
|
||||
|
||||
void ui_set_but_soft_range(uiBut *but, double value)
|
||||
{
|
||||
PropertyType type;
|
||||
double softmin, softmax /*, step, precision*/;
|
||||
|
||||
/* ideally we would not limit this but practially, its more then
|
||||
* enough worst case is very long vectors wont use a smart soft-range
|
||||
* which isnt so bad. */
|
||||
|
||||
if(but->rnaprop) {
|
||||
type= RNA_property_type(but->rnaprop);
|
||||
const PropertyType type= RNA_property_type(but->rnaprop);
|
||||
double softmin, softmax /*, step, precision*/;
|
||||
double value_min= value;
|
||||
double value_max= value;
|
||||
|
||||
/* clamp button range to something reasonable in case
|
||||
* we get -inf/inf from RNA properties */
|
||||
if(type == PROP_INT) {
|
||||
int imin, imax, istep;
|
||||
const int array_len= RNA_property_array_length(&but->rnapoin, but->rnaprop);
|
||||
|
||||
RNA_property_int_ui_range(&but->rnapoin, but->rnaprop, &imin, &imax, &istep);
|
||||
softmin= (imin == INT_MIN)? -1e4: imin;
|
||||
softmax= (imin == INT_MAX)? 1e4: imax;
|
||||
/*step= istep;*/ /*UNUSED*/
|
||||
/*precision= 1;*/ /*UNUSED*/
|
||||
|
||||
if(array_len >= 2) {
|
||||
int value_range[2];
|
||||
RNA_property_int_get_array_range(&but->rnapoin, but->rnaprop, value_range);
|
||||
value_min= (double)value_range[0];
|
||||
value_max= (double)value_range[1];
|
||||
}
|
||||
}
|
||||
else if(type == PROP_FLOAT) {
|
||||
float fmin, fmax, fstep, fprecision;
|
||||
const int array_len= RNA_property_array_length(&but->rnapoin, but->rnaprop);
|
||||
|
||||
RNA_property_float_ui_range(&but->rnapoin, but->rnaprop, &fmin, &fmax, &fstep, &fprecision);
|
||||
softmin= (fmin == -FLT_MAX)? (float)-1e4: fmin;
|
||||
softmax= (fmax == FLT_MAX)? (float)1e4: fmax;
|
||||
/*step= fstep;*/ /*UNUSED*/
|
||||
/*precision= fprecision;*/ /*UNUSED*/
|
||||
|
||||
if(array_len >= 2) {
|
||||
float value_range[2];
|
||||
RNA_property_float_get_array_range(&but->rnapoin, but->rnaprop, value_range);
|
||||
value_min= (double)value_range[0];
|
||||
value_max= (double)value_range[1];
|
||||
}
|
||||
}
|
||||
else
|
||||
return;
|
||||
|
||||
/* if the value goes out of the soft/max range, adapt the range */
|
||||
if(value+1e-10 < softmin) {
|
||||
if(value < 0.0)
|
||||
softmin= -soft_range_round_up(-value, -softmin);
|
||||
if(value_min+1e-10 < softmin) {
|
||||
if(value_min < 0.0)
|
||||
softmin= -soft_range_round_up(-value_min, -softmin);
|
||||
else
|
||||
softmin= soft_range_round_down(value, softmin);
|
||||
softmin= soft_range_round_down(value_min, softmin);
|
||||
|
||||
if(softmin < (double)but->hardmin)
|
||||
softmin= (double)but->hardmin;
|
||||
}
|
||||
else if(value-1e-10 > softmax) {
|
||||
if(value < 0.0)
|
||||
softmax= -soft_range_round_down(-value, -softmax);
|
||||
else if(value_max-1e-10 > softmax) {
|
||||
if(value_max < 0.0)
|
||||
softmax= -soft_range_round_down(-value_max, -softmax);
|
||||
else
|
||||
softmax= soft_range_round_up(value, softmax);
|
||||
softmax= soft_range_round_up(value_max, softmax);
|
||||
|
||||
if(softmax > (double)but->hardmax)
|
||||
softmax= but->hardmax;
|
||||
@ -1974,17 +2001,19 @@ void uiBlockSetEmboss(uiBlock *block, char dt)
|
||||
void ui_check_but(uiBut *but)
|
||||
{
|
||||
/* if something changed in the button */
|
||||
double value;
|
||||
double value= UI_BUT_VALUE_UNSET;
|
||||
// float okwidth; // UNUSED
|
||||
// int transopts= ui_translate_buttons();
|
||||
|
||||
ui_is_but_sel(but);
|
||||
ui_is_but_sel(but, &value);
|
||||
|
||||
// if(but->type==TEX || but->type==IDPOIN) transopts= 0;
|
||||
|
||||
/* only update soft range while not editing */
|
||||
if(but->rnaprop && !(but->editval || but->editstr || but->editvec))
|
||||
ui_set_but_soft_range(but, ui_get_but_val(but));
|
||||
if(but->rnaprop && !(but->editval || but->editstr || but->editvec)) {
|
||||
UI_GET_BUT_VALUE_INIT(but, value)
|
||||
ui_set_but_soft_range(but, value);
|
||||
}
|
||||
|
||||
/* test for min and max, icon sliders, etc */
|
||||
switch( but->type ) {
|
||||
@ -1993,17 +2022,20 @@ void ui_check_but(uiBut *but)
|
||||
case SCROLL:
|
||||
case NUMSLI:
|
||||
case HSVSLI:
|
||||
value= ui_get_but_val(but);
|
||||
UI_GET_BUT_VALUE_INIT(but, value)
|
||||
if(value < (double)but->hardmin) ui_set_but_val(but, but->hardmin);
|
||||
else if(value > (double)but->hardmax) ui_set_but_val(but, but->hardmax);
|
||||
break;
|
||||
|
||||
case NUMABS:
|
||||
value= fabs( ui_get_but_val(but) );
|
||||
if(value < (double)but->hardmin) ui_set_but_val(but, but->hardmin);
|
||||
else if(value > (double)but->hardmax) ui_set_but_val(but, but->hardmax);
|
||||
{
|
||||
double value_abs;
|
||||
UI_GET_BUT_VALUE_INIT(but, value)
|
||||
value_abs= fabs(value);
|
||||
if(value_abs < (double)but->hardmin) ui_set_but_val(but, but->hardmin);
|
||||
else if(value_abs > (double)but->hardmax) ui_set_but_val(but, but->hardmax);
|
||||
break;
|
||||
|
||||
}
|
||||
case ICONTOG:
|
||||
case ICONTOGN:
|
||||
if(!but->rnaprop || (RNA_property_flag(but->rnaprop) & PROP_ICONS_CONSECUTIVE)) {
|
||||
@ -2014,14 +2046,14 @@ void ui_check_but(uiBut *but)
|
||||
|
||||
case ICONROW:
|
||||
if(!but->rnaprop || (RNA_property_flag(but->rnaprop) & PROP_ICONS_CONSECUTIVE)) {
|
||||
value= ui_get_but_val(but);
|
||||
UI_GET_BUT_VALUE_INIT(but, value)
|
||||
but->iconadd= (int)value- (int)(but->hardmin);
|
||||
}
|
||||
break;
|
||||
|
||||
case ICONTEXTROW:
|
||||
if(!but->rnaprop || (RNA_property_flag(but->rnaprop) & PROP_ICONS_CONSECUTIVE)) {
|
||||
value= ui_get_but_val(but);
|
||||
UI_GET_BUT_VALUE_INIT(but, value)
|
||||
but->iconadd= (int)value- (int)(but->hardmin);
|
||||
}
|
||||
break;
|
||||
@ -2038,7 +2070,7 @@ void ui_check_but(uiBut *but)
|
||||
case ICONTEXTROW:
|
||||
|
||||
if(but->x2 - but->x1 > 24) {
|
||||
value= ui_get_but_val(but);
|
||||
UI_GET_BUT_VALUE_INIT(but, value)
|
||||
ui_set_name_menu(but, (int)value);
|
||||
}
|
||||
break;
|
||||
@ -2048,7 +2080,7 @@ void ui_check_but(uiBut *but)
|
||||
case HSVSLI:
|
||||
case NUMABS:
|
||||
|
||||
value= ui_get_but_val(but);
|
||||
UI_GET_BUT_VALUE_INIT(but, value)
|
||||
|
||||
if(ui_is_but_float(but)) {
|
||||
if(value == (double) FLT_MAX) sprintf(but->drawstr, "%sinf", but->str);
|
||||
@ -2079,7 +2111,7 @@ void ui_check_but(uiBut *but)
|
||||
case LABEL:
|
||||
if(ui_is_but_float(but)) {
|
||||
int prec;
|
||||
value= ui_get_but_val(but);
|
||||
UI_GET_BUT_VALUE_INIT(but, value)
|
||||
prec= ui_but_float_precision(but, value);
|
||||
BLI_snprintf(but->drawstr, sizeof(but->drawstr), "%s%.*f", but->str, prec, value);
|
||||
}
|
||||
@ -2105,8 +2137,10 @@ void ui_check_but(uiBut *but)
|
||||
strncpy(but->drawstr, but->str, UI_MAX_DRAW_STR);
|
||||
if (but->flag & UI_SELECT) {
|
||||
strcat(but->drawstr, "Press a key");
|
||||
} else {
|
||||
strcat(but->drawstr, WM_key_event_string((short) ui_get_but_val(but)));
|
||||
}
|
||||
else {
|
||||
UI_GET_BUT_VALUE_INIT(but, value)
|
||||
strcat(but->drawstr, WM_key_event_string((short)value));
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -534,7 +534,10 @@ static uiBut *ui_item_with_label(uiLayout *layout, uiBlock *block, const char *n
|
||||
uiDefAutoButR(block, ptr, prop, index, "", icon, x, y, w-UI_UNIT_X, h);
|
||||
|
||||
/* BUTTONS_OT_file_browse calls uiFileBrowseContextProperty */
|
||||
but= uiDefIconButO(block, BUT, "BUTTONS_OT_file_browse", WM_OP_INVOKE_DEFAULT, ICON_FILESEL, x, y, UI_UNIT_X, h, NULL);
|
||||
but= uiDefIconButO(block, BUT, subtype==PROP_DIRPATH ?
|
||||
"BUTTONS_OT_directory_browse" :
|
||||
"BUTTONS_OT_file_browse",
|
||||
WM_OP_INVOKE_DEFAULT, ICON_FILESEL, x, y, UI_UNIT_X, h, NULL);
|
||||
}
|
||||
else if(flag & UI_ITEM_R_EVENT) {
|
||||
uiDefButR(block, KEYEVT, 0, name, x, y, w, h, ptr, RNA_property_identifier(prop), index, 0, 0, -1, -1, NULL);
|
||||
|
@ -2582,6 +2582,25 @@ void uiPupBlock(bContext *C, uiBlockCreateFunc func, void *arg)
|
||||
uiPupBlockO(C, func, arg, NULL, 0);
|
||||
}
|
||||
|
||||
void uiPupBlockEx(bContext *C, uiBlockCreateFunc func, uiBlockCancelFunc cancel_func, void *arg)
|
||||
{
|
||||
wmWindow *window= CTX_wm_window(C);
|
||||
uiPopupBlockHandle *handle;
|
||||
|
||||
handle= ui_popup_block_create(C, NULL, NULL, func, NULL, arg);
|
||||
handle->popup= 1;
|
||||
handle->retvalue= 1;
|
||||
|
||||
handle->popup_arg= arg;
|
||||
// handle->popup_func= operator_cb;
|
||||
handle->cancel_func= cancel_func;
|
||||
// handle->opcontext= opcontext;
|
||||
|
||||
UI_add_popup_handlers(C, &window->modalhandlers, handle);
|
||||
WM_event_add_mousemove(C);
|
||||
}
|
||||
|
||||
#if 0 /* UNUSED */
|
||||
void uiPupBlockOperator(bContext *C, uiBlockCreateFunc func, wmOperator *op, int opcontext)
|
||||
{
|
||||
wmWindow *window= CTX_wm_window(C);
|
||||
@ -2599,6 +2618,7 @@ void uiPupBlockOperator(bContext *C, uiBlockCreateFunc func, wmOperator *op, int
|
||||
UI_add_popup_handlers(C, &window->modalhandlers, handle);
|
||||
WM_event_add_mousemove(C);
|
||||
}
|
||||
#endif
|
||||
|
||||
void uiPupBlockClose(bContext *C, uiBlock *block)
|
||||
{
|
||||
|
@ -1586,21 +1586,22 @@ static uiBlock *curvemap_clipping_func(bContext *C, struct ARegion *ar, void *cu
|
||||
CurveMapping *cumap = cumap_v;
|
||||
uiBlock *block;
|
||||
uiBut *bt;
|
||||
float width= 8*UI_UNIT_X;
|
||||
|
||||
block= uiBeginBlock(C, ar, "curvemap_clipping_func", UI_EMBOSS);
|
||||
|
||||
/* use this for a fake extra empy space around the buttons */
|
||||
uiDefBut(block, LABEL, 0, "", -4, 16, 128, 106, NULL, 0, 0, 0, 0, "");
|
||||
uiDefBut(block, LABEL, 0, "", -4, 16, width+8, 6*UI_UNIT_Y, NULL, 0, 0, 0, 0, "");
|
||||
|
||||
bt= uiDefButBitI(block, TOG, CUMA_DO_CLIP, 1, "Use Clipping",
|
||||
0,100,120,18, &cumap->flag, 0.0, 0.0, 10, 0, "");
|
||||
0,5*UI_UNIT_Y,width,UI_UNIT_Y, &cumap->flag, 0.0, 0.0, 10, 0, "");
|
||||
uiButSetFunc(bt, curvemap_buttons_setclip, cumap, NULL);
|
||||
|
||||
uiBlockBeginAlign(block);
|
||||
uiDefButF(block, NUM, 0, "Min X ", 0,74,120,18, &cumap->clipr.xmin, -100.0, cumap->clipr.xmax, 10, 0, "");
|
||||
uiDefButF(block, NUM, 0, "Min Y ", 0,56,120,18, &cumap->clipr.ymin, -100.0, cumap->clipr.ymax, 10, 0, "");
|
||||
uiDefButF(block, NUM, 0, "Max X ", 0,38,120,18, &cumap->clipr.xmax, cumap->clipr.xmin, 100.0, 10, 0, "");
|
||||
uiDefButF(block, NUM, 0, "Max Y ", 0,20,120,18, &cumap->clipr.ymax, cumap->clipr.ymin, 100.0, 10, 0, "");
|
||||
uiDefButF(block, NUM, 0, "Min X ", 0,4*UI_UNIT_Y,width,UI_UNIT_Y, &cumap->clipr.xmin, -100.0, cumap->clipr.xmax, 10, 0, "");
|
||||
uiDefButF(block, NUM, 0, "Min Y ", 0,3*UI_UNIT_Y,width,UI_UNIT_Y, &cumap->clipr.ymin, -100.0, cumap->clipr.ymax, 10, 0, "");
|
||||
uiDefButF(block, NUM, 0, "Max X ", 0,2*UI_UNIT_Y,width,UI_UNIT_Y, &cumap->clipr.xmax, cumap->clipr.xmin, 100.0, 10, 0, "");
|
||||
uiDefButF(block, NUM, 0, "Max Y ", 0,UI_UNIT_Y,width,UI_UNIT_Y, &cumap->clipr.ymax, cumap->clipr.ymin, 100.0, 10, 0, "");
|
||||
|
||||
uiBlockSetDirection(block, UI_RIGHT);
|
||||
|
||||
@ -1644,17 +1645,17 @@ static void curvemap_tools_dofunc(bContext *C, void *cumap_v, int event)
|
||||
static uiBlock *curvemap_tools_func(bContext *C, struct ARegion *ar, void *cumap_v)
|
||||
{
|
||||
uiBlock *block;
|
||||
short yco= 0, menuwidth=120;
|
||||
short yco= 0, menuwidth=10*UI_UNIT_X;
|
||||
|
||||
block= uiBeginBlock(C, ar, "curvemap_tools_func", UI_EMBOSS);
|
||||
uiBlockSetButmFunc(block, curvemap_tools_dofunc, cumap_v);
|
||||
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset View", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Vector Handle", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Auto Handle", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Horizontal", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Extrapolated", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset Curve", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset View", 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 1, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Vector Handle", 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 2, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Auto Handle", 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 3, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Horizontal", 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 4, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Extrapolated", 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 5, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset Curve", 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, "");
|
||||
|
||||
uiBlockSetDirection(block, UI_RIGHT);
|
||||
uiTextBoundsBlock(block, 50);
|
||||
@ -1666,15 +1667,15 @@ static uiBlock *curvemap_tools_func(bContext *C, struct ARegion *ar, void *cumap
|
||||
static uiBlock *curvemap_brush_tools_func(bContext *C, struct ARegion *ar, void *cumap_v)
|
||||
{
|
||||
uiBlock *block;
|
||||
short yco= 0, menuwidth=120;
|
||||
short yco= 0, menuwidth=10*UI_UNIT_X;
|
||||
|
||||
block= uiBeginBlock(C, ar, "curvemap_tools_func", UI_EMBOSS);
|
||||
uiBlockSetButmFunc(block, curvemap_tools_dofunc, cumap_v);
|
||||
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset View", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Vector Handle", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Auto Handle", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset Curve", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset View", 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 1, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Vector Handle", 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 2, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Auto Handle", 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 3, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset Curve", 0, yco-=UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, "");
|
||||
|
||||
uiBlockSetDirection(block, UI_RIGHT);
|
||||
uiTextBoundsBlock(block, 50);
|
||||
@ -1728,15 +1729,15 @@ static void curvemap_buttons_layout(uiLayout *layout, PointerRNA *ptr, char labe
|
||||
uiLayoutSetAlignment(sub, UI_LAYOUT_ALIGN_LEFT);
|
||||
|
||||
if(cumap->cm[0].curve) {
|
||||
bt= uiDefButI(block, ROW, 0, "X", 0, 0, dx, 16, &cumap->cur, 0.0, 0.0, 0.0, 0.0, "");
|
||||
bt= uiDefButI(block, ROW, 0, "X", 0, 0, dx, dx, &cumap->cur, 0.0, 0.0, 0.0, 0.0, "");
|
||||
uiButSetFunc(bt, curvemap_buttons_redraw, NULL, NULL);
|
||||
}
|
||||
if(cumap->cm[1].curve) {
|
||||
bt= uiDefButI(block, ROW, 0, "Y", 0, 0, dx, 16, &cumap->cur, 0.0, 1.0, 0.0, 0.0, "");
|
||||
bt= uiDefButI(block, ROW, 0, "Y", 0, 0, dx, dx, &cumap->cur, 0.0, 1.0, 0.0, 0.0, "");
|
||||
uiButSetFunc(bt, curvemap_buttons_redraw, NULL, NULL);
|
||||
}
|
||||
if(cumap->cm[2].curve) {
|
||||
bt= uiDefButI(block, ROW, 0, "Z", 0, 0, dx, 16, &cumap->cur, 0.0, 2.0, 0.0, 0.0, "");
|
||||
bt= uiDefButI(block, ROW, 0, "Z", 0, 0, dx, dx, &cumap->cur, 0.0, 2.0, 0.0, 0.0, "");
|
||||
uiButSetFunc(bt, curvemap_buttons_redraw, NULL, NULL);
|
||||
}
|
||||
}
|
||||
@ -1746,19 +1747,19 @@ static void curvemap_buttons_layout(uiLayout *layout, PointerRNA *ptr, char labe
|
||||
uiLayoutSetAlignment(sub, UI_LAYOUT_ALIGN_LEFT);
|
||||
|
||||
if(cumap->cm[3].curve) {
|
||||
bt= uiDefButI(block, ROW, 0, "C", 0, 0, dx, 16, &cumap->cur, 0.0, 3.0, 0.0, 0.0, "");
|
||||
bt= uiDefButI(block, ROW, 0, "C", 0, 0, dx, dx, &cumap->cur, 0.0, 3.0, 0.0, 0.0, "");
|
||||
uiButSetFunc(bt, curvemap_buttons_redraw, NULL, NULL);
|
||||
}
|
||||
if(cumap->cm[0].curve) {
|
||||
bt= uiDefButI(block, ROW, 0, "R", 0, 0, dx, 16, &cumap->cur, 0.0, 0.0, 0.0, 0.0, "");
|
||||
bt= uiDefButI(block, ROW, 0, "R", 0, 0, dx, dx, &cumap->cur, 0.0, 0.0, 0.0, 0.0, "");
|
||||
uiButSetFunc(bt, curvemap_buttons_redraw, NULL, NULL);
|
||||
}
|
||||
if(cumap->cm[1].curve) {
|
||||
bt= uiDefButI(block, ROW, 0, "G", 0, 0, dx, 16, &cumap->cur, 0.0, 1.0, 0.0, 0.0, "");
|
||||
bt= uiDefButI(block, ROW, 0, "G", 0, 0, dx, dx, &cumap->cur, 0.0, 1.0, 0.0, 0.0, "");
|
||||
uiButSetFunc(bt, curvemap_buttons_redraw, NULL, NULL);
|
||||
}
|
||||
if(cumap->cm[2].curve) {
|
||||
bt= uiDefButI(block, ROW, 0, "B", 0, 0, dx, 16, &cumap->cur, 0.0, 2.0, 0.0, 0.0, "");
|
||||
bt= uiDefButI(block, ROW, 0, "B", 0, 0, dx, dx, &cumap->cur, 0.0, 2.0, 0.0, 0.0, "");
|
||||
uiButSetFunc(bt, curvemap_buttons_redraw, NULL, NULL);
|
||||
}
|
||||
}
|
||||
@ -1768,15 +1769,15 @@ static void curvemap_buttons_layout(uiLayout *layout, PointerRNA *ptr, char labe
|
||||
uiLayoutSetAlignment(sub, UI_LAYOUT_ALIGN_LEFT);
|
||||
|
||||
if(cumap->cm[0].curve) {
|
||||
bt= uiDefButI(block, ROW, 0, "H", 0, 0, dx, 16, &cumap->cur, 0.0, 0.0, 0.0, 0.0, "");
|
||||
bt= uiDefButI(block, ROW, 0, "H", 0, 0, dx, dx, &cumap->cur, 0.0, 0.0, 0.0, 0.0, "");
|
||||
uiButSetFunc(bt, curvemap_buttons_redraw, NULL, NULL);
|
||||
}
|
||||
if(cumap->cm[1].curve) {
|
||||
bt= uiDefButI(block, ROW, 0, "S", 0, 0, dx, 16, &cumap->cur, 0.0, 1.0, 0.0, 0.0, "");
|
||||
bt= uiDefButI(block, ROW, 0, "S", 0, 0, dx, dx, &cumap->cur, 0.0, 1.0, 0.0, 0.0, "");
|
||||
uiButSetFunc(bt, curvemap_buttons_redraw, NULL, NULL);
|
||||
}
|
||||
if(cumap->cm[2].curve) {
|
||||
bt= uiDefButI(block, ROW, 0, "V", 0, 0, dx, 16, &cumap->cur, 0.0, 2.0, 0.0, 0.0, "");
|
||||
bt= uiDefButI(block, ROW, 0, "V", 0, 0, dx, dx, &cumap->cur, 0.0, 2.0, 0.0, 0.0, "");
|
||||
uiButSetFunc(bt, curvemap_buttons_redraw, NULL, NULL);
|
||||
}
|
||||
}
|
||||
@ -1791,24 +1792,24 @@ static void curvemap_buttons_layout(uiLayout *layout, PointerRNA *ptr, char labe
|
||||
|
||||
uiBlockSetEmboss(block, UI_EMBOSSN);
|
||||
|
||||
bt= uiDefIconBut(block, BUT, 0, ICON_ZOOMIN, 0, 0, dx, 14, NULL, 0.0, 0.0, 0.0, 0.0, "Zoom in");
|
||||
bt= uiDefIconBut(block, BUT, 0, ICON_ZOOMIN, 0, 0, dx, dx, NULL, 0.0, 0.0, 0.0, 0.0, "Zoom in");
|
||||
uiButSetFunc(bt, curvemap_buttons_zoom_in, cumap, NULL);
|
||||
|
||||
bt= uiDefIconBut(block, BUT, 0, ICON_ZOOMOUT, 0, 0, dx, 14, NULL, 0.0, 0.0, 0.0, 0.0, "Zoom out");
|
||||
bt= uiDefIconBut(block, BUT, 0, ICON_ZOOMOUT, 0, 0, dx, dx, NULL, 0.0, 0.0, 0.0, 0.0, "Zoom out");
|
||||
uiButSetFunc(bt, curvemap_buttons_zoom_out, cumap, NULL);
|
||||
|
||||
if(brush)
|
||||
bt= uiDefIconBlockBut(block, curvemap_brush_tools_func, cumap, 0, ICON_MODIFIER, 0, 0, dx, 18, "Tools");
|
||||
bt= uiDefIconBlockBut(block, curvemap_brush_tools_func, cumap, 0, ICON_MODIFIER, 0, 0, dx, dx, "Tools");
|
||||
else
|
||||
bt= uiDefIconBlockBut(block, curvemap_tools_func, cumap, 0, ICON_MODIFIER, 0, 0, dx, 18, "Tools");
|
||||
bt= uiDefIconBlockBut(block, curvemap_tools_func, cumap, 0, ICON_MODIFIER, 0, 0, dx, dx, "Tools");
|
||||
|
||||
uiButSetNFunc(bt, rna_update_cb, MEM_dupallocN(cb), NULL);
|
||||
|
||||
if(cumap->flag & CUMA_DO_CLIP) icon= ICON_CLIPUV_HLT; else icon= ICON_CLIPUV_DEHLT;
|
||||
bt= uiDefIconBlockBut(block, curvemap_clipping_func, cumap, 0, icon, 0, 0, dx, 18, "Clipping Options");
|
||||
bt= uiDefIconBlockBut(block, curvemap_clipping_func, cumap, 0, icon, 0, 0, dx, dx, "Clipping Options");
|
||||
uiButSetNFunc(bt, rna_update_cb, MEM_dupallocN(cb), NULL);
|
||||
|
||||
bt= uiDefIconBut(block, BUT, 0, ICON_X, 0, 0, dx, 18, NULL, 0.0, 0.0, 0.0, 0.0, "Delete points");
|
||||
bt= uiDefIconBut(block, BUT, 0, ICON_X, 0, 0, dx, dx, NULL, 0.0, 0.0, 0.0, 0.0, "Delete points");
|
||||
uiButSetNFunc(bt, curvemap_buttons_delete, MEM_dupallocN(cb), cumap);
|
||||
|
||||
uiBlockSetEmboss(block, UI_EMBOSS);
|
||||
|
@ -1580,6 +1580,8 @@ void init_userdef_do_versions(void)
|
||||
U.dragthreshold= 5;
|
||||
if (U.widget_unit==0)
|
||||
U.widget_unit= (U.dpi * 20 + 36)/72;
|
||||
if (U.anisotropic_filter <= 0)
|
||||
U.anisotropic_filter = 1;
|
||||
|
||||
/* funny name, but it is GE stuff, moves userdef stuff to engine */
|
||||
// XXX space_set_commmandline_options();
|
||||
|
@ -1542,7 +1542,7 @@ static void scroll_printstr(Scene *scene, float x, float y, float val, int power
|
||||
}
|
||||
|
||||
/* draw it */
|
||||
BLF_draw_default(x, y, 0.0f, str, sizeof(str)-1);
|
||||
BLF_draw_default_ascii(x, y, 0.0f, str, sizeof(str)-1);
|
||||
}
|
||||
|
||||
/* Draw scrollbars in the given 2d-region */
|
||||
|
@ -235,7 +235,7 @@ int ED_mesh_uv_texture_remove(bContext *C, Object *ob, Mesh *me)
|
||||
return 1;
|
||||
}
|
||||
|
||||
int ED_mesh_color_add(bContext *C, Scene *scene, Object *ob, Mesh *me, const char *name, int active_set)
|
||||
int ED_mesh_color_add(bContext *C, Scene *UNUSED(scene), Object *UNUSED(ob), Mesh *me, const char *name, int active_set)
|
||||
{
|
||||
EditMesh *em;
|
||||
MCol *mcol;
|
||||
@ -272,9 +272,6 @@ int ED_mesh_color_add(bContext *C, Scene *scene, Object *ob, Mesh *me, const cha
|
||||
CustomData_set_layer_active(&me->fdata, CD_MCOL, layernum);
|
||||
|
||||
mesh_update_customdata_pointers(me);
|
||||
|
||||
if(!mcol)
|
||||
shadeMeshMCol(scene, ob, me);
|
||||
}
|
||||
|
||||
DAG_id_tag_update(&me->id, 0);
|
||||
|
@ -823,8 +823,6 @@ static int object_delete_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
}
|
||||
CTX_DATA_END;
|
||||
|
||||
if(islamp) reshadeall_displist(scene); /* only frees displist */
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
|
||||
|
@ -858,29 +858,7 @@ static void finish_images(MultiresBakeRender *bkr)
|
||||
if(ibuf->x<=0 || ibuf->y<=0)
|
||||
continue;
|
||||
|
||||
/* Margin */
|
||||
if(bkr->bake_filter) {
|
||||
char *temprect;
|
||||
|
||||
/* extend the mask +2 pixels from the image,
|
||||
* this is so colors dont blend in from outside */
|
||||
|
||||
for(i=0; i<bkr->bake_filter; i++)
|
||||
IMB_mask_filter_extend((char *)ibuf->userdata, ibuf->x, ibuf->y);
|
||||
|
||||
temprect = MEM_dupallocN(ibuf->userdata);
|
||||
|
||||
/* expand twice to clear this many pixels, so they blend back in */
|
||||
IMB_mask_filter_extend(temprect, ibuf->x, ibuf->y);
|
||||
IMB_mask_filter_extend(temprect, ibuf->x, ibuf->y);
|
||||
|
||||
/* clear all pixels in the margin */
|
||||
IMB_mask_clear(ibuf, temprect, FILTER_MASK_MARGIN);
|
||||
MEM_freeN(temprect);
|
||||
|
||||
for(i= 0; i<bkr->bake_filter; i++)
|
||||
IMB_filter_extend(ibuf, (char *)ibuf->userdata);
|
||||
}
|
||||
RE_bake_ibuf_filter(ibuf, (char *)ibuf->userdata, bkr->bake_filter);
|
||||
|
||||
ibuf->userflags|= IB_BITMAPDIRTY;
|
||||
if(ibuf->mipmap[0]) {
|
||||
@ -1028,7 +1006,8 @@ static DerivedMesh *multiresbake_create_hiresdm(Scene *scene, Object *ob, int *l
|
||||
static void clear_images(MTFace *mtface, int totface)
|
||||
{
|
||||
int a;
|
||||
float vec[4]= {0.0f, 0.0f, 0.0f, 0.0f};
|
||||
const float vec_alpha[4]= {0.0f, 0.0f, 0.0f, 0.0f};
|
||||
const float vec_solid[4]= {0.0f, 0.0f, 0.0f, 1.0f};
|
||||
|
||||
for(a= 0; a<totface; a++)
|
||||
mtface[a].tpage->id.flag&= ~LIB_DOIT;
|
||||
@ -1039,7 +1018,7 @@ static void clear_images(MTFace *mtface, int totface)
|
||||
if((ima->id.flag&LIB_DOIT)==0) {
|
||||
ImBuf *ibuf= BKE_image_get_ibuf(ima, NULL);
|
||||
|
||||
IMB_rectfill(ibuf, vec);
|
||||
IMB_rectfill(ibuf, (ibuf->depth == 32) ? vec_alpha : vec_solid);
|
||||
ima->id.flag|= LIB_DOIT;
|
||||
}
|
||||
}
|
||||
@ -1332,7 +1311,6 @@ static void finish_bake_internal(BakeRender *bkr)
|
||||
|
||||
/* freed when baking is done, but if its canceled we need to free here */
|
||||
if (ibuf->userdata) {
|
||||
printf("freed\n");
|
||||
MEM_freeN(ibuf->userdata);
|
||||
ibuf->userdata= NULL;
|
||||
}
|
||||
|
@ -1127,8 +1127,6 @@ static int move_to_layer_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
CTX_DATA_END;
|
||||
}
|
||||
|
||||
if(islamp) reshadeall_displist(scene); /* only frees */
|
||||
|
||||
/* warning, active object may be hidden now */
|
||||
|
||||
|
@ -52,7 +52,7 @@ set(SRC
|
||||
|
||||
if(WITH_CODEC_QUICKTIME)
|
||||
list(APPEND INC ../../quicktime)
|
||||
list(APPEND INC_SYS ${QUICKTIME_INC})
|
||||
list(APPEND INC_SYS ${QUICKTIME_INCLUDE_DIRS})
|
||||
add_definitions(-DWITH_QUICKTIME)
|
||||
endif()
|
||||
|
||||
|
@ -71,6 +71,7 @@ extern const char *buttons_context_dir[]; /* doc access */
|
||||
|
||||
/* buttons_ops.c */
|
||||
void BUTTONS_OT_file_browse(struct wmOperatorType *ot);
|
||||
void BUTTONS_OT_directory_browse(struct wmOperatorType *ot);
|
||||
void BUTTONS_OT_toolbox(struct wmOperatorType *ot);
|
||||
|
||||
#endif /* ED_BUTTONS_INTERN_H */
|
||||
|
@ -104,11 +104,12 @@ static int file_browse_exec(bContext *C, wmOperator *op)
|
||||
FileBrowseOp *fbo= op->customdata;
|
||||
ID *id;
|
||||
char *base, *str, path[FILE_MAX];
|
||||
const char *path_prop= RNA_struct_find_property(op->ptr, "directory") ? "directory" : "filepath";
|
||||
|
||||
if (RNA_property_is_set(op->ptr, "filepath")==0 || fbo==NULL)
|
||||
if (RNA_property_is_set(op->ptr, path_prop)==0 || fbo==NULL)
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
str= RNA_string_get_alloc(op->ptr, "filepath", NULL, 0);
|
||||
str= RNA_string_get_alloc(op->ptr, path_prop, NULL, 0);
|
||||
|
||||
/* add slash for directories, important for some properties */
|
||||
if(RNA_property_subtype(fbo->prop) == PROP_DIRPATH) {
|
||||
@ -191,12 +192,13 @@ static int file_browse_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
else {
|
||||
const char *path_prop= RNA_struct_find_property(op->ptr, "directory") ? "directory" : "filepath";
|
||||
fbo= MEM_callocN(sizeof(FileBrowseOp), "FileBrowseOp");
|
||||
fbo->ptr= ptr;
|
||||
fbo->prop= prop;
|
||||
op->customdata= fbo;
|
||||
|
||||
RNA_string_set(op->ptr, "filepath", str);
|
||||
RNA_string_set(op->ptr, path_prop, str);
|
||||
MEM_freeN(str);
|
||||
|
||||
if(RNA_struct_find_property(op->ptr, "relative_path")) {
|
||||
@ -227,3 +229,19 @@ void BUTTONS_OT_file_browse(wmOperatorType *ot)
|
||||
WM_operator_properties_filesel(ot, 0, FILE_SPECIAL, FILE_OPENFILE, WM_FILESEL_FILEPATH|WM_FILESEL_RELPATH);
|
||||
}
|
||||
|
||||
/* second operator, only difference from BUTTONS_OT_file_browse is WM_FILESEL_DIRECTORY */
|
||||
void BUTTONS_OT_directory_browse(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Accept";
|
||||
ot->description="Open a directory browser, Hold Shift to open the file, Alt to browse containing directory";
|
||||
ot->idname= "BUTTONS_OT_directory_browse";
|
||||
|
||||
/* api callbacks */
|
||||
ot->invoke= file_browse_invoke;
|
||||
ot->exec= file_browse_exec;
|
||||
ot->cancel= file_browse_cancel;
|
||||
|
||||
/* properties */
|
||||
WM_operator_properties_filesel(ot, 0, FILE_SPECIAL, FILE_OPENFILE, WM_FILESEL_DIRECTORY|WM_FILESEL_RELPATH);
|
||||
}
|
||||
|
@ -187,6 +187,7 @@ static void buttons_operatortypes(void)
|
||||
{
|
||||
WM_operatortype_append(BUTTONS_OT_toolbox);
|
||||
WM_operatortype_append(BUTTONS_OT_file_browse);
|
||||
WM_operatortype_append(BUTTONS_OT_directory_browse);
|
||||
}
|
||||
|
||||
static void buttons_keymap(struct wmKeyConfig *keyconf)
|
||||
|
@ -84,7 +84,7 @@ static void console_scrollback_limit(SpaceConsole *sc)
|
||||
{
|
||||
int tot;
|
||||
|
||||
if (U.scrollback < 32) U.scrollback= 128; // XXX - save in user defaults
|
||||
if (U.scrollback < 32) U.scrollback= 256; // XXX - save in user defaults
|
||||
|
||||
for(tot= BLI_countlist(&sc->scrollback); tot > U.scrollback; tot--)
|
||||
console_scrollback_free(sc, sc->scrollback.first);
|
||||
|
@ -185,16 +185,18 @@ void file_draw_buttons(const bContext *C, ARegion *ar)
|
||||
uiButSetCompleteFunc(but, autocomplete_directory, NULL);
|
||||
uiButSetFlag(but, UI_BUT_NO_UTF8);
|
||||
|
||||
but = uiDefBut(block, TEX, B_FS_FILENAME, "",
|
||||
min_x, line2_y, line2_w-chan_offs, btn_h,
|
||||
params->file, 0.0, (float)FILE_MAXFILE-1, 0, 0,
|
||||
overwrite_alert ?"File name, overwrite existing." : "File name.");
|
||||
uiButSetCompleteFunc(but, autocomplete_file, NULL);
|
||||
uiButSetFlag(but, UI_BUT_NO_UTF8);
|
||||
|
||||
/* check if this overrides a file and if the operator option is used */
|
||||
if(overwrite_alert) {
|
||||
uiButSetFlag(but, UI_BUT_REDALERT);
|
||||
if((params->flag & FILE_DIRSEL_ONLY) == 0) {
|
||||
but = uiDefBut(block, TEX, B_FS_FILENAME, "",
|
||||
min_x, line2_y, line2_w-chan_offs, btn_h,
|
||||
params->file, 0.0, (float)FILE_MAXFILE-1, 0, 0,
|
||||
overwrite_alert ?"File name, overwrite existing." : "File name.");
|
||||
uiButSetCompleteFunc(but, autocomplete_file, NULL);
|
||||
uiButSetFlag(but, UI_BUT_NO_UTF8);
|
||||
|
||||
/* check if this overrides a file and if the operator option is used */
|
||||
if(overwrite_alert) {
|
||||
uiButSetFlag(but, UI_BUT_REDALERT);
|
||||
}
|
||||
}
|
||||
|
||||
/* clear func */
|
||||
@ -202,7 +204,7 @@ void file_draw_buttons(const bContext *C, ARegion *ar)
|
||||
}
|
||||
|
||||
/* Filename number increment / decrement buttons. */
|
||||
if (fnumbuttons) {
|
||||
if (fnumbuttons && (params->flag & FILE_DIRSEL_ONLY) == 0) {
|
||||
uiBlockBeginAlign(block);
|
||||
but = uiDefIconButO(block, BUT, "FILE_OT_filenum", 0, ICON_ZOOMOUT,
|
||||
min_x + line2_w + separator - chan_offs, line2_y,
|
||||
|
@ -205,9 +205,10 @@ static FileSelect file_select(bContext* C, const rcti* rect, FileSelType select,
|
||||
SpaceFile *sfile= CTX_wm_space_file(C);
|
||||
FileSelect retval = FILE_SELECT_NOTHING;
|
||||
FileSelection sel= file_selection_get(C, rect, fill); /* get the selection */
|
||||
const FileCheckType check_type= (sfile->params->flag & FILE_DIRSEL_ONLY) ? CHECK_DIRS : CHECK_ALL;
|
||||
|
||||
/* flag the files as selected in the filelist */
|
||||
filelist_select(sfile->files, &sel, select, SELECTED_FILE, CHECK_ALL);
|
||||
filelist_select(sfile->files, &sel, select, SELECTED_FILE, check_type);
|
||||
|
||||
/* Don't act on multiple selected files */
|
||||
if (sel.first != sel.last) select = 0;
|
||||
@ -216,7 +217,7 @@ static FileSelect file_select(bContext* C, const rcti* rect, FileSelType select,
|
||||
if ( (sel.last >= 0) && ((select == FILE_SEL_ADD) || (select == FILE_SEL_TOGGLE)) )
|
||||
{
|
||||
/* Check last selection, if selected, act on the file or dir */
|
||||
if (filelist_is_selected(sfile->files, sel.last, CHECK_ALL)) {
|
||||
if (filelist_is_selected(sfile->files, sel.last, check_type)) {
|
||||
retval = file_select_do(C, sel.last);
|
||||
}
|
||||
}
|
||||
@ -378,8 +379,10 @@ static int file_select_all_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
/* select all only if previously no file was selected */
|
||||
if (is_selected) {
|
||||
filelist_select(sfile->files, &sel, FILE_SEL_REMOVE, SELECTED_FILE, CHECK_ALL);
|
||||
} else {
|
||||
filelist_select(sfile->files, &sel, FILE_SEL_ADD, SELECTED_FILE, CHECK_FILES);
|
||||
}
|
||||
else {
|
||||
const FileCheckType check_type= (sfile->params->flag & FILE_DIRSEL_ONLY) ? CHECK_DIRS : CHECK_FILES;
|
||||
filelist_select(sfile->files, &sel, FILE_SEL_ADD, SELECTED_FILE, check_type);
|
||||
}
|
||||
ED_area_tag_redraw(sa);
|
||||
return OPERATOR_FINISHED;
|
||||
|
@ -915,6 +915,8 @@ void filelist_select_file(struct FileList* filelist, int index, FileSelType sele
|
||||
int check_ok = 0;
|
||||
switch (check) {
|
||||
case CHECK_DIRS:
|
||||
check_ok = S_ISDIR(file->type);
|
||||
break;
|
||||
case CHECK_ALL:
|
||||
check_ok = 1;
|
||||
break;
|
||||
|
@ -121,6 +121,9 @@ short ED_fileselect_set_params(SpaceFile *sfile)
|
||||
|
||||
/* set the parameters from the operator, if it exists */
|
||||
if (op) {
|
||||
short is_filename= FALSE;
|
||||
short is_dir= FALSE;
|
||||
|
||||
BLI_strncpy(params->title, op->type->name, sizeof(params->title));
|
||||
|
||||
if(RNA_struct_find_property(op->ptr, "filemode"))
|
||||
@ -128,7 +131,7 @@ short ED_fileselect_set_params(SpaceFile *sfile)
|
||||
else
|
||||
params->type = FILE_SPECIAL;
|
||||
|
||||
if (RNA_struct_find_property(op->ptr, "filepath") && RNA_property_is_set(op->ptr, "filepath")) {
|
||||
if ((is_dir= is_filename= RNA_struct_find_property(op->ptr, "filepath")!=NULL) && RNA_property_is_set(op->ptr, "filepath")) {
|
||||
char name[FILE_MAX];
|
||||
RNA_string_get(op->ptr, "filepath", name);
|
||||
if (params->type == FILE_LOADLIB) {
|
||||
@ -140,12 +143,13 @@ short ED_fileselect_set_params(SpaceFile *sfile)
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (RNA_struct_find_property(op->ptr, "directory") && RNA_property_is_set(op->ptr, "directory")) {
|
||||
if ((is_dir= RNA_struct_find_property(op->ptr, "directory")!=NULL) && RNA_property_is_set(op->ptr, "directory")) {
|
||||
RNA_string_get(op->ptr, "directory", params->dir);
|
||||
sfile->params->file[0]= '\0';
|
||||
is_dir= TRUE;
|
||||
}
|
||||
|
||||
if (RNA_struct_find_property(op->ptr, "filename") && RNA_property_is_set(op->ptr, "filename")) {
|
||||
if ((is_filename= RNA_struct_find_property(op->ptr, "filename")!=NULL) && RNA_property_is_set(op->ptr, "filename")) {
|
||||
RNA_string_get(op->ptr, "filename", params->file);
|
||||
}
|
||||
}
|
||||
@ -155,6 +159,13 @@ short ED_fileselect_set_params(SpaceFile *sfile)
|
||||
BLI_path_abs(params->dir, G.main->name);
|
||||
}
|
||||
|
||||
if(is_dir==TRUE && is_filename==FALSE) {
|
||||
params->flag |= FILE_DIRSEL_ONLY;
|
||||
}
|
||||
else {
|
||||
params->flag &= ~FILE_DIRSEL_ONLY;
|
||||
}
|
||||
|
||||
params->filter = 0;
|
||||
if(RNA_struct_find_property(op->ptr, "filter_blender"))
|
||||
params->filter |= RNA_boolean_get(op->ptr, "filter_blender") ? BLENDERFILE : 0;
|
||||
@ -216,10 +227,12 @@ short ED_fileselect_set_params(SpaceFile *sfile)
|
||||
params->display= FILE_SHORTDISPLAY;
|
||||
}
|
||||
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
/* default values, if no operator */
|
||||
params->type = FILE_UNIX;
|
||||
params->flag |= FILE_HIDE_DOT;
|
||||
params->flag &= ~FILE_DIRSEL_ONLY;
|
||||
params->display = FILE_SHORTDISPLAY;
|
||||
params->filter = 0;
|
||||
params->filter_glob[0] = '\0';
|
||||
|
@ -288,7 +288,7 @@ static void node_update(const bContext *C, bNodeTree *ntree, bNode *node)
|
||||
RNA_pointer_create(&ntree->id, &RNA_Node, node, &ptr);
|
||||
|
||||
layout= uiBlockLayout(node->block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL,
|
||||
node->locx+NODE_DYS, dy, node->butr.xmax, 20, U.uistyles.first);
|
||||
node->locx+NODE_DYS, dy, node->butr.xmax, NODE_DY, U.uistyles.first);
|
||||
|
||||
node->typeinfo->uifunc(layout, (bContext *)C, &ptr);
|
||||
uiBlockEndAlign(node->block);
|
||||
@ -392,6 +392,7 @@ static void node_update_group(const bContext *C, bNodeTree *UNUSED(ntree), bNode
|
||||
bNode *node;
|
||||
bNodeSocket *sock, *gsock;
|
||||
rctf *rect= &gnode->totr;
|
||||
float node_group_frame= U.dpi*NODE_GROUP_FRAME/72;
|
||||
int counter;
|
||||
int dy;
|
||||
|
||||
@ -430,7 +431,7 @@ static void node_update_group(const bContext *C, bNodeTree *UNUSED(ntree), bNode
|
||||
dy = 0.5f*(rect->ymin+rect->ymax) + NODE_DY*(BLI_countlist(&gnode->inputs)-1);
|
||||
for(gsock=ngroup->inputs.first, sock=gnode->inputs.first; gsock; gsock=gsock->next, sock=sock->next) {
|
||||
gsock->locx = rect->xmin;
|
||||
sock->locx = rect->xmin - NODE_GROUP_FRAME;
|
||||
sock->locx = rect->xmin - node_group_frame;
|
||||
sock->locy = gsock->locy = dy;
|
||||
|
||||
/* prevent long socket lists from growing out of the group box */
|
||||
@ -446,7 +447,7 @@ static void node_update_group(const bContext *C, bNodeTree *UNUSED(ntree), bNode
|
||||
dy = 0.5f*(rect->ymin+rect->ymax) + NODE_DY*(BLI_countlist(&gnode->outputs)-1);
|
||||
for(gsock=ngroup->outputs.first, sock=gnode->outputs.first; gsock; gsock=gsock->next, sock=sock->next) {
|
||||
gsock->locx = rect->xmax;
|
||||
sock->locx = rect->xmax + NODE_GROUP_FRAME;
|
||||
sock->locx = rect->xmax + node_group_frame;
|
||||
sock->locy = gsock->locy = dy - NODE_DYS;
|
||||
|
||||
/* prevent long socket lists from growing out of the group box */
|
||||
@ -654,7 +655,7 @@ static uiBlock *socket_vector_menu(bContext *C, ARegion *ar, void *args_v)
|
||||
block= uiBeginBlock(C, ar, "socket menu", UI_EMBOSS);
|
||||
uiBlockSetFlag(block, UI_BLOCK_KEEP_OPEN);
|
||||
|
||||
layout= uiLayoutColumn(uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, args->x, args->y+2, args->width, 20, U.uistyles.first), 0);
|
||||
layout= uiLayoutColumn(uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, args->x, args->y+2, args->width, NODE_DY, U.uistyles.first), 0);
|
||||
|
||||
uiItemR(layout, &args->ptr, "default_value", UI_ITEM_R_EXPAND, "", ICON_NONE);
|
||||
|
||||
@ -675,7 +676,7 @@ static void node_draw_socket_button(bNodeTree *ntree, bNodeSocket *sock, const c
|
||||
switch (sock->type) {
|
||||
case SOCK_VALUE:
|
||||
bt=uiDefButR(block, NUM, B_NODE_EXEC, name,
|
||||
x, y+1, width, 17,
|
||||
x, y+1, width, NODE_DY-2,
|
||||
&ptr, "default_value", 0, sock->ns.min, sock->ns.max, -1, -1, NULL);
|
||||
if (cb)
|
||||
uiButSetFunc(bt, cb, arg1, arg2);
|
||||
@ -693,7 +694,7 @@ static void node_draw_socket_button(bNodeTree *ntree, bNodeSocket *sock, const c
|
||||
args->arg2 = arg2;
|
||||
|
||||
uiDefBlockButN(block, socket_vector_menu, args, name,
|
||||
x, y+1, width, 17,
|
||||
x, y+1, width, NODE_DY-2,
|
||||
"");
|
||||
break;
|
||||
|
||||
@ -701,14 +702,14 @@ static void node_draw_socket_button(bNodeTree *ntree, bNodeSocket *sock, const c
|
||||
labelw= width - 40;
|
||||
|
||||
bt=uiDefButR(block, COL, B_NODE_EXEC, "",
|
||||
x, y+2, (labelw>0 ? 40 : width), 15,
|
||||
x, y+2, (labelw>0 ? 40 : width), NODE_DY-2,
|
||||
&ptr, "default_value", 0, sock->ns.min, sock->ns.max, -1, -1, NULL);
|
||||
if (cb)
|
||||
uiButSetFunc(bt, cb, arg1, arg2);
|
||||
|
||||
if (name[0]!='\0' && labelw>0)
|
||||
uiDefBut(block, LABEL, 0, name,
|
||||
x + 40, y+2, labelw, 15,
|
||||
x + 40, y+2, labelw, NODE_DY-2,
|
||||
NULL, 0, 0, 0, 0, "");
|
||||
break;
|
||||
}
|
||||
@ -719,6 +720,8 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN
|
||||
bNodeSocket *sock;
|
||||
rctf *rct= &node->totr;
|
||||
float iconofs;
|
||||
float socket_size= NODE_SOCKSIZE*U.dpi/72;
|
||||
float iconbutw= 0.8f*UI_UNIT_X;
|
||||
int color_id= node_get_colorid(node);
|
||||
char showname[128]; /* 128 used below */
|
||||
View2D *v2d = &ar->v2d;
|
||||
@ -761,32 +764,32 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN
|
||||
icon_id= ICON_MATERIAL;
|
||||
else
|
||||
icon_id= ICON_MATERIAL_DATA;
|
||||
iconofs-=15.0f;
|
||||
iconofs-=iconbutw;
|
||||
uiDefIconBut(node->block, LABEL, B_REDR, icon_id, iconofs, rct->ymax-NODE_DY,
|
||||
UI_UNIT_X, UI_UNIT_Y, NULL, 0.0, 0.0, 1.0, 0.5, "");
|
||||
iconbutw, UI_UNIT_Y, NULL, 0.0, 0.0, 1.0, 0.5, "");
|
||||
}
|
||||
if(node->type == NODE_GROUP) {
|
||||
|
||||
iconofs-=15.0f;
|
||||
iconofs-=iconbutw;
|
||||
uiDefIconBut(node->block, LABEL, B_REDR, ICON_NODETREE, iconofs, rct->ymax-NODE_DY,
|
||||
UI_UNIT_X, UI_UNIT_Y, NULL, 0.0, 0.0, 1.0, 0.5, "");
|
||||
iconbutw, UI_UNIT_Y, NULL, 0.0, 0.0, 1.0, 0.5, "");
|
||||
}
|
||||
if(node->typeinfo->flag & NODE_OPTIONS) {
|
||||
iconofs-=15.0f;
|
||||
iconofs-=iconbutw;
|
||||
uiDefIconBut(node->block, LABEL, B_REDR, ICON_BUTS, iconofs, rct->ymax-NODE_DY,
|
||||
UI_UNIT_X, UI_UNIT_Y, NULL, 0.0, 0.0, 1.0, 0.5, "");
|
||||
iconbutw, UI_UNIT_Y, NULL, 0.0, 0.0, 1.0, 0.5, "");
|
||||
}
|
||||
{ /* always hide/reveal unused sockets */
|
||||
int shade;
|
||||
|
||||
iconofs-=15.0f;
|
||||
iconofs-=iconbutw;
|
||||
// XXX re-enable
|
||||
/*if(node_has_hidden_sockets(node))
|
||||
shade= -40;
|
||||
else*/
|
||||
shade= -90;
|
||||
uiDefIconBut(node->block, LABEL, B_REDR, ICON_PLUS, iconofs, rct->ymax-NODE_DY,
|
||||
UI_UNIT_X, UI_UNIT_Y, NULL, 0.0, 0.0, 1.0, 0.5, "");
|
||||
iconbutw, UI_UNIT_Y, NULL, 0.0, 0.0, 1.0, 0.5, "");
|
||||
}
|
||||
|
||||
/* title */
|
||||
@ -851,7 +854,7 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN
|
||||
/* socket inputs, buttons */
|
||||
for(sock= node->inputs.first; sock; sock= sock->next) {
|
||||
if(!(sock->flag & (SOCK_HIDDEN|SOCK_UNAVAIL))) {
|
||||
socket_circle_draw(sock, NODE_SOCKSIZE);
|
||||
socket_circle_draw(sock, socket_size);
|
||||
|
||||
if(node->block && sock->link==NULL) {
|
||||
node_draw_socket_button(ntree, sock, sock->name, node->block, sock->locx+NODE_DYS, sock->locy-NODE_DYS, node->width-NODE_DY, node_sync_cb, snode, node);
|
||||
@ -869,7 +872,7 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN
|
||||
float slen;
|
||||
int ofs= 0;
|
||||
|
||||
socket_circle_draw(sock, NODE_SOCKSIZE);
|
||||
socket_circle_draw(sock, socket_size);
|
||||
|
||||
UI_ThemeColor(TH_TEXT);
|
||||
slen= snode->aspect*UI_GetStringWidth(sock->name);
|
||||
@ -904,6 +907,7 @@ static void node_draw_hidden(const bContext *C, ARegion *ar, SpaceNode *snode, b
|
||||
rctf *rct= &node->totr;
|
||||
float dx, centy= 0.5f*(rct->ymax+rct->ymin);
|
||||
float hiddenrad= 0.5f*(rct->ymax-rct->ymin);
|
||||
float socket_size= NODE_SOCKSIZE*U.dpi/72;
|
||||
int color_id= node_get_colorid(node);
|
||||
char showname[128]; /* 128 is used below */
|
||||
|
||||
@ -978,12 +982,12 @@ static void node_draw_hidden(const bContext *C, ARegion *ar, SpaceNode *snode, b
|
||||
/* sockets */
|
||||
for(sock= node->inputs.first; sock; sock= sock->next) {
|
||||
if(!(sock->flag & (SOCK_HIDDEN|SOCK_UNAVAIL)))
|
||||
socket_circle_draw(sock, NODE_SOCKSIZE);
|
||||
socket_circle_draw(sock, socket_size);
|
||||
}
|
||||
|
||||
for(sock= node->outputs.first; sock; sock= sock->next) {
|
||||
if(!(sock->flag & (SOCK_HIDDEN|SOCK_UNAVAIL)))
|
||||
socket_circle_draw(sock, NODE_SOCKSIZE);
|
||||
socket_circle_draw(sock, socket_size);
|
||||
}
|
||||
|
||||
uiEndBlock(C, node->block);
|
||||
@ -1043,17 +1047,30 @@ static void node_draw_group(const bContext *C, ARegion *ar, SpaceNode *snode, bN
|
||||
{
|
||||
bNodeTree *ngroup= (bNodeTree *)gnode->id;
|
||||
bNodeSocket *sock;
|
||||
rctf rect= gnode->totr;
|
||||
int index;
|
||||
uiLayout *layout;
|
||||
PointerRNA ptr;
|
||||
uiBut *bt;
|
||||
rctf rect= gnode->totr;
|
||||
float socket_size= NODE_SOCKSIZE*U.dpi/72;
|
||||
float node_group_frame= U.dpi*NODE_GROUP_FRAME/72;
|
||||
float group_header= 26*U.dpi/72;
|
||||
float arrowbutw= 0.8f*UI_UNIT_X;
|
||||
/* layout stuff for buttons on group left frame */
|
||||
float col1= 6, colw1= 0.6f*node_group_frame;
|
||||
float col2= col1 + colw1+6;
|
||||
float col3= node_group_frame - arrowbutw - 6;
|
||||
/* layout stuff for buttons on group right frame */
|
||||
float cor1= 6;
|
||||
float cor2= cor1 + arrowbutw + 6;
|
||||
float cor3= cor2 + arrowbutw + 6, corw3= node_group_frame - cor3-6;
|
||||
|
||||
int index;
|
||||
|
||||
/* backdrop header */
|
||||
glEnable(GL_BLEND);
|
||||
uiSetRoundBox(3);
|
||||
UI_ThemeColorShadeAlpha(TH_NODE_GROUP, 0, -70);
|
||||
uiDrawBox(GL_POLYGON, rect.xmin-NODE_GROUP_FRAME, rect.ymax, rect.xmax+NODE_GROUP_FRAME, rect.ymax+26, BASIS_RAD);
|
||||
uiDrawBox(GL_POLYGON, rect.xmin-node_group_frame, rect.ymax, rect.xmax+node_group_frame, rect.ymax+group_header, BASIS_RAD);
|
||||
|
||||
/* backdrop body */
|
||||
UI_ThemeColorShadeAlpha(TH_BACK, -8, -70);
|
||||
@ -1063,12 +1080,12 @@ static void node_draw_group(const bContext *C, ARegion *ar, SpaceNode *snode, bN
|
||||
/* input column */
|
||||
UI_ThemeColorShadeAlpha(TH_BACK, 10, -50);
|
||||
uiSetRoundBox(8);
|
||||
uiDrawBox(GL_POLYGON, rect.xmin-NODE_GROUP_FRAME, rect.ymin, rect.xmin, rect.ymax, BASIS_RAD);
|
||||
uiDrawBox(GL_POLYGON, rect.xmin-node_group_frame, rect.ymin, rect.xmin, rect.ymax, BASIS_RAD);
|
||||
|
||||
/* output column */
|
||||
UI_ThemeColorShadeAlpha(TH_BACK, 10, -50);
|
||||
uiSetRoundBox(4);
|
||||
uiDrawBox(GL_POLYGON, rect.xmax, rect.ymin, rect.xmax+NODE_GROUP_FRAME, rect.ymax, BASIS_RAD);
|
||||
uiDrawBox(GL_POLYGON, rect.xmax, rect.ymin, rect.xmax+node_group_frame, rect.ymax, BASIS_RAD);
|
||||
|
||||
/* input column separator */
|
||||
glColor4ub(200, 200, 200, 140);
|
||||
@ -1088,15 +1105,15 @@ static void node_draw_group(const bContext *C, ARegion *ar, SpaceNode *snode, bN
|
||||
uiSetRoundBox(15);
|
||||
glColor4ub(200, 200, 200, 140);
|
||||
glEnable( GL_LINE_SMOOTH );
|
||||
uiDrawBox(GL_LINE_LOOP, rect.xmin-NODE_GROUP_FRAME, rect.ymin, rect.xmax+NODE_GROUP_FRAME, rect.ymax+26, BASIS_RAD);
|
||||
uiDrawBox(GL_LINE_LOOP, rect.xmin-node_group_frame, rect.ymin, rect.xmax+node_group_frame, rect.ymax+group_header, BASIS_RAD);
|
||||
glDisable( GL_LINE_SMOOTH );
|
||||
glDisable(GL_BLEND);
|
||||
|
||||
/* backdrop title */
|
||||
UI_ThemeColor(TH_TEXT_HI);
|
||||
|
||||
layout = uiBlockLayout(gnode->block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, (short)(rect.xmin+15), (short)(rect.ymax+23),
|
||||
MIN2((int)(rect.xmax - rect.xmin-18.0f), 140), 20, U.uistyles.first);
|
||||
layout = uiBlockLayout(gnode->block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, (short)(rect.xmin+15), (short)(rect.ymax+group_header),
|
||||
MIN2((int)(rect.xmax - rect.xmin-18.0f), node_group_frame+20), group_header, U.uistyles.first);
|
||||
RNA_pointer_create(&ntree->id, &RNA_Node, gnode, &ptr);
|
||||
uiTemplateIDBrowse(layout, (bContext*)C, &ptr, "node_tree", NULL, NULL, NULL);
|
||||
uiBlockLayoutResolve(gnode->block, NULL, NULL);
|
||||
@ -1106,31 +1123,33 @@ static void node_draw_group(const bContext *C, ARegion *ar, SpaceNode *snode, bN
|
||||
|
||||
/* group sockets */
|
||||
for(sock=ngroup->inputs.first, index=0; sock; sock=sock->next, ++index) {
|
||||
socket_circle_draw(sock, NODE_SOCKSIZE);
|
||||
float locx= sock->locx - node_group_frame;
|
||||
|
||||
socket_circle_draw(sock, socket_size);
|
||||
/* small hack to use socket_circle_draw function with offset */
|
||||
sock->locx -= NODE_GROUP_FRAME;
|
||||
socket_circle_draw(sock, NODE_SOCKSIZE);
|
||||
sock->locx += NODE_GROUP_FRAME;
|
||||
sock->locx -= node_group_frame;
|
||||
socket_circle_draw(sock, socket_size);
|
||||
sock->locx += node_group_frame;
|
||||
|
||||
bt = uiDefBut(gnode->block, TEX, 0, "",
|
||||
sock->locx-114, sock->locy+1, 72, NODE_DY,
|
||||
locx+col1, sock->locy+1, colw1, NODE_DY,
|
||||
sock->name, 0, 31, 0, 0, "");
|
||||
uiButSetFunc(bt, group_verify_cb, snode, ngroup);
|
||||
|
||||
node_draw_socket_button(ngroup, sock, "", gnode->block,
|
||||
sock->locx-114, sock->locy-NODE_DY, 72,
|
||||
locx+col1, sock->locy-NODE_DY, colw1,
|
||||
NULL, NULL, NULL);
|
||||
|
||||
uiBlockSetDirection(gnode->block, UI_TOP);
|
||||
uiBlockBeginAlign(gnode->block);
|
||||
bt = uiDefIconButO(gnode->block, BUT, "NODE_OT_group_socket_move_up", 0, ICON_TRIA_UP,
|
||||
sock->locx-40, sock->locy, 16, 16, "");
|
||||
locx+col2, sock->locy, arrowbutw, arrowbutw, "");
|
||||
if (!sock->prev)
|
||||
uiButSetFlag(bt, UI_BUT_DISABLED);
|
||||
RNA_int_set(uiButGetOperatorPtrRNA(bt), "index", index);
|
||||
RNA_enum_set(uiButGetOperatorPtrRNA(bt), "in_out", SOCK_IN);
|
||||
bt = uiDefIconButO(gnode->block, BUT, "NODE_OT_group_socket_move_down", 0, ICON_TRIA_DOWN,
|
||||
sock->locx-40, sock->locy-16, 16, 16, "");
|
||||
locx+col2, sock->locy-arrowbutw, arrowbutw, arrowbutw, "");
|
||||
if (!sock->next)
|
||||
uiButSetFlag(bt, UI_BUT_DISABLED);
|
||||
RNA_int_set(uiButGetOperatorPtrRNA(bt), "index", index);
|
||||
@ -1140,22 +1159,24 @@ static void node_draw_group(const bContext *C, ARegion *ar, SpaceNode *snode, bN
|
||||
|
||||
uiBlockSetEmboss(gnode->block, UI_EMBOSSN);
|
||||
bt = uiDefIconButO(gnode->block, BUT, "NODE_OT_group_socket_remove", 0, ICON_X,
|
||||
sock->locx-22, sock->locy-8, 16, 16, "");
|
||||
locx+col3, sock->locy-0.5f*arrowbutw, arrowbutw, arrowbutw, "");
|
||||
RNA_int_set(uiButGetOperatorPtrRNA(bt), "index", index);
|
||||
RNA_enum_set(uiButGetOperatorPtrRNA(bt), "in_out", SOCK_IN);
|
||||
uiBlockSetEmboss(gnode->block, UI_EMBOSS);
|
||||
}
|
||||
|
||||
for(sock=ngroup->outputs.first, index=0; sock; sock=sock->next, ++index) {
|
||||
socket_circle_draw(sock, NODE_SOCKSIZE);
|
||||
float locx= sock->locx;
|
||||
|
||||
socket_circle_draw(sock, socket_size);
|
||||
/* small hack to use socket_circle_draw function with offset */
|
||||
sock->locx += NODE_GROUP_FRAME;
|
||||
socket_circle_draw(sock, NODE_SOCKSIZE);
|
||||
sock->locx -= NODE_GROUP_FRAME;
|
||||
sock->locx += node_group_frame;
|
||||
socket_circle_draw(sock, socket_size);
|
||||
sock->locx -= node_group_frame;
|
||||
|
||||
uiBlockSetEmboss(gnode->block, UI_EMBOSSN);
|
||||
bt = uiDefIconButO(gnode->block, BUT, "NODE_OT_group_socket_remove", 0, ICON_X,
|
||||
sock->locx+6, sock->locy-8, 16, 16, "");
|
||||
locx+col1, sock->locy-0.5f*arrowbutw, arrowbutw, arrowbutw, "");
|
||||
RNA_int_set(uiButGetOperatorPtrRNA(bt), "index", index);
|
||||
RNA_enum_set(uiButGetOperatorPtrRNA(bt), "in_out", SOCK_OUT);
|
||||
uiBlockSetEmboss(gnode->block, UI_EMBOSS);
|
||||
@ -1163,13 +1184,13 @@ static void node_draw_group(const bContext *C, ARegion *ar, SpaceNode *snode, bN
|
||||
uiBlockSetDirection(gnode->block, UI_TOP);
|
||||
uiBlockBeginAlign(gnode->block);
|
||||
bt = uiDefIconButO(gnode->block, BUT, "NODE_OT_group_socket_move_up", 0, ICON_TRIA_UP,
|
||||
sock->locx+24, sock->locy, 16, 16, "");
|
||||
locx+cor2, sock->locy, arrowbutw, arrowbutw, "");
|
||||
if (!sock->prev)
|
||||
uiButSetFlag(bt, UI_BUT_DISABLED);
|
||||
RNA_int_set(uiButGetOperatorPtrRNA(bt), "index", index);
|
||||
RNA_enum_set(uiButGetOperatorPtrRNA(bt), "in_out", SOCK_OUT);
|
||||
bt = uiDefIconButO(gnode->block, BUT, "NODE_OT_group_socket_move_down", 0, ICON_TRIA_DOWN,
|
||||
sock->locx+24, sock->locy-16, 16, 16, "");
|
||||
locx+cor2, sock->locy-arrowbutw, arrowbutw, arrowbutw, "");
|
||||
if (!sock->next)
|
||||
uiButSetFlag(bt, UI_BUT_DISABLED);
|
||||
RNA_int_set(uiButGetOperatorPtrRNA(bt), "index", index);
|
||||
@ -1179,17 +1200,17 @@ static void node_draw_group(const bContext *C, ARegion *ar, SpaceNode *snode, bN
|
||||
|
||||
if (sock->link) {
|
||||
bt = uiDefBut(gnode->block, TEX, 0, "",
|
||||
sock->locx+42, sock->locy-NODE_DYS+1, 72, NODE_DY,
|
||||
locx+cor3, sock->locy-NODE_DYS+1, corw3, NODE_DY,
|
||||
sock->name, 0, 31, 0, 0, "");
|
||||
uiButSetFunc(bt, group_verify_cb, snode, ngroup);
|
||||
}
|
||||
else {
|
||||
bt = uiDefBut(gnode->block, TEX, 0, "",
|
||||
sock->locx+42, sock->locy+1, 72, NODE_DY,
|
||||
locx+cor3, sock->locy+1, corw3, NODE_DY,
|
||||
sock->name, 0, 31, 0, 0, "");
|
||||
uiButSetFunc(bt, group_verify_cb, snode, ngroup);
|
||||
|
||||
node_draw_socket_button(ngroup, sock, "", gnode->block, sock->locx+42, sock->locy-NODE_DY, 72, NULL, NULL, NULL);
|
||||
node_draw_socket_button(ngroup, sock, "", gnode->block, locx+cor3, sock->locy-NODE_DY, corw3, NULL, NULL, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -504,14 +504,7 @@ void node_set_active(SpaceNode *snode, bNode *node)
|
||||
ED_node_changed_update(snode->id, node);
|
||||
}
|
||||
|
||||
// XXX
|
||||
#if 0
|
||||
if(node->id)
|
||||
; // XXX BIF_preview_changed(-1); /* temp hack to force texture preview to update */
|
||||
|
||||
// allqueue(REDRAWBUTSSHADING, 1);
|
||||
// allqueue(REDRAWIPO, 0);
|
||||
#endif
|
||||
WM_main_add_notifier(NC_MATERIAL|ND_NODES, node->id);
|
||||
}
|
||||
else if(snode->treetype==NTREE_COMPOSIT) {
|
||||
Scene *scene= (Scene*)snode->id;
|
||||
@ -1332,7 +1325,7 @@ static int node_resize_modal(bContext *C, wmOperator *op, wmEvent *event)
|
||||
}
|
||||
else {
|
||||
node->width= nsw->oldwidth + mx - nsw->mxstart;
|
||||
CLAMP(node->width, node->typeinfo->minwidth, node->typeinfo->maxwidth);
|
||||
CLAMP(node->width, UI_DPI_FAC*node->typeinfo->minwidth, UI_DPI_FAC*node->typeinfo->maxwidth);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -152,8 +152,8 @@ extern const char *node_context_dir[];
|
||||
// XXX from BSE_node.h
|
||||
#define HIDDEN_RAD 15.0f
|
||||
#define BASIS_RAD 8.0f
|
||||
#define NODE_DYS 10
|
||||
#define NODE_DY 20
|
||||
#define NODE_DYS (U.widget_unit/2)
|
||||
#define NODE_DY U.widget_unit
|
||||
#define NODE_SOCKSIZE 5
|
||||
|
||||
// XXX button events (butspace)
|
||||
|
@ -200,6 +200,9 @@ static void node_area_listener(ScrArea *sa, wmNotifier *wmn)
|
||||
ED_area_tag_refresh(sa);
|
||||
else if(wmn->data==ND_SHADING_DRAW)
|
||||
ED_area_tag_refresh(sa);
|
||||
else if(wmn->action==NA_ADDED && snode->edittree)
|
||||
nodeSetActiveID(snode->edittree, ID_MA, wmn->reference);
|
||||
|
||||
}
|
||||
break;
|
||||
case NC_TEXTURE:
|
||||
|
@ -1763,7 +1763,7 @@ void OUTLINER_OT_expanded_toggle(wmOperatorType *ot)
|
||||
ot->exec= outliner_toggle_expanded_exec;
|
||||
ot->poll= ED_operator_outliner_active;
|
||||
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
/* no undo or registry, UI option */
|
||||
}
|
||||
|
||||
/* --- */
|
||||
@ -1798,7 +1798,7 @@ void OUTLINER_OT_selected_toggle(wmOperatorType *ot)
|
||||
ot->exec= outliner_toggle_selected_exec;
|
||||
ot->poll= ED_operator_outliner_active;
|
||||
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
/* no undo or registry, UI option */
|
||||
}
|
||||
|
||||
/* --- */
|
||||
@ -1855,7 +1855,7 @@ void OUTLINER_OT_show_one_level(wmOperatorType *ot)
|
||||
ot->exec= outliner_one_level_exec;
|
||||
ot->poll= ED_operator_outliner_active;
|
||||
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
/* no undo or registry, UI option */
|
||||
|
||||
/* properties */
|
||||
RNA_def_boolean(ot->srna, "open", 1, "Open", "Expand all entries one level deep.");
|
||||
@ -3050,7 +3050,7 @@ void OUTLINER_OT_show_hierarchy(wmOperatorType *ot)
|
||||
ot->exec= outliner_show_hierarchy_exec;
|
||||
ot->poll= ED_operator_outliner_active; // TODO: shouldn't be allowed in RNA views...
|
||||
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
/* no undo or registry, UI option */
|
||||
}
|
||||
|
||||
void outliner_select(SpaceOops *soops, ListBase *lb, int *index, short *selecting)
|
||||
|
@ -82,6 +82,7 @@
|
||||
#define SEQPROP_ENDFRAME (1<<1)
|
||||
#define SEQPROP_FILES (1<<2)
|
||||
#define SEQPROP_NOPATHS (1<<3)
|
||||
#define SEQPROP_NOCHAN (1<<4)
|
||||
|
||||
#define SELECT 1
|
||||
|
||||
@ -122,8 +123,12 @@ static void sequencer_generic_invoke_xy__internal(bContext *C, wmOperator *op, w
|
||||
float mval_v2d[2];
|
||||
|
||||
UI_view2d_region_to_view(v2d, event->mval[0], event->mval[1], &mval_v2d[0], &mval_v2d[1]);
|
||||
|
||||
RNA_int_set(op->ptr, "channel", (int)mval_v2d[1]+0.5f);
|
||||
|
||||
/* effect strips dont need a channel initialized from the mouse */
|
||||
if(!(flag & SEQPROP_NOCHAN)) {
|
||||
RNA_int_set(op->ptr, "channel", (int)mval_v2d[1]+0.5f);
|
||||
}
|
||||
|
||||
RNA_int_set(op->ptr, "frame_start", (int)mval_v2d[0]);
|
||||
|
||||
if ((flag & SEQPROP_ENDFRAME) && RNA_property_is_set(op->ptr, "frame_end")==0)
|
||||
@ -546,7 +551,7 @@ void SEQUENCER_OT_image_strip_add(struct wmOperatorType *ot)
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
|
||||
WM_operator_properties_filesel(ot, FOLDERFILE|IMAGEFILE, FILE_SPECIAL, FILE_OPENFILE, WM_FILESEL_DIRECTORY|WM_FILESEL_RELPATH);
|
||||
WM_operator_properties_filesel(ot, FOLDERFILE|IMAGEFILE, FILE_SPECIAL, FILE_OPENFILE, WM_FILESEL_DIRECTORY|WM_FILESEL_FILENAME|WM_FILESEL_RELPATH);
|
||||
sequencer_generic_props__internal(ot, SEQPROP_STARTFRAME|SEQPROP_ENDFRAME|SEQPROP_FILES);
|
||||
}
|
||||
|
||||
@ -636,14 +641,16 @@ static int sequencer_add_effect_strip_exec(bContext *C, wmOperator *op)
|
||||
seq->blend_mode= SEQ_CROSS;
|
||||
}
|
||||
|
||||
// XXX, this conflicts with giving a channel with invoke, perhaps we should have an active channel
|
||||
// but for now this is much more usable
|
||||
if(seq->seq1 || seq->seq2 || seq->seq3) {
|
||||
int chan= MAX3( seq->seq1 ? seq->seq1->machine : 0,
|
||||
seq->seq2 ? seq->seq2->machine : 0,
|
||||
seq->seq3 ? seq->seq3->machine : 0);
|
||||
if(chan < MAXSEQ)
|
||||
seq->machine= chan;
|
||||
/* an unset channel is a special case where we automatically go above
|
||||
* the other strips. */
|
||||
if(!RNA_property_is_set(op->ptr, "channel")) {
|
||||
if(seq->seq1) {
|
||||
int chan= MAX3( seq->seq1 ? seq->seq1->machine : 0,
|
||||
seq->seq2 ? seq->seq2->machine : 0,
|
||||
seq->seq3 ? seq->seq3->machine : 0);
|
||||
if(chan < MAXSEQ)
|
||||
seq->machine= chan;
|
||||
}
|
||||
}
|
||||
|
||||
if(seq_test_overlap(ed->seqbasep, seq)) shuffle_seq(ed->seqbasep, seq, scene);
|
||||
@ -670,14 +677,30 @@ static int sequencer_add_effect_strip_exec(bContext *C, wmOperator *op)
|
||||
/* add color */
|
||||
static int sequencer_add_effect_strip_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
{
|
||||
short is_type_set= RNA_property_is_set(op->ptr, "type");
|
||||
int type= -1;
|
||||
int prop_flag= SEQPROP_ENDFRAME;
|
||||
|
||||
if(!ED_operator_sequencer_active(C)) {
|
||||
BKE_report(op->reports, RPT_ERROR, "Sequencer area not active");
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
sequencer_generic_invoke_xy__internal(C, op, event, SEQPROP_ENDFRAME);
|
||||
if(is_type_set) {
|
||||
type= RNA_enum_get(op->ptr, "type");
|
||||
|
||||
if (RNA_property_is_set(op->ptr, "type") && RNA_enum_get(op->ptr, "type")==SEQ_PLUGIN) {
|
||||
/* when invoking an effect strip which uses inputs,
|
||||
* skip initialzing the channel from the mouse.
|
||||
* Instead leave the property unset so exec() initializes it to be
|
||||
* above the strips its applied to. */
|
||||
if(get_sequence_effect_num_inputs(type) != 0) {
|
||||
prop_flag |= SEQPROP_NOCHAN;
|
||||
}
|
||||
}
|
||||
|
||||
sequencer_generic_invoke_xy__internal(C, op, event, prop_flag);
|
||||
|
||||
if (is_type_set && type==SEQ_PLUGIN) {
|
||||
|
||||
if(!RNA_property_is_set(op->ptr, "relative_path"))
|
||||
RNA_boolean_set(op->ptr, "relative_path", U.flag & USER_RELPATHS);
|
||||
|
@ -117,7 +117,11 @@ void draw_motion_path_instance(Scene *scene,
|
||||
len = mpath->length;
|
||||
mpv_start= mpath->points;
|
||||
}
|
||||
|
||||
|
||||
if(len <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* draw curve-line of path */
|
||||
glShadeModel(GL_SMOOTH);
|
||||
|
||||
|
@ -1658,7 +1658,7 @@ static void bone_matrix_translate_y(float mat[][4], float y)
|
||||
}
|
||||
|
||||
/* assumes object is Armature with pose */
|
||||
static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt, short ghost)
|
||||
static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt, const short is_ghost, const short is_outline)
|
||||
{
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
Object *ob= base->object;
|
||||
@ -1820,7 +1820,7 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
|
||||
}
|
||||
|
||||
/* prepare colors */
|
||||
if(ghost) {
|
||||
if(is_ghost) {
|
||||
/* 13 October 2009, Disabled this to make ghosting show the right colors (Aligorith) */
|
||||
}
|
||||
else if (arm->flag & ARM_POSEMODE)
|
||||
@ -1990,7 +1990,7 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
|
||||
draw_pose_dofs(ob);
|
||||
|
||||
/* finally names and axes */
|
||||
if (arm->flag & (ARM_DRAWNAMES|ARM_DRAWAXES)) {
|
||||
if (arm->flag & (ARM_DRAWNAMES|ARM_DRAWAXES) && is_outline == 0) {
|
||||
/* patch for several 3d cards (IBM mostly) that crash on glSelect with text drawing */
|
||||
if ((G.f & G_PICKSEL) == 0) {
|
||||
float vec[3];
|
||||
@ -2348,7 +2348,7 @@ static void draw_ghost_poses_range(Scene *scene, View3D *v3d, ARegion *ar, Base
|
||||
|
||||
BKE_animsys_evaluate_animdata(&ob->id, adt, (float)CFRA, ADT_RECALC_ALL);
|
||||
where_is_pose(scene, ob);
|
||||
draw_pose_bones(scene, v3d, ar, base, OB_WIRE, TRUE);
|
||||
draw_pose_bones(scene, v3d, ar, base, OB_WIRE, TRUE, FALSE);
|
||||
}
|
||||
glDisable(GL_BLEND);
|
||||
if (v3d->zbuf) glEnable(GL_DEPTH_TEST);
|
||||
@ -2427,7 +2427,7 @@ static void draw_ghost_poses_keys(Scene *scene, View3D *v3d, ARegion *ar, Base *
|
||||
|
||||
BKE_animsys_evaluate_animdata(&ob->id, adt, (float)CFRA, ADT_RECALC_ALL);
|
||||
where_is_pose(scene, ob);
|
||||
draw_pose_bones(scene, v3d, ar, base, OB_WIRE, TRUE);
|
||||
draw_pose_bones(scene, v3d, ar, base, OB_WIRE, TRUE, FALSE);
|
||||
}
|
||||
glDisable(GL_BLEND);
|
||||
if (v3d->zbuf) glEnable(GL_DEPTH_TEST);
|
||||
@ -2497,7 +2497,7 @@ static void draw_ghost_poses(Scene *scene, View3D *v3d, ARegion *ar, Base *base)
|
||||
if (CFRA != cfrao) {
|
||||
BKE_animsys_evaluate_animdata(&ob->id, adt, (float)CFRA, ADT_RECALC_ALL);
|
||||
where_is_pose(scene, ob);
|
||||
draw_pose_bones(scene, v3d, ar, base, OB_WIRE, TRUE);
|
||||
draw_pose_bones(scene, v3d, ar, base, OB_WIRE, TRUE, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2512,7 +2512,7 @@ static void draw_ghost_poses(Scene *scene, View3D *v3d, ARegion *ar, Base *base)
|
||||
if (CFRA != cfrao) {
|
||||
BKE_animsys_evaluate_animdata(&ob->id, adt, (float)CFRA, ADT_RECALC_ALL);
|
||||
where_is_pose(scene, ob);
|
||||
draw_pose_bones(scene, v3d, ar, base, OB_WIRE, TRUE);
|
||||
draw_pose_bones(scene, v3d, ar, base, OB_WIRE, TRUE, FALSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2533,7 +2533,7 @@ static void draw_ghost_poses(Scene *scene, View3D *v3d, ARegion *ar, Base *base)
|
||||
/* ********************************** Armature Drawing - Main ************************* */
|
||||
|
||||
/* called from drawobject.c, return 1 if nothing was drawn */
|
||||
int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt, int flag)
|
||||
int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt, int flag, const short is_outline)
|
||||
{
|
||||
Object *ob= base->object;
|
||||
bArmature *arm= ob->data;
|
||||
@ -2599,7 +2599,7 @@ int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt, in
|
||||
}
|
||||
}
|
||||
}
|
||||
draw_pose_bones(scene, v3d, ar, base, dt, FALSE);
|
||||
draw_pose_bones(scene, v3d, ar, base, dt, FALSE, is_outline);
|
||||
arm->flag &= ~ARM_POSEMODE;
|
||||
|
||||
if(ob->mode & OB_MODE_POSE)
|
||||
|
@ -215,7 +215,7 @@ int draw_glsl_material(Scene *scene, Object *ob, View3D *v3d, int dt)
|
||||
if(ob==OBACT && (ob && ob->mode & OB_MODE_WEIGHT_PAINT))
|
||||
return 0;
|
||||
|
||||
return (scene->gm.matmode == GAME_MAT_GLSL) && (dt >= OB_SHADED);
|
||||
return (scene->gm.matmode == GAME_MAT_GLSL) && (dt > OB_SOLID);
|
||||
}
|
||||
|
||||
static int check_material_alpha(Base *base, Mesh *me, int glsl)
|
||||
@ -2584,7 +2584,6 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
|
||||
const short is_paint_sel= (ob==OBACT && paint_facesel_test(ob));
|
||||
int draw_wire = 0;
|
||||
int /* totvert,*/ totedge, totface;
|
||||
DispList *dl;
|
||||
DerivedMesh *dm= mesh_get_derived_final(scene, ob, scene->customdata_mask);
|
||||
|
||||
if(!dm)
|
||||
@ -2718,10 +2717,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
|
||||
}
|
||||
}
|
||||
else if(dt==OB_SHADED) {
|
||||
int do_draw= 1; /* to resolve all G.f settings below... */
|
||||
|
||||
if(ob==OBACT) {
|
||||
do_draw= 0;
|
||||
if(ob && ob->mode & OB_MODE_WEIGHT_PAINT) {
|
||||
/* enforce default material settings */
|
||||
GPU_enable_material(0, NULL);
|
||||
@ -2750,38 +2746,6 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
|
||||
dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions, NULL, 0, GPU_enable_material);
|
||||
}
|
||||
}
|
||||
else do_draw= 1;
|
||||
}
|
||||
if(do_draw) {
|
||||
dl = ob->disp.first;
|
||||
if (!dl || !dl->col1) {
|
||||
/* release and reload derivedmesh because it might be freed in
|
||||
shadeDispList due to a different datamask */
|
||||
dm->release(dm);
|
||||
shadeDispList(scene, base);
|
||||
dl = find_displist(&ob->disp, DL_VERTCOL);
|
||||
dm= mesh_get_derived_final(scene, ob, scene->customdata_mask);
|
||||
}
|
||||
|
||||
if ((v3d->flag&V3D_SELECT_OUTLINE) && ((v3d->flag2 & V3D_RENDER_OVERRIDE)==0) && (base->flag&SELECT) && !draw_wire) {
|
||||
draw_mesh_object_outline(v3d, ob, dm);
|
||||
}
|
||||
|
||||
/* False for dupliframe objects */
|
||||
if (dl) {
|
||||
unsigned int *obCol1 = dl->col1;
|
||||
unsigned int *obCol2 = dl->col2;
|
||||
|
||||
dm->drawFacesColored(dm, me->flag&ME_TWOSIDED, (unsigned char*) obCol1, (unsigned char*) obCol2);
|
||||
}
|
||||
|
||||
if(base->flag & SELECT) {
|
||||
UI_ThemeColor((ob==OBACT)?TH_ACTIVE:TH_SELECT);
|
||||
} else {
|
||||
UI_ThemeColor(TH_WIRE);
|
||||
}
|
||||
if((v3d->flag2 & V3D_RENDER_OVERRIDE)==0)
|
||||
dm->drawLooseEdges(dm);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3139,57 +3103,6 @@ static void drawDispListsolid(ListBase *lb, Object *ob, int glsl)
|
||||
glFrontFace(GL_CCW);
|
||||
}
|
||||
|
||||
static void drawDispListshaded(ListBase *lb, Object *ob)
|
||||
{
|
||||
DispList *dl, *dlob;
|
||||
unsigned int *cdata;
|
||||
|
||||
if(lb==NULL) return;
|
||||
|
||||
glShadeModel(GL_SMOOTH);
|
||||
glEnableClientState(GL_VERTEX_ARRAY);
|
||||
glEnableClientState(GL_COLOR_ARRAY);
|
||||
|
||||
dl= lb->first;
|
||||
dlob= ob->disp.first;
|
||||
while(dl && dlob) {
|
||||
|
||||
cdata= dlob->col1;
|
||||
if(cdata==NULL) break;
|
||||
|
||||
switch(dl->type) {
|
||||
case DL_SURF:
|
||||
if(dl->index) {
|
||||
glVertexPointer(3, GL_FLOAT, 0, dl->verts);
|
||||
glColorPointer(4, GL_UNSIGNED_BYTE, 0, cdata);
|
||||
glDrawElements(GL_QUADS, 4*dl->totindex, GL_UNSIGNED_INT, dl->index);
|
||||
}
|
||||
break;
|
||||
|
||||
case DL_INDEX3:
|
||||
|
||||
glVertexPointer(3, GL_FLOAT, 0, dl->verts);
|
||||
glColorPointer(4, GL_UNSIGNED_BYTE, 0, cdata);
|
||||
glDrawElements(GL_TRIANGLES, 3*dl->parts, GL_UNSIGNED_INT, dl->index);
|
||||
break;
|
||||
|
||||
case DL_INDEX4:
|
||||
|
||||
glVertexPointer(3, GL_FLOAT, 0, dl->verts);
|
||||
glColorPointer(4, GL_UNSIGNED_BYTE, 0, cdata);
|
||||
glDrawElements(GL_QUADS, 4*dl->parts, GL_UNSIGNED_INT, dl->index);
|
||||
break;
|
||||
}
|
||||
|
||||
dl= dl->next;
|
||||
dlob= dlob->next;
|
||||
}
|
||||
|
||||
glShadeModel(GL_FLAT);
|
||||
glDisableClientState(GL_VERTEX_ARRAY);
|
||||
glDisableClientState(GL_COLOR_ARRAY);
|
||||
}
|
||||
|
||||
static void drawCurveDMWired(Object *ob)
|
||||
{
|
||||
DerivedMesh *dm = ob->derivedFinal;
|
||||
@ -3270,10 +3183,6 @@ static int drawDispList(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *bas
|
||||
drawDispListsolid(lb, ob, 1);
|
||||
GPU_end_object_materials();
|
||||
}
|
||||
else if(dt == OB_SHADED) {
|
||||
if(ob->disp.first==NULL) shadeDispList(scene, base);
|
||||
drawDispListshaded(lb, ob);
|
||||
}
|
||||
else {
|
||||
GPU_begin_object_materials(v3d, rv3d, scene, ob, 0, NULL);
|
||||
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 0);
|
||||
@ -3312,10 +3221,6 @@ static int drawDispList(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *bas
|
||||
drawDispListsolid(lb, ob, 1);
|
||||
GPU_end_object_materials();
|
||||
}
|
||||
else if(dt==OB_SHADED) {
|
||||
if(ob->disp.first==NULL) shadeDispList(scene, base);
|
||||
drawDispListshaded(lb, ob);
|
||||
}
|
||||
else {
|
||||
GPU_begin_object_materials(v3d, rv3d, scene, ob, 0, NULL);
|
||||
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 0);
|
||||
@ -3341,11 +3246,6 @@ static int drawDispList(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *bas
|
||||
drawDispListsolid(lb, ob, 1);
|
||||
GPU_end_object_materials();
|
||||
}
|
||||
else if(dt == OB_SHADED) {
|
||||
dl= lb->first;
|
||||
if(dl && dl->col1==NULL) shadeDispList(scene, base);
|
||||
drawDispListshaded(lb, ob);
|
||||
}
|
||||
else {
|
||||
GPU_begin_object_materials(v3d, rv3d, scene, ob, 0, NULL);
|
||||
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 0);
|
||||
@ -5541,7 +5441,7 @@ static void drawObjectSelect(Scene *scene, View3D *v3d, ARegion *ar, Base *base)
|
||||
}
|
||||
else if(ob->type==OB_ARMATURE) {
|
||||
if(!(ob->mode & OB_MODE_POSE))
|
||||
draw_armature(scene, v3d, ar, base, OB_WIRE, 0);
|
||||
draw_armature(scene, v3d, ar, base, OB_WIRE, FALSE, TRUE);
|
||||
}
|
||||
|
||||
glLineWidth(1.0);
|
||||
@ -6077,7 +5977,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
|
||||
case OB_ARMATURE:
|
||||
if((v3d->flag2 & V3D_RENDER_OVERRIDE)==0) {
|
||||
if(dt>OB_WIRE) GPU_enable_material(0, NULL); // we use default material
|
||||
empty_object= draw_armature(scene, v3d, ar, base, dt, flag);
|
||||
empty_object= draw_armature(scene, v3d, ar, base, dt, flag, FALSE);
|
||||
if(dt>OB_WIRE) GPU_disable_material();
|
||||
}
|
||||
break;
|
||||
@ -6311,7 +6211,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
|
||||
}
|
||||
}
|
||||
|
||||
if(dt<OB_SHADED && (v3d->flag2 & V3D_RENDER_OVERRIDE)==0) {
|
||||
if(dt<=OB_SOLID && (v3d->flag2 & V3D_RENDER_OVERRIDE)==0) {
|
||||
if((ob->gameflag & OB_DYNAMIC) ||
|
||||
((ob->gameflag & OB_BOUNDS) && (ob->boundtype == OB_BOUND_SPHERE))) {
|
||||
float imat[4][4], vec[3]= {0.0f, 0.0f, 0.0f};
|
||||
|
@ -627,7 +627,7 @@ static void draw_view_axis(RegionView3D *rv3d)
|
||||
glEnd();
|
||||
|
||||
if (fabsf(dx) > toll || fabsf(dy) > toll) {
|
||||
BLF_draw_default(start + dx + 2, start + dy + ydisp + 2, 0.0f, "x", 1);
|
||||
BLF_draw_default_ascii(start + dx + 2, start + dy + ydisp + 2, 0.0f, "x", 1);
|
||||
}
|
||||
|
||||
/* BLF_draw_default disables blending */
|
||||
@ -647,7 +647,7 @@ static void draw_view_axis(RegionView3D *rv3d)
|
||||
glEnd();
|
||||
|
||||
if (fabsf(dx) > toll || fabsf(dy) > toll) {
|
||||
BLF_draw_default(start + dx + 2, start + dy + ydisp + 2, 0.0f, "y", 1);
|
||||
BLF_draw_default_ascii(start + dx + 2, start + dy + ydisp + 2, 0.0f, "y", 1);
|
||||
}
|
||||
|
||||
glEnable(GL_BLEND);
|
||||
@ -666,7 +666,7 @@ static void draw_view_axis(RegionView3D *rv3d)
|
||||
glEnd();
|
||||
|
||||
if (fabsf(dx) > toll || fabsf(dy) > toll) {
|
||||
BLF_draw_default(start + dx + 2, start + dy + ydisp + 2, 0.0f, "z", 1);
|
||||
BLF_draw_default_ascii(start + dx + 2, start + dy + ydisp + 2, 0.0f, "z", 1);
|
||||
}
|
||||
|
||||
/* restore line-width */
|
||||
@ -757,7 +757,7 @@ static void draw_viewport_name(ARegion *ar, View3D *v3d)
|
||||
|
||||
if (name) {
|
||||
UI_ThemeColor(TH_TEXT_HI);
|
||||
BLF_draw_default(22, ar->winy-17, 0.0f, name, sizeof(tmpstr));
|
||||
BLF_draw_default_ascii(22, ar->winy-17, 0.0f, name, sizeof(tmpstr));
|
||||
}
|
||||
}
|
||||
|
||||
@ -2074,10 +2074,6 @@ static void gpu_update_lamps_shadows(Scene *scene, View3D *v3d)
|
||||
CustomDataMask ED_view3d_datamask(Scene *scene, View3D *v3d)
|
||||
{
|
||||
CustomDataMask mask= 0;
|
||||
if(v3d->drawtype == OB_SHADED) {
|
||||
/* this includes normals for mesh_create_shadedColors */
|
||||
mask |= CD_MASK_MTFACE | CD_MASK_MCOL | CD_MASK_NORMAL | CD_MASK_ORCO;
|
||||
}
|
||||
if((v3d->drawtype == OB_TEXTURE) || ((v3d->drawtype == OB_SOLID) && (v3d->flag2 & V3D_SOLID_TEX))) {
|
||||
mask |= CD_MASK_MTFACE | CD_MASK_MCOL;
|
||||
|
||||
@ -2426,7 +2422,7 @@ static void draw_viewport_fps(Scene *scene, ARegion *ar)
|
||||
BLI_snprintf(printable, sizeof(printable), "fps: %i", (int)(fps+0.5f));
|
||||
}
|
||||
|
||||
BLF_draw_default(22, ar->winy-17, 0.0f, printable, sizeof(printable)-1);
|
||||
BLF_draw_default_ascii(22, ar->winy-17, 0.0f, printable, sizeof(printable)-1);
|
||||
}
|
||||
|
||||
/* warning: this function has duplicate drawing in ED_view3d_draw_offscreen() */
|
||||
@ -2648,7 +2644,7 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar)
|
||||
BLI_snprintf(tstr, sizeof(tstr), "%s x %.4g", grid_unit, v3d->grid);
|
||||
}
|
||||
|
||||
BLF_draw_default(22, ar->winy-(USER_SHOW_VIEWPORTNAME?40:20), 0.0f, tstr[0]?tstr : grid_unit, sizeof(tstr)); /* XXX, use real length */
|
||||
BLF_draw_default_ascii(22, ar->winy-(USER_SHOW_VIEWPORTNAME?40:20), 0.0f, tstr[0]?tstr : grid_unit, sizeof(tstr)); /* XXX, use real length */
|
||||
}
|
||||
|
||||
ob= OBACT;
|
||||
|
@ -120,7 +120,7 @@ void view3d_cached_text_draw_end(View3D *v3d, ARegion *ar, int depth_write, floa
|
||||
#define V3D_CACHE_TEXT_ASCII (1<<2)
|
||||
|
||||
/* drawarmature.c */
|
||||
int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt, int flag);
|
||||
int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt, int flag, const short is_outline);
|
||||
|
||||
/* drawmesh.c */
|
||||
void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d, struct Object *ob, struct DerivedMesh *dm, int faceselect);
|
||||
|
@ -95,7 +95,8 @@ typedef struct TransSnap {
|
||||
short modePoint;
|
||||
short modeSelect;
|
||||
short align;
|
||||
short project;
|
||||
char project;
|
||||
char project_self;
|
||||
short peel;
|
||||
short status;
|
||||
float snapPoint[3]; /* snapping from this point */
|
||||
|
@ -3731,27 +3731,8 @@ void flushTransGraphData(TransInfo *t)
|
||||
* seq->depth must be set before running this function so we know if the strips
|
||||
* are root level or not
|
||||
*/
|
||||
#define XXX_DURIAN_ANIM_TX_HACK
|
||||
static void SeqTransInfo(TransInfo *t, Sequence *seq, int *recursive, int *count, int *flag)
|
||||
{
|
||||
|
||||
#ifdef XXX_DURIAN_ANIM_TX_HACK
|
||||
/* hack */
|
||||
if((seq->flag & SELECT)==0 && seq->type & SEQ_EFFECT) {
|
||||
Sequence *seq_t[3];
|
||||
int i;
|
||||
|
||||
seq_t[0]= seq->seq1;
|
||||
seq_t[1]= seq->seq2;
|
||||
seq_t[2]= seq->seq3;
|
||||
|
||||
for(i=0; i<3; i++) {
|
||||
if (seq_t[i] && ((seq_t[i])->flag & SELECT) && !(seq_t[i]->flag & SEQ_LOCK) && !(seq_t[i]->flag & (SEQ_LEFTSEL|SEQ_RIGHTSEL)))
|
||||
seq->flag |= SELECT;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* for extend we need to do some tricks */
|
||||
if (t->mode == TFM_TIME_EXTEND) {
|
||||
|
||||
@ -4111,6 +4092,7 @@ static void freeSeqData(TransInfo *t)
|
||||
|
||||
static void createTransSeqData(bContext *C, TransInfo *t)
|
||||
{
|
||||
#define XXX_DURIAN_ANIM_TX_HACK
|
||||
|
||||
View2D *v2d= UI_view2d_fromcontext(C);
|
||||
Scene *scene= t->scene;
|
||||
@ -4141,6 +4123,24 @@ static void createTransSeqData(bContext *C, TransInfo *t)
|
||||
t->frame_side = 'B';
|
||||
}
|
||||
|
||||
#ifdef XXX_DURIAN_ANIM_TX_HACK
|
||||
{
|
||||
Sequence *seq;
|
||||
for(seq= ed->seqbasep->first; seq; seq= seq->next) {
|
||||
/* hack */
|
||||
if((seq->flag & SELECT)==0 && seq->type & SEQ_EFFECT) {
|
||||
Sequence *seq_user;
|
||||
int i;
|
||||
for(i=0; i<3; i++) {
|
||||
seq_user= *((&seq->seq1) + i);
|
||||
if (seq_user && (seq_user->flag & SELECT) && !(seq_user->flag & SEQ_LOCK) && !(seq_user->flag & (SEQ_LEFTSEL|SEQ_RIGHTSEL))) {
|
||||
seq->flag |= SELECT;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
count = SeqTransCount(t, ed->seqbasep, 0);
|
||||
|
||||
@ -4160,6 +4160,8 @@ static void createTransSeqData(bContext *C, TransInfo *t)
|
||||
|
||||
/* loop 2: build transdata array */
|
||||
SeqToTransData_Recursive(t, ed->seqbasep, td, td2d, tdsq);
|
||||
|
||||
#undef XXX_DURIAN_ANIM_TX_HACK
|
||||
}
|
||||
|
||||
|
||||
@ -5083,10 +5085,6 @@ void special_aftertrans_update(bContext *C, TransInfo *t)
|
||||
#if 0 // TRANSFORM_FIX_ME
|
||||
if(resetslowpar)
|
||||
reset_slowparents();
|
||||
|
||||
/* note; should actually only be done for all objects when a lamp is moved... (ton) */
|
||||
if(t->spacetype==SPACE_VIEW3D && G.vd->drawtype == OB_SHADED)
|
||||
reshadeall_displist();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -840,9 +840,6 @@ void recalcData(TransInfo *t)
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB);
|
||||
}
|
||||
}
|
||||
|
||||
if(((View3D*)t->view)->drawtype == OB_SHADED)
|
||||
reshadeall_displist(t->scene);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -392,7 +392,7 @@ static void initSnappingMode(TransInfo *t)
|
||||
}
|
||||
else
|
||||
{
|
||||
t->tsnap.modeSelect = SNAP_ALL;
|
||||
t->tsnap.modeSelect = t->tsnap.project_self ? SNAP_ALL : SNAP_NOT_OBEDIT;
|
||||
}
|
||||
}
|
||||
/* Particles edit mode*/
|
||||
@ -457,6 +457,11 @@ void initSnapping(TransInfo *t, wmOperator *op)
|
||||
{
|
||||
t->tsnap.project = RNA_boolean_get(op->ptr, "use_snap_project");
|
||||
}
|
||||
|
||||
if (RNA_struct_find_property(op->ptr, "use_snap_project_self"))
|
||||
{
|
||||
t->tsnap.project = RNA_boolean_get(op->ptr, "use_snap_project_self");
|
||||
}
|
||||
}
|
||||
}
|
||||
/* use scene defaults only when transform is modal */
|
||||
@ -468,6 +473,7 @@ void initSnapping(TransInfo *t, wmOperator *op)
|
||||
|
||||
t->tsnap.align = ((t->settings->snap_flag & SCE_SNAP_ROTATE) == SCE_SNAP_ROTATE);
|
||||
t->tsnap.project = ((t->settings->snap_flag & SCE_SNAP_PROJECT) == SCE_SNAP_PROJECT);
|
||||
t->tsnap.project_self = !((t->settings->snap_flag & SCE_SNAP_PROJECT_NO_SELF) == SCE_SNAP_PROJECT_NO_SELF);
|
||||
t->tsnap.peel = ((t->settings->snap_flag & SCE_SNAP_PROJECT) == SCE_SNAP_PROJECT);
|
||||
}
|
||||
|
||||
|
@ -134,6 +134,41 @@ static int ED_uvedit_ensure_uvs(bContext *C, Scene *scene, Object *obedit)
|
||||
|
||||
/****************** Parametrizer Conversion ***************/
|
||||
|
||||
static int uvedit_have_selection(Scene *scene, EditMesh *em, short implicit)
|
||||
{
|
||||
EditFace *efa;
|
||||
MTFace *tf;
|
||||
|
||||
/* verify if we have any selected uv's before unwrapping,
|
||||
so we can cancel the operator early */
|
||||
for(efa= em->faces.first; efa; efa= efa->next) {
|
||||
if(scene->toolsettings->uv_flag & UV_SYNC_SELECTION) {
|
||||
if(efa->h)
|
||||
continue;
|
||||
}
|
||||
else if((efa->h) || ((efa->f & SELECT)==0))
|
||||
continue;
|
||||
|
||||
tf= (MTFace *)CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
|
||||
|
||||
if(!tf)
|
||||
return 1; /* default selected if doesn't exists */
|
||||
|
||||
if(implicit &&
|
||||
!( uvedit_uv_selected(scene, efa, tf, 0) ||
|
||||
uvedit_uv_selected(scene, efa, tf, 1) ||
|
||||
uvedit_uv_selected(scene, efa, tf, 2) ||
|
||||
(efa->v4 && uvedit_uv_selected(scene, efa, tf, 3)) )
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static ParamHandle *construct_param_handle(Scene *scene, EditMesh *em, short implicit, short fill, short sel, short correct_aspect)
|
||||
{
|
||||
ParamHandle *handle;
|
||||
@ -171,15 +206,11 @@ static ParamHandle *construct_param_handle(Scene *scene, EditMesh *em, short imp
|
||||
int nverts;
|
||||
|
||||
if(scene->toolsettings->uv_flag & UV_SYNC_SELECTION) {
|
||||
if(efa->h) {
|
||||
if(efa->h)
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if((efa->h) || (sel && (efa->f & SELECT)==0)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else if((efa->h) || (sel && (efa->f & SELECT)==0))
|
||||
continue;
|
||||
|
||||
tf= (MTFace *)CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
|
||||
|
||||
@ -256,13 +287,19 @@ typedef struct MinStretch {
|
||||
wmTimer *timer;
|
||||
} MinStretch;
|
||||
|
||||
static void minimize_stretch_init(bContext *C, wmOperator *op)
|
||||
static int minimize_stretch_init(bContext *C, wmOperator *op)
|
||||
{
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
|
||||
MinStretch *ms;
|
||||
int fill_holes= RNA_boolean_get(op->ptr, "fill_holes");
|
||||
short implicit= 1;
|
||||
|
||||
if(!uvedit_have_selection(scene, em, implicit)) {
|
||||
BKE_mesh_end_editmesh(obedit->data, em);
|
||||
return 0;
|
||||
}
|
||||
|
||||
ms= MEM_callocN(sizeof(MinStretch), "MinStretch");
|
||||
ms->scene= scene;
|
||||
@ -270,7 +307,8 @@ static void minimize_stretch_init(bContext *C, wmOperator *op)
|
||||
ms->em= em;
|
||||
ms->blend= RNA_float_get(op->ptr, "blend");
|
||||
ms->iterations= RNA_int_get(op->ptr, "iterations");
|
||||
ms->handle= construct_param_handle(scene, em, 1, fill_holes, 1, 1);
|
||||
ms->i= 0;
|
||||
ms->handle= construct_param_handle(scene, em, implicit, fill_holes, 1, 1);
|
||||
ms->lasttime= PIL_check_seconds_timer();
|
||||
|
||||
param_stretch_begin(ms->handle);
|
||||
@ -278,6 +316,8 @@ static void minimize_stretch_init(bContext *C, wmOperator *op)
|
||||
param_stretch_blend(ms->handle, ms->blend);
|
||||
|
||||
op->customdata= ms;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void minimize_stretch_iteration(bContext *C, wmOperator *op, int interactive)
|
||||
@ -288,6 +328,9 @@ static void minimize_stretch_iteration(bContext *C, wmOperator *op, int interact
|
||||
param_stretch_blend(ms->handle, ms->blend);
|
||||
param_stretch_iter(ms->handle);
|
||||
|
||||
ms->i++;
|
||||
RNA_int_set(op->ptr, "iterations", ms->i);
|
||||
|
||||
if(interactive && (PIL_check_seconds_timer() - ms->lasttime > 0.5)) {
|
||||
char str[100];
|
||||
|
||||
@ -334,7 +377,8 @@ static int minimize_stretch_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
int i, iterations;
|
||||
|
||||
minimize_stretch_init(C, op);
|
||||
if(!minimize_stretch_init(C, op))
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
iterations= RNA_int_get(op->ptr, "iterations");
|
||||
for(i=0; i<iterations; i++)
|
||||
@ -348,7 +392,9 @@ static int minimize_stretch_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(
|
||||
{
|
||||
MinStretch *ms;
|
||||
|
||||
minimize_stretch_init(C, op);
|
||||
if(!minimize_stretch_init(C, op))
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
minimize_stretch_iteration(C, op, 1);
|
||||
|
||||
ms= op->customdata;
|
||||
@ -445,6 +491,12 @@ static int pack_islands_exec(bContext *C, wmOperator *op)
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
|
||||
ParamHandle *handle;
|
||||
short implicit= 1;
|
||||
|
||||
if(!uvedit_have_selection(scene, em, implicit)) {
|
||||
BKE_mesh_end_editmesh(obedit->data, em);
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
if(RNA_property_is_set(op->ptr, "margin")) {
|
||||
scene->toolsettings->uvcalc_margin= RNA_float_get(op->ptr, "margin");
|
||||
@ -453,7 +505,7 @@ static int pack_islands_exec(bContext *C, wmOperator *op)
|
||||
RNA_float_set(op->ptr, "margin", scene->toolsettings->uvcalc_margin);
|
||||
}
|
||||
|
||||
handle = construct_param_handle(scene, em, 1, 0, 1, 1);
|
||||
handle = construct_param_handle(scene, em, implicit, 0, 1, 1);
|
||||
param_pack(handle, scene->toolsettings->uvcalc_margin);
|
||||
param_flush(handle);
|
||||
param_delete(handle);
|
||||
@ -488,8 +540,14 @@ static int average_islands_scale_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
|
||||
ParamHandle *handle;
|
||||
short implicit= 1;
|
||||
|
||||
handle= construct_param_handle(scene, em, 1, 0, 1, 1);
|
||||
if(!uvedit_have_selection(scene, em, implicit)) {
|
||||
BKE_mesh_end_editmesh(obedit->data, em);
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
handle= construct_param_handle(scene, em, implicit, 0, 1, 1);
|
||||
param_average(handle);
|
||||
param_flush(handle);
|
||||
param_delete(handle);
|
||||
@ -834,11 +892,13 @@ static void uv_map_clip_correct(EditMesh *em, wmOperator *op)
|
||||
void ED_unwrap_lscm(Scene *scene, Object *obedit, const short sel)
|
||||
{
|
||||
EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
|
||||
ParamHandle *handle;
|
||||
|
||||
const short fill_holes= scene->toolsettings->uvcalc_flag & UVCALC_FILLHOLES;
|
||||
const short correct_aspect= !(scene->toolsettings->uvcalc_flag & UVCALC_NO_ASPECT_CORRECT);
|
||||
short implicit= 0;
|
||||
|
||||
ParamHandle *handle= construct_param_handle(scene, em, 0, fill_holes, sel, correct_aspect);
|
||||
handle= construct_param_handle(scene, em, implicit, fill_holes, sel, correct_aspect);
|
||||
|
||||
param_lscm_begin(handle, PARAM_FALSE, scene->toolsettings->unwrapper == 0);
|
||||
param_lscm_solve(handle);
|
||||
@ -857,9 +917,18 @@ static int unwrap_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
|
||||
int method = RNA_enum_get(op->ptr, "method");
|
||||
int fill_holes = RNA_boolean_get(op->ptr, "fill_holes");
|
||||
int correct_aspect = RNA_boolean_get(op->ptr, "correct_aspect");
|
||||
short implicit= 0;
|
||||
|
||||
if(!uvedit_have_selection(scene, em, implicit)) {
|
||||
BKE_mesh_end_editmesh(obedit->data, em);
|
||||
return 0;
|
||||
}
|
||||
|
||||
BKE_mesh_end_editmesh(obedit->data, em);
|
||||
|
||||
/* add uvs if they don't exist yet */
|
||||
if(!ED_uvedit_ensure_uvs(C, scene, obedit)) {
|
||||
|
@ -112,6 +112,11 @@ void GPU_set_mipmap(int mipmap);
|
||||
void GPU_set_linear_mipmap(int linear);
|
||||
void GPU_paint_set_mipmap(int mipmap);
|
||||
|
||||
/* Anisotropic filtering settings
|
||||
* - these will free textures on changes */
|
||||
void GPU_set_anisotropic(float value);
|
||||
float GPU_get_anisotropic(void);
|
||||
|
||||
/* Image updates and free
|
||||
* - these deal with images bound as opengl textures */
|
||||
|
||||
|
@ -246,8 +246,9 @@ static struct GPUTextureState {
|
||||
int domipmap, linearmipmap;
|
||||
|
||||
int alphamode;
|
||||
float anisotropic;
|
||||
MTFace *lasttface;
|
||||
} GTS = {0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 1, 0, -1, NULL};
|
||||
} GTS = {0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 1, 0, -1, 1.f, NULL};
|
||||
|
||||
/* Mipmap settings */
|
||||
|
||||
@ -292,6 +293,26 @@ static GLenum gpu_get_mipmap_filter(int mag)
|
||||
}
|
||||
}
|
||||
|
||||
/* Anisotropic filtering settings */
|
||||
void GPU_set_anisotropic(float value)
|
||||
{
|
||||
if (GTS.anisotropic != value)
|
||||
{
|
||||
GPU_free_images();
|
||||
|
||||
/* Clamp value to the maximum value the graphics card supports */
|
||||
if (value > GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT)
|
||||
value = GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT;
|
||||
|
||||
GTS.anisotropic = value;
|
||||
}
|
||||
}
|
||||
|
||||
float GPU_get_anisotropic()
|
||||
{
|
||||
return GTS.anisotropic;
|
||||
}
|
||||
|
||||
/* Set OpenGL state for an MTFace */
|
||||
|
||||
static void gpu_make_repbind(Image *ima)
|
||||
@ -559,6 +580,8 @@ int GPU_verify_image(Image *ima, ImageUser *iuser, int tftile, int compare, int
|
||||
ima->tpageflag |= IMA_MIPMAP_COMPLETE;
|
||||
}
|
||||
|
||||
if (GLEW_EXT_texture_filter_anisotropic)
|
||||
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, GPU_get_anisotropic());
|
||||
/* set to modulate with vertex color */
|
||||
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
||||
|
||||
|
@ -942,8 +942,10 @@ static void do_material_tex(GPUShadeInput *shi)
|
||||
texco= texco_object;
|
||||
else if(mtex->texco==TEXCO_GLOB)
|
||||
texco= texco_global;
|
||||
else if(mtex->texco==TEXCO_REFL)
|
||||
else if(mtex->texco==TEXCO_REFL) {
|
||||
GPU_link(mat, "texco_refl", shi->vn, shi->view, &shi->ref);
|
||||
texco= shi->ref;
|
||||
}
|
||||
else if(mtex->texco==TEXCO_UV) {
|
||||
if(1) { //!(texco_uv && strcmp(mtex->uvname, lastuvname) == 0)) {
|
||||
GPU_link(mat, "texco_uv", GPU_attribute(CD_MTFACE, mtex->uvname), &texco_uv);
|
||||
@ -1173,7 +1175,6 @@ static void do_material_tex(GPUShadeInput *shi)
|
||||
}
|
||||
|
||||
GPU_link(mat, "vec_math_negate", shi->vn, &orn);
|
||||
GPU_link(mat, "texco_refl", shi->vn, shi->view, &shi->ref);
|
||||
}
|
||||
|
||||
if((mtex->mapto & MAP_VARS)) {
|
||||
|
@ -119,7 +119,7 @@ if(WITH_IMAGE_TIFF)
|
||||
endif()
|
||||
|
||||
if(WITH_IMAGE_OPENJPEG)
|
||||
list(APPEND INC_SYS ${OPENJPEG_INC})
|
||||
list(APPEND INC_SYS ${OPENJPEG_INCLUDE_DIRS})
|
||||
add_definitions(-DWITH_OPENJPEG)
|
||||
endif()
|
||||
|
||||
@ -130,12 +130,12 @@ endif()
|
||||
|
||||
if(WITH_CODEC_QUICKTIME)
|
||||
list(APPEND INC ../quicktime)
|
||||
list(APPEND INC_SYS ${QUICKTIME_INC})
|
||||
list(APPEND INC_SYS ${QUICKTIME_INCLUDE_DIRS})
|
||||
add_definitions(-DWITH_QUICKTIME)
|
||||
endif()
|
||||
|
||||
if(WITH_CODEC_FFMPEG)
|
||||
list(APPEND INC_SYS ${FFMPEG_INC})
|
||||
list(APPEND INC_SYS ${FFMPEG_INCLUDE_DIRS})
|
||||
add_definitions(-DWITH_FFMPEG)
|
||||
endif()
|
||||
|
||||
|
@ -442,8 +442,9 @@ void IMB_freezbuffloatImBuf(struct ImBuf *ibuf);
|
||||
*
|
||||
* @attention Defined in rectop.c
|
||||
*/
|
||||
void IMB_rectfill(struct ImBuf *drect, float col[4]);
|
||||
void IMB_rectfill(struct ImBuf *drect, const float col[4]);
|
||||
void IMB_rectfill_area(struct ImBuf *ibuf, float *col, int x1, int y1, int x2, int y2);
|
||||
void IMB_rectfill_alpha(struct ImBuf *ibuf, const float value);
|
||||
|
||||
/* this should not be here, really, we needed it for operating on render data, IMB_rectfill_area calls it */
|
||||
void buf_rectfill_area(unsigned char *rect, float *rectf, int width, int height, float *col, int x1, int y1, int x2, int y2);
|
||||
|
@ -44,7 +44,7 @@ set(SRC
|
||||
)
|
||||
|
||||
if(WITH_IMAGE_OPENEXR)
|
||||
list(APPEND INC_SYS ${OPENEXR_INC})
|
||||
list(APPEND INC_SYS ${OPENEXR_INCLUDE_DIRS})
|
||||
add_definitions(-DWITH_OPENEXR)
|
||||
endif()
|
||||
|
||||
|
@ -76,18 +76,18 @@ _CRTIMP void __cdecl _invalid_parameter_noinfo(void)
|
||||
#include <IlmImf/ImfStringAttribute.h>
|
||||
#include <Imath/ImathBox.h>
|
||||
#else
|
||||
#include <OpenEXR/half.h>
|
||||
#include <OpenEXR/ImfVersion.h>
|
||||
#include <OpenEXR/ImathBox.h>
|
||||
#include <OpenEXR/ImfArray.h>
|
||||
#include <OpenEXR/ImfIO.h>
|
||||
#include <OpenEXR/ImfChannelList.h>
|
||||
#include <OpenEXR/ImfPixelType.h>
|
||||
#include <OpenEXR/ImfInputFile.h>
|
||||
#include <OpenEXR/ImfOutputFile.h>
|
||||
#include <OpenEXR/ImfCompression.h>
|
||||
#include <OpenEXR/ImfCompressionAttribute.h>
|
||||
#include <OpenEXR/ImfStringAttribute.h>
|
||||
#include <half.h>
|
||||
#include <ImfVersion.h>
|
||||
#include <ImathBox.h>
|
||||
#include <ImfArray.h>
|
||||
#include <ImfIO.h>
|
||||
#include <ImfChannelList.h>
|
||||
#include <ImfPixelType.h>
|
||||
#include <ImfInputFile.h>
|
||||
#include <ImfOutputFile.h>
|
||||
#include <ImfCompression.h>
|
||||
#include <ImfCompressionAttribute.h>
|
||||
#include <ImfStringAttribute.h>
|
||||
#endif
|
||||
|
||||
using namespace Imf;
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user