[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50627] trunk/blender: Color Management, Stage 1: Initial OpenColorIO library integration

Sergey Sharybin sergey.vfx at gmail.com
Sat Sep 15 12:03:18 CEST 2012


Revision: 50627
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50627
Author:   nazgul
Date:     2012-09-15 10:03:17 +0000 (Sat, 15 Sep 2012)
Log Message:
-----------
Color Management, Stage 1: Initial OpenColorIO library integration

This commit integrates support of OpenColorIO library into build systems.

It also contains C-API for OpenColorIO library which could be used by Blender.

CMake has got find rules familiar to OpenImageIO's one which makes it easier
for build system to find needed libraries and includes. Scons only could use
explicitly defined paths to libraries and includes.

C-API would be compiled and Blender would be linked against C-API and OpenColorIO
but it wouldn't affect on Blender behavior at all.

OpenColorIO could be disabled by setting up WITH_OCIO to Off in CMake and
setting WITH_BF_OCIO in Scons.

Modified Paths:
--------------
    trunk/blender/CMakeLists.txt
    trunk/blender/SConstruct
    trunk/blender/build_files/cmake/macros.cmake
    trunk/blender/build_files/scons/config/darwin-config.py
    trunk/blender/build_files/scons/config/linux-config.py
    trunk/blender/build_files/scons/config/win32-mingw-config.py
    trunk/blender/build_files/scons/config/win32-vc-config.py
    trunk/blender/build_files/scons/config/win64-mingw-config.py
    trunk/blender/build_files/scons/config/win64-vc-config.py
    trunk/blender/build_files/scons/tools/Blender.py
    trunk/blender/build_files/scons/tools/btools.py
    trunk/blender/intern/CMakeLists.txt
    trunk/blender/intern/SConscript

Added Paths:
-----------
    trunk/blender/build_files/cmake/Modules/FindOpenColorIO.cmake
    trunk/blender/intern/opencolorio/
    trunk/blender/intern/opencolorio/CMakeLists.txt
    trunk/blender/intern/opencolorio/SConscript
    trunk/blender/intern/opencolorio/ocio_capi.cpp
    trunk/blender/intern/opencolorio/ocio_capi.h
    trunk/blender/intern/opencolorio/ocio_capi_stub.cpp
    trunk/blender/release/datafiles/colormanagement/
    trunk/blender/release/datafiles/colormanagement/config.ocio
    trunk/blender/release/datafiles/colormanagement/luts/
    trunk/blender/release/datafiles/colormanagement/luts/aces_to_xyz.spimtx
    trunk/blender/release/datafiles/colormanagement/luts/adx_adx10_to_cdd.spimtx
    trunk/blender/release/datafiles/colormanagement/luts/adx_cdd_to_cid.spimtx
    trunk/blender/release/datafiles/colormanagement/luts/adx_cid_to_rle.spi1d
    trunk/blender/release/datafiles/colormanagement/luts/adx_exp_to_aces.spimtx
    trunk/blender/release/datafiles/colormanagement/luts/colorworks_filmlg_to_p3.3dl
    trunk/blender/release/datafiles/colormanagement/luts/dci_xyz.spi1d
    trunk/blender/release/datafiles/colormanagement/luts/lg10.spi1d
    trunk/blender/release/datafiles/colormanagement/luts/rec709.spi1d
    trunk/blender/release/datafiles/colormanagement/luts/rec709_to_aces.spimtx
    trunk/blender/release/datafiles/colormanagement/luts/rrt_ut33_dcdm.spi3d
    trunk/blender/release/datafiles/colormanagement/luts/rrt_ut33_p3dci.spi3d
    trunk/blender/release/datafiles/colormanagement/luts/rrt_ut33_rec709.spi3d
    trunk/blender/release/datafiles/colormanagement/luts/rrt_ut33_sRGB.spi3d
    trunk/blender/release/datafiles/colormanagement/luts/spi_ocio_srgb_test.spi3d
    trunk/blender/release/datafiles/colormanagement/luts/srgb.spi1d
    trunk/blender/release/datafiles/colormanagement/luts/srgb_to_xyz.spimtx
    trunk/blender/release/datafiles/colormanagement/luts/vd16.spi1d

