Merge branch 'master' into blender2.8

This commit is contained in:
2017-05-28 17:48:59 +02:00
70 changed files with 526 additions and 847 deletions

View File

@@ -49,7 +49,7 @@ def get_platform(filename):
tokens = filename.split("-") tokens = filename.split("-")
platforms = ('osx', 'mac', 'bsd', platforms = ('osx', 'mac', 'bsd',
'win', 'linux', 'source', 'win', 'linux', 'source',
'irix', 'solaris', 'mingw') 'irix', 'solaris')
platform_tokens = [] platform_tokens = []
found = False found = False

View File

@@ -63,14 +63,7 @@ if(UNIX AND NOT APPLE)
set(WITH_OPENSUBDIV ON CACHE BOOL "" FORCE) set(WITH_OPENSUBDIV ON CACHE BOOL "" FORCE)
elseif(WIN32) elseif(WIN32)
set(WITH_JACK OFF CACHE BOOL "" FORCE) set(WITH_JACK OFF CACHE BOOL "" FORCE)
if(NOT CMAKE_COMPILER_IS_GNUCC)
set(WITH_OPENSUBDIV ON CACHE BOOL "" FORCE) set(WITH_OPENSUBDIV ON CACHE BOOL "" FORCE)
else()
# MinGW exceptions
set(WITH_OPENSUBDIV OFF CACHE BOOL "" FORCE)
set(WITH_CODEC_SNDFILE OFF CACHE BOOL "" FORCE)
set(WITH_CYCLES_OSL OFF CACHE BOOL "" FORCE)
endif()
elseif(APPLE) elseif(APPLE)
set(WITH_JACK ON CACHE BOOL "" FORCE) set(WITH_JACK ON CACHE BOOL "" FORCE)
set(WITH_CODEC_QUICKTIME OFF CACHE BOOL "" FORCE) set(WITH_CODEC_QUICKTIME OFF CACHE BOOL "" FORCE)

View File

@@ -64,14 +64,7 @@ if(UNIX AND NOT APPLE)
set(WITH_OPENSUBDIV ON CACHE BOOL "" FORCE) set(WITH_OPENSUBDIV ON CACHE BOOL "" FORCE)
elseif(WIN32) elseif(WIN32)
set(WITH_JACK OFF CACHE BOOL "" FORCE) set(WITH_JACK OFF CACHE BOOL "" FORCE)
if(NOT CMAKE_COMPILER_IS_GNUCC)
set(WITH_OPENSUBDIV ON CACHE BOOL "" FORCE) set(WITH_OPENSUBDIV ON CACHE BOOL "" FORCE)
else()
# MinGW exceptions
set(WITH_OPENSUBDIV OFF CACHE BOOL "" FORCE)
set(WITH_CODEC_SNDFILE OFF CACHE BOOL "" FORCE)
set(WITH_CYCLES_OSL OFF CACHE BOOL "" FORCE)
endif()
elseif(APPLE) elseif(APPLE)
set(WITH_JACK ON CACHE BOOL "" FORCE) set(WITH_JACK ON CACHE BOOL "" FORCE)
set(WITH_CODEC_QUICKTIME OFF CACHE BOOL "" FORCE) set(WITH_CODEC_QUICKTIME OFF CACHE BOOL "" FORCE)

View File

@@ -1249,17 +1249,6 @@ endfunction()
# hacks to override initial project settings # hacks to override initial project settings
# these macros must be called directly before/after project(Blender) # these macros must be called directly before/after project(Blender)
macro(blender_project_hack_pre) macro(blender_project_hack_pre)
# ----------------
# MINGW HACK START
# ignore system set flag, use our own
# must be before project(...)
# if the user wants to add their own its ok after first run.
if(DEFINED CMAKE_C_STANDARD_LIBRARIES)
set(_reset_standard_libraries OFF)
else()
set(_reset_standard_libraries ON)
endif()
# ------------------ # ------------------
# GCC -O3 HACK START # GCC -O3 HACK START
# needed because O3 can cause problems but # needed because O3 can cause problems but
@@ -1278,25 +1267,6 @@ endmacro()
macro(blender_project_hack_post) macro(blender_project_hack_post)
# --------------
# MINGW HACK END
if(_reset_standard_libraries)
# Must come after projecINCt(...)
#
# MINGW workaround for -ladvapi32 being included which surprisingly causes
# string formatting of floats, eg: printf("%.*f", 3, value). to crash blender
# with a meaningless stack trace. by overriding this flag we ensure we only
# have libs we define.
set(CMAKE_C_STANDARD_LIBRARIES "" CACHE STRING "" FORCE)
set(CMAKE_CXX_STANDARD_LIBRARIES "" CACHE STRING "" FORCE)
mark_as_advanced(
CMAKE_C_STANDARD_LIBRARIES
CMAKE_CXX_STANDARD_LIBRARIES
)
endif()
unset(_reset_standard_libraries)
# ---------------- # ----------------
# GCC -O3 HACK END # GCC -O3 HACK END
if(_reset_standard_cflags_rel) if(_reset_standard_cflags_rel)

View File

@@ -27,12 +27,10 @@ add_definitions(-DWIN32)
if(MSVC) if(MSVC)
include(platform_win32_msvc) include(platform_win32_msvc)
elseif(CMAKE_COMPILER_IS_GNUCC) else()
include(platform_win32_mingw) message(FATAL_ERROR "Compiler is unsupported")
endif() endif()
# Things common to both mingw and MSVC should go here
set(WINTAB_INC ${LIBDIR}/wintab/include) set(WINTAB_INC ${LIBDIR}/wintab/include)
if(WITH_OPENAL) if(WITH_OPENAL)

View File

@@ -1,302 +0,0 @@
# ***** BEGIN GPL LICENSE BLOCK *****
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2016, Blender Foundation
# All rights reserved.
#
# Contributor(s): Sergey Sharybin.
#
# ***** END GPL LICENSE BLOCK *****
# Libraries configuration for Windows when compiling with MinGW.
# keep GCC specific stuff here
include(CheckCSourceCompiles)
# Setup 64bit and 64bit windows systems
CHECK_C_SOURCE_COMPILES("
#ifndef __MINGW64__
#error
#endif
int main(void) { return 0; }
"
WITH_MINGW64
)
if(NOT DEFINED LIBDIR)
if(WITH_MINGW64)
message(STATUS "Compiling for 64 bit with MinGW-w64.")
set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/mingw64)
else()
message(STATUS "Compiling for 32 bit with MinGW-w32.")
set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/mingw32)
if(WITH_RAYOPTIMIZATION)
message(WARNING "MinGW-w32 is known to be unstable with 'WITH_RAYOPTIMIZATION' option enabled.")
endif()
endif()
else()
message(STATUS "Using pre-compiled LIBDIR: ${LIBDIR}")
endif()
if(NOT EXISTS "${LIBDIR}/")
message(FATAL_ERROR "Windows requires pre-compiled libs at: '${LIBDIR}'")
endif()
list(APPEND PLATFORM_LINKLIBS
-lshell32 -lshfolder -lgdi32 -lmsvcrt -lwinmm -lmingw32 -lm -lws2_32
-lz -lstdc++ -lole32 -luuid -lwsock32 -lpsapi -ldbghelp
)
if(WITH_INPUT_IME)
list(APPEND PLATFORM_LINKLIBS -limm32)
endif()
set(PLATFORM_CFLAGS "-pipe -funsigned-char -fno-strict-aliasing")
if(WITH_MINGW64)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive")
list(APPEND PLATFORM_LINKLIBS -lpthread)
add_definitions(-DFREE_WINDOWS64 -DMS_WIN64)
endif()
add_definitions(-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE)
add_definitions(-DFREE_WINDOWS)
set(PNG "${LIBDIR}/png")
set(PNG_INCLUDE_DIRS "${PNG}/include")
set(PNG_LIBPATH ${PNG}/lib) # not cmake defined
if(WITH_MINGW64)
set(JPEG_LIBRARIES jpeg)
else()
set(JPEG_LIBRARIES libjpeg)
endif()
set(PNG_LIBRARIES png)
set(ZLIB ${LIBDIR}/zlib)
set(ZLIB_INCLUDE_DIRS ${ZLIB}/include)
set(ZLIB_LIBPATH ${ZLIB}/lib)
set(ZLIB_LIBRARIES z)
set(JPEG "${LIBDIR}/jpeg")
set(JPEG_INCLUDE_DIR "${JPEG}/include")
set(JPEG_LIBPATH ${JPEG}/lib) # not cmake defined
# comes with own pthread library
if(NOT WITH_MINGW64)
set(PTHREADS ${LIBDIR}/pthreads)
#set(PTHREADS_INCLUDE_DIRS ${PTHREADS}/include)
set(PTHREADS_LIBPATH ${PTHREADS}/lib)
set(PTHREADS_LIBRARIES pthreadGC2)
endif()
set(FREETYPE ${LIBDIR}/freetype)
set(FREETYPE_INCLUDE_DIRS ${FREETYPE}/include ${FREETYPE}/include/freetype2)
set(FREETYPE_LIBPATH ${FREETYPE}/lib)
set(FREETYPE_LIBRARY freetype)
if(WITH_FFTW3)
set(FFTW3 ${LIBDIR}/fftw3)
set(FFTW3_LIBRARIES fftw3)
set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
set(FFTW3_LIBPATH ${FFTW3}/lib)
endif()
if(WITH_OPENCOLLADA)
set(OPENCOLLADA ${LIBDIR}/opencollada)
set(OPENCOLLADA_INCLUDE_DIRS
${OPENCOLLADA}/include/opencollada/COLLADAStreamWriter
${OPENCOLLADA}/include/opencollada/COLLADABaseUtils
${OPENCOLLADA}/include/opencollada/COLLADAFramework
${OPENCOLLADA}/include/opencollada/COLLADASaxFrameworkLoader
${OPENCOLLADA}/include/opencollada/GeneratedSaxParser
)
set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib/opencollada)
set(OPENCOLLADA_LIBRARIES
OpenCOLLADAStreamWriter
OpenCOLLADASaxFrameworkLoader
OpenCOLLADAFramework
OpenCOLLADABaseUtils
GeneratedSaxParser
UTF MathMLSolver buffer ftoa xml
)
set(PCRE_LIBRARIES pcre)
endif()
if(WITH_CODEC_FFMPEG)
set(FFMPEG ${LIBDIR}/ffmpeg)
set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
if(WITH_MINGW64)
set(FFMPEG_LIBRARIES avcodec.dll avformat.dll avdevice.dll avutil.dll swscale.dll swresample.dll)
else()
set(FFMPEG_LIBRARIES avcodec-55 avformat-55 avdevice-55 avutil-52 swscale-2)
endif()
set(FFMPEG_LIBPATH ${FFMPEG}/lib)
endif()
if(WITH_IMAGE_OPENEXR)
set(OPENEXR ${LIBDIR}/openexr)
set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include)
set(OPENEXR_INCLUDE_DIRS ${OPENEXR}/include/OpenEXR)
set(OPENEXR_LIBRARIES Half IlmImf Imath IlmThread Iex)
set(OPENEXR_LIBPATH ${OPENEXR}/lib)
endif()
if(WITH_IMAGE_TIFF)
set(TIFF ${LIBDIR}/tiff)
set(TIFF_LIBRARY tiff)
set(TIFF_INCLUDE_DIR ${TIFF}/include)
set(TIFF_LIBPATH ${TIFF}/lib)
endif()
if(WITH_JACK)
set(JACK ${LIBDIR}/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
set(WITH_JACK OFF)
endif()
if(WITH_PYTHON)
# normally cached but not since we include them with blender
set(PYTHON_VERSION 3.5) # CACHE STRING)
string(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}") # CACHE PATH)
set(PYTHON_LIBRARY "${LIBDIR}/python/lib/python${_PYTHON_VERSION_NO_DOTS}mw.lib") # CACHE FILEPATH)
unset(_PYTHON_VERSION_NO_DOTS)
# uncached vars
set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
set(PYTHON_LIBRARIES "${PYTHON_LIBRARY}")
endif()
if(WITH_BOOST)
set(BOOST ${LIBDIR}/boost)
set(BOOST_INCLUDE_DIR ${BOOST}/include)
if(WITH_MINGW64)
set(BOOST_POSTFIX "mgw47-mt-s-1_49")
set(BOOST_DEBUG_POSTFIX "mgw47-mt-sd-1_49")
else()
set(BOOST_POSTFIX "mgw46-mt-s-1_49")
set(BOOST_DEBUG_POSTFIX "mgw46-mt-sd-1_49")
endif()
set(BOOST_LIBRARIES
optimized boost_date_time-${BOOST_POSTFIX} boost_filesystem-${BOOST_POSTFIX}
boost_regex-${BOOST_POSTFIX}
boost_system-${BOOST_POSTFIX} boost_thread-${BOOST_POSTFIX}
debug boost_date_time-${BOOST_DEBUG_POSTFIX} boost_filesystem-${BOOST_DEBUG_POSTFIX}
boost_regex-${BOOST_DEBUG_POSTFIX}
boost_system-${BOOST_DEBUG_POSTFIX} boost_thread-${BOOST_DEBUG_POSTFIX})
if(WITH_INTERNATIONAL)
set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
optimized boost_locale-${BOOST_POSTFIX}
debug boost_locale-${BOOST_DEBUG_POSTFIX}
)
endif()
if(WITH_CYCLES_OSL)
set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
optimized boost_wave-${BOOST_POSTFIX}
debug boost_wave-${BOOST_DEBUG_POSTFIX}
)
endif()
set(BOOST_LIBPATH ${BOOST}/lib)
set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB -DBOOST_THREAD_USE_LIB ")
endif()
if(WITH_OPENIMAGEIO)
set(OPENIMAGEIO ${LIBDIR}/openimageio)
set(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO}/include)
set(OPENIMAGEIO_LIBRARIES OpenImageIO)
set(OPENIMAGEIO_LIBPATH ${OPENIMAGEIO}/lib)
set(OPENIMAGEIO_DEFINITIONS "")
set(OPENIMAGEIO_IDIFF "${OPENIMAGEIO}/bin/idiff.exe")
endif()
if(WITH_LLVM)
set(LLVM_ROOT_DIR ${LIBDIR}/llvm CACHE PATH "Path to the LLVM installation")
set(LLVM_LIBPATH ${LLVM_ROOT_DIR}/lib)
# Explicitly set llvm lib order.
#---- WARNING ON GCC ORDER OF LIBS IS IMPORTANT, DO NOT CHANGE! ---------
set(LLVM_LIBRARY LLVMSelectionDAG LLVMCodeGen LLVMScalarOpts LLVMAnalysis LLVMArchive
LLVMAsmParser LLVMAsmPrinter
LLVMBitReader LLVMBitWriter
LLVMDebugInfo LLVMExecutionEngine
LLVMInstCombine LLVMInstrumentation
LLVMInterpreter LLVMJIT
LLVMLinker LLVMMC
LLVMMCDisassembler LLVMMCJIT
LLVMMCParser LLVMObject
LLVMRuntimeDyld
LLVMSupport
LLVMTableGen LLVMTarget
LLVMTransformUtils LLVMVectorize
LLVMX86AsmParser LLVMX86AsmPrinter
LLVMX86CodeGen LLVMX86Desc
LLVMX86Disassembler LLVMX86Info
LLVMX86Utils LLVMipa
LLVMipo LLVMCore)
# imagehelp is needed by LLVM 3.1 on MinGW, check lib\Support\Windows\Signals.inc
list(APPEND PLATFORM_LINKLIBS -limagehlp)
endif()
if(WITH_OPENCOLORIO)
set(OPENCOLORIO ${LIBDIR}/opencolorio)
set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
set(OPENCOLORIO_LIBRARIES OpenColorIO)
set(OPENCOLORIO_LIBPATH ${OPENCOLORIO}/lib)
set(OPENCOLORIO_DEFINITIONS)
endif()
if(WITH_SDL)
set(SDL ${LIBDIR}/sdl)
set(SDL_INCLUDE_DIR ${SDL}/include)
set(SDL_LIBRARY SDL)
set(SDL_LIBPATH ${SDL}/lib)
endif()
if(WITH_OPENVDB)
set(OPENVDB ${LIBDIR}/openvdb)
set(OPENVDB_INCLUDE_DIRS ${OPENVDB}/include)
set(OPENVDB_LIBRARIES openvdb ${TBB_LIBRARIES})
set(OPENVDB_LIBPATH ${LIBDIR}/openvdb/lib)
set(OPENVDB_DEFINITIONS)
endif()
if(WITH_ALEMBIC)
# TODO(sergey): For until someone drops by and compiles libraries for
# MinGW we allow users to compile their own Alembic library and use
# that via find_package(),
#
# Once precompiled libraries are there we'll use hardcoded locations.
find_package_wrapper(Alembic)
if(WITH_ALEMBIC_HDF5)
set(HDF5_ROOT_DIR ${LIBDIR}/hdf5)
find_package_wrapper(HDF5)
endif()
if(NOT ALEMBIC_FOUND OR (WITH_ALEMBIC_HDF5 AND NOT HDF5_FOUND))
set(WITH_ALEMBIC OFF)
set(WITH_ALEMBIC_HDF5 OFF)
endif()
endif()
set(PLATFORM_LINKFLAGS "-Xlinker --stack=2097152")
## DISABLE - causes linking errors
## for re-distribution, so users dont need mingw installed
# set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -static-libgcc -static-libstdc++")