Modified: trunk/blender/CMakeLists.txt
===================================================================
--- trunk/blender/CMakeLists.txt	2012-09-15 08:35:26 UTC (rev 50626)
+++ trunk/blender/CMakeLists.txt	2012-09-15 10:03:17 UTC (rev 50627)
@@ -131,6 +131,7 @@
 option(WITH_BULLET        "Enable Bullet (Physics Engine)" ON)
 option(WITH_GAMEENGINE    "Enable Game Engine" ON)
 option(WITH_PLAYER        "Build Player" OFF)
+option(WITH_OPENCOLORIO   "Enable OpenColorIO color management" ON)
 option(WITH_COMPOSITOR    "Enable the tile based nodal compositor" ON)
 option(WITH_COMPOSITOR_LEGACY "Enable legacy compositor" OFF)
 
@@ -672,6 +673,24 @@
 		endif()
 	endif()
 
+	if(WITH_OPENCOLORIO)
+		# use lib dir if available and nothing else specified
+		if(LIBDIR AND NOT OPENCOLORIO_ROOT_DIR)
+			set(OPENCOLORIO_ROOT_DIR ${LIBDIR}/ocio)
+		endif()
+
+		find_package(OpenColorIO)
+
+		set(OPENCOLORIO_LIBRARIES ${OPENCOLORIO_LIBRARIES})
+		set(OPENCOLORIO_LIBPATH)  # TODO, remove and reference the absolute path everywhere
+		set(OPENCOLORIO_DEFINITIONS)
+
+		if(NOT OPENCOLORIO_FOUND)
+			set(WITH_OPENCOLORIO OFF)
+			message(STATUS "OpenColorIO not found")
+		endif()
+	endif()
+
 	if(WITH_CYCLES_OSL)
 		set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
 	
@@ -1065,6 +1084,14 @@
 			set(OPENIMAGEIO_DEFINITIONS)
 		endif()
 
+		if(WITH_OPENCOLORIO)
+			set(OPENCOLORIO ${LIBDIR}/opencolorio)
+			set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
+			set(OPENCOLORIO_LIBRARIES OpenColorIO)
+			set_lib_path(OPENCOLORIO_LIBPATH "opencolorio/lib")
+			set(OPENCOLORIO_DEFINITIONS)
+		endif()
+
 		set(PLATFORM_LINKFLAGS "/SUBSYSTEM:CONSOLE /STACK:2097152 /INCREMENTAL:NO /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:msvcmrt.lib /NODEFAULTLIB:msvcurt.lib /NODEFAULTLIB:msvcrtd.lib")
 
 		# MSVC only, Mingw doesnt need
@@ -1236,6 +1263,14 @@
 			set(OPENIMAGEIO_DEFINITIONS)
 		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()
+
 		set(PLATFORM_LINKFLAGS "-Xlinker --stack=2097152")
 
 		## DISABLE - causes linking errors 
@@ -1482,6 +1517,14 @@
 		set(OPENIMAGEIO_DEFINITIONS "-DOIIO_STATIC_BUILD")
 	endif()
 
+	if(WITH_OPENCOLORIO)
+		set(OPENCOLORIO ${LIBDIR}/opencolorio)
+		set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
+		set(OPENCOLORIO_LIBRARIES OpenColorIO tinyxml yaml-cpp)
+		set(OPENCOLORIO_LIBPATH ${OPENCOLORIO}/lib)
+		set(OPENCOLORIO_DEFINITIONS "-DOCIO_STATIC_BUILD")
+	endif()
+
 	if(WITH_CYCLES_OSL)
 		set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
 	
@@ -1885,6 +1928,7 @@
 	info_cfg_option(WITH_INTERNATIONAL)
 	info_cfg_option(WITH_INPUT_NDOF)
 	info_cfg_option(WITH_CYCLES)
+	info_cfg_option(WITH_OPENCOLORIO)
 
 	info_cfg_text("Compiler Options:")
 	info_cfg_option(WITH_BUILDINFO)

Modified: trunk/blender/SConstruct
===================================================================
--- trunk/blender/SConstruct	2012-09-15 08:35:26 UTC (rev 50626)
+++ trunk/blender/SConstruct	2012-09-15 10:03:17 UTC (rev 50627)
@@ -719,6 +719,26 @@
                     cubin_file = os.path.join(kernel_build_dir, "kernel_%s.cubin" % arch)
                     scriptinstall.append(env.Install(dir=dir,source=cubin_file))
 
+    if env['WITH_BF_OCIO']:
+        colormanagement = os.path.join('release', 'datafiles', 'colormanagement')
+
+        for dp, dn, df in os.walk(colormanagement):
+            if '.svn' in dn:
+                dn.remove('.svn')
+            if '_svn' in dn:
+                dn.remove('_svn')
+
+            dir = os.path.join(env['BF_INSTALLDIR'], VERSION, 'datafiles')
+            dir += os.sep + os.path.basename(colormanagement) + dp[len(colormanagement):]
+
+            source = [os.path.join(dp, f) for f in df if not f.endswith(".pyc")]
+
+            # To ensure empty dirs are created too
+            if len(source) == 0:
+                env.Execute(Mkdir(dir))
+
+            scriptinstall.append(env.Install(dir=dir,source=source))
+
     if env['WITH_BF_INTERNATIONAL']:
         internationalpaths=['release' + os.sep + 'datafiles']
 
@@ -851,6 +871,9 @@
     if env['WITH_BF_OIIO'] and env['OURPLATFORM'] != 'win32-mingw':
         dllsources.append('${LCGDIR}/openimageio/bin/OpenImageIO.dll')
 
+    if env['WITH_BF_OCIO'] and env['OURPLATFORM'] != 'win32-mingw':
+        dllsources.append('${LCGDIR}/opencolorio/bin/OpenColorIO.dll')
+
     dllsources.append('#source/icons/blender.exe.manifest')
 
     windlls = env.Install(dir=env['BF_INSTALLDIR'], source = dllsources)

Added: trunk/blender/build_files/cmake/Modules/FindOpenColorIO.cmake
===================================================================
--- trunk/blender/build_files/cmake/Modules/FindOpenColorIO.cmake	                        (rev 0)
+++ trunk/blender/build_files/cmake/Modules/FindOpenColorIO.cmake	2012-09-15 10:03:17 UTC (rev 50627)
@@ -0,0 +1,85 @@
+# - Find OpenColorIO library
+# Find the native OpenColorIO includes and library
+# This module defines
+#  OPENCOLORIO_INCLUDE_DIRS, where to find OpenColorIO.h, Set when
+#                            OPENCOLORIO_INCLUDE_DIR is found.
+#  OPENCOLORIO_LIBRARIES, libraries to link against to use OpenColorIO.
+#  OPENCOLORIO_ROOT_DIR, The base directory to search for OpenColorIO.
+#                        This can also be an environment variable.
+#  OPENCOLORIO_FOUND, If false, do not try to use OpenColorIO.
+#
+# also defined, but not for general use are
+#  OPENCOLORIO_LIBRARY, where to find the OpenColorIO library.
+
+#=============================================================================
+# Copyright 2012 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 OPENCOLORIO_ROOT_DIR was defined in the environment, use it.
+IF(NOT OPENCOLORIO_ROOT_DIR AND NOT $ENV{OPENCOLORIO_ROOT_DIR} STREQUAL "")
+  SET(OPENCOLORIO_ROOT_DIR $ENV{OPENCOLORIO_ROOT_DIR})
+ENDIF()
+
+SET(_opencolorio_FIND_COMPONENTS
+  OpenColorIO
+  yaml-cpp
+  tinyxml
+)
+
+SET(_opencolorio_SEARCH_DIRS
+  ${OPENCOLORIO_ROOT_DIR}
+  /usr/local
+  /sw # Fink
+  /opt/local # DarwinPorts
+  /opt/csw # Blastwave
+)
+
+FIND_PATH(OPENCOLORIO_INCLUDE_DIR
+  NAMES
+    OpenColorIO/OpenColorIO.h
+  HINTS
+    ${_opencolorio_SEARCH_DIRS}
+  PATH_SUFFIXES
+    include
+)
+
+SET(_opencolorio_LIBRARIES)
+FOREACH(COMPONENT ${_opencolorio_FIND_COMPONENTS})
+  STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT)
+
+  FIND_LIBRARY(OPENCOLORIO_${UPPERCOMPONENT}_LIBRARY
+    NAMES
+      ${COMPONENT}
+    HINTS
+      ${_opencolorio_SEARCH_DIRS}
+    PATH_SUFFIXES
+      lib64 lib
+    )
+  if(OPENCOLORIO_${UPPERCOMPONENT}_LIBRARY)
+    LIST(APPEND _opencolorio_LIBRARIES "${OPENCOLORIO_${UPPERCOMPONENT}_LIBRARY}")
+  endif()
+ENDFOREACH()
+
+# handle the QUIETLY and REQUIRED arguments and set OPENCOLORIO_FOUND to TRUE if 
+# all listed variables are TRUE
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenColorIO DEFAULT_MSG
+    _opencolorio_LIBRARIES OPENCOLORIO_INCLUDE_DIR)
+
+IF(OPENCOLORIO_FOUND)
+  SET(OPENCOLORIO_LIBRARIES ${_opencolorio_LIBRARIES})
+  SET(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO_INCLUDE_DIR})
+ENDIF(OPENCOLORIO_FOUND)
+
+MARK_AS_ADVANCED(
+  OPENCOLORIO_INCLUDE_DIR
+  OPENCOLORIO_LIBRARY
+)
+