View File

@@ -116,7 +116,6 @@ set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} /NODEFAULTLIB:msvcrt.lib /NODEFAUL
set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} /ignore:4049 /ignore:4217 /ignore:4221") set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} /ignore:4049 /ignore:4217 /ignore:4221")
set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /ignore:4221") set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /ignore:4221")
# MSVC only, Mingw doesnt need
if(CMAKE_CL_64) if(CMAKE_CL_64)
set(PLATFORM_LINKFLAGS "/MACHINE:X64 ${PLATFORM_LINKFLAGS}") set(PLATFORM_LINKFLAGS "/MACHINE:X64 ${PLATFORM_LINKFLAGS}")
else() else()
@@ -473,12 +472,7 @@ if(WITH_SDL)
set(SDL ${LIBDIR}/sdl) set(SDL ${LIBDIR}/sdl)
set(SDL_INCLUDE_DIR ${SDL}/include) set(SDL_INCLUDE_DIR ${SDL}/include)
set(SDL_LIBPATH ${SDL}/lib) set(SDL_LIBPATH ${SDL}/lib)
# MinGW TODO: Update MinGW to SDL2
if(NOT CMAKE_COMPILER_IS_GNUCC)
set(SDL_LIBRARY SDL2) set(SDL_LIBRARY SDL2)
else()
set(SDL_LIBRARY SDL)
endif()
endif() endif()
# Audio IO # Audio IO

View File

@@ -145,7 +145,7 @@ def cmake_advanced_info():
def create_eclipse_project(): def create_eclipse_project():
print("CMAKE_DIR %r" % CMAKE_DIR) print("CMAKE_DIR %r" % CMAKE_DIR)
if sys.platform == "win32": if sys.platform == "win32":
cmd = 'cmake "%s" -G"Eclipse CDT4 - MinGW Makefiles"' % CMAKE_DIR raise Exception("Error: win32 is not supported")
else: else:
if make_exe_basename.startswith(("make", "gmake")): if make_exe_basename.startswith(("make", "gmake")):
cmd = 'cmake "%s" -G"Eclipse CDT4 - Unix Makefiles"' % CMAKE_DIR cmd = 'cmake "%s" -G"Eclipse CDT4 - Unix Makefiles"' % CMAKE_DIR

View File