Modified: trunk/blender/build_files/cmake/macros.cmake
===================================================================
--- trunk/blender/build_files/cmake/macros.cmake	2012-09-15 08:35:26 UTC (rev 50626)
+++ trunk/blender/build_files/cmake/macros.cmake	2012-09-15 10:03:17 UTC (rev 50627)
@@ -218,6 +218,9 @@
 	if(WITH_OPENIMAGEIO)
 		link_directories(${OPENIMAGEIO_LIBPATH})
 	endif()
+	if(WITH_OPENCOLORIO)
+		link_directories(${OPENCOLORIO_LIBPATH})
+	endif()
 	if(WITH_IMAGE_OPENJPEG AND WITH_SYSTEM_OPENJPEG)
 		link_directories(${OPENJPEG_LIBPATH})
 	endif()
@@ -313,6 +316,9 @@
 	if(WITH_OPENIMAGEIO)
 		target_link_libraries(${target} ${OPENIMAGEIO_LIBRARIES})
 	endif()
+	if(WITH_OPENCOLORIO)
+		target_link_libraries(${target} ${OPENCOLORIO_LIBRARIES})
+	endif()
 	if(WITH_BOOST)
 		target_link_libraries(${target} ${BOOST_LIBRARIES})
 	endif()

Modified: trunk/blender/build_files/scons/config/darwin-config.py
===================================================================
--- trunk/blender/build_files/scons/config/darwin-config.py	2012-09-15 08:35:26 UTC (rev 50626)
+++ trunk/blender/build_files/scons/config/darwin-config.py	2012-09-15 10:03:17 UTC (rev 50627)
@@ -287,6 +287,12 @@
 BF_OIIO_LIB = 'OpenImageIO'
 BF_OIIO_LIBPATH = BF_OIIO + '/lib'
 
+WITH_BF_OCIO = True
+BF_OCIO = LIBDIR + '/opencolorio'
+BF_OCIO_INC = BF_OCIO + '/include'
+BF_OCIO_LIB = 'OpenColorIO tinyxml yaml-cpp'
+BF_OCIO_LIBPATH = BF_OCIO + '/lib'
+
 WITH_BF_BOOST = True
 BF_BOOST = LIBDIR + '/boost'
 BF_BOOST_INC = BF_BOOST + '/include'

Modified: trunk/blender/build_files/scons/config/linux-config.py
===================================================================
--- trunk/blender/build_files/scons/config/linux-config.py	2012-09-15 08:35:26 UTC (rev 50626)
+++ trunk/blender/build_files/scons/config/linux-config.py	2012-09-15 10:03:17 UTC (rev 50627)
@@ -215,6 +215,16 @@
 BF_OIIO_LIB = 'OpenImageIO'
 BF_OIIO_LIBPATH = BF_OIIO + '/lib'
 
+WITH_BF_OCIO = True
+WITH_BF_STATICOCIO = False
+BF_OCIO = LIBDIR + '/ocio'
+if not os.path.exists(LCGDIR + '/ocio'):
+    WITH_BF_OCIO = False
+    BF_OCIO = '/usr'
+BF_OCIO_INC = BF_OCIO + '/include'
+BF_OCIO_LIB = 'OpenColorIO yaml-cpp tinyxml'
+BF_OCIO_LIBPATH = BF_OCIO + '/lib'
+
 WITH_BF_BOOST = True
 WITH_BF_STATICBOOST = False
 BF_BOOST = LIBDIR + '/boost'

Modified: trunk/blender/build_files/scons/config/win32-mingw-config.py
===================================================================
--- trunk/blender/build_files/scons/config/win32-mingw-config.py	2012-09-15 08:35:26 UTC (rev 50626)
+++ trunk/blender/build_files/scons/config/win32-mingw-config.py	2012-09-15 10:03:17 UTC (rev 50627)
@@ -159,6 +159,12 @@
 BF_OIIO_LIB = 'OpenImageIO'

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list