@@ -8,11 +8,9 @@
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
#if !defined(__MINGW32__)
inline int strcasecmp(const char *a, const char *b) { inline int strcasecmp(const char *a, const char *b) {
return _stricmp(a,b); return _stricmp(a,b);
} }
#endif
inline void srandom(unsigned long input) { inline void srandom(unsigned long input) {
srand(input); srand(input);
@@ -34,7 +32,7 @@ typedef unsigned long uintptr_t;
# if _MSC_VER < 1600 # if _MSC_VER < 1600
// stdint.h is not available before VS2010 // stdint.h is not available before VS2010
#if defined(_WIN32) && !defined(__MINGW32__) #if defined(_WIN32)
/* The __intXX are built-in types of the visual complier! So we don't /* The __intXX are built-in types of the visual complier! So we don't
need to include anything else here. need to include anything else here.
This typedefs should be in sync with types from MEM_sys_types.h */ This typedefs should be in sync with types from MEM_sys_types.h */

View File

@@ -1,15 +0,0 @@
diff -r 525472fb477a include/carve/win32.h
--- a/include/carve/win32.h Sun Jan 15 23:07:40 2012 -0500
+++ b/include/carve/win32.h Wed Jan 18 00:40:10 2012 +0600
@@ -8,9 +8,11 @@
#include <string.h>
#include <stdlib.h>
+#if !defined(__MINGW32__)
inline int strcasecmp(const char *a, const char *b) {
return _stricmp(a,b);
}
+#endif
inline void srandom(unsigned long input) {
srand(input);

View File

@@ -1,13 +0,0 @@
Index: bundle.sh
===================================================================
--- bundle.sh (revision 45912)
+++ bundle.sh (working copy)
@@ -114,7 +114,7 @@
if env['WITH_BF_BOOST']:
if env['OURPLATFORM'] not in ('win32-vc', 'win64-vc'):
# Boost is setting as preferred collections library in the Carve code when using MSVC compiler
- if env['OURPLATFORM'] != 'win32-mingw':
+ if env['OURPLATFORM'] not in ('win32-mingw', 'win64-mingw'):
defs.append('HAVE_BOOST_UNORDERED_COLLECTIONS')
defs.append('CARVE_SYSTEM_BOOST')

View File

@@ -1,7 +1,6 @@
includes.patch includes.patch
win32.patch win32.patch
mesh_iterator.patch mesh_iterator.patch
mingw.patch
gcc46.patch gcc46.patch
clang_is_heap_fix.patch clang_is_heap_fix.patch
strict_flags.patch strict_flags.patch

View File

@@ -8,7 +8,7 @@ diff -r e82d852e4fb0 include/carve/win32.h
-typedef char int8_t; -typedef char int8_t;
-typedef short int16_t; -typedef short int16_t;
-typedef long int32_t; -typedef long int32_t;
+#if defined(_WIN32) && !defined(__MINGW32__) +#if defined(_WIN32)
+/* The __intXX are built-in types of the visual complier! So we don't +/* The __intXX are built-in types of the visual complier! So we don't
+ need to include anything else here. + need to include anything else here.
+ This typedefs should be in sync with types from MEM_sys_types.h */ + This typedefs should be in sync with types from MEM_sys_types.h */

View File

@@ -29,7 +29,7 @@
#define CONTAINS_INDEX #define CONTAINS_INDEX
#define GRID_DIMENSION 20 #define GRID_DIMENSION 20
#if defined(_WIN32) && !defined(__MINGW32__) && !(_MSC_VER >= 1900) #if defined(_WIN32) && !(_MSC_VER >= 1900)
#define isnan(n) _isnan(n) #define isnan(n) _isnan(n)
#define LONG __int64 #define LONG __int64
#define int64_t __int64 #define int64_t __int64

View File

@@ -28,7 +28,7 @@
#include <cstdio> #include <cstdio>
#include <float.h> #include <float.h>
#if defined(_WIN32) && !defined(__MINGW32__) #if defined(_WIN32)
#define isnan(n) _isnan(n) #define isnan(n) _isnan(n)
#endif #endif

View File

@@ -23,12 +23,10 @@
#define mvmFloat double #define mvmFloat double
#ifdef WIN32 #ifdef WIN32
#ifndef FREE_WINDOWS
#include "float.h" #include "float.h"
#define isnan(n) _isnan(n) #define isnan(n) _isnan(n)
#define finite _finite #define finite _finite
#endif #endif
#endif
#ifdef sun #ifdef sun
#include "ieeefp.h" #include "ieeefp.h"

View File

@@ -38,7 +38,7 @@
# include <tchar.h> # include <tchar.h>
# #
# ifndef ERROR_PROFILE_DOES_NOT_MATCH_DEVICE # ifndef ERROR_PROFILE_DOES_NOT_MATCH_DEVICE
# define ERROR_PROFILE_DOES_NOT_MATCH_DEVICE 0x7E7 // Mingw64 headers may have had this # define ERROR_PROFILE_DOES_NOT_MATCH_DEVICE 0x7E7
# endif # endif
#endif #endif

View File

@@ -41,9 +41,7 @@
// We do not support multiple monitors at the moment // We do not support multiple monitors at the moment
#define COMPILE_MULTIMON_STUBS #define COMPILE_MULTIMON_STUBS
#ifndef FREE_WINDOWS
#include <multimon.h> #include <multimon.h>
#endif
GHOST_DisplayManagerWin32::GHOST_DisplayManagerWin32(void) GHOST_DisplayManagerWin32::GHOST_DisplayManagerWin32(void)

View File

@@ -37,30 +37,6 @@
#include <shlobj.h> #include <shlobj.h>
#include "utfconv.h" #include "utfconv.h"
#ifdef __MINGW32__
#if !defined(SHARD_PIDL)
#define SHARD_PIDL 0x00000001L
#endif
#if !defined(SHARD_PATHA)
#define SHARD_PATHA 0x00000002L
#endif
#if !defined(SHARD_PATHW)
#define SHARD_PATHW 0x00000003L
#endif
#if !defined(SHARD_PATH)
#ifdef UNICODE
#define SHARD_PATH SHARD_PATHW
#else
#define SHARD_PATH SHARD_PATHA
#endif
#endif
#endif
GHOST_SystemPathsWin32::GHOST_SystemPathsWin32() GHOST_SystemPathsWin32::GHOST_SystemPathsWin32()
{ {
} }

View File

@@ -890,25 +890,15 @@ bool GHOST_SystemWin32::processNDOF(RAWINPUT const &raw)
// send motion. Mark as 'sent' so motion will always get dispatched. // send motion. Mark as 'sent' so motion will always get dispatched.
eventSent = true; eventSent = true;
#if defined(_MSC_VER) || defined(FREE_WINDOWS64) #if defined(_MSC_VER)
// using Microsoft compiler & header files // using Microsoft compiler & header files
// they invented the RawInput API, so this version is (probably) correct. // they invented the RawInput API, so this version is (probably) correct.
// MinGW64 also works fine with this
BYTE const *data = raw.data.hid.bRawData; BYTE const *data = raw.data.hid.bRawData;
// struct RAWHID { // struct RAWHID {
// DWORD dwSizeHid; // DWORD dwSizeHid;
// DWORD dwCount; // DWORD dwCount;
// BYTE bRawData[1]; // BYTE bRawData[1];
// }; // };
#else
// MinGW's definition (below) doesn't agree, so we need a slight
// workaround until it's fixed
BYTE const *data = &raw.data.hid.bRawData;
// struct RAWHID {
// DWORD dwSizeHid;
// DWORD dwCount;
// BYTE bRawData; // <== isn't this s'posed to be a BYTE*?
// };
#endif #endif
BYTE packetType = data[0]; BYTE packetType = data[0];

View File

@@ -37,10 +37,10 @@
#error WIN32 only! #error WIN32 only!
#endif // WIN32 #endif // WIN32
#ifndef __MINGW64__ /* require Windows XP or newer */
#undef _WIN32_WINNT #undef _WIN32_WINNT
# define _WIN32_WINNT 0x501 // require Windows XP or newer #define _WIN32_WINNT 0x501
#endif
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include <windows.h> #include <windows.h>
#include <ole2.h> // for drag-n-drop #include <ole2.h> // for drag-n-drop

View File

@@ -8,10 +8,10 @@
#error WIN32 only! #error WIN32 only!
#endif // WIN32 #endif // WIN32
#ifndef __MINGW64__ /* require Windows XP or newer */
#undef _WIN32_WINNT #undef _WIN32_WINNT
# define _WIN32_WINNT 0x501 // require Windows XP or newer #define _WIN32_WINNT 0x501
#endif
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include <windows.h> #include <windows.h>
#include <shlobj.h> #include <shlobj.h>

View File

@@ -89,14 +89,6 @@
#if !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__NetBSD__) #if !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__NetBSD__)
// Needed for memalign on Linux and _aligned_alloc on Windows. // Needed for memalign on Linux and _aligned_alloc on Windows.
# ifdef FREE_WINDOWS
/* make sure _aligned_malloc is included */
# ifdef __MSVCRT_VERSION__
# undef __MSVCRT_VERSION__
# endif
# define __MSVCRT_VERSION__ 0x0700
# endif // FREE_WINDOWS
# include <malloc.h> # include <malloc.h>
#else #else

View File

@@ -40,10 +40,14 @@ using mv::Region;
struct LibmvFrameAccessor : public FrameAccessor { struct LibmvFrameAccessor : public FrameAccessor {
LibmvFrameAccessor(libmv_FrameAccessorUserData* user_data, LibmvFrameAccessor(libmv_FrameAccessorUserData* user_data,
libmv_GetImageCallback get_image_callback, libmv_GetImageCallback get_image_callback,
libmv_ReleaseImageCallback release_image_callback) libmv_ReleaseImageCallback release_image_callback,
libmv_GetMaskForTrackCallback get_mask_for_track_callback,
libmv_ReleaseMaskCallback release_mask_callback)
: user_data_(user_data), : user_data_(user_data),
get_image_callback_(get_image_callback), get_image_callback_(get_image_callback),
release_image_callback_(release_image_callback) { } release_image_callback_(release_image_callback),
get_mask_for_track_callback_(get_mask_for_track_callback),
release_mask_callback_(release_mask_callback) { }
virtual ~LibmvFrameAccessor() { virtual ~LibmvFrameAccessor() {
} }
@@ -109,6 +113,41 @@ struct LibmvFrameAccessor : public FrameAccessor {
release_image_callback_(cache_key); release_image_callback_(cache_key);
} }
Key GetMaskForTrack(int clip,
int frame,
int track,
const Region* region,
FloatImage* destination) {
float *float_buffer;
int width, height;
libmv_Region libmv_region;
if (region) {
get_libmv_region(*region, &libmv_region);
}
Key cache_key = get_mask_for_track_callback_(
user_data_,
clip,
frame,
track,
region != NULL ? &libmv_region : NULL,
&float_buffer,
&width,
&height);
// TODO(sergey): Dumb code for until we can set data directly.
FloatImage temp_image(float_buffer,
height,
width,
1);
destination->CopyFrom(temp_image);
return cache_key;
}
void ReleaseMask(Key key) {
release_mask_callback_(key);
}
bool GetClipDimensions(int /*clip*/, int * /*width*/, int * /*height*/) { bool GetClipDimensions(int /*clip*/, int * /*width*/, int * /*height*/) {
return false; return false;
} }
@@ -124,6 +163,8 @@ struct LibmvFrameAccessor : public FrameAccessor {
libmv_FrameAccessorUserData* user_data_; libmv_FrameAccessorUserData* user_data_;
libmv_GetImageCallback get_image_callback_; libmv_GetImageCallback get_image_callback_;
libmv_ReleaseImageCallback release_image_callback_; libmv_ReleaseImageCallback release_image_callback_;
libmv_GetMaskForTrackCallback get_mask_for_track_callback_;
libmv_ReleaseMaskCallback release_mask_callback_;
}; };
} // namespace } // namespace
@@ -131,11 +172,15 @@ struct LibmvFrameAccessor : public FrameAccessor {
libmv_FrameAccessor* libmv_FrameAccessorNew( libmv_FrameAccessor* libmv_FrameAccessorNew(
libmv_FrameAccessorUserData* user_data, libmv_FrameAccessorUserData* user_data,
libmv_GetImageCallback get_image_callback, libmv_GetImageCallback get_image_callback,
libmv_ReleaseImageCallback release_image_callback) { libmv_ReleaseImageCallback release_image_callback,
libmv_GetMaskForTrackCallback get_mask_for_track_callback,
libmv_ReleaseMaskCallback release_mask_callback) {
return (libmv_FrameAccessor*) LIBMV_OBJECT_NEW(LibmvFrameAccessor, return (libmv_FrameAccessor*) LIBMV_OBJECT_NEW(LibmvFrameAccessor,
user_data, user_data,
get_image_callback, get_image_callback,
release_image_callback); release_image_callback,
get_mask_for_track_callback,
release_mask_callback);
} }
void libmv_FrameAccessorDestroy(libmv_FrameAccessor* frame_accessor) { void libmv_FrameAccessorDestroy(libmv_FrameAccessor* frame_accessor) {

View File

@@ -61,10 +61,23 @@ typedef libmv_CacheKey (*libmv_GetImageCallback) (
typedef void (*libmv_ReleaseImageCallback) (libmv_CacheKey cache_key); typedef void (*libmv_ReleaseImageCallback) (libmv_CacheKey cache_key);
typedef libmv_CacheKey (*libmv_GetMaskForTrackCallback) (
libmv_FrameAccessorUserData* user_data,
int clip,
int frame,
int track,
const libmv_Region* region,
float** destination,
int* width,
int* height);
typedef void (*libmv_ReleaseMaskCallback) (libmv_CacheKey cache_key);
libmv_FrameAccessor* libmv_FrameAccessorNew( libmv_FrameAccessor* libmv_FrameAccessorNew(
libmv_FrameAccessorUserData* user_data, libmv_FrameAccessorUserData* user_data,
libmv_GetImageCallback get_image_callback, libmv_GetImageCallback get_image_callback,
libmv_ReleaseImageCallback release_image_callback); libmv_ReleaseImageCallback release_image_callback,
libmv_GetMaskForTrackCallback get_mask_for_track_callback,
libmv_ReleaseMaskCallback release_mask_callback);
void libmv_FrameAccessorDestroy(libmv_FrameAccessor* frame_accessor); void libmv_FrameAccessorDestroy(libmv_FrameAccessor* frame_accessor);
int64_t libmv_frameAccessorgetTransformKey(const libmv_FrameTransform *transform); int64_t libmv_frameAccessorgetTransformKey(const libmv_FrameTransform *transform);

View File

@@ -375,7 +375,9 @@ int libmv_autoTrackGetMarker(libmv_AutoTrack* /*libmv_autotrack*/,
libmv_FrameAccessor* libmv_FrameAccessorNew( libmv_FrameAccessor* libmv_FrameAccessorNew(
libmv_FrameAccessorUserData* /*user_data**/, libmv_FrameAccessorUserData* /*user_data**/,
libmv_GetImageCallback /*get_image_callback*/, libmv_GetImageCallback /*get_image_callback*/,
libmv_ReleaseImageCallback /*release_image_callback*/) libmv_ReleaseImageCallback /*release_image_callback*/,
libmv_GetMaskForTrackCallback /*get_mask_for_track_callback*/,
libmv_ReleaseMaskCallback /*release_mask_callback*/)
{ {
return NULL; return NULL;
} }

View File

@@ -36,7 +36,7 @@
/* define this to generate PNG images with content of search areas /* define this to generate PNG images with content of search areas
on every itteration of tracking */ on every itteration of tracking */
#undef DUMP_ALWAYS #define DUMP_ALWAYS
using libmv::FloatImage; using libmv::FloatImage;
using libmv::TrackRegionOptions; using libmv::TrackRegionOptions;

View File

@@ -111,6 +111,17 @@ FrameAccessor::Key GetImageForMarker(const Marker& marker,
image); image);
} }
FrameAccessor::Key GetMaskForMarker(const Marker& marker,
FrameAccessor* frame_accessor,
FloatImage* mask) {
Region region = marker.search_region.Rounded();
return frame_accessor->GetMaskForTrack(marker.clip,
marker.frame,
marker.track,
&region,
mask);
}
} // namespace } // namespace
bool AutoTrack::TrackMarker(Marker* tracked_marker, bool AutoTrack::TrackMarker(Marker* tracked_marker,
@@ -149,6 +160,11 @@ bool AutoTrack::TrackMarker(Marker* tracked_marker,
return false; return false;
} }
FloatImage reference_mask;
FrameAccessor::Key reference_mask_key = GetMaskForMarker(reference_marker,
frame_accessor_,
&reference_mask);
FloatImage tracked_image; FloatImage tracked_image;
FrameAccessor::Key tracked_key = GetImageForMarker(*tracked_marker, FrameAccessor::Key tracked_key = GetImageForMarker(*tracked_marker,
frame_accessor_, frame_accessor_,
@@ -167,6 +183,10 @@ bool AutoTrack::TrackMarker(Marker* tracked_marker,
if (track_options) { if (track_options) {
local_track_region_options = *track_options; local_track_region_options = *track_options;
} }
if (reference_mask_key != NULL) {
LG << "Using mask for reference marker: " << reference_marker;
local_track_region_options.image1_mask = &reference_mask;
}
local_track_region_options.num_extra_points = 1; // For center point. local_track_region_options.num_extra_points = 1; // For center point.
local_track_region_options.attempt_refine_before_brute = predicted_position; local_track_region_options.attempt_refine_before_brute = predicted_position;
TrackRegion(reference_image, TrackRegion(reference_image,
@@ -191,9 +211,10 @@ bool AutoTrack::TrackMarker(Marker* tracked_marker,
tracked_marker->reference_clip = reference_marker.clip; tracked_marker->reference_clip = reference_marker.clip;
tracked_marker->reference_frame = reference_marker.frame; tracked_marker->reference_frame = reference_marker.frame;
// Release the images from the accessor cache. // Release the images and masks from the accessor cache.
frame_accessor_->ReleaseImage(reference_key); frame_accessor_->ReleaseImage(reference_key);
frame_accessor_->ReleaseImage(tracked_key); frame_accessor_->ReleaseImage(tracked_key);
frame_accessor_->ReleaseMask(reference_mask_key);
// TODO(keir): Possibly the return here should get removed since the results // TODO(keir): Possibly the return here should get removed since the results
// are part of TrackResult. However, eventually the autotrack stuff will have // are part of TrackResult. However, eventually the autotrack stuff will have

View File

@@ -76,6 +76,25 @@ struct FrameAccessor {
// free the image immediately; others may hold onto the image. // free the image immediately; others may hold onto the image.
virtual void ReleaseImage(Key) = 0; virtual void ReleaseImage(Key) = 0;
// Get mask image for the given track.
//
// Implementation of this method should sample mask associated with the track
// within given region to the given destination.
//
// Result is supposed to be a single channel image.
//
// If region is NULL, it it assumed to be full-frame.
virtual Key GetMaskForTrack(int clip,
int frame,
int track,
const Region* region,
FloatImage* destination) = 0;
// Release a specified mask.
//
// Non-caching implementation may free used memory immediately.
virtual void ReleaseMask(Key key) = 0;
virtual bool GetClipDimensions(int clip, int* width, int* height) = 0; virtual bool GetClipDimensions(int clip, int* width, int* height) = 0;
virtual int NumClips() = 0; virtual int NumClips() = 0;
virtual int NumFrames(int clip) = 0; virtual int NumFrames(int clip) = 0;

View File

@@ -60,7 +60,7 @@ if(WITH_OPENCOLORIO)
ocio_impl_glsl.cc ocio_impl_glsl.cc
) )
if(WIN32 AND NOT MINGW) if(WIN32)
list(APPEND INC_SYS list(APPEND INC_SYS
${BOOST_INCLUDE_DIR} ${BOOST_INCLUDE_DIR}
) )

View File

@@ -866,7 +866,7 @@ class DupliOffsetFromCursor(Operator):
"""Set offset used for DupliGroup based on cursor position""" """Set offset used for DupliGroup based on cursor position"""
bl_idname = "object.dupli_offset_from_cursor" bl_idname = "object.dupli_offset_from_cursor"
bl_label = "Set Offset From Cursor" bl_label = "Set Offset From Cursor"
bl_options = {'REGISTER', 'UNDO'} bl_options = {'INTERNAL', 'UNDO'}
@classmethod @classmethod
def poll(cls, context): def poll(cls, context):

View File

@@ -189,11 +189,6 @@ enum {
# error Either __BIG_ENDIAN__ or __LITTLE_ENDIAN__ must be defined. # error Either __BIG_ENDIAN__ or __LITTLE_ENDIAN__ must be defined.
#endif #endif
/* there is really no good place for this */
#if defined(FREE_WINDOWS) && ((__GNUC__ < 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ < 6)))
# error "Mingw requires GCC 4.6 minimum"
#endif
#define L_ENDIAN 1 #define L_ENDIAN 1
#define B_ENDIAN 0 #define B_ENDIAN 0

View File

@@ -2864,9 +2864,12 @@ DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, const int *vtargetmap, const int
STACK_DECLARE(mvert); STACK_DECLARE(mvert);
STACK_DECLARE(oldv); STACK_DECLARE(oldv);
MEdge *med, *medge = MEM_mallocN(sizeof(*medge) * totedge, __func__); /* Note: create (totedge + totloop) elements because partially invalid polys due to merge may require
int *olde = MEM_mallocN(sizeof(*olde) * totedge, __func__); * generating new edges, and while in 99% cases we'll still end with less final edges than totedge,
int *newe = MEM_mallocN(sizeof(*newe) * totedge, __func__); * cases can be forged that would end requiring more... */
MEdge *med, *medge = MEM_mallocN(sizeof(*medge) * (totedge + totloop), __func__);
int *olde = MEM_mallocN(sizeof(*olde) * (totedge + totloop), __func__);
int *newe = MEM_mallocN(sizeof(*newe) * (totedge + totloop), __func__);
STACK_DECLARE(medge); STACK_DECLARE(medge);
STACK_DECLARE(olde); STACK_DECLARE(olde);
@@ -2900,7 +2903,7 @@ DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, const int *vtargetmap, const int
STACK_INIT(mloop, totloop); STACK_INIT(mloop, totloop);
STACK_INIT(mpoly, totpoly); STACK_INIT(mpoly, totpoly);
/* fill newl with destination vertex indices */ /* fill newv with destination vertex indices */
mv = cddm->mvert; mv = cddm->mvert;
c = 0; c = 0;
for (i = 0; i < totvert; i++, mv++) { for (i = 0; i < totvert; i++, mv++) {
@@ -2989,19 +2992,24 @@ DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, const int *vtargetmap, const int
mp = cddm->mpoly; mp = cddm->mpoly;
mv = cddm->mvert;
for (i = 0; i < totpoly; i++, mp++) { for (i = 0; i < totpoly; i++, mp++) {
MPoly *mp_new; MPoly *mp_new;
ml = cddm->mloop + mp->loopstart; ml = cddm->mloop + mp->loopstart;
/* check faces with all vertices merged */ /* check faces with all vertices merged */
{
bool all_vertices_merged = true; bool all_vertices_merged = true;
for (j = 0; j < mp->totloop; j++, ml++) { for (j = 0; j < mp->totloop; j++, ml++) {
if (vtargetmap[ml->v] == -1) { if (vtargetmap[ml->v] == -1) {
all_vertices_merged = false; all_vertices_merged = false;
break; /* This will be used to check for poly using several time the same vert. */
mv[ml->v].flag &= ~ME_VERT_TMP_TAG;
}
else {
/* This will be used to check for poly using several time the same vert. */
mv[vtargetmap[ml->v]].flag &= ~ME_VERT_TMP_TAG;
} }
} }
@@ -3014,7 +3022,7 @@ DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, const int *vtargetmap, const int
/* Additional condition for face dump: target vertices must make up an identical face */ /* Additional condition for face dump: target vertices must make up an identical face */
/* The test has 2 steps: (1) first step is fast ghash lookup, but not failproof */ /* The test has 2 steps: (1) first step is fast ghash lookup, but not failproof */
/* (2) second step is thorough but more costly poly compare */ /* (2) second step is thorough but more costly poly compare */
int i_poly, v_target, v_prev; int i_poly, v_target;
bool found = false; bool found = false;
PolyKey pkey; PolyKey pkey;
@@ -3023,18 +3031,11 @@ DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, const int *vtargetmap, const int
ml = cddm->mloop + mp->loopstart; ml = cddm->mloop + mp->loopstart;
pkey.hash_sum = pkey.hash_xor = 0; pkey.hash_sum = pkey.hash_xor = 0;
pkey.totloops = 0; pkey.totloops = 0;
v_prev = vtargetmap[(ml + mp->totloop -1)->v]; /* since it loops around, the prev of first is the last */
for (j = 0; j < mp->totloop; j++, ml++) { for (j = 0; j < mp->totloop; j++, ml++) {
v_target = vtargetmap[ml->v]; /* Cannot be -1, they are all mapped */ v_target = vtargetmap[ml->v]; /* Cannot be -1, they are all mapped */
if (v_target == v_prev) {
/* consecutive vertices in loop map to the same target: discard */
/* but what about last to first ? */
continue;
}
pkey.hash_sum += v_target; pkey.hash_sum += v_target;
pkey.hash_xor ^= v_target; pkey.hash_xor ^= v_target;
pkey.totloops++; pkey.totloops++;
v_prev = v_target;
} }
if (BLI_gset_haskey(poly_gset, &pkey)) { if (BLI_gset_haskey(poly_gset, &pkey)) {
@@ -3069,7 +3070,6 @@ DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, const int *vtargetmap, const int
} }
} }
} }
}
/* Here either the poly's vertices were not all merged /* Here either the poly's vertices were not all merged
@@ -3079,32 +3079,121 @@ DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, const int *vtargetmap, const int
ml = cddm->mloop + mp->loopstart; ml = cddm->mloop + mp->loopstart;
c = 0; c = 0;
MLoop *last_valid_ml = NULL;
MLoop *first_valid_ml = NULL;
bool need_edge_from_last_valid_ml = false;
bool need_edge_to_first_valid_ml = false;
int created_edges = 0;
for (j = 0; j < mp->totloop; j++, ml++) { for (j = 0; j < mp->totloop; j++, ml++) {
unsigned int v1, v2; const uint mlv = (vtargetmap[ml->v] != -1) ? vtargetmap[ml->v] : ml->v;
#ifndef NDEBUG
{
MLoop *next_ml = cddm->mloop + mp->loopstart + ((j + 1) % mp->totloop);
uint next_mlv = (vtargetmap[next_ml->v] != -1) ? vtargetmap[next_ml->v] : next_ml->v;
med = cddm->medge + ml->e; med = cddm->medge + ml->e;
v1 = (vtargetmap[med->v1] != -1) ? vtargetmap[med->v1] : med->v1; uint v1 = (vtargetmap[med->v1] != -1) ? vtargetmap[med->v1] : med->v1;
v2 = (vtargetmap[med->v2] != -1) ? vtargetmap[med->v2] : med->v2; uint v2 = (vtargetmap[med->v2] != -1) ? vtargetmap[med->v2] : med->v2;
if (LIKELY(v1 != v2)) { BLI_assert((mlv == v1 && next_mlv == v2) || (mlv == v2 && next_mlv == v1));
}
#endif
/* A loop is only valid if its matching edge is, and it's not reusing a vertex already used by this poly. */
if (LIKELY((newe[ml->e] != -1) && ((mv[mlv].flag & ME_VERT_TMP_TAG) == 0))) {
mv[mlv].flag |= ME_VERT_TMP_TAG;
if (UNLIKELY(last_valid_ml != NULL && need_edge_from_last_valid_ml)) {
/* We need to create a new edge between last valid loop and this one! */
void **val_p;
uint v1 = (vtargetmap[last_valid_ml->v] != -1) ? vtargetmap[last_valid_ml->v] : last_valid_ml->v;
uint v2 = mlv;
BLI_assert(v1 != v2);
if (BLI_edgehash_ensure_p(ehash, v1, v2, &val_p)) {
last_valid_ml->e = GET_INT_FROM_POINTER(*val_p);
}
else {
const int new_eidx = STACK_SIZE(medge);
STACK_PUSH(olde, olde[last_valid_ml->e]);
STACK_PUSH(medge, cddm->medge[last_valid_ml->e]);
medge[new_eidx].v1 = last_valid_ml->v;
medge[new_eidx].v2 = ml->v;
/* DO NOT change newe mapping, could break actual values due to some deleted original edges. */
*val_p = SET_INT_IN_POINTER(new_eidx);
created_edges++;
last_valid_ml->e = new_eidx;
}
need_edge_from_last_valid_ml = false;
}
#ifdef USE_LOOPS #ifdef USE_LOOPS
newl[j + mp->loopstart] = STACK_SIZE(mloop); newl[j + mp->loopstart] = STACK_SIZE(mloop);
#endif #endif
STACK_PUSH(oldl, j + mp->loopstart); STACK_PUSH(oldl, j + mp->loopstart);
STACK_PUSH(mloop, *ml); last_valid_ml = STACK_PUSH_RET_PTR(mloop);
c++; *last_valid_ml = *ml;
if (first_valid_ml == NULL) {
first_valid_ml = last_valid_ml;
} }
c++;
/* We absolutely HAVE to handle edge index remapping here, otherwise potential newly created edges
* in that part of code make remapping later totally unreliable. */
BLI_assert(newe[ml->e] != -1);
last_valid_ml->e = newe[ml->e];
}
else {
if (last_valid_ml != NULL) {
need_edge_from_last_valid_ml = true;
}
else {
need_edge_to_first_valid_ml = true;
}
}
}
if (UNLIKELY(last_valid_ml != NULL && !ELEM(first_valid_ml, NULL, last_valid_ml) &&
(need_edge_to_first_valid_ml || need_edge_from_last_valid_ml)))
{
/* We need to create a new edge between last valid loop and first valid one! */
void **val_p;
uint v1 = (vtargetmap[last_valid_ml->v] != -1) ? vtargetmap[last_valid_ml->v] : last_valid_ml->v;
uint v2 = (vtargetmap[first_valid_ml->v] != -1) ? vtargetmap[first_valid_ml->v] : first_valid_ml->v;
BLI_assert(v1 != v2);
if (BLI_edgehash_ensure_p(ehash, v1, v2, &val_p)) {
last_valid_ml->e = GET_INT_FROM_POINTER(*val_p);
}
else {
const int new_eidx = STACK_SIZE(medge);
STACK_PUSH(olde, olde[last_valid_ml->e]);
STACK_PUSH(medge, cddm->medge[last_valid_ml->e]);
medge[new_eidx].v1 = last_valid_ml->v;
medge[new_eidx].v2 = first_valid_ml->v;
/* DO NOT change newe mapping, could break actual values due to some deleted original edges. */
*val_p = SET_INT_IN_POINTER(new_eidx);
created_edges++;
last_valid_ml->e = new_eidx;
}
need_edge_to_first_valid_ml = need_edge_from_last_valid_ml = false;
} }
if (UNLIKELY(c == 0)) { if (UNLIKELY(c == 0)) {
BLI_assert(created_edges == 0);
continue; continue;
} }
else if (UNLIKELY(c < 3)) { else if (UNLIKELY(c < 3)) {
STACK_DISCARD(oldl, c); STACK_DISCARD(oldl, c);
STACK_DISCARD(mloop, c); STACK_DISCARD(mloop, c);
if (created_edges > 0) {
for (j = STACK_SIZE(medge) - created_edges; j < STACK_SIZE(medge); j++) {
BLI_edgehash_remove(ehash, medge[j].v1, medge[j].v2, NULL);
}
STACK_DISCARD(olde, created_edges);
STACK_DISCARD(medge, created_edges);
}
continue; continue;
} }
mp_new = STACK_PUSH_RET_PTR(mpoly); mp_new = STACK_PUSH_RET_PTR(mpoly);
*mp_new = *mp; *mp_new = *mp;
mp_new->totloop = c; mp_new->totloop = c;
@@ -3129,9 +3218,9 @@ DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, const int *vtargetmap, const int
/*update edge indices and copy customdata*/ /*update edge indices and copy customdata*/
med = medge; med = medge;
for (i = 0; i < cddm2->dm.numEdgeData; i++, med++) { for (i = 0; i < cddm2->dm.numEdgeData; i++, med++) {
if (newv[med->v1] != -1) BLI_assert(newv[med->v1] != -1);
med->v1 = newv[med->v1]; med->v1 = newv[med->v1];
if (newv[med->v2] != -1) BLI_assert(newv[med->v2] != -1);
med->v2 = newv[med->v2]; med->v2 = newv[med->v2];
/* Can happen in case vtargetmap contains some double chains, we do not support that. */ /* Can happen in case vtargetmap contains some double chains, we do not support that. */
@@ -3143,9 +3232,8 @@ DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, const int *vtargetmap, const int
/*update loop indices and copy customdata*/ /*update loop indices and copy customdata*/
ml = mloop; ml = mloop;
for (i = 0; i < cddm2->dm.numLoopData; i++, ml++) { for (i = 0; i < cddm2->dm.numLoopData; i++, ml++) {
if (newe[ml->e] != -1) /* Edge remapping has already be done in main loop handling part above. */
ml->e = newe[ml->e]; BLI_assert(newv[ml->v] != -1);
if (newv[ml->v] != -1)
ml->v = newv[ml->v]; ml->v = newv[ml->v];
CustomData_copy_data(&dm->loopData, &cddm2->dm.loopData, oldl[i], i, 1); CustomData_copy_data(&dm->loopData, &cddm2->dm.loopData, oldl[i], i, 1);

View File

@@ -1925,17 +1925,16 @@ void *CustomData_add_layer_named(CustomData *data, int type, int alloctype,
bool CustomData_free_layer(CustomData *data, int type, int totelem, int index) bool CustomData_free_layer(CustomData *data, int type, int totelem, int index)
{ {
if (index < 0) {
return false;
}
const int index_first = CustomData_get_layer_index(data, type); const int index_first = CustomData_get_layer_index(data, type);
if (index_first == -1) {
return false;
}
const int n = index - index_first; const int n = index - index_first;
int i; int i;
BLI_assert(index >= index_first);
if ((index_first == -1) || (n < 0)) {
return false;
}
BLI_assert(data->layers[index].type == type);
customData_free_layer__internal(&data->layers[index], totelem); customData_free_layer__internal(&data->layers[index], totelem);
for (i = index + 1; i < data->totlayer; ++i) for (i = index + 1; i < data->totlayer; ++i)

View File

@@ -585,8 +585,8 @@ bool BKE_mesh_validate_arrays(Mesh *mesh,
int prev_e = ml->e; int prev_e = ml->e;
ml->e = GET_INT_FROM_POINTER(BLI_edgehash_lookup(edge_hash, v1, v2)); ml->e = GET_INT_FROM_POINTER(BLI_edgehash_lookup(edge_hash, v1, v2));
fix_flag.loops_edge = true; fix_flag.loops_edge = true;
PRINT_ERR("\tPoly %u has invalid edge reference (%d), fixed using edge %u\n", PRINT_ERR("\tPoly %u has invalid edge reference (%d, is_removed: %d), fixed using edge %u\n",
sp->index, prev_e, ml->e); sp->index, prev_e, IS_REMOVED_EDGE(me), ml->e);
} }
else { else {
PRINT_ERR("\tPoly %u has invalid edge reference (%u)\n", sp->index, ml->e); PRINT_ERR("\tPoly %u has invalid edge reference (%u)\n", sp->index, ml->e);

View File

@@ -974,8 +974,11 @@ static void track_mask_set_pixel_cb(int x, int x_end, int y, void *user_data)
} }
static void track_mask_gpencil_layer_rasterize(int frame_width, int frame_height, static void track_mask_gpencil_layer_rasterize(int frame_width, int frame_height,
MovieTrackingMarker *marker, bGPDlayer *layer, const float region_min[2],
float *mask, int mask_width, int mask_height) bGPDlayer *layer,
float *mask,
int mask_width,
int mask_height)
{ {
bGPDframe *frame = layer->frames.first; bGPDframe *frame = layer->frames.first;
TrackMaskSetPixelData data; TrackMaskSetPixelData data;
@@ -994,8 +997,8 @@ static void track_mask_gpencil_layer_rasterize(int frame_width, int frame_height
point = mask_points = MEM_callocN(2 * stroke->totpoints * sizeof(int), point = mask_points = MEM_callocN(2 * stroke->totpoints * sizeof(int),
"track mask rasterization points"); "track mask rasterization points");
for (int i = 0; i < stroke->totpoints; i++, point += 2) { for (int i = 0; i < stroke->totpoints; i++, point += 2) {
point[0] = (stroke_points[i].x - marker->search_min[0]) * frame_width; point[0] = stroke_points[i].x * frame_width - region_min[0];
point[1] = (stroke_points[i].y - marker->search_min[1]) * frame_height; point[1] = stroke_points[i].y * frame_height - region_min[1];
} }
/* TODO: add an option to control whether AA is enabled or not */ /* TODO: add an option to control whether AA is enabled or not */
BLI_bitmap_draw_2d_poly_v2i_n( BLI_bitmap_draw_2d_poly_v2i_n(
@@ -1010,24 +1013,40 @@ static void track_mask_gpencil_layer_rasterize(int frame_width, int frame_height
} }
} }
float *BKE_tracking_track_get_mask(int frame_width, int frame_height, /* Region is in pixel space, relative to marker's center. */
MovieTrackingTrack *track, MovieTrackingMarker *marker) float *tracking_track_get_mask_for_region(int frame_width, int frame_height,
const float region_min[2],
const float region_max[2],
MovieTrackingTrack *track)
{ {
float *mask = NULL; float *mask = NULL;
bGPDlayer *layer = track_mask_gpencil_layer_get(track); bGPDlayer *layer = track_mask_gpencil_layer_get(track);
int mask_width, mask_height; if (layer != NULL) {
const int mask_width = region_max[0] - region_min[0];
mask_width = (marker->search_max[0] - marker->search_min[0]) * frame_width; const int mask_height = region_max[1] - region_min[1];
mask_height = (marker->search_max[1] - marker->search_min[1]) * frame_height;
if (layer) {
mask = MEM_callocN(mask_width * mask_height * sizeof(float), "track mask"); mask = MEM_callocN(mask_width * mask_height * sizeof(float), "track mask");
track_mask_gpencil_layer_rasterize(frame_width, frame_height,
track_mask_gpencil_layer_rasterize(frame_width, frame_height, marker, layer, region_min,
mask, mask_width, mask_height); layer,
mask,
mask_width, mask_height);
}
return mask;
} }
return mask; float *BKE_tracking_track_get_mask(int frame_width, int frame_height,
MovieTrackingTrack *track,
MovieTrackingMarker *marker)
{
/* Convert normalized space marker's search area to pixel-space region. */
const float region_min[2] = {marker->search_min[0] * frame_width,
marker->search_min[1] * frame_height};
const float region_max[2] = {marker->search_max[0] * frame_width,
marker->search_max[1] * frame_height};
return tracking_track_get_mask_for_region(frame_width, frame_height,
region_min,
region_max,
track);
} }
float BKE_tracking_track_get_weight_for_marker(MovieClip *clip, MovieTrackingTrack *track, MovieTrackingMarker *marker) float BKE_tracking_track_get_weight_for_marker(MovieClip *clip, MovieTrackingTrack *track, MovieTrackingMarker *marker)

View File

@@ -36,8 +36,9 @@
#include "DNA_movieclip_types.h" #include "DNA_movieclip_types.h"
#include "DNA_object_types.h" /* SELECT */ #include "DNA_object_types.h" /* SELECT */
#include "BLI_threads.h"
#include "BLI_utildefines.h" #include "BLI_utildefines.h"
#include "BLI_listbase.h"
#include "BLI_threads.h"
#include "BLI_math.h" #include "BLI_math.h"
#include "BKE_movieclip.h" #include "BKE_movieclip.h"
@@ -76,6 +77,9 @@ typedef struct AutoTrackContext {
int num_tracks; /* Number of tracks being tracked. */ int num_tracks; /* Number of tracks being tracked. */
AutoTrackOptions *options; /* Per-tracking track options. */ AutoTrackOptions *options; /* Per-tracking track options. */
/* Array of all tracks, indexed by track_index. */
MovieTrackingTrack **tracks;
bool backwards; bool backwards;
bool sequence; bool sequence;
int first_frame; int first_frame;
@@ -306,8 +310,15 @@ AutoTrackContext *BKE_autotrack_context_new(MovieClip *clip,
BLI_spin_init(&context->spin_lock); BLI_spin_init(&context->spin_lock);
int num_total_tracks = BLI_listbase_count(tracksbase);
context->tracks =
MEM_callocN(sizeof(MovieTrackingTrack*) * num_total_tracks,
"auto track pointers");
context->image_accessor = context->image_accessor =
tracking_image_accessor_new(context->clips, 1, user->framenr); tracking_image_accessor_new(context->clips, 1,
context->tracks, num_total_tracks,
user->framenr);
context->autotrack = context->autotrack =
libmv_autoTrackNew(context->image_accessor->libmv_accessor); libmv_autoTrackNew(context->image_accessor->libmv_accessor);
@@ -361,6 +372,7 @@ AutoTrackContext *BKE_autotrack_context_new(MovieClip *clip,
options->use_keyframe_match = options->use_keyframe_match =
track->pattern_match == TRACK_MATCH_KEYFRAME; track->pattern_match == TRACK_MATCH_KEYFRAME;
} }
context->tracks[track_index] = track;
++track_index; ++track_index;
} }
@@ -565,6 +577,7 @@ void BKE_autotrack_context_free(AutoTrackContext *context)
libmv_autoTrackDestroy(context->autotrack); libmv_autoTrackDestroy(context->autotrack);
tracking_image_accessor_destroy(context->image_accessor); tracking_image_accessor_destroy(context->image_accessor);
MEM_freeN(context->options); MEM_freeN(context->options);
MEM_freeN(context->tracks);
BLI_spin_end(&context->spin_lock); BLI_spin_end(&context->spin_lock);
MEM_freeN(context); MEM_freeN(context);
} }

View File

@@ -875,8 +875,64 @@ static void accessor_release_image_callback(libmv_CacheKey cache_key)
IMB_freeImBuf(ibuf); IMB_freeImBuf(ibuf);
} }
static libmv_CacheKey accessor_get_mask_for_track_callback(
libmv_FrameAccessorUserData* user_data,
int clip_index,
int frame,
int track_index,
const libmv_Region *region,
float **r_destination,
int *r_width,
int *r_height)
{
/* Perform sanity checks first. */
TrackingImageAccessor *accessor = (TrackingImageAccessor *) user_data;
BLI_assert(clip_index < accessor->num_clips);
BLI_assert(track_index < accessor->num_tracks);
MovieTrackingTrack *track = accessor->tracks[track_index];
/* Early output, track does not use mask. */
if ((track->algorithm_flag & TRACK_ALGORITHM_FLAG_USE_MASK) == 0) {
return NULL;
}
MovieClip *clip = accessor->clips[clip_index];
/* Construct fake user so we can access movie clip. */
MovieClipUser user;
int scene_frame = BKE_movieclip_remap_clip_to_scene_frame(clip, frame);
BKE_movieclip_user_set_frame(&user, scene_frame);
user.render_size = MCLIP_PROXY_RENDER_SIZE_FULL;
user.render_flag = 0;
/* Get frame width and height so we can convert stroke coordinates
* and other things from normalized to pixel space.
*/
int frame_width, frame_height;
BKE_movieclip_get_size(clip, &user, &frame_width, &frame_height);
/* Actual mask sampling. */
MovieTrackingMarker *marker = BKE_tracking_marker_get_exact(track, frame);
const float region_min[2] = {region->min[0] - marker->pos[0] * frame_width,
region->min[1] - marker->pos[1] * frame_height};
const float region_max[2] = {region->max[0] - marker->pos[0] * frame_width,
region->max[1] - marker->pos[1] * frame_height};
*r_destination = tracking_track_get_mask_for_region(frame_width, frame_height,
region_min,
region_max,
track);
*r_width = region->max[0] - region->min[0];
*r_height = region->max[1] - region->min[1];
return *r_destination;
}
static void accessor_release_mask_callback(libmv_CacheKey cache_key)
{
if (cache_key != NULL) {
float *mask = (float *)cache_key;
MEM_freeN(mask);
}
}
TrackingImageAccessor *tracking_image_accessor_new(MovieClip *clips[MAX_ACCESSOR_CLIP], TrackingImageAccessor *tracking_image_accessor_new(MovieClip *clips[MAX_ACCESSOR_CLIP],
int num_clips, int num_clips,
MovieTrackingTrack **tracks,
int num_tracks,
int start_frame) int start_frame)
{ {
TrackingImageAccessor *accessor = TrackingImageAccessor *accessor =
@@ -891,12 +947,16 @@ TrackingImageAccessor *tracking_image_accessor_new(MovieClip *clips[MAX_ACCESSOR
memcpy(accessor->clips, clips, num_clips * sizeof(MovieClip *)); memcpy(accessor->clips, clips, num_clips * sizeof(MovieClip *));
accessor->num_clips = num_clips; accessor->num_clips = num_clips;
accessor->tracks = tracks;
accessor->num_tracks = num_tracks;
accessor->start_frame = start_frame; accessor->start_frame = start_frame;
accessor->libmv_accessor = accessor->libmv_accessor =
libmv_FrameAccessorNew((libmv_FrameAccessorUserData *) accessor, libmv_FrameAccessorNew((libmv_FrameAccessorUserData *) accessor,
accessor_get_image_callback, accessor_get_image_callback,
accessor_release_image_callback); accessor_release_image_callback,
accessor_get_mask_for_track_callback,
accessor_release_mask_callback);
return accessor; return accessor;
} }

View File

@@ -268,11 +268,7 @@ int BKE_frameserver_loop(void *context_v, RenderData *rd, ReportList *UNUSED(rep
struct timeval tv; struct timeval tv;
struct sockaddr_in addr; struct sockaddr_in addr;
int len, rval; int len, rval;
#ifdef FREE_WINDOWS
int socklen;
#else
unsigned int socklen; unsigned int socklen;
#endif
char buf[4096]; char buf[4096];
FrameserverContext *context = context_v; FrameserverContext *context = context_v;

View File

@@ -105,6 +105,13 @@ struct MovieTrackingMarker *tracking_get_keyframed_marker(
int current_frame, int current_frame,
bool backwards); bool backwards);
/*********************** Masking *************************/
float *tracking_track_get_mask_for_region(int frame_width, int frame_height,
const float region_min[2],
const float region_max[2],
MovieTrackingTrack *track);
/*********************** Frame accessr *************************/ /*********************** Frame accessr *************************/
struct libmv_FrameAccessor; struct libmv_FrameAccessor;
@@ -114,12 +121,16 @@ typedef struct TrackingImageAccessor {
struct MovieCache *cache; struct MovieCache *cache;
struct MovieClip *clips[MAX_ACCESSOR_CLIP]; struct MovieClip *clips[MAX_ACCESSOR_CLIP];
int num_clips; int num_clips;
struct MovieTrackingTrack **tracks;
int num_tracks;
int start_frame; int start_frame;
struct libmv_FrameAccessor *libmv_accessor; struct libmv_FrameAccessor *libmv_accessor;
} TrackingImageAccessor; } TrackingImageAccessor;
TrackingImageAccessor *tracking_image_accessor_new(MovieClip *clips[MAX_ACCESSOR_CLIP], TrackingImageAccessor *tracking_image_accessor_new(MovieClip *clips[MAX_ACCESSOR_CLIP],
int num_clips, int num_clips,
MovieTrackingTrack **tracks,
int num_tracks,
int start_frame); int start_frame);
void tracking_image_accessor_destroy(TrackingImageAccessor *accessor); void tracking_image_accessor_destroy(TrackingImageAccessor *accessor);

View File

@@ -29,10 +29,6 @@
/* BLI_array_alloca / alloca */ /* BLI_array_alloca / alloca */
#if defined(__MINGW32__)
# include <malloc.h> /* mingw needs for alloca() */
#endif
#if defined(__GNUC__) || defined(__clang__) #if defined(__GNUC__) || defined(__clang__)
#if defined(__cplusplus) && (__cplusplus > 199711L) #if defined(__cplusplus) && (__cplusplus > 199711L)
#define BLI_array_alloca(arr, realsize) \ #define BLI_array_alloca(arr, realsize) \

View File

@@ -32,11 +32,6 @@
# define alloca _alloca # define alloca _alloca
#endif #endif
/* alloca is defined here for MinGW32 */
#ifdef __MINGW32__
# include <malloc.h>
#endif
#if defined(__cplusplus) && ((__cplusplus >= 201103L) || defined(_MSC_VER)) #if defined(__cplusplus) && ((__cplusplus >= 201103L) || defined(_MSC_VER))
# define HAS_CPP11_FEATURES # define HAS_CPP11_FEATURES
#endif #endif

View File

@@ -65,10 +65,8 @@ int BLI_create_symlink(const char *path, const char *to) ATTR_NONNULL();
/* keep in sync with the definition of struct direntry in BLI_fileops_types.h */ /* keep in sync with the definition of struct direntry in BLI_fileops_types.h */
#ifdef WIN32 #ifdef WIN32
# if defined(_MSC_VER) || defined(__MINGW64__) # if defined(_MSC_VER)
typedef struct _stat64 BLI_stat_t; typedef struct _stat64 BLI_stat_t;
# elif defined(__MINGW32__)
typedef struct _stati64 BLI_stat_t;
# else # else
typedef struct _stat BLI_stat_t; typedef struct _stat BLI_stat_t;
# endif # endif

View File

@@ -35,7 +35,7 @@
#include <sys/stat.h> #include <sys/stat.h>
#if defined(WIN32) && !defined(FREE_WINDOWS) #if defined(WIN32)
typedef unsigned int mode_t; typedef unsigned int mode_t;
#endif #endif
@@ -50,10 +50,8 @@ struct direntry {
const char *relname; const char *relname;
const char *path; const char *path;
#ifdef WIN32 /* keep in sync with the definition of BLI_stat_t in BLI_fileops.h */ #ifdef WIN32 /* keep in sync with the definition of BLI_stat_t in BLI_fileops.h */
# if defined(_MSC_VER) || defined(__MINGW64__) # if defined(_MSC_VER)
struct _stat64 s; struct _stat64 s;
# elif defined(__MINGW32__)
struct _stati64 s;
# else # else
struct _stat s; struct _stat s;
# endif # endif

View File

@@ -65,8 +65,8 @@ typedef uint64_t u_int64_t;
#include <inttypes.h> #include <inttypes.h>
/* MinGW and MSVC >= 2010 */ /* MSVC >= 2010 */
#elif defined(FREE_WINDOWS) || defined(_MSC_VER) #elif defined(_MSC_VER)
#include <stdint.h> #include <stdint.h>
#else #else

View File

@@ -37,15 +37,6 @@
# error "This include is for Windows only!" # error "This include is for Windows only!"
#endif #endif
#ifdef FREE_WINDOWS
# ifdef WINVER
# undef WINVER
# endif
/* Some stuff requires WINVER 0x500, but mingw's default is 0x400 */
# define WINVER 0x0501
#endif
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#ifndef WIN32_SKIP_HKEY_PROTECTION #ifndef WIN32_SKIP_HKEY_PROTECTION
@@ -94,7 +85,7 @@ extern "C" {
# define snprintf _snprintf # define snprintf _snprintf
#endif #endif
#if defined(_MSC_VER) || (defined(FREE_WINDOWS) && !defined(FREE_WINDOWS64)) #if defined(_MSC_VER)
# define R_OK 4 # define R_OK 4
# define W_OK 2 # define W_OK 2
// not accepted by access() on windows // not accepted by access() on windows
@@ -102,30 +93,24 @@ extern "C" {
# define F_OK 0 # define F_OK 0
#endif #endif
#ifndef FREE_WINDOWS
typedef unsigned int mode_t; typedef unsigned int mode_t;
#endif
/* use functions that take a 64 bit offset for files larger than 4GB */ /* use functions that take a 64 bit offset for files larger than 4GB */
#ifndef FREE_WINDOWS
#include <stdio.h> #include <stdio.h>
#define fseek(stream, offset, origin) _fseeki64(stream, offset, origin) #define fseek(stream, offset, origin) _fseeki64(stream, offset, origin)
#define ftell(stream) _ftelli64(stream) #define ftell(stream) _ftelli64(stream)
#define lseek(fd, offset, origin) _lseeki64(fd, offset, origin) #define lseek(fd, offset, origin) _lseeki64(fd, offset, origin)
#define tell(fd) _telli64(fd) #define tell(fd) _telli64(fd)
#endif
/* mingw using _SSIZE_T_ to declare ssize_t type */
#ifndef _SSIZE_T_ #ifndef _SSIZE_T_
# define _SSIZE_T_ # define _SSIZE_T_
/* python uses HAVE_SSIZE_T */ /* python uses HAVE_SSIZE_T */
# ifndef HAVE_SSIZE_T # ifndef HAVE_SSIZE_T
# define HAVE_SSIZE_T 1 # define HAVE_SSIZE_T 1
# ifndef FREE_WINDOWS64
typedef long ssize_t; typedef long ssize_t;
# endif # endif
#endif #endif
#endif
struct dirent { struct dirent {
int d_ino; int d_ino;

View File

@@ -42,9 +42,6 @@
#include "zlib.h" #include "zlib.h"
#ifdef WIN32 #ifdef WIN32
# ifdef __MINGW32__
# include <ctype.h>
# endif
# include <io.h> # include <io.h>
# include "BLI_winstuff.h" # include "BLI_winstuff.h"
# include "BLI_callbacks.h" # include "BLI_callbacks.h"
@@ -265,7 +262,7 @@ void *BLI_gzopen(const char *filename, const char *mode)
/* temporary #if until we update all libraries to 1.2.7 /* temporary #if until we update all libraries to 1.2.7
* for correct wide char path handling */ * for correct wide char path handling */
#if ZLIB_VERNUM >= 0x1270 && !defined(FREE_WINDOWS) #if ZLIB_VERNUM >= 0x1270
UTF16_ENCODE(filename); UTF16_ENCODE(filename);
gzfile = gzopen_w(filename_16, mode); gzfile = gzopen_w(filename_16, mode);

View File

@@ -1173,22 +1173,10 @@ bool BLI_path_program_search(
void BLI_setenv(const char *env, const char *val) void BLI_setenv(const char *env, const char *val)
{ {
/* free windows */ /* free windows */
#if (defined(WIN32) || defined(WIN64)) && defined(FREE_WINDOWS)
char *envstr;
if (val) #if (defined(WIN32) || defined(WIN64))
envstr = BLI_sprintfN("%s=%s", env, val);
else
envstr = BLI_sprintfN("%s=", env);
putenv(envstr);
MEM_freeN(envstr);
/* non-free windows */
#elif (defined(WIN32) || defined(WIN64)) /* not free windows */
uputenv(env, val); uputenv(env, val);
#else #else
/* linux/osx/bsd */ /* linux/osx/bsd */
if (val) if (val)

View File

@@ -253,10 +253,8 @@ int BLI_stat(const char *path, BLI_stat_t *buffer)
int BLI_wstat(const wchar_t *path, BLI_stat_t *buffer) int BLI_wstat(const wchar_t *path, BLI_stat_t *buffer)
{ {
#if defined(_MSC_VER) || defined(__MINGW64__) #if defined(_MSC_VER)
return _wstat64(path, buffer); return _wstat64(path, buffer);
#elif defined(__MINGW32__)
return _wstati64(path, buffer);
#else #else
return _wstat(path, buffer); return _wstat(path, buffer);
#endif #endif
@@ -424,23 +422,13 @@ void BLI_file_free_lines(LinkNode *lines)
bool BLI_file_older(const char *file1, const char *file2) bool BLI_file_older(const char *file1, const char *file2)
{ {
#ifdef WIN32 #ifdef WIN32
#ifndef __MINGW32__
struct _stat st1, st2; struct _stat st1, st2;
#else
struct _stati64 st1, st2;
#endif
UTF16_ENCODE(file1); UTF16_ENCODE(file1);
UTF16_ENCODE(file2); UTF16_ENCODE(file2);
#ifndef __MINGW32__
if (_wstat(file1_16, &st1)) return false; if (_wstat(file1_16, &st1)) return false;
if (_wstat(file2_16, &st2)) return false; if (_wstat(file2_16, &st2)) return false;
#else
if (_wstati64(file1_16, &st1)) return false;
if (_wstati64(file2_16, &st2)) return false;
#endif
UTF16_UN_ENCODE(file2); UTF16_UN_ENCODE(file2);
UTF16_UN_ENCODE(file1); UTF16_UN_ENCODE(file1);

View File

@@ -160,8 +160,6 @@ void RegisterBlendExtension(void)
GetSystemDirectory(SysDir, FILE_MAXDIR); GetSystemDirectory(SysDir, FILE_MAXDIR);
#ifdef _WIN64 #ifdef _WIN64
ThumbHandlerDLL = "BlendThumb64.dll"; ThumbHandlerDLL = "BlendThumb64.dll";
#elif defined(__MINGW32__)
ThumbHandlerDLL = "BlendThumb.dll";
#else #else
IsWow64Process(GetCurrentProcess(), &IsWOW64); IsWow64Process(GetCurrentProcess(), &IsWOW64);
if (IsWOW64 == true) if (IsWOW64 == true)

View File

@@ -27,7 +27,7 @@
#include <algorithm> #include <algorithm>
#if !defined(WIN32) || defined(FREE_WINDOWS) #if !defined(WIN32)
#include <iostream> #include <iostream>
#endif #endif

View File

@@ -27,7 +27,7 @@
#include <algorithm> #include <algorithm>
#if !defined(WIN32) || defined(FREE_WINDOWS) #if !defined(WIN32)
#include <stdint.h> #include <stdint.h>
#endif #endif

View File

@@ -5237,8 +5237,10 @@ static int edbm_noise_exec(bContext *C, wmOperator *op)
else { else {
BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) {
if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) {
float tin, dum; float tin = 0.0f, dum;
externtex(ma->mtex[0], eve->co, &tin, &dum, &dum, &dum, &dum, 0, NULL, false, false); if (ma->mtex[ma->texact] != NULL) {
externtex(ma->mtex[ma->texact], eve->co, &tin, &dum, &dum, &dum, &dum, 0, NULL, false, false);
}
eve->co[2] += fac * tin; eve->co[2] += fac * tin;
} }
} }

View File

@@ -48,9 +48,6 @@
#ifdef WIN32 #ifdef WIN32
# include <windows.h> /* need to include windows.h so _WIN32_IE is defined */ # include <windows.h> /* need to include windows.h so _WIN32_IE is defined */
# ifndef _WIN32_IE
# define _WIN32_IE 0x0400 /* minimal requirements for SHGetSpecialFolderPath on MINGW MSVC has this defined already */
# endif
# include <shlobj.h> /* for SHGetSpecialFolderPath, has to be done before BLI_winstuff # include <shlobj.h> /* for SHGetSpecialFolderPath, has to be done before BLI_winstuff
* because 'near' is disabled through BLI_windstuff */ * because 'near' is disabled through BLI_windstuff */
# include "BLI_winstuff.h" # include "BLI_winstuff.h"

View File

@@ -40,10 +40,7 @@
# include <mmsystem.h> # include <mmsystem.h>
# include <memory.h> # include <memory.h>
# include <commdlg.h> # include <commdlg.h>
# ifndef FREE_WINDOWS
# include <vfw.h> # include <vfw.h>
# endif
# undef AVIIF_KEYFRAME // redefined in AVI_avi.h # undef AVIIF_KEYFRAME // redefined in AVI_avi.h
# undef AVIIF_LIST // redefined in AVI_avi.h # undef AVIIF_LIST // redefined in AVI_avi.h
@@ -130,7 +127,7 @@ struct anim {
/* avi */ /* avi */
struct _AviMovie *avi; struct _AviMovie *avi;
#if defined(_WIN32) && !defined(FREE_WINDOWS) #if defined(_WIN32)
/* windows avi */ /* windows avi */
int avistreams; int avistreams;
int firstvideo; int firstvideo;

View File

@@ -37,10 +37,7 @@
#include <mmsystem.h> #include <mmsystem.h>
#include <memory.h> #include <memory.h>
#include <commdlg.h> #include <commdlg.h>
#ifndef FREE_WINDOWS
#include <vfw.h> #include <vfw.h>
#endif
#undef AVIIF_KEYFRAME /* redefined in AVI_avi.h */ #undef AVIIF_KEYFRAME /* redefined in AVI_avi.h */
#undef AVIIF_LIST /* redefined in AVI_avi.h */ #undef AVIIF_LIST /* redefined in AVI_avi.h */
@@ -173,7 +170,7 @@ static void an_stringenc(char *string, const char *head, const char *tail, unsig
#ifdef WITH_AVI #ifdef WITH_AVI
static void free_anim_avi(struct anim *anim) static void free_anim_avi(struct anim *anim)
{ {
#if defined(_WIN32) && !defined(FREE_WINDOWS) #if defined(_WIN32)
int i; int i;
#endif #endif
@@ -184,7 +181,7 @@ static void free_anim_avi(struct anim *anim)
MEM_freeN(anim->avi); MEM_freeN(anim->avi);
anim->avi = NULL; anim->avi = NULL;
#if defined(_WIN32) && !defined(FREE_WINDOWS) #if defined(_WIN32)
if (anim->pgf) { if (anim->pgf) {
AVIStreamGetFrameClose(anim->pgf); AVIStreamGetFrameClose(anim->pgf);
@@ -283,7 +280,7 @@ static int startavi(struct anim *anim)
{ {
AviError avierror; AviError avierror;
#if defined(_WIN32) && !defined(FREE_WINDOWS) #if defined(_WIN32)
HRESULT hr; HRESULT hr;
int i, firstvideo = -1; int i, firstvideo = -1;
int streamcount; int streamcount;
@@ -304,7 +301,7 @@ static int startavi(struct anim *anim)
avierror = AVI_open_movie(anim->name, anim->avi); avierror = AVI_open_movie(anim->name, anim->avi);
#if defined(_WIN32) && !defined(FREE_WINDOWS) #if defined(_WIN32)
if (avierror == AVI_ERROR_COMPRESSION) { if (avierror == AVI_ERROR_COMPRESSION) {
AVIFileInit(); AVIFileInit();
hr = AVIFileOpen(&anim->pfile, anim->name, OF_READ, 0L); hr = AVIFileOpen(&anim->pfile, anim->name, OF_READ, 0L);
@@ -401,7 +398,7 @@ static ImBuf *avi_fetchibuf(struct anim *anim, int position)
return NULL; return NULL;
} }
#if defined(_WIN32) && !defined(FREE_WINDOWS) #if defined(_WIN32)
if (anim->avistreams) { if (anim->avistreams) {
LPBITMAPINFOHEADER lpbi; LPBITMAPINFOHEADER lpbi;

View File

@@ -37,7 +37,7 @@ extern "C" {
#include <stdio.h> // printf #include <stdio.h> // printf
#include <fstream> #include <fstream>
#if defined (WIN32) && !defined(FREE_WINDOWS) #if defined (WIN32)
#include "utfconv.h" #include "utfconv.h"
#endif #endif
@@ -62,7 +62,7 @@ int imb_save_dds(struct ImBuf *ibuf, const char *name, int /*flags*/)
/* open file for writing */ /* open file for writing */
std::ofstream fildes; std::ofstream fildes;
#if defined (WIN32) && !defined(FREE_WINDOWS) #if defined (WIN32)
wchar_t *wname = alloc_utf16_from_8(name, 0); wchar_t *wname = alloc_utf16_from_8(name, 0);
fildes.open(wname); fildes.open(wname);
free(wname); free(wname);

View File

@@ -31,7 +31,7 @@
#include <set> #include <set>
#if defined(WIN32) && !defined(FREE_WINDOWS) #if defined(WIN32)
#include "utfconv.h" #include "utfconv.h"
#endif #endif

View File

@@ -69,7 +69,7 @@
#include <openexr_api.h> #include <openexr_api.h>
#if defined (WIN32) && !defined(FREE_WINDOWS) #if defined (WIN32)
#include "utfconv.h" #include "utfconv.h"
#endif #endif
@@ -77,7 +77,7 @@ extern "C"
{ {
// The following prevents a linking error in debug mode for MSVC using the libs in CVS // The following prevents a linking error in debug mode for MSVC using the libs in CVS
#if defined(WITH_OPENEXR) && defined(_WIN32) && defined(DEBUG) && !defined(__MINGW32__) && _MSC_VER < 1900 #if defined(WITH_OPENEXR) && defined(_WIN32) && defined(DEBUG) && _MSC_VER < 1900
_CRTIMP void __cdecl _invalid_parameter_noinfo(void) _CRTIMP void __cdecl _invalid_parameter_noinfo(void)
{ {
} }
@@ -180,7 +180,7 @@ public:
: IStream(filename) : IStream(filename)
{ {
/* utf-8 file path support on windows */ /* utf-8 file path support on windows */
#if defined (WIN32) && !defined(FREE_WINDOWS) #if defined (WIN32)
wchar_t *wfilename = alloc_utf16_from_8(filename, 0); wchar_t *wfilename = alloc_utf16_from_8(filename, 0);
ifs.open(wfilename, std::ios_base::binary); ifs.open(wfilename, std::ios_base::binary);
free(wfilename); free(wfilename);
@@ -243,7 +243,7 @@ public:
: OStream(filename) : OStream(filename)
{ {
/* utf-8 file path support on windows */ /* utf-8 file path support on windows */
#if defined (WIN32) && !defined(FREE_WINDOWS) #if defined (WIN32)
wchar_t *wfilename = alloc_utf16_from_8(filename, 0); wchar_t *wfilename = alloc_utf16_from_8(filename, 0);
ofs.open(wfilename, std::ios_base::binary); ofs.open(wfilename, std::ios_base::binary);
free(wfilename); free(wfilename);

View File

@@ -424,10 +424,6 @@ static void rna_Object_parent_set(PointerRNA *ptr, PointerRNA value)
Object *ob = (Object *)ptr->data; Object *ob = (Object *)ptr->data;
Object *par = (Object *)value.data; Object *par = (Object *)value.data;
#ifdef FREE_WINDOWS
/* NOTE: this dummy check here prevents this method causing weird runtime errors on mingw 4.6.2 */
if (ob)
#endif
{ {
ED_object_parent(ob, par, ob->partype, ob->parsubstr); ED_object_parent(ob, par, ob->partype, ob->parsubstr);
} }

View File

@@ -124,7 +124,7 @@ static PyObject *bpy_app_handlers_persistent_new(PyTypeObject *UNUSED(type), PyO
/* dummy type because decorators can't be PyCFunctions */ /* dummy type because decorators can't be PyCFunctions */
static PyTypeObject BPyPersistent_Type = { static PyTypeObject BPyPersistent_Type = {
#if defined(_MSC_VER) || defined(FREE_WINDOWS) #if defined(_MSC_VER)
PyVarObject_HEAD_INIT(NULL, 0) PyVarObject_HEAD_INIT(NULL, 0)
#else #else
PyVarObject_HEAD_INIT(&PyType_Type, 0) PyVarObject_HEAD_INIT(&PyType_Type, 0)
@@ -204,7 +204,7 @@ PyObject *BPY_app_handlers_struct(void)
{ {
PyObject *ret; PyObject *ret;
#if defined(_MSC_VER) || defined(FREE_WINDOWS) #if defined(_MSC_VER)
BPyPersistent_Type.ob_base.ob_base.ob_type = &PyType_Type; BPyPersistent_Type.ob_base.ob_base.ob_type = &PyType_Type;
#endif #endif

View File

@@ -5692,7 +5692,7 @@ PyTypeObject pyrna_struct_meta_idprop_Type = {
NULL, /* struct PyMethodDef *tp_methods; */ NULL, /* struct PyMethodDef *tp_methods; */
NULL, /* struct PyMemberDef *tp_members; */ NULL, /* struct PyMemberDef *tp_members; */
NULL, /* struct PyGetSetDef *tp_getset; */ NULL, /* struct PyGetSetDef *tp_getset; */
#if defined(_MSC_VER) || defined(FREE_WINDOWS) #if defined(_MSC_VER)
NULL, /* defer assignment */ NULL, /* defer assignment */
#else #else
&PyType_Type, /* struct _typeobject *tp_base; */ &PyType_Type, /* struct _typeobject *tp_base; */
@@ -6267,7 +6267,7 @@ static PyTypeObject pyrna_prop_collection_iter_Type = {
NULL, /* reprfunc tp_str; */ NULL, /* reprfunc tp_str; */
/* will only use these if this is a subtype of a py class */ /* will only use these if this is a subtype of a py class */
#if defined(_MSC_VER) || defined(FREE_WINDOWS) #if defined(_MSC_VER)
NULL, /* defer assignment */ NULL, /* defer assignment */
#else #else
PyObject_GenericGetAttr, /* getattrofunc tp_getattro; */ PyObject_GenericGetAttr, /* getattrofunc tp_getattro; */
@@ -6300,7 +6300,7 @@ static PyTypeObject pyrna_prop_collection_iter_Type = {
#endif #endif
/*** Added in release 2.2 ***/ /*** Added in release 2.2 ***/
/* Iterators */ /* Iterators */
#if defined(_MSC_VER) || defined(FREE_WINDOWS) #if defined(_MSC_VER)
NULL, /* defer assignment */ NULL, /* defer assignment */
#else #else
PyObject_SelfIter, /* getiterfunc tp_iter; */ PyObject_SelfIter, /* getiterfunc tp_iter; */
@@ -6776,7 +6776,7 @@ void BPY_rna_init(void)
#endif #endif
/* for some reason MSVC complains of these */ /* for some reason MSVC complains of these */
#if defined(_MSC_VER) || defined(FREE_WINDOWS) #if defined(_MSC_VER)
pyrna_struct_meta_idprop_Type.tp_base = &PyType_Type; pyrna_struct_meta_idprop_Type.tp_base = &PyType_Type;
pyrna_prop_collection_iter_Type.tp_iter = PyObject_SelfIter; pyrna_prop_collection_iter_Type.tp_iter = PyObject_SelfIter;

View File

@@ -35,16 +35,6 @@ if(WIN32 AND NOT UNIX)
string(SUBSTRING ${BLENDER_VERSION} 0 1 bver1) string(SUBSTRING ${BLENDER_VERSION} 0 1 bver1)
string(SUBSTRING ${BLENDER_VERSION} 2 1 bver2) string(SUBSTRING ${BLENDER_VERSION} 2 1 bver2)
string(SUBSTRING ${BLENDER_VERSION} 3 1 bver3) string(SUBSTRING ${BLENDER_VERSION} 3 1 bver3)
if(MINGW)
add_definitions(
-DWINDRES
-DBLEN_VER_RC_STR_M=${BLENDER_VERSION}
-DBLEN_VER_RC_1=${bver1}
-DBLEN_VER_RC_2=${bver2}
-DBLEN_VER_RC_3=${bver3}
-DBLEN_VER_RC_4=0
)
else()
add_definitions( add_definitions(
-DBLEN_VER_RC_STR=${BLENDER_VERSION} -DBLEN_VER_RC_STR=${BLENDER_VERSION}
-DBLEN_VER_RC_1=${bver1} -DBLEN_VER_RC_1=${bver1}
@@ -52,7 +42,6 @@ if(WIN32 AND NOT UNIX)
-DBLEN_VER_RC_3=${bver3} -DBLEN_VER_RC_3=${bver3}
-DBLEN_VER_RC_4=0 -DBLEN_VER_RC_4=0
) )
endif()
add_executable( add_executable(
blenderplayer ${EXETYPE} blenderplayer ${EXETYPE}

View File

@@ -113,16 +113,6 @@ if(WIN32 AND NOT UNIX)
string(SUBSTRING ${BLENDER_VERSION} 0 1 bver1) string(SUBSTRING ${BLENDER_VERSION} 0 1 bver1)
string(SUBSTRING ${BLENDER_VERSION} 2 1 bver2) string(SUBSTRING ${BLENDER_VERSION} 2 1 bver2)
string(SUBSTRING ${BLENDER_VERSION} 3 1 bver3) string(SUBSTRING ${BLENDER_VERSION} 3 1 bver3)
if(MINGW)
add_definitions(
-DWINDRES
-DBLEN_VER_RC_STR_M=${BLENDER_VERSION}
-DBLEN_VER_RC_1=${bver1}
-DBLEN_VER_RC_2=${bver2}
-DBLEN_VER_RC_3=${bver3}
-DBLEN_VER_RC_4=0
)
else()
add_definitions( add_definitions(
-DBLEN_VER_RC_STR=${BLENDER_VERSION} -DBLEN_VER_RC_STR=${BLENDER_VERSION}
-DBLEN_VER_RC_1=${bver1} -DBLEN_VER_RC_1=${bver1}
@@ -130,7 +120,6 @@ if(WIN32 AND NOT UNIX)
-DBLEN_VER_RC_3=${bver3} -DBLEN_VER_RC_3=${bver3}
-DBLEN_VER_RC_4=0 -DBLEN_VER_RC_4=0
) )
endif()
list(APPEND SRC list(APPEND SRC
@@ -652,7 +641,6 @@ elseif(WIN32)
if(WITH_PYTHON) if(WITH_PYTHON)
string(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION}) string(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
# MinGW TODO: This bit of Python configuration diverges from MSVC
if(NOT CMAKE_COMPILER_IS_GNUCC) if(NOT CMAKE_COMPILER_IS_GNUCC)
install( install(
FILES ${LIBDIR}/python/lib/python${_PYTHON_VERSION_NO_DOTS}.dll FILES ${LIBDIR}/python/lib/python${_PYTHON_VERSION_NO_DOTS}.dll
@@ -749,20 +737,6 @@ elseif(WIN32)
DESTINATION ${BLENDER_VERSION}/python/bin DESTINATION ${BLENDER_VERSION}/python/bin
CONFIGURATIONS Debug CONFIGURATIONS Debug
) )
# MinGW needs Python DLL
if(MINGW)
install(
FILES ${LIBDIR}/python/lib/python${_PYTHON_VERSION_NO_DOTS}.dll
DESTINATION "."
CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel
)
install(
FILES ${LIBDIR}/python/lib/python${_PYTHON_VERSION_NO_DOTS}_d.dll
DESTINATION "."
CONFIGURATIONS Debug
)
endif()
endif() endif()
unset(_PYTHON_VERSION_NO_DOTS) unset(_PYTHON_VERSION_NO_DOTS)
@@ -785,46 +759,9 @@ elseif(WIN32)
FILES ${LIBDIR}/pthreads/lib/pthreadVC2.dll FILES ${LIBDIR}/pthreads/lib/pthreadVC2.dll
DESTINATION "." DESTINATION "."
) )
else()
#MinGW64 comes with own version. For portable builds it will probaly have to be copied to work
if(NOT WITH_MINGW64)
install(
FILES ${LIBDIR}/pthreads/lib/pthreadGC2.dll
DESTINATION "."
)
elseif(WITH_MINGW64)
install(
FILES
${LIBDIR}/binaries/libgcc_s_sjlj-1.dll
${LIBDIR}/binaries/libwinpthread-1.dll
${LIBDIR}/binaries/libstdc++-6.dll
DESTINATION "."
)
if(WITH_OPENMP)
install(
FILES
${LIBDIR}/binaries/libgomp-1.dll
DESTINATION "."
)
endif()
endif()
endif() endif()
if(WITH_CODEC_FFMPEG) if(WITH_CODEC_FFMPEG)
if(WITH_MINGW64)
install(
FILES
${LIBDIR}/ffmpeg/lib/avcodec-53.dll
${LIBDIR}/ffmpeg/lib/avformat-53.dll
${LIBDIR}/ffmpeg/lib/avdevice-53.dll
${LIBDIR}/ffmpeg/lib/avutil-51.dll
${LIBDIR}/ffmpeg/lib/swscale-2.dll
${LIBDIR}/ffmpeg/lib/swresample-0.dll
${LIBDIR}/ffmpeg/lib/xvidcore.dll
DESTINATION "."
)
else()
install( install(
FILES FILES
${LIBDIR}/ffmpeg/lib/avcodec-57.dll ${LIBDIR}/ffmpeg/lib/avcodec-57.dll
@@ -836,7 +773,6 @@ elseif(WIN32)
DESTINATION "." DESTINATION "."
) )
endif() endif()
endif()
if(WITH_CODEC_SNDFILE) if(WITH_CODEC_SNDFILE)
install( install(
@@ -851,30 +787,13 @@ elseif(WIN32)
${LIBDIR}/openal/lib/OpenAL32.dll ${LIBDIR}/openal/lib/OpenAL32.dll
DESTINATION "." DESTINATION "."
) )
# MinGW TODO: Need to update to a newer OpenAL version
# which does not depend on wrap_oal.dll
if(CMAKE_COMPILER_IS_GNUCC)
install(
FILES
${LIBDIR}/openal/lib/wrap_oal.dll
DESTINATION "."
)
endif()
endif() endif()
if(WITH_SDL) if(WITH_SDL)
#MinGW TODO: Update to SDL2
if(NOT CMAKE_COMPILER_IS_GNUCC)
install( install(
FILES ${LIBDIR}/sdl/lib/SDL2.dll FILES ${LIBDIR}/sdl/lib/SDL2.dll
DESTINATION "." DESTINATION "."
) )
else()
install(
FILES ${LIBDIR}/sdl/lib/SDL.dll
DESTINATION "."
)
endif()
endif() endif()
if(WITH_SYSTEM_AUDASPACE) if(WITH_SYSTEM_AUDASPACE)
@@ -901,19 +820,11 @@ elseif(WIN32)
if(WITH_OPENCOLORIO) if(WITH_OPENCOLORIO)
set(OCIOBIN ${LIBDIR}/opencolorio/bin) set(OCIOBIN ${LIBDIR}/opencolorio/bin)
if(NOT MINGW)
install( install(
FILES FILES
${OCIOBIN}/OpenColorIO.dll ${OCIOBIN}/OpenColorIO.dll
DESTINATION "." DESTINATION "."
) )
else()
install(
FILES
${OCIOBIN}/libOpenColorIO.dll
DESTINATION "."
)
endif()
endif() endif()
elseif(APPLE) elseif(APPLE)

View File

@@ -40,10 +40,8 @@ CHashedPtr::CHashedPtr(void* val) : m_valptr(val)
unsigned int CHashedPtr::hash() const unsigned int CHashedPtr::hash() const
{ {
#if defined(_WIN64) && !defined(FREE_WINDOWS64) #if defined(_WIN64)
unsigned __int64 key = (unsigned __int64)m_valptr; unsigned __int64 key = (unsigned __int64)m_valptr;
#elif defined(FREE_WINDOWS64)
unsigned long long key = (unsigned long long)m_valptr;
#else #else
unsigned long key = (unsigned long)m_valptr; unsigned long key = (unsigned long)m_valptr;
#endif #endif

View File

@@ -37,7 +37,7 @@
// cool things like (IF(LOD==1,CCurvedValue,IF(LOD==2,CCurvedValue2)) etc... // cool things like (IF(LOD==1,CCurvedValue,IF(LOD==2,CCurvedValue2)) etc...
#include "EXP_IfExpr.h" #include "EXP_IfExpr.h"
#if (defined(WIN32) || defined(WIN64)) && !defined(FREE_WINDOWS) #if defined(WIN32) || defined(WIN64)
#define strcasecmp _stricmp #define strcasecmp _stricmp
#ifndef strtoll #ifndef strtoll

View File

@@ -31,10 +31,8 @@
*/ */
#if defined(_WIN64) && !defined(FREE_WINDOWS64) #if defined(_WIN64)
typedef unsigned __int64 uint_ptr; typedef unsigned __int64 uint_ptr;
#elif defined(FREE_WINDOWS64)
typedef unsigned long long uint_ptr;
#else #else
typedef unsigned long uint_ptr; typedef unsigned long uint_ptr;
#endif #endif

View File

@@ -80,12 +80,6 @@
#define DEFAULT_LOGIC_TIC_RATE 60.0 #define DEFAULT_LOGIC_TIC_RATE 60.0
//#define DEFAULT_PHYSICS_TIC_RATE 60.0 //#define DEFAULT_PHYSICS_TIC_RATE 60.0
#ifdef FREE_WINDOWS /* XXX mingw64 (gcc 4.7.0) defines a macro for DrawText that translates to DrawTextA. Not good */
#ifdef DrawText
#undef DrawText
#endif
#endif
const char KX_KetsjiEngine::m_profileLabels[tc_numCategories][15] = { const char KX_KetsjiEngine::m_profileLabels[tc_numCategories][15] = {
"Physics:", // tc_physics "Physics:", // tc_physics
"Logic:", // tc_logic "Logic:", // tc_logic

View File

@@ -43,7 +43,7 @@ extern "C" {
#include "Exception.h" #include "Exception.h"
#if (defined(WIN32) || defined(WIN64)) && !defined(FREE_WINDOWS) #if (defined(WIN32) || defined(WIN64))
#define strcasecmp _stricmp #define strcasecmp _stricmp
#endif #endif

View File

@@ -107,6 +107,13 @@ add_test(split_faces ${TEST_BLENDER_EXE}
--python-text run_tests --python-text run_tests
) )
# ------------------------------------------------------------------------------
# MODIFIERS TESTS
add_test(modifier_array ${TEST_BLENDER_EXE}
${TEST_SRC_DIR}/modifier_stack/array_test.blend
--python-text run_tests
)
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# IO TESTS # IO TESTS