From 576adb434d0c663cda03e2a232dcacedd1894025 Mon Sep 17 00:00:00 2001 From: Vadim Pisarevsky Date: Sun, 4 Jul 2010 12:32:31 +0000 Subject: [PATCH] removed embedded (obsolete) OpenEXR files; repaired OpenEXR bindings --- 3rdparty/include/OpenEXR/Iex.h | 60 - 3rdparty/include/OpenEXR/IexBaseExc.h | 266 -- 3rdparty/include/OpenEXR/IexErrnoExc.h | 210 -- 3rdparty/include/OpenEXR/IexMacros.h | 148 - 3rdparty/include/OpenEXR/IexMathExc.h | 58 - 3rdparty/include/OpenEXR/IexThrowErrnoExc.h | 96 - 3rdparty/include/OpenEXR/IlmThread.h | 141 - 3rdparty/include/OpenEXR/IlmThreadMutex.h | 158 - 3rdparty/include/OpenEXR/IlmThreadPool.h | 156 - 3rdparty/include/OpenEXR/IlmThreadSemaphore.h | 109 - 3rdparty/include/OpenEXR/ImathBox.h | 277 -- 3rdparty/include/OpenEXR/ImathBoxAlgo.h | 611 ---- 3rdparty/include/OpenEXR/ImathColor.h | 734 ---- 3rdparty/include/OpenEXR/ImathColorAlgo.h | 256 -- 3rdparty/include/OpenEXR/ImathEuler.h | 903 ----- 3rdparty/include/OpenEXR/ImathExc.h | 70 - 3rdparty/include/OpenEXR/ImathFrame.h | 190 - 3rdparty/include/OpenEXR/ImathFrustum.h | 697 ---- 3rdparty/include/OpenEXR/ImathFun.h | 272 -- 3rdparty/include/OpenEXR/ImathGL.h | 159 - 3rdparty/include/OpenEXR/ImathGLU.h | 54 - 3rdparty/include/OpenEXR/ImathHalfLimits.h | 66 - 3rdparty/include/OpenEXR/ImathInterval.h | 224 -- 3rdparty/include/OpenEXR/ImathLimits.h | 265 -- 3rdparty/include/OpenEXR/ImathLine.h | 184 - 3rdparty/include/OpenEXR/ImathLineAlgo.h | 333 -- 3rdparty/include/OpenEXR/ImathMath.h | 191 - 3rdparty/include/OpenEXR/ImathMatrix.h | 3249 ----------------- 3rdparty/include/OpenEXR/ImathMatrixAlgo.h | 1114 ------ 3rdparty/include/OpenEXR/ImathPlane.h | 256 -- 3rdparty/include/OpenEXR/ImathPlatform.h | 92 - 3rdparty/include/OpenEXR/ImathQuat.h | 690 ---- 3rdparty/include/OpenEXR/ImathRandom.h | 461 --- 3rdparty/include/OpenEXR/ImathRoots.h | 217 -- 3rdparty/include/OpenEXR/ImathShear.h | 659 ---- 3rdparty/include/OpenEXR/ImathSphere.h | 177 - 3rdparty/include/OpenEXR/ImathVec.h | 1426 -------- 3rdparty/include/OpenEXR/ImathVecAlgo.h | 146 - 3rdparty/include/OpenEXR/ImfArray.h | 261 -- 3rdparty/include/OpenEXR/ImfAttribute.h | 422 --- 3rdparty/include/OpenEXR/ImfBoxAttribute.h | 73 - 3rdparty/include/OpenEXR/ImfCRgbaFile.h | 465 --- 3rdparty/include/OpenEXR/ImfChannelList.h | 392 -- .../include/OpenEXR/ImfChannelListAttribute.h | 67 - 3rdparty/include/OpenEXR/ImfChromaticities.h | 127 - .../OpenEXR/ImfChromaticitiesAttribute.h | 72 - 3rdparty/include/OpenEXR/ImfCompression.h | 64 - .../include/OpenEXR/ImfCompressionAttribute.h | 66 - 3rdparty/include/OpenEXR/ImfConvert.h | 104 - 3rdparty/include/OpenEXR/ImfDoubleAttribute.h | 63 - 3rdparty/include/OpenEXR/ImfEnvmap.h | 322 -- 3rdparty/include/OpenEXR/ImfEnvmapAttribute.h | 65 - 3rdparty/include/OpenEXR/ImfFloatAttribute.h | 63 - 3rdparty/include/OpenEXR/ImfFrameBuffer.h | 368 -- 3rdparty/include/OpenEXR/ImfHeader.h | 557 --- 3rdparty/include/OpenEXR/ImfHuf.h | 79 - 3rdparty/include/OpenEXR/ImfIO.h | 252 -- 3rdparty/include/OpenEXR/ImfInputFile.h | 209 -- 3rdparty/include/OpenEXR/ImfInt64.h | 61 - 3rdparty/include/OpenEXR/ImfIntAttribute.h | 63 - 3rdparty/include/OpenEXR/ImfKeyCode.h | 161 - .../include/OpenEXR/ImfKeyCodeAttribute.h | 72 - 3rdparty/include/OpenEXR/ImfLineOrder.h | 64 - .../include/OpenEXR/ImfLineOrderAttribute.h | 66 - 3rdparty/include/OpenEXR/ImfLut.h | 185 - 3rdparty/include/OpenEXR/ImfMatrixAttribute.h | 73 - 3rdparty/include/OpenEXR/ImfName.h | 146 - 3rdparty/include/OpenEXR/ImfOpaqueAttribute.h | 114 - 3rdparty/include/OpenEXR/ImfOutputFile.h | 241 -- 3rdparty/include/OpenEXR/ImfPixelType.h | 61 - 3rdparty/include/OpenEXR/ImfPreviewImage.h | 131 - .../OpenEXR/ImfPreviewImageAttribute.h | 71 - 3rdparty/include/OpenEXR/ImfRgba.h | 104 - 3rdparty/include/OpenEXR/ImfRgbaFile.h | 315 -- 3rdparty/include/OpenEXR/ImfRgbaYca.h | 248 -- .../include/OpenEXR/ImfStandardAttributes.h | 251 -- 3rdparty/include/OpenEXR/ImfStdIO.h | 156 - 3rdparty/include/OpenEXR/ImfStringAttribute.h | 66 - 3rdparty/include/OpenEXR/ImfTestFile.h | 63 - 3rdparty/include/OpenEXR/ImfThreading.h | 92 - 3rdparty/include/OpenEXR/ImfTileDescription.h | 102 - .../OpenEXR/ImfTileDescriptionAttribute.h | 73 - 3rdparty/include/OpenEXR/ImfTiledInputFile.h | 381 -- 3rdparty/include/OpenEXR/ImfTiledOutputFile.h | 475 --- 3rdparty/include/OpenEXR/ImfTiledRgbaFile.h | 453 --- 3rdparty/include/OpenEXR/ImfTimeCode.h | 226 -- .../include/OpenEXR/ImfTimeCodeAttribute.h | 72 - 3rdparty/include/OpenEXR/ImfVecAttribute.h | 87 - 3rdparty/include/OpenEXR/ImfVersion.h | 117 - 3rdparty/include/OpenEXR/ImfWav.h | 70 - 3rdparty/include/OpenEXR/ImfXdr.h | 916 ----- 3rdparty/include/OpenEXR/OpenEXRConfig.h | 43 - 3rdparty/include/OpenEXR/half.h | 775 ---- 3rdparty/include/OpenEXR/halfFunction.h | 159 - 3rdparty/include/OpenEXR/halfLimits.h | 102 - 3rdparty/lib/Half.lib | Bin 286030 -> 0 bytes 3rdparty/lib/Iex.lib | Bin 196714 -> 0 bytes 3rdparty/lib/IlmImf.lib | Bin 4125458 -> 0 bytes 3rdparty/lib/IlmThread.lib | Bin 194800 -> 0 bytes 3rdparty/lib/Imath.lib | Bin 81160 -> 0 bytes CMakeLists.txt | 11 + OpenCVFindOpenEXR.cmake | 77 + OpenCVFindTBB.cmake | 191 - modules/highgui/CMakeLists.txt | 7 +- modules/highgui/src/grfmt_exr.cpp | 76 +- modules/highgui/src/grfmt_exr.hpp | 8 +- modules/highgui/src/loadsave.cpp | 2 +- modules/highgui/src/precomp.hpp | 2 +- 108 files changed, 145 insertions(+), 26550 deletions(-) delete mode 100644 3rdparty/include/OpenEXR/Iex.h delete mode 100644 3rdparty/include/OpenEXR/IexBaseExc.h delete mode 100644 3rdparty/include/OpenEXR/IexErrnoExc.h delete mode 100644 3rdparty/include/OpenEXR/IexMacros.h delete mode 100644 3rdparty/include/OpenEXR/IexMathExc.h delete mode 100644 3rdparty/include/OpenEXR/IexThrowErrnoExc.h delete mode 100644 3rdparty/include/OpenEXR/IlmThread.h delete mode 100644 3rdparty/include/OpenEXR/IlmThreadMutex.h delete mode 100644 3rdparty/include/OpenEXR/IlmThreadPool.h delete mode 100644 3rdparty/include/OpenEXR/IlmThreadSemaphore.h delete mode 100644 3rdparty/include/OpenEXR/ImathBox.h delete mode 100644 3rdparty/include/OpenEXR/ImathBoxAlgo.h delete mode 100644 3rdparty/include/OpenEXR/ImathColor.h delete mode 100644 3rdparty/include/OpenEXR/ImathColorAlgo.h delete mode 100644 3rdparty/include/OpenEXR/ImathEuler.h delete mode 100644 3rdparty/include/OpenEXR/ImathExc.h delete mode 100644 3rdparty/include/OpenEXR/ImathFrame.h delete mode 100644 3rdparty/include/OpenEXR/ImathFrustum.h delete mode 100644 3rdparty/include/OpenEXR/ImathFun.h delete mode 100644 3rdparty/include/OpenEXR/ImathGL.h delete mode 100644 3rdparty/include/OpenEXR/ImathGLU.h delete mode 100644 3rdparty/include/OpenEXR/ImathHalfLimits.h delete mode 100644 3rdparty/include/OpenEXR/ImathInterval.h delete mode 100644 3rdparty/include/OpenEXR/ImathLimits.h delete mode 100644 3rdparty/include/OpenEXR/ImathLine.h delete mode 100644 3rdparty/include/OpenEXR/ImathLineAlgo.h delete mode 100644 3rdparty/include/OpenEXR/ImathMath.h delete mode 100644 3rdparty/include/OpenEXR/ImathMatrix.h delete mode 100644 3rdparty/include/OpenEXR/ImathMatrixAlgo.h delete mode 100644 3rdparty/include/OpenEXR/ImathPlane.h delete mode 100644 3rdparty/include/OpenEXR/ImathPlatform.h delete mode 100644 3rdparty/include/OpenEXR/ImathQuat.h delete mode 100644 3rdparty/include/OpenEXR/ImathRandom.h delete mode 100644 3rdparty/include/OpenEXR/ImathRoots.h delete mode 100644 3rdparty/include/OpenEXR/ImathShear.h delete mode 100644 3rdparty/include/OpenEXR/ImathSphere.h delete mode 100644 3rdparty/include/OpenEXR/ImathVec.h delete mode 100644 3rdparty/include/OpenEXR/ImathVecAlgo.h delete mode 100644 3rdparty/include/OpenEXR/ImfArray.h delete mode 100644 3rdparty/include/OpenEXR/ImfAttribute.h delete mode 100644 3rdparty/include/OpenEXR/ImfBoxAttribute.h delete mode 100644 3rdparty/include/OpenEXR/ImfCRgbaFile.h delete mode 100644 3rdparty/include/OpenEXR/ImfChannelList.h delete mode 100644 3rdparty/include/OpenEXR/ImfChannelListAttribute.h delete mode 100644 3rdparty/include/OpenEXR/ImfChromaticities.h delete mode 100644 3rdparty/include/OpenEXR/ImfChromaticitiesAttribute.h delete mode 100644 3rdparty/include/OpenEXR/ImfCompression.h delete mode 100644 3rdparty/include/OpenEXR/ImfCompressionAttribute.h delete mode 100644 3rdparty/include/OpenEXR/ImfConvert.h delete mode 100644 3rdparty/include/OpenEXR/ImfDoubleAttribute.h delete mode 100644 3rdparty/include/OpenEXR/ImfEnvmap.h delete mode 100644 3rdparty/include/OpenEXR/ImfEnvmapAttribute.h delete mode 100644 3rdparty/include/OpenEXR/ImfFloatAttribute.h delete mode 100644 3rdparty/include/OpenEXR/ImfFrameBuffer.h delete mode 100644 3rdparty/include/OpenEXR/ImfHeader.h delete mode 100644 3rdparty/include/OpenEXR/ImfHuf.h delete mode 100644 3rdparty/include/OpenEXR/ImfIO.h delete mode 100644 3rdparty/include/OpenEXR/ImfInputFile.h delete mode 100644 3rdparty/include/OpenEXR/ImfInt64.h delete mode 100644 3rdparty/include/OpenEXR/ImfIntAttribute.h delete mode 100644 3rdparty/include/OpenEXR/ImfKeyCode.h delete mode 100644 3rdparty/include/OpenEXR/ImfKeyCodeAttribute.h delete mode 100644 3rdparty/include/OpenEXR/ImfLineOrder.h delete mode 100644 3rdparty/include/OpenEXR/ImfLineOrderAttribute.h delete mode 100644 3rdparty/include/OpenEXR/ImfLut.h delete mode 100644 3rdparty/include/OpenEXR/ImfMatrixAttribute.h delete mode 100644 3rdparty/include/OpenEXR/ImfName.h delete mode 100644 3rdparty/include/OpenEXR/ImfOpaqueAttribute.h delete mode 100644 3rdparty/include/OpenEXR/ImfOutputFile.h delete mode 100644 3rdparty/include/OpenEXR/ImfPixelType.h delete mode 100644 3rdparty/include/OpenEXR/ImfPreviewImage.h delete mode 100644 3rdparty/include/OpenEXR/ImfPreviewImageAttribute.h delete mode 100644 3rdparty/include/OpenEXR/ImfRgba.h delete mode 100644 3rdparty/include/OpenEXR/ImfRgbaFile.h delete mode 100644 3rdparty/include/OpenEXR/ImfRgbaYca.h delete mode 100644 3rdparty/include/OpenEXR/ImfStandardAttributes.h delete mode 100644 3rdparty/include/OpenEXR/ImfStdIO.h delete mode 100644 3rdparty/include/OpenEXR/ImfStringAttribute.h delete mode 100644 3rdparty/include/OpenEXR/ImfTestFile.h delete mode 100644 3rdparty/include/OpenEXR/ImfThreading.h delete mode 100644 3rdparty/include/OpenEXR/ImfTileDescription.h delete mode 100644 3rdparty/include/OpenEXR/ImfTileDescriptionAttribute.h delete mode 100644 3rdparty/include/OpenEXR/ImfTiledInputFile.h delete mode 100644 3rdparty/include/OpenEXR/ImfTiledOutputFile.h delete mode 100644 3rdparty/include/OpenEXR/ImfTiledRgbaFile.h delete mode 100644 3rdparty/include/OpenEXR/ImfTimeCode.h delete mode 100644 3rdparty/include/OpenEXR/ImfTimeCodeAttribute.h delete mode 100644 3rdparty/include/OpenEXR/ImfVecAttribute.h delete mode 100644 3rdparty/include/OpenEXR/ImfVersion.h delete mode 100644 3rdparty/include/OpenEXR/ImfWav.h delete mode 100644 3rdparty/include/OpenEXR/ImfXdr.h delete mode 100644 3rdparty/include/OpenEXR/OpenEXRConfig.h delete mode 100644 3rdparty/include/OpenEXR/half.h delete mode 100644 3rdparty/include/OpenEXR/halfFunction.h delete mode 100644 3rdparty/include/OpenEXR/halfLimits.h delete mode 100644 3rdparty/lib/Half.lib delete mode 100644 3rdparty/lib/Iex.lib delete mode 100644 3rdparty/lib/IlmImf.lib delete mode 100644 3rdparty/lib/IlmThread.lib delete mode 100644 3rdparty/lib/Imath.lib create mode 100644 OpenCVFindOpenEXR.cmake delete mode 100644 OpenCVFindTBB.cmake diff --git a/3rdparty/include/OpenEXR/Iex.h b/3rdparty/include/OpenEXR/Iex.h deleted file mode 100644 index a0fd31d01..000000000 --- a/3rdparty/include/OpenEXR/Iex.h +++ /dev/null @@ -1,60 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IEX_H -#define INCLUDED_IEX_H - - -//-------------------------------- -// -// Exception handling -// -//-------------------------------- - - -#include "IexMacros.h" -#include "IexBaseExc.h" -#include "IexMathExc.h" -#include "IexThrowErrnoExc.h" - -// Note that we do not include file IexErrnoExc.h here. That file -// defines over 150 classes and significantly slows down compilation. -// If you throw ErrnoExc exceptions using the throwErrnoExc() function, -// you don't need IexErrnoExc.h. You have to include IexErrnoExc.h -// only if you want to catch specific subclasses of ErrnoExc. - - -#endif diff --git a/3rdparty/include/OpenEXR/IexBaseExc.h b/3rdparty/include/OpenEXR/IexBaseExc.h deleted file mode 100644 index 9d8ab2428..000000000 --- a/3rdparty/include/OpenEXR/IexBaseExc.h +++ /dev/null @@ -1,266 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IEXBASEEXC_H -#define INCLUDED_IEXBASEEXC_H - - -//---------------------------------------------------------- -// -// A general exception base class, and a few -// useful exceptions derived from the base class. -// -//---------------------------------------------------------- - -#include -#include -#include - -namespace Iex { - -#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER -// Tell MS VC++ to suppress exception specification warnings -#pragma warning(disable:4290) -#endif - -//------------------------------- -// Our most basic exception class -//------------------------------- - -class BaseExc: public std::string, public std::exception -{ - public: - - //---------------------------- - // Constructors and destructor - //---------------------------- - - BaseExc (const char *s = 0) throw(); // std::string (s) - BaseExc (const std::string &s) throw(); // std::string (s) - BaseExc (std::stringstream &s) throw(); // std::string (s.str()) - - BaseExc (const BaseExc &be) throw(); - virtual ~BaseExc () throw (); - - //-------------------------------------------- - // what() method -- e.what() returns e.c_str() - //-------------------------------------------- - - virtual const char * what () const throw (); - - - //-------------------------------------------------- - // Convenient methods to change the exception's text - //-------------------------------------------------- - - BaseExc & assign (std::stringstream &s); // assign (s.str()) - BaseExc & operator = (std::stringstream &s); - - BaseExc & append (std::stringstream &s); // append (s.str()) - BaseExc & operator += (std::stringstream &s); - - - //-------------------------------------------------- - // These methods from the base class get obscured by - // the definitions above. - //-------------------------------------------------- - - BaseExc & assign (const char *s); - BaseExc & operator = (const char *s); - - BaseExc & append (const char *s); - BaseExc & operator += (const char *s); - - - //-------------------------------------------------- - // Stack trace for the point at which the exception - // was thrown. The stack trace will be an empty - // string unless a working stack-tracing routine - // has been installed (see below, setStackTracer()). - //-------------------------------------------------- - - const std::string & stackTrace () const; - - private: - - std::string _stackTrace; -}; - - -//----------------------------------------------------- -// A macro to save typing when declararing an exception -// class derived directly or indirectly from BaseExc: -//----------------------------------------------------- - -#define DEFINE_EXC(name, base) \ - class name: public base \ - { \ - public: \ - name (const char* text=0) throw(): base (text) {} \ - name (const std::string &text) throw(): base (text) {} \ - name (std::stringstream &text) throw(): base (text) {} \ - }; - - -//-------------------------------------------------------- -// Some exceptions which should be useful in most programs -//-------------------------------------------------------- - -DEFINE_EXC (ArgExc, BaseExc) // Invalid arguments to a function call - -DEFINE_EXC (LogicExc, BaseExc) // General error in a program's logic, - // for example, a function was called - // in a context where the call does - // not make sense. - -DEFINE_EXC (InputExc, BaseExc) // Invalid input data, e.g. from a file - -DEFINE_EXC (IoExc, BaseExc) // Input or output operation failed - -DEFINE_EXC (MathExc, BaseExc) // Arithmetic exception; more specific - // exceptions derived from this class - // are defined in ExcMath.h - -DEFINE_EXC (ErrnoExc, BaseExc) // Base class for exceptions corresponding - // to errno values (see errno.h); more - // specific exceptions derived from this - // class are defined in ExcErrno.h - -DEFINE_EXC (NoImplExc, BaseExc) // Missing method exception e.g. from a - // call to a method that is only partially - // or not at all implemented. A reminder - // to lazy software people to get back - // to work. - -DEFINE_EXC (NullExc, BaseExc) // A pointer is inappropriately null. - -DEFINE_EXC (TypeExc, BaseExc) // An object is an inappropriate type, - // i.e. a dynamnic_cast failed. - - -//---------------------------------------------------------------------- -// Stack-tracing support: -// -// setStackTracer(st) -// -// installs a stack-tracing routine, st, which will be called from -// class BaseExc's constructor every time an exception derived from -// BaseExc is thrown. The stack-tracing routine should return a -// string that contains a printable representation of the program's -// current call stack. This string will be stored in the BaseExc -// object; the string is accesible via the BaseExc::stackTrace() -// method. -// -// setStackTracer(0) -// -// removes the current stack tracing routine. When an exception -// derived from BaseExc is thrown, the stack trace string stored -// in the BaseExc object will be empty. -// -// stackTracer() -// -// returns a pointer to the current stack-tracing routine, or 0 -// if there is no current stack stack-tracing routine. -// -//---------------------------------------------------------------------- - -typedef std::string (* StackTracer) (); - -void setStackTracer (StackTracer stackTracer); -StackTracer stackTracer (); - - -//----------------- -// Inline functions -//----------------- - -inline BaseExc & -BaseExc::operator = (std::stringstream &s) -{ - return assign (s); -} - - -inline BaseExc & -BaseExc::operator += (std::stringstream &s) -{ - return append (s); -} - - -inline BaseExc & -BaseExc::assign (const char *s) -{ - std::string::assign(s); - return *this; -} - - -inline BaseExc & -BaseExc::operator = (const char *s) -{ - return assign(s); -} - - -inline BaseExc & -BaseExc::append (const char *s) -{ - std::string::append(s); - return *this; -} - - -inline BaseExc & -BaseExc::operator += (const char *s) -{ - return append(s); -} - - -inline const std::string & -BaseExc::stackTrace () const -{ - return _stackTrace; -} - -#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER -#pragma warning(default:4290) -#endif - -} // namespace Iex - -#endif diff --git a/3rdparty/include/OpenEXR/IexErrnoExc.h b/3rdparty/include/OpenEXR/IexErrnoExc.h deleted file mode 100644 index 53cc28ffc..000000000 --- a/3rdparty/include/OpenEXR/IexErrnoExc.h +++ /dev/null @@ -1,210 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IEXERRNOEXC_H -#define INCLUDED_IEXERRNOEXC_H - -//---------------------------------------------------------------- -// -// Exceptions which correspond to "errno" error codes. -// -//---------------------------------------------------------------- - -#include "IexBaseExc.h" - -namespace Iex { - - -DEFINE_EXC (EpermExc, ErrnoExc) -DEFINE_EXC (EnoentExc, ErrnoExc) -DEFINE_EXC (EsrchExc, ErrnoExc) -DEFINE_EXC (EintrExc, ErrnoExc) -DEFINE_EXC (EioExc, ErrnoExc) -DEFINE_EXC (EnxioExc, ErrnoExc) -DEFINE_EXC (E2bigExc, ErrnoExc) -DEFINE_EXC (EnoexecExc, ErrnoExc) -DEFINE_EXC (EbadfExc, ErrnoExc) -DEFINE_EXC (EchildExc, ErrnoExc) -DEFINE_EXC (EagainExc, ErrnoExc) -DEFINE_EXC (EnomemExc, ErrnoExc) -DEFINE_EXC (EaccesExc, ErrnoExc) -DEFINE_EXC (EfaultExc, ErrnoExc) -DEFINE_EXC (EnotblkExc, ErrnoExc) -DEFINE_EXC (EbusyExc, ErrnoExc) -DEFINE_EXC (EexistExc, ErrnoExc) -DEFINE_EXC (ExdevExc, ErrnoExc) -DEFINE_EXC (EnodevExc, ErrnoExc) -DEFINE_EXC (EnotdirExc, ErrnoExc) -DEFINE_EXC (EisdirExc, ErrnoExc) -DEFINE_EXC (EinvalExc, ErrnoExc) -DEFINE_EXC (EnfileExc, ErrnoExc) -DEFINE_EXC (EmfileExc, ErrnoExc) -DEFINE_EXC (EnottyExc, ErrnoExc) -DEFINE_EXC (EtxtbsyExc, ErrnoExc) -DEFINE_EXC (EfbigExc, ErrnoExc) -DEFINE_EXC (EnospcExc, ErrnoExc) -DEFINE_EXC (EspipeExc, ErrnoExc) -DEFINE_EXC (ErofsExc, ErrnoExc) -DEFINE_EXC (EmlinkExc, ErrnoExc) -DEFINE_EXC (EpipeExc, ErrnoExc) -DEFINE_EXC (EdomExc, ErrnoExc) -DEFINE_EXC (ErangeExc, ErrnoExc) -DEFINE_EXC (EnomsgExc, ErrnoExc) -DEFINE_EXC (EidrmExc, ErrnoExc) -DEFINE_EXC (EchrngExc, ErrnoExc) -DEFINE_EXC (El2nsyncExc, ErrnoExc) -DEFINE_EXC (El3hltExc, ErrnoExc) -DEFINE_EXC (El3rstExc, ErrnoExc) -DEFINE_EXC (ElnrngExc, ErrnoExc) -DEFINE_EXC (EunatchExc, ErrnoExc) -DEFINE_EXC (EnocsiExc, ErrnoExc) -DEFINE_EXC (El2hltExc, ErrnoExc) -DEFINE_EXC (EdeadlkExc, ErrnoExc) -DEFINE_EXC (EnolckExc, ErrnoExc) -DEFINE_EXC (EbadeExc, ErrnoExc) -DEFINE_EXC (EbadrExc, ErrnoExc) -DEFINE_EXC (ExfullExc, ErrnoExc) -DEFINE_EXC (EnoanoExc, ErrnoExc) -DEFINE_EXC (EbadrqcExc, ErrnoExc) -DEFINE_EXC (EbadsltExc, ErrnoExc) -DEFINE_EXC (EdeadlockExc, ErrnoExc) -DEFINE_EXC (EbfontExc, ErrnoExc) -DEFINE_EXC (EnostrExc, ErrnoExc) -DEFINE_EXC (EnodataExc, ErrnoExc) -DEFINE_EXC (EtimeExc, ErrnoExc) -DEFINE_EXC (EnosrExc, ErrnoExc) -DEFINE_EXC (EnonetExc, ErrnoExc) -DEFINE_EXC (EnopkgExc, ErrnoExc) -DEFINE_EXC (EremoteExc, ErrnoExc) -DEFINE_EXC (EnolinkExc, ErrnoExc) -DEFINE_EXC (EadvExc, ErrnoExc) -DEFINE_EXC (EsrmntExc, ErrnoExc) -DEFINE_EXC (EcommExc, ErrnoExc) -DEFINE_EXC (EprotoExc, ErrnoExc) -DEFINE_EXC (EmultihopExc, ErrnoExc) -DEFINE_EXC (EbadmsgExc, ErrnoExc) -DEFINE_EXC (EnametoolongExc, ErrnoExc) -DEFINE_EXC (EoverflowExc, ErrnoExc) -DEFINE_EXC (EnotuniqExc, ErrnoExc) -DEFINE_EXC (EbadfdExc, ErrnoExc) -DEFINE_EXC (EremchgExc, ErrnoExc) -DEFINE_EXC (ElibaccExc, ErrnoExc) -DEFINE_EXC (ElibbadExc, ErrnoExc) -DEFINE_EXC (ElibscnExc, ErrnoExc) -DEFINE_EXC (ElibmaxExc, ErrnoExc) -DEFINE_EXC (ElibexecExc, ErrnoExc) -DEFINE_EXC (EilseqExc, ErrnoExc) -DEFINE_EXC (EnosysExc, ErrnoExc) -DEFINE_EXC (EloopExc, ErrnoExc) -DEFINE_EXC (ErestartExc, ErrnoExc) -DEFINE_EXC (EstrpipeExc, ErrnoExc) -DEFINE_EXC (EnotemptyExc, ErrnoExc) -DEFINE_EXC (EusersExc, ErrnoExc) -DEFINE_EXC (EnotsockExc, ErrnoExc) -DEFINE_EXC (EdestaddrreqExc, ErrnoExc) -DEFINE_EXC (EmsgsizeExc, ErrnoExc) -DEFINE_EXC (EprototypeExc, ErrnoExc) -DEFINE_EXC (EnoprotooptExc, ErrnoExc) -DEFINE_EXC (EprotonosupportExc, ErrnoExc) -DEFINE_EXC (EsocktnosupportExc, ErrnoExc) -DEFINE_EXC (EopnotsuppExc, ErrnoExc) -DEFINE_EXC (EpfnosupportExc, ErrnoExc) -DEFINE_EXC (EafnosupportExc, ErrnoExc) -DEFINE_EXC (EaddrinuseExc, ErrnoExc) -DEFINE_EXC (EaddrnotavailExc, ErrnoExc) -DEFINE_EXC (EnetdownExc, ErrnoExc) -DEFINE_EXC (EnetunreachExc, ErrnoExc) -DEFINE_EXC (EnetresetExc, ErrnoExc) -DEFINE_EXC (EconnabortedExc, ErrnoExc) -DEFINE_EXC (EconnresetExc, ErrnoExc) -DEFINE_EXC (EnobufsExc, ErrnoExc) -DEFINE_EXC (EisconnExc, ErrnoExc) -DEFINE_EXC (EnotconnExc, ErrnoExc) -DEFINE_EXC (EshutdownExc, ErrnoExc) -DEFINE_EXC (EtoomanyrefsExc, ErrnoExc) -DEFINE_EXC (EtimedoutExc, ErrnoExc) -DEFINE_EXC (EconnrefusedExc, ErrnoExc) -DEFINE_EXC (EhostdownExc, ErrnoExc) -DEFINE_EXC (EhostunreachExc, ErrnoExc) -DEFINE_EXC (EalreadyExc, ErrnoExc) -DEFINE_EXC (EinprogressExc, ErrnoExc) -DEFINE_EXC (EstaleExc, ErrnoExc) -DEFINE_EXC (EioresidExc, ErrnoExc) -DEFINE_EXC (EucleanExc, ErrnoExc) -DEFINE_EXC (EnotnamExc, ErrnoExc) -DEFINE_EXC (EnavailExc, ErrnoExc) -DEFINE_EXC (EisnamExc, ErrnoExc) -DEFINE_EXC (EremoteioExc, ErrnoExc) -DEFINE_EXC (EinitExc, ErrnoExc) -DEFINE_EXC (EremdevExc, ErrnoExc) -DEFINE_EXC (EcanceledExc, ErrnoExc) -DEFINE_EXC (EnolimfileExc, ErrnoExc) -DEFINE_EXC (EproclimExc, ErrnoExc) -DEFINE_EXC (EdisjointExc, ErrnoExc) -DEFINE_EXC (EnologinExc, ErrnoExc) -DEFINE_EXC (EloginlimExc, ErrnoExc) -DEFINE_EXC (EgrouploopExc, ErrnoExc) -DEFINE_EXC (EnoattachExc, ErrnoExc) -DEFINE_EXC (EnotsupExc, ErrnoExc) -DEFINE_EXC (EnoattrExc, ErrnoExc) -DEFINE_EXC (EdircorruptedExc, ErrnoExc) -DEFINE_EXC (EdquotExc, ErrnoExc) -DEFINE_EXC (EnfsremoteExc, ErrnoExc) -DEFINE_EXC (EcontrollerExc, ErrnoExc) -DEFINE_EXC (EnotcontrollerExc, ErrnoExc) -DEFINE_EXC (EenqueuedExc, ErrnoExc) -DEFINE_EXC (EnotenqueuedExc, ErrnoExc) -DEFINE_EXC (EjoinedExc, ErrnoExc) -DEFINE_EXC (EnotjoinedExc, ErrnoExc) -DEFINE_EXC (EnoprocExc, ErrnoExc) -DEFINE_EXC (EmustrunExc, ErrnoExc) -DEFINE_EXC (EnotstoppedExc, ErrnoExc) -DEFINE_EXC (EclockcpuExc, ErrnoExc) -DEFINE_EXC (EinvalstateExc, ErrnoExc) -DEFINE_EXC (EnoexistExc, ErrnoExc) -DEFINE_EXC (EendofminorExc, ErrnoExc) -DEFINE_EXC (EbufsizeExc, ErrnoExc) -DEFINE_EXC (EemptyExc, ErrnoExc) -DEFINE_EXC (EnointrgroupExc, ErrnoExc) -DEFINE_EXC (EinvalmodeExc, ErrnoExc) -DEFINE_EXC (EcantextentExc, ErrnoExc) -DEFINE_EXC (EinvaltimeExc, ErrnoExc) -DEFINE_EXC (EdestroyedExc, ErrnoExc) - - -} // namespace Iex - -#endif diff --git a/3rdparty/include/OpenEXR/IexMacros.h b/3rdparty/include/OpenEXR/IexMacros.h deleted file mode 100644 index 4c715c3eb..000000000 --- a/3rdparty/include/OpenEXR/IexMacros.h +++ /dev/null @@ -1,148 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IEXMACROS_H -#define INCLUDED_IEXMACROS_H - -//-------------------------------------------------------------------- -// -// Macros which make throwing exceptions more convenient -// -//-------------------------------------------------------------------- - -#include - - -//---------------------------------------------------------------------------- -// A macro to throw exceptions whose text is assembled using stringstreams. -// -// Example: -// -// THROW (InputExc, "Syntax error in line " << line ", " << file << "."); -// -//---------------------------------------------------------------------------- - -#define THROW(type, text) \ - do \ - { \ - std::stringstream s; \ - s << text; \ - throw type (s); \ - } \ - while (0) - - -//---------------------------------------------------------------------------- -// Macros to add to or to replace the text of an exception. -// The new text is assembled using stringstreams. -// -// Examples: -// -// Append to end of an exception's text: -// -// catch (BaseExc &e) -// { -// APPEND_EXC (e, " Directory " << name << " does not exist."); -// throw; -// } -// -// Replace an exception's text: -// -// catch (BaseExc &e) -// { -// REPLACE_EXC (e, "Directory " << name << " does not exist. " << e); -// throw; -// } -//---------------------------------------------------------------------------- - -#define APPEND_EXC(exc, text) \ - do \ - { \ - std::stringstream s; \ - s << text; \ - exc.append (s); \ - } \ - while (0) - -#define REPLACE_EXC(exc, text) \ - do \ - { \ - std::stringstream s; \ - s << text; \ - exc.assign (s); \ - } \ - while (0) - - -//------------------------------------------------------------- -// A macro to throw ErrnoExc exceptions whose text is assembled -// using stringstreams: -// -// Example: -// -// THROW_ERRNO ("Cannot open file " << name << " (%T)."); -// -//------------------------------------------------------------- - -#define THROW_ERRNO(text) \ - do \ - { \ - std::stringstream s; \ - s << text; \ - ::Iex::throwErrnoExc (s.str()); \ - } \ - while (0) - - -//------------------------------------------------------------- -// A macro to throw exceptions if an assertion is false. -// -// Example: -// -// ASSERT (NullExc, ptr != NULL, "Null pointer" ); -// -//------------------------------------------------------------- - -#define ASSERT(assertion, type, text) \ - do \ - { \ - if( (assertion) == false ) \ - THROW( type, text ); \ - } \ - while (0) - - -#endif diff --git a/3rdparty/include/OpenEXR/IexMathExc.h b/3rdparty/include/OpenEXR/IexMathExc.h deleted file mode 100644 index 4ef90d35b..000000000 --- a/3rdparty/include/OpenEXR/IexMathExc.h +++ /dev/null @@ -1,58 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IEXMATHEXC_H -#define INCLUDED_IEXMATHEXC_H - -#include "IexBaseExc.h" - -namespace Iex { - -//--------------------------------------------------------- -// Exception classess which correspond to specific floating -// point exceptions. -//--------------------------------------------------------- - -DEFINE_EXC (OverflowExc, MathExc) // Overflow -DEFINE_EXC (UnderflowExc, MathExc) // Underflow -DEFINE_EXC (DivzeroExc, MathExc) // Division by zero -DEFINE_EXC (InexactExc, MathExc) // Inexact result -DEFINE_EXC (InvalidFpOpExc, MathExc) // Invalid operation - - -} // namespace Iex - -#endif diff --git a/3rdparty/include/OpenEXR/IexThrowErrnoExc.h b/3rdparty/include/OpenEXR/IexThrowErrnoExc.h deleted file mode 100644 index 5b41dcc0b..000000000 --- a/3rdparty/include/OpenEXR/IexThrowErrnoExc.h +++ /dev/null @@ -1,96 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IEXTHROWERRNOEXC_H -#define INCLUDED_IEXTHROWERRNOEXC_H - -//---------------------------------------------------------- -// -// A function which throws ExcErrno exceptions -// -//---------------------------------------------------------- - -#include "IexBaseExc.h" - -namespace Iex { - - -//-------------------------------------------------------------------------- -// -// Function throwErrnoExc() throws an exception which corresponds to -// error code errnum. The exception text is initialized with a copy -// of the string passed to throwErrnoExc(), where all occurrences of -// "%T" have been replaced with the output of strerror(oserror()). -// -// Example: -// -// If opening file /tmp/output failed with an ENOENT error code, -// calling -// -// throwErrnoExc (); -// -// or -// -// throwErrnoExc ("%T."); -// -// will throw an EnoentExc whose text reads -// -// No such file or directory. -// -// More detailed messages can be assembled using stringstreams: -// -// std::stringstream s; -// s << "Cannot open file " << name << " (%T)."; -// throwErrnoExc (s); -// -// The resulting exception contains the following text: -// -// Cannot open file /tmp/output (No such file or directory). -// -// Alternatively, you may want to use the THROW_ERRNO macro defined -// in IexMacros.h: -// -// THROW_ERRNO ("Cannot open file " << name << " (%T).") -// -//-------------------------------------------------------------------------- - -void throwErrnoExc (const std::string &txt, int errnum); -void throwErrnoExc (const std::string &txt = "%T." /*, int errnum = oserror() */); - - -} // namespace Iex - -#endif diff --git a/3rdparty/include/OpenEXR/IlmThread.h b/3rdparty/include/OpenEXR/IlmThread.h deleted file mode 100644 index 5129a8efe..000000000 --- a/3rdparty/include/OpenEXR/IlmThread.h +++ /dev/null @@ -1,141 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2005, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_ILM_THREAD_H -#define INCLUDED_ILM_THREAD_H - -//----------------------------------------------------------------------------- -// -// class Thread -// -// Class Thread is a portable interface to a system-dependent thread -// primitive. In order to make a thread actually do something useful, -// you must derive a subclass from class Thread and implement the -// run() function. If the operating system supports threading then -// the run() function will be executed int a new thread. -// -// The actual creation of the thread is done by the start() routine -// which then calls the run() function. In general the start() -// routine should be called from the constructor of the derived class. -// -// The base-class thread destructor will join/destroy the thread. -// -// IMPORTANT: Due to the mechanisms that encapsulate the low-level -// threading primitives in a C++ class there is a race condition -// with code resembling the following: -// -// { -// WorkerThread myThread; -// } // myThread goes out of scope, is destroyed -// // and the thread is joined -// -// The race is between the parent thread joining the child thread -// in the destructor of myThread, and the run() function in the -// child thread. If the destructor gets executed first then run() -// will be called with an invalid "this" pointer. -// -// This issue can be fixed by using a Semaphore to keep track of -// whether the run() function has already been called. You can -// include a Semaphore member variable within your derived class -// which you post() on in the run() function, and wait() on in the -// destructor before the thread is joined. Alternatively you could -// do something like this: -// -// Semaphore runStarted; -// -// void WorkerThread::run () -// { -// runStarted.post() -// // do some work -// ... -// } -// -// { -// WorkerThread myThread; -// runStarted.wait (); // ensure that we have started -// // the run function -// } // myThread goes out of scope, is destroyed -// // and the thread is joined -// -//----------------------------------------------------------------------------- - -#include "OpenEXRConfig.h" - -#if defined _WIN32 || defined _WIN64 - #ifdef NOMINMAX - #undef NOMINMAX - #endif - #define NOMINMAX - #include - #include -#elif HAVE_PTHREAD - #include -#endif - -namespace IlmThread { - -// -// Query function to determine if the current platform supports -// threads AND this library was compiled with threading enabled. -// - -bool supportsThreads (); - - -class Thread -{ - public: - - Thread (); - virtual ~Thread (); - - void start (); - virtual void run () = 0; - - private: - - #if defined _WIN32 || defined _WIN64 - HANDLE _thread; - #elif HAVE_PTHREAD - pthread_t _thread; - #endif - - void operator = (const Thread& t); // not implemented - Thread (const Thread& t); // not implemented -}; - - -} // namespace IlmThread - -#endif diff --git a/3rdparty/include/OpenEXR/IlmThreadMutex.h b/3rdparty/include/OpenEXR/IlmThreadMutex.h deleted file mode 100644 index dd7b86425..000000000 --- a/3rdparty/include/OpenEXR/IlmThreadMutex.h +++ /dev/null @@ -1,158 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2005, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_ILM_THREAD_MUTEX_H -#define INCLUDED_ILM_THREAD_MUTEX_H - -//----------------------------------------------------------------------------- -// -// class Mutex, class Lock -// -// Class Mutex is a wrapper for a system-dependent mutual exclusion -// mechanism. Actual locking and unlocking of a Mutex object must -// be performed using an instance of a Lock (defined below). -// -// Class lock provides safe locking and unlocking of mutexes even in -// the presence of C++ exceptions. Constructing a Lock object locks -// the mutex; destroying the Lock unlocks the mutex. -// -// Lock objects are not themselves thread-safe. You should never -// share a Lock object among multiple threads. -// -// Typical usage: -// -// Mutex mtx; // Create a Mutex object that is visible -// //to multiple threads -// -// ... // create some threads -// -// // Then, within each thread, construct a critical section like so: -// -// { -// Lock lock (mtx); // Lock constructor locks the mutex -// ... // do some computation on shared data -// } // leaving the block unlocks the mutex -// -//----------------------------------------------------------------------------- - -#include "OpenEXRConfig.h" - -#if defined _WIN32 || defined _WIN64 - #ifdef NOMINMAX - #undef NOMINMAX - #endif - #define NOMINMAX - #include -#elif HAVE_PTHREAD - #include -#endif - -namespace IlmThread { - -class Lock; - - -class Mutex -{ - public: - - Mutex (); - virtual ~Mutex (); - - private: - - void lock () const; - void unlock () const; - - #if defined _WIN32 || defined _WIN64 - mutable CRITICAL_SECTION _mutex; - #elif HAVE_PTHREAD - mutable pthread_mutex_t _mutex; - #endif - - void operator = (const Mutex& M); // not implemented - Mutex (const Mutex& M); // not implemented - - friend class Lock; -}; - - -class Lock -{ - public: - - Lock (const Mutex& m, bool autoLock = true): - _mutex (m), - _locked (false) - { - if (autoLock) - { - _mutex.lock(); - _locked = true; - } - } - - ~Lock () - { - if (_locked) - _mutex.unlock(); - } - - void acquire () - { - _mutex.lock(); - _locked = true; - } - - void release () - { - _mutex.unlock(); - _locked = false; - } - - bool locked () - { - return _locked; - } - - private: - - const Mutex & _mutex; - bool _locked; -}; - - -} // namespace IlmThread - -#endif diff --git a/3rdparty/include/OpenEXR/IlmThreadPool.h b/3rdparty/include/OpenEXR/IlmThreadPool.h deleted file mode 100644 index 39be1a84a..000000000 --- a/3rdparty/include/OpenEXR/IlmThreadPool.h +++ /dev/null @@ -1,156 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2005, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_ILM_THREAD_POOL_H -#define INCLUDED_ILM_THREAD_POOL_H - -//----------------------------------------------------------------------------- -// -// class Task, class ThreadPool, class TaskGroup -// -// Class ThreadPool manages a set of worker threads and accepts -// tasks for processing. Tasks added to the thread pool are -// executed concurrently by the worker threads. -// -// Class Thread provides an abstract interface for a task which -// a ThreadPool works on. Derived classes need to implement the -// execute() function which performs the actual task. -// -// Class TaskTroup allows synchronization on the completion of a set -// of tasks. Every task that is added to a ThreadPool belongs to a -// single TaskGroup. The destructor of the TaskGroup waits for all -// tasks in the group to finish. -// -// Note: if you plan to use the ThreadPool interface in your own -// applications note that the implementation of the ThreadPool calls -// opertor delete on tasks as they complete. If you define a custom -// operator new for your tasks, for instance to use a custom heap, -// then you must also write an appropriate operator delete. -// -//----------------------------------------------------------------------------- - -namespace IlmThread { - -class TaskGroup; -class Task; - - -class ThreadPool -{ - public: - - //------------------------------------------------------- - // Constructor -- creates numThreads worker threads which - // wait until a task is available. - //------------------------------------------------------- - - ThreadPool (unsigned numThreads = 0); - - - //----------------------------------------------------------- - // Destructor -- waits for all tasks to complete, joins all - // the threads to the calling thread, and then destroys them. - //----------------------------------------------------------- - - virtual ~ThreadPool (); - - - //-------------------------------------------------------- - // Query and set the number of worker threads in the pool. - // - // Warning: never call setNumThreads from within a worker - // thread as this will almost certainly cause a deadlock - // or crash. - //-------------------------------------------------------- - - int numThreads () const; - void setNumThreads (int count); - - - //------------------------------------------------------------ - // Add a task for processing. The ThreadPool can handle any - // number of tasks regardless of the number of worker threads. - // The tasks are first added onto a queue, and are executed - // by threads as they become available, in FIFO order. - //------------------------------------------------------------ - - void addTask (Task* task); - - - //------------------------------------------- - // Access functions for the global threadpool - //------------------------------------------- - - static ThreadPool& globalThreadPool (); - static void addGlobalTask (Task* task); - - struct Data; - - protected: - - Data * _data; -}; - - -class Task -{ - public: - - Task (TaskGroup* g); - virtual ~Task (); - - virtual void execute () = 0; - TaskGroup * group(); - - protected: - - TaskGroup * _group; -}; - - -class TaskGroup -{ - public: - - TaskGroup(); - ~TaskGroup(); - - struct Data; - Data* const _data; -}; - - -} // namespace IlmThread - -#endif diff --git a/3rdparty/include/OpenEXR/IlmThreadSemaphore.h b/3rdparty/include/OpenEXR/IlmThreadSemaphore.h deleted file mode 100644 index 98b9e2e36..000000000 --- a/3rdparty/include/OpenEXR/IlmThreadSemaphore.h +++ /dev/null @@ -1,109 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2005, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_ILM_THREAD_SEMAPHORE_H -#define INCLUDED_ILM_THREAD_SEMAPHORE_H - -//----------------------------------------------------------------------------- -// -// class Semaphore -- a wrapper class for -// system-dependent counting semaphores -// -//----------------------------------------------------------------------------- - -#include "OpenEXRConfig.h" - -#if defined _WIN32 || defined _WIN64 - #ifdef NOMINMAX - #undef NOMINMAX - #endif - #define NOMINMAX - #include -#elif HAVE_PTHREAD && !HAVE_POSIX_SEMAPHORES - #include -#elif HAVE_PTHREAD && HAVE_POSIX_SEMAPHORES - #include -#endif - -namespace IlmThread { - - -class Semaphore -{ - public: - - Semaphore (unsigned int value = 0); - virtual ~Semaphore(); - - void wait(); - void post(); - int value() const; - - private: - - #if defined _WIN32 || defined _WIN64 - - mutable HANDLE _semaphore; - - #elif HAVE_PTHREAD && !HAVE_POSIX_SEMAPHORES - - // - // If the platform has Posix threads but no semapohores, - // then we implement them ourselves using condition variables - // - - struct sema_t - { - unsigned int count; - unsigned long numWaiting; - pthread_mutex_t mutex; - pthread_cond_t nonZero; - }; - - mutable sema_t _semaphore; - - #elif HAVE_PTHREAD && HAVE_POSIX_SEMAPHORES - - mutable sem_t _semaphore; - - #endif - - void operator = (const Semaphore& s); // not implemented - Semaphore (const Semaphore& s); // not implemented -}; - - -} // namespace IlmThread - -#endif diff --git a/3rdparty/include/OpenEXR/ImathBox.h b/3rdparty/include/OpenEXR/ImathBox.h deleted file mode 100644 index c6c33da51..000000000 --- a/3rdparty/include/OpenEXR/ImathBox.h +++ /dev/null @@ -1,277 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMATHBOX_H -#define INCLUDED_IMATHBOX_H - -//------------------------------------------------------------------- -// -// class Imath::Box -// -------------------------------- -// -// This class imposes the following requirements on its -// parameter class: -// -// 1) The class T must implement these operators: -// + - < > <= >= = -// with the signature (T,T) and the expected -// return values for a numeric type. -// -// 2) The class T must implement operator= -// with the signature (T,float and/or double) -// -// 3) The class T must have a constructor which takes -// a float (and/or double) for use in initializing the box. -// -// 4) The class T must have a function T::dimensions() -// which returns the number of dimensions in the class -// (since its assumed its a vector) -- preferably, this -// returns a constant expression. -// -//------------------------------------------------------------------- - -#include "ImathVec.h" - -namespace Imath { - - -template -class Box -{ - public: - - //------------------------- - // Data Members are public - //------------------------- - - T min; - T max; - - //----------------------------------------------------- - // Constructors - an "empty" box is created by default - //----------------------------------------------------- - - Box(); - Box(const T& point); - Box(const T& minT, const T& maxT); - - //-------------------- - // Operators: ==, != - //-------------------- - - bool operator == (const Box &src) const; - bool operator != (const Box &src) const; - - //------------------ - // Box manipulation - //------------------ - - void makeEmpty(); - void extendBy(const T& point); - void extendBy(const Box& box); - - //--------------------------------------------------- - // Query functions - these compute results each time - //--------------------------------------------------- - - T size() const; - T center() const; - bool intersects(const T &point) const; - bool intersects(const Box &box) const; - - unsigned int majorAxis() const; - - //---------------- - // Classification - //---------------- - - bool isEmpty() const; - bool hasVolume() const; -}; - - -//-------------------- -// Convenient typedefs -//-------------------- - - -typedef Box Box2s; -typedef Box Box2i; -typedef Box Box2f; -typedef Box Box2d; -typedef Box Box3s; -typedef Box Box3i; -typedef Box Box3f; -typedef Box Box3d; - - -//---------------- -// Implementation -//---------------- - - -template -inline Box::Box() -{ - makeEmpty(); -} - -template -inline Box::Box(const T& point) -{ - min = point; - max = point; -} - -template -inline Box::Box(const T& minV, const T& maxV) -{ - min = minV; - max = maxV; -} - -template -inline bool -Box::operator == (const Box &src) const -{ - return (min == src.min && max == src.max); -} - -template -inline bool -Box::operator != (const Box &src) const -{ - return (min != src.min || max != src.max); -} - -template -inline void Box::makeEmpty() -{ - min = T(T::baseTypeMax()); - max = T(T::baseTypeMin()); -} - -template -inline void Box::extendBy(const T& point) -{ - for (unsigned int i=0; i max[i] ) max[i] = point[i]; - } -} - -template -inline void Box::extendBy(const Box& box) -{ - for (unsigned int i=0; i max[i] ) max[i] = box.max[i]; - } -} - -template -inline bool Box::intersects(const T& point) const -{ - for (unsigned int i=0; i max[i]) return false; - } - return true; -} - -template -inline bool Box::intersects(const Box& box) const -{ - for (unsigned int i=0; i max[i]) return false; - } - return true; -} - -template -inline T Box::size() const -{ - if (isEmpty()) - return T (0); - - return max-min; -} - -template -inline T Box::center() const -{ - return (max+min)/2; -} - -template -inline bool Box::isEmpty() const -{ - for (unsigned int i=0; i -inline bool Box::hasVolume() const -{ - for (unsigned int i=0; i -inline unsigned int Box::majorAxis() const -{ - unsigned int major = 0; - T s = size(); - - for (unsigned int i=1; i s[major] ) major = i; - } - - return major; -} - -} // namespace Imath - -#endif diff --git a/3rdparty/include/OpenEXR/ImathBoxAlgo.h b/3rdparty/include/OpenEXR/ImathBoxAlgo.h deleted file mode 100644 index 344b71586..000000000 --- a/3rdparty/include/OpenEXR/ImathBoxAlgo.h +++ /dev/null @@ -1,611 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHBOXALGO_H -#define INCLUDED_IMATHBOXALGO_H - - -//--------------------------------------------------------------------------- -// -// This file contains algorithms applied to or in conjunction -// with bounding boxes (Imath::Box). These algorithms require -// more headers to compile. The assumption made is that these -// functions are called much less often than the basic box -// functions or these functions require more support classes. -// -// Contains: -// -// T clip(const T& in, const Box& box) -// -// Vec3 closestPointOnBox(const Vec3&, const Box>& ) -// -// Vec3 closestPointInBox(const Vec3&, const Box>& ) -// -// void transform(Box>&, const Matrix44&) -// -// bool findEntryAndExitPoints(const Line &line, -// const Box< Vec3 > &box, -// Vec3 &enterPoint, -// Vec3 &exitPoint) -// -// bool intersects(const Box> &box, -// const Line3 &line, -// Vec3 result) -// -// bool intersects(const Box> &box, const Line3 &line) -// -//--------------------------------------------------------------------------- - -#include "ImathBox.h" -#include "ImathMatrix.h" -#include "ImathLineAlgo.h" -#include "ImathPlane.h" - -namespace Imath { - - -template -inline T clip(const T& in, const Box& box) -{ - // - // Clip a point so that it lies inside the given bbox - // - - T out; - - for (int i=0; i<(int)box.min.dimensions(); i++) - { - if (in[i] < box.min[i]) out[i] = box.min[i]; - else if (in[i] > box.max[i]) out[i] = box.max[i]; - else out[i] = in[i]; - } - - return out; -} - - -// -// Return p if p is inside the box. -// - -template -Vec3 -closestPointInBox(const Vec3& p, const Box< Vec3 >& box ) -{ - Imath::V3f b; - - if (p.x < box.min.x) - b.x = box.min.x; - else if (p.x > box.max.x) - b.x = box.max.x; - else - b.x = p.x; - - if (p.y < box.min.y) - b.y = box.min.y; - else if (p.y > box.max.y) - b.y = box.max.y; - else - b.y = p.y; - - if (p.z < box.min.z) - b.z = box.min.z; - else if (p.z > box.max.z) - b.z = box.max.z; - else - b.z = p.z; - - return b; -} - -template -Vec3 closestPointOnBox(const Vec3& pt, const Box< Vec3 >& box ) -{ - // - // This sucker is specialized to work with a Vec3f and a box - // made of Vec3fs. - // - - Vec3 result; - - // trivial cases first - if (box.isEmpty()) - return pt; - else if (pt == box.center()) - { - // middle of z side - result[0] = (box.max[0] + box.min[0])/2.0; - result[1] = (box.max[1] + box.min[1])/2.0; - result[2] = box.max[2]; - } - else - { - // Find the closest point on a unit box (from -1 to 1), - // then scale up. - - // Find the vector from center to the point, then scale - // to a unit box. - Vec3 vec = pt - box.center(); - T sizeX = box.max[0]-box.min[0]; - T sizeY = box.max[1]-box.min[1]; - T sizeZ = box.max[2]-box.min[2]; - - T halfX = sizeX/2.0; - T halfY = sizeY/2.0; - T halfZ = sizeZ/2.0; - if (halfX > 0.0) - vec[0] /= halfX; - if (halfY > 0.0) - vec[1] /= halfY; - if (halfZ > 0.0) - vec[2] /= halfZ; - - // Side to snap side that has greatest magnitude in the vector. - Vec3 mag; - mag[0] = fabs(vec[0]); - mag[1] = fabs(vec[1]); - mag[2] = fabs(vec[2]); - - result = mag; - - // Check if beyond corners - if (result[0] > 1.0) - result[0] = 1.0; - if (result[1] > 1.0) - result[1] = 1.0; - if (result[2] > 1.0) - result[2] = 1.0; - - // snap to appropriate side - if ((mag[0] > mag[1]) && (mag[0] > mag[2])) - { - result[0] = 1.0; - } - else if ((mag[1] > mag[0]) && (mag[1] > mag[2])) - { - result[1] = 1.0; - } - else if ((mag[2] > mag[0]) && (mag[2] > mag[1])) - { - result[2] = 1.0; - } - else if ((mag[0] == mag[1]) && (mag[0] == mag[2])) - { - // corner - result = Vec3(1,1,1); - } - else if (mag[0] == mag[1]) - { - // edge parallel with z - result[0] = 1.0; - result[1] = 1.0; - } - else if (mag[0] == mag[2]) - { - // edge parallel with y - result[0] = 1.0; - result[2] = 1.0; - } - else if (mag[1] == mag[2]) - { - // edge parallel with x - result[1] = 1.0; - result[2] = 1.0; - } - - // Now make everything point the right way - for (int i=0; i < 3; i++) - { - if (vec[i] < 0.0) - result[i] = -result[i]; - } - - // scale back up and move to center - result[0] *= halfX; - result[1] *= halfY; - result[2] *= halfZ; - - result += box.center(); - } - return result; -} - -template -Box< Vec3 > -transform(const Box< Vec3 >& box, const Matrix44& m) -{ - // Transforms Box3f by matrix, enlarging Box3f to contain result. - // Clever method courtesy of Graphics Gems, pp. 548-550 - // - // This works for projection matrices as well as simple affine - // transformations. Coordinates of the box are rehomogenized if there - // is a projection matrix - - // a transformed empty box is still empty - if (box.isEmpty()) - return box; - - // If the last column is close enuf to ( 0 0 0 1 ) then we use the - // fast, affine version. The tricky affine method could maybe be - // extended to deal with the projection case as well, but its not - // worth it right now. - - if (m[0][3] * m[0][3] + m[1][3] * m[1][3] + m[2][3] * m[2][3] - + (1.0 - m[3][3]) * (1.0 - m[3][3]) < 0.00001) - { - // Affine version, use the Graphics Gems hack - int i, j; - Box< Vec3 > newBox; - - for (i = 0; i < 3; i++) - { - newBox.min[i] = newBox.max[i] = (S) m[3][i]; - - for (j = 0; j < 3; j++) - { - float a, b; - - a = (S) m[j][i] * box.min[j]; - b = (S) m[j][i] * box.max[j]; - - if (a < b) - { - newBox.min[i] += a; - newBox.max[i] += b; - } - else - { - newBox.min[i] += b; - newBox.max[i] += a; - } - } - } - - return newBox; - } - - // This is a projection matrix. Do things the naive way. - Vec3 points[8]; - - /* Set up the eight points at the corners of the extent */ - points[0][0] = points[1][0] = points[2][0] = points[3][0] = box.min[0]; - points[4][0] = points[5][0] = points[6][0] = points[7][0] = box.max[0]; - - points[0][1] = points[1][1] = points[4][1] = points[5][1] = box.min[1]; - points[2][1] = points[3][1] = points[6][1] = points[7][1] = box.max[1]; - - points[0][2] = points[2][2] = points[4][2] = points[6][2] = box.min[2]; - points[1][2] = points[3][2] = points[5][2] = points[7][2] = box.max[2]; - - Box< Vec3 > newBox; - for (int i = 0; i < 8; i++) - newBox.extendBy(points[i] * m); - - return newBox; -} - -template -Box< Vec3 > -affineTransform(const Box< Vec3 > &bbox, const Matrix44 &M) -{ - float min0, max0, min1, max1, min2, max2, a, b; - float min0new, max0new, min1new, max1new, min2new, max2new; - - min0 = bbox.min[0]; - max0 = bbox.max[0]; - min1 = bbox.min[1]; - max1 = bbox.max[1]; - min2 = bbox.min[2]; - max2 = bbox.max[2]; - - min0new = max0new = M[3][0]; - a = M[0][0] * min0; - b = M[0][0] * max0; - if (a < b) { - min0new += a; - max0new += b; - } else { - min0new += b; - max0new += a; - } - a = M[1][0] * min1; - b = M[1][0] * max1; - if (a < b) { - min0new += a; - max0new += b; - } else { - min0new += b; - max0new += a; - } - a = M[2][0] * min2; - b = M[2][0] * max2; - if (a < b) { - min0new += a; - max0new += b; - } else { - min0new += b; - max0new += a; - } - - min1new = max1new = M[3][1]; - a = M[0][1] * min0; - b = M[0][1] * max0; - if (a < b) { - min1new += a; - max1new += b; - } else { - min1new += b; - max1new += a; - } - a = M[1][1] * min1; - b = M[1][1] * max1; - if (a < b) { - min1new += a; - max1new += b; - } else { - min1new += b; - max1new += a; - } - a = M[2][1] * min2; - b = M[2][1] * max2; - if (a < b) { - min1new += a; - max1new += b; - } else { - min1new += b; - max1new += a; - } - - min2new = max2new = M[3][2]; - a = M[0][2] * min0; - b = M[0][2] * max0; - if (a < b) { - min2new += a; - max2new += b; - } else { - min2new += b; - max2new += a; - } - a = M[1][2] * min1; - b = M[1][2] * max1; - if (a < b) { - min2new += a; - max2new += b; - } else { - min2new += b; - max2new += a; - } - a = M[2][2] * min2; - b = M[2][2] * max2; - if (a < b) { - min2new += a; - max2new += b; - } else { - min2new += b; - max2new += a; - } - - Box< Vec3 > xbbox; - - xbbox.min[0] = min0new; - xbbox.max[0] = max0new; - xbbox.min[1] = min1new; - xbbox.max[1] = max1new; - xbbox.min[2] = min2new; - xbbox.max[2] = max2new; - - return xbbox; -} - - -template -bool findEntryAndExitPoints(const Line3& line, - const Box >& box, - Vec3 &enterPoint, - Vec3 &exitPoint) -{ - if ( box.isEmpty() ) return false; - if ( line.distanceTo(box.center()) > box.size().length()/2. ) return false; - - Vec3 points[8], inter, bary; - Plane3 plane; - int i, v0, v1, v2; - bool front = false, valid, validIntersection = false; - - // set up the eight coords of the corners of the box - for(i = 0; i < 8; i++) - { - points[i].setValue( i & 01 ? box.min[0] : box.max[0], - i & 02 ? box.min[1] : box.max[1], - i & 04 ? box.min[2] : box.max[2]); - } - - // intersect the 12 triangles. - for(i = 0; i < 12; i++) - { - switch(i) - { - case 0: v0 = 2; v1 = 1; v2 = 0; break; // +z - case 1: v0 = 2; v1 = 3; v2 = 1; break; - - case 2: v0 = 4; v1 = 5; v2 = 6; break; // -z - case 3: v0 = 6; v1 = 5; v2 = 7; break; - - case 4: v0 = 0; v1 = 6; v2 = 2; break; // -x - case 5: v0 = 0; v1 = 4; v2 = 6; break; - - case 6: v0 = 1; v1 = 3; v2 = 7; break; // +x - case 7: v0 = 1; v1 = 7; v2 = 5; break; - - case 8: v0 = 1; v1 = 4; v2 = 0; break; // -y - case 9: v0 = 1; v1 = 5; v2 = 4; break; - - case 10: v0 = 2; v1 = 7; v2 = 3; break; // +y - case 11: v0 = 2; v1 = 6; v2 = 7; break; - } - if((valid=intersect (line, points[v0], points[v1], points[v2], - inter, bary, front)) == true) - { - if(front == true) - { - enterPoint = inter; - validIntersection = valid; - } - else - { - exitPoint = inter; - validIntersection = valid; - } - } - } - return validIntersection; -} - -template -bool intersects(const Box< Vec3 > &box, - const Line3 &line, - Vec3 &result) -{ - /* - Fast Ray-Box Intersection - by Andrew Woo - from "Graphics Gems", Academic Press, 1990 - */ - - const int right = 0; - const int left = 1; - const int middle = 2; - - const Vec3 &minB = box.min; - const Vec3 &maxB = box.max; - const Vec3 &origin = line.pos; - const Vec3 &dir = line.dir; - - bool inside = true; - char quadrant[3]; - int whichPlane; - float maxT[3]; - float candidatePlane[3]; - - /* Find candidate planes; this loop can be avoided if - rays cast all from the eye(assume perpsective view) */ - for (int i=0; i<3; i++) - { - if(origin[i] < minB[i]) - { - quadrant[i] = left; - candidatePlane[i] = minB[i]; - inside = false; - } - else if (origin[i] > maxB[i]) - { - quadrant[i] = right; - candidatePlane[i] = maxB[i]; - inside = false; - } - else - { - quadrant[i] = middle; - } - } - - /* Ray origin inside bounding box */ - if ( inside ) - { - result = origin; - return true; - } - - - /* Calculate T distances to candidate planes */ - for (int i = 0; i < 3; i++) - { - if (quadrant[i] != middle && dir[i] !=0.) - { - maxT[i] = (candidatePlane[i]-origin[i]) / dir[i]; - } - else - { - maxT[i] = -1.; - } - } - - /* Get largest of the maxT's for final choice of intersection */ - whichPlane = 0; - - for (int i = 1; i < 3; i++) - { - if (maxT[whichPlane] < maxT[i]) - { - whichPlane = i; - } - } - - /* Check final candidate actually inside box */ - if (maxT[whichPlane] < 0.) return false; - - for (int i = 0; i < 3; i++) - { - if (whichPlane != i) - { - result[i] = origin[i] + maxT[whichPlane] *dir[i]; - - if ((quadrant[i] == right && result[i] < minB[i]) || - (quadrant[i] == left && result[i] > maxB[i])) - { - return false; /* outside box */ - } - } - else - { - result[i] = candidatePlane[i]; - } - } - - return true; -} - -template -bool intersects(const Box< Vec3 > &box, const Line3 &line) -{ - Vec3 ignored; - return intersects(box,line,ignored); -} - - -} // namespace Imath - -#endif diff --git a/3rdparty/include/OpenEXR/ImathColor.h b/3rdparty/include/OpenEXR/ImathColor.h deleted file mode 100644 index 605f10b59..000000000 --- a/3rdparty/include/OpenEXR/ImathColor.h +++ /dev/null @@ -1,734 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHCOLOR_H -#define INCLUDED_IMATHCOLOR_H - -//---------------------------------------------------- -// -// A three and four component color class template. -// -//---------------------------------------------------- - -#include "ImathVec.h" -#include "half.h" - -namespace Imath { - - -template -class Color3: public Vec3 -{ - public: - - //------------- - // Constructors - //------------- - - Color3 (); // no initialization - explicit Color3 (T a); // (a a a) - Color3 (T a, T b, T c); // (a b c) - - - //--------------------------------- - // Copy constructors and assignment - //--------------------------------- - - Color3 (const Color3 &c); - template Color3 (const Vec3 &v); - - const Color3 & operator = (const Color3 &c); - - - //------------------------ - // Component-wise addition - //------------------------ - - const Color3 & operator += (const Color3 &c); - Color3 operator + (const Color3 &c) const; - - - //--------------------------- - // Component-wise subtraction - //--------------------------- - - const Color3 & operator -= (const Color3 &c); - Color3 operator - (const Color3 &c) const; - - - //------------------------------------ - // Component-wise multiplication by -1 - //------------------------------------ - - Color3 operator - () const; - const Color3 & negate (); - - - //------------------------------ - // Component-wise multiplication - //------------------------------ - - const Color3 & operator *= (const Color3 &c); - const Color3 & operator *= (T a); - Color3 operator * (const Color3 &c) const; - Color3 operator * (T a) const; - - - //------------------------ - // Component-wise division - //------------------------ - - const Color3 & operator /= (const Color3 &c); - const Color3 & operator /= (T a); - Color3 operator / (const Color3 &c) const; - Color3 operator / (T a) const; -}; - -template class Color4 -{ - public: - - //------------------- - // Access to elements - //------------------- - - T r, g, b, a; - - T & operator [] (int i); - const T & operator [] (int i) const; - - - //------------- - // Constructors - //------------- - - Color4 (); // no initialization - explicit Color4 (T a); // (a a a a) - Color4 (T a, T b, T c, T d); // (a b c d) - - - //--------------------------------- - // Copy constructors and assignment - //--------------------------------- - - Color4 (const Color4 &v); - template Color4 (const Color4 &v); - - const Color4 & operator = (const Color4 &v); - - - //---------------------- - // Compatibility with Sb - //---------------------- - - template - void setValue (S a, S b, S c, S d); - - template - void setValue (const Color4 &v); - - template - void getValue (S &a, S &b, S &c, S &d) const; - - template - void getValue (Color4 &v) const; - - T * getValue(); - const T * getValue() const; - - - //--------- - // Equality - //--------- - - template - bool operator == (const Color4 &v) const; - - template - bool operator != (const Color4 &v) const; - - - //------------------------ - // Component-wise addition - //------------------------ - - const Color4 & operator += (const Color4 &v); - Color4 operator + (const Color4 &v) const; - - - //--------------------------- - // Component-wise subtraction - //--------------------------- - - const Color4 & operator -= (const Color4 &v); - Color4 operator - (const Color4 &v) const; - - - //------------------------------------ - // Component-wise multiplication by -1 - //------------------------------------ - - Color4 operator - () const; - const Color4 & negate (); - - - //------------------------------ - // Component-wise multiplication - //------------------------------ - - const Color4 & operator *= (const Color4 &v); - const Color4 & operator *= (T a); - Color4 operator * (const Color4 &v) const; - Color4 operator * (T a) const; - - - //------------------------ - // Component-wise division - //------------------------ - - const Color4 & operator /= (const Color4 &v); - const Color4 & operator /= (T a); - Color4 operator / (const Color4 &v) const; - Color4 operator / (T a) const; - - - //---------------------------------------------------------- - // Number of dimensions, i.e. number of elements in a Color4 - //---------------------------------------------------------- - - static unsigned int dimensions() {return 4;} - - - //------------------------------------------------- - // Limitations of type T (see also class limits) - //------------------------------------------------- - - static T baseTypeMin() {return limits::min();} - static T baseTypeMax() {return limits::max();} - static T baseTypeSmallest() {return limits::smallest();} - static T baseTypeEpsilon() {return limits::epsilon();} - - - //-------------------------------------------------------------- - // Base type -- in templates, which accept a parameter, V, which - // could be a Color4, you can refer to T as - // V::BaseType - //-------------------------------------------------------------- - - typedef T BaseType; -}; - -//-------------- -// Stream output -//-------------- - -template -std::ostream & operator << (std::ostream &s, const Color4 &v); - -//---------------------------------------------------- -// Reverse multiplication: S * Color4 -//---------------------------------------------------- - -template Color4 operator * (S a, const Color4 &v); - -//------------------------- -// Typedefs for convenience -//------------------------- - -typedef Color3 Color3f; -typedef Color3 Color3h; -typedef Color3 Color3c; -typedef Color3 C3h; -typedef Color3 C3f; -typedef Color3 C3c; -typedef Color4 Color4f; -typedef Color4 Color4h; -typedef Color4 Color4c; -typedef Color4 C4f; -typedef Color4 C4h; -typedef Color4 C4c; -typedef unsigned int PackedColor; - - -//------------------------- -// Implementation of Color3 -//------------------------- - -template -inline -Color3::Color3 (): Vec3 () -{ - // empty -} - -template -inline -Color3::Color3 (T a): Vec3 (a) -{ - // empty -} - -template -inline -Color3::Color3 (T a, T b, T c): Vec3 (a, b, c) -{ - // empty -} - -template -inline -Color3::Color3 (const Color3 &c): Vec3 (c) -{ - // empty -} - -template -template -inline -Color3::Color3 (const Vec3 &v): Vec3 (v) -{ - //empty -} - -template -inline const Color3 & -Color3::operator = (const Color3 &c) -{ - *((Vec3 *) this) = c; - return *this; -} - -template -inline const Color3 & -Color3::operator += (const Color3 &c) -{ - *((Vec3 *) this) += c; - return *this; -} - -template -inline Color3 -Color3::operator + (const Color3 &c) const -{ - return Color3 (*(Vec3 *)this + (const Vec3 &)c); -} - -template -inline const Color3 & -Color3::operator -= (const Color3 &c) -{ - *((Vec3 *) this) -= c; - return *this; -} - -template -inline Color3 -Color3::operator - (const Color3 &c) const -{ - return Color3 (*(Vec3 *)this - (const Vec3 &)c); -} - -template -inline Color3 -Color3::operator - () const -{ - return Color3 (-(*(Vec3 *)this)); -} - -template -inline const Color3 & -Color3::negate () -{ - ((Vec3 *) this)->negate(); - return *this; -} - -template -inline const Color3 & -Color3::operator *= (const Color3 &c) -{ - *((Vec3 *) this) *= c; - return *this; -} - -template -inline const Color3 & -Color3::operator *= (T a) -{ - *((Vec3 *) this) *= a; - return *this; -} - -template -inline Color3 -Color3::operator * (const Color3 &c) const -{ - return Color3 (*(Vec3 *)this * (const Vec3 &)c); -} - -template -inline Color3 -Color3::operator * (T a) const -{ - return Color3 (*(Vec3 *)this * a); -} - -template -inline const Color3 & -Color3::operator /= (const Color3 &c) -{ - *((Vec3 *) this) /= c; - return *this; -} - -template -inline const Color3 & -Color3::operator /= (T a) -{ - *((Vec3 *) this) /= a; - return *this; -} - -template -inline Color3 -Color3::operator / (const Color3 &c) const -{ - return Color3 (*(Vec3 *)this / (const Vec3 &)c); -} - -template -inline Color3 -Color3::operator / (T a) const -{ - return Color3 (*(Vec3 *)this / a); -} - -//----------------------- -// Implementation of Color4 -//----------------------- - -template -inline T & -Color4::operator [] (int i) -{ - return (&r)[i]; -} - -template -inline const T & -Color4::operator [] (int i) const -{ - return (&r)[i]; -} - -template -inline -Color4::Color4 () -{ - // empty -} - -template -inline -Color4::Color4 (T x) -{ - r = g = b = a = x; -} - -template -inline -Color4::Color4 (T x, T y, T z, T w) -{ - r = x; - g = y; - b = z; - a = w; -} - -template -inline -Color4::Color4 (const Color4 &v) -{ - r = v.r; - g = v.g; - b = v.b; - a = v.a; -} - -template -template -inline -Color4::Color4 (const Color4 &v) -{ - r = T (v.r); - g = T (v.g); - b = T (v.b); - a = T (v.a); -} - -template -inline const Color4 & -Color4::operator = (const Color4 &v) -{ - r = v.r; - g = v.g; - b = v.b; - a = v.a; - return *this; -} - -template -template -inline void -Color4::setValue (S x, S y, S z, S w) -{ - r = T (x); - g = T (y); - b = T (z); - a = T (w); -} - -template -template -inline void -Color4::setValue (const Color4 &v) -{ - r = T (v.r); - g = T (v.g); - b = T (v.b); - a = T (v.a); -} - -template -template -inline void -Color4::getValue (S &x, S &y, S &z, S &w) const -{ - x = S (r); - y = S (g); - z = S (b); - w = S (a); -} - -template -template -inline void -Color4::getValue (Color4 &v) const -{ - v.r = S (r); - v.g = S (g); - v.b = S (b); - v.a = S (a); -} - -template -inline T * -Color4::getValue() -{ - return (T *) &r; -} - -template -inline const T * -Color4::getValue() const -{ - return (const T *) &r; -} - -template -template -inline bool -Color4::operator == (const Color4 &v) const -{ - return r == v.r && g == v.g && b == v.b && a == v.a; -} - -template -template -inline bool -Color4::operator != (const Color4 &v) const -{ - return r != v.r || g != v.g || b != v.b || a != v.a; -} - -template -inline const Color4 & -Color4::operator += (const Color4 &v) -{ - r += v.r; - g += v.g; - b += v.b; - a += v.a; - return *this; -} - -template -inline Color4 -Color4::operator + (const Color4 &v) const -{ - return Color4 (r + v.r, g + v.g, b + v.b, a + v.a); -} - -template -inline const Color4 & -Color4::operator -= (const Color4 &v) -{ - r -= v.r; - g -= v.g; - b -= v.b; - a -= v.a; - return *this; -} - -template -inline Color4 -Color4::operator - (const Color4 &v) const -{ - return Color4 (r - v.r, g - v.g, b - v.b, a - v.a); -} - -template -inline Color4 -Color4::operator - () const -{ - return Color4 (-r, -g, -b, -a); -} - -template -inline const Color4 & -Color4::negate () -{ - r = -r; - g = -g; - b = -b; - a = -a; - return *this; -} - -template -inline const Color4 & -Color4::operator *= (const Color4 &v) -{ - r *= v.r; - g *= v.g; - b *= v.b; - a *= v.a; - return *this; -} - -template -inline const Color4 & -Color4::operator *= (T x) -{ - r *= x; - g *= x; - b *= x; - a *= x; - return *this; -} - -template -inline Color4 -Color4::operator * (const Color4 &v) const -{ - return Color4 (r * v.r, g * v.g, b * v.b, a * v.a); -} - -template -inline Color4 -Color4::operator * (T x) const -{ - return Color4 (r * x, g * x, b * x, a * x); -} - -template -inline const Color4 & -Color4::operator /= (const Color4 &v) -{ - r /= v.r; - g /= v.g; - b /= v.b; - a /= v.a; - return *this; -} - -template -inline const Color4 & -Color4::operator /= (T x) -{ - r /= x; - g /= x; - b /= x; - a /= x; - return *this; -} - -template -inline Color4 -Color4::operator / (const Color4 &v) const -{ - return Color4 (r / v.r, g / v.g, b / v.b, a / v.a); -} - -template -inline Color4 -Color4::operator / (T x) const -{ - return Color4 (r / x, g / x, b / x, a / x); -} - - -template -std::ostream & -operator << (std::ostream &s, const Color4 &v) -{ - return s << '(' << v.r << ' ' << v.g << ' ' << v.b << ' ' << v.a << ')'; -} - -//----------------------------------------- -// Implementation of reverse multiplication -//----------------------------------------- - -template -inline Color4 -operator * (S x, const Color4 &v) -{ - return Color4 (x * v.r, x * v.g, x * v.b, x * v.a); -} - -} // namespace Imath - -#endif diff --git a/3rdparty/include/OpenEXR/ImathColorAlgo.h b/3rdparty/include/OpenEXR/ImathColorAlgo.h deleted file mode 100644 index bd4652aba..000000000 --- a/3rdparty/include/OpenEXR/ImathColorAlgo.h +++ /dev/null @@ -1,256 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHCOLORALGO_H -#define INCLUDED_IMATHCOLORALGO_H - - -#include "ImathColor.h" -#include "ImathMath.h" -#include "ImathLimits.h" - -namespace Imath { - - -// -// Non-templated helper routines for color conversion. -// These routines eliminate type warnings under g++. -// - -Vec3 hsv2rgb_d(const Vec3 &hsv); - -Color4 hsv2rgb_d(const Color4 &hsv); - - -Vec3 rgb2hsv_d(const Vec3 &rgb); - -Color4 rgb2hsv_d(const Color4 &rgb); - - -// -// Color conversion functions and general color algorithms -// -// hsv2rgb(), rgb2hsv(), rgb2packed(), packed2rgb() -// see each funtion definition for details. -// - -template -Vec3 -hsv2rgb(const Vec3 &hsv) -{ - if ( limits::isIntegral() ) - { - Vec3 v = Vec3(hsv.x / double(limits::max()), - hsv.y / double(limits::max()), - hsv.z / double(limits::max())); - Vec3 c = hsv2rgb_d(v); - return Vec3((T) (c.x * limits::max()), - (T) (c.y * limits::max()), - (T) (c.z * limits::max())); - } - else - { - Vec3 v = Vec3(hsv.x, hsv.y, hsv.z); - Vec3 c = hsv2rgb_d(v); - return Vec3((T) c.x, (T) c.y, (T) c.z); - } -} - - -template -Color4 -hsv2rgb(const Color4 &hsv) -{ - if ( limits::isIntegral() ) - { - Color4 v = Color4(hsv.r / float(limits::max()), - hsv.g / float(limits::max()), - hsv.b / float(limits::max()), - hsv.a / float(limits::max())); - Color4 c = hsv2rgb_d(v); - return Color4((T) (c.r * limits::max()), - (T) (c.g * limits::max()), - (T) (c.b * limits::max()), - (T) (c.a * limits::max())); - } - else - { - Color4 v = Color4(hsv.r, hsv.g, hsv.g, hsv.a); - Color4 c = hsv2rgb_d(v); - return Color4((T) c.r, (T) c.g, (T) c.b, (T) c.a); - } -} - - -template -Vec3 -rgb2hsv(const Vec3 &rgb) -{ - if ( limits::isIntegral() ) - { - Vec3 v = Vec3(rgb.x / double(limits::max()), - rgb.y / double(limits::max()), - rgb.z / double(limits::max())); - Vec3 c = rgb2hsv_d(v); - return Vec3((T) (c.x * limits::max()), - (T) (c.y * limits::max()), - (T) (c.z * limits::max())); - } - else - { - Vec3 v = Vec3(rgb.x, rgb.y, rgb.z); - Vec3 c = rgb2hsv_d(v); - return Vec3((T) c.x, (T) c.y, (T) c.z); - } -} - - -template -Color4 -rgb2hsv(const Color4 &rgb) -{ - if ( limits::isIntegral() ) - { - Color4 v = Color4(rgb.r / float(limits::max()), - rgb.g / float(limits::max()), - rgb.b / float(limits::max()), - rgb.a / float(limits::max())); - Color4 c = rgb2hsv_d(v); - return Color4((T) (c.r * limits::max()), - (T) (c.g * limits::max()), - (T) (c.b * limits::max()), - (T) (c.a * limits::max())); - } - else - { - Color4 v = Color4(rgb.r, rgb.g, rgb.g, rgb.a); - Color4 c = rgb2hsv_d(v); - return Color4((T) c.r, (T) c.g, (T) c.b, (T) c.a); - } -} - -template -PackedColor -rgb2packed(const Vec3 &c) -{ - if ( limits::isIntegral() ) - { - float x = c.x / float(limits::max()); - float y = c.y / float(limits::max()); - float z = c.z / float(limits::max()); - return rgb2packed( V3f(x,y,z) ); - } - else - { - return ( (PackedColor) (c.x * 255) | - (((PackedColor) (c.y * 255)) << 8) | - (((PackedColor) (c.z * 255)) << 16) | 0xFF000000 ); - } -} - -template -PackedColor -rgb2packed(const Color4 &c) -{ - if ( limits::isIntegral() ) - { - float r = c.r / float(limits::max()); - float g = c.g / float(limits::max()); - float b = c.b / float(limits::max()); - float a = c.a / float(limits::max()); - return rgb2packed( C4f(r,g,b,a) ); - } - else - { - return ( (PackedColor) (c.r * 255) | - (((PackedColor) (c.g * 255)) << 8) | - (((PackedColor) (c.b * 255)) << 16) | - (((PackedColor) (c.a * 255)) << 24)); - } -} - -// -// This guy can't return the result because the template -// parameter would not be in the function signiture. So instead, -// its passed in as an argument. -// - -template -void -packed2rgb(PackedColor packed, Vec3 &out) -{ - if ( limits::isIntegral() ) - { - T f = limits::max() / ((PackedColor)0xFF); - out.x = (packed & 0xFF) * f; - out.y = ((packed & 0xFF00) >> 8) * f; - out.z = ((packed & 0xFF0000) >> 16) * f; - } - else - { - T f = T(1) / T(255); - out.x = (packed & 0xFF) * f; - out.y = ((packed & 0xFF00) >> 8) * f; - out.z = ((packed & 0xFF0000) >> 16) * f; - } -} - -template -void -packed2rgb(PackedColor packed, Color4 &out) -{ - if ( limits::isIntegral() ) - { - T f = limits::max() / ((PackedColor)0xFF); - out.r = (packed & 0xFF) * f; - out.g = ((packed & 0xFF00) >> 8) * f; - out.b = ((packed & 0xFF0000) >> 16) * f; - out.a = ((packed & 0xFF000000) >> 24) * f; - } - else - { - T f = T(1) / T(255); - out.r = (packed & 0xFF) * f; - out.g = ((packed & 0xFF00) >> 8) * f; - out.b = ((packed & 0xFF0000) >> 16) * f; - out.a = ((packed & 0xFF000000) >> 24) * f; - } -} - - -} // namespace Imath - -#endif diff --git a/3rdparty/include/OpenEXR/ImathEuler.h b/3rdparty/include/OpenEXR/ImathEuler.h deleted file mode 100644 index 8d29454ce..000000000 --- a/3rdparty/include/OpenEXR/ImathEuler.h +++ /dev/null @@ -1,903 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHEULER_H -#define INCLUDED_IMATHEULER_H - -//---------------------------------------------------------------------- -// -// template class Euler -// -// This class represents euler angle orientations. The class -// inherits from Vec3 to it can be freely cast. The additional -// information is the euler priorities rep. This class is -// essentially a rip off of Ken Shoemake's GemsIV code. It has -// been modified minimally to make it more understandable, but -// hardly enough to make it easy to grok completely. -// -// There are 24 possible combonations of Euler angle -// representations of which 12 are common in CG and you will -// probably only use 6 of these which in this scheme are the -// non-relative-non-repeating types. -// -// The representations can be partitioned according to two -// criteria: -// -// 1) Are the angles measured relative to a set of fixed axis -// or relative to each other (the latter being what happens -// when rotation matrices are multiplied together and is -// almost ubiquitous in the cg community) -// -// 2) Is one of the rotations repeated (ala XYX rotation) -// -// When you construct a given representation from scratch you -// must order the angles according to their priorities. So, the -// easiest is a softimage or aerospace (yaw/pitch/roll) ordering -// of ZYX. -// -// float x_rot = 1; -// float y_rot = 2; -// float z_rot = 3; -// -// Eulerf angles(z_rot, y_rot, x_rot, Eulerf::ZYX); -// -or- -// Eulerf angles( V3f(z_rot,y_rot,z_rot), Eulerf::ZYX ); -// -// If instead, the order was YXZ for instance you would have to -// do this: -// -// float x_rot = 1; -// float y_rot = 2; -// float z_rot = 3; -// -// Eulerf angles(y_rot, x_rot, z_rot, Eulerf::YXZ); -// -or- -// Eulerf angles( V3f(y_rot,x_rot,z_rot), Eulerf::YXZ ); -// -// Notice how the order you put the angles into the three slots -// should correspond to the enum (YXZ) ordering. The input angle -// vector is called the "ijk" vector -- not an "xyz" vector. The -// ijk vector order is the same as the enum. If you treat the -// Euler<> as a Vec<> (which it inherts from) you will find the -// angles are ordered in the same way, i.e.: -// -// V3f v = angles; -// // v.x == y_rot, v.y == x_rot, v.z == z_rot -// -// If you just want the x, y, and z angles stored in a vector in -// that order, you can do this: -// -// V3f v = angles.toXYZVector() -// // v.x == x_rot, v.y == y_rot, v.z == z_rot -// -// If you want to set the Euler with an XYZVector use the -// optional layout argument: -// -// Eulerf angles(x_rot, y_rot, z_rot, -// Eulerf::YXZ, -// Eulerf::XYZLayout); -// -// This is the same as: -// -// Eulerf angles(y_rot, x_rot, z_rot, Eulerf::YXZ); -// -// Note that this won't do anything intelligent if you have a -// repeated axis in the euler angles (e.g. XYX) -// -// If you need to use the "relative" versions of these, you will -// need to use the "r" enums. -// -// The units of the rotation angles are assumed to be radians. -// -//---------------------------------------------------------------------- - - -#include "ImathMath.h" -#include "ImathVec.h" -#include "ImathQuat.h" -#include "ImathMatrix.h" -#include "ImathLimits.h" -#include - -namespace Imath { - -#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER -// Disable MS VC++ warnings about conversion from double to float -#pragma warning(disable:4244) -#endif - -template -class Euler : public Vec3 -{ - public: - - using Vec3::x; - using Vec3::y; - using Vec3::z; - - enum Order - { - // - // All 24 possible orderings - // - - XYZ = 0x0101, // "usual" orderings - XZY = 0x0001, - YZX = 0x1101, - YXZ = 0x1001, - ZXY = 0x2101, - ZYX = 0x2001, - - XZX = 0x0011, // first axis repeated - XYX = 0x0111, - YXY = 0x1011, - YZY = 0x1111, - ZYZ = 0x2011, - ZXZ = 0x2111, - - XYZr = 0x2000, // relative orderings -- not common - XZYr = 0x2100, - YZXr = 0x1000, - YXZr = 0x1100, - ZXYr = 0x0000, - ZYXr = 0x0100, - - XZXr = 0x2110, // relative first axis repeated - XYXr = 0x2010, - YXYr = 0x1110, - YZYr = 0x1010, - ZYZr = 0x0110, - ZXZr = 0x0010, - // |||| - // VVVV - // Legend: ABCD - // A -> Initial Axis (0==x, 1==y, 2==z) - // B -> Parity Even (1==true) - // C -> Initial Repeated (1==true) - // D -> Frame Static (1==true) - // - - Legal = XYZ | XZY | YZX | YXZ | ZXY | ZYX | - XZX | XYX | YXY | YZY | ZYZ | ZXZ | - XYZr| XZYr| YZXr| YXZr| ZXYr| ZYXr| - XZXr| XYXr| YXYr| YZYr| ZYZr| ZXZr, - - Min = 0x0000, - Max = 0x2111, - Default = XYZ - }; - - enum Axis { X = 0, Y = 1, Z = 2 }; - - enum InputLayout { XYZLayout, IJKLayout }; - - //---------------------------------------------------------------- - // Constructors -- all default to ZYX non-relative ala softimage - // (where there is no argument to specify it) - //---------------------------------------------------------------- - - Euler(); - Euler(const Euler&); - Euler(Order p); - Euler(const Vec3 &v, Order o = Default, InputLayout l = IJKLayout); - Euler(T i, T j, T k, Order o = Default, InputLayout l = IJKLayout); - Euler(const Euler &euler, Order newp); - Euler(const Matrix33 &, Order o = Default); - Euler(const Matrix44 &, Order o = Default); - - //--------------------------------- - // Algebraic functions/ Operators - //--------------------------------- - - const Euler& operator= (const Euler&); - const Euler& operator= (const Vec3&); - - //-------------------------------------------------------- - // Set the euler value - // This does NOT convert the angles, but setXYZVector() - // does reorder the input vector. - //-------------------------------------------------------- - - static bool legal(Order); - - void setXYZVector(const Vec3 &); - - Order order() const; - void setOrder(Order); - - void set(Axis initial, - bool relative, - bool parityEven, - bool firstRepeats); - - //--------------------------------------------------------- - // Conversions, toXYZVector() reorders the angles so that - // the X rotation comes first, followed by the Y and Z - // in cases like XYX ordering, the repeated angle will be - // in the "z" component - //--------------------------------------------------------- - - void extract(const Matrix33&); - void extract(const Matrix44&); - void extract(const Quat&); - - Matrix33 toMatrix33() const; - Matrix44 toMatrix44() const; - Quat toQuat() const; - Vec3 toXYZVector() const; - - //--------------------------------------------------- - // Use this function to unpack angles from ijk form - //--------------------------------------------------- - - void angleOrder(int &i, int &j, int &k) const; - - //--------------------------------------------------- - // Use this function to determine mapping from xyz to ijk - // - reshuffles the xyz to match the order - //--------------------------------------------------- - - void angleMapping(int &i, int &j, int &k) const; - - //---------------------------------------------------------------------- - // - // Utility methods for getting continuous rotations. None of these - // methods change the orientation given by its inputs (or at least - // that is the intent). - // - // angleMod() converts an angle to its equivalent in [-PI, PI] - // - // simpleXYZRotation() adjusts xyzRot so that its components differ - // from targetXyzRot by no more than +-PI - // - // nearestRotation() adjusts xyzRot so that its components differ - // from targetXyzRot by as little as possible. - // Note that xyz here really means ijk, because - // the order must be provided. - // - // makeNear() adjusts "this" Euler so that its components differ - // from target by as little as possible. This method - // might not make sense for Eulers with different order - // and it probably doesn't work for repeated axis and - // relative orderings (TODO). - // - //----------------------------------------------------------------------- - - static float angleMod (T angle); - static void simpleXYZRotation (Vec3 &xyzRot, - const Vec3 &targetXyzRot); - static void nearestRotation (Vec3 &xyzRot, - const Vec3 &targetXyzRot, - Order order = XYZ); - - void makeNear (const Euler &target); - - bool frameStatic() const { return _frameStatic; } - bool initialRepeated() const { return _initialRepeated; } - bool parityEven() const { return _parityEven; } - Axis initialAxis() const { return _initialAxis; } - - protected: - - bool _frameStatic : 1; // relative or static rotations - bool _initialRepeated : 1; // init axis repeated as last - bool _parityEven : 1; // "parity of axis permutation" -#if defined _WIN32 || defined _WIN64 - Axis _initialAxis ; // First axis of rotation -#else - Axis _initialAxis : 2; // First axis of rotation -#endif -}; - - -//-------------------- -// Convenient typedefs -//-------------------- - -typedef Euler Eulerf; -typedef Euler Eulerd; - - -//--------------- -// Implementation -//--------------- - -template -inline void - Euler::angleOrder(int &i, int &j, int &k) const -{ - i = _initialAxis; - j = _parityEven ? (i+1)%3 : (i > 0 ? i-1 : 2); - k = _parityEven ? (i > 0 ? i-1 : 2) : (i+1)%3; -} - -template -inline void - Euler::angleMapping(int &i, int &j, int &k) const -{ - int m[3]; - - m[_initialAxis] = 0; - m[(_initialAxis+1) % 3] = _parityEven ? 1 : 2; - m[(_initialAxis+2) % 3] = _parityEven ? 2 : 1; - i = m[0]; - j = m[1]; - k = m[2]; -} - -template -inline void -Euler::setXYZVector(const Vec3 &v) -{ - int i,j,k; - angleMapping(i,j,k); - (*this)[i] = v.x; - (*this)[j] = v.y; - (*this)[k] = v.z; -} - -template -inline Vec3 -Euler::toXYZVector() const -{ - int i,j,k; - angleMapping(i,j,k); - return Vec3((*this)[i],(*this)[j],(*this)[k]); -} - - -template -Euler::Euler() : - Vec3(0,0,0), - _frameStatic(true), - _initialRepeated(false), - _parityEven(true), - _initialAxis(X) -{} - -template -Euler::Euler(typename Euler::Order p) : - Vec3(0,0,0), - _frameStatic(true), - _initialRepeated(false), - _parityEven(true), - _initialAxis(X) -{ - setOrder(p); -} - -template -inline Euler::Euler( const Vec3 &v, - typename Euler::Order p, - typename Euler::InputLayout l ) -{ - setOrder(p); - if ( l == XYZLayout ) setXYZVector(v); - else { x = v.x; y = v.y; z = v.z; } -} - -template -inline Euler::Euler(const Euler &euler) -{ - operator=(euler); -} - -template -inline Euler::Euler(const Euler &euler,Order p) -{ - setOrder(p); - Matrix33 M = euler.toMatrix33(); - extract(M); -} - -template -inline Euler::Euler( T xi, T yi, T zi, - typename Euler::Order p, - typename Euler::InputLayout l) -{ - setOrder(p); - if ( l == XYZLayout ) setXYZVector(Vec3(xi,yi,zi)); - else { x = xi; y = yi; z = zi; } -} - -template -inline Euler::Euler( const Matrix33 &M, typename Euler::Order p ) -{ - setOrder(p); - extract(M); -} - -template -inline Euler::Euler( const Matrix44 &M, typename Euler::Order p ) -{ - setOrder(p); - extract(M); -} - -template -inline void Euler::extract(const Quat &q) -{ - extract(q.toMatrix33()); -} - -template -void Euler::extract(const Matrix33 &M) -{ - int i,j,k; - angleOrder(i,j,k); - - if (_initialRepeated) - { - // - // Extract the first angle, x. - // - - x = Math::atan2 (M[j][i], M[k][i]); - - // - // Remove the x rotation from M, so that the remaining - // rotation, N, is only around two axes, and gimbal lock - // cannot occur. - // - - Vec3 r (0, 0, 0); - r[i] = (_parityEven? -x: x); - - Matrix44 N; - N.rotate (r); - - N = N * Matrix44 (M[0][0], M[0][1], M[0][2], 0, - M[1][0], M[1][1], M[1][2], 0, - M[2][0], M[2][1], M[2][2], 0, - 0, 0, 0, 1); - // - // Extract the other two angles, y and z, from N. - // - - T sy = Math::sqrt (N[j][i]*N[j][i] + N[k][i]*N[k][i]); - y = Math::atan2 (sy, N[i][i]); - z = Math::atan2 (N[j][k], N[j][j]); - } - else - { - // - // Extract the first angle, x. - // - - x = Math::atan2 (M[j][k], M[k][k]); - - // - // Remove the x rotation from M, so that the remaining - // rotation, N, is only around two axes, and gimbal lock - // cannot occur. - // - - Vec3 r (0, 0, 0); - r[i] = (_parityEven? -x: x); - - Matrix44 N; - N.rotate (r); - - N = N * Matrix44 (M[0][0], M[0][1], M[0][2], 0, - M[1][0], M[1][1], M[1][2], 0, - M[2][0], M[2][1], M[2][2], 0, - 0, 0, 0, 1); - // - // Extract the other two angles, y and z, from N. - // - - T cy = Math::sqrt (N[i][i]*N[i][i] + N[i][j]*N[i][j]); - y = Math::atan2 (-N[i][k], cy); - z = Math::atan2 (-N[j][i], N[j][j]); - } - - if (!_parityEven) - *this *= -1; - - if (!_frameStatic) - { - T t = x; - x = z; - z = t; - } -} - -template -void Euler::extract(const Matrix44 &M) -{ - int i,j,k; - angleOrder(i,j,k); - - if (_initialRepeated) - { - // - // Extract the first angle, x. - // - - x = Math::atan2 (M[j][i], M[k][i]); - - // - // Remove the x rotation from M, so that the remaining - // rotation, N, is only around two axes, and gimbal lock - // cannot occur. - // - - Vec3 r (0, 0, 0); - r[i] = (_parityEven? -x: x); - - Matrix44 N; - N.rotate (r); - N = N * M; - - // - // Extract the other two angles, y and z, from N. - // - - T sy = Math::sqrt (N[j][i]*N[j][i] + N[k][i]*N[k][i]); - y = Math::atan2 (sy, N[i][i]); - z = Math::atan2 (N[j][k], N[j][j]); - } - else - { - // - // Extract the first angle, x. - // - - x = Math::atan2 (M[j][k], M[k][k]); - - // - // Remove the x rotation from M, so that the remaining - // rotation, N, is only around two axes, and gimbal lock - // cannot occur. - // - - Vec3 r (0, 0, 0); - r[i] = (_parityEven? -x: x); - - Matrix44 N; - N.rotate (r); - N = N * M; - - // - // Extract the other two angles, y and z, from N. - // - - T cy = Math::sqrt (N[i][i]*N[i][i] + N[i][j]*N[i][j]); - y = Math::atan2 (-N[i][k], cy); - z = Math::atan2 (-N[j][i], N[j][j]); - } - - if (!_parityEven) - *this *= -1; - - if (!_frameStatic) - { - T t = x; - x = z; - z = t; - } -} - -template -Matrix33 Euler::toMatrix33() const -{ - int i,j,k; - angleOrder(i,j,k); - - Vec3 angles; - - if ( _frameStatic ) angles = (*this); - else angles = Vec3(z,y,x); - - if ( !_parityEven ) angles *= -1.0; - - T ci = Math::cos(angles.x); - T cj = Math::cos(angles.y); - T ch = Math::cos(angles.z); - T si = Math::sin(angles.x); - T sj = Math::sin(angles.y); - T sh = Math::sin(angles.z); - - T cc = ci*ch; - T cs = ci*sh; - T sc = si*ch; - T ss = si*sh; - - Matrix33 M; - - if ( _initialRepeated ) - { - M[i][i] = cj; M[j][i] = sj*si; M[k][i] = sj*ci; - M[i][j] = sj*sh; M[j][j] = -cj*ss+cc; M[k][j] = -cj*cs-sc; - M[i][k] = -sj*ch; M[j][k] = cj*sc+cs; M[k][k] = cj*cc-ss; - } - else - { - M[i][i] = cj*ch; M[j][i] = sj*sc-cs; M[k][i] = sj*cc+ss; - M[i][j] = cj*sh; M[j][j] = sj*ss+cc; M[k][j] = sj*cs-sc; - M[i][k] = -sj; M[j][k] = cj*si; M[k][k] = cj*ci; - } - - return M; -} - -template -Matrix44 Euler::toMatrix44() const -{ - int i,j,k; - angleOrder(i,j,k); - - Vec3 angles; - - if ( _frameStatic ) angles = (*this); - else angles = Vec3(z,y,x); - - if ( !_parityEven ) angles *= -1.0; - - T ci = Math::cos(angles.x); - T cj = Math::cos(angles.y); - T ch = Math::cos(angles.z); - T si = Math::sin(angles.x); - T sj = Math::sin(angles.y); - T sh = Math::sin(angles.z); - - T cc = ci*ch; - T cs = ci*sh; - T sc = si*ch; - T ss = si*sh; - - Matrix44 M; - - if ( _initialRepeated ) - { - M[i][i] = cj; M[j][i] = sj*si; M[k][i] = sj*ci; - M[i][j] = sj*sh; M[j][j] = -cj*ss+cc; M[k][j] = -cj*cs-sc; - M[i][k] = -sj*ch; M[j][k] = cj*sc+cs; M[k][k] = cj*cc-ss; - } - else - { - M[i][i] = cj*ch; M[j][i] = sj*sc-cs; M[k][i] = sj*cc+ss; - M[i][j] = cj*sh; M[j][j] = sj*ss+cc; M[k][j] = sj*cs-sc; - M[i][k] = -sj; M[j][k] = cj*si; M[k][k] = cj*ci; - } - - return M; -} - -template -Quat Euler::toQuat() const -{ - Vec3 angles; - int i,j,k; - angleOrder(i,j,k); - - if ( _frameStatic ) angles = (*this); - else angles = Vec3(z,y,x); - - if ( !_parityEven ) angles.y = -angles.y; - - T ti = angles.x*0.5; - T tj = angles.y*0.5; - T th = angles.z*0.5; - T ci = Math::cos(ti); - T cj = Math::cos(tj); - T ch = Math::cos(th); - T si = Math::sin(ti); - T sj = Math::sin(tj); - T sh = Math::sin(th); - T cc = ci*ch; - T cs = ci*sh; - T sc = si*ch; - T ss = si*sh; - - T parity = _parityEven ? 1.0 : -1.0; - - Quat q; - Vec3 a; - - if ( _initialRepeated ) - { - a[i] = cj*(cs + sc); - a[j] = sj*(cc + ss) * parity, - a[k] = sj*(cs - sc); - q.r = cj*(cc - ss); - } - else - { - a[i] = cj*sc - sj*cs, - a[j] = (cj*ss + sj*cc) * parity, - a[k] = cj*cs - sj*sc; - q.r = cj*cc + sj*ss; - } - - q.v = a; - - return q; -} - -template -inline bool -Euler::legal(typename Euler::Order order) -{ - return (order & ~Legal) ? false : true; -} - -template -typename Euler::Order -Euler::order() const -{ - int foo = (_initialAxis == Z ? 0x2000 : (_initialAxis == Y ? 0x1000 : 0)); - - if (_parityEven) foo |= 0x0100; - if (_initialRepeated) foo |= 0x0010; - if (_frameStatic) foo++; - - return (Order)foo; -} - -template -inline void Euler::setOrder(typename Euler::Order p) -{ - set( p & 0x2000 ? Z : (p & 0x1000 ? Y : X), // initial axis - !(p & 0x1), // static? - !!(p & 0x100), // permutation even? - !!(p & 0x10)); // initial repeats? -} - -template -void Euler::set(typename Euler::Axis axis, - bool relative, - bool parityEven, - bool firstRepeats) -{ - _initialAxis = axis; - _frameStatic = !relative; - _parityEven = parityEven; - _initialRepeated = firstRepeats; -} - -template -const Euler& Euler::operator= (const Euler &euler) -{ - x = euler.x; - y = euler.y; - z = euler.z; - _initialAxis = euler._initialAxis; - _frameStatic = euler._frameStatic; - _parityEven = euler._parityEven; - _initialRepeated = euler._initialRepeated; - return *this; -} - -template -const Euler& Euler::operator= (const Vec3 &v) -{ - x = v.x; - y = v.y; - z = v.z; - return *this; -} - -template -std::ostream& operator << (std::ostream &o, const Euler &euler) -{ - char a[3] = { 'X', 'Y', 'Z' }; - - const char* r = euler.frameStatic() ? "" : "r"; - int i,j,k; - euler.angleOrder(i,j,k); - - if ( euler.initialRepeated() ) k = i; - - return o << "(" - << euler.x << " " - << euler.y << " " - << euler.z << " " - << a[i] << a[j] << a[k] << r << ")"; -} - -template -float -Euler::angleMod (T angle) -{ - angle = fmod(T (angle), T (2 * M_PI)); - - if (angle < -M_PI) angle += 2 * M_PI; - if (angle > +M_PI) angle -= 2 * M_PI; - - return angle; -} - -template -void -Euler::simpleXYZRotation (Vec3 &xyzRot, const Vec3 &targetXyzRot) -{ - Vec3 d = xyzRot - targetXyzRot; - xyzRot[0] = targetXyzRot[0] + angleMod(d[0]); - xyzRot[1] = targetXyzRot[1] + angleMod(d[1]); - xyzRot[2] = targetXyzRot[2] + angleMod(d[2]); -} - -template -void -Euler::nearestRotation (Vec3 &xyzRot, const Vec3 &targetXyzRot, - Order order) -{ - int i,j,k; - Euler e (0,0,0, order); - e.angleOrder(i,j,k); - - simpleXYZRotation(xyzRot, targetXyzRot); - - Vec3 otherXyzRot; - otherXyzRot[i] = M_PI+xyzRot[i]; - otherXyzRot[j] = M_PI-xyzRot[j]; - otherXyzRot[k] = M_PI+xyzRot[k]; - - simpleXYZRotation(otherXyzRot, targetXyzRot); - - Vec3 d = xyzRot - targetXyzRot; - Vec3 od = otherXyzRot - targetXyzRot; - T dMag = d.dot(d); - T odMag = od.dot(od); - - if (odMag < dMag) - { - xyzRot = otherXyzRot; - } -} - -template -void -Euler::makeNear (const Euler &target) -{ - Vec3 xyzRot = toXYZVector(); - Euler targetSameOrder = Euler(target, order()); - Vec3 targetXyz = targetSameOrder.toXYZVector(); - - nearestRotation(xyzRot, targetXyz, order()); - - setXYZVector(xyzRot); -} - -#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER -#pragma warning(default:4244) -#endif - -} // namespace Imath - - -#endif diff --git a/3rdparty/include/OpenEXR/ImathExc.h b/3rdparty/include/OpenEXR/ImathExc.h deleted file mode 100644 index db5c6c415..000000000 --- a/3rdparty/include/OpenEXR/ImathExc.h +++ /dev/null @@ -1,70 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHEXC_H -#define INCLUDED_IMATHEXC_H - - -//----------------------------------------------- -// -// Imath library-specific exceptions -// -//----------------------------------------------- - -#include "IexBaseExc.h" - -namespace Imath { - - -DEFINE_EXC (NullVecExc, ::Iex::MathExc) // Attempt to normalize - // null vector - -DEFINE_EXC (NullQuatExc, ::Iex::MathExc) // Attempt to normalize - // null quaternion - -DEFINE_EXC (SingMatrixExc, ::Iex::MathExc) // Attempt to invert - // singular matrix - -DEFINE_EXC (ZeroScaleExc, ::Iex::MathExc) // Attempt to remove zero - // scaling from matrix - -DEFINE_EXC (IntVecNormalizeExc, ::Iex::MathExc) // Attempt to normalize - // a vector of whose elements - // are an integer type - -} // namespace Imath - -#endif diff --git a/3rdparty/include/OpenEXR/ImathFrame.h b/3rdparty/include/OpenEXR/ImathFrame.h deleted file mode 100644 index 72912312e..000000000 --- a/3rdparty/include/OpenEXR/ImathFrame.h +++ /dev/null @@ -1,190 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHFRAME_H -#define INCLUDED_IMATHFRAME_H - -namespace Imath { - -template class Vec3; -template class Matrix44; - -// -// These methods compute a set of reference frames, defined by their -// transformation matrix, along a curve. It is designed so that the -// array of points and the array of matrices used to fetch these routines -// don't need to be ordered as the curve. -// -// A typical usage would be : -// -// m[0] = Imath::firstFrame( p[0], p[1], p[2] ); -// for( int i = 1; i < n - 1; i++ ) -// { -// m[i] = Imath::nextFrame( m[i-1], p[i-1], p[i], t[i-1], t[i] ); -// } -// m[n-1] = Imath::lastFrame( m[n-2], p[n-2], p[n-1] ); -// -// See Graphics Gems I for the underlying algorithm. -// - -template Matrix44 firstFrame( const Vec3&, // First point - const Vec3&, // Second point - const Vec3& ); // Third point - -template Matrix44 nextFrame( const Matrix44&, // Previous matrix - const Vec3&, // Previous point - const Vec3&, // Current point - Vec3&, // Previous tangent - Vec3& ); // Current tangent - -template Matrix44 lastFrame( const Matrix44&, // Previous matrix - const Vec3&, // Previous point - const Vec3& ); // Last point - -// -// firstFrame - Compute the first reference frame along a curve. -// -// This function returns the transformation matrix to the reference frame -// defined by the three points 'pi', 'pj' and 'pk'. Note that if the two -// vectors and are colinears, an arbitrary twist value will -// be choosen. -// -// Throw 'NullVecExc' if 'pi' and 'pj' are equals. -// - -template Matrix44 firstFrame -( - const Vec3& pi, // First point - const Vec3& pj, // Second point - const Vec3& pk ) // Third point -{ - Vec3 t = pj - pi; t.normalizeExc(); - - Vec3 n = t.cross( pk - pi ); n.normalize(); - if( n.length() == 0.0f ) - { - int i = fabs( t[0] ) < fabs( t[1] ) ? 0 : 1; - if( fabs( t[2] ) < fabs( t[i] )) i = 2; - - Vec3 v( 0.0, 0.0, 0.0 ); v[i] = 1.0; - n = t.cross( v ); n.normalize(); - } - - Vec3 b = t.cross( n ); - - Matrix44 M; - - M[0][0] = t[0]; M[0][1] = t[1]; M[0][2] = t[2]; M[0][3] = 0.0, - M[1][0] = n[0]; M[1][1] = n[1]; M[1][2] = n[2]; M[1][3] = 0.0, - M[2][0] = b[0]; M[2][1] = b[1]; M[2][2] = b[2]; M[2][3] = 0.0, - M[3][0] = pi[0]; M[3][1] = pi[1]; M[3][2] = pi[2]; M[3][3] = 1.0; - - return M; -} - -// -// nextFrame - Compute the next reference frame along a curve. -// -// This function returns the transformation matrix to the next reference -// frame defined by the previously computed transformation matrix and the -// new point and tangent vector along the curve. -// - -template Matrix44 nextFrame -( - const Matrix44& Mi, // Previous matrix - const Vec3& pi, // Previous point - const Vec3& pj, // Current point - Vec3& ti, // Previous tangent vector - Vec3& tj ) // Current tangent vector -{ - Vec3 a(0.0, 0.0, 0.0); // Rotation axis. - T r = 0.0; // Rotation angle. - - if( ti.length() != 0.0 && tj.length() != 0.0 ) - { - ti.normalize(); tj.normalize(); - T dot = ti.dot( tj ); - - // - // This is *really* necessary : - // - - if( dot > 1.0 ) dot = 1.0; - else if( dot < -1.0 ) dot = -1.0; - - r = acosf( dot ); - a = ti.cross( tj ); - } - - if( a.length() != 0.0 && r != 0.0 ) - { - Matrix44 R; R.setAxisAngle( a, r ); - Matrix44 Tj; Tj.translate( pj ); - Matrix44 Ti; Ti.translate( -pi ); - - return Mi * Ti * R * Tj; - } - else - { - Matrix44 Tr; Tr.translate( pj - pi ); - - return Mi * Tr; - } -} - -// -// lastFrame - Compute the last reference frame along a curve. -// -// This function returns the transformation matrix to the last reference -// frame defined by the previously computed transformation matrix and the -// last point along the curve. -// - -template Matrix44 lastFrame -( - const Matrix44& Mi, // Previous matrix - const Vec3& pi, // Previous point - const Vec3& pj ) // Last point -{ - Matrix44 Tr; Tr.translate( pj - pi ); - - return Mi * Tr; -} - -} // namespace Imath - -#endif diff --git a/3rdparty/include/OpenEXR/ImathFrustum.h b/3rdparty/include/OpenEXR/ImathFrustum.h deleted file mode 100644 index 9f3476594..000000000 --- a/3rdparty/include/OpenEXR/ImathFrustum.h +++ /dev/null @@ -1,697 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHFRUSTUM_H -#define INCLUDED_IMATHFRUSTUM_H - - -#include "ImathVec.h" -#include "ImathPlane.h" -#include "ImathLine.h" -#include "ImathMatrix.h" -#include "ImathLimits.h" -#include "ImathFun.h" -#include "IexMathExc.h" - -#if defined _WIN32 || defined _WIN64 - #ifdef near - #undef near - #endif - #ifdef far - #undef far - #endif -#endif - -namespace Imath { - -// -// template class Frustum -// -// The frustum is always located with the eye point at the -// origin facing down -Z. This makes the Frustum class -// compatable with OpenGL (or anything that assumes a camera -// looks down -Z, hence with a right-handed coordinate system) -// but not with RenderMan which assumes the camera looks down -// +Z. Additional functions are provided for conversion from -// and from various camera coordinate spaces. -// - - -template -class Frustum -{ - public: - Frustum(); - Frustum(const Frustum &); - Frustum(T near, T far, T left, T right, T top, T bottom, bool ortho=false); - Frustum(T near, T far, T fovx, T fovy, T aspect); - virtual ~Frustum(); - - //-------------------- - // Assignment operator - //-------------------- - - const Frustum &operator = (const Frustum &); - - //-------------------- - // Operators: ==, != - //-------------------- - - bool operator == (const Frustum &src) const; - bool operator != (const Frustum &src) const; - - //-------------------------------------------------------- - // Set functions change the entire state of the Frustum - //-------------------------------------------------------- - - void set(T near, T far, - T left, T right, - T top, T bottom, - bool ortho=false); - - void set(T near, T far, T fovx, T fovy, T aspect); - - //------------------------------------------------------ - // These functions modify an already valid frustum state - //------------------------------------------------------ - - void modifyNearAndFar(T near, T far); - void setOrthographic(bool); - - //-------------- - // Access - //-------------- - - bool orthographic() const { return _orthographic; } - T near() const { return _near; } - T far() const { return _far; } - T left() const { return _left; } - T right() const { return _right; } - T bottom() const { return _bottom; } - T top() const { return _top; } - - //----------------------------------------------------------------------- - // Sets the planes in p to be the six bounding planes of the frustum, in - // the following order: top, right, bottom, left, near, far. - // Note that the planes have normals that point out of the frustum. - // The version of this routine that takes a matrix applies that matrix - // to transform the frustum before setting the planes. - //----------------------------------------------------------------------- - - void planes(Plane3 p[6]); - void planes(Plane3 p[6], const Matrix44 &M); - - //---------------------- - // Derived Quantities - //---------------------- - - T fovx() const; - T fovy() const; - T aspect() const; - Matrix44 projectionMatrix() const; - - //----------------------------------------------------------------------- - // Takes a rectangle in the screen space (i.e., -1 <= left <= right <= 1 - // and -1 <= bottom <= top <= 1) of this Frustum, and returns a new - // Frustum whose near clipping-plane window is that rectangle in local - // space. - //----------------------------------------------------------------------- - - Frustum window(T left, T right, T top, T bottom) const; - - //---------------------------------------------------------- - // Projection is in screen space / Conversion from Z-Buffer - //---------------------------------------------------------- - - Line3 projectScreenToRay( const Vec2 & ) const; - Vec2 projectPointToScreen( const Vec3 & ) const; - - T ZToDepth(long zval, long min, long max) const; - T normalizedZToDepth(T zval) const; - long DepthToZ(T depth, long zmin, long zmax) const; - - T worldRadius(const Vec3 &p, T radius) const; - T screenRadius(const Vec3 &p, T radius) const; - - - protected: - - Vec2 screenToLocal( const Vec2 & ) const; - Vec2 localToScreen( const Vec2 & ) const; - - protected: - T _near; - T _far; - T _left; - T _right; - T _top; - T _bottom; - bool _orthographic; -}; - - -template -inline Frustum::Frustum() -{ - set(T (0.1), - T (1000.0), - T (-1.0), - T (1.0), - T (1.0), - T (-1.0), - false); -} - -template -inline Frustum::Frustum(const Frustum &f) -{ - *this = f; -} - -template -inline Frustum::Frustum(T n, T f, T l, T r, T t, T b, bool o) -{ - set(n,f,l,r,t,b,o); -} - -template -inline Frustum::Frustum(T near, T far, T fovx, T fovy, T aspect) -{ - set(near,far,fovx,fovy,aspect); -} - -template -Frustum::~Frustum() -{ -} - -template -const Frustum & -Frustum::operator = (const Frustum &f) -{ - _near = f._near; - _far = f._far; - _left = f._left; - _right = f._right; - _top = f._top; - _bottom = f._bottom; - _orthographic = f._orthographic; - - return *this; -} - -template -bool -Frustum::operator == (const Frustum &src) const -{ - return - _near == src._near && - _far == src._far && - _left == src._left && - _right == src._right && - _top == src._top && - _bottom == src._bottom && - _orthographic == src._orthographic; -} - -template -inline bool -Frustum::operator != (const Frustum &src) const -{ - return !operator== (src); -} - -template -void Frustum::set(T n, T f, T l, T r, T t, T b, bool o) -{ - _near = n; - _far = f; - _left = l; - _right = r; - _bottom = b; - _top = t; - _orthographic = o; -} - -template -void Frustum::modifyNearAndFar(T n, T f) -{ - if ( _orthographic ) - { - _near = n; - } - else - { - Line3 lowerLeft( Vec3(0,0,0), Vec3(_left,_bottom,-_near) ); - Line3 upperRight( Vec3(0,0,0), Vec3(_right,_top,-_near) ); - Plane3 nearPlane( Vec3(0,0,-1), n ); - - Vec3 ll,ur; - nearPlane.intersect(lowerLeft,ll); - nearPlane.intersect(upperRight,ur); - - _left = ll.x; - _right = ur.x; - _top = ur.y; - _bottom = ll.y; - _near = n; - _far = f; - } - - _far = f; -} - -template -void Frustum::setOrthographic(bool ortho) -{ - _orthographic = ortho; -} - -template -void Frustum::set(T near, T far, T fovx, T fovy, T aspect) -{ - if (fovx != 0 && fovy != 0) - throw Iex::ArgExc ("fovx and fovy cannot both be non-zero."); - - if (fovx != 0) - { - _right = near * Math::tan(fovx/2.0); - _left = -_right; - _top = ((_right - _left)/aspect)/2.0; - _bottom = -_top; - } - else - { - _top = near * Math::tan(fovy/2.0); - _bottom = -_top; - _right = (_top - _bottom) * aspect / 2.0; - _left = -_right; - } - _near = near; - _far = far; - _orthographic = false; -} - -template -T Frustum::fovx() const -{ - return Math::atan2(_right,_near) - Math::atan2(_left,_near); -} - -template -T Frustum::fovy() const -{ - return Math::atan2(_top,_near) - Math::atan2(_bottom,_near); -} - -template -T Frustum::aspect() const -{ - T rightMinusLeft = _right-_left; - T topMinusBottom = _top-_bottom; - - if (abs(topMinusBottom) < 1 && - abs(rightMinusLeft) > limits::max() * abs(topMinusBottom)) - { - throw Iex::DivzeroExc ("Bad viewing frustum: " - "aspect ratio cannot be computed."); - } - - return rightMinusLeft / topMinusBottom; -} - -template -Matrix44 Frustum::projectionMatrix() const -{ - T rightPlusLeft = _right+_left; - T rightMinusLeft = _right-_left; - - T topPlusBottom = _top+_bottom; - T topMinusBottom = _top-_bottom; - - T farPlusNear = _far+_near; - T farMinusNear = _far-_near; - - if ((abs(rightMinusLeft) < 1 && - abs(rightPlusLeft) > limits::max() * abs(rightMinusLeft)) || - (abs(topMinusBottom) < 1 && - abs(topPlusBottom) > limits::max() * abs(topMinusBottom)) || - (abs(farMinusNear) < 1 && - abs(farPlusNear) > limits::max() * abs(farMinusNear))) - { - throw Iex::DivzeroExc ("Bad viewing frustum: " - "projection matrix cannot be computed."); - } - - if ( _orthographic ) - { - T tx = -rightPlusLeft / rightMinusLeft; - T ty = -topPlusBottom / topMinusBottom; - T tz = -farPlusNear / farMinusNear; - - if ((abs(rightMinusLeft) < 1 && - 2 > limits::max() * abs(rightMinusLeft)) || - (abs(topMinusBottom) < 1 && - 2 > limits::max() * abs(topMinusBottom)) || - (abs(farMinusNear) < 1 && - 2 > limits::max() * abs(farMinusNear))) - { - throw Iex::DivzeroExc ("Bad viewing frustum: " - "projection matrix cannot be computed."); - } - - T A = 2 / rightMinusLeft; - T B = 2 / topMinusBottom; - T C = -2 / farMinusNear; - - return Matrix44( A, 0, 0, 0, - 0, B, 0, 0, - 0, 0, C, 0, - tx, ty, tz, 1.f ); - } - else - { - T A = rightPlusLeft / rightMinusLeft; - T B = topPlusBottom / topMinusBottom; - T C = -farPlusNear / farMinusNear; - - T farTimesNear = -2 * _far * _near; - if (abs(farMinusNear) < 1 && - abs(farTimesNear) > limits::max() * abs(farMinusNear)) - { - throw Iex::DivzeroExc ("Bad viewing frustum: " - "projection matrix cannot be computed."); - } - - T D = farTimesNear / farMinusNear; - - T twoTimesNear = 2 * _near; - - if ((abs(rightMinusLeft) < 1 && - abs(twoTimesNear) > limits::max() * abs(rightMinusLeft)) || - (abs(topMinusBottom) < 1 && - abs(twoTimesNear) > limits::max() * abs(topMinusBottom))) - { - throw Iex::DivzeroExc ("Bad viewing frustum: " - "projection matrix cannot be computed."); - } - - T E = twoTimesNear / rightMinusLeft; - T F = twoTimesNear / topMinusBottom; - - return Matrix44( E, 0, 0, 0, - 0, F, 0, 0, - A, B, C, -1, - 0, 0, D, 0 ); - } -} - -template -Frustum Frustum::window(T l, T r, T t, T b) const -{ - // move it to 0->1 space - - Vec2 bl = screenToLocal( Vec2(l,b) ); - Vec2 tr = screenToLocal( Vec2(r,t) ); - - return Frustum(_near, _far, bl.x, tr.x, tr.y, bl.y, _orthographic); -} - - -template -Vec2 Frustum::screenToLocal(const Vec2 &s) const -{ - return Vec2( _left + (_right-_left) * (1.f+s.x) / 2.f, - _bottom + (_top-_bottom) * (1.f+s.y) / 2.f ); -} - -template -Vec2 Frustum::localToScreen(const Vec2 &p) const -{ - T leftPlusRight = _left - 2 * p.x + _right; - T leftMinusRight = _left-_right; - T bottomPlusTop = _bottom - 2 * p.y + _top; - T bottomMinusTop = _bottom-_top; - - if ((abs(leftMinusRight) < 1 && - abs(leftPlusRight) > limits::max() * abs(leftMinusRight)) || - (abs(bottomMinusTop) < 1 && - abs(bottomPlusTop) > limits::max() * abs(bottomMinusTop))) - { - throw Iex::DivzeroExc - ("Bad viewing frustum: " - "local-to-screen transformation cannot be computed"); - } - - return Vec2( leftPlusRight / leftMinusRight, - bottomPlusTop / bottomMinusTop ); -} - -template -Line3 Frustum::projectScreenToRay(const Vec2 &p) const -{ - Vec2 point = screenToLocal(p); - if (orthographic()) - return Line3( Vec3(point.x,point.y, 0.0), - Vec3(point.x,point.y,-_near)); - else - return Line3( Vec3(0, 0, 0), Vec3(point.x,point.y,-_near)); -} - -template -Vec2 Frustum::projectPointToScreen(const Vec3 &point) const -{ - if (orthographic() || point.z == 0) - return localToScreen( Vec2( point.x, point.y ) ); - else - return localToScreen( Vec2( point.x * _near / -point.z, - point.y * _near / -point.z ) ); -} - -template -T Frustum::ZToDepth(long zval,long zmin,long zmax) const -{ - int zdiff = zmax - zmin; - - if (zdiff == 0) - { - throw Iex::DivzeroExc - ("Bad call to Frustum::ZToDepth: zmax == zmin"); - } - - if ( zval > zmax+1 ) zval -= zdiff; - - T fzval = (T(zval) - T(zmin)) / T(zdiff); - return normalizedZToDepth(fzval); -} - -template -T Frustum::normalizedZToDepth(T zval) const -{ - T Zp = zval * 2.0 - 1; - - if ( _orthographic ) - { - return -(Zp*(_far-_near) + (_far+_near))/2; - } - else - { - T farTimesNear = 2 * _far * _near; - T farMinusNear = Zp * (_far - _near) - _far - _near; - - if (abs(farMinusNear) < 1 && - abs(farTimesNear) > limits::max() * abs(farMinusNear)) - { - throw Iex::DivzeroExc - ("Frustum::normalizedZToDepth cannot be computed. The " - "near and far clipping planes of the viewing frustum " - "may be too close to each other"); - } - - return farTimesNear / farMinusNear; - } -} - -template -long Frustum::DepthToZ(T depth,long zmin,long zmax) const -{ - long zdiff = zmax - zmin; - T farMinusNear = _far-_near; - - if ( _orthographic ) - { - T farPlusNear = 2*depth + _far + _near; - - if (abs(farMinusNear) < 1 && - abs(farPlusNear) > limits::max() * abs(farMinusNear)) - { - throw Iex::DivzeroExc - ("Bad viewing frustum: near and far clipping planes " - "are too close to each other"); - } - - T Zp = -farPlusNear/farMinusNear; - return long(0.5*(Zp+1)*zdiff) + zmin; - } - else - { - // Perspective - - T farTimesNear = 2*_far*_near; - if (abs(depth) < 1 && - abs(farTimesNear) > limits::max() * abs(depth)) - { - throw Iex::DivzeroExc - ("Bad call to DepthToZ function: value of `depth' " - "is too small"); - } - - T farPlusNear = farTimesNear/depth + _far + _near; - if (abs(farMinusNear) < 1 && - abs(farPlusNear) > limits::max() * abs(farMinusNear)) - { - throw Iex::DivzeroExc - ("Bad viewing frustum: near and far clipping planes " - "are too close to each other"); - } - - T Zp = farPlusNear/farMinusNear; - return long(0.5*(Zp+1)*zdiff) + zmin; - } -} - -template -T Frustum::screenRadius(const Vec3 &p, T radius) const -{ - // Derivation: - // Consider X-Z plane. - // X coord of projection of p = xp = p.x * (-_near / p.z) - // Let q be p + (radius, 0, 0). - // X coord of projection of q = xq = (p.x - radius) * (-_near / p.z) - // X coord of projection of segment from p to q = r = xp - xq - // = radius * (-_near / p.z) - // A similar analysis holds in the Y-Z plane. - // So r is the quantity we want to return. - - if (abs(p.z) > 1 || abs(-_near) < limits::max() * abs(p.z)) - { - return radius * (-_near / p.z); - } - else - { - throw Iex::DivzeroExc - ("Bad call to Frustum::screenRadius: the magnitude of `p' " - "is too small"); - } - - return radius * (-_near / p.z); -} - -template -T Frustum::worldRadius(const Vec3 &p, T radius) const -{ - if (abs(-_near) > 1 || abs(p.z) < limits::max() * abs(-_near)) - { - return radius * (p.z / -_near); - } - else - { - throw Iex::DivzeroExc - ("Bad viewing frustum: the near clipping plane is too " - "close to zero"); - } -} - -template -void Frustum::planes(Plane3 p[6]) -{ - // - // Plane order: Top, Right, Bottom, Left, Near, Far. - // Normals point outwards. - // - - Vec3 a( _left, _bottom, -_near); - Vec3 b( _left, _top, -_near); - Vec3 c( _right, _top, -_near); - Vec3 d( _right, _bottom, -_near); - Vec3 o(0,0,0); - - p[0].set( o, c, b ); - p[1].set( o, d, c ); - p[2].set( o, a, d ); - p[3].set( o, b, a ); - p[4].set( Vec3(0, 0, 1), -_near ); - p[5].set( Vec3(0, 0,-1), _far ); -} - - -template -void Frustum::planes(Plane3 p[6], const Matrix44 &M) -{ - // - // Plane order: Top, Right, Bottom, Left, Near, Far. - // Normals point outwards. - // - - Vec3 a = Vec3( _left, _bottom, -_near) * M; - Vec3 b = Vec3( _left, _top, -_near) * M; - Vec3 c = Vec3( _right, _top, -_near) * M; - Vec3 d = Vec3( _right, _bottom, -_near) * M; - double s = _far / double(_near); - T farLeft = (T) (s * _left); - T farRight = (T) (s * _right); - T farTop = (T) (s * _top); - T farBottom = (T) (s * _bottom); - Vec3 e = Vec3( farLeft, farBottom, -_far) * M; - Vec3 f = Vec3( farLeft, farTop, -_far) * M; - Vec3 g = Vec3( farRight, farTop, -_far) * M; - Vec3 o = Vec3(0,0,0) * M; - - p[0].set( o, c, b ); - p[1].set( o, d, c ); - p[2].set( o, a, d ); - p[3].set( o, b, a ); - p[4].set( a, d, c ); - p[5].set( e, f, g ); -} - -typedef Frustum Frustumf; -typedef Frustum Frustumd; - - -} // namespace Imath - -#endif diff --git a/3rdparty/include/OpenEXR/ImathFun.h b/3rdparty/include/OpenEXR/ImathFun.h deleted file mode 100644 index dbac025df..000000000 --- a/3rdparty/include/OpenEXR/ImathFun.h +++ /dev/null @@ -1,272 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHFUN_H -#define INCLUDED_IMATHFUN_H - -//----------------------------------------------------------------------------- -// -// Miscellaneous utility functions -// -//----------------------------------------------------------------------------- - -#include "ImathLimits.h" - -namespace Imath { - -template -inline T -abs (T a) -{ - return (a > 0) ? a : -a; -} - - -template -inline int -sign (T a) -{ - return (a > 0)? 1 : ((a < 0) ? -1 : 0); -} - - -template -inline T -lerp (T a, T b, Q t) -{ - return (T) (a + (b - a) * t); -} - - -template -inline T -ulerp (T a, T b, Q t) -{ - return (T) ((a > b)? (a - (a - b) * t): (a + (b - a) * t)); -} - - -template -inline T -lerpfactor(T m, T a, T b) -{ - // - // Return how far m is between a and b, that is return t such that - // if: - // t = lerpfactor(m, a, b); - // then: - // m = lerp(a, b, t); - // - // If a==b, return 0. - // - - T d = b - a; - T n = m - a; - - if (abs(d) > T(1) || abs(n) < limits::max() * abs(d)) - return n / d; - - return T(0); -} - - -template -inline T -clamp (T a, T l, T h) -{ - return (a < l)? l : ((a > h)? h : a); -} - - -template -inline int -cmp (T a, T b) -{ - return Imath::sign (a - b); -} - - -template -inline int -cmpt (T a, T b, T t) -{ - return (Imath::abs (a - b) <= t)? 0 : cmp (a, b); -} - - -template -inline bool -iszero (T a, T t) -{ - return (Imath::abs (a) <= t) ? 1 : 0; -} - - -template -inline bool -equal (T1 a, T2 b, T3 t) -{ - return Imath::abs (a - b) <= t; -} - -template -inline int -floor (T x) -{ - return (x >= 0)? int (x): -(int (-x) + (-x > int (-x))); -} - - -template -inline int -ceil (T x) -{ - return -floor (-x); -} - -template -inline int -trunc (T x) -{ - return (x >= 0) ? int(x) : -int(-x); -} - - -// -// Integer division and remainder where the -// remainder of x/y has the same sign as x: -// -// divs(x,y) == (abs(x) / abs(y)) * (sign(x) * sign(y)) -// mods(x,y) == x - y * divs(x,y) -// - -inline int -divs (int x, int y) -{ - return (x >= 0)? ((y >= 0)? ( x / y): -( x / -y)): - ((y >= 0)? -(-x / y): (-x / -y)); -} - - -inline int -mods (int x, int y) -{ - return (x >= 0)? ((y >= 0)? ( x % y): ( x % -y)): - ((y >= 0)? -(-x % y): -(-x % -y)); -} - - -// -// Integer division and remainder where the -// remainder of x/y is always positive: -// -// divp(x,y) == floor (double(x) / double (y)) -// modp(x,y) == x - y * divp(x,y) -// - -inline int -divp (int x, int y) -{ - return (x >= 0)? ((y >= 0)? ( x / y): -( x / -y)): - ((y >= 0)? -((y-1-x) / y): ((-y-1-x) / -y)); -} - - -inline int -modp (int x, int y) -{ - return x - y * divp (x, y); -} - -//---------------------------------------------------------- -// Successor and predecessor for floating-point numbers: -// -// succf(f) returns float(f+e), where e is the smallest -// positive number such that float(f+e) != f. -// -// predf(f) returns float(f-e), where e is the smallest -// positive number such that float(f-e) != f. -// -// succd(d) returns double(d+e), where e is the smallest -// positive number such that double(d+e) != d. -// -// predd(d) returns double(d-e), where e is the smallest -// positive number such that double(d-e) != d. -// -// Exceptions: If the input value is an infinity or a nan, -// succf(), predf(), succd(), and predd() all -// return the input value without changing it. -// -//---------------------------------------------------------- - -float succf (float f); -float predf (float f); - -double succd (double d); -double predd (double d); - -// -// Return true if the number is not a NaN or Infinity. -// - -inline bool -finitef (float f) -{ - union {float f; int i;} u; - u.f = f; - - return (u.i & 0x7f800000) != 0x7f800000; -} - -inline bool -finited (double d) -{ -#if ULONG_MAX == 18446744073709551615LU - typedef long unsigned int Int64; -#else - typedef long long unsigned int Int64; -#endif - - union {double d; Int64 i;} u; - u.d = d; - - return (u.i & 0x7ff0000000000000LL) != 0x7ff0000000000000LL; -} - - -} // namespace Imath - -#endif diff --git a/3rdparty/include/OpenEXR/ImathGL.h b/3rdparty/include/OpenEXR/ImathGL.h deleted file mode 100644 index 36be0fdc5..000000000 --- a/3rdparty/include/OpenEXR/ImathGL.h +++ /dev/null @@ -1,159 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMATHGL_H -#define INCLUDED_IMATHGL_H - -#include - -#include "ImathVec.h" -#include "ImathMatrix.h" -#include "IexMathExc.h" -#include "ImathFun.h" - -inline void glVertex ( const Imath::V3f &v ) { glVertex3f(v.x,v.y,v.z); } -inline void glVertex ( const Imath::V2f &v ) { glVertex2f(v.x,v.y); } -inline void glNormal ( const Imath::V3f &n ) { glNormal3f(n.x,n.y,n.z); } -inline void glColor ( const Imath::V3f &c ) { glColor3f(c.x,c.y,c.z); } -inline void glTranslate ( const Imath::V3f &t ) { glTranslatef(t.x,t.y,t.z); } - -inline void glTexCoord( const Imath::V2f &t ) -{ - glTexCoord2f(t.x,t.y); -} - -inline void glDisableTexture() -{ - glActiveTexture(GL_TEXTURE1); - glBindTexture(GL_TEXTURE_2D, 0); - glDisable(GL_TEXTURE_2D); - - glActiveTexture(GL_TEXTURE0); -} - -namespace { - -const float GL_FLOAT_MAX = 1.8e+19; // sqrt (FLT_MAX) - -inline bool -badFloat (float f) -{ - return !Imath::finitef (f) || f < - GL_FLOAT_MAX || f > GL_FLOAT_MAX; -} - -} // namespace - -inline void -throwBadMatrix (const Imath::M44f& m) -{ - if (badFloat (m[0][0]) || - badFloat (m[0][1]) || - badFloat (m[0][2]) || - badFloat (m[0][3]) || - badFloat (m[1][0]) || - badFloat (m[1][1]) || - badFloat (m[1][2]) || - badFloat (m[1][3]) || - badFloat (m[2][0]) || - badFloat (m[2][1]) || - badFloat (m[2][2]) || - badFloat (m[2][3]) || - badFloat (m[3][0]) || - badFloat (m[3][1]) || - badFloat (m[3][2]) || - badFloat (m[3][3])) - throw Iex::OverflowExc ("GL matrix overflow"); -} - -inline void -glMultMatrix( const Imath::M44f& m ) -{ - throwBadMatrix (m); - glMultMatrixf( (GLfloat*)m[0] ); -} - -inline void -glMultMatrix( const Imath::M44f* m ) -{ - throwBadMatrix (*m); - glMultMatrixf( (GLfloat*)(*m)[0] ); -} - -inline void -glLoadMatrix( const Imath::M44f& m ) -{ - throwBadMatrix (m); - glLoadMatrixf( (GLfloat*)m[0] ); -} - -inline void -glLoadMatrix( const Imath::M44f* m ) -{ - throwBadMatrix (*m); - glLoadMatrixf( (GLfloat*)(*m)[0] ); -} - - -namespace Imath { - -// -// Class objects that push/pop the GL state. These objects assist with -// proper cleanup of the state when exceptions are thrown. -// - -class GLPushMatrix { - public: - - GLPushMatrix () { glPushMatrix(); } - ~GLPushMatrix() { glPopMatrix(); } -}; - -class GLPushAttrib { - public: - - GLPushAttrib (GLbitfield mask) { glPushAttrib (mask); } - ~GLPushAttrib() { glPopAttrib(); } -}; - -class GLBegin { - public: - - GLBegin (GLenum mode) { glBegin (mode); } - ~GLBegin() { glEnd(); } -}; - -} // namespace Imath - -#endif diff --git a/3rdparty/include/OpenEXR/ImathGLU.h b/3rdparty/include/OpenEXR/ImathGLU.h deleted file mode 100644 index e43d560d1..000000000 --- a/3rdparty/include/OpenEXR/ImathGLU.h +++ /dev/null @@ -1,54 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHGLU_H -#define INCLUDED_IMATHGLU_H - -#include -#include - -#include "ImathVec.h" - -inline -void -gluLookAt(const Imath::V3f &pos, const Imath::V3f &interest, const Imath::V3f &up) -{ - gluLookAt(pos.x, pos.y, pos.z, - interest.x, interest.y, interest.z, - up.x, up.y, up.z); -} - -#endif diff --git a/3rdparty/include/OpenEXR/ImathHalfLimits.h b/3rdparty/include/OpenEXR/ImathHalfLimits.h deleted file mode 100644 index 2170f94a9..000000000 --- a/3rdparty/include/OpenEXR/ImathHalfLimits.h +++ /dev/null @@ -1,66 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHHALFLIMITS_H -#define INCLUDED_IMATHHALFLIMITS_H - -//-------------------------------------------------- -// -// Imath-style limits for class half. -// -//-------------------------------------------------- - -#include "ImathLimits.h" -#include "half.h" - -namespace Imath { - - -template <> -struct limits -{ - static float min() {return -HALF_MAX;} - static float max() {return HALF_MAX;} - static float smallest() {return HALF_MIN;} - static float epsilon() {return HALF_EPSILON;} - static bool isIntegral() {return false;} - static bool isSigned() {return true;} -}; - - -} // namespace Imath - -#endif diff --git a/3rdparty/include/OpenEXR/ImathInterval.h b/3rdparty/include/OpenEXR/ImathInterval.h deleted file mode 100644 index 2d9d7d37b..000000000 --- a/3rdparty/include/OpenEXR/ImathInterval.h +++ /dev/null @@ -1,224 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHINTERVAL_H -#define INCLUDED_IMATHINTERVAL_H - - -//------------------------------------------------------------------- -// -// class Imath::Interval -// -------------------------------- -// -// An Interval has a min and a max and some miscellaneous -// functions. It is basically a Box that allows T to be -// a scalar. -// -//------------------------------------------------------------------- - -#include "ImathVec.h" - -namespace Imath { - - -template -class Interval -{ - public: - - //------------------------- - // Data Members are public - //------------------------- - - T min; - T max; - - //----------------------------------------------------- - // Constructors - an "empty" Interval is created by default - //----------------------------------------------------- - - Interval(); - Interval(const T& point); - Interval(const T& minT, const T& maxT); - - //-------------------------------- - // Operators: we get != from STL - //-------------------------------- - - bool operator == (const Interval &src) const; - - //------------------ - // Interval manipulation - //------------------ - - void makeEmpty(); - void extendBy(const T& point); - void extendBy(const Interval& interval); - - //--------------------------------------------------- - // Query functions - these compute results each time - //--------------------------------------------------- - - T size() const; - T center() const; - bool intersects(const T &point) const; - bool intersects(const Interval &interval) const; - - //---------------- - // Classification - //---------------- - - bool hasVolume() const; - bool isEmpty() const; -}; - - -//-------------------- -// Convenient typedefs -//-------------------- - - -typedef Interval Intervalf; -typedef Interval Intervald; -typedef Interval Intervals; -typedef Interval Intervali; - -//---------------- -// Implementation -//---------------- - - -template -inline Interval::Interval() -{ - makeEmpty(); -} - -template -inline Interval::Interval(const T& point) -{ - min = point; - max = point; -} - -template -inline Interval::Interval(const T& minV, const T& maxV) -{ - min = minV; - max = maxV; -} - -template -inline bool -Interval::operator == (const Interval &src) const -{ - return (min == src.min && max == src.max); -} - -template -inline void -Interval::makeEmpty() -{ - min = limits::max(); - max = limits::min(); -} - -template -inline void -Interval::extendBy(const T& point) -{ - if ( point < min ) - min = point; - - if ( point > max ) - max = point; -} - -template -inline void -Interval::extendBy(const Interval& interval) -{ - if ( interval.min < min ) - min = interval.min; - - if ( interval.max > max ) - max = interval.max; -} - -template -inline bool -Interval::intersects(const T& point) const -{ - return point >= min && point <= max; -} - -template -inline bool -Interval::intersects(const Interval& interval) const -{ - return interval.max >= min && interval.min <= max; -} - -template -inline T -Interval::size() const -{ - return max-min; -} - -template -inline T -Interval::center() const -{ - return (max+min)/2; -} - -template -inline bool -Interval::isEmpty() const -{ - return max < min; -} - -template -inline bool Interval::hasVolume() const -{ - return max > min; -} - -} // namespace Imath - -#endif diff --git a/3rdparty/include/OpenEXR/ImathLimits.h b/3rdparty/include/OpenEXR/ImathLimits.h deleted file mode 100644 index 0a67e5bda..000000000 --- a/3rdparty/include/OpenEXR/ImathLimits.h +++ /dev/null @@ -1,265 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHLIMITS_H -#define INCLUDED_IMATHLIMITS_H - -//---------------------------------------------------------------- -// -// Limitations of the basic C++ numerical data types -// -//---------------------------------------------------------------- - -#include -#include - -//------------------------------------------ -// In Windows, min and max are macros. Yay. -//------------------------------------------ - -#if defined _WIN32 || defined _WIN64 - #ifdef min - #undef min - #endif - #ifdef max - #undef max - #endif -#endif - -namespace Imath { - - -//----------------------------------------------------------------- -// -// Template class limits returns information about the limits -// of numerical data type T: -// -// min() largest possible negative value of type T -// -// max() largest possible positive value of type T -// -// smallest() smallest possible positive value of type T -// -// epsilon() smallest possible e of type T, for which -// 1 + e != 1 -// -// isIntegral() returns true if T is an integral type -// -// isSigned() returns true if T is signed -// -// Class limits is useful to implement template classes or -// functions which depend on the limits of a numerical type -// which is not known in advance; for example: -// -// template max (T x[], int n) -// { -// T m = limits::min(); -// -// for (int i = 0; i < n; i++) -// if (m < x[i]) -// m = x[i]; -// -// return m; -// } -// -// Class limits has been implemented for the following types: -// -// char, signed char, unsigned char -// short, unsigned short -// int, unsigned int -// long, unsigned long -// float -// double -// long double -// -// Class limits has only static member functions, all of which -// are implemented as inlines. No objects of type limits are -// ever created. -// -//----------------------------------------------------------------- - - -template struct limits -{ - static T min(); - static T max(); - static T smallest(); - static T epsilon(); - static bool isIntegral(); - static bool isSigned(); -}; - - -//--------------- -// Implementation -//--------------- - -template <> -struct limits -{ - static char min() {return CHAR_MIN;} - static char max() {return CHAR_MAX;} - static char smallest() {return 1;} - static char epsilon() {return 1;} - static bool isIntegral() {return true;} - static bool isSigned() {return (char) ~0 < 0;} -}; - -template <> -struct limits -{ - static signed char min() {return SCHAR_MIN;} - static signed char max() {return SCHAR_MAX;} - static signed char smallest() {return 1;} - static signed char epsilon() {return 1;} - static bool isIntegral() {return true;} - static bool isSigned() {return true;} -}; - -template <> -struct limits -{ - static unsigned char min() {return 0;} - static unsigned char max() {return UCHAR_MAX;} - static unsigned char smallest() {return 1;} - static unsigned char epsilon() {return 1;} - static bool isIntegral() {return true;} - static bool isSigned() {return false;} -}; - -template <> -struct limits -{ - static short min() {return SHRT_MIN;} - static short max() {return SHRT_MAX;} - static short smallest() {return 1;} - static short epsilon() {return 1;} - static bool isIntegral() {return true;} - static bool isSigned() {return true;} -}; - -template <> -struct limits -{ - static unsigned short min() {return 0;} - static unsigned short max() {return USHRT_MAX;} - static unsigned short smallest() {return 1;} - static unsigned short epsilon() {return 1;} - static bool isIntegral() {return true;} - static bool isSigned() {return false;} -}; - -template <> -struct limits -{ - static int min() {return INT_MIN;} - static int max() {return INT_MAX;} - static int smallest() {return 1;} - static int epsilon() {return 1;} - static bool isIntegral() {return true;} - static bool isSigned() {return true;} -}; - -template <> -struct limits -{ - static unsigned int min() {return 0;} - static unsigned int max() {return UINT_MAX;} - static unsigned int smallest() {return 1;} - static unsigned int epsilon() {return 1;} - static bool isIntegral() {return true;} - static bool isSigned() {return false;} -}; - -template <> -struct limits -{ - static long min() {return LONG_MIN;} - static long max() {return LONG_MAX;} - static long smallest() {return 1;} - static long epsilon() {return 1;} - static bool isIntegral() {return true;} - static bool isSigned() {return true;} -}; - -template <> -struct limits -{ - static unsigned long min() {return 0;} - static unsigned long max() {return ULONG_MAX;} - static unsigned long smallest() {return 1;} - static unsigned long epsilon() {return 1;} - static bool isIntegral() {return true;} - static bool isSigned() {return false;} -}; - -template <> -struct limits -{ - static float min() {return -FLT_MAX;} - static float max() {return FLT_MAX;} - static float smallest() {return FLT_MIN;} - static float epsilon() {return FLT_EPSILON;} - static bool isIntegral() {return false;} - static bool isSigned() {return true;} -}; - -template <> -struct limits -{ - static double min() {return -DBL_MAX;} - static double max() {return DBL_MAX;} - static double smallest() {return DBL_MIN;} - static double epsilon() {return DBL_EPSILON;} - static bool isIntegral() {return false;} - static bool isSigned() {return true;} -}; - -template <> -struct limits -{ - static long double min() {return -LDBL_MAX;} - static long double max() {return LDBL_MAX;} - static long double smallest() {return LDBL_MIN;} - static long double epsilon() {return LDBL_EPSILON;} - static bool isIntegral() {return false;} - static bool isSigned() {return true;} -}; - - -} // namespace Imath - -#endif diff --git a/3rdparty/include/OpenEXR/ImathLine.h b/3rdparty/include/OpenEXR/ImathLine.h deleted file mode 100644 index 601fc6f97..000000000 --- a/3rdparty/include/OpenEXR/ImathLine.h +++ /dev/null @@ -1,184 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHLINE_H -#define INCLUDED_IMATHLINE_H - -//------------------------------------- -// -// A 3D line class template -// -//------------------------------------- - -#include "ImathVec.h" -#include "ImathLimits.h" -#include "ImathMatrix.h" - -namespace Imath { - - -template -class Line3 -{ - public: - - Vec3 pos; - Vec3 dir; - - //------------------------------------------------------------- - // Constructors - default is normalized units along direction - //------------------------------------------------------------- - - Line3() {} - Line3(const Vec3& point1, const Vec3& point2); - - //------------------ - // State Query/Set - //------------------ - - void set(const Vec3& point1, - const Vec3& point2); - - //------- - // F(t) - //------- - - Vec3 operator() (T parameter) const; - - //--------- - // Query - //--------- - - T distanceTo(const Vec3& point) const; - T distanceTo(const Line3& line) const; - Vec3 closestPointTo(const Vec3& point) const; - Vec3 closestPointTo(const Line3& line) const; -}; - - -//-------------------- -// Convenient typedefs -//-------------------- - -typedef Line3 Line3f; -typedef Line3 Line3d; - - -//--------------- -// Implementation -//--------------- - -template -inline Line3::Line3(const Vec3 &p0, const Vec3 &p1) -{ - set(p0,p1); -} - -template -inline void Line3::set(const Vec3 &p0, const Vec3 &p1) -{ - pos = p0; dir = p1-p0; - dir.normalize(); -} - -template -inline Vec3 Line3::operator()(T parameter) const -{ - return pos + dir * parameter; -} - -template -inline T Line3::distanceTo(const Vec3& point) const -{ - return (closestPointTo(point)-point).length(); -} - -template -inline Vec3 Line3::closestPointTo(const Vec3& point) const -{ - return ((point - pos) ^ dir) * dir + pos; -} - -template -inline T Line3::distanceTo(const Line3& line) const -{ - T d = (dir % line.dir) ^ (line.pos - pos); - return (d >= 0)? d: -d; -} - -template -inline Vec3 -Line3::closestPointTo(const Line3& line) const -{ - // Assumes the lines are normalized - - Vec3 posLpos = pos - line.pos ; - T c = dir ^ posLpos; - T a = line.dir ^ dir; - T f = line.dir ^ posLpos ; - T num = c - a * f; - - T denom = a*a - 1; - - T absDenom = ((denom >= 0)? denom: -denom); - - if (absDenom < 1) - { - T absNum = ((num >= 0)? num: -num); - - if (absNum >= absDenom * limits::max()) - return pos; - } - - return pos + dir * (num / denom); -} - -template -std::ostream& operator<< (std::ostream &o, const Line3 &line) -{ - return o << "(" << line.pos << ", " << line.dir << ")"; -} - -template -inline Line3 operator * (const Line3 &line, const Matrix44 &M) -{ - return Line3( line.pos * M, (line.pos + line.dir) * M ); -} - - -} // namespace Imath - -#endif diff --git a/3rdparty/include/OpenEXR/ImathLineAlgo.h b/3rdparty/include/OpenEXR/ImathLineAlgo.h deleted file mode 100644 index 7f6fbaa4d..000000000 --- a/3rdparty/include/OpenEXR/ImathLineAlgo.h +++ /dev/null @@ -1,333 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHLINEALGO_H -#define INCLUDED_IMATHLINEALGO_H - -//------------------------------------------------------------------ -// -// This file contains algorithms applied to or in conjunction -// with lines (Imath::Line). These algorithms may require -// more headers to compile. The assumption made is that these -// functions are called much less often than the basic line -// functions or these functions require more support classes -// -// Contains: -// -// bool closestPoints(const Line& line1, -// const Line& line2, -// Vec3& point1, -// Vec3& point2) -// -// bool intersect( const Line3 &line, -// const Vec3 &v0, -// const Vec3 &v1, -// const Vec3 &v2, -// Vec3 &pt, -// Vec3 &barycentric, -// bool &front) -// -// V3f -// closestVertex(const Vec3 &v0, -// const Vec3 &v1, -// const Vec3 &v2, -// const Line3 &l) -// -// V3f -// nearestPointOnTriangle(const Vec3 &v0, -// const Vec3 &v1, -// const Vec3 &v2, -// const Line3 &l) -// -// V3f -// rotatePoint(const Vec3 p, Line3 l, float angle) -// -//------------------------------------------------------------------ - -#include "ImathLine.h" -#include "ImathVecAlgo.h" - -namespace Imath { - - -template -bool closestPoints(const Line3& line1, - const Line3& line2, - Vec3& point1, - Vec3& point2) -{ - // - // Compute the closest points on two lines. This was originally - // lifted from inventor. This function assumes that the line - // directions are normalized. The original math has been collapsed. - // - - T A = line1.dir ^ line2.dir; - - if ( A == 1 ) return false; - - T denom = A * A - 1; - - T B = (line1.dir ^ line1.pos) - (line1.dir ^ line2.pos); - T C = (line2.dir ^ line1.pos) - (line2.dir ^ line2.pos); - - point1 = line1(( B - A * C ) / denom); - point2 = line2(( B * A - C ) / denom); - - return true; -} - - - -template -bool intersect( const Line3 &line, - const Vec3 &v0, - const Vec3 &v1, - const Vec3 &v2, - Vec3 &pt, - Vec3 &barycentric, - bool &front) -{ - // Intersect the line with a triangle. - // 1. find plane of triangle - // 2. find intersection point of ray and plane - // 3. pick plane to project point and triangle into - // 4. check each edge of triangle to see if point is inside it - - // - // XXX TODO - this routine is way too long - // - the value of EPSILON is dubious - // - there should be versions of this - // routine that do not calculate the - // barycentric coordinates or the - // front flag - - const float EPSILON = 1e-6; - - T d, t, d01, d12, d20, vd0, vd1, vd2, ax, ay, az, sense; - Vec3 v01, v12, v20, c; - int axis0, axis1; - - // calculate plane for polygon - v01 = v1 - v0; - v12 = v2 - v1; - - // c is un-normalized normal - c = v12.cross(v01); - - d = c.length(); - if(d < EPSILON) - return false; // cant hit a triangle with no area - c = c * (1. / d); - - // calculate distance to plane along ray - - d = line.dir.dot(c); - if (d < EPSILON && d > -EPSILON) - return false; // line is parallel to plane containing triangle - - t = (v0 - line.pos).dot(c) / d; - - if(t < 0) - return false; - - // calculate intersection point - pt = line.pos + t * line.dir; - - // is point inside triangle? Project to 2d to find out - // use the plane that has the largest absolute value - // component in the normal - ax = c[0] < 0 ? -c[0] : c[0]; - ay = c[1] < 0 ? -c[1] : c[1]; - az = c[2] < 0 ? -c[2] : c[2]; - - if(ax > ay && ax > az) - { - // project on x=0 plane - - axis0 = 1; - axis1 = 2; - sense = c[0] < 0 ? -1 : 1; - } - else if(ay > az) - { - axis0 = 2; - axis1 = 0; - sense = c[1] < 0 ? -1 : 1; - } - else - { - axis0 = 0; - axis1 = 1; - sense = c[2] < 0 ? -1 : 1; - } - - // distance from v0-v1 must be less than distance from v2 to v0-v1 - d01 = sense * ((pt[axis0] - v0[axis0]) * v01[axis1] - - (pt[axis1] - v0[axis1]) * v01[axis0]); - - if(d01 < 0) return false; - - vd2 = sense * ((v2[axis0] - v0[axis0]) * v01[axis1] - - (v2[axis1] - v0[axis1]) * v01[axis0]); - - if(d01 > vd2) return false; - - // distance from v1-v2 must be less than distance from v1 to v2-v0 - d12 = sense * ((pt[axis0] - v1[axis0]) * v12[axis1] - - (pt[axis1] - v1[axis1]) * v12[axis0]); - - if(d12 < 0) return false; - - vd0 = sense * ((v0[axis0] - v1[axis0]) * v12[axis1] - - (v0[axis1] - v1[axis1]) * v12[axis0]); - - if(d12 > vd0) return false; - - // calculate v20, and do check on final side of triangle - v20 = v0 - v2; - d20 = sense * ((pt[axis0] - v2[axis0]) * v20[axis1] - - (pt[axis1] - v2[axis1]) * v20[axis0]); - - if(d20 < 0) return false; - - vd1 = sense * ((v1[axis0] - v2[axis0]) * v20[axis1] - - (v1[axis1] - v2[axis1]) * v20[axis0]); - - if(d20 > vd1) return false; - - // vd0, vd1, and vd2 will always be non-zero for a triangle - // that has non-zero area (we return before this for - // zero area triangles) - barycentric = Vec3(d12 / vd0, d20 / vd1, d01 / vd2); - front = line.dir.dot(c) < 0; - - return true; -} - -template -Vec3 -closestVertex(const Vec3 &v0, - const Vec3 &v1, - const Vec3 &v2, - const Line3 &l) -{ - Vec3 nearest = v0; - T neardot = (v0 - l.closestPointTo(v0)).length2(); - - T tmp = (v1 - l.closestPointTo(v1)).length2(); - - if (tmp < neardot) - { - neardot = tmp; - nearest = v1; - } - - tmp = (v2 - l.closestPointTo(v2)).length2(); - if (tmp < neardot) - { - neardot = tmp; - nearest = v2; - } - - return nearest; -} - -template -Vec3 -nearestPointOnTriangle(const Vec3 &v0, - const Vec3 &v1, - const Vec3 &v2, - const Line3 &l) -{ - Vec3 pt, barycentric; - bool front; - - if (intersect (l, v0, v1, v2, pt, barycentric, front)) - return pt; - - // - // The line did not intersect the triangle, so to be picky, you should - // find the closest edge that it passed over/under, but chances are that - // 1) another triangle will be closer - // 2) the app does not need this much precision for a ray that does not - // intersect the triangle - // 3) the expense of the calculation is not worth it since this is the - // common case - // - // XXX TODO This is bogus -- nearestPointOnTriangle() should do - // what its name implies; it should return a point - // on an edge if some edge is closer to the line than - // any vertex. If the application does not want the - // extra calculations, it should be possible to specify - // that; it is not up to this nearestPointOnTriangle() - // to make the decision. - - return closestVertex(v0, v1, v2, l); -} - -template -Vec3 -rotatePoint(const Vec3 p, Line3 l, T angle) -{ - // - // Rotate the point p around the line l by the given angle. - // - - // - // Form a coordinate frame with . The rotation is the in xy - // plane. - // - - Vec3 q = l.closestPointTo(p); - Vec3 x = p - q; - T radius = x.length(); - - x.normalize(); - Vec3 y = (x % l.dir).normalize(); - - T cosangle = Math::cos(angle); - T sinangle = Math::sin(angle); - - Vec3 r = q + x * radius * cosangle + y * radius * sinangle; - - return r; -} - - -} // namespace Imath - -#endif diff --git a/3rdparty/include/OpenEXR/ImathMath.h b/3rdparty/include/OpenEXR/ImathMath.h deleted file mode 100644 index b29356c57..000000000 --- a/3rdparty/include/OpenEXR/ImathMath.h +++ /dev/null @@ -1,191 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHMATH_H -#define INCLUDED_IMATHMATH_H - -//---------------------------------------------------------------------------- -// -// ImathMath.h -// -// This file contains template functions which call the double- -// precision math functions defined in math.h (sin(), sqrt(), -// exp() etc.), with specializations that call the faster -// single-precision versions (sinf(), sqrtf(), expf() etc.) -// when appropriate. -// -// Example: -// -// double x = Math::sqrt (3); // calls ::sqrt(double); -// float y = Math::sqrt (3); // calls ::sqrtf(float); -// -// When would I want to use this? -// -// You may be writing a template which needs to call some function -// defined in math.h, for example to extract a square root, but you -// don't know whether to call the single- or the double-precision -// version of this function (sqrt() or sqrtf()): -// -// template -// T -// glorp (T x) -// { -// return sqrt (x + 1); // should call ::sqrtf(float) -// } // if x is a float, but we -// // don't know if it is -// -// Using the templates in this file, you can make sure that -// the appropriate version of the math function is called: -// -// template -// T -// glorp (T x, T y) -// { -// return Math::sqrt (x + 1); // calls ::sqrtf(float) if x -// } // is a float, ::sqrt(double) -// // otherwise -// -//---------------------------------------------------------------------------- - -#include "ImathPlatform.h" -#include - -namespace Imath { - - -template -struct Math -{ - static T acos (T x) {return ::acos (double(x));} - static T asin (T x) {return ::asin (double(x));} - static T atan (T x) {return ::atan (double(x));} - static T atan2 (T x, T y) {return ::atan2 (double(x), double(y));} - static T cos (T x) {return ::cos (double(x));} - static T sin (T x) {return ::sin (double(x));} - static T tan (T x) {return ::tan (double(x));} - static T cosh (T x) {return ::cosh (double(x));} - static T sinh (T x) {return ::sinh (double(x));} - static T tanh (T x) {return ::tanh (double(x));} - static T exp (T x) {return ::exp (double(x));} - static T log (T x) {return ::log (double(x));} - static T log10 (T x) {return ::log10 (double(x));} - static T modf (T x, T *iptr) - { - double ival; - T rval( ::modf (double(x),&ival)); - *iptr = ival; - return rval; - } - static T pow (T x, T y) {return ::pow (double(x), double(y));} - static T sqrt (T x) {return ::sqrt (double(x));} - static T ceil (T x) {return ::ceil (double(x));} - static T fabs (T x) {return ::fabs (double(x));} - static T floor (T x) {return ::floor (double(x));} - static T fmod (T x, T y) {return ::fmod (double(x), double(y));} - static T hypot (T x, T y) {return ::hypot (double(x), double(y));} -}; - - -template <> -struct Math -{ - static float acos (float x) {return ::acosf (x);} - static float asin (float x) {return ::asinf (x);} - static float atan (float x) {return ::atanf (x);} - static float atan2 (float x, float y) {return ::atan2f (x, y);} - static float cos (float x) {return ::cosf (x);} - static float sin (float x) {return ::sinf (x);} - static float tan (float x) {return ::tanf (x);} - static float cosh (float x) {return ::coshf (x);} - static float sinh (float x) {return ::sinhf (x);} - static float tanh (float x) {return ::tanhf (x);} - static float exp (float x) {return ::expf (x);} - static float log (float x) {return ::logf (x);} - static float log10 (float x) {return ::log10f (x);} - static float modf (float x, float *y) {return ::modff (x, y);} - static float pow (float x, float y) {return ::powf (x, y);} - static float sqrt (float x) {return ::sqrtf (x);} - static float ceil (float x) {return ::ceilf (x);} - static float fabs (float x) {return ::fabsf (x);} - static float floor (float x) {return ::floorf (x);} - static float fmod (float x, float y) {return ::fmodf (x, y);} -#if !defined(_MSC_VER) - static float hypot (float x, float y) {return ::hypotf (x, y);} -#else - static float hypot (float x, float y) {return ::sqrtf(x*x + y*y);} -#endif -}; - - -//-------------------------------------------------------------------------- -// Compare two numbers and test if they are "approximately equal": -// -// equalWithAbsError (x1, x2, e) -// -// Returns true if x1 is the same as x2 with an absolute error of -// no more than e, -// -// abs (x1 - x2) <= e -// -// equalWithRelError (x1, x2, e) -// -// Returns true if x1 is the same as x2 with an relative error of -// no more than e, -// -// abs (x1 - x2) <= e * x1 -// -//-------------------------------------------------------------------------- - -template -inline bool -equalWithAbsError (T x1, T x2, T e) -{ - return ((x1 > x2)? x1 - x2: x2 - x1) <= e; -} - - -template -inline bool -equalWithRelError (T x1, T x2, T e) -{ - return ((x1 > x2)? x1 - x2: x2 - x1) <= e * ((x1 > 0)? x1: -x1); -} - - - -} // namespace Imath - -#endif diff --git a/3rdparty/include/OpenEXR/ImathMatrix.h b/3rdparty/include/OpenEXR/ImathMatrix.h deleted file mode 100644 index 6192d3c43..000000000 --- a/3rdparty/include/OpenEXR/ImathMatrix.h +++ /dev/null @@ -1,3249 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHMATRIX_H -#define INCLUDED_IMATHMATRIX_H - -//---------------------------------------------------------------- -// -// 2D (3x3) and 3D (4x4) transformation matrix templates. -// -//---------------------------------------------------------------- - -#include "ImathPlatform.h" -#include "ImathFun.h" -#include "ImathExc.h" -#include "ImathVec.h" -#include "ImathShear.h" - -#include -#include - - -namespace Imath { - - -template class Matrix33 -{ - public: - - //------------------- - // Access to elements - //------------------- - - T x[3][3]; - - T * operator [] (int i); - const T * operator [] (int i) const; - - - //------------- - // Constructors - //------------- - - Matrix33 (); - // 1 0 0 - // 0 1 0 - // 0 0 1 - - Matrix33 (T a); - // a a a - // a a a - // a a a - - Matrix33 (const T a[3][3]); - // a[0][0] a[0][1] a[0][2] - // a[1][0] a[1][1] a[1][2] - // a[2][0] a[2][1] a[2][2] - - Matrix33 (T a, T b, T c, T d, T e, T f, T g, T h, T i); - - // a b c - // d e f - // g h i - - - //-------------------------------- - // Copy constructor and assignment - //-------------------------------- - - Matrix33 (const Matrix33 &v); - - const Matrix33 & operator = (const Matrix33 &v); - const Matrix33 & operator = (T a); - - - //---------------------- - // Compatibility with Sb - //---------------------- - - T * getValue (); - const T * getValue () const; - - template - void getValue (Matrix33 &v) const; - template - Matrix33 & setValue (const Matrix33 &v); - - template - Matrix33 & setTheMatrix (const Matrix33 &v); - - - //--------- - // Identity - //--------- - - void makeIdentity(); - - - //--------- - // Equality - //--------- - - bool operator == (const Matrix33 &v) const; - bool operator != (const Matrix33 &v) const; - - //----------------------------------------------------------------------- - // Compare two matrices and test if they are "approximately equal": - // - // equalWithAbsError (m, e) - // - // Returns true if the coefficients of this and m are the same with - // an absolute error of no more than e, i.e., for all i, j - // - // abs (this[i][j] - m[i][j]) <= e - // - // equalWithRelError (m, e) - // - // Returns true if the coefficients of this and m are the same with - // a relative error of no more than e, i.e., for all i, j - // - // abs (this[i] - v[i][j]) <= e * abs (this[i][j]) - //----------------------------------------------------------------------- - - bool equalWithAbsError (const Matrix33 &v, T e) const; - bool equalWithRelError (const Matrix33 &v, T e) const; - - - //------------------------ - // Component-wise addition - //------------------------ - - const Matrix33 & operator += (const Matrix33 &v); - const Matrix33 & operator += (T a); - Matrix33 operator + (const Matrix33 &v) const; - - - //--------------------------- - // Component-wise subtraction - //--------------------------- - - const Matrix33 & operator -= (const Matrix33 &v); - const Matrix33 & operator -= (T a); - Matrix33 operator - (const Matrix33 &v) const; - - - //------------------------------------ - // Component-wise multiplication by -1 - //------------------------------------ - - Matrix33 operator - () const; - const Matrix33 & negate (); - - - //------------------------------ - // Component-wise multiplication - //------------------------------ - - const Matrix33 & operator *= (T a); - Matrix33 operator * (T a) const; - - - //----------------------------------- - // Matrix-times-matrix multiplication - //----------------------------------- - - const Matrix33 & operator *= (const Matrix33 &v); - Matrix33 operator * (const Matrix33 &v) const; - - - //--------------------------------------------- - // Vector-times-matrix multiplication; see also - // the "operator *" functions defined below. - //--------------------------------------------- - - template - void multVecMatrix(const Vec2 &src, Vec2 &dst) const; - - template - void multDirMatrix(const Vec2 &src, Vec2 &dst) const; - - - //------------------------ - // Component-wise division - //------------------------ - - const Matrix33 & operator /= (T a); - Matrix33 operator / (T a) const; - - - //------------------ - // Transposed matrix - //------------------ - - const Matrix33 & transpose (); - Matrix33 transposed () const; - - - //------------------------------------------------------------ - // Inverse matrix: If singExc is false, inverting a singular - // matrix produces an identity matrix. If singExc is true, - // inverting a singular matrix throws a SingMatrixExc. - // - // inverse() and invert() invert matrices using determinants; - // gjInverse() and gjInvert() use the Gauss-Jordan method. - // - // inverse() and invert() are significantly faster than - // gjInverse() and gjInvert(), but the results may be slightly - // less accurate. - // - //------------------------------------------------------------ - - const Matrix33 & invert (bool singExc = false) - throw (Iex::MathExc); - - Matrix33 inverse (bool singExc = false) const - throw (Iex::MathExc); - - const Matrix33 & gjInvert (bool singExc = false) - throw (Iex::MathExc); - - Matrix33 gjInverse (bool singExc = false) const - throw (Iex::MathExc); - - - //----------------------------------------- - // Set matrix to rotation by r (in radians) - //----------------------------------------- - - template - const Matrix33 & setRotation (S r); - - - //----------------------------- - // Rotate the given matrix by r - //----------------------------- - - template - const Matrix33 & rotate (S r); - - - //-------------------------------------------- - // Set matrix to scale by given uniform factor - //-------------------------------------------- - - const Matrix33 & setScale (T s); - - - //------------------------------------ - // Set matrix to scale by given vector - //------------------------------------ - - template - const Matrix33 & setScale (const Vec2 &s); - - - //---------------------- - // Scale the matrix by s - //---------------------- - - template - const Matrix33 & scale (const Vec2 &s); - - - //------------------------------------------ - // Set matrix to translation by given vector - //------------------------------------------ - - template - const Matrix33 & setTranslation (const Vec2 &t); - - - //----------------------------- - // Return translation component - //----------------------------- - - Vec2 translation () const; - - - //-------------------------- - // Translate the matrix by t - //-------------------------- - - template - const Matrix33 & translate (const Vec2 &t); - - - //----------------------------------------------------------- - // Set matrix to shear x for each y coord. by given factor xy - //----------------------------------------------------------- - - template - const Matrix33 & setShear (const S &h); - - - //------------------------------------------------------------- - // Set matrix to shear x for each y coord. by given factor h[0] - // and to shear y for each x coord. by given factor h[1] - //------------------------------------------------------------- - - template - const Matrix33 & setShear (const Vec2 &h); - - - //----------------------------------------------------------- - // Shear the matrix in x for each y coord. by given factor xy - //----------------------------------------------------------- - - template - const Matrix33 & shear (const S &xy); - - - //----------------------------------------------------------- - // Shear the matrix in x for each y coord. by given factor xy - // and shear y for each x coord. by given factor yx - //----------------------------------------------------------- - - template - const Matrix33 & shear (const Vec2 &h); - - - //------------------------------------------------- - // Limitations of type T (see also class limits) - //------------------------------------------------- - - static T baseTypeMin() {return limits::min();} - static T baseTypeMax() {return limits::max();} - static T baseTypeSmallest() {return limits::smallest();} - static T baseTypeEpsilon() {return limits::epsilon();} -}; - - -template class Matrix44 -{ - public: - - //------------------- - // Access to elements - //------------------- - - T x[4][4]; - - T * operator [] (int i); - const T * operator [] (int i) const; - - - //------------- - // Constructors - //------------- - - Matrix44 (); - // 1 0 0 0 - // 0 1 0 0 - // 0 0 1 0 - // 0 0 0 1 - - Matrix44 (T a); - // a a a a - // a a a a - // a a a a - // a a a a - - Matrix44 (const T a[4][4]) ; - // a[0][0] a[0][1] a[0][2] a[0][3] - // a[1][0] a[1][1] a[1][2] a[1][3] - // a[2][0] a[2][1] a[2][2] a[2][3] - // a[3][0] a[3][1] a[3][2] a[3][3] - - Matrix44 (T a, T b, T c, T d, T e, T f, T g, T h, - T i, T j, T k, T l, T m, T n, T o, T p); - - // a b c d - // e f g h - // i j k l - // m n o p - - Matrix44 (Matrix33 r, Vec3 t); - // r r r 0 - // r r r 0 - // r r r 0 - // t t t 1 - - - //-------------------------------- - // Copy constructor and assignment - //-------------------------------- - - Matrix44 (const Matrix44 &v); - - const Matrix44 & operator = (const Matrix44 &v); - const Matrix44 & operator = (T a); - - - //---------------------- - // Compatibility with Sb - //---------------------- - - T * getValue (); - const T * getValue () const; - - template - void getValue (Matrix44 &v) const; - template - Matrix44 & setValue (const Matrix44 &v); - - template - Matrix44 & setTheMatrix (const Matrix44 &v); - - //--------- - // Identity - //--------- - - void makeIdentity(); - - - //--------- - // Equality - //--------- - - bool operator == (const Matrix44 &v) const; - bool operator != (const Matrix44 &v) const; - - //----------------------------------------------------------------------- - // Compare two matrices and test if they are "approximately equal": - // - // equalWithAbsError (m, e) - // - // Returns true if the coefficients of this and m are the same with - // an absolute error of no more than e, i.e., for all i, j - // - // abs (this[i][j] - m[i][j]) <= e - // - // equalWithRelError (m, e) - // - // Returns true if the coefficients of this and m are the same with - // a relative error of no more than e, i.e., for all i, j - // - // abs (this[i] - v[i][j]) <= e * abs (this[i][j]) - //----------------------------------------------------------------------- - - bool equalWithAbsError (const Matrix44 &v, T e) const; - bool equalWithRelError (const Matrix44 &v, T e) const; - - - //------------------------ - // Component-wise addition - //------------------------ - - const Matrix44 & operator += (const Matrix44 &v); - const Matrix44 & operator += (T a); - Matrix44 operator + (const Matrix44 &v) const; - - - //--------------------------- - // Component-wise subtraction - //--------------------------- - - const Matrix44 & operator -= (const Matrix44 &v); - const Matrix44 & operator -= (T a); - Matrix44 operator - (const Matrix44 &v) const; - - - //------------------------------------ - // Component-wise multiplication by -1 - //------------------------------------ - - Matrix44 operator - () const; - const Matrix44 & negate (); - - - //------------------------------ - // Component-wise multiplication - //------------------------------ - - const Matrix44 & operator *= (T a); - Matrix44 operator * (T a) const; - - - //----------------------------------- - // Matrix-times-matrix multiplication - //----------------------------------- - - const Matrix44 & operator *= (const Matrix44 &v); - Matrix44 operator * (const Matrix44 &v) const; - - static void multiply (const Matrix44 &a, // assumes that - const Matrix44 &b, // &a != &c and - Matrix44 &c); // &b != &c. - - - //--------------------------------------------- - // Vector-times-matrix multiplication; see also - // the "operator *" functions defined below. - //--------------------------------------------- - - template - void multVecMatrix(const Vec3 &src, Vec3 &dst) const; - - template - void multDirMatrix(const Vec3 &src, Vec3 &dst) const; - - - //------------------------ - // Component-wise division - //------------------------ - - const Matrix44 & operator /= (T a); - Matrix44 operator / (T a) const; - - - //------------------ - // Transposed matrix - //------------------ - - const Matrix44 & transpose (); - Matrix44 transposed () const; - - - //------------------------------------------------------------ - // Inverse matrix: If singExc is false, inverting a singular - // matrix produces an identity matrix. If singExc is true, - // inverting a singular matrix throws a SingMatrixExc. - // - // inverse() and invert() invert matrices using determinants; - // gjInverse() and gjInvert() use the Gauss-Jordan method. - // - // inverse() and invert() are significantly faster than - // gjInverse() and gjInvert(), but the results may be slightly - // less accurate. - // - //------------------------------------------------------------ - - const Matrix44 & invert (bool singExc = false) - throw (Iex::MathExc); - - Matrix44 inverse (bool singExc = false) const - throw (Iex::MathExc); - - const Matrix44 & gjInvert (bool singExc = false) - throw (Iex::MathExc); - - Matrix44 gjInverse (bool singExc = false) const - throw (Iex::MathExc); - - - //-------------------------------------------------------- - // Set matrix to rotation by XYZ euler angles (in radians) - //-------------------------------------------------------- - - template - const Matrix44 & setEulerAngles (const Vec3& r); - - - //-------------------------------------------------------- - // Set matrix to rotation around given axis by given angle - //-------------------------------------------------------- - - template - const Matrix44 & setAxisAngle (const Vec3& ax, S ang); - - - //------------------------------------------- - // Rotate the matrix by XYZ euler angles in r - //------------------------------------------- - - template - const Matrix44 & rotate (const Vec3 &r); - - - //-------------------------------------------- - // Set matrix to scale by given uniform factor - //-------------------------------------------- - - const Matrix44 & setScale (T s); - - - //------------------------------------ - // Set matrix to scale by given vector - //------------------------------------ - - template - const Matrix44 & setScale (const Vec3 &s); - - - //---------------------- - // Scale the matrix by s - //---------------------- - - template - const Matrix44 & scale (const Vec3 &s); - - - //------------------------------------------ - // Set matrix to translation by given vector - //------------------------------------------ - - template - const Matrix44 & setTranslation (const Vec3 &t); - - - //----------------------------- - // Return translation component - //----------------------------- - - const Vec3 translation () const; - - - //-------------------------- - // Translate the matrix by t - //-------------------------- - - template - const Matrix44 & translate (const Vec3 &t); - - - //------------------------------------------------------------- - // Set matrix to shear by given vector h. The resulting matrix - // will shear x for each y coord. by a factor of h[0] ; - // will shear x for each z coord. by a factor of h[1] ; - // will shear y for each z coord. by a factor of h[2] . - //------------------------------------------------------------- - - template - const Matrix44 & setShear (const Vec3 &h); - - - //------------------------------------------------------------ - // Set matrix to shear by given factors. The resulting matrix - // will shear x for each y coord. by a factor of h.xy ; - // will shear x for each z coord. by a factor of h.xz ; - // will shear y for each z coord. by a factor of h.yz ; - // will shear y for each x coord. by a factor of h.yx ; - // will shear z for each x coord. by a factor of h.zx ; - // will shear z for each y coord. by a factor of h.zy . - //------------------------------------------------------------ - - template - const Matrix44 & setShear (const Shear6 &h); - - - //-------------------------------------------------------- - // Shear the matrix by given vector. The composed matrix - // will be * , where the shear matrix ... - // will shear x for each y coord. by a factor of h[0] ; - // will shear x for each z coord. by a factor of h[1] ; - // will shear y for each z coord. by a factor of h[2] . - //-------------------------------------------------------- - - template - const Matrix44 & shear (const Vec3 &h); - - - //------------------------------------------------------------ - // Shear the matrix by the given factors. The composed matrix - // will be * , where the shear matrix ... - // will shear x for each y coord. by a factor of h.xy ; - // will shear x for each z coord. by a factor of h.xz ; - // will shear y for each z coord. by a factor of h.yz ; - // will shear y for each x coord. by a factor of h.yx ; - // will shear z for each x coord. by a factor of h.zx ; - // will shear z for each y coord. by a factor of h.zy . - //------------------------------------------------------------ - - template - const Matrix44 & shear (const Shear6 &h); - - - //------------------------------------------------- - // Limitations of type T (see also class limits) - //------------------------------------------------- - - static T baseTypeMin() {return limits::min();} - static T baseTypeMax() {return limits::max();} - static T baseTypeSmallest() {return limits::smallest();} - static T baseTypeEpsilon() {return limits::epsilon();} -}; - - -//-------------- -// Stream output -//-------------- - -template -std::ostream & operator << (std::ostream & s, const Matrix33 &m); - -template -std::ostream & operator << (std::ostream & s, const Matrix44 &m); - - -//--------------------------------------------- -// Vector-times-matrix multiplication operators -//--------------------------------------------- - -template -const Vec2 & operator *= (Vec2 &v, const Matrix33 &m); - -template -Vec2 operator * (const Vec2 &v, const Matrix33 &m); - -template -const Vec3 & operator *= (Vec3 &v, const Matrix33 &m); - -template -Vec3 operator * (const Vec3 &v, const Matrix33 &m); - -template -const Vec3 & operator *= (Vec3 &v, const Matrix44 &m); - -template -Vec3 operator * (const Vec3 &v, const Matrix44 &m); - - -//------------------------- -// Typedefs for convenience -//------------------------- - -typedef Matrix33 M33f; -typedef Matrix33 M33d; -typedef Matrix44 M44f; -typedef Matrix44 M44d; - - -//--------------------------- -// Implementation of Matrix33 -//--------------------------- - -template -inline T * -Matrix33::operator [] (int i) -{ - return x[i]; -} - -template -inline const T * -Matrix33::operator [] (int i) const -{ - return x[i]; -} - -template -inline -Matrix33::Matrix33 () -{ - x[0][0] = 1; - x[0][1] = 0; - x[0][2] = 0; - x[1][0] = 0; - x[1][1] = 1; - x[1][2] = 0; - x[2][0] = 0; - x[2][1] = 0; - x[2][2] = 1; -} - -template -inline -Matrix33::Matrix33 (T a) -{ - x[0][0] = a; - x[0][1] = a; - x[0][2] = a; - x[1][0] = a; - x[1][1] = a; - x[1][2] = a; - x[2][0] = a; - x[2][1] = a; - x[2][2] = a; -} - -template -inline -Matrix33::Matrix33 (const T a[3][3]) -{ - x[0][0] = a[0][0]; - x[0][1] = a[0][1]; - x[0][2] = a[0][2]; - x[1][0] = a[1][0]; - x[1][1] = a[1][1]; - x[1][2] = a[1][2]; - x[2][0] = a[2][0]; - x[2][1] = a[2][1]; - x[2][2] = a[2][2]; -} - -template -inline -Matrix33::Matrix33 (T a, T b, T c, T d, T e, T f, T g, T h, T i) -{ - x[0][0] = a; - x[0][1] = b; - x[0][2] = c; - x[1][0] = d; - x[1][1] = e; - x[1][2] = f; - x[2][0] = g; - x[2][1] = h; - x[2][2] = i; -} - -template -inline -Matrix33::Matrix33 (const Matrix33 &v) -{ - x[0][0] = v.x[0][0]; - x[0][1] = v.x[0][1]; - x[0][2] = v.x[0][2]; - x[1][0] = v.x[1][0]; - x[1][1] = v.x[1][1]; - x[1][2] = v.x[1][2]; - x[2][0] = v.x[2][0]; - x[2][1] = v.x[2][1]; - x[2][2] = v.x[2][2]; -} - -template -inline const Matrix33 & -Matrix33::operator = (const Matrix33 &v) -{ - x[0][0] = v.x[0][0]; - x[0][1] = v.x[0][1]; - x[0][2] = v.x[0][2]; - x[1][0] = v.x[1][0]; - x[1][1] = v.x[1][1]; - x[1][2] = v.x[1][2]; - x[2][0] = v.x[2][0]; - x[2][1] = v.x[2][1]; - x[2][2] = v.x[2][2]; - return *this; -} - -template -inline const Matrix33 & -Matrix33::operator = (T a) -{ - x[0][0] = a; - x[0][1] = a; - x[0][2] = a; - x[1][0] = a; - x[1][1] = a; - x[1][2] = a; - x[2][0] = a; - x[2][1] = a; - x[2][2] = a; - return *this; -} - -template -inline T * -Matrix33::getValue () -{ - return (T *) &x[0][0]; -} - -template -inline const T * -Matrix33::getValue () const -{ - return (const T *) &x[0][0]; -} - -template -template -inline void -Matrix33::getValue (Matrix33 &v) const -{ - v.x[0][0] = x[0][0]; - v.x[0][1] = x[0][1]; - v.x[0][2] = x[0][2]; - v.x[1][0] = x[1][0]; - v.x[1][1] = x[1][1]; - v.x[1][2] = x[1][2]; - v.x[2][0] = x[2][0]; - v.x[2][1] = x[2][1]; - v.x[2][2] = x[2][2]; -} - -template -template -inline Matrix33 & -Matrix33::setValue (const Matrix33 &v) -{ - x[0][0] = v.x[0][0]; - x[0][1] = v.x[0][1]; - x[0][2] = v.x[0][2]; - x[1][0] = v.x[1][0]; - x[1][1] = v.x[1][1]; - x[1][2] = v.x[1][2]; - x[2][0] = v.x[2][0]; - x[2][1] = v.x[2][1]; - x[2][2] = v.x[2][2]; - return *this; -} - -template -template -inline Matrix33 & -Matrix33::setTheMatrix (const Matrix33 &v) -{ - x[0][0] = v.x[0][0]; - x[0][1] = v.x[0][1]; - x[0][2] = v.x[0][2]; - x[1][0] = v.x[1][0]; - x[1][1] = v.x[1][1]; - x[1][2] = v.x[1][2]; - x[2][0] = v.x[2][0]; - x[2][1] = v.x[2][1]; - x[2][2] = v.x[2][2]; - return *this; -} - -template -inline void -Matrix33::makeIdentity() -{ - x[0][0] = 1; - x[0][1] = 0; - x[0][2] = 0; - x[1][0] = 0; - x[1][1] = 1; - x[1][2] = 0; - x[2][0] = 0; - x[2][1] = 0; - x[2][2] = 1; -} - -template -bool -Matrix33::operator == (const Matrix33 &v) const -{ - return x[0][0] == v.x[0][0] && - x[0][1] == v.x[0][1] && - x[0][2] == v.x[0][2] && - x[1][0] == v.x[1][0] && - x[1][1] == v.x[1][1] && - x[1][2] == v.x[1][2] && - x[2][0] == v.x[2][0] && - x[2][1] == v.x[2][1] && - x[2][2] == v.x[2][2]; -} - -template -bool -Matrix33::operator != (const Matrix33 &v) const -{ - return x[0][0] != v.x[0][0] || - x[0][1] != v.x[0][1] || - x[0][2] != v.x[0][2] || - x[1][0] != v.x[1][0] || - x[1][1] != v.x[1][1] || - x[1][2] != v.x[1][2] || - x[2][0] != v.x[2][0] || - x[2][1] != v.x[2][1] || - x[2][2] != v.x[2][2]; -} - -template -bool -Matrix33::equalWithAbsError (const Matrix33 &m, T e) const -{ - for (int i = 0; i < 3; i++) - for (int j = 0; j < 3; j++) - if (!Imath::equalWithAbsError ((*this)[i][j], m[i][j], e)) - return false; - - return true; -} - -template -bool -Matrix33::equalWithRelError (const Matrix33 &m, T e) const -{ - for (int i = 0; i < 3; i++) - for (int j = 0; j < 3; j++) - if (!Imath::equalWithRelError ((*this)[i][j], m[i][j], e)) - return false; - - return true; -} - -template -const Matrix33 & -Matrix33::operator += (const Matrix33 &v) -{ - x[0][0] += v.x[0][0]; - x[0][1] += v.x[0][1]; - x[0][2] += v.x[0][2]; - x[1][0] += v.x[1][0]; - x[1][1] += v.x[1][1]; - x[1][2] += v.x[1][2]; - x[2][0] += v.x[2][0]; - x[2][1] += v.x[2][1]; - x[2][2] += v.x[2][2]; - - return *this; -} - -template -const Matrix33 & -Matrix33::operator += (T a) -{ - x[0][0] += a; - x[0][1] += a; - x[0][2] += a; - x[1][0] += a; - x[1][1] += a; - x[1][2] += a; - x[2][0] += a; - x[2][1] += a; - x[2][2] += a; - - return *this; -} - -template -Matrix33 -Matrix33::operator + (const Matrix33 &v) const -{ - return Matrix33 (x[0][0] + v.x[0][0], - x[0][1] + v.x[0][1], - x[0][2] + v.x[0][2], - x[1][0] + v.x[1][0], - x[1][1] + v.x[1][1], - x[1][2] + v.x[1][2], - x[2][0] + v.x[2][0], - x[2][1] + v.x[2][1], - x[2][2] + v.x[2][2]); -} - -template -const Matrix33 & -Matrix33::operator -= (const Matrix33 &v) -{ - x[0][0] -= v.x[0][0]; - x[0][1] -= v.x[0][1]; - x[0][2] -= v.x[0][2]; - x[1][0] -= v.x[1][0]; - x[1][1] -= v.x[1][1]; - x[1][2] -= v.x[1][2]; - x[2][0] -= v.x[2][0]; - x[2][1] -= v.x[2][1]; - x[2][2] -= v.x[2][2]; - - return *this; -} - -template -const Matrix33 & -Matrix33::operator -= (T a) -{ - x[0][0] -= a; - x[0][1] -= a; - x[0][2] -= a; - x[1][0] -= a; - x[1][1] -= a; - x[1][2] -= a; - x[2][0] -= a; - x[2][1] -= a; - x[2][2] -= a; - - return *this; -} - -template -Matrix33 -Matrix33::operator - (const Matrix33 &v) const -{ - return Matrix33 (x[0][0] - v.x[0][0], - x[0][1] - v.x[0][1], - x[0][2] - v.x[0][2], - x[1][0] - v.x[1][0], - x[1][1] - v.x[1][1], - x[1][2] - v.x[1][2], - x[2][0] - v.x[2][0], - x[2][1] - v.x[2][1], - x[2][2] - v.x[2][2]); -} - -template -Matrix33 -Matrix33::operator - () const -{ - return Matrix33 (-x[0][0], - -x[0][1], - -x[0][2], - -x[1][0], - -x[1][1], - -x[1][2], - -x[2][0], - -x[2][1], - -x[2][2]); -} - -template -const Matrix33 & -Matrix33::negate () -{ - x[0][0] = -x[0][0]; - x[0][1] = -x[0][1]; - x[0][2] = -x[0][2]; - x[1][0] = -x[1][0]; - x[1][1] = -x[1][1]; - x[1][2] = -x[1][2]; - x[2][0] = -x[2][0]; - x[2][1] = -x[2][1]; - x[2][2] = -x[2][2]; - - return *this; -} - -template -const Matrix33 & -Matrix33::operator *= (T a) -{ - x[0][0] *= a; - x[0][1] *= a; - x[0][2] *= a; - x[1][0] *= a; - x[1][1] *= a; - x[1][2] *= a; - x[2][0] *= a; - x[2][1] *= a; - x[2][2] *= a; - - return *this; -} - -template -Matrix33 -Matrix33::operator * (T a) const -{ - return Matrix33 (x[0][0] * a, - x[0][1] * a, - x[0][2] * a, - x[1][0] * a, - x[1][1] * a, - x[1][2] * a, - x[2][0] * a, - x[2][1] * a, - x[2][2] * a); -} - -template -inline Matrix33 -operator * (T a, const Matrix33 &v) -{ - return v * a; -} - -template -const Matrix33 & -Matrix33::operator *= (const Matrix33 &v) -{ - Matrix33 tmp (T (0)); - - for (int i = 0; i < 3; i++) - for (int j = 0; j < 3; j++) - for (int k = 0; k < 3; k++) - tmp.x[i][j] += x[i][k] * v.x[k][j]; - - *this = tmp; - return *this; -} - -template -Matrix33 -Matrix33::operator * (const Matrix33 &v) const -{ - Matrix33 tmp (T (0)); - - for (int i = 0; i < 3; i++) - for (int j = 0; j < 3; j++) - for (int k = 0; k < 3; k++) - tmp.x[i][j] += x[i][k] * v.x[k][j]; - - return tmp; -} - -template -template -void -Matrix33::multVecMatrix(const Vec2 &src, Vec2 &dst) const -{ - S a, b, w; - - a = src[0] * x[0][0] + src[1] * x[1][0] + x[2][0]; - b = src[0] * x[0][1] + src[1] * x[1][1] + x[2][1]; - w = src[0] * x[0][2] + src[1] * x[1][2] + x[2][2]; - - dst.x = a / w; - dst.y = b / w; -} - -template -template -void -Matrix33::multDirMatrix(const Vec2 &src, Vec2 &dst) const -{ - S a, b; - - a = src[0] * x[0][0] + src[1] * x[1][0]; - b = src[0] * x[0][1] + src[1] * x[1][1]; - - dst.x = a; - dst.y = b; -} - -template -const Matrix33 & -Matrix33::operator /= (T a) -{ - x[0][0] /= a; - x[0][1] /= a; - x[0][2] /= a; - x[1][0] /= a; - x[1][1] /= a; - x[1][2] /= a; - x[2][0] /= a; - x[2][1] /= a; - x[2][2] /= a; - - return *this; -} - -template -Matrix33 -Matrix33::operator / (T a) const -{ - return Matrix33 (x[0][0] / a, - x[0][1] / a, - x[0][2] / a, - x[1][0] / a, - x[1][1] / a, - x[1][2] / a, - x[2][0] / a, - x[2][1] / a, - x[2][2] / a); -} - -template -const Matrix33 & -Matrix33::transpose () -{ - Matrix33 tmp (x[0][0], - x[1][0], - x[2][0], - x[0][1], - x[1][1], - x[2][1], - x[0][2], - x[1][2], - x[2][2]); - *this = tmp; - return *this; -} - -template -Matrix33 -Matrix33::transposed () const -{ - return Matrix33 (x[0][0], - x[1][0], - x[2][0], - x[0][1], - x[1][1], - x[2][1], - x[0][2], - x[1][2], - x[2][2]); -} - -template -const Matrix33 & -Matrix33::gjInvert (bool singExc) throw (Iex::MathExc) -{ - *this = gjInverse (singExc); - return *this; -} - -template -Matrix33 -Matrix33::gjInverse (bool singExc) const throw (Iex::MathExc) -{ - int i, j, k; - Matrix33 s; - Matrix33 t (*this); - - // Forward elimination - - for (i = 0; i < 2 ; i++) - { - int pivot = i; - - T pivotsize = t[i][i]; - - if (pivotsize < 0) - pivotsize = -pivotsize; - - for (j = i + 1; j < 3; j++) - { - T tmp = t[j][i]; - - if (tmp < 0) - tmp = -tmp; - - if (tmp > pivotsize) - { - pivot = j; - pivotsize = tmp; - } - } - - if (pivotsize == 0) - { - if (singExc) - throw ::Imath::SingMatrixExc ("Cannot invert singular matrix."); - - return Matrix33(); - } - - if (pivot != i) - { - for (j = 0; j < 3; j++) - { - T tmp; - - tmp = t[i][j]; - t[i][j] = t[pivot][j]; - t[pivot][j] = tmp; - - tmp = s[i][j]; - s[i][j] = s[pivot][j]; - s[pivot][j] = tmp; - } - } - - for (j = i + 1; j < 3; j++) - { - T f = t[j][i] / t[i][i]; - - for (k = 0; k < 3; k++) - { - t[j][k] -= f * t[i][k]; - s[j][k] -= f * s[i][k]; - } - } - } - - // Backward substitution - - for (i = 2; i >= 0; --i) - { - T f; - - if ((f = t[i][i]) == 0) - { - if (singExc) - throw ::Imath::SingMatrixExc ("Cannot invert singular matrix."); - - return Matrix33(); - } - - for (j = 0; j < 3; j++) - { - t[i][j] /= f; - s[i][j] /= f; - } - - for (j = 0; j < i; j++) - { - f = t[j][i]; - - for (k = 0; k < 3; k++) - { - t[j][k] -= f * t[i][k]; - s[j][k] -= f * s[i][k]; - } - } - } - - return s; -} - -template -const Matrix33 & -Matrix33::invert (bool singExc) throw (Iex::MathExc) -{ - *this = inverse (singExc); - return *this; -} - -template -Matrix33 -Matrix33::inverse (bool singExc) const throw (Iex::MathExc) -{ - if (x[0][2] != 0 || x[1][2] != 0 || x[2][2] != 1) - { - Matrix33 s (x[1][1] * x[2][2] - x[2][1] * x[1][2], - x[2][1] * x[0][2] - x[0][1] * x[2][2], - x[0][1] * x[1][2] - x[1][1] * x[0][2], - - x[2][0] * x[1][2] - x[1][0] * x[2][2], - x[0][0] * x[2][2] - x[2][0] * x[0][2], - x[1][0] * x[0][2] - x[0][0] * x[1][2], - - x[1][0] * x[2][1] - x[2][0] * x[1][1], - x[2][0] * x[0][1] - x[0][0] * x[2][1], - x[0][0] * x[1][1] - x[1][0] * x[0][1]); - - T r = x[0][0] * s[0][0] + x[0][1] * s[1][0] + x[0][2] * s[2][0]; - - if (Imath::abs (r) >= 1) - { - for (int i = 0; i < 3; ++i) - { - for (int j = 0; j < 3; ++j) - { - s[i][j] /= r; - } - } - } - else - { - T mr = Imath::abs (r) / limits::smallest(); - - for (int i = 0; i < 3; ++i) - { - for (int j = 0; j < 3; ++j) - { - if (mr > Imath::abs (s[i][j])) - { - s[i][j] /= r; - } - else - { - if (singExc) - throw SingMatrixExc ("Cannot invert " - "singular matrix."); - return Matrix33(); - } - } - } - } - - return s; - } - else - { - Matrix33 s ( x[1][1], - -x[0][1], - 0, - - -x[1][0], - x[0][0], - 0, - - 0, - 0, - 1); - - T r = x[0][0] * x[1][1] - x[1][0] * x[0][1]; - - if (Imath::abs (r) >= 1) - { - for (int i = 0; i < 2; ++i) - { - for (int j = 0; j < 2; ++j) - { - s[i][j] /= r; - } - } - } - else - { - T mr = Imath::abs (r) / limits::smallest(); - - for (int i = 0; i < 2; ++i) - { - for (int j = 0; j < 2; ++j) - { - if (mr > Imath::abs (s[i][j])) - { - s[i][j] /= r; - } - else - { - if (singExc) - throw SingMatrixExc ("Cannot invert " - "singular matrix."); - return Matrix33(); - } - } - } - } - - s[2][0] = -x[2][0] * s[0][0] - x[2][1] * s[1][0]; - s[2][1] = -x[2][0] * s[0][1] - x[2][1] * s[1][1]; - - return s; - } -} - -template -template -const Matrix33 & -Matrix33::setRotation (S r) -{ - S cos_r, sin_r; - - cos_r = Math::cos (r); - sin_r = Math::sin (r); - - x[0][0] = cos_r; - x[0][1] = sin_r; - x[0][2] = 0; - - x[1][0] = -sin_r; - x[1][1] = cos_r; - x[1][2] = 0; - - x[2][0] = 0; - x[2][1] = 0; - x[2][2] = 1; - - return *this; -} - -template -template -const Matrix33 & -Matrix33::rotate (S r) -{ - *this *= Matrix33().setRotation (r); - return *this; -} - -template -const Matrix33 & -Matrix33::setScale (T s) -{ - x[0][0] = s; - x[0][1] = 0; - x[0][2] = 0; - - x[1][0] = 0; - x[1][1] = s; - x[1][2] = 0; - - x[2][0] = 0; - x[2][1] = 0; - x[2][2] = 1; - - return *this; -} - -template -template -const Matrix33 & -Matrix33::setScale (const Vec2 &s) -{ - x[0][0] = s[0]; - x[0][1] = 0; - x[0][2] = 0; - - x[1][0] = 0; - x[1][1] = s[1]; - x[1][2] = 0; - - x[2][0] = 0; - x[2][1] = 0; - x[2][2] = 1; - - return *this; -} - -template -template -const Matrix33 & -Matrix33::scale (const Vec2 &s) -{ - x[0][0] *= s[0]; - x[0][1] *= s[0]; - x[0][2] *= s[0]; - - x[1][0] *= s[1]; - x[1][1] *= s[1]; - x[1][2] *= s[1]; - - return *this; -} - -template -template -const Matrix33 & -Matrix33::setTranslation (const Vec2 &t) -{ - x[0][0] = 1; - x[0][1] = 0; - x[0][2] = 0; - - x[1][0] = 0; - x[1][1] = 1; - x[1][2] = 0; - - x[2][0] = t[0]; - x[2][1] = t[1]; - x[2][2] = 1; - - return *this; -} - -template -inline Vec2 -Matrix33::translation () const -{ - return Vec2 (x[2][0], x[2][1]); -} - -template -template -const Matrix33 & -Matrix33::translate (const Vec2 &t) -{ - x[2][0] += t[0] * x[0][0] + t[1] * x[1][0]; - x[2][1] += t[0] * x[0][1] + t[1] * x[1][1]; - x[2][2] += t[0] * x[0][2] + t[1] * x[1][2]; - - return *this; -} - -template -template -const Matrix33 & -Matrix33::setShear (const S &xy) -{ - x[0][0] = 1; - x[0][1] = 0; - x[0][2] = 0; - - x[1][0] = xy; - x[1][1] = 1; - x[1][2] = 0; - - x[2][0] = 0; - x[2][1] = 0; - x[2][2] = 1; - - return *this; -} - -template -template -const Matrix33 & -Matrix33::setShear (const Vec2 &h) -{ - x[0][0] = 1; - x[0][1] = h[1]; - x[0][2] = 0; - - x[1][0] = h[0]; - x[1][1] = 1; - x[1][2] = 0; - - x[2][0] = 0; - x[2][1] = 0; - x[2][2] = 1; - - return *this; -} - -template -template -const Matrix33 & -Matrix33::shear (const S &xy) -{ - // - // In this case, we don't need a temp. copy of the matrix - // because we never use a value on the RHS after we've - // changed it on the LHS. - // - - x[1][0] += xy * x[0][0]; - x[1][1] += xy * x[0][1]; - x[1][2] += xy * x[0][2]; - - return *this; -} - -template -template -const Matrix33 & -Matrix33::shear (const Vec2 &h) -{ - Matrix33 P (*this); - - x[0][0] = P[0][0] + h[1] * P[1][0]; - x[0][1] = P[0][1] + h[1] * P[1][1]; - x[0][2] = P[0][2] + h[1] * P[1][2]; - - x[1][0] = P[1][0] + h[0] * P[0][0]; - x[1][1] = P[1][1] + h[0] * P[0][1]; - x[1][2] = P[1][2] + h[0] * P[0][2]; - - return *this; -} - - -//--------------------------- -// Implementation of Matrix44 -//--------------------------- - -template -inline T * -Matrix44::operator [] (int i) -{ - return x[i]; -} - -template -inline const T * -Matrix44::operator [] (int i) const -{ - return x[i]; -} - -template -inline -Matrix44::Matrix44 () -{ - x[0][0] = 1; - x[0][1] = 0; - x[0][2] = 0; - x[0][3] = 0; - x[1][0] = 0; - x[1][1] = 1; - x[1][2] = 0; - x[1][3] = 0; - x[2][0] = 0; - x[2][1] = 0; - x[2][2] = 1; - x[2][3] = 0; - x[3][0] = 0; - x[3][1] = 0; - x[3][2] = 0; - x[3][3] = 1; -} - -template -inline -Matrix44::Matrix44 (T a) -{ - x[0][0] = a; - x[0][1] = a; - x[0][2] = a; - x[0][3] = a; - x[1][0] = a; - x[1][1] = a; - x[1][2] = a; - x[1][3] = a; - x[2][0] = a; - x[2][1] = a; - x[2][2] = a; - x[2][3] = a; - x[3][0] = a; - x[3][1] = a; - x[3][2] = a; - x[3][3] = a; -} - -template -inline -Matrix44::Matrix44 (const T a[4][4]) -{ - x[0][0] = a[0][0]; - x[0][1] = a[0][1]; - x[0][2] = a[0][2]; - x[0][3] = a[0][3]; - x[1][0] = a[1][0]; - x[1][1] = a[1][1]; - x[1][2] = a[1][2]; - x[1][3] = a[1][3]; - x[2][0] = a[2][0]; - x[2][1] = a[2][1]; - x[2][2] = a[2][2]; - x[2][3] = a[2][3]; - x[3][0] = a[3][0]; - x[3][1] = a[3][1]; - x[3][2] = a[3][2]; - x[3][3] = a[3][3]; -} - -template -inline -Matrix44::Matrix44 (T a, T b, T c, T d, T e, T f, T g, T h, - T i, T j, T k, T l, T m, T n, T o, T p) -{ - x[0][0] = a; - x[0][1] = b; - x[0][2] = c; - x[0][3] = d; - x[1][0] = e; - x[1][1] = f; - x[1][2] = g; - x[1][3] = h; - x[2][0] = i; - x[2][1] = j; - x[2][2] = k; - x[2][3] = l; - x[3][0] = m; - x[3][1] = n; - x[3][2] = o; - x[3][3] = p; -} - - -template -inline -Matrix44::Matrix44 (Matrix33 r, Vec3 t) -{ - x[0][0] = r[0][0]; - x[0][1] = r[0][1]; - x[0][2] = r[0][2]; - x[0][3] = 0; - x[1][0] = r[1][0]; - x[1][1] = r[1][1]; - x[1][2] = r[1][2]; - x[1][3] = 0; - x[2][0] = r[2][0]; - x[2][1] = r[2][1]; - x[2][2] = r[2][2]; - x[2][3] = 0; - x[3][0] = t[0]; - x[3][1] = t[1]; - x[3][2] = t[2]; - x[3][3] = 1; -} - -template -inline -Matrix44::Matrix44 (const Matrix44 &v) -{ - x[0][0] = v.x[0][0]; - x[0][1] = v.x[0][1]; - x[0][2] = v.x[0][2]; - x[0][3] = v.x[0][3]; - x[1][0] = v.x[1][0]; - x[1][1] = v.x[1][1]; - x[1][2] = v.x[1][2]; - x[1][3] = v.x[1][3]; - x[2][0] = v.x[2][0]; - x[2][1] = v.x[2][1]; - x[2][2] = v.x[2][2]; - x[2][3] = v.x[2][3]; - x[3][0] = v.x[3][0]; - x[3][1] = v.x[3][1]; - x[3][2] = v.x[3][2]; - x[3][3] = v.x[3][3]; -} - -template -inline const Matrix44 & -Matrix44::operator = (const Matrix44 &v) -{ - x[0][0] = v.x[0][0]; - x[0][1] = v.x[0][1]; - x[0][2] = v.x[0][2]; - x[0][3] = v.x[0][3]; - x[1][0] = v.x[1][0]; - x[1][1] = v.x[1][1]; - x[1][2] = v.x[1][2]; - x[1][3] = v.x[1][3]; - x[2][0] = v.x[2][0]; - x[2][1] = v.x[2][1]; - x[2][2] = v.x[2][2]; - x[2][3] = v.x[2][3]; - x[3][0] = v.x[3][0]; - x[3][1] = v.x[3][1]; - x[3][2] = v.x[3][2]; - x[3][3] = v.x[3][3]; - return *this; -} - -template -inline const Matrix44 & -Matrix44::operator = (T a) -{ - x[0][0] = a; - x[0][1] = a; - x[0][2] = a; - x[0][3] = a; - x[1][0] = a; - x[1][1] = a; - x[1][2] = a; - x[1][3] = a; - x[2][0] = a; - x[2][1] = a; - x[2][2] = a; - x[2][3] = a; - x[3][0] = a; - x[3][1] = a; - x[3][2] = a; - x[3][3] = a; - return *this; -} - -template -inline T * -Matrix44::getValue () -{ - return (T *) &x[0][0]; -} - -template -inline const T * -Matrix44::getValue () const -{ - return (const T *) &x[0][0]; -} - -template -template -inline void -Matrix44::getValue (Matrix44 &v) const -{ - v.x[0][0] = x[0][0]; - v.x[0][1] = x[0][1]; - v.x[0][2] = x[0][2]; - v.x[0][3] = x[0][3]; - v.x[1][0] = x[1][0]; - v.x[1][1] = x[1][1]; - v.x[1][2] = x[1][2]; - v.x[1][3] = x[1][3]; - v.x[2][0] = x[2][0]; - v.x[2][1] = x[2][1]; - v.x[2][2] = x[2][2]; - v.x[2][3] = x[2][3]; - v.x[3][0] = x[3][0]; - v.x[3][1] = x[3][1]; - v.x[3][2] = x[3][2]; - v.x[3][3] = x[3][3]; -} - -template -template -inline Matrix44 & -Matrix44::setValue (const Matrix44 &v) -{ - x[0][0] = v.x[0][0]; - x[0][1] = v.x[0][1]; - x[0][2] = v.x[0][2]; - x[0][3] = v.x[0][3]; - x[1][0] = v.x[1][0]; - x[1][1] = v.x[1][1]; - x[1][2] = v.x[1][2]; - x[1][3] = v.x[1][3]; - x[2][0] = v.x[2][0]; - x[2][1] = v.x[2][1]; - x[2][2] = v.x[2][2]; - x[2][3] = v.x[2][3]; - x[3][0] = v.x[3][0]; - x[3][1] = v.x[3][1]; - x[3][2] = v.x[3][2]; - x[3][3] = v.x[3][3]; - return *this; -} - -template -template -inline Matrix44 & -Matrix44::setTheMatrix (const Matrix44 &v) -{ - x[0][0] = v.x[0][0]; - x[0][1] = v.x[0][1]; - x[0][2] = v.x[0][2]; - x[0][3] = v.x[0][3]; - x[1][0] = v.x[1][0]; - x[1][1] = v.x[1][1]; - x[1][2] = v.x[1][2]; - x[1][3] = v.x[1][3]; - x[2][0] = v.x[2][0]; - x[2][1] = v.x[2][1]; - x[2][2] = v.x[2][2]; - x[2][3] = v.x[2][3]; - x[3][0] = v.x[3][0]; - x[3][1] = v.x[3][1]; - x[3][2] = v.x[3][2]; - x[3][3] = v.x[3][3]; - return *this; -} - -template -inline void -Matrix44::makeIdentity() -{ - x[0][0] = 1; - x[0][1] = 0; - x[0][2] = 0; - x[0][3] = 0; - x[1][0] = 0; - x[1][1] = 1; - x[1][2] = 0; - x[1][3] = 0; - x[2][0] = 0; - x[2][1] = 0; - x[2][2] = 1; - x[2][3] = 0; - x[3][0] = 0; - x[3][1] = 0; - x[3][2] = 0; - x[3][3] = 1; -} - -template -bool -Matrix44::operator == (const Matrix44 &v) const -{ - return x[0][0] == v.x[0][0] && - x[0][1] == v.x[0][1] && - x[0][2] == v.x[0][2] && - x[0][3] == v.x[0][3] && - x[1][0] == v.x[1][0] && - x[1][1] == v.x[1][1] && - x[1][2] == v.x[1][2] && - x[1][3] == v.x[1][3] && - x[2][0] == v.x[2][0] && - x[2][1] == v.x[2][1] && - x[2][2] == v.x[2][2] && - x[2][3] == v.x[2][3] && - x[3][0] == v.x[3][0] && - x[3][1] == v.x[3][1] && - x[3][2] == v.x[3][2] && - x[3][3] == v.x[3][3]; -} - -template -bool -Matrix44::operator != (const Matrix44 &v) const -{ - return x[0][0] != v.x[0][0] || - x[0][1] != v.x[0][1] || - x[0][2] != v.x[0][2] || - x[0][3] != v.x[0][3] || - x[1][0] != v.x[1][0] || - x[1][1] != v.x[1][1] || - x[1][2] != v.x[1][2] || - x[1][3] != v.x[1][3] || - x[2][0] != v.x[2][0] || - x[2][1] != v.x[2][1] || - x[2][2] != v.x[2][2] || - x[2][3] != v.x[2][3] || - x[3][0] != v.x[3][0] || - x[3][1] != v.x[3][1] || - x[3][2] != v.x[3][2] || - x[3][3] != v.x[3][3]; -} - -template -bool -Matrix44::equalWithAbsError (const Matrix44 &m, T e) const -{ - for (int i = 0; i < 4; i++) - for (int j = 0; j < 4; j++) - if (!Imath::equalWithAbsError ((*this)[i][j], m[i][j], e)) - return false; - - return true; -} - -template -bool -Matrix44::equalWithRelError (const Matrix44 &m, T e) const -{ - for (int i = 0; i < 4; i++) - for (int j = 0; j < 4; j++) - if (!Imath::equalWithRelError ((*this)[i][j], m[i][j], e)) - return false; - - return true; -} - -template -const Matrix44 & -Matrix44::operator += (const Matrix44 &v) -{ - x[0][0] += v.x[0][0]; - x[0][1] += v.x[0][1]; - x[0][2] += v.x[0][2]; - x[0][3] += v.x[0][3]; - x[1][0] += v.x[1][0]; - x[1][1] += v.x[1][1]; - x[1][2] += v.x[1][2]; - x[1][3] += v.x[1][3]; - x[2][0] += v.x[2][0]; - x[2][1] += v.x[2][1]; - x[2][2] += v.x[2][2]; - x[2][3] += v.x[2][3]; - x[3][0] += v.x[3][0]; - x[3][1] += v.x[3][1]; - x[3][2] += v.x[3][2]; - x[3][3] += v.x[3][3]; - - return *this; -} - -template -const Matrix44 & -Matrix44::operator += (T a) -{ - x[0][0] += a; - x[0][1] += a; - x[0][2] += a; - x[0][3] += a; - x[1][0] += a; - x[1][1] += a; - x[1][2] += a; - x[1][3] += a; - x[2][0] += a; - x[2][1] += a; - x[2][2] += a; - x[2][3] += a; - x[3][0] += a; - x[3][1] += a; - x[3][2] += a; - x[3][3] += a; - - return *this; -} - -template -Matrix44 -Matrix44::operator + (const Matrix44 &v) const -{ - return Matrix44 (x[0][0] + v.x[0][0], - x[0][1] + v.x[0][1], - x[0][2] + v.x[0][2], - x[0][3] + v.x[0][3], - x[1][0] + v.x[1][0], - x[1][1] + v.x[1][1], - x[1][2] + v.x[1][2], - x[1][3] + v.x[1][3], - x[2][0] + v.x[2][0], - x[2][1] + v.x[2][1], - x[2][2] + v.x[2][2], - x[2][3] + v.x[2][3], - x[3][0] + v.x[3][0], - x[3][1] + v.x[3][1], - x[3][2] + v.x[3][2], - x[3][3] + v.x[3][3]); -} - -template -const Matrix44 & -Matrix44::operator -= (const Matrix44 &v) -{ - x[0][0] -= v.x[0][0]; - x[0][1] -= v.x[0][1]; - x[0][2] -= v.x[0][2]; - x[0][3] -= v.x[0][3]; - x[1][0] -= v.x[1][0]; - x[1][1] -= v.x[1][1]; - x[1][2] -= v.x[1][2]; - x[1][3] -= v.x[1][3]; - x[2][0] -= v.x[2][0]; - x[2][1] -= v.x[2][1]; - x[2][2] -= v.x[2][2]; - x[2][3] -= v.x[2][3]; - x[3][0] -= v.x[3][0]; - x[3][1] -= v.x[3][1]; - x[3][2] -= v.x[3][2]; - x[3][3] -= v.x[3][3]; - - return *this; -} - -template -const Matrix44 & -Matrix44::operator -= (T a) -{ - x[0][0] -= a; - x[0][1] -= a; - x[0][2] -= a; - x[0][3] -= a; - x[1][0] -= a; - x[1][1] -= a; - x[1][2] -= a; - x[1][3] -= a; - x[2][0] -= a; - x[2][1] -= a; - x[2][2] -= a; - x[2][3] -= a; - x[3][0] -= a; - x[3][1] -= a; - x[3][2] -= a; - x[3][3] -= a; - - return *this; -} - -template -Matrix44 -Matrix44::operator - (const Matrix44 &v) const -{ - return Matrix44 (x[0][0] - v.x[0][0], - x[0][1] - v.x[0][1], - x[0][2] - v.x[0][2], - x[0][3] - v.x[0][3], - x[1][0] - v.x[1][0], - x[1][1] - v.x[1][1], - x[1][2] - v.x[1][2], - x[1][3] - v.x[1][3], - x[2][0] - v.x[2][0], - x[2][1] - v.x[2][1], - x[2][2] - v.x[2][2], - x[2][3] - v.x[2][3], - x[3][0] - v.x[3][0], - x[3][1] - v.x[3][1], - x[3][2] - v.x[3][2], - x[3][3] - v.x[3][3]); -} - -template -Matrix44 -Matrix44::operator - () const -{ - return Matrix44 (-x[0][0], - -x[0][1], - -x[0][2], - -x[0][3], - -x[1][0], - -x[1][1], - -x[1][2], - -x[1][3], - -x[2][0], - -x[2][1], - -x[2][2], - -x[2][3], - -x[3][0], - -x[3][1], - -x[3][2], - -x[3][3]); -} - -template -const Matrix44 & -Matrix44::negate () -{ - x[0][0] = -x[0][0]; - x[0][1] = -x[0][1]; - x[0][2] = -x[0][2]; - x[0][3] = -x[0][3]; - x[1][0] = -x[1][0]; - x[1][1] = -x[1][1]; - x[1][2] = -x[1][2]; - x[1][3] = -x[1][3]; - x[2][0] = -x[2][0]; - x[2][1] = -x[2][1]; - x[2][2] = -x[2][2]; - x[2][3] = -x[2][3]; - x[3][0] = -x[3][0]; - x[3][1] = -x[3][1]; - x[3][2] = -x[3][2]; - x[3][3] = -x[3][3]; - - return *this; -} - -template -const Matrix44 & -Matrix44::operator *= (T a) -{ - x[0][0] *= a; - x[0][1] *= a; - x[0][2] *= a; - x[0][3] *= a; - x[1][0] *= a; - x[1][1] *= a; - x[1][2] *= a; - x[1][3] *= a; - x[2][0] *= a; - x[2][1] *= a; - x[2][2] *= a; - x[2][3] *= a; - x[3][0] *= a; - x[3][1] *= a; - x[3][2] *= a; - x[3][3] *= a; - - return *this; -} - -template -Matrix44 -Matrix44::operator * (T a) const -{ - return Matrix44 (x[0][0] * a, - x[0][1] * a, - x[0][2] * a, - x[0][3] * a, - x[1][0] * a, - x[1][1] * a, - x[1][2] * a, - x[1][3] * a, - x[2][0] * a, - x[2][1] * a, - x[2][2] * a, - x[2][3] * a, - x[3][0] * a, - x[3][1] * a, - x[3][2] * a, - x[3][3] * a); -} - -template -inline Matrix44 -operator * (T a, const Matrix44 &v) -{ - return v * a; -} - -template -inline const Matrix44 & -Matrix44::operator *= (const Matrix44 &v) -{ - Matrix44 tmp (T (0)); - - multiply (*this, v, tmp); - *this = tmp; - return *this; -} - -template -inline Matrix44 -Matrix44::operator * (const Matrix44 &v) const -{ - Matrix44 tmp (T (0)); - - multiply (*this, v, tmp); - return tmp; -} - -template -void -Matrix44::multiply (const Matrix44 &a, - const Matrix44 &b, - Matrix44 &c) -{ - register const T * restrict ap = &a.x[0][0]; - register const T * restrict bp = &b.x[0][0]; - register T * restrict cp = &c.x[0][0]; - - register T a0, a1, a2, a3; - - a0 = ap[0]; - a1 = ap[1]; - a2 = ap[2]; - a3 = ap[3]; - - cp[0] = a0 * bp[0] + a1 * bp[4] + a2 * bp[8] + a3 * bp[12]; - cp[1] = a0 * bp[1] + a1 * bp[5] + a2 * bp[9] + a3 * bp[13]; - cp[2] = a0 * bp[2] + a1 * bp[6] + a2 * bp[10] + a3 * bp[14]; - cp[3] = a0 * bp[3] + a1 * bp[7] + a2 * bp[11] + a3 * bp[15]; - - a0 = ap[4]; - a1 = ap[5]; - a2 = ap[6]; - a3 = ap[7]; - - cp[4] = a0 * bp[0] + a1 * bp[4] + a2 * bp[8] + a3 * bp[12]; - cp[5] = a0 * bp[1] + a1 * bp[5] + a2 * bp[9] + a3 * bp[13]; - cp[6] = a0 * bp[2] + a1 * bp[6] + a2 * bp[10] + a3 * bp[14]; - cp[7] = a0 * bp[3] + a1 * bp[7] + a2 * bp[11] + a3 * bp[15]; - - a0 = ap[8]; - a1 = ap[9]; - a2 = ap[10]; - a3 = ap[11]; - - cp[8] = a0 * bp[0] + a1 * bp[4] + a2 * bp[8] + a3 * bp[12]; - cp[9] = a0 * bp[1] + a1 * bp[5] + a2 * bp[9] + a3 * bp[13]; - cp[10] = a0 * bp[2] + a1 * bp[6] + a2 * bp[10] + a3 * bp[14]; - cp[11] = a0 * bp[3] + a1 * bp[7] + a2 * bp[11] + a3 * bp[15]; - - a0 = ap[12]; - a1 = ap[13]; - a2 = ap[14]; - a3 = ap[15]; - - cp[12] = a0 * bp[0] + a1 * bp[4] + a2 * bp[8] + a3 * bp[12]; - cp[13] = a0 * bp[1] + a1 * bp[5] + a2 * bp[9] + a3 * bp[13]; - cp[14] = a0 * bp[2] + a1 * bp[6] + a2 * bp[10] + a3 * bp[14]; - cp[15] = a0 * bp[3] + a1 * bp[7] + a2 * bp[11] + a3 * bp[15]; -} - -template template -void -Matrix44::multVecMatrix(const Vec3 &src, Vec3 &dst) const -{ - S a, b, c, w; - - a = src[0] * x[0][0] + src[1] * x[1][0] + src[2] * x[2][0] + x[3][0]; - b = src[0] * x[0][1] + src[1] * x[1][1] + src[2] * x[2][1] + x[3][1]; - c = src[0] * x[0][2] + src[1] * x[1][2] + src[2] * x[2][2] + x[3][2]; - w = src[0] * x[0][3] + src[1] * x[1][3] + src[2] * x[2][3] + x[3][3]; - - dst.x = a / w; - dst.y = b / w; - dst.z = c / w; -} - -template template -void -Matrix44::multDirMatrix(const Vec3 &src, Vec3 &dst) const -{ - S a, b, c; - - a = src[0] * x[0][0] + src[1] * x[1][0] + src[2] * x[2][0]; - b = src[0] * x[0][1] + src[1] * x[1][1] + src[2] * x[2][1]; - c = src[0] * x[0][2] + src[1] * x[1][2] + src[2] * x[2][2]; - - dst.x = a; - dst.y = b; - dst.z = c; -} - -template -const Matrix44 & -Matrix44::operator /= (T a) -{ - x[0][0] /= a; - x[0][1] /= a; - x[0][2] /= a; - x[0][3] /= a; - x[1][0] /= a; - x[1][1] /= a; - x[1][2] /= a; - x[1][3] /= a; - x[2][0] /= a; - x[2][1] /= a; - x[2][2] /= a; - x[2][3] /= a; - x[3][0] /= a; - x[3][1] /= a; - x[3][2] /= a; - x[3][3] /= a; - - return *this; -} - -template -Matrix44 -Matrix44::operator / (T a) const -{ - return Matrix44 (x[0][0] / a, - x[0][1] / a, - x[0][2] / a, - x[0][3] / a, - x[1][0] / a, - x[1][1] / a, - x[1][2] / a, - x[1][3] / a, - x[2][0] / a, - x[2][1] / a, - x[2][2] / a, - x[2][3] / a, - x[3][0] / a, - x[3][1] / a, - x[3][2] / a, - x[3][3] / a); -} - -template -const Matrix44 & -Matrix44::transpose () -{ - Matrix44 tmp (x[0][0], - x[1][0], - x[2][0], - x[3][0], - x[0][1], - x[1][1], - x[2][1], - x[3][1], - x[0][2], - x[1][2], - x[2][2], - x[3][2], - x[0][3], - x[1][3], - x[2][3], - x[3][3]); - *this = tmp; - return *this; -} - -template -Matrix44 -Matrix44::transposed () const -{ - return Matrix44 (x[0][0], - x[1][0], - x[2][0], - x[3][0], - x[0][1], - x[1][1], - x[2][1], - x[3][1], - x[0][2], - x[1][2], - x[2][2], - x[3][2], - x[0][3], - x[1][3], - x[2][3], - x[3][3]); -} - -template -const Matrix44 & -Matrix44::gjInvert (bool singExc) throw (Iex::MathExc) -{ - *this = gjInverse (singExc); - return *this; -} - -template -Matrix44 -Matrix44::gjInverse (bool singExc) const throw (Iex::MathExc) -{ - int i, j, k; - Matrix44 s; - Matrix44 t (*this); - - // Forward elimination - - for (i = 0; i < 3 ; i++) - { - int pivot = i; - - T pivotsize = t[i][i]; - - if (pivotsize < 0) - pivotsize = -pivotsize; - - for (j = i + 1; j < 4; j++) - { - T tmp = t[j][i]; - - if (tmp < 0) - tmp = -tmp; - - if (tmp > pivotsize) - { - pivot = j; - pivotsize = tmp; - } - } - - if (pivotsize == 0) - { - if (singExc) - throw ::Imath::SingMatrixExc ("Cannot invert singular matrix."); - - return Matrix44(); - } - - if (pivot != i) - { - for (j = 0; j < 4; j++) - { - T tmp; - - tmp = t[i][j]; - t[i][j] = t[pivot][j]; - t[pivot][j] = tmp; - - tmp = s[i][j]; - s[i][j] = s[pivot][j]; - s[pivot][j] = tmp; - } - } - - for (j = i + 1; j < 4; j++) - { - T f = t[j][i] / t[i][i]; - - for (k = 0; k < 4; k++) - { - t[j][k] -= f * t[i][k]; - s[j][k] -= f * s[i][k]; - } - } - } - - // Backward substitution - - for (i = 3; i >= 0; --i) - { - T f; - - if ((f = t[i][i]) == 0) - { - if (singExc) - throw ::Imath::SingMatrixExc ("Cannot invert singular matrix."); - - return Matrix44(); - } - - for (j = 0; j < 4; j++) - { - t[i][j] /= f; - s[i][j] /= f; - } - - for (j = 0; j < i; j++) - { - f = t[j][i]; - - for (k = 0; k < 4; k++) - { - t[j][k] -= f * t[i][k]; - s[j][k] -= f * s[i][k]; - } - } - } - - return s; -} - -template -const Matrix44 & -Matrix44::invert (bool singExc) throw (Iex::MathExc) -{ - *this = inverse (singExc); - return *this; -} - -template -Matrix44 -Matrix44::inverse (bool singExc) const throw (Iex::MathExc) -{ - if (x[0][3] != 0 || x[1][3] != 0 || x[2][3] != 0 || x[3][3] != 1) - return gjInverse(singExc); - - Matrix44 s (x[1][1] * x[2][2] - x[2][1] * x[1][2], - x[2][1] * x[0][2] - x[0][1] * x[2][2], - x[0][1] * x[1][2] - x[1][1] * x[0][2], - 0, - - x[2][0] * x[1][2] - x[1][0] * x[2][2], - x[0][0] * x[2][2] - x[2][0] * x[0][2], - x[1][0] * x[0][2] - x[0][0] * x[1][2], - 0, - - x[1][0] * x[2][1] - x[2][0] * x[1][1], - x[2][0] * x[0][1] - x[0][0] * x[2][1], - x[0][0] * x[1][1] - x[1][0] * x[0][1], - 0, - - 0, - 0, - 0, - 1); - - T r = x[0][0] * s[0][0] + x[0][1] * s[1][0] + x[0][2] * s[2][0]; - - if (Imath::abs (r) >= 1) - { - for (int i = 0; i < 3; ++i) - { - for (int j = 0; j < 3; ++j) - { - s[i][j] /= r; - } - } - } - else - { - T mr = Imath::abs (r) / limits::smallest(); - - for (int i = 0; i < 3; ++i) - { - for (int j = 0; j < 3; ++j) - { - if (mr > Imath::abs (s[i][j])) - { - s[i][j] /= r; - } - else - { - if (singExc) - throw SingMatrixExc ("Cannot invert singular matrix."); - - return Matrix44(); - } - } - } - } - - s[3][0] = -x[3][0] * s[0][0] - x[3][1] * s[1][0] - x[3][2] * s[2][0]; - s[3][1] = -x[3][0] * s[0][1] - x[3][1] * s[1][1] - x[3][2] * s[2][1]; - s[3][2] = -x[3][0] * s[0][2] - x[3][1] * s[1][2] - x[3][2] * s[2][2]; - - return s; -} - -template -template -const Matrix44 & -Matrix44::setEulerAngles (const Vec3& r) -{ - S cos_rz, sin_rz, cos_ry, sin_ry, cos_rx, sin_rx; - - cos_rz = Math::cos (r[2]); - cos_ry = Math::cos (r[1]); - cos_rx = Math::cos (r[0]); - - sin_rz = Math::sin (r[2]); - sin_ry = Math::sin (r[1]); - sin_rx = Math::sin (r[0]); - - x[0][0] = cos_rz * cos_ry; - x[0][1] = sin_rz * cos_ry; - x[0][2] = -sin_ry; - x[0][3] = 0; - - x[1][0] = -sin_rz * cos_rx + cos_rz * sin_ry * sin_rx; - x[1][1] = cos_rz * cos_rx + sin_rz * sin_ry * sin_rx; - x[1][2] = cos_ry * sin_rx; - x[1][3] = 0; - - x[2][0] = sin_rz * sin_rx + cos_rz * sin_ry * cos_rx; - x[2][1] = -cos_rz * sin_rx + sin_rz * sin_ry * cos_rx; - x[2][2] = cos_ry * cos_rx; - x[2][3] = 0; - - x[3][0] = 0; - x[3][1] = 0; - x[3][2] = 0; - x[3][3] = 1; - - return *this; -} - -template -template -const Matrix44 & -Matrix44::setAxisAngle (const Vec3& axis, S angle) -{ - Vec3 unit (axis.normalized()); - S sine = Math::sin (angle); - S cosine = Math::cos (angle); - - x[0][0] = unit[0] * unit[0] * (1 - cosine) + cosine; - x[0][1] = unit[0] * unit[1] * (1 - cosine) + unit[2] * sine; - x[0][2] = unit[0] * unit[2] * (1 - cosine) - unit[1] * sine; - x[0][3] = 0; - - x[1][0] = unit[0] * unit[1] * (1 - cosine) - unit[2] * sine; - x[1][1] = unit[1] * unit[1] * (1 - cosine) + cosine; - x[1][2] = unit[1] * unit[2] * (1 - cosine) + unit[0] * sine; - x[1][3] = 0; - - x[2][0] = unit[0] * unit[2] * (1 - cosine) + unit[1] * sine; - x[2][1] = unit[1] * unit[2] * (1 - cosine) - unit[0] * sine; - x[2][2] = unit[2] * unit[2] * (1 - cosine) + cosine; - x[2][3] = 0; - - x[3][0] = 0; - x[3][1] = 0; - x[3][2] = 0; - x[3][3] = 1; - - return *this; -} - -template -template -const Matrix44 & -Matrix44::rotate (const Vec3 &r) -{ - S cos_rz, sin_rz, cos_ry, sin_ry, cos_rx, sin_rx; - S m00, m01, m02; - S m10, m11, m12; - S m20, m21, m22; - - cos_rz = Math::cos (r[2]); - cos_ry = Math::cos (r[1]); - cos_rx = Math::cos (r[0]); - - sin_rz = Math::sin (r[2]); - sin_ry = Math::sin (r[1]); - sin_rx = Math::sin (r[0]); - - m00 = cos_rz * cos_ry; - m01 = sin_rz * cos_ry; - m02 = -sin_ry; - m10 = -sin_rz * cos_rx + cos_rz * sin_ry * sin_rx; - m11 = cos_rz * cos_rx + sin_rz * sin_ry * sin_rx; - m12 = cos_ry * sin_rx; - m20 = -sin_rz * -sin_rx + cos_rz * sin_ry * cos_rx; - m21 = cos_rz * -sin_rx + sin_rz * sin_ry * cos_rx; - m22 = cos_ry * cos_rx; - - Matrix44 P (*this); - - x[0][0] = P[0][0] * m00 + P[1][0] * m01 + P[2][0] * m02; - x[0][1] = P[0][1] * m00 + P[1][1] * m01 + P[2][1] * m02; - x[0][2] = P[0][2] * m00 + P[1][2] * m01 + P[2][2] * m02; - x[0][3] = P[0][3] * m00 + P[1][3] * m01 + P[2][3] * m02; - - x[1][0] = P[0][0] * m10 + P[1][0] * m11 + P[2][0] * m12; - x[1][1] = P[0][1] * m10 + P[1][1] * m11 + P[2][1] * m12; - x[1][2] = P[0][2] * m10 + P[1][2] * m11 + P[2][2] * m12; - x[1][3] = P[0][3] * m10 + P[1][3] * m11 + P[2][3] * m12; - - x[2][0] = P[0][0] * m20 + P[1][0] * m21 + P[2][0] * m22; - x[2][1] = P[0][1] * m20 + P[1][1] * m21 + P[2][1] * m22; - x[2][2] = P[0][2] * m20 + P[1][2] * m21 + P[2][2] * m22; - x[2][3] = P[0][3] * m20 + P[1][3] * m21 + P[2][3] * m22; - - return *this; -} - -template -const Matrix44 & -Matrix44::setScale (T s) -{ - x[0][0] = s; - x[0][1] = 0; - x[0][2] = 0; - x[0][3] = 0; - - x[1][0] = 0; - x[1][1] = s; - x[1][2] = 0; - x[1][3] = 0; - - x[2][0] = 0; - x[2][1] = 0; - x[2][2] = s; - x[2][3] = 0; - - x[3][0] = 0; - x[3][1] = 0; - x[3][2] = 0; - x[3][3] = 1; - - return *this; -} - -template -template -const Matrix44 & -Matrix44::setScale (const Vec3 &s) -{ - x[0][0] = s[0]; - x[0][1] = 0; - x[0][2] = 0; - x[0][3] = 0; - - x[1][0] = 0; - x[1][1] = s[1]; - x[1][2] = 0; - x[1][3] = 0; - - x[2][0] = 0; - x[2][1] = 0; - x[2][2] = s[2]; - x[2][3] = 0; - - x[3][0] = 0; - x[3][1] = 0; - x[3][2] = 0; - x[3][3] = 1; - - return *this; -} - -template -template -const Matrix44 & -Matrix44::scale (const Vec3 &s) -{ - x[0][0] *= s[0]; - x[0][1] *= s[0]; - x[0][2] *= s[0]; - x[0][3] *= s[0]; - - x[1][0] *= s[1]; - x[1][1] *= s[1]; - x[1][2] *= s[1]; - x[1][3] *= s[1]; - - x[2][0] *= s[2]; - x[2][1] *= s[2]; - x[2][2] *= s[2]; - x[2][3] *= s[2]; - - return *this; -} - -template -template -const Matrix44 & -Matrix44::setTranslation (const Vec3 &t) -{ - x[0][0] = 1; - x[0][1] = 0; - x[0][2] = 0; - x[0][3] = 0; - - x[1][0] = 0; - x[1][1] = 1; - x[1][2] = 0; - x[1][3] = 0; - - x[2][0] = 0; - x[2][1] = 0; - x[2][2] = 1; - x[2][3] = 0; - - x[3][0] = t[0]; - x[3][1] = t[1]; - x[3][2] = t[2]; - x[3][3] = 1; - - return *this; -} - -template -inline const Vec3 -Matrix44::translation () const -{ - return Vec3 (x[3][0], x[3][1], x[3][2]); -} - -template -template -const Matrix44 & -Matrix44::translate (const Vec3 &t) -{ - x[3][0] += t[0] * x[0][0] + t[1] * x[1][0] + t[2] * x[2][0]; - x[3][1] += t[0] * x[0][1] + t[1] * x[1][1] + t[2] * x[2][1]; - x[3][2] += t[0] * x[0][2] + t[1] * x[1][2] + t[2] * x[2][2]; - x[3][3] += t[0] * x[0][3] + t[1] * x[1][3] + t[2] * x[2][3]; - - return *this; -} - -template -template -const Matrix44 & -Matrix44::setShear (const Vec3 &h) -{ - x[0][0] = 1; - x[0][1] = 0; - x[0][2] = 0; - x[0][3] = 0; - - x[1][0] = h[0]; - x[1][1] = 1; - x[1][2] = 0; - x[1][3] = 0; - - x[2][0] = h[1]; - x[2][1] = h[2]; - x[2][2] = 1; - x[2][3] = 0; - - x[3][0] = 0; - x[3][1] = 0; - x[3][2] = 0; - x[3][3] = 1; - - return *this; -} - -template -template -const Matrix44 & -Matrix44::setShear (const Shear6 &h) -{ - x[0][0] = 1; - x[0][1] = h.yx; - x[0][2] = h.zx; - x[0][3] = 0; - - x[1][0] = h.xy; - x[1][1] = 1; - x[1][2] = h.zy; - x[1][3] = 0; - - x[2][0] = h.xz; - x[2][1] = h.yz; - x[2][2] = 1; - x[2][3] = 0; - - x[3][0] = 0; - x[3][1] = 0; - x[3][2] = 0; - x[3][3] = 1; - - return *this; -} - -template -template -const Matrix44 & -Matrix44::shear (const Vec3 &h) -{ - // - // In this case, we don't need a temp. copy of the matrix - // because we never use a value on the RHS after we've - // changed it on the LHS. - // - - for (int i=0; i < 4; i++) - { - x[2][i] += h[1] * x[0][i] + h[2] * x[1][i]; - x[1][i] += h[0] * x[0][i]; - } - - return *this; -} - -template -template -const Matrix44 & -Matrix44::shear (const Shear6 &h) -{ - Matrix44 P (*this); - - for (int i=0; i < 4; i++) - { - x[0][i] = P[0][i] + h.yx * P[1][i] + h.zx * P[2][i]; - x[1][i] = h.xy * P[0][i] + P[1][i] + h.zy * P[2][i]; - x[2][i] = h.xz * P[0][i] + h.yz * P[1][i] + P[2][i]; - } - - return *this; -} - - -//-------------------------------- -// Implementation of stream output -//-------------------------------- - -template -std::ostream & -operator << (std::ostream &s, const Matrix33 &m) -{ - std::ios_base::fmtflags oldFlags = s.flags(); - int width; - - if (s.flags() & std::ios_base::fixed) - { - s.setf (std::ios_base::showpoint); - width = s.precision() + 5; - } - else - { - s.setf (std::ios_base::scientific); - s.setf (std::ios_base::showpoint); - width = s.precision() + 8; - } - - s << "(" << std::setw (width) << m[0][0] << - " " << std::setw (width) << m[0][1] << - " " << std::setw (width) << m[0][2] << "\n" << - - " " << std::setw (width) << m[1][0] << - " " << std::setw (width) << m[1][1] << - " " << std::setw (width) << m[1][2] << "\n" << - - " " << std::setw (width) << m[2][0] << - " " << std::setw (width) << m[2][1] << - " " << std::setw (width) << m[2][2] << ")\n"; - - s.flags (oldFlags); - return s; -} - -template -std::ostream & -operator << (std::ostream &s, const Matrix44 &m) -{ - std::ios_base::fmtflags oldFlags = s.flags(); - int width; - - if (s.flags() & std::ios_base::fixed) - { - s.setf (std::ios_base::showpoint); - width = s.precision() + 5; - } - else - { - s.setf (std::ios_base::scientific); - s.setf (std::ios_base::showpoint); - width = s.precision() + 8; - } - - s << "(" << std::setw (width) << m[0][0] << - " " << std::setw (width) << m[0][1] << - " " << std::setw (width) << m[0][2] << - " " << std::setw (width) << m[0][3] << "\n" << - - " " << std::setw (width) << m[1][0] << - " " << std::setw (width) << m[1][1] << - " " << std::setw (width) << m[1][2] << - " " << std::setw (width) << m[1][3] << "\n" << - - " " << std::setw (width) << m[2][0] << - " " << std::setw (width) << m[2][1] << - " " << std::setw (width) << m[2][2] << - " " << std::setw (width) << m[2][3] << "\n" << - - " " << std::setw (width) << m[3][0] << - " " << std::setw (width) << m[3][1] << - " " << std::setw (width) << m[3][2] << - " " << std::setw (width) << m[3][3] << ")\n"; - - s.flags (oldFlags); - return s; -} - - -//--------------------------------------------------------------- -// Implementation of vector-times-matrix multiplication operators -//--------------------------------------------------------------- - -template -inline const Vec2 & -operator *= (Vec2 &v, const Matrix33 &m) -{ - S x = S(v.x * m[0][0] + v.y * m[1][0] + m[2][0]); - S y = S(v.x * m[0][1] + v.y * m[1][1] + m[2][1]); - S w = S(v.x * m[0][2] + v.y * m[1][2] + m[2][2]); - - v.x = x / w; - v.y = y / w; - - return v; -} - -template -inline Vec2 -operator * (const Vec2 &v, const Matrix33 &m) -{ - S x = S(v.x * m[0][0] + v.y * m[1][0] + m[2][0]); - S y = S(v.x * m[0][1] + v.y * m[1][1] + m[2][1]); - S w = S(v.x * m[0][2] + v.y * m[1][2] + m[2][2]); - - return Vec2 (x / w, y / w); -} - - -template -inline const Vec3 & -operator *= (Vec3 &v, const Matrix33 &m) -{ - S x = S(v.x * m[0][0] + v.y * m[1][0] + v.z * m[2][0]); - S y = S(v.x * m[0][1] + v.y * m[1][1] + v.z * m[2][1]); - S z = S(v.x * m[0][2] + v.y * m[1][2] + v.z * m[2][2]); - - v.x = x; - v.y = y; - v.z = z; - - return v; -} - - -template -inline Vec3 -operator * (const Vec3 &v, const Matrix33 &m) -{ - S x = S(v.x * m[0][0] + v.y * m[1][0] + v.z * m[2][0]); - S y = S(v.x * m[0][1] + v.y * m[1][1] + v.z * m[2][1]); - S z = S(v.x * m[0][2] + v.y * m[1][2] + v.z * m[2][2]); - - return Vec3 (x, y, z); -} - - -template -inline const Vec3 & -operator *= (Vec3 &v, const Matrix44 &m) -{ - S x = S(v.x * m[0][0] + v.y * m[1][0] + v.z * m[2][0] + m[3][0]); - S y = S(v.x * m[0][1] + v.y * m[1][1] + v.z * m[2][1] + m[3][1]); - S z = S(v.x * m[0][2] + v.y * m[1][2] + v.z * m[2][2] + m[3][2]); - S w = S(v.x * m[0][3] + v.y * m[1][3] + v.z * m[2][3] + m[3][3]); - - v.x = x / w; - v.y = y / w; - v.z = z / w; - - return v; -} - -template -inline Vec3 -operator * (const Vec3 &v, const Matrix44 &m) -{ - S x = S(v.x * m[0][0] + v.y * m[1][0] + v.z * m[2][0] + m[3][0]); - S y = S(v.x * m[0][1] + v.y * m[1][1] + v.z * m[2][1] + m[3][1]); - S z = S(v.x * m[0][2] + v.y * m[1][2] + v.z * m[2][2] + m[3][2]); - S w = S(v.x * m[0][3] + v.y * m[1][3] + v.z * m[2][3] + m[3][3]); - - return Vec3 (x / w, y / w, z / w); -} - -} // namespace Imath - - - -#endif diff --git a/3rdparty/include/OpenEXR/ImathMatrixAlgo.h b/3rdparty/include/OpenEXR/ImathMatrixAlgo.h deleted file mode 100644 index 0234f23c0..000000000 --- a/3rdparty/include/OpenEXR/ImathMatrixAlgo.h +++ /dev/null @@ -1,1114 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMATHMATRIXALGO_H -#define INCLUDED_IMATHMATRIXALGO_H - -//------------------------------------------------------------------------- -// -// This file contains algorithms applied to or in conjunction with -// transformation matrices (Imath::Matrix33 and Imath::Matrix44). -// The assumption made is that these functions are called much less -// often than the basic point functions or these functions require -// more support classes. -// -// This file also defines a few predefined constant matrices. -// -//------------------------------------------------------------------------- - -#include "ImathMatrix.h" -#include "ImathQuat.h" -#include "ImathEuler.h" -#include "ImathExc.h" -#include "ImathVec.h" -#include - - -#ifdef OPENEXR_DLL - #ifdef IMATH_EXPORTS - #define IMATH_EXPORT_CONST extern __declspec(dllexport) - #else - #define IMATH_EXPORT_CONST extern __declspec(dllimport) - #endif -#else - #define IMATH_EXPORT_CONST extern const -#endif - - -namespace Imath { - -//------------------ -// Identity matrices -//------------------ - -IMATH_EXPORT_CONST M33f identity33f; -IMATH_EXPORT_CONST M44f identity44f; -IMATH_EXPORT_CONST M33d identity33d; -IMATH_EXPORT_CONST M44d identity44d; - -//---------------------------------------------------------------------- -// Extract scale, shear, rotation, and translation values from a matrix: -// -// Notes: -// -// This implementation follows the technique described in the paper by -// Spencer W. Thomas in the Graphics Gems II article: "Decomposing a -// Matrix into Simple Transformations", p. 320. -// -// - Some of the functions below have an optional exc parameter -// that determines the functions' behavior when the matrix' -// scaling is very close to zero: -// -// If exc is true, the functions throw an Imath::ZeroScale exception. -// -// If exc is false: -// -// extractScaling (m, s) returns false, s is invalid -// sansScaling (m) returns m -// removeScaling (m) returns false, m is unchanged -// sansScalingAndShear (m) returns m -// removeScalingAndShear (m) returns false, m is unchanged -// extractAndRemoveScalingAndShear (m, s, h) -// returns false, m is unchanged, -// (sh) are invalid -// checkForZeroScaleInRow () returns false -// extractSHRT (m, s, h, r, t) returns false, (shrt) are invalid -// -// - Functions extractEuler(), extractEulerXYZ() and extractEulerZYX() -// assume that the matrix does not include shear or non-uniform scaling, -// but they do not examine the matrix to verify this assumption. -// Matrices with shear or non-uniform scaling are likely to produce -// meaningless results. Therefore, you should use the -// removeScalingAndShear() routine, if necessary, prior to calling -// extractEuler...() . -// -// - All functions assume that the matrix does not include perspective -// transformation(s), but they do not examine the matrix to verify -// this assumption. Matrices with perspective transformations are -// likely to produce meaningless results. -// -//---------------------------------------------------------------------- - - -// -// Declarations for 4x4 matrix. -// - -template bool extractScaling - (const Matrix44 &mat, - Vec3 &scl, - bool exc = true); - -template Matrix44 sansScaling (const Matrix44 &mat, - bool exc = true); - -template bool removeScaling - (Matrix44 &mat, - bool exc = true); - -template bool extractScalingAndShear - (const Matrix44 &mat, - Vec3 &scl, - Vec3 &shr, - bool exc = true); - -template Matrix44 sansScalingAndShear - (const Matrix44 &mat, - bool exc = true); - -template bool removeScalingAndShear - (Matrix44 &mat, - bool exc = true); - -template bool extractAndRemoveScalingAndShear - (Matrix44 &mat, - Vec3 &scl, - Vec3 &shr, - bool exc = true); - -template void extractEulerXYZ - (const Matrix44 &mat, - Vec3 &rot); - -template void extractEulerZYX - (const Matrix44 &mat, - Vec3 &rot); - -template Quat extractQuat (const Matrix44 &mat); - -template bool extractSHRT - (const Matrix44 &mat, - Vec3 &s, - Vec3 &h, - Vec3 &r, - Vec3 &t, - bool exc /*= true*/, - typename Euler::Order rOrder); - -template bool extractSHRT - (const Matrix44 &mat, - Vec3 &s, - Vec3 &h, - Vec3 &r, - Vec3 &t, - bool exc = true); - -template bool extractSHRT - (const Matrix44 &mat, - Vec3 &s, - Vec3 &h, - Euler &r, - Vec3 &t, - bool exc = true); - -// -// Internal utility function. -// - -template bool checkForZeroScaleInRow - (const T &scl, - const Vec3 &row, - bool exc = true); - -// -// Returns a matrix that rotates "fromDirection" vector to "toDirection" -// vector. -// - -template Matrix44 rotationMatrix (const Vec3 &fromDirection, - const Vec3 &toDirection); - - - -// -// Returns a matrix that rotates the "fromDir" vector -// so that it points towards "toDir". You may also -// specify that you want the up vector to be pointing -// in a certain direction "upDir". -// - -template Matrix44 rotationMatrixWithUpDir - (const Vec3 &fromDir, - const Vec3 &toDir, - const Vec3 &upDir); - - -// -// Returns a matrix that rotates the z-axis so that it -// points towards "targetDir". You must also specify -// that you want the up vector to be pointing in a -// certain direction "upDir". -// -// Notes: The following degenerate cases are handled: -// (a) when the directions given by "toDir" and "upDir" -// are parallel or opposite; -// (the direction vectors must have a non-zero cross product) -// (b) when any of the given direction vectors have zero length -// - -template Matrix44 alignZAxisWithTargetDir - (Vec3 targetDir, - Vec3 upDir); - - -//---------------------------------------------------------------------- - - -// -// Declarations for 3x3 matrix. -// - - -template bool extractScaling - (const Matrix33 &mat, - Vec2 &scl, - bool exc = true); - -template Matrix33 sansScaling (const Matrix33 &mat, - bool exc = true); - -template bool removeScaling - (Matrix33 &mat, - bool exc = true); - -template bool extractScalingAndShear - (const Matrix33 &mat, - Vec2 &scl, - T &h, - bool exc = true); - -template Matrix33 sansScalingAndShear - (const Matrix33 &mat, - bool exc = true); - -template bool removeScalingAndShear - (Matrix33 &mat, - bool exc = true); - -template bool extractAndRemoveScalingAndShear - (Matrix33 &mat, - Vec2 &scl, - T &shr, - bool exc = true); - -template void extractEuler - (const Matrix33 &mat, - T &rot); - -template bool extractSHRT (const Matrix33 &mat, - Vec2 &s, - T &h, - T &r, - Vec2 &t, - bool exc = true); - -template bool checkForZeroScaleInRow - (const T &scl, - const Vec2 &row, - bool exc = true); - - - - -//----------------------------------------------------------------------------- -// Implementation for 4x4 Matrix -//------------------------------ - - -template -bool -extractScaling (const Matrix44 &mat, Vec3 &scl, bool exc) -{ - Vec3 shr; - Matrix44 M (mat); - - if (! extractAndRemoveScalingAndShear (M, scl, shr, exc)) - return false; - - return true; -} - - -template -Matrix44 -sansScaling (const Matrix44 &mat, bool exc) -{ - Vec3 scl; - Vec3 shr; - Vec3 rot; - Vec3 tran; - - if (! extractSHRT (mat, scl, shr, rot, tran, exc)) - return mat; - - Matrix44 M; - - M.translate (tran); - M.rotate (rot); - M.shear (shr); - - return M; -} - - -template -bool -removeScaling (Matrix44 &mat, bool exc) -{ - Vec3 scl; - Vec3 shr; - Vec3 rot; - Vec3 tran; - - if (! extractSHRT (mat, scl, shr, rot, tran, exc)) - return false; - - mat.makeIdentity (); - mat.translate (tran); - mat.rotate (rot); - mat.shear (shr); - - return true; -} - - -template -bool -extractScalingAndShear (const Matrix44 &mat, - Vec3 &scl, Vec3 &shr, bool exc) -{ - Matrix44 M (mat); - - if (! extractAndRemoveScalingAndShear (M, scl, shr, exc)) - return false; - - return true; -} - - -template -Matrix44 -sansScalingAndShear (const Matrix44 &mat, bool exc) -{ - Vec3 scl; - Vec3 shr; - Matrix44 M (mat); - - if (! extractAndRemoveScalingAndShear (M, scl, shr, exc)) - return mat; - - return M; -} - - -template -bool -removeScalingAndShear (Matrix44 &mat, bool exc) -{ - Vec3 scl; - Vec3 shr; - - if (! extractAndRemoveScalingAndShear (mat, scl, shr, exc)) - return false; - - return true; -} - - -template -bool -extractAndRemoveScalingAndShear (Matrix44 &mat, - Vec3 &scl, Vec3 &shr, bool exc) -{ - // - // This implementation follows the technique described in the paper by - // Spencer W. Thomas in the Graphics Gems II article: "Decomposing a - // Matrix into Simple Transformations", p. 320. - // - - Vec3 row[3]; - - row[0] = Vec3 (mat[0][0], mat[0][1], mat[0][2]); - row[1] = Vec3 (mat[1][0], mat[1][1], mat[1][2]); - row[2] = Vec3 (mat[2][0], mat[2][1], mat[2][2]); - - T maxVal = 0; - for (int i=0; i < 3; i++) - for (int j=0; j < 3; j++) - if (Imath::abs (row[i][j]) > maxVal) - maxVal = Imath::abs (row[i][j]); - - // - // We normalize the 3x3 matrix here. - // It was noticed that this can improve numerical stability significantly, - // especially when many of the upper 3x3 matrix's coefficients are very - // close to zero; we correct for this step at the end by multiplying the - // scaling factors by maxVal at the end (shear and rotation are not - // affected by the normalization). - - if (maxVal != 0) - { - for (int i=0; i < 3; i++) - if (! checkForZeroScaleInRow (maxVal, row[i], exc)) - return false; - else - row[i] /= maxVal; - } - - // Compute X scale factor. - scl.x = row[0].length (); - if (! checkForZeroScaleInRow (scl.x, row[0], exc)) - return false; - - // Normalize first row. - row[0] /= scl.x; - - // An XY shear factor will shear the X coord. as the Y coord. changes. - // There are 6 combinations (XY, XZ, YZ, YX, ZX, ZY), although we only - // extract the first 3 because we can effect the last 3 by shearing in - // XY, XZ, YZ combined rotations and scales. - // - // shear matrix < 1, YX, ZX, 0, - // XY, 1, ZY, 0, - // XZ, YZ, 1, 0, - // 0, 0, 0, 1 > - - // Compute XY shear factor and make 2nd row orthogonal to 1st. - shr[0] = row[0].dot (row[1]); - row[1] -= shr[0] * row[0]; - - // Now, compute Y scale. - scl.y = row[1].length (); - if (! checkForZeroScaleInRow (scl.y, row[1], exc)) - return false; - - // Normalize 2nd row and correct the XY shear factor for Y scaling. - row[1] /= scl.y; - shr[0] /= scl.y; - - // Compute XZ and YZ shears, orthogonalize 3rd row. - shr[1] = row[0].dot (row[2]); - row[2] -= shr[1] * row[0]; - shr[2] = row[1].dot (row[2]); - row[2] -= shr[2] * row[1]; - - // Next, get Z scale. - scl.z = row[2].length (); - if (! checkForZeroScaleInRow (scl.z, row[2], exc)) - return false; - - // Normalize 3rd row and correct the XZ and YZ shear factors for Z scaling. - row[2] /= scl.z; - shr[1] /= scl.z; - shr[2] /= scl.z; - - // At this point, the upper 3x3 matrix in mat is orthonormal. - // Check for a coordinate system flip. If the determinant - // is less than zero, then negate the matrix and the scaling factors. - if (row[0].dot (row[1].cross (row[2])) < 0) - for (int i=0; i < 3; i++) - { - scl[i] *= -1; - row[i] *= -1; - } - - // Copy over the orthonormal rows into the returned matrix. - // The upper 3x3 matrix in mat is now a rotation matrix. - for (int i=0; i < 3; i++) - { - mat[i][0] = row[i][0]; - mat[i][1] = row[i][1]; - mat[i][2] = row[i][2]; - } - - // Correct the scaling factors for the normalization step that we - // performed above; shear and rotation are not affected by the - // normalization. - scl *= maxVal; - - return true; -} - - -template -void -extractEulerXYZ (const Matrix44 &mat, Vec3 &rot) -{ - // - // Normalize the local x, y and z axes to remove scaling. - // - - Vec3 i (mat[0][0], mat[0][1], mat[0][2]); - Vec3 j (mat[1][0], mat[1][1], mat[1][2]); - Vec3 k (mat[2][0], mat[2][1], mat[2][2]); - - i.normalize(); - j.normalize(); - k.normalize(); - - Matrix44 M (i[0], i[1], i[2], 0, - j[0], j[1], j[2], 0, - k[0], k[1], k[2], 0, - 0, 0, 0, 1); - - // - // Extract the first angle, rot.x. - // - - rot.x = Math::atan2 (M[1][2], M[2][2]); - - // - // Remove the rot.x rotation from M, so that the remaining - // rotation, N, is only around two axes, and gimbal lock - // cannot occur. - // - - Matrix44 N; - N.rotate (Vec3 (-rot.x, 0, 0)); - N = N * M; - - // - // Extract the other two angles, rot.y and rot.z, from N. - // - - T cy = Math::sqrt (N[0][0]*N[0][0] + N[0][1]*N[0][1]); - rot.y = Math::atan2 (-N[0][2], cy); - rot.z = Math::atan2 (-N[1][0], N[1][1]); -} - - -template -void -extractEulerZYX (const Matrix44 &mat, Vec3 &rot) -{ - // - // Normalize the local x, y and z axes to remove scaling. - // - - Vec3 i (mat[0][0], mat[0][1], mat[0][2]); - Vec3 j (mat[1][0], mat[1][1], mat[1][2]); - Vec3 k (mat[2][0], mat[2][1], mat[2][2]); - - i.normalize(); - j.normalize(); - k.normalize(); - - Matrix44 M (i[0], i[1], i[2], 0, - j[0], j[1], j[2], 0, - k[0], k[1], k[2], 0, - 0, 0, 0, 1); - - // - // Extract the first angle, rot.x. - // - - rot.x = -Math::atan2 (M[1][0], M[0][0]); - - // - // Remove the x rotation from M, so that the remaining - // rotation, N, is only around two axes, and gimbal lock - // cannot occur. - // - - Matrix44 N; - N.rotate (Vec3 (0, 0, -rot.x)); - N = N * M; - - // - // Extract the other two angles, rot.y and rot.z, from N. - // - - T cy = Math::sqrt (N[2][2]*N[2][2] + N[2][1]*N[2][1]); - rot.y = -Math::atan2 (-N[2][0], cy); - rot.z = -Math::atan2 (-N[1][2], N[1][1]); -} - - -template -Quat -extractQuat (const Matrix44 &mat) -{ - Matrix44 rot; - - T tr, s; - T q[4]; - int i, j, k; - Quat quat; - - int nxt[3] = {1, 2, 0}; - tr = mat[0][0] + mat[1][1] + mat[2][2]; - - // check the diagonal - if (tr > 0.0) { - s = Math::sqrt (tr + 1.0); - quat.r = s / 2.0; - s = 0.5 / s; - - quat.v.x = (mat[1][2] - mat[2][1]) * s; - quat.v.y = (mat[2][0] - mat[0][2]) * s; - quat.v.z = (mat[0][1] - mat[1][0]) * s; - } - else { - // diagonal is negative - i = 0; - if (mat[1][1] > mat[0][0]) - i=1; - if (mat[2][2] > mat[i][i]) - i=2; - - j = nxt[i]; - k = nxt[j]; - s = Math::sqrt ((mat[i][i] - (mat[j][j] + mat[k][k])) + 1.0); - - q[i] = s * 0.5; - if (s != 0.0) - s = 0.5 / s; - - q[3] = (mat[j][k] - mat[k][j]) * s; - q[j] = (mat[i][j] + mat[j][i]) * s; - q[k] = (mat[i][k] + mat[k][i]) * s; - - quat.v.x = q[0]; - quat.v.y = q[1]; - quat.v.z = q[2]; - quat.r = q[3]; - } - - return quat; -} - -template -bool -extractSHRT (const Matrix44 &mat, - Vec3 &s, - Vec3 &h, - Vec3 &r, - Vec3 &t, - bool exc /* = true */ , - typename Euler::Order rOrder /* = Euler::XYZ */ ) -{ - Matrix44 rot; - - rot = mat; - if (! extractAndRemoveScalingAndShear (rot, s, h, exc)) - return false; - - extractEulerXYZ (rot, r); - - t.x = mat[3][0]; - t.y = mat[3][1]; - t.z = mat[3][2]; - - if (rOrder != Euler::XYZ) - { - Imath::Euler eXYZ (r, Imath::Euler::XYZ); - Imath::Euler e (eXYZ, rOrder); - r = e.toXYZVector (); - } - - return true; -} - -template -bool -extractSHRT (const Matrix44 &mat, - Vec3 &s, - Vec3 &h, - Vec3 &r, - Vec3 &t, - bool exc) -{ - return extractSHRT(mat, s, h, r, t, exc, Imath::Euler::XYZ); -} - -template -bool -extractSHRT (const Matrix44 &mat, - Vec3 &s, - Vec3 &h, - Euler &r, - Vec3 &t, - bool exc /* = true */) -{ - return extractSHRT (mat, s, h, r, t, exc, r.order ()); -} - - -template -bool -checkForZeroScaleInRow (const T& scl, - const Vec3 &row, - bool exc /* = true */ ) -{ - for (int i = 0; i < 3; i++) - { - if ((abs (scl) < 1 && abs (row[i]) >= limits::max() * abs (scl))) - { - if (exc) - throw Imath::ZeroScaleExc ("Cannot remove zero scaling " - "from matrix."); - else - return false; - } - } - - return true; -} - - -template -Matrix44 -rotationMatrix (const Vec3 &from, const Vec3 &to) -{ - Quat q; - q.setRotation(from, to); - return q.toMatrix44(); -} - - -template -Matrix44 -rotationMatrixWithUpDir (const Vec3 &fromDir, - const Vec3 &toDir, - const Vec3 &upDir) -{ - // - // The goal is to obtain a rotation matrix that takes - // "fromDir" to "toDir". We do this in two steps and - // compose the resulting rotation matrices; - // (a) rotate "fromDir" into the z-axis - // (b) rotate the z-axis into "toDir" - // - - // The from direction must be non-zero; but we allow zero to and up dirs. - if (fromDir.length () == 0) - return Matrix44 (); - - else - { - Matrix44 zAxis2FromDir = alignZAxisWithTargetDir - (fromDir, Vec3 (0, 1, 0)); - - Matrix44 fromDir2zAxis = zAxis2FromDir.transposed (); - - Matrix44 zAxis2ToDir = alignZAxisWithTargetDir (toDir, upDir); - - return fromDir2zAxis * zAxis2ToDir; - } -} - - -template -Matrix44 -alignZAxisWithTargetDir (Vec3 targetDir, Vec3 upDir) -{ - // - // Ensure that the target direction is non-zero. - // - - if ( targetDir.length () == 0 ) - targetDir = Vec3 (0, 0, 1); - - // - // Ensure that the up direction is non-zero. - // - - if ( upDir.length () == 0 ) - upDir = Vec3 (0, 1, 0); - - // - // Check for degeneracies. If the upDir and targetDir are parallel - // or opposite, then compute a new, arbitrary up direction that is - // not parallel or opposite to the targetDir. - // - - if (upDir.cross (targetDir).length () == 0) - { - upDir = targetDir.cross (Vec3 (1, 0, 0)); - if (upDir.length() == 0) - upDir = targetDir.cross(Vec3 (0, 0, 1)); - } - - // - // Compute the x-, y-, and z-axis vectors of the new coordinate system. - // - - Vec3 targetPerpDir = upDir.cross (targetDir); - Vec3 targetUpDir = targetDir.cross (targetPerpDir); - - // - // Rotate the x-axis into targetPerpDir (row 0), - // rotate the y-axis into targetUpDir (row 1), - // rotate the z-axis into targetDir (row 2). - // - - Vec3 row[3]; - row[0] = targetPerpDir.normalized (); - row[1] = targetUpDir .normalized (); - row[2] = targetDir .normalized (); - - Matrix44 mat ( row[0][0], row[0][1], row[0][2], 0, - row[1][0], row[1][1], row[1][2], 0, - row[2][0], row[2][1], row[2][2], 0, - 0, 0, 0, 1 ); - - return mat; -} - - - -//----------------------------------------------------------------------------- -// Implementation for 3x3 Matrix -//------------------------------ - - -template -bool -extractScaling (const Matrix33 &mat, Vec2 &scl, bool exc) -{ - T shr; - Matrix33 M (mat); - - if (! extractAndRemoveScalingAndShear (M, scl, shr, exc)) - return false; - - return true; -} - - -template -Matrix33 -sansScaling (const Matrix33 &mat, bool exc) -{ - Vec2 scl; - T shr; - T rot; - Vec2 tran; - - if (! extractSHRT (mat, scl, shr, rot, tran, exc)) - return mat; - - Matrix33 M; - - M.translate (tran); - M.rotate (rot); - M.shear (shr); - - return M; -} - - -template -bool -removeScaling (Matrix33 &mat, bool exc) -{ - Vec2 scl; - T shr; - T rot; - Vec2 tran; - - if (! extractSHRT (mat, scl, shr, rot, tran, exc)) - return false; - - mat.makeIdentity (); - mat.translate (tran); - mat.rotate (rot); - mat.shear (shr); - - return true; -} - - -template -bool -extractScalingAndShear (const Matrix33 &mat, Vec2 &scl, T &shr, bool exc) -{ - Matrix33 M (mat); - - if (! extractAndRemoveScalingAndShear (M, scl, shr, exc)) - return false; - - return true; -} - - -template -Matrix33 -sansScalingAndShear (const Matrix33 &mat, bool exc) -{ - Vec2 scl; - T shr; - Matrix33 M (mat); - - if (! extractAndRemoveScalingAndShear (M, scl, shr, exc)) - return mat; - - return M; -} - - -template -bool -removeScalingAndShear (Matrix33 &mat, bool exc) -{ - Vec2 scl; - T shr; - - if (! extractAndRemoveScalingAndShear (mat, scl, shr, exc)) - return false; - - return true; -} - -template -bool -extractAndRemoveScalingAndShear (Matrix33 &mat, - Vec2 &scl, T &shr, bool exc) -{ - Vec2 row[2]; - - row[0] = Vec2 (mat[0][0], mat[0][1]); - row[1] = Vec2 (mat[1][0], mat[1][1]); - - T maxVal = 0; - for (int i=0; i < 2; i++) - for (int j=0; j < 2; j++) - if (Imath::abs (row[i][j]) > maxVal) - maxVal = Imath::abs (row[i][j]); - - // - // We normalize the 2x2 matrix here. - // It was noticed that this can improve numerical stability significantly, - // especially when many of the upper 2x2 matrix's coefficients are very - // close to zero; we correct for this step at the end by multiplying the - // scaling factors by maxVal at the end (shear and rotation are not - // affected by the normalization). - - if (maxVal != 0) - { - for (int i=0; i < 2; i++) - if (! checkForZeroScaleInRow (maxVal, row[i], exc)) - return false; - else - row[i] /= maxVal; - } - - // Compute X scale factor. - scl.x = row[0].length (); - if (! checkForZeroScaleInRow (scl.x, row[0], exc)) - return false; - - // Normalize first row. - row[0] /= scl.x; - - // An XY shear factor will shear the X coord. as the Y coord. changes. - // There are 2 combinations (XY, YX), although we only extract the XY - // shear factor because we can effect the an YX shear factor by - // shearing in XY combined with rotations and scales. - // - // shear matrix < 1, YX, 0, - // XY, 1, 0, - // 0, 0, 1 > - - // Compute XY shear factor and make 2nd row orthogonal to 1st. - shr = row[0].dot (row[1]); - row[1] -= shr * row[0]; - - // Now, compute Y scale. - scl.y = row[1].length (); - if (! checkForZeroScaleInRow (scl.y, row[1], exc)) - return false; - - // Normalize 2nd row and correct the XY shear factor for Y scaling. - row[1] /= scl.y; - shr /= scl.y; - - // At this point, the upper 2x2 matrix in mat is orthonormal. - // Check for a coordinate system flip. If the determinant - // is -1, then flip the rotation matrix and adjust the scale(Y) - // and shear(XY) factors to compensate. - if (row[0][0] * row[1][1] - row[0][1] * row[1][0] < 0) - { - row[1][0] *= -1; - row[1][1] *= -1; - scl[1] *= -1; - shr *= -1; - } - - // Copy over the orthonormal rows into the returned matrix. - // The upper 2x2 matrix in mat is now a rotation matrix. - for (int i=0; i < 2; i++) - { - mat[i][0] = row[i][0]; - mat[i][1] = row[i][1]; - } - - scl *= maxVal; - - return true; -} - - -template -void -extractEuler (const Matrix33 &mat, T &rot) -{ - // - // Normalize the local x and y axes to remove scaling. - // - - Vec2 i (mat[0][0], mat[0][1]); - Vec2 j (mat[1][0], mat[1][1]); - - i.normalize(); - j.normalize(); - - // - // Extract the angle, rot. - // - - rot = - Math::atan2 (j[0], i[0]); -} - - -template -bool -extractSHRT (const Matrix33 &mat, - Vec2 &s, - T &h, - T &r, - Vec2 &t, - bool exc) -{ - Matrix33 rot; - - rot = mat; - if (! extractAndRemoveScalingAndShear (rot, s, h, exc)) - return false; - - extractEuler (rot, r); - - t.x = mat[2][0]; - t.y = mat[2][1]; - - return true; -} - - -template -bool -checkForZeroScaleInRow (const T& scl, - const Vec2 &row, - bool exc /* = true */ ) -{ - for (int i = 0; i < 2; i++) - { - if ((abs (scl) < 1 && abs (row[i]) >= limits::max() * abs (scl))) - { - if (exc) - throw Imath::ZeroScaleExc ("Cannot remove zero scaling " - "from matrix."); - else - return false; - } - } - - return true; -} - - -} // namespace Imath - -#endif diff --git a/3rdparty/include/OpenEXR/ImathPlane.h b/3rdparty/include/OpenEXR/ImathPlane.h deleted file mode 100644 index aa59e3c7d..000000000 --- a/3rdparty/include/OpenEXR/ImathPlane.h +++ /dev/null @@ -1,256 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHPLANE_H -#define INCLUDED_IMATHPLANE_H - -//---------------------------------------------------------------------- -// -// template class Plane3 -// -// The Imath::Plane3<> class represents a half space, so the -// normal may point either towards or away from origin. The -// plane P can be represented by Imath::Plane3 as either p or -p -// corresponding to the two half-spaces on either side of the -// plane. Any function which computes a distance will return -// either negative or positive values for the distance indicating -// which half-space the point is in. Note that reflection, and -// intersection functions will operate as expected. -// -//---------------------------------------------------------------------- - -#include "ImathVec.h" -#include "ImathLine.h" - -namespace Imath { - - -template -class Plane3 -{ - public: - - Vec3 normal; - T distance; - - Plane3() {} - Plane3(const Vec3 &normal, T distance); - Plane3(const Vec3 &point, const Vec3 &normal); - Plane3(const Vec3 &point1, - const Vec3 &point2, - const Vec3 &point3); - - //---------------------- - // Various set methods - //---------------------- - - void set(const Vec3 &normal, - T distance); - - void set(const Vec3 &point, - const Vec3 &normal); - - void set(const Vec3 &point1, - const Vec3 &point2, - const Vec3 &point3 ); - - //---------------------- - // Utilities - //---------------------- - - bool intersect(const Line3 &line, - Vec3 &intersection) const; - - bool intersectT(const Line3 &line, - T ¶meter) const; - - T distanceTo(const Vec3 &) const; - - Vec3 reflectPoint(const Vec3 &) const; - Vec3 reflectVector(const Vec3 &) const; -}; - - -//-------------------- -// Convenient typedefs -//-------------------- - -typedef Plane3 Plane3f; -typedef Plane3 Plane3d; - - -//--------------- -// Implementation -//--------------- - -template -inline Plane3::Plane3(const Vec3 &p0, - const Vec3 &p1, - const Vec3 &p2) -{ - set(p0,p1,p2); -} - -template -inline Plane3::Plane3(const Vec3 &n, T d) -{ - set(n, d); -} - -template -inline Plane3::Plane3(const Vec3 &p, const Vec3 &n) -{ - set(p, n); -} - -template -inline void Plane3::set(const Vec3& point1, - const Vec3& point2, - const Vec3& point3) -{ - normal = (point2 - point1) % (point3 - point1); - normal.normalize(); - distance = normal ^ point1; -} - -template -inline void Plane3::set(const Vec3& point, const Vec3& n) -{ - normal = n; - normal.normalize(); - distance = normal ^ point; -} - -template -inline void Plane3::set(const Vec3& n, T d) -{ - normal = n; - normal.normalize(); - distance = d; -} - -template -inline T Plane3::distanceTo(const Vec3 &point) const -{ - return (point ^ normal) - distance; -} - -template -inline Vec3 Plane3::reflectPoint(const Vec3 &point) const -{ - return normal * distanceTo(point) * -2.0 + point; -} - - -template -inline Vec3 Plane3::reflectVector(const Vec3 &v) const -{ - return normal * (normal ^ v) * 2.0 - v; -} - - -template -inline bool Plane3::intersect(const Line3& line, Vec3& point) const -{ - T d = normal ^ line.dir; - if ( d == 0.0 ) return false; - T t = - ((normal ^ line.pos) - distance) / d; - point = line(t); - return true; -} - -template -inline bool Plane3::intersectT(const Line3& line, T &t) const -{ - T d = normal ^ line.dir; - if ( d == 0.0 ) return false; - t = - ((normal ^ line.pos) - distance) / d; - return true; -} - -template -std::ostream &operator<< (std::ostream &o, const Plane3 &plane) -{ - return o << "(" << plane.normal << ", " << plane.distance - << ")"; -} - -template -Plane3 operator* (const Plane3 &plane, const Matrix44 &M) -{ - // T - // -1 - // Could also compute M but that would suck. - // - - Vec3 dir1 = Vec3 (1, 0, 0) % plane.normal; - T dir1Len = dir1 ^ dir1; - - Vec3 tmp = Vec3 (0, 1, 0) % plane.normal; - T tmpLen = tmp ^ tmp; - - if (tmpLen > dir1Len) - { - dir1 = tmp; - dir1Len = tmpLen; - } - - tmp = Vec3 (0, 0, 1) % plane.normal; - tmpLen = tmp ^ tmp; - - if (tmpLen > dir1Len) - { - dir1 = tmp; - } - - Vec3 dir2 = dir1 % plane.normal; - Vec3 point = plane.distance * plane.normal; - - return Plane3 ( point * M, - (point + dir2) * M, - (point + dir1) * M ); -} - -template -Plane3 operator- (const Plane3 &plane) -{ - return Plane3(-plane.normal,-plane.distance); -} - - -} // namespace Imath - -#endif diff --git a/3rdparty/include/OpenEXR/ImathPlatform.h b/3rdparty/include/OpenEXR/ImathPlatform.h deleted file mode 100644 index d54226502..000000000 --- a/3rdparty/include/OpenEXR/ImathPlatform.h +++ /dev/null @@ -1,92 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHPLATFORM_H -#define INCLUDED_IMATHPLATFORM_H - -//---------------------------------------------------------------------------- -// -// ImathPlatform.h -// -// This file contains functions and constants which aren't -// provided by the system libraries, compilers, or includes on -// certain platforms. -//---------------------------------------------------------------------------- - -#include - -#if defined _WIN32 || defined _WIN64 - #ifndef M_PI - #define M_PI 3.14159265358979323846 - #endif -#endif - -//----------------------------------------------------------------------------- -// -// Fixes for the "restrict" keyword. These #ifdef's for detecting -// compiler versions courtesy of Boost's select_compiler_config.hpp; -// here is the copyright notice for that file: -// -// (C) Copyright Boost.org 2001. Permission to copy, use, modify, sell and -// and distribute this software is granted provided this copyright notice -// appears in all copies. This software is provided "as is" without express -// or implied warranty, and with no claim as to its suitability for any -// purpose. -// -// Some compilers support "restrict", in which case we do nothing. -// Other compilers support some variant of it (e.g. "__restrict"). -// If we don't know anything about the compiler, we define "restrict" -// to be a no-op. -// -//----------------------------------------------------------------------------- - -#if defined __GNUC__ - #if !defined(restrict) - #define restrict __restrict - #endif - -#elif defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC) - // supports restrict, do nothing. - -#elif defined __sgi - // supports restrict, do nothing. - -#else - #define restrict - -#endif - -#endif // INCLUDED_IMATHPLATFORM_H diff --git a/3rdparty/include/OpenEXR/ImathQuat.h b/3rdparty/include/OpenEXR/ImathQuat.h deleted file mode 100644 index 4a36a5d3f..000000000 --- a/3rdparty/include/OpenEXR/ImathQuat.h +++ /dev/null @@ -1,690 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHQUAT_H -#define INCLUDED_IMATHQUAT_H - -//---------------------------------------------------------------------- -// -// template class Quat -// -// "Quaternions came from Hamilton ... and have been an unmixed -// evil to those who have touched them in any way. Vector is a -// useless survival ... and has never been of the slightest use -// to any creature." -// -// - Lord Kelvin -// -// This class implements the quaternion numerical type -- you -// will probably want to use this class to represent orientations -// in R3 and to convert between various euler angle reps. You -// should probably use Imath::Euler<> for that. -// -//---------------------------------------------------------------------- - -#include "ImathExc.h" -#include "ImathMatrix.h" - -#include - -namespace Imath { - -#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER -// Disable MS VC++ warnings about conversion from double to float -#pragma warning(disable:4244) -#endif - -template -class Quat; - -template -Quat slerp (const Quat &q1,const Quat &q2, T t); - -template -Quat squad (const Quat &q1,const Quat &q2, - const Quat &qa,const Quat &qb, T t); - -template -void intermediate (const Quat &q0, const Quat &q1, - const Quat &q2, const Quat &q3, - Quat &qa, Quat &qb); - -template -class Quat -{ - public: - - T r; // real part - Vec3 v; // imaginary vector - - //----------------------------------------------------- - // Constructors - default constructor is identity quat - //----------------------------------------------------- - - Quat() : r(1), v(0,0,0) {} - - template - Quat( const Quat& q) : r(q.r), v(q.v) {} - - Quat( T s, T i, T j, T k ) : r(s), v(i,j,k) {} - - Quat( T s, Vec3 d ) : r(s), v(d) {} - - static Quat identity() { return Quat(); } - - //------------------------------------------------ - // Basic Algebra - Operators and Methods - // The operator return values are *NOT* normalized - // - // operator^ is 4D dot product - // operator/ uses the inverse() quaternion - // operator~ is conjugate -- if (S+V) is quat then - // the conjugate (S+V)* == (S-V) - // - // some operators (*,/,*=,/=) treat the quat as - // a 4D vector when one of the operands is scalar - //------------------------------------------------ - - const Quat& operator= (const Quat&); - const Quat& operator*= (const Quat&); - const Quat& operator*= (T); - const Quat& operator/= (const Quat&); - const Quat& operator/= (T); - const Quat& operator+= (const Quat&); - const Quat& operator-= (const Quat&); - T& operator[] (int index); // as 4D vector - T operator[] (int index) const; - - template bool operator == (const Quat &q) const; - template bool operator != (const Quat &q) const; - - Quat& invert(); // this -> 1 / this - Quat inverse() const; - Quat& normalize(); // returns this - Quat normalized() const; - T length() const; // in R4 - - //----------------------- - // Rotation conversion - //----------------------- - - Quat& setAxisAngle(const Vec3& axis, T radians); - Quat& setRotation(const Vec3& fromDirection, - const Vec3& toDirection); - - T angle() const; - Vec3 axis() const; - - Matrix33 toMatrix33() const; - Matrix44 toMatrix44() const; - - Quat log() const; - Quat exp() const; -}; - - -//-------------------- -// Convenient typedefs -//-------------------- - -typedef Quat Quatf; -typedef Quat Quatd; - - -//--------------- -// Implementation -//--------------- - -template -inline const Quat& Quat::operator= (const Quat& q) -{ - r = q.r; - v = q.v; - return *this; -} - -template -inline const Quat& Quat::operator*= (const Quat& q) -{ - T rtmp = r * q.r - (v ^ q.v); - v = r * q.v + v * q.r + v % q.v; - r = rtmp; - return *this; -} - -template -inline const Quat& Quat::operator*= (T t) -{ - r *= t; - v *= t; - return *this; -} - -template -inline const Quat& Quat::operator/= (const Quat& q) -{ - *this = *this * q.inverse(); - return *this; -} - -template -inline const Quat& Quat::operator/= (T t) -{ - r /= t; - v /= t; - return *this; -} - -template -inline const Quat& Quat::operator+= (const Quat& q) -{ - r += q.r; - v += q.v; - return *this; -} - -template -inline const Quat& Quat::operator-= (const Quat& q) -{ - r -= q.r; - v -= q.v; - return *this; -} -template -inline T& Quat::operator[] (int index) -{ - return index ? v[index-1] : r; -} - -template -inline T Quat::operator[] (int index) const -{ - return index ? v[index-1] : r; -} - -template -template -inline bool -Quat::operator == (const Quat &q) const -{ - return r == q.r && v == q.v; -} - -template -template -inline bool -Quat::operator != (const Quat &q) const -{ - return r != q.r || v != q.v; -} - -template -inline T operator^ (const Quat& q1,const Quat& q2) -{ - return q1.r * q2.r + (q1.v ^ q2.v); -} - -template -inline T Quat::length() const -{ - return Math::sqrt( r * r + (v ^ v) ); -} - -template -inline Quat& Quat::normalize() -{ - if ( T l = length() ) { r /= l; v /= l; } - else { r = 1; v = Vec3(0); } - return *this; -} - -template -inline Quat Quat::normalized() const -{ - if ( T l = length() ) return Quat( r / l, v / l ); - return Quat(); -} - -template -inline Quat Quat::inverse() const -{ - // 1 Q* - // - = ---- where Q* is conjugate (operator~) - // Q Q* Q and (Q* Q) == Q ^ Q (4D dot) - - T qdot = *this ^ *this; - return Quat( r / qdot, -v / qdot ); -} - -template -inline Quat& Quat::invert() -{ - T qdot = (*this) ^ (*this); - r /= qdot; - v = -v / qdot; - return *this; -} - -template -Quat -slerp(const Quat &q1,const Quat &q2, T t) -{ - // - // Spherical linear interpolation. - // - // NOTE: Assumes q1 and q2 are normalized and that 0 <= t <= 1. - // - // This method does *not* interpolate along the shortest arc - // between q1 and q2. If you desire interpolation along the - // shortest arc, then consider flipping the second quaternion - // explicitly before calling slerp. The implementation of squad() - // depends on a slerp() that interpolates as is, without the - // automatic flipping. - // - - T cosomega = q1 ^ q2; - if (cosomega >= (T) 1.0) - { - // - // Special case: q1 and q2 are the same, so just return one of them. - // This also catches the case where cosomega is very slightly > 1.0 - // - - return q1; - } - - T sinomega = Math::sqrt (1 - cosomega * cosomega); - - Quat result; - - if (sinomega * limits::max() > 1) - { - T omega = Math::acos (cosomega); - T s1 = Math::sin ((1.0 - t) * omega) / sinomega; - T s2 = Math::sin (t * omega) / sinomega; - - result = s1 * q1 + s2 * q2; - } - else if (cosomega > 0) - { - // - // omega == 0 - // - - T s1 = 1.0 - t; - T s2 = t; - - result = s1 * q1 + s2 * q2; - } - else - { - // - // omega == -pi - // - - result.v.x = - q1.v.y; - result.v.y = q1.v.x; - result.v.z = - q1.r; - result.r = q1.v.z; - - T s1 = Math::sin ((0.5 - t) * M_PI); - T s2 = Math::sin (t * M_PI); - - result = s1 * q1 + s2 * result; - } - - return result; -} - -template -Quat spline(const Quat &q0, const Quat &q1, - const Quat &q2, const Quat &q3, - T t) -{ - // Spherical Cubic Spline Interpolation - - // from Advanced Animation and Rendering - // Techniques by Watt and Watt, Page 366: - // A spherical curve is constructed using three - // spherical linear interpolations of a quadrangle - // of unit quaternions: q1, qa, qb, q2. - // Given a set of quaternion keys: q0, q1, q2, q3, - // this routine does the interpolation between - // q1 and q2 by constructing two intermediate - // quaternions: qa and qb. The qa and qb are - // computed by the intermediate function to - // guarantee the continuity of tangents across - // adjacent cubic segments. The qa represents in-tangent - // for q1 and the qb represents the out-tangent for q2. - // - // The q1 q2 is the cubic segment being interpolated. - // The q0 is from the previous adjacent segment and q3 is - // from the next adjacent segment. The q0 and q3 are used - // in computing qa and qb. - // - - Quat qa = intermediate (q0, q1, q2); - Quat qb = intermediate (q1, q2, q3); - Quat result = squad(q1, qa, qb, q2, t); - - return result; -} - -template -Quat squad(const Quat &q1, const Quat &qa, - const Quat &qb, const Quat &q2, - T t) -{ - // Spherical Quadrangle Interpolation - - // from Advanced Animation and Rendering - // Techniques by Watt and Watt, Page 366: - // It constructs a spherical cubic interpolation as - // a series of three spherical linear interpolations - // of a quadrangle of unit quaternions. - // - - Quat r1 = slerp(q1, q2, t); - Quat r2 = slerp(qa, qb, t); - Quat result = slerp(r1, r2, 2*t*(1-t)); - - return result; -} - -template -Quat intermediate(const Quat &q0, const Quat &q1, const Quat &q2) -{ - // From advanced Animation and Rendering - // Techniques by Watt and Watt, Page 366: - // computing the inner quadrangle - // points (qa and qb) to guarantee tangent - // continuity. - // - Quat q1inv = q1.inverse(); - Quat c1 = q1inv*q2; - Quat c2 = q1inv*q0; - Quat c3 = (T) (-0.25) * (c2.log() + c1.log()); - Quat qa = q1 * c3.exp(); - qa.normalize(); - return qa; -} - -template -inline Quat Quat::log() const -{ - // - // For unit quaternion, from Advanced Animation and - // Rendering Techniques by Watt and Watt, Page 366: - // - - T theta = Math::acos (std::min (r, (T) 1.0)); - if (theta == 0) - return Quat (0, v); - - T sintheta = Math::sin (theta); - - T k; - if (abs (sintheta) < 1 && abs (theta) >= limits::max() * abs (sintheta)) - k = 0; - else - k = theta / sintheta; - - return Quat ((T) 0, v.x * k, v.y * k, v.z * k); -} - -template -inline Quat Quat::exp() const -{ - // - // For pure quaternion (zero scalar part): - // from Advanced Animation and Rendering - // Techniques by Watt and Watt, Page 366: - // - - T theta = v.length(); - T sintheta = Math::sin (theta); - - T k; - if (abs (theta) < 1 && abs (sintheta) >= limits::max() * abs (theta)) - k = 0; - else - k = sintheta / theta; - - T costheta = Math::cos (theta); - - return Quat (costheta, v.x * k, v.y * k, v.z * k); -} - -template -inline T Quat::angle() const -{ - return 2.0*Math::acos(r); -} - -template -inline Vec3 Quat::axis() const -{ - return v.normalized(); -} - -template -inline Quat& Quat::setAxisAngle(const Vec3& axis, T radians) -{ - r = Math::cos(radians/2); - v = axis.normalized() * Math::sin(radians/2); - return *this; -} - - -template -Quat& -Quat::setRotation(const Vec3& from, const Vec3& to) -{ - // - // Ported from SbRotation - // - - T cost = from.dot(to) / Math::sqrt(from.dot(from) * to.dot(to)); - - // check for degeneracies - if (cost > 0.99999) - { - // - // Vectors are parallel. - // - - r = 1.0; - v = Vec3(0); - } - else if (cost < -0.99999) - { - // - // Vectors are opposite. Find an axis to rotate around, - // which should be perpendicular to the original axis. - // - - Vec3 frm = from.normalized(); - v = frm.cross(Vec3(1, 0, 0)); - if (v.length() < 0.00001) - v = frm.cross(Vec3(0, 1, 0)); - r = 0; - v.normalize(); - } - else - { - // - // Use half-angle formulae: - // cos^2 t = ( 1 + cos (2t) ) / 2 - // w part is cosine of half the rotation angle - // - - r = Math::sqrt(0.5 * (1.0 + cost)); - - // - // sin^2 t = ( 1 - cos (2t) ) / 2 - // Do the normalization of the axis vector at the same time so - // we only call sqrt once. - // - - v = from.cross(to); - v *= Math::sqrt((0.5 * (1.0 - cost))/(v.dot(v))); - } - - return *this; -} - -template -Matrix33 Quat::toMatrix33() const -{ - return Matrix33(1. - 2.0 * (v.y * v.y + v.z * v.z), - 2.0 * (v.x * v.y + v.z * r), - 2.0 * (v.z * v.x - v.y * r), - - 2.0 * (v.x * v.y - v.z * r), - 1. - 2.0 * (v.z * v.z + v.x * v.x), - 2.0 * (v.y * v.z + v.x * r), - - 2.0 * (v.z * v.x + v.y * r), - 2.0 * (v.y * v.z - v.x * r), - 1. - 2.0 * (v.y * v.y + v.x * v.x)); -} - -template -Matrix44 Quat::toMatrix44() const -{ - return Matrix44(1. - 2.0 * (v.y * v.y + v.z * v.z), - 2.0 * (v.x * v.y + v.z * r), - 2.0 * (v.z * v.x - v.y * r), - 0., - 2.0 * (v.x * v.y - v.z * r), - 1. - 2.0 * (v.z * v.z + v.x * v.x), - 2.0 * (v.y * v.z + v.x * r), - 0., - 2.0 * (v.z * v.x + v.y * r), - 2.0 * (v.y * v.z - v.x * r), - 1. - 2.0 * (v.y * v.y + v.x * v.x), - 0., - 0., - 0., - 0., - 1.0 ); -} - - -template -inline Matrix33 operator* (const Matrix33 &M, const Quat &q) -{ - return M * q.toMatrix33(); -} - -template -inline Matrix33 operator* (const Quat &q, const Matrix33 &M) -{ - return q.toMatrix33() * M; -} - -template -std::ostream& operator<< (std::ostream &o, const Quat &q) -{ - return o << "(" << q.r - << " " << q.v.x - << " " << q.v.y - << " " << q.v.z - << ")"; - -} - -template -inline Quat operator* (const Quat& q1, const Quat& q2) -{ - // (S1+V1) (S2+V2) = S1 S2 - V1.V2 + S1 V2 + V1 S2 + V1 x V2 - return Quat( q1.r * q2.r - (q1.v ^ q2.v), - q1.r * q2.v + q1.v * q2.r + q1.v % q2.v ); -} - -template -inline Quat operator/ (const Quat& q1, const Quat& q2) -{ - return q1 * q2.inverse(); -} - -template -inline Quat operator/ (const Quat& q,T t) -{ - return Quat(q.r/t,q.v/t); -} - -template -inline Quat operator* (const Quat& q,T t) -{ - return Quat(q.r*t,q.v*t); -} - -template -inline Quat operator* (T t, const Quat& q) -{ - return Quat(q.r*t,q.v*t); -} - -template -inline Quat operator+ (const Quat& q1, const Quat& q2) -{ - return Quat( q1.r + q2.r, q1.v + q2.v ); -} - -template -inline Quat operator- (const Quat& q1, const Quat& q2) -{ - return Quat( q1.r - q2.r, q1.v - q2.v ); -} - -template -inline Quat operator~ (const Quat& q) -{ - return Quat( q.r, -q.v ); // conjugate: (S+V)* = S-V -} - -template -inline Quat operator- (const Quat& q) -{ - return Quat( -q.r, -q.v ); -} - -#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER -#pragma warning(default:4244) -#endif - -} // namespace Imath - -#endif diff --git a/3rdparty/include/OpenEXR/ImathRandom.h b/3rdparty/include/OpenEXR/ImathRandom.h deleted file mode 100644 index 4cd44b21e..000000000 --- a/3rdparty/include/OpenEXR/ImathRandom.h +++ /dev/null @@ -1,461 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMATHRANDOM_H -#define INCLUDED_IMATHRANDOM_H - -//----------------------------------------------------------------------------- -// -// Generators for uniformly distributed pseudo-random numbers and -// functions that use those generators to generate numbers with -// different distributions: -// -// class Rand32 -// class Rand48 -// solidSphereRand() -// hollowSphereRand() -// gaussRand() -// gaussSphereRand() -// -//----------------------------------------------------------------------------- - -// -// Here is the copyright for the *rand48() functions implemented for -// Windows. -// - -// -// Copyright (c) 1993 Martin Birgmeier -// All rights reserved. -// -// You may redistribute unmodified or modified versions of this source -// code provided that the above copyright notice and this and the -// following conditions are retained. -// -// This software is provided ``as is'', and comes with no warranties -// of any kind. I shall in no event be liable for anything that happens -// to anyone/anything when using this software. -// - -#include -#include - -namespace Imath { - - -//----------------------------------------------- -// Fast random-number generator that generates -// a uniformly distributed sequence with a period -// length of 2^32. -//----------------------------------------------- - -class Rand32 -{ - public: - - //------------ - // Constructor - //------------ - - Rand32 (unsigned long int seed = 0); - - - //-------------------------------- - // Re-initialize with a given seed - //-------------------------------- - - void init (unsigned long int seed); - - - //---------------------------------------------------------- - // Get the next value in the sequence (range: [false, true]) - //---------------------------------------------------------- - - bool nextb (); - - - //--------------------------------------------------------------- - // Get the next value in the sequence (range: [0 ... 0xffffffff]) - //--------------------------------------------------------------- - - unsigned long int nexti (); - - - //------------------------------------------------------ - // Get the next value in the sequence (range: [0 ... 1[) - //------------------------------------------------------ - - float nextf (); - - - //------------------------------------------------------------------- - // Get the next value in the sequence (range [rangeMin ... rangeMax[) - //------------------------------------------------------------------- - - float nextf (float rangeMin, float rangeMax); - - - private: - - void next (); - - unsigned long int _state; -}; - - -//-------------------------------------------------------- -// Random-number generator based on the C Standard Library -// functions drand48(), lrand48() & company; generates a -// uniformly distributed sequence. -//-------------------------------------------------------- - -class Rand48 -{ - public: - - //------------ - // Constructor - //------------ - - Rand48 (unsigned long int seed = 0); - - - //-------------------------------- - // Re-initialize with a given seed - //-------------------------------- - - void init (unsigned long int seed); - - - //---------------------------------------------------------- - // Get the next value in the sequence (range: [false, true]) - //---------------------------------------------------------- - - bool nextb (); - - - //--------------------------------------------------------------- - // Get the next value in the sequence (range: [0 ... 0x7fffffff]) - //--------------------------------------------------------------- - - long int nexti (); - - - //------------------------------------------------------ - // Get the next value in the sequence (range: [0 ... 1[) - //------------------------------------------------------ - - double nextf (); - - - //------------------------------------------------------------------- - // Get the next value in the sequence (range [rangeMin ... rangeMax[) - //------------------------------------------------------------------- - - double nextf (double rangeMin, double rangeMax); - - - private: - - unsigned short int _state[3]; - -#if defined ( _WIN32 ) || defined ( _WIN64 ) || defined ( __MWERKS__ ) - void shiftState(); -#endif -}; - - -//------------------------------------------------------------ -// Return random points uniformly distributed in a sphere with -// radius 1 around the origin (distance from origin <= 1). -//------------------------------------------------------------ - -template -Vec -solidSphereRand (Rand &rand); - - -//------------------------------------------------------------- -// Return random points uniformly distributed on the surface of -// a sphere with radius 1 around the origin. -//------------------------------------------------------------- - -template -Vec -hollowSphereRand (Rand &rand); - - -//----------------------------------------------- -// Return random numbers with a normal (Gaussian) -// distribution with zero mean and unit variance. -//----------------------------------------------- - -template -float -gaussRand (Rand &rand); - - -//---------------------------------------------------- -// Return random points whose distance from the origin -// has a normal (Gaussian) distribution with zero mean -// and unit variance. -//---------------------------------------------------- - -template -Vec -gaussSphereRand (Rand &rand); - - -//--------------- -// Implementation -//--------------- - - -inline void -Rand32::init (unsigned long int seed) -{ - _state = (seed * 0xa5a573a5L) ^ 0x5a5a5a5aL; -} - - -inline -Rand32::Rand32 (unsigned long int seed) -{ - init (seed); -} - - -inline void -Rand32::next () -{ - _state = 1664525L * _state + 1013904223L; -} - - -inline bool -Rand32::nextb () -{ - next (); - // Return the 31st (most significant) bit, by and-ing with 2 ^ 31. - return !!(_state & 2147483648UL); -} - - -inline unsigned long int -Rand32::nexti () -{ - next (); - return _state & 0xffffffff; -} - - -inline float -Rand32::nextf () -{ - next (); - return ((int) (_state & 0xffffff)) * ((float) (1.0F / 0x1000000)); -} - - -inline float -Rand32::nextf (float rangeMin, float rangeMax) -{ - return rangeMin + nextf() * (rangeMax - rangeMin); -} - - -inline void -Rand48::init (unsigned long int seed) -{ - seed = (seed * 0xa5a573a5L) ^ 0x5a5a5a5aL; - - _state[0] = (unsigned short int) (seed); - _state[1] = (unsigned short int) (seed >> 16); - _state[2] = (unsigned short int) (seed); -} - - -inline -Rand48::Rand48 (unsigned long int seed) -{ - init (seed); -} - - -#if defined ( _WIN32 ) || defined ( _WIN64 ) || defined ( __MWERKS__ ) - -inline void -Rand48::shiftState() -{ - unsigned long accu; - unsigned short temp[2]; - - accu = 0xe66dUL * ( unsigned long )_state[0] + 0x000bUL; - - temp[0] = ( unsigned short )accu; /* lower 16 bits */ - accu >>= sizeof( unsigned short ) * 8; - - accu += 0xe66dUL * ( unsigned long )_state[1] + - 0xdeecUL * ( unsigned long )_state[0]; - - temp[1] = ( unsigned short )accu; /* middle 16 bits */ - accu >>= sizeof( unsigned short ) * 8; - - accu += 0xe66dUL * _state[2] + - 0xdeecUL * _state[1] + - 0x0005UL * _state[0]; - - _state[0] = temp[0]; - _state[1] = temp[1]; - _state[2] = ( unsigned short )accu; -} - -#endif - -inline bool -Rand48::nextb () -{ -#if defined ( _WIN32 ) || defined ( _WIN64 ) || defined ( __MWERKS__ ) - shiftState(); - return ( ( long( _state[2] ) << 15 ) + ( long( _state[1] ) >> 1 ) ) & 0x1; -#else - return nrand48 (_state) & 1; -#endif -} - - -inline long int -Rand48::nexti () -{ -#if defined ( _WIN32 ) || defined ( _WIN64 ) || defined ( __MWERKS__ ) - shiftState(); - return ( long( _state[2] ) << 15 ) + ( long( _state[1] ) >> 1 ); -#else - return nrand48 (_state); -#endif -} - - -inline double -Rand48::nextf () -{ -#if defined ( _WIN32 ) || defined ( _WIN64 ) || defined ( __MWERKS__ ) - shiftState(); - return ldexp( double( _state[0] ), -48 ) + - ldexp( double( _state[1] ), -32 ) + - ldexp( double( _state[2] ), -16 ); -#else - return erand48 (_state); -#endif -} - - -inline double -Rand48::nextf (double rangeMin, double rangeMax) -{ - return rangeMin + nextf() * (rangeMax - rangeMin); -} - - -template -Vec -solidSphereRand (Rand &rand) -{ - Vec v; - - do - { - for (unsigned int i = 0; i < Vec::dimensions(); i++) - v[i] = (typename Vec::BaseType) rand.nextf (-1, 1); - } - while (v.length2() > 1); - - return v; -} - - -template -Vec -hollowSphereRand (Rand &rand) -{ - Vec v; - typename Vec::BaseType length; - - do - { - for (unsigned int i = 0; i < Vec::dimensions(); i++) - v[i] = (typename Vec::BaseType) rand.nextf (-1, 1); - - length = v.length(); - } - while (length > 1 || length == 0); - - return v / length; -} - - -template -float -gaussRand (Rand &rand) -{ - float x; // Note: to avoid numerical problems with very small - float y; // numbers, we make these variables singe-precision - float length2; // floats, but later we call the double-precision log() - // and sqrt() functions instead of logf() and sqrtf(). - do - { - x = float (rand.nextf (-1, 1)); - y = float (rand.nextf (-1, 1)); - length2 = x * x + y * y; - } - while (length2 >= 1 || length2 == 0); - - return x * sqrt (-2 * log (length2) / length2); -} - - -template -Vec -gaussSphereRand (Rand &rand) -{ - return hollowSphereRand (rand) * gaussRand (rand); -} - -double drand48(); -long int lrand48(); - -} // namespace Imath - -#endif diff --git a/3rdparty/include/OpenEXR/ImathRoots.h b/3rdparty/include/OpenEXR/ImathRoots.h deleted file mode 100644 index 16723f722..000000000 --- a/3rdparty/include/OpenEXR/ImathRoots.h +++ /dev/null @@ -1,217 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHROOTS_H -#define INCLUDED_IMATHROOTS_H - -//--------------------------------------------------------------------- -// -// Functions to solve linear, quadratic or cubic equations -// -//--------------------------------------------------------------------- - -#include - -namespace Imath { - -//-------------------------------------------------------------------------- -// Find the real solutions of a linear, quadratic or cubic equation: -// -// function equation solved -// -// solveLinear (a, b, x) a * x + b == 0 -// solveQuadratic (a, b, c, x) a * x*x + b * x + c == 0 -// solveNormalizedCubic (r, s, t, x) x*x*x + r * x*x + s * x + t == 0 -// solveCubic (a, b, c, d, x) a * x*x*x + b * x*x + c * x + d == 0 -// -// Return value: -// -// 3 three real solutions, stored in x[0], x[1] and x[2] -// 2 two real solutions, stored in x[0] and x[1] -// 1 one real solution, stored in x[1] -// 0 no real solutions -// -1 all real numbers are solutions -// -// Notes: -// -// * It is possible that an equation has real solutions, but that the -// solutions (or some intermediate result) are not representable. -// In this case, either some of the solutions returned are invalid -// (nan or infinity), or, if floating-point exceptions have been -// enabled with Iex::mathExcOn(), an Iex::MathExc exception is -// thrown. -// -// * Cubic equations are solved using Cardano's Formula; even though -// only real solutions are produced, some intermediate results are -// complex (std::complex). -// -//-------------------------------------------------------------------------- - -template int solveLinear (T a, T b, T &x); -template int solveQuadratic (T a, T b, T c, T x[2]); -template int solveNormalizedCubic (T r, T s, T t, T x[3]); -template int solveCubic (T a, T b, T c, T d, T x[3]); - - -//--------------- -// Implementation -//--------------- - -template -int -solveLinear (T a, T b, T &x) -{ - if (a != 0) - { - x = -b / a; - return 1; - } - else if (b != 0) - { - return 0; - } - else - { - return -1; - } -} - - -template -int -solveQuadratic (T a, T b, T c, T x[2]) -{ - if (a == 0) - { - return solveLinear (b, c, x[0]); - } - else - { - T D = b * b - 4 * a * c; - - if (D > 0) - { - T s = sqrt (D); - - x[0] = (-b + s) / (2 * a); - x[1] = (-b - s) / (2 * a); - return 2; - } - if (D == 0) - { - x[0] = -b / (2 * a); - return 1; - } - else - { - return 0; - } - } -} - - -template -int -solveNormalizedCubic (T r, T s, T t, T x[3]) -{ - T p = (3 * s - r * r) / 3; - T q = 2 * r * r * r / 27 - r * s / 3 + t; - T p3 = p / 3; - T q2 = q / 2; - T D = p3 * p3 * p3 + q2 * q2; - - if (D == 0 && p3 == 0) - { - x[0] = -r / 3; - x[1] = -r / 3; - x[2] = -r / 3; - return 1; - } - - std::complex u = std::pow (-q / 2 + std::sqrt (std::complex (D)), - T (1) / T (3)); - - std::complex v = -p / (T (3) * u); - - const T sqrt3 = T (1.73205080756887729352744634150587); // enough digits - // for long double - std::complex y0 (u + v); - - std::complex y1 (-(u + v) / T (2) + - (u - v) / T (2) * std::complex (0, sqrt3)); - - std::complex y2 (-(u + v) / T (2) - - (u - v) / T (2) * std::complex (0, sqrt3)); - - if (D > 0) - { - x[0] = y0.real() - r / 3; - return 1; - } - else if (D == 0) - { - x[0] = y0.real() - r / 3; - x[1] = y1.real() - r / 3; - return 2; - } - else - { - x[0] = y0.real() - r / 3; - x[1] = y1.real() - r / 3; - x[2] = y2.real() - r / 3; - return 3; - } -} - - -template -int -solveCubic (T a, T b, T c, T d, T x[3]) -{ - if (a == 0) - { - return solveQuadratic (b, c, d, x); - } - else - { - return solveNormalizedCubic (b / a, c / a, d / a, x); - } -} - - -} // namespace Imath - -#endif diff --git a/3rdparty/include/OpenEXR/ImathShear.h b/3rdparty/include/OpenEXR/ImathShear.h deleted file mode 100644 index bad40a549..000000000 --- a/3rdparty/include/OpenEXR/ImathShear.h +++ /dev/null @@ -1,659 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHSHEAR_H -#define INCLUDED_IMATHSHEAR_H - -//---------------------------------------------------- -// -// Shear6 class template. -// -//---------------------------------------------------- - -#include "ImathExc.h" -#include "ImathLimits.h" -#include "ImathMath.h" -#include "ImathVec.h" - -#include - - -namespace Imath { - - - - -template class Shear6 -{ - public: - - //------------------- - // Access to elements - //------------------- - - T xy, xz, yz, yx, zx, zy; - - T & operator [] (int i); - const T & operator [] (int i) const; - - - //------------- - // Constructors - //------------- - - Shear6 (); // (0 0 0 0 0 0) - Shear6 (T XY, T XZ, T YZ); // (XY XZ YZ 0 0 0) - Shear6 (const Vec3 &v); // (v.x v.y v.z 0 0 0) - template // (v.x v.y v.z 0 0 0) - Shear6 (const Vec3 &v); - Shear6 (T XY, T XZ, T YZ, // (XY XZ YZ YX ZX ZY) - T YX, T ZX, T ZY); - - - //--------------------------------- - // Copy constructors and assignment - //--------------------------------- - - Shear6 (const Shear6 &h); - template Shear6 (const Shear6 &h); - - const Shear6 & operator = (const Shear6 &h); - template - const Shear6 & operator = (const Vec3 &v); - - - //---------------------- - // Compatibility with Sb - //---------------------- - - template - void setValue (S XY, S XZ, S YZ, S YX, S ZX, S ZY); - - template - void setValue (const Shear6 &h); - - template - void getValue (S &XY, S &XZ, S &YZ, - S &YX, S &ZX, S &ZY) const; - - template - void getValue (Shear6 &h) const; - - T * getValue(); - const T * getValue() const; - - - //--------- - // Equality - //--------- - - template - bool operator == (const Shear6 &h) const; - - template - bool operator != (const Shear6 &h) const; - - //----------------------------------------------------------------------- - // Compare two shears and test if they are "approximately equal": - // - // equalWithAbsError (h, e) - // - // Returns true if the coefficients of this and h are the same with - // an absolute error of no more than e, i.e., for all i - // - // abs (this[i] - h[i]) <= e - // - // equalWithRelError (h, e) - // - // Returns true if the coefficients of this and h are the same with - // a relative error of no more than e, i.e., for all i - // - // abs (this[i] - h[i]) <= e * abs (this[i]) - //----------------------------------------------------------------------- - - bool equalWithAbsError (const Shear6 &h, T e) const; - bool equalWithRelError (const Shear6 &h, T e) const; - - - //------------------------ - // Component-wise addition - //------------------------ - - const Shear6 & operator += (const Shear6 &h); - Shear6 operator + (const Shear6 &h) const; - - - //--------------------------- - // Component-wise subtraction - //--------------------------- - - const Shear6 & operator -= (const Shear6 &h); - Shear6 operator - (const Shear6 &h) const; - - - //------------------------------------ - // Component-wise multiplication by -1 - //------------------------------------ - - Shear6 operator - () const; - const Shear6 & negate (); - - - //------------------------------ - // Component-wise multiplication - //------------------------------ - - const Shear6 & operator *= (const Shear6 &h); - const Shear6 & operator *= (T a); - Shear6 operator * (const Shear6 &h) const; - Shear6 operator * (T a) const; - - - //------------------------ - // Component-wise division - //------------------------ - - const Shear6 & operator /= (const Shear6 &h); - const Shear6 & operator /= (T a); - Shear6 operator / (const Shear6 &h) const; - Shear6 operator / (T a) const; - - - //---------------------------------------------------------- - // Number of dimensions, i.e. number of elements in a Shear6 - //---------------------------------------------------------- - - static unsigned int dimensions() {return 6;} - - - //------------------------------------------------- - // Limitations of type T (see also class limits) - //------------------------------------------------- - - static T baseTypeMin() {return limits::min();} - static T baseTypeMax() {return limits::max();} - static T baseTypeSmallest() {return limits::smallest();} - static T baseTypeEpsilon() {return limits::epsilon();} - - - //-------------------------------------------------------------- - // Base type -- in templates, which accept a parameter, V, which - // could be either a Vec2 or a Shear6, you can refer to T as - // V::BaseType - //-------------------------------------------------------------- - - typedef T BaseType; -}; - - -//-------------- -// Stream output -//-------------- - -template -std::ostream & operator << (std::ostream &s, const Shear6 &h); - - -//---------------------------------------------------- -// Reverse multiplication: scalar * Shear6 -//---------------------------------------------------- - -template Shear6 operator * (S a, const Shear6 &h); - - -//------------------------- -// Typedefs for convenience -//------------------------- - -typedef Vec3 Shear3f; -typedef Vec3 Shear3d; -typedef Shear6 Shear6f; -typedef Shear6 Shear6d; - - - - -//----------------------- -// Implementation of Shear6 -//----------------------- - -template -inline T & -Shear6::operator [] (int i) -{ - return (&xy)[i]; -} - -template -inline const T & -Shear6::operator [] (int i) const -{ - return (&xy)[i]; -} - -template -inline -Shear6::Shear6 () -{ - xy = xz = yz = yx = zx = zy = 0; -} - -template -inline -Shear6::Shear6 (T XY, T XZ, T YZ) -{ - xy = XY; - xz = XZ; - yz = YZ; - yx = 0; - zx = 0; - zy = 0; -} - -template -inline -Shear6::Shear6 (const Vec3 &v) -{ - xy = v.x; - xz = v.y; - yz = v.z; - yx = 0; - zx = 0; - zy = 0; -} - -template -template -inline -Shear6::Shear6 (const Vec3 &v) -{ - xy = T (v.x); - xz = T (v.y); - yz = T (v.z); - yx = 0; - zx = 0; - zy = 0; -} - -template -inline -Shear6::Shear6 (T XY, T XZ, T YZ, T YX, T ZX, T ZY) -{ - xy = XY; - xz = XZ; - yz = YZ; - yx = YX; - zx = ZX; - zy = ZY; -} - -template -inline -Shear6::Shear6 (const Shear6 &h) -{ - xy = h.xy; - xz = h.xz; - yz = h.yz; - yx = h.yx; - zx = h.zx; - zy = h.zy; -} - -template -template -inline -Shear6::Shear6 (const Shear6 &h) -{ - xy = T (h.xy); - xz = T (h.xz); - yz = T (h.yz); - yx = T (h.yx); - zx = T (h.zx); - zy = T (h.zy); -} - -template -inline const Shear6 & -Shear6::operator = (const Shear6 &h) -{ - xy = h.xy; - xz = h.xz; - yz = h.yz; - yx = h.yx; - zx = h.zx; - zy = h.zy; - return *this; -} - -template -template -inline const Shear6 & -Shear6::operator = (const Vec3 &v) -{ - xy = T (v.x); - xz = T (v.y); - yz = T (v.z); - yx = 0; - zx = 0; - zy = 0; - return *this; -} - -template -template -inline void -Shear6::setValue (S XY, S XZ, S YZ, S YX, S ZX, S ZY) -{ - xy = T (XY); - xz = T (XZ); - yz = T (YZ); - yx = T (YX); - zx = T (ZX); - zy = T (ZY); -} - -template -template -inline void -Shear6::setValue (const Shear6 &h) -{ - xy = T (h.xy); - xz = T (h.xz); - yz = T (h.yz); - yx = T (h.yx); - zx = T (h.zx); - zy = T (h.zy); -} - -template -template -inline void -Shear6::getValue (S &XY, S &XZ, S &YZ, S &YX, S &ZX, S &ZY) const -{ - XY = S (xy); - XZ = S (xz); - YZ = S (yz); - YX = S (yx); - ZX = S (zx); - ZY = S (zy); -} - -template -template -inline void -Shear6::getValue (Shear6 &h) const -{ - h.xy = S (xy); - h.xz = S (xz); - h.yz = S (yz); - h.yx = S (yx); - h.zx = S (zx); - h.zy = S (zy); -} - -template -inline T * -Shear6::getValue() -{ - return (T *) &xy; -} - -template -inline const T * -Shear6::getValue() const -{ - return (const T *) &xy; -} - -template -template -inline bool -Shear6::operator == (const Shear6 &h) const -{ - return xy == h.xy && xz == h.xz && yz == h.yz && - yx == h.yx && zx == h.zx && zy == h.zy; -} - -template -template -inline bool -Shear6::operator != (const Shear6 &h) const -{ - return xy != h.xy || xz != h.xz || yz != h.yz || - yx != h.yx || zx != h.zx || zy != h.zy; -} - -template -bool -Shear6::equalWithAbsError (const Shear6 &h, T e) const -{ - for (int i = 0; i < 6; i++) - if (!Imath::equalWithAbsError ((*this)[i], h[i], e)) - return false; - - return true; -} - -template -bool -Shear6::equalWithRelError (const Shear6 &h, T e) const -{ - for (int i = 0; i < 6; i++) - if (!Imath::equalWithRelError ((*this)[i], h[i], e)) - return false; - - return true; -} - - -template -inline const Shear6 & -Shear6::operator += (const Shear6 &h) -{ - xy += h.xy; - xz += h.xz; - yz += h.yz; - yx += h.yx; - zx += h.zx; - zy += h.zy; - return *this; -} - -template -inline Shear6 -Shear6::operator + (const Shear6 &h) const -{ - return Shear6 (xy + h.xy, xz + h.xz, yz + h.yz, - yx + h.yx, zx + h.zx, zy + h.zy); -} - -template -inline const Shear6 & -Shear6::operator -= (const Shear6 &h) -{ - xy -= h.xy; - xz -= h.xz; - yz -= h.yz; - yx -= h.yx; - zx -= h.zx; - zy -= h.zy; - return *this; -} - -template -inline Shear6 -Shear6::operator - (const Shear6 &h) const -{ - return Shear6 (xy - h.xy, xz - h.xz, yz - h.yz, - yx - h.yx, zx - h.zx, zy - h.zy); -} - -template -inline Shear6 -Shear6::operator - () const -{ - return Shear6 (-xy, -xz, -yz, -yx, -zx, -zy); -} - -template -inline const Shear6 & -Shear6::negate () -{ - xy = -xy; - xz = -xz; - yz = -yz; - yx = -yx; - zx = -zx; - zy = -zy; - return *this; -} - -template -inline const Shear6 & -Shear6::operator *= (const Shear6 &h) -{ - xy *= h.xy; - xz *= h.xz; - yz *= h.yz; - yx *= h.yx; - zx *= h.zx; - zy *= h.zy; - return *this; -} - -template -inline const Shear6 & -Shear6::operator *= (T a) -{ - xy *= a; - xz *= a; - yz *= a; - yx *= a; - zx *= a; - zy *= a; - return *this; -} - -template -inline Shear6 -Shear6::operator * (const Shear6 &h) const -{ - return Shear6 (xy * h.xy, xz * h.xz, yz * h.yz, - yx * h.yx, zx * h.zx, zy * h.zy); -} - -template -inline Shear6 -Shear6::operator * (T a) const -{ - return Shear6 (xy * a, xz * a, yz * a, - yx * a, zx * a, zy * a); -} - -template -inline const Shear6 & -Shear6::operator /= (const Shear6 &h) -{ - xy /= h.xy; - xz /= h.xz; - yz /= h.yz; - yx /= h.yx; - zx /= h.zx; - zy /= h.zy; - return *this; -} - -template -inline const Shear6 & -Shear6::operator /= (T a) -{ - xy /= a; - xz /= a; - yz /= a; - yx /= a; - zx /= a; - zy /= a; - return *this; -} - -template -inline Shear6 -Shear6::operator / (const Shear6 &h) const -{ - return Shear6 (xy / h.xy, xz / h.xz, yz / h.yz, - yx / h.yx, zx / h.zx, zy / h.zy); -} - -template -inline Shear6 -Shear6::operator / (T a) const -{ - return Shear6 (xy / a, xz / a, yz / a, - yx / a, zx / a, zy / a); -} - - -//----------------------------- -// Stream output implementation -//----------------------------- - -template -std::ostream & -operator << (std::ostream &s, const Shear6 &h) -{ - return s << '(' - << h.xy << ' ' << h.xz << ' ' << h.yz - << h.yx << ' ' << h.zx << ' ' << h.zy - << ')'; -} - - -//----------------------------------------- -// Implementation of reverse multiplication -//----------------------------------------- - -template -inline Shear6 -operator * (S a, const Shear6 &h) -{ - return Shear6 (a * h.xy, a * h.xz, a * h.yz, - a * h.yx, a * h.zx, a * h.zy); -} - - -} // namespace Imath - -#endif diff --git a/3rdparty/include/OpenEXR/ImathSphere.h b/3rdparty/include/OpenEXR/ImathSphere.h deleted file mode 100644 index 3860701d8..000000000 --- a/3rdparty/include/OpenEXR/ImathSphere.h +++ /dev/null @@ -1,177 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHSPHERE_H -#define INCLUDED_IMATHSPHERE_H - -//------------------------------------- -// -// A 3D sphere class template -// -//------------------------------------- - -#include "ImathVec.h" -#include "ImathBox.h" -#include "ImathLine.h" - -namespace Imath { - -template -class Sphere3 -{ - public: - - Vec3 center; - T radius; - - //--------------- - // Constructors - //--------------- - - Sphere3() : center(0,0,0), radius(0) {} - Sphere3(const Vec3 &c, T r) : center(c), radius(r) {} - - //------------------------------------------------------------------- - // Utilities: - // - // s.circumscribe(b) sets center and radius of sphere s - // so that the s tightly encloses box b. - // - // s.intersectT (l, t) If sphere s and line l intersect, then - // intersectT() computes the smallest t, - // t >= 0, so that l(t) is a point on the - // sphere. intersectT() then returns true. - // - // If s and l do not intersect, intersectT() - // returns false. - // - // s.intersect (l, i) If sphere s and line l intersect, then - // intersect() calls s.intersectT(l,t) and - // computes i = l(t). - // - // If s and l do not intersect, intersect() - // returns false. - // - //------------------------------------------------------------------- - - void circumscribe(const Box > &box); - bool intersect(const Line3 &l, Vec3 &intersection) const; - bool intersectT(const Line3 &l, T &t) const; -}; - - -//-------------------- -// Convenient typedefs -//-------------------- - -typedef Sphere3 Sphere3f; -typedef Sphere3 Sphere3d; - - -//--------------- -// Implementation -//--------------- - -template -void Sphere3::circumscribe(const Box > &box) -{ - center = T(0.5) * (box.min + box.max); - radius = (box.max - center).length(); -} - - -template -bool Sphere3::intersectT(const Line3 &line, T &t) const -{ - bool doesIntersect = true; - - Vec3 v = line.pos - center; - T B = 2.0 * (line.dir ^ v); - T C = (v ^ v) - (radius * radius); - - // compute discriminant - // if negative, there is no intersection - - T discr = B*B - 4.0*C; - - if (discr < 0.0) - { - // line and Sphere3 do not intersect - - doesIntersect = false; - } - else - { - // t0: (-B - sqrt(B^2 - 4AC)) / 2A (A = 1) - - T sqroot = Math::sqrt(discr); - t = (-B - sqroot) * 0.5; - - if (t < 0.0) - { - // no intersection, try t1: (-B + sqrt(B^2 - 4AC)) / 2A (A = 1) - - t = (-B + sqroot) * 0.5; - } - - if (t < 0.0) - doesIntersect = false; - } - - return doesIntersect; -} - - -template -bool Sphere3::intersect(const Line3 &line, Vec3 &intersection) const -{ - T t; - - if (intersectT (line, t)) - { - intersection = line(t); - return true; - } - else - { - return false; - } -} - - -} //namespace Imath - -#endif diff --git a/3rdparty/include/OpenEXR/ImathVec.h b/3rdparty/include/OpenEXR/ImathVec.h deleted file mode 100644 index b7adc5f95..000000000 --- a/3rdparty/include/OpenEXR/ImathVec.h +++ /dev/null @@ -1,1426 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHVEC_H -#define INCLUDED_IMATHVEC_H - -//---------------------------------------------------- -// -// 2D and 3D point/vector class templates! -// -//---------------------------------------------------- - -#include "ImathExc.h" -#include "ImathLimits.h" -#include "ImathMath.h" - -#include - -#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER -// suppress exception specification warnings -#pragma warning(disable:4290) -#endif - - -namespace Imath { - - -template class Vec2 -{ - public: - - //------------------- - // Access to elements - //------------------- - - T x, y; - - T & operator [] (int i); - const T & operator [] (int i) const; - - - //------------- - // Constructors - //------------- - - Vec2 (); // no initialization - explicit Vec2 (T a); // (a a) - Vec2 (T a, T b); // (a b) - - - //--------------------------------- - // Copy constructors and assignment - //--------------------------------- - - Vec2 (const Vec2 &v); - template Vec2 (const Vec2 &v); - - const Vec2 & operator = (const Vec2 &v); - - - //---------------------- - // Compatibility with Sb - //---------------------- - - template - void setValue (S a, S b); - - template - void setValue (const Vec2 &v); - - template - void getValue (S &a, S &b) const; - - template - void getValue (Vec2 &v) const; - - T * getValue (); - const T * getValue () const; - - - //--------- - // Equality - //--------- - - template - bool operator == (const Vec2 &v) const; - - template - bool operator != (const Vec2 &v) const; - - - //----------------------------------------------------------------------- - // Compare two vectors and test if they are "approximately equal": - // - // equalWithAbsError (v, e) - // - // Returns true if the coefficients of this and v are the same with - // an absolute error of no more than e, i.e., for all i - // - // abs (this[i] - v[i]) <= e - // - // equalWithRelError (v, e) - // - // Returns true if the coefficients of this and v are the same with - // a relative error of no more than e, i.e., for all i - // - // abs (this[i] - v[i]) <= e * abs (this[i]) - //----------------------------------------------------------------------- - - bool equalWithAbsError (const Vec2 &v, T e) const; - bool equalWithRelError (const Vec2 &v, T e) const; - - //------------ - // Dot product - //------------ - - T dot (const Vec2 &v) const; - T operator ^ (const Vec2 &v) const; - - - //------------------------------------------------ - // Right-handed cross product, i.e. z component of - // Vec3 (this->x, this->y, 0) % Vec3 (v.x, v.y, 0) - //------------------------------------------------ - - T cross (const Vec2 &v) const; - T operator % (const Vec2 &v) const; - - - //------------------------ - // Component-wise addition - //------------------------ - - const Vec2 & operator += (const Vec2 &v); - Vec2 operator + (const Vec2 &v) const; - - - //--------------------------- - // Component-wise subtraction - //--------------------------- - - const Vec2 & operator -= (const Vec2 &v); - Vec2 operator - (const Vec2 &v) const; - - - //------------------------------------ - // Component-wise multiplication by -1 - //------------------------------------ - - Vec2 operator - () const; - const Vec2 & negate (); - - - //------------------------------ - // Component-wise multiplication - //------------------------------ - - const Vec2 & operator *= (const Vec2 &v); - const Vec2 & operator *= (T a); - Vec2 operator * (const Vec2 &v) const; - Vec2 operator * (T a) const; - - - //------------------------ - // Component-wise division - //------------------------ - - const Vec2 & operator /= (const Vec2 &v); - const Vec2 & operator /= (T a); - Vec2 operator / (const Vec2 &v) const; - Vec2 operator / (T a) const; - - - //---------------------------------------------------------------- - // Length and normalization: If v.length() is 0.0, v.normalize() - // and v.normalized() produce a null vector; v.normalizeExc() and - // v.normalizedExc() throw a NullVecExc. - // v.normalizeNonNull() and v.normalizedNonNull() are slightly - // faster than the other normalization routines, but if v.length() - // is 0.0, the result is undefined. - //---------------------------------------------------------------- - - T length () const; - T length2 () const; - - const Vec2 & normalize (); // modifies *this - const Vec2 & normalizeExc () throw (Iex::MathExc); - const Vec2 & normalizeNonNull (); - - Vec2 normalized () const; // does not modify *this - Vec2 normalizedExc () const throw (Iex::MathExc); - Vec2 normalizedNonNull () const; - - - //-------------------------------------------------------- - // Number of dimensions, i.e. number of elements in a Vec2 - //-------------------------------------------------------- - - static unsigned int dimensions() {return 2;} - - - //------------------------------------------------- - // Limitations of type T (see also class limits) - //------------------------------------------------- - - static T baseTypeMin() {return limits::min();} - static T baseTypeMax() {return limits::max();} - static T baseTypeSmallest() {return limits::smallest();} - static T baseTypeEpsilon() {return limits::epsilon();} - - - //-------------------------------------------------------------- - // Base type -- in templates, which accept a parameter, V, which - // could be either a Vec2 or a Vec3, you can refer to T as - // V::BaseType - //-------------------------------------------------------------- - - typedef T BaseType; -}; - - -template class Vec3 -{ - public: - - //------------------- - // Access to elements - //------------------- - - T x, y, z; - - T & operator [] (int i); - const T & operator [] (int i) const; - - - //------------- - // Constructors - //------------- - - Vec3 (); // no initialization - explicit Vec3 (T a); // (a a a) - Vec3 (T a, T b, T c); // (a b c) - - - //--------------------------------- - // Copy constructors and assignment - //--------------------------------- - - Vec3 (const Vec3 &v); - template Vec3 (const Vec3 &v); - - const Vec3 & operator = (const Vec3 &v); - - - //---------------------- - // Compatibility with Sb - //---------------------- - - template - void setValue (S a, S b, S c); - - template - void setValue (const Vec3 &v); - - template - void getValue (S &a, S &b, S &c) const; - - template - void getValue (Vec3 &v) const; - - T * getValue(); - const T * getValue() const; - - - //--------- - // Equality - //--------- - - template - bool operator == (const Vec3 &v) const; - - template - bool operator != (const Vec3 &v) const; - - //----------------------------------------------------------------------- - // Compare two vectors and test if they are "approximately equal": - // - // equalWithAbsError (v, e) - // - // Returns true if the coefficients of this and v are the same with - // an absolute error of no more than e, i.e., for all i - // - // abs (this[i] - v[i]) <= e - // - // equalWithRelError (v, e) - // - // Returns true if the coefficients of this and v are the same with - // a relative error of no more than e, i.e., for all i - // - // abs (this[i] - v[i]) <= e * abs (this[i]) - //----------------------------------------------------------------------- - - bool equalWithAbsError (const Vec3 &v, T e) const; - bool equalWithRelError (const Vec3 &v, T e) const; - - //------------ - // Dot product - //------------ - - T dot (const Vec3 &v) const; - T operator ^ (const Vec3 &v) const; - - - //--------------------------- - // Right-handed cross product - //--------------------------- - - Vec3 cross (const Vec3 &v) const; - const Vec3 & operator %= (const Vec3 &v); - Vec3 operator % (const Vec3 &v) const; - - - //------------------------ - // Component-wise addition - //------------------------ - - const Vec3 & operator += (const Vec3 &v); - Vec3 operator + (const Vec3 &v) const; - - - //--------------------------- - // Component-wise subtraction - //--------------------------- - - const Vec3 & operator -= (const Vec3 &v); - Vec3 operator - (const Vec3 &v) const; - - - //------------------------------------ - // Component-wise multiplication by -1 - //------------------------------------ - - Vec3 operator - () const; - const Vec3 & negate (); - - - //------------------------------ - // Component-wise multiplication - //------------------------------ - - const Vec3 & operator *= (const Vec3 &v); - const Vec3 & operator *= (T a); - Vec3 operator * (const Vec3 &v) const; - Vec3 operator * (T a) const; - - - //------------------------ - // Component-wise division - //------------------------ - - const Vec3 & operator /= (const Vec3 &v); - const Vec3 & operator /= (T a); - Vec3 operator / (const Vec3 &v) const; - Vec3 operator / (T a) const; - - - //---------------------------------------------------------------- - // Length and normalization: If v.length() is 0.0, v.normalize() - // and v.normalized() produce a null vector; v.normalizeExc() and - // v.normalizedExc() throw a NullVecExc. - // v.normalizeNonNull() and v.normalizedNonNull() are slightly - // faster than the other normalization routines, but if v.length() - // is 0.0, the result is undefined. - //---------------------------------------------------------------- - - T length () const; - T length2 () const; - - const Vec3 & normalize (); // modifies *this - const Vec3 & normalizeExc () throw (Iex::MathExc); - const Vec3 & normalizeNonNull (); - - Vec3 normalized () const; // does not modify *this - Vec3 normalizedExc () const throw (Iex::MathExc); - Vec3 normalizedNonNull () const; - - - //-------------------------------------------------------- - // Number of dimensions, i.e. number of elements in a Vec3 - //-------------------------------------------------------- - - static unsigned int dimensions() {return 3;} - - - //------------------------------------------------- - // Limitations of type T (see also class limits) - //------------------------------------------------- - - static T baseTypeMin() {return limits::min();} - static T baseTypeMax() {return limits::max();} - static T baseTypeSmallest() {return limits::smallest();} - static T baseTypeEpsilon() {return limits::epsilon();} - - - //-------------------------------------------------------------- - // Base type -- in templates, which accept a parameter, V, which - // could be either a Vec2 or a Vec3, you can refer to T as - // V::BaseType - //-------------------------------------------------------------- - - typedef T BaseType; -}; - - -//-------------- -// Stream output -//-------------- - -template -std::ostream & operator << (std::ostream &s, const Vec2 &v); - -template -std::ostream & operator << (std::ostream &s, const Vec3 &v); - - -//---------------------------------------------------- -// Reverse multiplication: S * Vec2 and S * Vec3 -//---------------------------------------------------- - -template Vec2 operator * (T a, const Vec2 &v); -template Vec3 operator * (T a, const Vec3 &v); - - -//------------------------- -// Typedefs for convenience -//------------------------- - -typedef Vec2 V2s; -typedef Vec2 V2i; -typedef Vec2 V2f; -typedef Vec2 V2d; -typedef Vec3 V3s; -typedef Vec3 V3i; -typedef Vec3 V3f; -typedef Vec3 V3d; - - -//------------------------------------------------------------------- -// Specializations for Vec2, Vec2, Vec3, Vec3 -//------------------------------------------------------------------- - -// Vec2 - -template <> short -Vec2::length () const; - -template <> const Vec2 & -Vec2::normalize (); - -template <> const Vec2 & -Vec2::normalizeExc () throw (Iex::MathExc); - -template <> const Vec2 & -Vec2::normalizeNonNull (); - -template <> Vec2 -Vec2::normalized () const; - -template <> Vec2 -Vec2::normalizedExc () const throw (Iex::MathExc); - -template <> Vec2 -Vec2::normalizedNonNull () const; - - -// Vec2 - -template <> int -Vec2::length () const; - -template <> const Vec2 & -Vec2::normalize (); - -template <> const Vec2 & -Vec2::normalizeExc () throw (Iex::MathExc); - -template <> const Vec2 & -Vec2::normalizeNonNull (); - -template <> Vec2 -Vec2::normalized () const; - -template <> Vec2 -Vec2::normalizedExc () const throw (Iex::MathExc); - -template <> Vec2 -Vec2::normalizedNonNull () const; - - -// Vec3 - -template <> short -Vec3::length () const; - -template <> const Vec3 & -Vec3::normalize (); - -template <> const Vec3 & -Vec3::normalizeExc () throw (Iex::MathExc); - -template <> const Vec3 & -Vec3::normalizeNonNull (); - -template <> Vec3 -Vec3::normalized () const; - -template <> Vec3 -Vec3::normalizedExc () const throw (Iex::MathExc); - -template <> Vec3 -Vec3::normalizedNonNull () const; - - -// Vec3 - -template <> int -Vec3::length () const; - -template <> const Vec3 & -Vec3::normalize (); - -template <> const Vec3 & -Vec3::normalizeExc () throw (Iex::MathExc); - -template <> const Vec3 & -Vec3::normalizeNonNull (); - -template <> Vec3 -Vec3::normalized () const; - -template <> Vec3 -Vec3::normalizedExc () const throw (Iex::MathExc); - -template <> Vec3 -Vec3::normalizedNonNull () const; - - -//------------------------ -// Implementation of Vec2: -//------------------------ - -template -inline T & -Vec2::operator [] (int i) -{ - return (&x)[i]; -} - -template -inline const T & -Vec2::operator [] (int i) const -{ - return (&x)[i]; -} - -template -inline -Vec2::Vec2 () -{ - // empty -} - -template -inline -Vec2::Vec2 (T a) -{ - x = y = a; -} - -template -inline -Vec2::Vec2 (T a, T b) -{ - x = a; - y = b; -} - -template -inline -Vec2::Vec2 (const Vec2 &v) -{ - x = v.x; - y = v.y; -} - -template -template -inline -Vec2::Vec2 (const Vec2 &v) -{ - x = T (v.x); - y = T (v.y); -} - -template -inline const Vec2 & -Vec2::operator = (const Vec2 &v) -{ - x = v.x; - y = v.y; - return *this; -} - -template -template -inline void -Vec2::setValue (S a, S b) -{ - x = T (a); - y = T (b); -} - -template -template -inline void -Vec2::setValue (const Vec2 &v) -{ - x = T (v.x); - y = T (v.y); -} - -template -template -inline void -Vec2::getValue (S &a, S &b) const -{ - a = S (x); - b = S (y); -} - -template -template -inline void -Vec2::getValue (Vec2 &v) const -{ - v.x = S (x); - v.y = S (y); -} - -template -inline T * -Vec2::getValue() -{ - return (T *) &x; -} - -template -inline const T * -Vec2::getValue() const -{ - return (const T *) &x; -} - -template -template -inline bool -Vec2::operator == (const Vec2 &v) const -{ - return x == v.x && y == v.y; -} - -template -template -inline bool -Vec2::operator != (const Vec2 &v) const -{ - return x != v.x || y != v.y; -} - -template -bool -Vec2::equalWithAbsError (const Vec2 &v, T e) const -{ - for (int i = 0; i < 2; i++) - if (!Imath::equalWithAbsError ((*this)[i], v[i], e)) - return false; - - return true; -} - -template -bool -Vec2::equalWithRelError (const Vec2 &v, T e) const -{ - for (int i = 0; i < 2; i++) - if (!Imath::equalWithRelError ((*this)[i], v[i], e)) - return false; - - return true; -} - -template -inline T -Vec2::dot (const Vec2 &v) const -{ - return x * v.x + y * v.y; -} - -template -inline T -Vec2::operator ^ (const Vec2 &v) const -{ - return dot (v); -} - -template -inline T -Vec2::cross (const Vec2 &v) const -{ - return x * v.y - y * v.x; - -} - -template -inline T -Vec2::operator % (const Vec2 &v) const -{ - return x * v.y - y * v.x; -} - -template -inline const Vec2 & -Vec2::operator += (const Vec2 &v) -{ - x += v.x; - y += v.y; - return *this; -} - -template -inline Vec2 -Vec2::operator + (const Vec2 &v) const -{ - return Vec2 (x + v.x, y + v.y); -} - -template -inline const Vec2 & -Vec2::operator -= (const Vec2 &v) -{ - x -= v.x; - y -= v.y; - return *this; -} - -template -inline Vec2 -Vec2::operator - (const Vec2 &v) const -{ - return Vec2 (x - v.x, y - v.y); -} - -template -inline Vec2 -Vec2::operator - () const -{ - return Vec2 (-x, -y); -} - -template -inline const Vec2 & -Vec2::negate () -{ - x = -x; - y = -y; - return *this; -} - -template -inline const Vec2 & -Vec2::operator *= (const Vec2 &v) -{ - x *= v.x; - y *= v.y; - return *this; -} - -template -inline const Vec2 & -Vec2::operator *= (T a) -{ - x *= a; - y *= a; - return *this; -} - -template -inline Vec2 -Vec2::operator * (const Vec2 &v) const -{ - return Vec2 (x * v.x, y * v.y); -} - -template -inline Vec2 -Vec2::operator * (T a) const -{ - return Vec2 (x * a, y * a); -} - -template -inline const Vec2 & -Vec2::operator /= (const Vec2 &v) -{ - x /= v.x; - y /= v.y; - return *this; -} - -template -inline const Vec2 & -Vec2::operator /= (T a) -{ - x /= a; - y /= a; - return *this; -} - -template -inline Vec2 -Vec2::operator / (const Vec2 &v) const -{ - return Vec2 (x / v.x, y / v.y); -} - -template -inline Vec2 -Vec2::operator / (T a) const -{ - return Vec2 (x / a, y / a); -} - -template -inline T -Vec2::length () const -{ - return Math::sqrt (dot (*this)); -} - -template -inline T -Vec2::length2 () const -{ - return dot (*this); -} - -template -const Vec2 & -Vec2::normalize () -{ - T l = length(); - - if (l != 0) - { - x /= l; - y /= l; - } - - return *this; -} - -template -const Vec2 & -Vec2::normalizeExc () throw (Iex::MathExc) -{ - T l = length(); - - if (l == 0) - throw NullVecExc ("Cannot normalize null vector."); - - x /= l; - y /= l; - return *this; -} - -template -inline -const Vec2 & -Vec2::normalizeNonNull () -{ - T l = length(); - x /= l; - y /= l; - return *this; -} - -template -Vec2 -Vec2::normalized () const -{ - T l = length(); - - if (l == 0) - return Vec2 (T (0)); - - return Vec2 (x / l, y / l); -} - -template -Vec2 -Vec2::normalizedExc () const throw (Iex::MathExc) -{ - T l = length(); - - if (l == 0) - throw NullVecExc ("Cannot normalize null vector."); - - return Vec2 (x / l, y / l); -} - -template -inline -Vec2 -Vec2::normalizedNonNull () const -{ - T l = length(); - return Vec2 (x / l, y / l); -} - - -//----------------------- -// Implementation of Vec3 -//----------------------- - -template -inline T & -Vec3::operator [] (int i) -{ - return (&x)[i]; -} - -template -inline const T & -Vec3::operator [] (int i) const -{ - return (&x)[i]; -} - -template -inline -Vec3::Vec3 () -{ - // empty -} - -template -inline -Vec3::Vec3 (T a) -{ - x = y = z = a; -} - -template -inline -Vec3::Vec3 (T a, T b, T c) -{ - x = a; - y = b; - z = c; -} - -template -inline -Vec3::Vec3 (const Vec3 &v) -{ - x = v.x; - y = v.y; - z = v.z; -} - -template -template -inline -Vec3::Vec3 (const Vec3 &v) -{ - x = T (v.x); - y = T (v.y); - z = T (v.z); -} - -template -inline const Vec3 & -Vec3::operator = (const Vec3 &v) -{ - x = v.x; - y = v.y; - z = v.z; - return *this; -} - -template -template -inline void -Vec3::setValue (S a, S b, S c) -{ - x = T (a); - y = T (b); - z = T (c); -} - -template -template -inline void -Vec3::setValue (const Vec3 &v) -{ - x = T (v.x); - y = T (v.y); - z = T (v.z); -} - -template -template -inline void -Vec3::getValue (S &a, S &b, S &c) const -{ - a = S (x); - b = S (y); - c = S (z); -} - -template -template -inline void -Vec3::getValue (Vec3 &v) const -{ - v.x = S (x); - v.y = S (y); - v.z = S (z); -} - -template -inline T * -Vec3::getValue() -{ - return (T *) &x; -} - -template -inline const T * -Vec3::getValue() const -{ - return (const T *) &x; -} - -template -template -inline bool -Vec3::operator == (const Vec3 &v) const -{ - return x == v.x && y == v.y && z == v.z; -} - -template -template -inline bool -Vec3::operator != (const Vec3 &v) const -{ - return x != v.x || y != v.y || z != v.z; -} - -template -bool -Vec3::equalWithAbsError (const Vec3 &v, T e) const -{ - for (int i = 0; i < 3; i++) - if (!Imath::equalWithAbsError ((*this)[i], v[i], e)) - return false; - - return true; -} - -template -bool -Vec3::equalWithRelError (const Vec3 &v, T e) const -{ - for (int i = 0; i < 3; i++) - if (!Imath::equalWithRelError ((*this)[i], v[i], e)) - return false; - - return true; -} - -template -inline T -Vec3::dot (const Vec3 &v) const -{ - return x * v.x + y * v.y + z * v.z; -} - -template -inline T -Vec3::operator ^ (const Vec3 &v) const -{ - return dot (v); -} - -template -inline Vec3 -Vec3::cross (const Vec3 &v) const -{ - return Vec3 (y * v.z - z * v.y, - z * v.x - x * v.z, - x * v.y - y * v.x); -} - -template -inline const Vec3 & -Vec3::operator %= (const Vec3 &v) -{ - T a = y * v.z - z * v.y; - T b = z * v.x - x * v.z; - T c = x * v.y - y * v.x; - x = a; - y = b; - z = c; - return *this; -} - -template -inline Vec3 -Vec3::operator % (const Vec3 &v) const -{ - return Vec3 (y * v.z - z * v.y, - z * v.x - x * v.z, - x * v.y - y * v.x); -} - -template -inline const Vec3 & -Vec3::operator += (const Vec3 &v) -{ - x += v.x; - y += v.y; - z += v.z; - return *this; -} - -template -inline Vec3 -Vec3::operator + (const Vec3 &v) const -{ - return Vec3 (x + v.x, y + v.y, z + v.z); -} - -template -inline const Vec3 & -Vec3::operator -= (const Vec3 &v) -{ - x -= v.x; - y -= v.y; - z -= v.z; - return *this; -} - -template -inline Vec3 -Vec3::operator - (const Vec3 &v) const -{ - return Vec3 (x - v.x, y - v.y, z - v.z); -} - -template -inline Vec3 -Vec3::operator - () const -{ - return Vec3 (-x, -y, -z); -} - -template -inline const Vec3 & -Vec3::negate () -{ - x = -x; - y = -y; - z = -z; - return *this; -} - -template -inline const Vec3 & -Vec3::operator *= (const Vec3 &v) -{ - x *= v.x; - y *= v.y; - z *= v.z; - return *this; -} - -template -inline const Vec3 & -Vec3::operator *= (T a) -{ - x *= a; - y *= a; - z *= a; - return *this; -} - -template -inline Vec3 -Vec3::operator * (const Vec3 &v) const -{ - return Vec3 (x * v.x, y * v.y, z * v.z); -} - -template -inline Vec3 -Vec3::operator * (T a) const -{ - return Vec3 (x * a, y * a, z * a); -} - -template -inline const Vec3 & -Vec3::operator /= (const Vec3 &v) -{ - x /= v.x; - y /= v.y; - z /= v.z; - return *this; -} - -template -inline const Vec3 & -Vec3::operator /= (T a) -{ - x /= a; - y /= a; - z /= a; - return *this; -} - -template -inline Vec3 -Vec3::operator / (const Vec3 &v) const -{ - return Vec3 (x / v.x, y / v.y, z / v.z); -} - -template -inline Vec3 -Vec3::operator / (T a) const -{ - return Vec3 (x / a, y / a, z / a); -} - - -template -inline T -Vec3::length () const -{ - return Math::sqrt (dot (*this)); -} - -template -inline T -Vec3::length2 () const -{ - return dot (*this); -} - -template -const Vec3 & -Vec3::normalize () -{ - T l = length(); - - if (l != 0) - { - x /= l; - y /= l; - z /= l; - } - - return *this; -} - -template -const Vec3 & -Vec3::normalizeExc () throw (Iex::MathExc) -{ - T l = length(); - - if (l == 0) - throw NullVecExc ("Cannot normalize null vector."); - - x /= l; - y /= l; - z /= l; - return *this; -} - -template -inline -const Vec3 & -Vec3::normalizeNonNull () -{ - T l = length(); - x /= l; - y /= l; - z /= l; - return *this; -} - -template -Vec3 -Vec3::normalized () const -{ - T l = length(); - - if (l == 0) - return Vec3 (T (0)); - - return Vec3 (x / l, y / l, z / l); -} - -template -Vec3 -Vec3::normalizedExc () const throw (Iex::MathExc) -{ - T l = length(); - - if (l == 0) - throw NullVecExc ("Cannot normalize null vector."); - - return Vec3 (x / l, y / l, z / l); -} - -template -inline -Vec3 -Vec3::normalizedNonNull () const -{ - T l = length(); - return Vec3 (x / l, y / l, z / l); -} - - -//----------------------------- -// Stream output implementation -//----------------------------- - -template -std::ostream & -operator << (std::ostream &s, const Vec2 &v) -{ - return s << '(' << v.x << ' ' << v.y << ')'; -} - -template -std::ostream & -operator << (std::ostream &s, const Vec3 &v) -{ - return s << '(' << v.x << ' ' << v.y << ' ' << v.z << ')'; -} - - -//----------------------------------------- -// Implementation of reverse multiplication -//----------------------------------------- - -template -inline Vec2 -operator * (T a, const Vec2 &v) -{ - return Vec2 (a * v.x, a * v.y); -} - -template -inline Vec3 -operator * (T a, const Vec3 &v) -{ - return Vec3 (a * v.x, a * v.y, a * v.z); -} - - -#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER -#pragma warning(default:4290) -#endif - -} // namespace Imath - -#endif diff --git a/3rdparty/include/OpenEXR/ImathVecAlgo.h b/3rdparty/include/OpenEXR/ImathVecAlgo.h deleted file mode 100644 index 9b726a74a..000000000 --- a/3rdparty/include/OpenEXR/ImathVecAlgo.h +++ /dev/null @@ -1,146 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHVECALGO_H -#define INCLUDED_IMATHVECALGO_H - -//------------------------------------------------------------------------- -// -// This file contains algorithms applied to or in conjunction -// with points (Imath::Vec2 and Imath::Vec3). -// The assumption made is that these functions are called much -// less often than the basic point functions or these functions -// require more support classes. -// -//------------------------------------------------------------------------- - -#include "ImathVec.h" -#include "ImathLimits.h" - -namespace Imath { - - -//-------------------------------------------------------------- -// Find the projection of vector t onto vector s (Vec2 and Vec3) -//-------------------------------------------------------------- - -template Vec project (const Vec &s, const Vec &t); - - -//---------------------------------------------- -// Find a vector which is perpendicular to s and -// in the same plane as s and t (Vec2 and Vec3) -//---------------------------------------------- - -template Vec orthogonal (const Vec &s, const Vec &t); - - -//----------------------------------------------- -// Find the direction of a ray s after reflection -// off a plane with normal t (Vec2 and Vec3) -//----------------------------------------------- - -template Vec reflect (const Vec &s, const Vec &t); - - -//---------------------------------------------------------------------- -// Find the vertex of triangle (v0, v1, v2), which is closest to point p -// (Vec2 and Vec3). -//---------------------------------------------------------------------- - -template Vec closestVertex (const Vec &v0, - const Vec &v1, - const Vec &v2, - const Vec &p); - -//--------------- -// Implementation -//--------------- - -template -Vec -project (const Vec &s, const Vec &t) -{ - Vec sNormalized = s.normalized(); - return sNormalized * (sNormalized ^ t); -} - -template -Vec -orthogonal (const Vec &s, const Vec &t) -{ - return t - project (s, t); -} - -template -Vec -reflect (const Vec &s, const Vec &t) -{ - return s - typename Vec::BaseType(2) * (s - project(t, s)); -} - -template -Vec -closestVertex(const Vec &v0, - const Vec &v1, - const Vec &v2, - const Vec &p) -{ - Vec nearest = v0; - typename Vec::BaseType neardot = (v0 - p).length2(); - typename Vec::BaseType tmp = (v1 - p).length2(); - - if (tmp < neardot) - { - neardot = tmp; - nearest = v1; - } - - tmp = (v2 - p).length2(); - - if (tmp < neardot) - { - neardot = tmp; - nearest = v2; - } - - return nearest; -} - - -} // namespace Imath - -#endif diff --git a/3rdparty/include/OpenEXR/ImfArray.h b/3rdparty/include/OpenEXR/ImfArray.h deleted file mode 100644 index 18eb66f39..000000000 --- a/3rdparty/include/OpenEXR/ImfArray.h +++ /dev/null @@ -1,261 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_ARRAY_H -#define INCLUDED_IMF_ARRAY_H - -//------------------------------------------------------------------------- -// -// class Array -// class Array2D -// -// "Arrays of T" whose sizes are not known at compile time. -// When an array goes out of scope, its elements are automatically -// deleted. -// -// Usage example: -// -// struct C -// { -// C () {std::cout << "C::C (" << this << ")\n";}; -// virtual ~C () {std::cout << "C::~C (" << this << ")\n";}; -// }; -// -// int -// main () -// { -// Array a(3); -// -// C &b = a[1]; -// const C &c = a[1]; -// C *d = a + 2; -// const C *e = a; -// -// return 0; -// } -// -//------------------------------------------------------------------------- - -namespace Imf { - - -template -class Array -{ - public: - - //----------------------------- - // Constructors and destructors - //----------------------------- - - Array () {_data = 0;} - Array (long size) {_data = new T[size];} - ~Array () {delete [] _data;} - - - //----------------------------- - // Access to the array elements - //----------------------------- - - operator T * () {return _data;} - operator const T * () const {return _data;} - - - //------------------------------------------------------ - // Resize and clear the array (the contents of the array - // are not preserved across the resize operation). - // - // resizeEraseUnsafe() is more memory efficient than - // resizeErase() because it deletes the old memory block - // before allocating a new one, but if allocating the - // new block throws an exception, resizeEraseUnsafe() - // leaves the array in an unusable state. - // - //------------------------------------------------------ - - void resizeErase (long size); - void resizeEraseUnsafe (long size); - - - private: - - Array (const Array &); // Copying and assignment - Array & operator = (const Array &); // are not implemented - - T * _data; -}; - - -template -class Array2D -{ - public: - - //----------------------------- - // Constructors and destructors - //----------------------------- - - Array2D (); // empty array, 0 by 0 elements - Array2D (long sizeX, long sizeY); // sizeX by sizeY elements - ~Array2D (); - - - //----------------------------- - // Access to the array elements - //----------------------------- - - T * operator [] (long x); - const T * operator [] (long x) const; - - - //------------------------------------------------------ - // Resize and clear the array (the contents of the array - // are not preserved across the resize operation). - // - // resizeEraseUnsafe() is more memory efficient than - // resizeErase() because it deletes the old memory block - // before allocating a new one, but if allocating the - // new block throws an exception, resizeEraseUnsafe() - // leaves the array in an unusable state. - // - //------------------------------------------------------ - - void resizeErase (long sizeX, long sizeY); - void resizeEraseUnsafe (long sizeX, long sizeY); - - - private: - - Array2D (const Array2D &); // Copying and assignment - Array2D & operator = (const Array2D &); // are not implemented - - long _sizeY; - T * _data; -}; - - -//--------------- -// Implementation -//--------------- - -template -inline void -Array::resizeErase (long size) -{ - T *tmp = new T[size]; - delete [] _data; - _data = tmp; -} - - -template -inline void -Array::resizeEraseUnsafe (long size) -{ - delete [] _data; - _data = 0; - _data = new T[size]; -} - - -template -inline -Array2D::Array2D (): - _sizeY (0), _data (0) -{ - // emtpy -} - - -template -inline -Array2D::Array2D (long sizeX, long sizeY): - _sizeY (sizeY), _data (new T[sizeX * sizeY]) -{ - // emtpy -} - - -template -inline -Array2D::~Array2D () -{ - delete [] _data; -} - - -template -inline T * -Array2D::operator [] (long x) -{ - return _data + x * _sizeY; -} - - -template -inline const T * -Array2D::operator [] (long x) const -{ - return _data + x * _sizeY; -} - - -template -inline void -Array2D::resizeErase (long sizeX, long sizeY) -{ - T *tmp = new T[sizeX * sizeY]; - delete [] _data; - _sizeY = sizeY; - _data = tmp; -} - - -template -inline void -Array2D::resizeEraseUnsafe (long sizeX, long sizeY) -{ - delete [] _data; - _data = 0; - _sizeY = 0; - _data = new T[sizeX * sizeY]; - _sizeY = sizeY; -} - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfAttribute.h b/3rdparty/include/OpenEXR/ImfAttribute.h deleted file mode 100644 index 45d62ff9a..000000000 --- a/3rdparty/include/OpenEXR/ImfAttribute.h +++ /dev/null @@ -1,422 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_ATTRIBUTE_H -#define INCLUDED_IMF_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class Attribute -// -//----------------------------------------------------------------------------- - -#include "IexBaseExc.h" -#include -#include - - -namespace Imf { - - -class Attribute -{ - public: - - //--------------------------- - // Constructor and destructor - //--------------------------- - - Attribute (); - virtual ~Attribute (); - - - //------------------------------- - // Get this attribute's type name - //------------------------------- - - virtual const char * typeName () const = 0; - - - //------------------------------ - // Make a copy of this attribute - //------------------------------ - - virtual Attribute * copy () const = 0; - - - //---------------------------------------- - // Type-specific attribute I/O and copying - //---------------------------------------- - - virtual void writeValueTo (OStream &os, - int version) const = 0; - - virtual void readValueFrom (IStream &is, - int size, - int version) = 0; - - virtual void copyValueFrom (const Attribute &other) = 0; - - - //------------------ - // Attribute factory - //------------------ - - static Attribute * newAttribute (const char typeName[]); - - - //----------------------------------------------------------- - // Test if a given attribute type has already been registered - //----------------------------------------------------------- - - static bool knownType (const char typeName[]); - - - protected: - - //-------------------------------------------------- - // Register an attribute type so that newAttribute() - // knows how to make objects of this type. - //-------------------------------------------------- - - static void registerAttributeType (const char typeName[], - Attribute *(*newAttribute)()); - - //------------------------------------------------------ - // Un-register an attribute type so that newAttribute() - // no longer knows how to make objects of this type (for - // debugging only). - //------------------------------------------------------ - - static void unRegisterAttributeType (const char typeName[]); -}; - - -//------------------------------------------------- -// Class template for attributes of a specific type -//------------------------------------------------- - -template -class TypedAttribute: public Attribute -{ - public: - - //---------------------------- - // Constructors and destructor - //------------_--------------- - - TypedAttribute (); - TypedAttribute (const T &value); - TypedAttribute (const TypedAttribute &other); - virtual ~TypedAttribute (); - - - //-------------------------------- - // Access to the attribute's value - //-------------------------------- - - T & value (); - const T & value () const; - - - //-------------------------------- - // Get this attribute's type name. - //-------------------------------- - - virtual const char * typeName () const; - - - //--------------------------------------------------------- - // Static version of typeName() - // This function must be specialized for each value type T. - //--------------------------------------------------------- - - static const char * staticTypeName (); - - - //--------------------- - // Make a new attribute - //--------------------- - - static Attribute * makeNewAttribute (); - - - //------------------------------ - // Make a copy of this attribute - //------------------------------ - - virtual Attribute * copy () const; - - - //----------------------------------------------------------------- - // Type-specific attribute I/O and copying. - // Depending on type T, these functions may have to be specialized. - //----------------------------------------------------------------- - - virtual void writeValueTo (OStream &os, - int version) const; - - virtual void readValueFrom (IStream &is, - int size, - int version); - - virtual void copyValueFrom (const Attribute &other); - - - //------------------------------------------------------------ - // Dynamic casts that throw exceptions instead of returning 0. - //------------------------------------------------------------ - - static TypedAttribute * cast (Attribute *attribute); - static const TypedAttribute * cast (const Attribute *attribute); - static TypedAttribute & cast (Attribute &attribute); - static const TypedAttribute & cast (const Attribute &attribute); - - - //--------------------------------------------------------------- - // Register this attribute type so that Attribute::newAttribute() - // knows how to make objects of this type. - // - // Note that this function is not thread-safe because it modifies - // a global variable in the IlmIlm library. A thread in a multi- - // threaded program may call registerAttributeType() only when no - // other thread is accessing any functions or classes in the - // IlmImf library. - // - //--------------------------------------------------------------- - - static void registerAttributeType (); - - - //----------------------------------------------------- - // Un-register this attribute type (for debugging only) - //----------------------------------------------------- - - static void unRegisterAttributeType (); - - - private: - - T _value; -}; - - -//------------------------------------ -// Implementation of TypedAttribute -//------------------------------------ - -template -TypedAttribute::TypedAttribute (): _value (T()) -{ - // empty -} - - -template -TypedAttribute::TypedAttribute (const T &value): _value (value) -{ - // empty -} - - -template -TypedAttribute::TypedAttribute (const TypedAttribute &other): - _value () -{ - copyValueFrom (other); -} - - -template -TypedAttribute::~TypedAttribute () -{ - // empty -} - - -template -inline T & -TypedAttribute::value () -{ - return _value; -} - - -template -inline const T & -TypedAttribute::value () const -{ - return _value; -} - - -template -const char * -TypedAttribute::typeName () const -{ - return staticTypeName(); -} - - -template -Attribute * -TypedAttribute::makeNewAttribute () -{ - return new TypedAttribute(); -} - - -template -Attribute * -TypedAttribute::copy () const -{ - Attribute * attribute = new TypedAttribute(); - attribute->copyValueFrom (*this); - return attribute; -} - - -template -void -TypedAttribute::writeValueTo (OStream &os, int version) const -{ - Xdr::write (os, _value); -} - - -template -void -TypedAttribute::readValueFrom (IStream &is, int size, int version) -{ - Xdr::read (is, _value); -} - - -template -void -TypedAttribute::copyValueFrom (const Attribute &other) -{ - _value = cast(other)._value; -} - - -template -TypedAttribute * -TypedAttribute::cast (Attribute *attribute) -{ - TypedAttribute *t = - dynamic_cast *> (attribute); - - if (t == 0) - throw Iex::TypeExc ("Unexpected attribute type."); - - return t; -} - - -template -const TypedAttribute * -TypedAttribute::cast (const Attribute *attribute) -{ - const TypedAttribute *t = - dynamic_cast *> (attribute); - - if (t == 0) - throw Iex::TypeExc ("Unexpected attribute type."); - - return t; -} - - -template -inline TypedAttribute & -TypedAttribute::cast (Attribute &attribute) -{ - return *cast (&attribute); -} - - -template -inline const TypedAttribute & -TypedAttribute::cast (const Attribute &attribute) -{ - return *cast (&attribute); -} - - -template -inline void -TypedAttribute::registerAttributeType () -{ - Attribute::registerAttributeType (staticTypeName(), makeNewAttribute); -} - - -template -inline void -TypedAttribute::unRegisterAttributeType () -{ - Attribute::unRegisterAttributeType (staticTypeName()); -} - - -} // namespace Imf - -#if defined(OPENEXR_DLL) && defined(_MSC_VER) - // Tell MS VC++ to disable "non dll-interface class used as base - // for dll-interface class" and "no suitable definition provided - // for explicit template" - #pragma warning (disable : 4275 4661) - - #if defined (ILMIMF_EXPORTS) - #define IMF_EXPIMP_TEMPLATE - #else - #define IMF_EXPIMP_TEMPLATE extern - #endif - - IMF_EXPIMP_TEMPLATE template class Imf::TypedAttribute; - IMF_EXPIMP_TEMPLATE template class Imf::TypedAttribute; - - #pragma warning(default : 4251) - #undef EXTERN_TEMPLATE -#endif - -// Metrowerks compiler wants the .cpp file inlined, too -#ifdef __MWERKS__ -#include -#endif - -#endif diff --git a/3rdparty/include/OpenEXR/ImfBoxAttribute.h b/3rdparty/include/OpenEXR/ImfBoxAttribute.h deleted file mode 100644 index fe3539106..000000000 --- a/3rdparty/include/OpenEXR/ImfBoxAttribute.h +++ /dev/null @@ -1,73 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_BOX_ATTRIBUTE_H -#define INCLUDED_IMF_BOX_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class Box2iAttribute -// class Box2fAttribute -// -//----------------------------------------------------------------------------- - -#include -#include "ImathBox.h" - - -namespace Imf { - - -typedef TypedAttribute Box2iAttribute; -template <> const char *Box2iAttribute::staticTypeName (); -template <> void Box2iAttribute::writeValueTo (OStream &, int) const; -template <> void Box2iAttribute::readValueFrom (IStream &, int, int); - - -typedef TypedAttribute Box2fAttribute; -template <> const char *Box2fAttribute::staticTypeName (); -template <> void Box2fAttribute::writeValueTo (OStream &, int) const; -template <> void Box2fAttribute::readValueFrom (IStream &, int, int); - - -} // namespace Imf - -// Metrowerks compiler wants the .cpp file inlined, too -#ifdef __MWERKS__ -#include -#endif - -#endif diff --git a/3rdparty/include/OpenEXR/ImfCRgbaFile.h b/3rdparty/include/OpenEXR/ImfCRgbaFile.h deleted file mode 100644 index d32f52e14..000000000 --- a/3rdparty/include/OpenEXR/ImfCRgbaFile.h +++ /dev/null @@ -1,465 +0,0 @@ -/* - -Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -Digital Ltd. LLC - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: -* Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. -* Neither the name of Industrial Light & Magic nor the names of -its contributors may be used to endorse or promote products derived -from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*/ - -#ifndef INCLUDED_IMF_C_RGBA_FILE_H -#define INCLUDED_IMF_C_RGBA_FILE_H - - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* -** Interpreting unsigned shorts as 16-bit floating point numbers -*/ - -typedef unsigned short ImfHalf; - -void ImfFloatToHalf (float f, - ImfHalf *h); - -void ImfFloatToHalfArray (int n, - const float f[/*n*/], - ImfHalf h[/*n*/]); - -float ImfHalfToFloat (ImfHalf h); - -void ImfHalfToFloatArray (int n, - const ImfHalf h[/*n*/], - float f[/*n*/]); - -/* -** RGBA pixel; memory layout must be the same as struct Imf::Rgba. -*/ - -struct ImfRgba -{ - ImfHalf r; - ImfHalf g; - ImfHalf b; - ImfHalf a; -}; - -typedef struct ImfRgba ImfRgba; - -/* -** Magic number; this must be the same as Imf::MAGIC -*/ - -#define IMF_MAGIC 20000630 - -/* -** Version number; this must be the same as Imf::EXR_VERSION -*/ - -#define IMF_VERSION_NUMBER 2 - -/* -** Line order; values must the the same as in Imf::LineOrder. -*/ - -#define IMF_INCREASING_Y 0 -#define IMF_DECREASING_Y 1 -#define IMF_RAMDOM_Y 2 - - -/* -** Compression types; values must be the same as in Imf::Compression. -*/ - -#define IMF_NO_COMPRESSION 0 -#define IMF_RLE_COMPRESSION 1 -#define IMF_ZIPS_COMPRESSION 2 -#define IMF_ZIP_COMPRESSION 3 -#define IMF_PIZ_COMPRESSION 4 -#define IMF_PXR24_COMPRESSION 5 - - -/* -** Channels; values must be the same as in Imf::RgbaChannels. -*/ - -#define IMF_WRITE_R 0x01 -#define IMF_WRITE_G 0x02 -#define IMF_WRITE_B 0x04 -#define IMF_WRITE_A 0x08 -#define IMF_WRITE_Y 0x10 -#define IMF_WRITE_C 0x20 -#define IMF_WRITE_RGB 0x07 -#define IMF_WRITE_RGBA 0x0f -#define IMF_WRITE_YC 0x30 -#define IMF_WRITE_YA 0x18 -#define IMF_WRITE_YCA 0x38 - - -/* -** Level modes; values must be the same as in Imf::LevelMode -*/ - -#define IMF_ONE_LEVEL 0 -#define IMF_MIPMAP_LEVELS 1 -#define IMF_RIPMAP_LEVELS 2 - - -/* -** Level rounding modes; values must be the same as in Imf::LevelRoundingMode -*/ - -#define IMF_ROUND_DOWN 0 -#define IMF_ROUND_UP 1 - - -/* -** RGBA file header -*/ - -struct ImfHeader; -typedef struct ImfHeader ImfHeader; - -ImfHeader * ImfNewHeader (void); - -void ImfDeleteHeader (ImfHeader *hdr); - -ImfHeader * ImfCopyHeader (const ImfHeader *hdr); - -void ImfHeaderSetDisplayWindow (ImfHeader *hdr, - int xMin, int yMin, - int xMax, int yMax); - -void ImfHeaderDisplayWindow (const ImfHeader *hdr, - int *xMin, int *yMin, - int *xMax, int *yMax); - -void ImfHeaderSetDataWindow (ImfHeader *hdr, - int xMin, int yMin, - int xMax, int yMax); - -void ImfHeaderDataWindow (const ImfHeader *hdr, - int *xMin, int *yMin, - int *xMax, int *yMax); - -void ImfHeaderSetPixelAspectRatio (ImfHeader *hdr, - float pixelAspectRatio); - -float ImfHeaderPixelAspectRatio (const ImfHeader *hdr); - -void ImfHeaderSetScreenWindowCenter (ImfHeader *hdr, - float x, float y); - -void ImfHeaderScreenWindowCenter (const ImfHeader *hdr, - float *x, float *y); - -void ImfHeaderSetScreenWindowWidth (ImfHeader *hdr, - float width); - -float ImfHeaderScreenWindowWidth (const ImfHeader *hdr); - -void ImfHeaderSetLineOrder (ImfHeader *hdr, - int lineOrder); - -int ImfHeaderLineOrder (const ImfHeader *hdr); - -void ImfHeaderSetCompression (ImfHeader *hdr, - int compression); - -int ImfHeaderCompression (const ImfHeader *hdr); - -int ImfHeaderSetIntAttribute (ImfHeader *hdr, - const char name[], - int value); - -int ImfHeaderIntAttribute (const ImfHeader *hdr, - const char name[], - int *value); - -int ImfHeaderSetFloatAttribute (ImfHeader *hdr, - const char name[], - float value); - -int ImfHeaderSetDoubleAttribute (ImfHeader *hdr, - const char name[], - double value); - -int ImfHeaderFloatAttribute (const ImfHeader *hdr, - const char name[], - float *value); - -int ImfHeaderDoubleAttribute (const ImfHeader *hdr, - const char name[], - double *value); - -int ImfHeaderSetStringAttribute (ImfHeader *hdr, - const char name[], - const char value[]); - -int ImfHeaderStringAttribute (const ImfHeader *hdr, - const char name[], - const char **value); - -int ImfHeaderSetBox2iAttribute (ImfHeader *hdr, - const char name[], - int xMin, int yMin, - int xMax, int yMax); - -int ImfHeaderBox2iAttribute (const ImfHeader *hdr, - const char name[], - int *xMin, int *yMin, - int *xMax, int *yMax); - -int ImfHeaderSetBox2fAttribute (ImfHeader *hdr, - const char name[], - float xMin, float yMin, - float xMax, float yMax); - -int ImfHeaderBox2fAttribute (const ImfHeader *hdr, - const char name[], - float *xMin, float *yMin, - float *xMax, float *yMax); - -int ImfHeaderSetV2iAttribute (ImfHeader *hdr, - const char name[], - int x, int y); - -int ImfHeaderV2iAttribute (const ImfHeader *hdr, - const char name[], - int *x, int *y); - -int ImfHeaderSetV2fAttribute (ImfHeader *hdr, - const char name[], - float x, float y); - -int ImfHeaderV2fAttribute (const ImfHeader *hdr, - const char name[], - float *x, float *y); - -int ImfHeaderSetV3iAttribute (ImfHeader *hdr, - const char name[], - int x, int y, int z); - -int ImfHeaderV3iAttribute (const ImfHeader *hdr, - const char name[], - int *x, int *y, int *z); - -int ImfHeaderSetV3fAttribute (ImfHeader *hdr, - const char name[], - float x, float y, float z); - -int ImfHeaderV3fAttribute (const ImfHeader *hdr, - const char name[], - float *x, float *y, float *z); - -int ImfHeaderSetM33fAttribute (ImfHeader *hdr, - const char name[], - const float m[3][3]); - -int ImfHeaderM33fAttribute (const ImfHeader *hdr, - const char name[], - float m[3][3]); - -int ImfHeaderSetM44fAttribute (ImfHeader *hdr, - const char name[], - const float m[4][4]); - -int ImfHeaderM44fAttribute (const ImfHeader *hdr, - const char name[], - float m[4][4]); - -/* -** RGBA output file -*/ - -struct ImfOutputFile; -typedef struct ImfOutputFile ImfOutputFile; - -ImfOutputFile * ImfOpenOutputFile (const char name[], - const ImfHeader *hdr, - int channels); - -int ImfCloseOutputFile (ImfOutputFile *out); - -int ImfOutputSetFrameBuffer (ImfOutputFile *out, - const ImfRgba *base, - size_t xStride, - size_t yStride); - -int ImfOutputWritePixels (ImfOutputFile *out, - int numScanLines); - -int ImfOutputCurrentScanLine (const ImfOutputFile *out); - -const ImfHeader * ImfOutputHeader (const ImfOutputFile *out); - -int ImfOutputChannels (const ImfOutputFile *out); - - -/* -** Tiled RGBA output file -*/ - -struct ImfTiledOutputFile; -typedef struct ImfTiledOutputFile ImfTiledOutputFile; - -ImfTiledOutputFile * ImfOpenTiledOutputFile (const char name[], - const ImfHeader *hdr, - int channels, - int xSize, int ySize, - int mode, int rmode); - -int ImfCloseTiledOutputFile (ImfTiledOutputFile *out); - -int ImfTiledOutputSetFrameBuffer (ImfTiledOutputFile *out, - const ImfRgba *base, - size_t xStride, - size_t yStride); - -int ImfTiledOutputWriteTile (ImfTiledOutputFile *out, - int dx, int dy, - int lx, int ly); - -int ImfTiledOutputWriteTiles (ImfTiledOutputFile *out, - int dxMin, int dxMax, - int dyMin, int dyMax, - int lx, int ly); - -const ImfHeader * ImfTiledOutputHeader (const ImfTiledOutputFile *out); - -int ImfTiledOutputChannels (const ImfTiledOutputFile *out); - -int ImfTiledOutputTileXSize (const ImfTiledOutputFile *out); - -int ImfTiledOutputTileYSize (const ImfTiledOutputFile *out); - -int ImfTiledOutputLevelMode (const ImfTiledOutputFile *out); -int ImfTiledOutputLevelRoundingMode - (const ImfTiledOutputFile *out); - - -/* -** RGBA input file -*/ - -struct ImfInputFile; -typedef struct ImfInputFile ImfInputFile; - -ImfInputFile * ImfOpenInputFile (const char name[]); - -int ImfCloseInputFile (ImfInputFile *in); - -int ImfInputSetFrameBuffer (ImfInputFile *in, - ImfRgba *base, - size_t xStride, - size_t yStride); - -int ImfInputReadPixels (ImfInputFile *in, - int scanLine1, - int scanLine2); - -const ImfHeader * ImfInputHeader (const ImfInputFile *in); - -int ImfInputChannels (const ImfInputFile *in); - -const char * ImfInputFileName (const ImfInputFile *in); - - -/* -** Tiled RGBA input file -*/ - -struct ImfTiledInputFile; -typedef struct ImfTiledInputFile ImfTiledInputFile; - -ImfTiledInputFile * ImfOpenTiledInputFile (const char name[]); - -int ImfCloseTiledInputFile (ImfTiledInputFile *in); - -int ImfTiledInputSetFrameBuffer (ImfTiledInputFile *in, - ImfRgba *base, - size_t xStride, - size_t yStride); - -int ImfTiledInputReadTile (ImfTiledInputFile *in, - int dx, int dy, - int lx, int ly); - -int ImfTiledInputReadTiles (ImfTiledInputFile *in, - int dxMin, int dxMax, - int dyMin, int dyMax, - int lx, int ly); - -const ImfHeader * ImfTiledInputHeader (const ImfTiledInputFile *in); - -int ImfTiledInputChannels (const ImfTiledInputFile *in); - -const char * ImfTiledInputFileName (const ImfTiledInputFile *in); - -int ImfTiledInputTileXSize (const ImfTiledInputFile *in); - -int ImfTiledInputTileYSize (const ImfTiledInputFile *in); - -int ImfTiledInputLevelMode (const ImfTiledInputFile *in); - -int ImfTiledInputLevelRoundingMode - (const ImfTiledInputFile *in); - -/* -** Lookup tables -*/ - -struct ImfLut; -typedef struct ImfLut ImfLut; - -ImfLut * ImfNewRound12logLut (int channels); - -ImfLut * ImfNewRoundNBitLut (unsigned int n, int channels); - -void ImfDeleteLut (ImfLut *lut); - -void ImfApplyLut (ImfLut *lut, - ImfRgba *data, - int nData, - int stride); -/* -** Most recent error message -*/ - -const char * ImfErrorMessage (void); - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif diff --git a/3rdparty/include/OpenEXR/ImfChannelList.h b/3rdparty/include/OpenEXR/ImfChannelList.h deleted file mode 100644 index ddbe9d613..000000000 --- a/3rdparty/include/OpenEXR/ImfChannelList.h +++ /dev/null @@ -1,392 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_CHANNEL_LIST_H -#define INCLUDED_IMF_CHANNEL_LIST_H - -//----------------------------------------------------------------------------- -// -// class Channel -// class ChannelList -// -//----------------------------------------------------------------------------- - -#include -#include -#include -#include -#include - - -namespace Imf { - - -struct Channel -{ - //------------------------------ - // Data type; see ImfPixelType.h - //------------------------------ - - PixelType type; - - - //-------------------------------------------- - // Subsampling: pixel (x, y) is present in the - // channel only if - // - // x % xSampling == 0 && y % ySampling == 0 - // - //-------------------------------------------- - - int xSampling; - int ySampling; - - - //------------ - // Constructor - //------------ - - Channel (PixelType type = HALF, - int xSampling = 1, - int ySampling = 1); - - - //------------ - // Operator == - //------------ - - bool operator == (const Channel &other) const; -}; - - -class ChannelList -{ - public: - - //-------------- - // Add a channel - //-------------- - - void insert (const char name[], - const Channel &channel); - - //------------------------------------------------------------------ - // Access to existing channels: - // - // [n] Returns a reference to the channel with name n. - // If no channel with name n exists, an Iex::ArgExc - // is thrown. - // - // findChannel(n) Returns a pointer to the channel with name n, - // or 0 if no channel with name n exists. - // - //------------------------------------------------------------------ - - Channel & operator [] (const char name[]); - const Channel & operator [] (const char name[]) const; - - Channel * findChannel (const char name[]); - const Channel * findChannel (const char name[]) const; - - - //------------------------------------------- - // Iterator-style access to existing channels - //------------------------------------------- - - typedef std::map ChannelMap; - - class Iterator; - class ConstIterator; - - Iterator begin (); - ConstIterator begin () const; - Iterator end (); - ConstIterator end () const; - Iterator find (const char name[]); - ConstIterator find (const char name[]) const; - - - //----------------------------------------------------------------- - // Support for image layers: - // - // In an image file with many channels it is sometimes useful to - // group the channels into "layers", that is, into sets of channels - // that logically belong together. Grouping channels into layers - // is done using a naming convention: channel C in layer L is - // called "L.C". - // - // For example, a computer graphic image may contain separate - // R, G and B channels for light that originated at each of - // several different virtual light sources. The channels in - // this image might be called "light1.R", "light1.G", "light1.B", - // "light2.R", "light2.G", "light2.B", etc. - // - // Note that this naming convention allows layers to be nested; - // for example, "light1.specular.R" identifies the "R" channel - // in the "specular" sub-layer of layer "light1". - // - // Channel names that don't contain a "." or that contain a - // "." only at the beginning or at the end are not considered - // to be part of any layer. - // - // layers(lns) sorts the channels in this ChannelList - // into layers and stores the names of - // all layers, sorted alphabetically, - // into string set lns. - // - // channelsInLayer(ln,f,l) stores a pair of iterators in f and l - // such that the loop - // - // for (ConstIterator i = f; i != l; ++i) - // ... - // - // iterates over all channels in layer ln. - // channelsInLayer (ln, l, p) calls - // channelsWithPrefix (ln + ".", l, p). - // - //----------------------------------------------------------------- - - void layers (std::set &layerNames) const; - - void channelsInLayer (const std::string &layerName, - Iterator &first, - Iterator &last); - - void channelsInLayer (const std::string &layerName, - ConstIterator &first, - ConstIterator &last) const; - - - //------------------------------------------------------------------- - // Find all channels whose name begins with a given prefix: - // - // channelsWithPrefix(p,f,l) stores a pair of iterators in f and l - // such that the following loop iterates over all channels whose name - // begins with string p: - // - // for (ConstIterator i = f; i != l; ++i) - // ... - // - //------------------------------------------------------------------- - - void channelsWithPrefix (const char prefix[], - Iterator &first, - Iterator &last); - - void channelsWithPrefix (const char prefix[], - ConstIterator &first, - ConstIterator &last) const; - - //------------ - // Operator == - //------------ - - bool operator == (const ChannelList &other) const; - - private: - - ChannelMap _map; -}; - - -//---------- -// Iterators -//---------- - -class ChannelList::Iterator -{ - public: - - Iterator (); - Iterator (const ChannelList::ChannelMap::iterator &i); - - Iterator & operator ++ (); - Iterator operator ++ (int); - - const char * name () const; - Channel & channel () const; - - private: - - friend class ChannelList::ConstIterator; - - ChannelList::ChannelMap::iterator _i; -}; - - -class ChannelList::ConstIterator -{ - public: - - ConstIterator (); - ConstIterator (const ChannelList::ChannelMap::const_iterator &i); - ConstIterator (const ChannelList::Iterator &other); - - ConstIterator & operator ++ (); - ConstIterator operator ++ (int); - - const char * name () const; - const Channel & channel () const; - - private: - - friend bool operator == (const ConstIterator &, const ConstIterator &); - friend bool operator != (const ConstIterator &, const ConstIterator &); - - ChannelList::ChannelMap::const_iterator _i; -}; - - -//----------------- -// Inline Functions -//----------------- - -inline -ChannelList::Iterator::Iterator (): _i() -{ - // empty -} - - -inline -ChannelList::Iterator::Iterator (const ChannelList::ChannelMap::iterator &i): - _i (i) -{ - // empty -} - - -inline ChannelList::Iterator & -ChannelList::Iterator::operator ++ () -{ - ++_i; - return *this; -} - - -inline ChannelList::Iterator -ChannelList::Iterator::operator ++ (int) -{ - Iterator tmp = *this; - ++_i; - return tmp; -} - - -inline const char * -ChannelList::Iterator::name () const -{ - return *_i->first; -} - - -inline Channel & -ChannelList::Iterator::channel () const -{ - return _i->second; -} - - -inline -ChannelList::ConstIterator::ConstIterator (): _i() -{ - // empty -} - -inline -ChannelList::ConstIterator::ConstIterator - (const ChannelList::ChannelMap::const_iterator &i): _i (i) -{ - // empty -} - - -inline -ChannelList::ConstIterator::ConstIterator (const ChannelList::Iterator &other): - _i (other._i) -{ - // empty -} - -inline ChannelList::ConstIterator & -ChannelList::ConstIterator::operator ++ () -{ - ++_i; - return *this; -} - - -inline ChannelList::ConstIterator -ChannelList::ConstIterator::operator ++ (int) -{ - ConstIterator tmp = *this; - ++_i; - return tmp; -} - - -inline const char * -ChannelList::ConstIterator::name () const -{ - return *_i->first; -} - -inline const Channel & -ChannelList::ConstIterator::channel () const -{ - return _i->second; -} - - -inline bool -operator == (const ChannelList::ConstIterator &x, - const ChannelList::ConstIterator &y) -{ - return x._i == y._i; -} - - -inline bool -operator != (const ChannelList::ConstIterator &x, - const ChannelList::ConstIterator &y) -{ - return !(x == y); -} - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfChannelListAttribute.h b/3rdparty/include/OpenEXR/ImfChannelListAttribute.h deleted file mode 100644 index 050ecf921..000000000 --- a/3rdparty/include/OpenEXR/ImfChannelListAttribute.h +++ /dev/null @@ -1,67 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_CHANNEL_LIST_ATTRIBUTE_H -#define INCLUDED_IMF_CHANNEL_LIST_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class ChannelListAttribute -// -//----------------------------------------------------------------------------- - -#include -#include - - -namespace Imf { - - -typedef TypedAttribute ChannelListAttribute; -template <> const char *ChannelListAttribute::staticTypeName (); -template <> void ChannelListAttribute::writeValueTo (OStream &, int) const; -template <> void ChannelListAttribute::readValueFrom (IStream &, int, int); - - -} // namespace Imf - -// Metrowerks compiler wants the .cpp file inlined, too -#ifdef __MWERKS__ -#include -#endif - -#endif - diff --git a/3rdparty/include/OpenEXR/ImfChromaticities.h b/3rdparty/include/OpenEXR/ImfChromaticities.h deleted file mode 100644 index 5132ce9a8..000000000 --- a/3rdparty/include/OpenEXR/ImfChromaticities.h +++ /dev/null @@ -1,127 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2003, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_CHROMATICITIES_H -#define INCLUDED_IMF_CHROMATICITIES_H - -//----------------------------------------------------------------------------- -// -// CIE (x,y) chromaticities, and conversions between -// RGB tiples and CIE XYZ tristimulus values. -// -//----------------------------------------------------------------------------- - -#include "ImathVec.h" -#include "ImathMatrix.h" - -namespace Imf { - - -struct Chromaticities -{ - Imath::V2f red; - Imath::V2f green; - Imath::V2f blue; - Imath::V2f white; - - Chromaticities (const Imath::V2f &red = Imath::V2f (0.6400f, 0.3300f), - const Imath::V2f &green = Imath::V2f (0.3000f, 0.6000f), - const Imath::V2f &blue = Imath::V2f (0.1500f, 0.0600f), - const Imath::V2f &white = Imath::V2f (0.3127f, 0.3290f)); -}; - - -// -// Conversions between RGB and CIE XYZ -// -// RGB to XYZ: -// -// Given a set of chromaticities, c, and the luminance, Y, of the RGB -// triple (1,1,1), or "white", RGBtoXYZ(c,Y) computes a matrix, M, so -// that multiplying an RGB value, v, with M produces an equivalent -// XYZ value, w. (w == v * M) -// -// If we define that -// -// (Xr, Yr, Zr) == (1, 0, 0) * M -// (Xg, Yg, Zg) == (0, 1, 0) * M -// (Xb, Yb, Zb) == (0, 0, 1) * M -// (Xw, Yw, Zw) == (1, 1, 1) * M, -// -// then the following statements are true: -// -// Xr / (Xr + Yr + Zr) == c.red.x -// Yr / (Xr + Yr + Zr) == c.red.y -// -// Xg / (Xg + Yg + Zg) == c.red.x -// Yg / (Xg + Yg + Zg) == c.red.y -// -// Xb / (Xb + Yb + Zb) == c.red.x -// Yb / (Xb + Yb + Zb) == c.red.y -// -// Xw / (Xw + Yw + Zw) == c.red.x -// Yw / (Xw + Yw + Zw) == c.red.y -// -// Yw == Y. -// -// XYZ to RGB: -// -// YYZtoRGB(c,Y) returns RGBtoXYZ(c,Y).inverse(). -// -// Warning: -// -// It would seem that RGBtoXYZ() and XYZtoRGB() are all you need -// to convert RGB values with one set of primary and white point -// chromaticities into perceptually equivalent RGB values with -// different primary and white point chromaticities: -// -// M44f M = RGBtoXYZ (chromaticities1, Y1) * -// XYZtoRGB (chromaticities2, Y2); -// -// However, this simple conversion does not account for white point -// adaptation, and produces undesirable results. The proper thing -// to do is to perform a Bradford or a von Kries transform, which -// moves the white point of the original color space to the white -// point of the destination color space, dragging other colors with -// it in a sensible fashion. -// - -Imath::M44f RGBtoXYZ (const Chromaticities chroma, float Y); -Imath::M44f XYZtoRGB (const Chromaticities chroma, float Y); - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfChromaticitiesAttribute.h b/3rdparty/include/OpenEXR/ImfChromaticitiesAttribute.h deleted file mode 100644 index 08357fa64..000000000 --- a/3rdparty/include/OpenEXR/ImfChromaticitiesAttribute.h +++ /dev/null @@ -1,72 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2003, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_CHROMATICITIES_ATTRIBUTE_H -#define INCLUDED_IMF_CHROMATICITIES_ATTRIBUTE_H - - -//----------------------------------------------------------------------------- -// -// class ChromaticitiesAttribute -// -//----------------------------------------------------------------------------- - -#include -#include - - -namespace Imf { - - -typedef TypedAttribute ChromaticitiesAttribute; - -template <> -const char *ChromaticitiesAttribute::staticTypeName (); - -template <> -void ChromaticitiesAttribute::writeValueTo (OStream &, int) const; - -template <> -void ChromaticitiesAttribute::readValueFrom (IStream &, int, int); - - -} // namespace Imf - -// Metrowerks compiler wants the .cpp file inlined, too -#ifdef __MWERKS__ -#include -#endif - -#endif diff --git a/3rdparty/include/OpenEXR/ImfCompression.h b/3rdparty/include/OpenEXR/ImfCompression.h deleted file mode 100644 index f81e34d31..000000000 --- a/3rdparty/include/OpenEXR/ImfCompression.h +++ /dev/null @@ -1,64 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_COMPRESSION_H -#define INCLUDED_IMF_COMPRESSION_H - -//----------------------------------------------------------------------------- -// -// enum Compression -// -//----------------------------------------------------------------------------- - -namespace Imf { - - -enum Compression -{ - NO_COMPRESSION = 0, // no compression - RLE_COMPRESSION = 1, // run length encoding - ZIPS_COMPRESSION = 2, // zlib compression, one scan line at a time - ZIP_COMPRESSION = 3, // zlib compression, in blocks of 16 scan lines - PIZ_COMPRESSION = 4, // piz-based wavelet compression - PXR24_COMPRESSION = 5, // lossy 24-bit float compression - - NUM_COMPRESSION_METHODS // number of different compression methods -}; - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfCompressionAttribute.h b/3rdparty/include/OpenEXR/ImfCompressionAttribute.h deleted file mode 100644 index 268c26be5..000000000 --- a/3rdparty/include/OpenEXR/ImfCompressionAttribute.h +++ /dev/null @@ -1,66 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_COMPRESSION_ATTRIBUTE_H -#define INCLUDED_IMF_COMPRESSION_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class CompressionAttribute -// -//----------------------------------------------------------------------------- - -#include -#include - - -namespace Imf { - - -typedef TypedAttribute CompressionAttribute; -template <> const char *CompressionAttribute::staticTypeName (); -template <> void CompressionAttribute::writeValueTo (OStream &, int) const; -template <> void CompressionAttribute::readValueFrom (IStream &, int, int); - - -} // namespace Imf - -// Metrowerks compiler wants the .cpp file inlined, too -#ifdef __MWERKS__ -#include -#endif - -#endif diff --git a/3rdparty/include/OpenEXR/ImfConvert.h b/3rdparty/include/OpenEXR/ImfConvert.h deleted file mode 100644 index fc2c03725..000000000 --- a/3rdparty/include/OpenEXR/ImfConvert.h +++ /dev/null @@ -1,104 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_CONVERT_H -#define INCLUDED_IMF_CONVERT_H - -//----------------------------------------------------------------------------- -// -// Routines for converting between pixel data types, -// with well-defined behavior for exceptional cases, -// without depending on how hardware and operating -// system handle integer overflows and floating-point -// exceptions. -// -//----------------------------------------------------------------------------- - -#include "half.h" - - -namespace Imf { - -//--------------------------------------------------------- -// Conversion from half or float to unsigned int: -// -// input result -// --------------------------------------------------- -// -// finite, >= 0 input, cast to unsigned int -// (rounds towards zero) -// -// finite, < 0 0 -// -// NaN 0 -// -// +infinity UINT_MAX -// -// -infinity 0 -// -//--------------------------------------------------------- - -unsigned int halfToUint (half h); -unsigned int floatToUint (float f); - - -//--------------------------------------------------------- -// Conversion from unsigned int or float to half: -// -// input result -// --------------------------------------------------- -// -// finite, closest possible half -// magnitude <= HALF_MAX -// -// finite, > HALF_MAX +infinity -// -// finite, < -HALF_MAX -infinity -// -// NaN NaN -// -// +infinity +infinity -// -// -infinity -infinity -// -//--------------------------------------------------------- - -half uintToHalf (unsigned int ui); -half floatToHalf (float f); - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfDoubleAttribute.h b/3rdparty/include/OpenEXR/ImfDoubleAttribute.h deleted file mode 100644 index bafd1ef2b..000000000 --- a/3rdparty/include/OpenEXR/ImfDoubleAttribute.h +++ /dev/null @@ -1,63 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_DOUBLE_ATTRIBUTE_H -#define INCLUDED_IMF_DOUBLE_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class DoubleAttribute -// -//----------------------------------------------------------------------------- - -#include - - -namespace Imf { - - -typedef TypedAttribute DoubleAttribute; -template <> const char *DoubleAttribute::staticTypeName (); - - -} // namespace Imf - -// Metrowerks compiler wants the .cpp file inlined, too -#ifdef __MWERKS__ -#include -#endif - -#endif diff --git a/3rdparty/include/OpenEXR/ImfEnvmap.h b/3rdparty/include/OpenEXR/ImfEnvmap.h deleted file mode 100644 index 8c738a76f..000000000 --- a/3rdparty/include/OpenEXR/ImfEnvmap.h +++ /dev/null @@ -1,322 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_ENVMAP_H -#define INCLUDED_IMF_ENVMAP_H - -//----------------------------------------------------------------------------- -// -// Environment maps -// -// Environment maps define a mapping from 3D directions to 2D -// pixel space locations. Environment maps are typically used -// in 3D rendering, for effects such as quickly approximating -// how shiny surfaces reflect their environment. -// -// Environment maps can be stored in scanline-based or in tiled -// OpenEXR files. The fact that an image is an environment map -// is indicated by the presence of an EnvmapAttribute whose name -// is "envmap". (Convenience functions to access this attribute -// are defined in header file ImfStandardAttributes.h.) -// The attribute's value defines the mapping from 3D directions -// to 2D pixel space locations. -// -// This header file defines the set of possible EnvmapAttribute -// values. -// -// For each possible EnvmapAttribute value, this header file also -// defines a set of convienience functions to convert between 3D -// directions and 2D pixel locations. -// -// Most of the convenience functions defined below require a -// dataWindow parameter. For scanline-based images, and for -// tiled images with level mode ONE_LEVEL, the dataWindow -// parameter should be set to the image's data window, as -// defined in the image header. For tiled images with level -// mode MIPMAP_LEVELS or RIPMAP_LEVELS, the data window of the -// image level that is being accessed should be used instead. -// (See the dataWindowForLevel() methods in ImfTiledInputFile.h -// and ImfTiledOutputFile.h.) -// -//----------------------------------------------------------------------------- - -#include "ImathBox.h" - -namespace Imf { - -//-------------------------------- -// Supported environment map types -//-------------------------------- - -enum Envmap -{ - ENVMAP_LATLONG = 0, // Latitude-longitude environment map - ENVMAP_CUBE = 1, // Cube map - - NUM_ENVMAPTYPES // Number of different environment map types -}; - - -//------------------------------------------------------------------------- -// Latitude-Longitude Map: -// -// The environment is projected onto the image using polar coordinates -// (latitude and longitude). A pixel's x coordinate corresponds to -// its longitude, and the y coordinate corresponds to its latitude. -// Pixel (dataWindow.min.x, dataWindow.min.y) has latitude +pi/2 and -// longitude +pi; pixel (dataWindow.max.x, dataWindow.max.y) has -// latitude -pi/2 and longitude -pi. -// -// In 3D space, latitudes -pi/2 and +pi/2 correspond to the negative and -// positive y direction. Latitude 0, longitude 0 points into positive -// z direction; and latitude 0, longitude pi/2 points into positive x -// direction. -// -// The size of the data window should be 2*N by N pixels (width by height), -// where N can be any integer greater than 0. -//------------------------------------------------------------------------- - -namespace LatLongMap -{ - //---------------------------------------------------- - // Convert a 3D direction to a 2D vector whose x and y - // components represent the corresponding latitude - // and longitude. - //---------------------------------------------------- - - Imath::V2f latLong (const Imath::V3f &direction); - - - //-------------------------------------------------------- - // Convert the position of a pixel to a 2D vector whose - // x and y components represent the corresponding latitude - // and longitude. - //-------------------------------------------------------- - - Imath::V2f latLong (const Imath::Box2i &dataWindow, - const Imath::V2f &pixelPosition); - - - //------------------------------------------------------------- - // Convert a 2D vector, whose x and y components represent - // longitude and latitude, into a corresponding pixel position. - //------------------------------------------------------------- - - Imath::V2f pixelPosition (const Imath::Box2i &dataWindow, - const Imath::V2f &latLong); - - - //----------------------------------------------------- - // Convert a 3D direction vector into a corresponding - // pixel position. pixelPosition(dw,dir) is equivalent - // to pixelPosition(dw,latLong(dw,dir)). - //----------------------------------------------------- - - Imath::V2f pixelPosition (const Imath::Box2i &dataWindow, - const Imath::V3f &direction); - - - //-------------------------------------------------------- - // Convert the position of a pixel in a latitude-longitude - // map into a corresponding 3D direction. - //-------------------------------------------------------- - - Imath::V3f direction (const Imath::Box2i &dataWindow, - const Imath::V2f &pixelPosition); -} - - -//-------------------------------------------------------------- -// Cube Map: -// -// The environment is projected onto the six faces of an -// axis-aligned cube. The cube's faces are then arranged -// in a 2D image as shown below. -// -// 2-----------3 -// / /| -// / / | Y -// / / | | -// 6-----------7 | | -// | | | | -// | | | | -// | 0 | 1 *------- X -// | | / / -// | | / / -// | |/ / -// 4-----------5 Z -// -// dataWindow.min -// / -// / -// +-----------+ -// |3 Y 7| -// | | | -// | | | -// | ---+---Z | +X face -// | | | -// | | | -// |1 5| -// +-----------+ -// |6 Y 2| -// | | | -// | | | -// | Z---+--- | -X face -// | | | -// | | | -// |4 0| -// +-----------+ -// |6 Z 7| -// | | | -// | | | -// | ---+---X | +Y face -// | | | -// | | | -// |2 3| -// +-----------+ -// |0 1| -// | | | -// | | | -// | ---+---X | -Y face -// | | | -// | | | -// |4 Z 5| -// +-----------+ -// |7 Y 6| -// | | | -// | | | -// | X---+--- | +Z face -// | | | -// | | | -// |5 4| -// +-----------+ -// |2 Y 3| -// | | | -// | | | -// | ---+---X | -Z face -// | | | -// | | | -// |0 1| -// +-----------+ -// / -// / -// dataWindow.max -// -// The size of the data window should be N by 6*N pixels -// (width by height), where N can be any integer greater -// than 0. -// -//-------------------------------------------------------------- - -//------------------------------------ -// Names for the six faces of the cube -//------------------------------------ - -enum CubeMapFace -{ - CUBEFACE_POS_X, // +X face - CUBEFACE_NEG_X, // -X face - CUBEFACE_POS_Y, // +Y face - CUBEFACE_NEG_Y, // -Y face - CUBEFACE_POS_Z, // +Z face - CUBEFACE_NEG_Z, // -Z face -}; - -namespace CubeMap -{ - //--------------------------------------------- - // Width and height of a cube's face, in pixels - //--------------------------------------------- - - int sizeOfFace (const Imath::Box2i &dataWindow); - - - //------------------------------------------ - // Compute the region in the environment map - // that is covered by the specified face. - //------------------------------------------ - - Imath::Box2i dataWindowForFace (CubeMapFace face, - const Imath::Box2i &dataWindow); - - - //---------------------------------------------------- - // Convert the coordinates of a pixel within a face - // [in the range from (0,0) to (s-1,s-1), where - // s == sizeOfFace(dataWindow)] to pixel coordinates - // in the environment map. - //---------------------------------------------------- - - Imath::V2f pixelPosition (CubeMapFace face, - const Imath::Box2i &dataWindow, - Imath::V2f positionInFace); - - - //-------------------------------------------------------------- - // Convert a 3D direction into a cube face, and a pixel position - // within that face. - // - // If you have a 3D direction, dir, the following code fragment - // finds the position, pos, of the corresponding pixel in an - // environment map with data window dw: - // - // CubeMapFace f; - // V2f pif, pos; - // - // faceAndPixelPosition (dir, dw, f, pif); - // pos = pixelPosition (f, dw, pif); - // - //-------------------------------------------------------------- - - void faceAndPixelPosition (const Imath::V3f &direction, - const Imath::Box2i &dataWindow, - CubeMapFace &face, - Imath::V2f &positionInFace); - - - // -------------------------------------------------------- - // Given a cube face and a pixel position within that face, - // compute the corresponding 3D direction. - // -------------------------------------------------------- - - Imath::V3f direction (CubeMapFace face, - const Imath::Box2i &dataWindow, - const Imath::V2f &positionInFace); -} - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfEnvmapAttribute.h b/3rdparty/include/OpenEXR/ImfEnvmapAttribute.h deleted file mode 100644 index 716883fbd..000000000 --- a/3rdparty/include/OpenEXR/ImfEnvmapAttribute.h +++ /dev/null @@ -1,65 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_IMF_ENVMAP_ATTRIBUTE_H -#define INCLUDED_IMF_ENVMAP_ATTRIBUTE_H - - -//----------------------------------------------------------------------------- -// -// class EnvmapAttribute -// -//----------------------------------------------------------------------------- - -#include -#include - - -namespace Imf { - - -typedef TypedAttribute EnvmapAttribute; -template <> const char *EnvmapAttribute::staticTypeName (); -template <> void EnvmapAttribute::writeValueTo (OStream &, int) const; -template <> void EnvmapAttribute::readValueFrom (IStream &, int, int); - - -} // namespace Imf - -// Metrowerks compiler wants the .cpp file inlined, too -#ifdef __MWERKS__ -#include -#endif - -#endif diff --git a/3rdparty/include/OpenEXR/ImfFloatAttribute.h b/3rdparty/include/OpenEXR/ImfFloatAttribute.h deleted file mode 100644 index 60d6f23c5..000000000 --- a/3rdparty/include/OpenEXR/ImfFloatAttribute.h +++ /dev/null @@ -1,63 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_FLOAT_ATTRIBUTE_H -#define INCLUDED_IMF_FLOAT_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class FloatAttribute -// -//----------------------------------------------------------------------------- - -#include - - -namespace Imf { - - -typedef TypedAttribute FloatAttribute; -template <> const char *FloatAttribute::staticTypeName (); - - -} // namespace Imf - -// Metrowerks compiler wants the .cpp file inlined, too -#ifdef __MWERKS__ -#include -#endif - -#endif diff --git a/3rdparty/include/OpenEXR/ImfFrameBuffer.h b/3rdparty/include/OpenEXR/ImfFrameBuffer.h deleted file mode 100644 index cd2401683..000000000 --- a/3rdparty/include/OpenEXR/ImfFrameBuffer.h +++ /dev/null @@ -1,368 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_FRAME_BUFFER_H -#define INCLUDED_IMF_FRAME_BUFFER_H - -//----------------------------------------------------------------------------- -// -// class Slice -// class FrameBuffer -// -//----------------------------------------------------------------------------- - -#include -#include -#include - - -namespace Imf { - - -//------------------------------------------------------- -// Description of a single slice of the frame buffer: -// -// Note -- terminology: as part of a file, a component of -// an image (e.g. red, green, blue, depth etc.) is called -// a "channel". As part of a frame buffer, an image -// component is called a "slice". -//------------------------------------------------------- - -struct Slice -{ - //------------------------------ - // Data type; see ImfPixelType.h - //------------------------------ - - PixelType type; - - - //--------------------------------------------------------------------- - // Memory layout: The address of pixel (x, y) is - // - // base + (xp / xSampling) * xStride + (yp / ySampling) * yStride - // - // where xp and yp are computed as follows: - // - // * If we are reading or writing a scanline-based file: - // - // xp = x - // yp = y - // - // * If we are reading a tile whose upper left coorner is at (xt, yt): - // - // if xTileCoords is true then xp = x - xt, else xp = x - // if yTileCoords is true then yp = y - yt, else yp = y - // - //--------------------------------------------------------------------- - - char * base; - size_t xStride; - size_t yStride; - - - //-------------------------------------------- - // Subsampling: pixel (x, y) is present in the - // slice only if - // - // x % xSampling == 0 && y % ySampling == 0 - // - //-------------------------------------------- - - int xSampling; - int ySampling; - - - //---------------------------------------------------------- - // Default value, used to fill the slice when a file without - // a channel that corresponds to this slice is read. - //---------------------------------------------------------- - - double fillValue; - - - //------------------------------------------------------- - // For tiled files, the xTileCoords and yTileCoords flags - // determine whether pixel addressing is performed using - // absolute coordinates or coordinates relative to a - // tile's upper left corner. (See the comment on base, - // xStride and yStride, above.) - // - // For scanline-based files these flags have no effect; - // pixel addressing is always done using absolute - // coordinates. - //------------------------------------------------------- - - bool xTileCoords; - bool yTileCoords; - - - //------------ - // Constructor - //------------ - - Slice (PixelType type = HALF, - char * base = 0, - size_t xStride = 0, - size_t yStride = 0, - int xSampling = 1, - int ySampling = 1, - double fillValue = 0.0, - bool xTileCoords = false, - bool yTileCoords = false); -}; - - -class FrameBuffer -{ - public: - - //------------ - // Add a slice - //------------ - - void insert (const char name[], - const Slice &slice); - - //---------------------------------------------------------------- - // Access to existing slices: - // - // [n] Returns a reference to the slice with name n. - // If no slice with name n exists, an Iex::ArgExc - // is thrown. - // - // findSlice(n) Returns a pointer to the slice with name n, - // or 0 if no slice with name n exists. - // - //---------------------------------------------------------------- - - Slice & operator [] (const char name[]); - const Slice & operator [] (const char name[]) const; - - Slice * findSlice (const char name[]); - const Slice * findSlice (const char name[]) const; - - - //----------------------------------------- - // Iterator-style access to existing slices - //----------------------------------------- - - typedef std::map SliceMap; - - class Iterator; - class ConstIterator; - - Iterator begin (); - ConstIterator begin () const; - Iterator end (); - ConstIterator end () const; - Iterator find (const char name[]); - ConstIterator find (const char name[]) const; - - private: - - SliceMap _map; -}; - - -//---------- -// Iterators -//---------- - -class FrameBuffer::Iterator -{ - public: - - Iterator (); - Iterator (const FrameBuffer::SliceMap::iterator &i); - - Iterator & operator ++ (); - Iterator operator ++ (int); - - const char * name () const; - Slice & slice () const; - - private: - - friend class FrameBuffer::ConstIterator; - - FrameBuffer::SliceMap::iterator _i; -}; - - -class FrameBuffer::ConstIterator -{ - public: - - ConstIterator (); - ConstIterator (const FrameBuffer::SliceMap::const_iterator &i); - ConstIterator (const FrameBuffer::Iterator &other); - - ConstIterator & operator ++ (); - ConstIterator operator ++ (int); - - const char * name () const; - const Slice & slice () const; - - private: - - friend bool operator == (const ConstIterator &, const ConstIterator &); - friend bool operator != (const ConstIterator &, const ConstIterator &); - - FrameBuffer::SliceMap::const_iterator _i; -}; - - -//----------------- -// Inline Functions -//----------------- - -inline -FrameBuffer::Iterator::Iterator (): _i() -{ - // empty -} - - -inline -FrameBuffer::Iterator::Iterator (const FrameBuffer::SliceMap::iterator &i): - _i (i) -{ - // empty -} - - -inline FrameBuffer::Iterator & -FrameBuffer::Iterator::operator ++ () -{ - ++_i; - return *this; -} - - -inline FrameBuffer::Iterator -FrameBuffer::Iterator::operator ++ (int) -{ - Iterator tmp = *this; - ++_i; - return tmp; -} - - -inline const char * -FrameBuffer::Iterator::name () const -{ - return *_i->first; -} - - -inline Slice & -FrameBuffer::Iterator::slice () const -{ - return _i->second; -} - - -inline -FrameBuffer::ConstIterator::ConstIterator (): _i() -{ - // empty -} - -inline -FrameBuffer::ConstIterator::ConstIterator - (const FrameBuffer::SliceMap::const_iterator &i): _i (i) -{ - // empty -} - - -inline -FrameBuffer::ConstIterator::ConstIterator (const FrameBuffer::Iterator &other): - _i (other._i) -{ - // empty -} - -inline FrameBuffer::ConstIterator & -FrameBuffer::ConstIterator::operator ++ () -{ - ++_i; - return *this; -} - - -inline FrameBuffer::ConstIterator -FrameBuffer::ConstIterator::operator ++ (int) -{ - ConstIterator tmp = *this; - ++_i; - return tmp; -} - - -inline const char * -FrameBuffer::ConstIterator::name () const -{ - return *_i->first; -} - -inline const Slice & -FrameBuffer::ConstIterator::slice () const -{ - return _i->second; -} - - -inline bool -operator == (const FrameBuffer::ConstIterator &x, - const FrameBuffer::ConstIterator &y) -{ - return x._i == y._i; -} - - -inline bool -operator != (const FrameBuffer::ConstIterator &x, - const FrameBuffer::ConstIterator &y) -{ - return !(x == y); -} - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfHeader.h b/3rdparty/include/OpenEXR/ImfHeader.h deleted file mode 100644 index 0d93a8cb9..000000000 --- a/3rdparty/include/OpenEXR/ImfHeader.h +++ /dev/null @@ -1,557 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_HEADER_H -#define INCLUDED_IMF_HEADER_H - -//----------------------------------------------------------------------------- -// -// class Header -// -//----------------------------------------------------------------------------- - -#include -#include -#include -#include -#include -#include "ImathVec.h" -#include "ImathBox.h" -#include "IexBaseExc.h" -#include -#include - -namespace Imf { - - -class Attribute; -class ChannelList; -class IStream; -class OStream; -class PreviewImage; - - -class Header -{ - public: - - //---------------------------------------------------------------- - // Default constructor -- the display window and the data window - // are both set to Box2i (V2i (0, 0), V2i (width-1, height-1). - //---------------------------------------------------------------- - - Header (int width = 64, - int height = 64, - float pixelAspectRatio = 1, - const Imath::V2f &screenWindowCenter = Imath::V2f (0, 0), - float screenWindowWidth = 1, - LineOrder lineOrder = INCREASING_Y, - Compression = ZIP_COMPRESSION); - - - //-------------------------------------------------------------------- - // Constructor -- the data window is specified explicitly; the display - // window is set to Box2i (V2i (0, 0), V2i (width-1, height-1). - //-------------------------------------------------------------------- - - Header (int width, - int height, - const Imath::Box2i &dataWindow, - float pixelAspectRatio = 1, - const Imath::V2f &screenWindowCenter = Imath::V2f (0, 0), - float screenWindowWidth = 1, - LineOrder lineOrder = INCREASING_Y, - Compression = ZIP_COMPRESSION); - - - //---------------------------------------------------------- - // Constructor -- the display window and the data window are - // both specified explicitly. - //---------------------------------------------------------- - - Header (const Imath::Box2i &displayWindow, - const Imath::Box2i &dataWindow, - float pixelAspectRatio = 1, - const Imath::V2f &screenWindowCenter = Imath::V2f (0, 0), - float screenWindowWidth = 1, - LineOrder lineOrder = INCREASING_Y, - Compression = ZIP_COMPRESSION); - - - //----------------- - // Copy constructor - //----------------- - - Header (const Header &other); - - - //----------- - // Destructor - //----------- - - ~Header (); - - - //----------- - // Assignment - //----------- - - Header & operator = (const Header &other); - - - //--------------------------------------------------------------- - // Add an attribute: - // - // insert(n,attr) If no attribute with name n exists, a new - // attribute with name n, and the same type as - // attr, is added, and the value of attr is - // copied into the new attribute. - // - // If an attribute with name n exists, and its - // type is the same as attr, the value of attr - // is copied into this attribute. - // - // If an attribute with name n exists, and its - // type is different from attr, an Iex::TypeExc - // is thrown. - // - //--------------------------------------------------------------- - - void insert (const char name[], - const Attribute &attribute); - - //------------------------------------------------------------------ - // Access to existing attributes: - // - // [n] Returns a reference to the attribute - // with name n. If no attribute with - // name n exists, an Iex::ArgExc is thrown. - // - // typedAttribute(n) Returns a reference to the attribute - // with name n and type T. If no attribute - // with name n exists, an Iex::ArgExc is - // thrown. If an attribute with name n - // exists, but its type is not T, an - // Iex::TypeExc is thrown. - // - // findTypedAttribute(n) Returns a pointer to the attribute with - // name n and type T, or 0 if no attribute - // with name n and type T exists. - // - //------------------------------------------------------------------ - - Attribute & operator [] (const char name[]); - const Attribute & operator [] (const char name[]) const; - - template T& typedAttribute (const char name[]); - template const T& typedAttribute (const char name[]) const; - - template T* findTypedAttribute (const char name[]); - template const T* findTypedAttribute (const char name[]) const; - - - //--------------------------------------------- - // Iterator-style access to existing attributes - //--------------------------------------------- - - typedef std::map AttributeMap; - - class Iterator; - class ConstIterator; - - Iterator begin (); - ConstIterator begin () const; - Iterator end (); - ConstIterator end () const; - Iterator find (const char name[]); - ConstIterator find (const char name[]) const; - - - //-------------------------------- - // Access to predefined attributes - //-------------------------------- - - Imath::Box2i & displayWindow (); - const Imath::Box2i & displayWindow () const; - - Imath::Box2i & dataWindow (); - const Imath::Box2i & dataWindow () const; - - float & pixelAspectRatio (); - const float & pixelAspectRatio () const; - - Imath::V2f & screenWindowCenter (); - const Imath::V2f & screenWindowCenter () const; - - float & screenWindowWidth (); - const float & screenWindowWidth () const; - - ChannelList & channels (); - const ChannelList & channels () const; - - LineOrder & lineOrder (); - const LineOrder & lineOrder () const; - - Compression & compression (); - const Compression & compression () const; - - - //---------------------------------------------------------------------- - // Tile Description: - // - // The tile description is a TileDescriptionAttribute whose name - // is "tiles". The "tiles" attribute must be present in any tiled - // image file. When present, it describes various properties of the - // tiles that make up the file. - // - // Convenience functions: - // - // setTileDescription(td) - // calls insert ("tiles", TileDescriptionAttribute (td)) - // - // tileDescription() - // returns typedAttribute("tiles").value() - // - // hasTileDescription() - // return findTypedAttribute("tiles") != 0 - // - //---------------------------------------------------------------------- - - void setTileDescription (const TileDescription & td); - - TileDescription & tileDescription (); - const TileDescription & tileDescription () const; - - bool hasTileDescription() const; - - - //---------------------------------------------------------------------- - // Preview image: - // - // The preview image is a PreviewImageAttribute whose name is "preview". - // This attribute is special -- while an image file is being written, - // the pixels of the preview image can be changed repeatedly by calling - // OutputFile::updatePreviewImage(). - // - // Convenience functions: - // - // setPreviewImage(p) - // calls insert ("preview", PreviewImageAttribute (p)) - // - // previewImage() - // returns typedAttribute("preview").value() - // - // hasPreviewImage() - // return findTypedAttribute("preview") != 0 - // - //---------------------------------------------------------------------- - - void setPreviewImage (const PreviewImage &p); - - PreviewImage & previewImage (); - const PreviewImage & previewImage () const; - - bool hasPreviewImage () const; - - - //------------------------------------------------------------- - // Sanity check -- examines the header, and throws an exception - // if it finds something wrong (empty display window, negative - // pixel aspect ratio, unknown compression sceme etc.) - // - // set isTiled to true if you are checking a tiled/multi-res - // header - //------------------------------------------------------------- - - void sanityCheck (bool isTiled = false) const; - - - //------------------------------------------------------------------ - // Input and output: - // - // If the header contains a preview image attribute, then writeTo() - // returns the position of that attribute in the output stream; this - // information is used by OutputFile::updatePreviewImage(). - // If the header contains no preview image attribute, then writeTo() - // returns 0. - //------------------------------------------------------------------ - - - Int64 writeTo (OStream &os, - bool isTiled = false) const; - - void readFrom (IStream &is, int &version); - - private: - - AttributeMap _map; -}; - - -//---------- -// Iterators -//---------- - -class Header::Iterator -{ - public: - - Iterator (); - Iterator (const Header::AttributeMap::iterator &i); - - Iterator & operator ++ (); - Iterator operator ++ (int); - - const char * name () const; - Attribute & attribute () const; - - private: - - friend class Header::ConstIterator; - - Header::AttributeMap::iterator _i; -}; - - -class Header::ConstIterator -{ - public: - - ConstIterator (); - ConstIterator (const Header::AttributeMap::const_iterator &i); - ConstIterator (const Header::Iterator &other); - - ConstIterator & operator ++ (); - ConstIterator operator ++ (int); - - const char * name () const; - const Attribute & attribute () const; - - private: - - friend bool operator == (const ConstIterator &, const ConstIterator &); - friend bool operator != (const ConstIterator &, const ConstIterator &); - - Header::AttributeMap::const_iterator _i; -}; - - -//------------------------------------------------------------------------ -// Library initialization: -// -// In a multithreaded program, staticInitialize() must be called once -// during startup, before the program accesses any other functions or -// classes in the IlmImf library. Calling staticInitialize() in this -// way avoids races during initialization of the library's global -// variables. -// -// Single-threaded programs are not required to call staticInitialize(); -// initialization of the library's global variables happens automatically. -// -//------------------------------------------------------------------------ - -void staticInitialize (); - - -//----------------- -// Inline Functions -//----------------- - - -inline -Header::Iterator::Iterator (): _i() -{ - // empty -} - - -inline -Header::Iterator::Iterator (const Header::AttributeMap::iterator &i): _i (i) -{ - // empty -} - - -inline Header::Iterator & -Header::Iterator::operator ++ () -{ - ++_i; - return *this; -} - - -inline Header::Iterator -Header::Iterator::operator ++ (int) -{ - Iterator tmp = *this; - ++_i; - return tmp; -} - - -inline const char * -Header::Iterator::name () const -{ - return *_i->first; -} - - -inline Attribute & -Header::Iterator::attribute () const -{ - return *_i->second; -} - - -inline -Header::ConstIterator::ConstIterator (): _i() -{ - // empty -} - -inline -Header::ConstIterator::ConstIterator - (const Header::AttributeMap::const_iterator &i): _i (i) -{ - // empty -} - - -inline -Header::ConstIterator::ConstIterator (const Header::Iterator &other): - _i (other._i) -{ - // empty -} - -inline Header::ConstIterator & -Header::ConstIterator::operator ++ () -{ - ++_i; - return *this; -} - - -inline Header::ConstIterator -Header::ConstIterator::operator ++ (int) -{ - ConstIterator tmp = *this; - ++_i; - return tmp; -} - - -inline const char * -Header::ConstIterator::name () const -{ - return *_i->first; -} - - -inline const Attribute & -Header::ConstIterator::attribute () const -{ - return *_i->second; -} - - -inline bool -operator == (const Header::ConstIterator &x, const Header::ConstIterator &y) -{ - return x._i == y._i; -} - - -inline bool -operator != (const Header::ConstIterator &x, const Header::ConstIterator &y) -{ - return !(x == y); -} - - -//--------------------- -// Template definitions -//--------------------- - -template -T & -Header::typedAttribute (const char name[]) -{ - Attribute *attr = &(*this)[name]; - T *tattr = dynamic_cast (attr); - - if (tattr == 0) - throw Iex::TypeExc ("Unexpected attribute type."); - - return *tattr; -} - - -template -const T & -Header::typedAttribute (const char name[]) const -{ - const Attribute *attr = &(*this)[name]; - const T *tattr = dynamic_cast (attr); - - if (tattr == 0) - throw Iex::TypeExc ("Unexpected attribute type."); - - return *tattr; -} - - -template -T * -Header::findTypedAttribute (const char name[]) -{ - AttributeMap::iterator i = _map.find (name); - return (i == _map.end())? 0: dynamic_cast (i->second); -} - - -template -const T * -Header::findTypedAttribute (const char name[]) const -{ - AttributeMap::const_iterator i = _map.find (name); - return (i == _map.end())? 0: dynamic_cast (i->second); -} - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfHuf.h b/3rdparty/include/OpenEXR/ImfHuf.h deleted file mode 100644 index 5134dfdc7..000000000 --- a/3rdparty/include/OpenEXR/ImfHuf.h +++ /dev/null @@ -1,79 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_HUF_H -#define INCLUDED_IMF_HUF_H - - -//----------------------------------------------------------------------------- -// -// 16-bit Huffman compression and decompression: -// -// hufCompress (r, nr, c) -// -// Compresses the contents of array r (of length nr), -// stores the compressed data in array c, and returns -// the size of the compressed data (in bytes). -// -// To avoid buffer overflows, the size of array c should -// be at least 2 * nr + 65536. -// -// hufUncompress (c, nc, r, nr) -// -// Uncompresses the data in array c (with length nc), -// and stores the results in array r (with length nr). -// -//----------------------------------------------------------------------------- - -namespace Imf { - - -int -hufCompress (const unsigned short raw[/*nRaw*/], - int nRaw, - char compressed[/*2 * nRaw + 65536*/]); - - -void -hufUncompress (const char compressed[/*nCompressed*/], - int nCompressed, - unsigned short raw[/*nRaw*/], - int nRaw); - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfIO.h b/3rdparty/include/OpenEXR/ImfIO.h deleted file mode 100644 index 44f51a304..000000000 --- a/3rdparty/include/OpenEXR/ImfIO.h +++ /dev/null @@ -1,252 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_IO_H -#define INCLUDED_IMF_IO_H - -//----------------------------------------------------------------------------- -// -// Low-level file input and output for OpenEXR. -// -//----------------------------------------------------------------------------- - -#include -#include - -namespace Imf { - -//----------------------------------------------------------- -// class IStream -- an abstract base class for input streams. -//----------------------------------------------------------- - -class IStream -{ - public: - - //----------- - // Destructor - //----------- - - virtual ~IStream (); - - - //------------------------------------------------- - // Does this input stream support memory-mapped IO? - // - // Memory-mapped streams can avoid an extra copy; - // memory-mapped read operations return a pointer - // to an internal buffer instead of copying data - // into a buffer supplied by the caller. - //------------------------------------------------- - - virtual bool isMemoryMapped () const; - - - //------------------------------------------------------ - // Read from the stream: - // - // read(c,n) reads n bytes from the stream, and stores - // them in array c. If the stream contains less than n - // bytes, or if an I/O error occurs, read(c,n) throws - // an exception. If read(c,n) reads the last byte from - // the file it returns false, otherwise it returns true. - //------------------------------------------------------ - - virtual bool read (char c[/*n*/], int n) = 0; - - - //--------------------------------------------------- - // Read from a memory-mapped stream: - // - // readMemoryMapped(n) reads n bytes from the stream - // and returns a pointer to the first byte. The - // returned pointer remains valid until the stream - // is closed. If there are less than n byte left to - // read in the stream or if the stream is not memory- - // mapped, readMemoryMapped(n) throws an exception. - //--------------------------------------------------- - - virtual char * readMemoryMapped (int n); - - - //-------------------------------------------------------- - // Get the current reading position, in bytes from the - // beginning of the file. If the next call to read() will - // read the first byte in the file, tellg() returns 0. - //-------------------------------------------------------- - - virtual Int64 tellg () = 0; - - - //------------------------------------------- - // Set the current reading position. - // After calling seekg(i), tellg() returns i. - //------------------------------------------- - - virtual void seekg (Int64 pos) = 0; - - - //------------------------------------------------------ - // Clear error conditions after an operation has failed. - //------------------------------------------------------ - - virtual void clear (); - - - //------------------------------------------------------ - // Get the name of the file associated with this stream. - //------------------------------------------------------ - - const char * fileName () const; - - protected: - - IStream (const char fileName[]); - - private: - - IStream (const IStream &); // not implemented - IStream & operator = (const IStream &); // not implemented - - std::string _fileName; -}; - - -//----------------------------------------------------------- -// class OStream -- an abstract base class for output streams -//----------------------------------------------------------- - -class OStream -{ - public: - - //----------- - // Destructor - //----------- - - virtual ~OStream (); - - - //---------------------------------------------------------- - // Write to the stream: - // - // write(c,n) takes n bytes from array c, and stores them - // in the stream. If an I/O error occurs, write(c,n) throws - // an exception. - //---------------------------------------------------------- - - virtual void write (const char c[/*n*/], int n) = 0; - - - //--------------------------------------------------------- - // Get the current writing position, in bytes from the - // beginning of the file. If the next call to write() will - // start writing at the beginning of the file, tellp() - // returns 0. - //--------------------------------------------------------- - - virtual Int64 tellp () = 0; - - - //------------------------------------------- - // Set the current writing position. - // After calling seekp(i), tellp() returns i. - //------------------------------------------- - - virtual void seekp (Int64 pos) = 0; - - - //------------------------------------------------------ - // Get the name of the file associated with this stream. - //------------------------------------------------------ - - const char * fileName () const; - - protected: - - OStream (const char fileName[]); - - private: - - OStream (const OStream &); // not implemented - OStream & operator = (const OStream &); // not implemented - - std::string _fileName; -}; - - -//----------------------- -// Helper classes for Xdr -//----------------------- - -struct StreamIO -{ - static void - writeChars (OStream &os, const char c[/*n*/], int n) - { - os.write (c, n); - } - - static bool - readChars (IStream &is, char c[/*n*/], int n) - { - return is.read (c, n); - } -}; - - -struct CharPtrIO -{ - static void - writeChars (char *&op, const char c[/*n*/], int n) - { - while (n--) - *op++ = *c++; - } - - static bool - readChars (const char *&ip, char c[/*n*/], int n) - { - while (n--) - *c++ = *ip++; - - return true; - } -}; - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfInputFile.h b/3rdparty/include/OpenEXR/ImfInputFile.h deleted file mode 100644 index af9256bbd..000000000 --- a/3rdparty/include/OpenEXR/ImfInputFile.h +++ /dev/null @@ -1,209 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_INPUT_FILE_H -#define INCLUDED_IMF_INPUT_FILE_H - -//----------------------------------------------------------------------------- -// -// class InputFile -- a scanline-based interface that can be used -// to read both scanline-based and tiled OpenEXR image files. -// -//----------------------------------------------------------------------------- - -#include -#include -#include -#include -#include -#include - -namespace Imf { - -class TiledInputFile; -class ScanLineInputFile; - - -class InputFile -{ - public: - - //----------------------------------------------------------- - // A constructor that opens the file with the specified name. - // Destroying the InputFile object will close the file. - // - // numThreads determines the number of threads that will be - // used to read the file (see ImfThreading.h). - //----------------------------------------------------------- - - InputFile (const char fileName[], int numThreads = globalThreadCount()); - - - //------------------------------------------------------------- - // A constructor that attaches the new InputFile object to a - // file that has already been opened. Destroying the InputFile - // object will not close the file. - // - // numThreads determines the number of threads that will be - // used to read the file (see ImfThreading.h). - //------------------------------------------------------------- - - InputFile (IStream &is, int numThreads = globalThreadCount()); - - - //----------- - // Destructor - //----------- - - virtual ~InputFile (); - - - //------------------------ - // Access to the file name - //------------------------ - - const char * fileName () const; - - - //-------------------------- - // Access to the file header - //-------------------------- - - const Header & header () const; - - - //---------------------------------- - // Access to the file format version - //---------------------------------- - - int version () const; - - - //----------------------------------------------------------- - // Set the current frame buffer -- copies the FrameBuffer - // object into the InputFile object. - // - // The current frame buffer is the destination for the pixel - // data read from the file. The current frame buffer must be - // set at least once before readPixels() is called. - // The current frame buffer can be changed after each call - // to readPixels(). - //----------------------------------------------------------- - - void setFrameBuffer (const FrameBuffer &frameBuffer); - - - //----------------------------------- - // Access to the current frame buffer - //----------------------------------- - - const FrameBuffer & frameBuffer () const; - - - //--------------------------------------------------------------- - // Check if the file is complete: - // - // isComplete() returns true if all pixels in the data window are - // present in the input file, or false if any pixels are missing. - // (Another program may still be busy writing the file, or file - // writing may have been aborted prematurely.) - //--------------------------------------------------------------- - - bool isComplete () const; - - - //--------------------------------------------------------------- - // Read pixel data: - // - // readPixels(s1,s2) reads all scan lines with y coordinates - // in the interval [min (s1, s2), max (s1, s2)] from the file, - // and stores them in the current frame buffer. - // - // Both s1 and s2 must be within the interval - // [header().dataWindow().min.y, header().dataWindow().max.y] - // - // The scan lines can be read from the file in random order, and - // individual scan lines may be skipped or read multiple times. - // For maximum efficiency, the scan lines should be read in the - // order in which they were written to the file. - // - // readPixels(s) calls readPixels(s,s). - // - //--------------------------------------------------------------- - - void readPixels (int scanLine1, int scanLine2); - void readPixels (int scanLine); - - - //---------------------------------------------- - // Read a block of raw pixel data from the file, - // without uncompressing it (this function is - // used to implement OutputFile::copyPixels()). - //---------------------------------------------- - - void rawPixelData (int firstScanLine, - const char *&pixelData, - int &pixelDataSize); - - //-------------------------------------------------- - // Read a tile of raw pixel data from the file, - // without uncompressing it (this function is - // used to implement TiledOutputFile::copyPixels()). - //-------------------------------------------------- - - void rawTileData (int &dx, int &dy, - int &lx, int &ly, - const char *&pixelData, - int &pixelDataSize); - - struct Data; - - private: - - InputFile (const InputFile &); // not implemented - InputFile & operator = (const InputFile &); // not implemented - - void initialize (); - TiledInputFile * tFile (); - - friend void TiledOutputFile::copyPixels (InputFile &); - - Data * _data; -}; - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfInt64.h b/3rdparty/include/OpenEXR/ImfInt64.h deleted file mode 100644 index 926eeb014..000000000 --- a/3rdparty/include/OpenEXR/ImfInt64.h +++ /dev/null @@ -1,61 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_INT64_H -#define INCLUDED_IMF_INT64_H - -//---------------------------------------------------------------------------- -// -// Int64 -- unsigned 64-bit integers -// -//---------------------------------------------------------------------------- - -#include - -namespace Imf { - - -#if (defined _WIN32 || defined _WIN64) && _MSC_VER >= 1300 - typedef unsigned __int64 Int64; -#elif ULONG_MAX == 18446744073709551615LU - typedef long unsigned int Int64; -#else - typedef long long unsigned int Int64; -#endif - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfIntAttribute.h b/3rdparty/include/OpenEXR/ImfIntAttribute.h deleted file mode 100644 index c67e5b167..000000000 --- a/3rdparty/include/OpenEXR/ImfIntAttribute.h +++ /dev/null @@ -1,63 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_INT_ATTRIBUTE_H -#define INCLUDED_IMF_INT_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class IntAttribute -// -//----------------------------------------------------------------------------- - -#include - - -namespace Imf { - - -typedef TypedAttribute IntAttribute; -template <> const char *IntAttribute::staticTypeName (); - - -} // namespace Imf - -// Metrowerks compiler wants the .cpp file inlined, too -#ifdef __MWERKS__ -#include -#endif - -#endif diff --git a/3rdparty/include/OpenEXR/ImfKeyCode.h b/3rdparty/include/OpenEXR/ImfKeyCode.h deleted file mode 100644 index 93dd915ed..000000000 --- a/3rdparty/include/OpenEXR/ImfKeyCode.h +++ /dev/null @@ -1,161 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_KEY_CODE_H -#define INCLUDED_IMF_KEY_CODE_H - -//----------------------------------------------------------------------------- -// -// class KeyCode -// -// A KeyCode object uniquely identifies a motion picture film frame. -// The following fields specifiy film manufacturer, film type, film -// roll and the frame's position within the roll: -// -// filmMfcCode film manufacturer code -// range: 0 - 99 -// -// filmType film type code -// range: 0 - 99 -// -// prefix prefix to identify film roll -// range: 0 - 999999 -// -// count count, increments once every perfsPerCount -// perforations (see below) -// range: 0 - 9999 -// -// perfOffset offset of frame, in perforations from -// zero-frame reference mark -// range: 0 - 119 -// -// perfsPerFrame number of perforations per frame -// range: 1 - 15 -// -// typical values: -// -// 1 for 16mm film -// 3, 4, or 8 for 35mm film -// 5, 8 or 15 for 65mm film -// -// perfsPerCount number of perforations per count -// range: 20 - 120 -// -// typical values: -// -// 20 for 16mm film -// 64 for 35mm film -// 80 or 120 for 65mm film -// -// For more information about the interpretation of those fields see -// the following standards and recommended practice publications: -// -// SMPTE 254 Motion-Picture Film (35-mm) - Manufacturer-Printed -// Latent Image Identification Information -// -// SMPTE 268M File Format for Digital Moving-Picture Exchange (DPX) -// (section 6.1) -// -// SMPTE 270 Motion-Picture Film (65-mm) - Manufacturer- Printed -// Latent Image Identification Information -// -// SMPTE 271 Motion-Picture Film (16-mm) - Manufacturer- Printed -// Latent Image Identification Information -// -//----------------------------------------------------------------------------- - -namespace Imf { - - -class KeyCode -{ - public: - - //------------------------------------- - // Constructors and assignment operator - //------------------------------------- - - KeyCode (int filmMfcCode = 0, - int filmType = 0, - int prefix = 0, - int count = 0, - int perfOffset = 0, - int perfsPerFrame = 4, - int perfsPerCount = 64); - - KeyCode (const KeyCode &other); - KeyCode & operator = (const KeyCode &other); - - - //---------------------------- - // Access to individual fields - //---------------------------- - - int filmMfcCode () const; - void setFilmMfcCode (int filmMfcCode); - - int filmType () const; - void setFilmType (int filmType); - - int prefix () const; - void setPrefix (int prefix); - - int count () const; - void setCount (int count); - - int perfOffset () const; - void setPerfOffset (int perfOffset); - - int perfsPerFrame () const; - void setPerfsPerFrame (int perfsPerFrame); - - int perfsPerCount () const; - void setPerfsPerCount (int perfsPerCount); - - private: - - int _filmMfcCode; - int _filmType; - int _prefix; - int _count; - int _perfOffset; - int _perfsPerFrame; - int _perfsPerCount; -}; - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfKeyCodeAttribute.h b/3rdparty/include/OpenEXR/ImfKeyCodeAttribute.h deleted file mode 100644 index 9ec8f8403..000000000 --- a/3rdparty/include/OpenEXR/ImfKeyCodeAttribute.h +++ /dev/null @@ -1,72 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_KEY_CODE_ATTRIBUTE_H -#define INCLUDED_IMF_KEY_CODE_ATTRIBUTE_H - - -//----------------------------------------------------------------------------- -// -// class KeyCodeAttribute -// -//----------------------------------------------------------------------------- - -#include -#include - - -namespace Imf { - - -typedef TypedAttribute KeyCodeAttribute; - -template <> -const char *KeyCodeAttribute::staticTypeName (); - -template <> -void KeyCodeAttribute::writeValueTo (OStream &, int) const; - -template <> -void KeyCodeAttribute::readValueFrom (IStream &, int, int); - - -} // namespace Imf - -// Metrowerks compiler wants the .cpp file inlined, too -#ifdef __MWERKS__ -#include -#endif - -#endif diff --git a/3rdparty/include/OpenEXR/ImfLineOrder.h b/3rdparty/include/OpenEXR/ImfLineOrder.h deleted file mode 100644 index 2f91352fd..000000000 --- a/3rdparty/include/OpenEXR/ImfLineOrder.h +++ /dev/null @@ -1,64 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_LINE_ORDER_H -#define INCLUDED_IMF_LINE_ORDER_H - -//----------------------------------------------------------------------------- -// -// enum LineOrder -// -//----------------------------------------------------------------------------- - -namespace Imf { - - -enum LineOrder -{ - INCREASING_Y = 0, // first scan line has lowest y coordinate - - DECREASING_Y = 1, // first scan line has highest y coordinate - - RANDOM_Y = 2, // only for tiled files; tiles are written - // in random order - - NUM_LINEORDERS // number of different line orders -}; - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfLineOrderAttribute.h b/3rdparty/include/OpenEXR/ImfLineOrderAttribute.h deleted file mode 100644 index eb9301e04..000000000 --- a/3rdparty/include/OpenEXR/ImfLineOrderAttribute.h +++ /dev/null @@ -1,66 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_LINE_ORDER_ATTRIBUTE_H -#define INCLUDED_IMF_LINE_ORDER_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class LineOrderAttribute -// -//----------------------------------------------------------------------------- - -#include -#include - - -namespace Imf { - - -typedef TypedAttribute LineOrderAttribute; -template <> const char *LineOrderAttribute::staticTypeName (); -template <> void LineOrderAttribute::writeValueTo (OStream &, int) const; -template <> void LineOrderAttribute::readValueFrom (IStream &, int, int); - - -} // namespace Imf - -// Metrowerks compiler wants the .cpp file inlined, too -#ifdef __MWERKS__ -#include -#endif - -#endif diff --git a/3rdparty/include/OpenEXR/ImfLut.h b/3rdparty/include/OpenEXR/ImfLut.h deleted file mode 100644 index ca702d2db..000000000 --- a/3rdparty/include/OpenEXR/ImfLut.h +++ /dev/null @@ -1,185 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_LUT_H -#define INCLUDED_IMF_LUT_H - -//----------------------------------------------------------------------------- -// -// Lookup tables for efficient application -// of half --> half functions to pixel data, -// and some commonly applied functions. -// -//----------------------------------------------------------------------------- - -#include -#include -#include "ImathBox.h" -#include "halfFunction.h" - -namespace Imf { - -// -// Lookup table for individual half channels. -// - -class HalfLut -{ - public: - - //------------ - // Constructor - //------------ - - template - HalfLut (Function f); - - - //---------------------------------------------------------------------- - // Apply the table to data[0], data[stride] ... data[(nData-1) * stride] - //---------------------------------------------------------------------- - - void apply (half *data, - int nData, - int stride = 1) const; - - - //--------------------------------------------------------------- - // Apply the table to a frame buffer slice (see ImfFrameBuffer.h) - //--------------------------------------------------------------- - - void apply (const Slice &data, - const Imath::Box2i &dataWindow) const; - - private: - - halfFunction _lut; -}; - - -// -// Lookup table for combined RGBA data. -// - -class RgbaLut -{ - public: - - //------------ - // Constructor - //------------ - - template - RgbaLut (Function f, RgbaChannels chn = WRITE_RGB); - - - //---------------------------------------------------------------------- - // Apply the table to data[0], data[stride] ... data[(nData-1) * stride] - //---------------------------------------------------------------------- - - void apply (Rgba *data, - int nData, - int stride = 1) const; - - - //----------------------------------------------------------------------- - // Apply the table to a frame buffer (see RgbaOutpuFile.setFrameBuffer()) - //----------------------------------------------------------------------- - - void apply (Rgba *base, - int xStride, - int yStride, - const Imath::Box2i &dataWindow) const; - - private: - - halfFunction _lut; - RgbaChannels _chn; -}; - - -// -// 12bit log rounding reduces data to 20 stops with 200 steps per stop. -// That makes 4000 numbers. An extra 96 just come along for the ride. -// Zero explicitly remains zero. The first non-zero half will map to 1 -// in the 0-4095 12log space. A nice power of two number is placed at -// the center [2000] and that number is near 0.18. -// - -half round12log (half x); - - -// -// Round to n-bit precision (n should be between 0 and 10). -// After rounding, the significand's 10-n least significant -// bits will be zero. -// - -struct roundNBit -{ - roundNBit (int n): n(n) {} - half operator () (half x) {return x.round(n);} - int n; -}; - - -// -// Template definitions -// - - -template -HalfLut::HalfLut (Function f): - _lut(f, -HALF_MAX, HALF_MAX, half (0), - half::posInf(), half::negInf(), half::qNan()) -{ - // empty -} - - -template -RgbaLut::RgbaLut (Function f, RgbaChannels chn): - _lut(f, -HALF_MAX, HALF_MAX, half (0), - half::posInf(), half::negInf(), half::qNan()), - _chn(chn) -{ - // empty -} - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfMatrixAttribute.h b/3rdparty/include/OpenEXR/ImfMatrixAttribute.h deleted file mode 100644 index db0efc731..000000000 --- a/3rdparty/include/OpenEXR/ImfMatrixAttribute.h +++ /dev/null @@ -1,73 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_MATRIX_ATTRIBUTE_H -#define INCLUDED_IMF_MATRIX_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class M33fAttribute -// class M44fAttribute -// -//----------------------------------------------------------------------------- - -#include -#include "ImathMatrix.h" - - -namespace Imf { - - -typedef TypedAttribute M33fAttribute; -template <> const char *M33fAttribute::staticTypeName (); -template <> void M33fAttribute::writeValueTo (OStream &, int) const; -template <> void M33fAttribute::readValueFrom (IStream &, int, int); - - -typedef TypedAttribute M44fAttribute; -template <> const char *M44fAttribute::staticTypeName (); -template <> void M44fAttribute::writeValueTo (OStream &, int) const; -template <> void M44fAttribute::readValueFrom (IStream &, int, int); - - -} // namespace Imf - -// Metrowerks compiler wants the .cpp file inlined, too -#ifdef __MWERKS__ -#include -#endif - -#endif diff --git a/3rdparty/include/OpenEXR/ImfName.h b/3rdparty/include/OpenEXR/ImfName.h deleted file mode 100644 index afa893079..000000000 --- a/3rdparty/include/OpenEXR/ImfName.h +++ /dev/null @@ -1,146 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_NAME_H -#define INCLUDED_IMF_NAME_H - -//----------------------------------------------------------------------------- -// -// class ImfName -- a zero-terminated string -// with a fixed, small maximum length -// -//----------------------------------------------------------------------------- - -#include - -namespace Imf { - - -class Name -{ - public: - - //------------- - // Constructors - //------------- - - Name (); - Name (const char text[]); - - - //-------------------- - // Assignment operator - //-------------------- - - Name & operator = (const char text[]); - - - //--------------------- - // Access to the string - //--------------------- - - const char * text () const {return _text;} - const char * operator * () const {return _text;} - - //--------------- - // Maximum length - //--------------- - - static const int SIZE = 32; - static const int MAX_LENGTH = SIZE - 1; - - private: - - char _text[SIZE]; -}; - - -bool operator == (const Name &x, const Name &y); -bool operator != (const Name &x, const Name &y); -bool operator < (const Name &x, const Name &y); - - -//----------------- -// Inline functions -//----------------- - -inline Name & -Name::operator = (const char text[]) -{ - strncpy (_text, text, MAX_LENGTH); - return *this; -} - - -inline -Name::Name () -{ - _text[0] = 0; -} - - -inline -Name::Name (const char text[]) -{ - *this = text; - _text [MAX_LENGTH] = 0; -} - - -inline bool -operator == (const Name &x, const Name &y) -{ - return strcmp (*x, *y) == 0; -} - - -inline bool -operator != (const Name &x, const Name &y) -{ - return !(x == y); -} - - -inline bool -operator < (const Name &x, const Name &y) -{ - return strcmp (*x, *y) < 0; -} - - -} // namespace IMF - -#endif diff --git a/3rdparty/include/OpenEXR/ImfOpaqueAttribute.h b/3rdparty/include/OpenEXR/ImfOpaqueAttribute.h deleted file mode 100644 index 864ae9373..000000000 --- a/3rdparty/include/OpenEXR/ImfOpaqueAttribute.h +++ /dev/null @@ -1,114 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_OPAQUE_ATTRIBUTE_H -#define INCLUDED_IMF_OPAQUE_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class OpaqueAttribute -// -// When an image file is read, OpqaqueAttribute objects are used -// to hold the values of attributes whose types are not recognized -// by the reading program. OpaqueAttribute objects can be read -// from an image file, copied, and written back to to another image -// file, but their values are inaccessible. -// -//----------------------------------------------------------------------------- - -#include -#include - -namespace Imf { - - -class OpaqueAttribute: public Attribute -{ - public: - - //---------------------------- - // Constructors and destructor - //---------------------------- - - OpaqueAttribute (const char typeName[]); - OpaqueAttribute (const OpaqueAttribute &other); - virtual ~OpaqueAttribute (); - - - //------------------------------- - // Get this attribute's type name - //------------------------------- - - virtual const char * typeName () const; - - - //------------------------------ - // Make a copy of this attribute - //------------------------------ - - virtual Attribute * copy () const; - - - //---------------- - // I/O and copying - //---------------- - - virtual void writeValueTo (OStream &os, - int version) const; - - virtual void readValueFrom (IStream &is, - int size, - int version); - - virtual void copyValueFrom (const Attribute &other); - - - private: - - Array _typeName; - long _dataSize; - Array _data; -}; - - -} // namespace Imf - -// Metrowerks compiler wants the .cpp file inlined, too -#ifdef __MWERKS__ -#include -#endif - -#endif diff --git a/3rdparty/include/OpenEXR/ImfOutputFile.h b/3rdparty/include/OpenEXR/ImfOutputFile.h deleted file mode 100644 index bdc317a48..000000000 --- a/3rdparty/include/OpenEXR/ImfOutputFile.h +++ /dev/null @@ -1,241 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_OUTPUT_FILE_H -#define INCLUDED_IMF_OUTPUT_FILE_H - -//----------------------------------------------------------------------------- -// -// class OutputFile -// -//----------------------------------------------------------------------------- - -#include -#include -#include - -namespace Imf { - -class InputFile; -struct PreviewRgba; - - -class OutputFile -{ - public: - - //----------------------------------------------------------- - // Constructor -- opens the file and writes the file header. - // The file header is also copied into the OutputFile object, - // and can later be accessed via the header() method. - // Destroying this OutputFile object automatically closes - // the file. - // - // numThreads determines the number of threads that will be - // used to write the file (see ImfThreading.h). - //----------------------------------------------------------- - - OutputFile (const char fileName[], const Header &header, - int numThreads = globalThreadCount()); - - - //------------------------------------------------------------ - // Constructor -- attaches the new OutputFile object to a file - // that has already been opened, and writes the file header. - // The file header is also copied into the OutputFile object, - // and can later be accessed via the header() method. - // Destroying this OutputFile object does not automatically - // close the file. - // - // numThreads determines the number of threads that will be - // used to write the file (see ImfThreading.h). - //------------------------------------------------------------ - - OutputFile (OStream &os, const Header &header, - int numThreads = globalThreadCount()); - - - //------------------------------------------------- - // Destructor - // - // Destroying the OutputFile object before writing - // all scan lines within the data window results in - // an incomplete file. - //------------------------------------------------- - - virtual ~OutputFile (); - - - //------------------------ - // Access to the file name - //------------------------ - - const char * fileName () const; - - - //-------------------------- - // Access to the file header - //-------------------------- - - const Header & header () const; - - - //------------------------------------------------------- - // Set the current frame buffer -- copies the FrameBuffer - // object into the OutputFile object. - // - // The current frame buffer is the source of the pixel - // data written to the file. The current frame buffer - // must be set at least once before writePixels() is - // called. The current frame buffer can be changed - // after each call to writePixels. - //------------------------------------------------------- - - void setFrameBuffer (const FrameBuffer &frameBuffer); - - - //----------------------------------- - // Access to the current frame buffer - //----------------------------------- - - const FrameBuffer & frameBuffer () const; - - - //------------------------------------------------------------------- - // Write pixel data: - // - // writePixels(n) retrieves the next n scan lines worth of data from - // the current frame buffer, starting with the scan line indicated by - // currentScanLine(), and stores the data in the output file, and - // progressing in the direction indicated by header.lineOrder(). - // - // To produce a complete and correct file, exactly m scan lines must - // be written, where m is equal to - // header().dataWindow().max.y - header().dataWindow().min.y + 1. - //------------------------------------------------------------------- - - void writePixels (int numScanLines = 1); - - - //------------------------------------------------------------------ - // Access to the current scan line: - // - // currentScanLine() returns the y coordinate of the first scan line - // that will be read from the current frame buffer during the next - // call to writePixels(). - // - // If header.lineOrder() == INCREASING_Y: - // - // The current scan line before the first call to writePixels() - // is header().dataWindow().min.y. After writing each scan line, - // the current scan line is incremented by 1. - // - // If header.lineOrder() == DECREASING_Y: - // - // The current scan line before the first call to writePixels() - // is header().dataWindow().max.y. After writing each scan line, - // the current scan line is decremented by 1. - // - //------------------------------------------------------------------ - - int currentScanLine () const; - - - //-------------------------------------------------------------- - // Shortcut to copy all pixels from an InputFile into this file, - // without uncompressing and then recompressing the pixel data. - // This file's header must be compatible with the InputFile's - // header: The two header's "dataWindow", "compression", - // "lineOrder" and "channels" attributes must be the same. - //-------------------------------------------------------------- - - void copyPixels (InputFile &in); - - - //-------------------------------------------------------------- - // Updating the preview image: - // - // updatePreviewImage() supplies a new set of pixels for the - // preview image attribute in the file's header. If the header - // does not contain a preview image, updatePreviewImage() throws - // an Iex::LogicExc. - // - // Note: updatePreviewImage() is necessary because images are - // often stored in a file incrementally, a few scan lines at a - // time, while the image is being generated. Since the preview - // image is an attribute in the file's header, it gets stored in - // the file as soon as the file is opened, but we may not know - // what the preview image should look like until we have written - // the last scan line of the main image. - // - //-------------------------------------------------------------- - - void updatePreviewImage (const PreviewRgba newPixels[]); - - - //--------------------------------------------------------- - // Break a scan line -- for testing and debugging only: - // - // breakScanLine(y,p,n,c) introduces an error into the - // output file by writing n copies of character c, starting - // p bytes from the beginning of the pixel data block that - // contains scan line y. - // - // Warning: Calling this function usually results in a - // broken image file. The file or parts of it may not - // be readable, or the file may contain bad data. - // - //--------------------------------------------------------- - - void breakScanLine (int y, int offset, int length, char c); - - - struct Data; - - private: - - OutputFile (const OutputFile &); // not implemented - OutputFile & operator = (const OutputFile &); // not implemented - - void initialize (const Header &header); - - Data * _data; -}; - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfPixelType.h b/3rdparty/include/OpenEXR/ImfPixelType.h deleted file mode 100644 index 8f504efa2..000000000 --- a/3rdparty/include/OpenEXR/ImfPixelType.h +++ /dev/null @@ -1,61 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_PIXEL_TYPE_H -#define INCLUDED_IMF_PIXEL_TYPE_H - -//----------------------------------------------------------------------------- -// -// enum PixelType -// -//----------------------------------------------------------------------------- - -namespace Imf { - - -enum PixelType -{ - UINT = 0, // unsigned int (32 bit) - HALF = 1, // half (16 bit floating point) - FLOAT = 2, // float (32 bit floating point) - - NUM_PIXELTYPES // number of different pixel types -}; - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfPreviewImage.h b/3rdparty/include/OpenEXR/ImfPreviewImage.h deleted file mode 100644 index d01662039..000000000 --- a/3rdparty/include/OpenEXR/ImfPreviewImage.h +++ /dev/null @@ -1,131 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2003, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_PREVIEW_IMAGE_H -#define INCLUDED_IMF_PREVIEW_IMAGE_H - -//----------------------------------------------------------------------------- -// -// class PreviewImage -- a usually small, low-dynamic range image, -// that is intended to be stored in an image file's header. -// -// struct PreviewRgba -- holds the value of a PreviewImage pixel. -// -//----------------------------------------------------------------------------- - -namespace Imf { - - -struct PreviewRgba -{ - unsigned char r; // Red, green and blue components of - unsigned char g; // the pixel's color; intensity is - unsigned char b; // proportional to pow (x/255, 2.2), - // where x is r, g, or b. - - unsigned char a; // The pixel's alpha; 0 == transparent, - // 255 == opaque. - - PreviewRgba (unsigned char r = 0, - unsigned char g = 0, - unsigned char b = 0, - unsigned char a = 255) - : r(r), g(g), b(b), a(a) {} -}; - - -class PreviewImage -{ - public: - - //-------------------------------------------------------------------- - // Constructor: - // - // PreviewImage(w,h,p) constructs a preview image with w by h pixels - // whose initial values are specified in pixel array p. The x and y - // coordinates of the pixels in p go from 0 to w-1, and from 0 to h-1. - // The pixel with coordinates (x, y) is at address p + y*w + x. - // Pixel (0, 0) is in the upper left corner of the preview image. - // If p is zero, the pixels in the preview image are initialized with - // (r = 0, b = 0, g = 0, a = 255). - // - //-------------------------------------------------------------------- - - PreviewImage (unsigned int width = 0, - unsigned int height = 0, - const PreviewRgba pixels[] = 0); - - //----------------------------------------------------- - // Copy constructor, destructor and assignment operator - //----------------------------------------------------- - - PreviewImage (const PreviewImage &other); - ~PreviewImage (); - - PreviewImage & operator = (const PreviewImage &other); - - - //----------------------------------------------- - // Access to width, height and to the pixel array - //----------------------------------------------- - - unsigned int width () const {return _width;} - unsigned int height () const {return _height;} - - PreviewRgba * pixels () {return _pixels;} - const PreviewRgba * pixels () const {return _pixels;} - - - //---------------------------- - // Access to individual pixels - //---------------------------- - - PreviewRgba & pixel (unsigned int x, unsigned int y) - {return _pixels[y * _width + x];} - - const PreviewRgba & pixel (unsigned int x, unsigned int y) const - {return _pixels[y * _width + x];} - - private: - - unsigned int _width; - unsigned int _height; - PreviewRgba * _pixels; -}; - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfPreviewImageAttribute.h b/3rdparty/include/OpenEXR/ImfPreviewImageAttribute.h deleted file mode 100644 index f08b9b7b9..000000000 --- a/3rdparty/include/OpenEXR/ImfPreviewImageAttribute.h +++ /dev/null @@ -1,71 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_PREVIEW_IMAGE_ATTRIBUTE_H -#define INCLUDED_IMF_PREVIEW_IMAGE_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class PreviewImageAttribute -// -//----------------------------------------------------------------------------- - -#include -#include - - -namespace Imf { - - -typedef TypedAttribute PreviewImageAttribute; - -template <> -const char *PreviewImageAttribute::staticTypeName (); - -template <> -void PreviewImageAttribute::writeValueTo (OStream &, int) const; - -template <> -void PreviewImageAttribute::readValueFrom (IStream &, int, int); - - -} // namespace Imf - -// Metrowerks compiler wants the .cpp file inlined, too -#ifdef __MWERKS__ -#include -#endif - -#endif diff --git a/3rdparty/include/OpenEXR/ImfRgba.h b/3rdparty/include/OpenEXR/ImfRgba.h deleted file mode 100644 index e68cb4b0e..000000000 --- a/3rdparty/include/OpenEXR/ImfRgba.h +++ /dev/null @@ -1,104 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_RGBA_H -#define INCLUDED_IMF_RGBA_H - -//----------------------------------------------------------------------------- -// -// class Rgba -// -//----------------------------------------------------------------------------- - -#include "half.h" - -namespace Imf { - - -// -// RGBA pixel -// - -struct Rgba -{ - half r; - half g; - half b; - half a; - - Rgba () {} - Rgba (half r, half g, half b, half a = 1.f): r (r), g (g), b (b), a (a) {} - - Rgba & operator = (const Rgba &other) - { - r = other.r; - g = other.g; - b = other.b; - a = other.a; - - return *this; - } -}; - - -// -// Channels in an RGBA file -// - -enum RgbaChannels -{ - WRITE_R = 0x01, // Red - WRITE_G = 0x02, // Green - WRITE_B = 0x04, // Blue - WRITE_A = 0x08, // Alpha - - WRITE_Y = 0x10, // Luminance, for black-and-white images, - // or in combination with chroma - - WRITE_C = 0x20, // Chroma (two subsampled channels, RY and BY, - // supported only for scanline-based files) - - WRITE_RGB = 0x07, // Red, green, blue - WRITE_RGBA = 0x0f, // Red, green, blue, alpha - - WRITE_YC = 0x30, // Luminance, chroma - WRITE_YA = 0x18, // Luminance, alpha - WRITE_YCA = 0x38 // Luminance, chroma, alpha -}; - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfRgbaFile.h b/3rdparty/include/OpenEXR/ImfRgbaFile.h deleted file mode 100644 index ff7b07b86..000000000 --- a/3rdparty/include/OpenEXR/ImfRgbaFile.h +++ /dev/null @@ -1,315 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_RGBA_FILE_H -#define INCLUDED_IMF_RGBA_FILE_H - - -//----------------------------------------------------------------------------- -// -// Simplified RGBA image I/O -// -// class RgbaOutputFile -// class RgbaInputFile -// -//----------------------------------------------------------------------------- - -#include -#include -#include -#include "ImathVec.h" -#include "ImathBox.h" -#include "half.h" -#include - -namespace Imf { - - -class OutputFile; -class InputFile; -struct PreviewRgba; - -// -// RGBA output file. -// - -class RgbaOutputFile -{ - public: - - //--------------------------------------------------- - // Constructor -- header is constructed by the caller - //--------------------------------------------------- - - RgbaOutputFile (const char name[], - const Header &header, - RgbaChannels rgbaChannels = WRITE_RGBA, - int numThreads = globalThreadCount()); - - - //---------------------------------------------------- - // Constructor -- header is constructed by the caller, - // file is opened by the caller, destructor will not - // automatically close the file. - //---------------------------------------------------- - - RgbaOutputFile (OStream &os, - const Header &header, - RgbaChannels rgbaChannels = WRITE_RGBA, - int numThreads = globalThreadCount()); - - - //---------------------------------------------------------------- - // Constructor -- header data are explicitly specified as function - // call arguments (empty dataWindow means "same as displayWindow") - //---------------------------------------------------------------- - - RgbaOutputFile (const char name[], - const Imath::Box2i &displayWindow, - const Imath::Box2i &dataWindow = Imath::Box2i(), - RgbaChannels rgbaChannels = WRITE_RGBA, - float pixelAspectRatio = 1, - const Imath::V2f screenWindowCenter = Imath::V2f (0, 0), - float screenWindowWidth = 1, - LineOrder lineOrder = INCREASING_Y, - Compression compression = PIZ_COMPRESSION, - int numThreads = globalThreadCount()); - - - //----------------------------------------------- - // Constructor -- like the previous one, but both - // the display window and the data window are - // Box2i (V2i (0, 0), V2i (width - 1, height -1)) - //----------------------------------------------- - - RgbaOutputFile (const char name[], - int width, - int height, - RgbaChannels rgbaChannels = WRITE_RGBA, - float pixelAspectRatio = 1, - const Imath::V2f screenWindowCenter = Imath::V2f (0, 0), - float screenWindowWidth = 1, - LineOrder lineOrder = INCREASING_Y, - Compression compression = PIZ_COMPRESSION, - int numThreads = globalThreadCount()); - - - //----------- - // Destructor - //----------- - - virtual ~RgbaOutputFile (); - - - //------------------------------------------------ - // Define a frame buffer as the pixel data source: - // Pixel (x, y) is at address - // - // base + x * xStride + y * yStride - // - //------------------------------------------------ - - void setFrameBuffer (const Rgba *base, - size_t xStride, - size_t yStride); - - - //--------------------------------------------- - // Write pixel data (see class Imf::OutputFile) - //--------------------------------------------- - - void writePixels (int numScanLines = 1); - int currentScanLine () const; - - - //-------------------------- - // Access to the file header - //-------------------------- - - const Header & header () const; - const FrameBuffer & frameBuffer () const; - const Imath::Box2i & displayWindow () const; - const Imath::Box2i & dataWindow () const; - float pixelAspectRatio () const; - const Imath::V2f screenWindowCenter () const; - float screenWindowWidth () const; - LineOrder lineOrder () const; - Compression compression () const; - RgbaChannels channels () const; - - - // -------------------------------------------------------------------- - // Update the preview image (see Imf::OutputFile::updatePreviewImage()) - // -------------------------------------------------------------------- - - void updatePreviewImage (const PreviewRgba[]); - - - //----------------------------------------------------------------------- - // Rounding control for luminance/chroma images: - // - // If the output file contains luminance and chroma channels (WRITE_YC - // or WRITE_YCA), then the the significands of the luminance and - // chroma values are rounded to roundY and roundC bits respectively (see - // function half::round()). Rounding improves compression with minimal - // image degradation, usually much less than the degradation caused by - // chroma subsampling. By default, roundY is 7, and roundC is 5. - // - // If the output file contains RGB channels or a luminance channel, - // without chroma, then no rounding is performed. - //----------------------------------------------------------------------- - - void setYCRounding (unsigned int roundY, - unsigned int roundC); - - - //---------------------------------------------------- - // Break a scan line -- for testing and debugging only - // (see Imf::OutputFile::updatePreviewImage() - // - // Warning: Calling this function usually results in a - // broken image file. The file or parts of it may not - // be readable, or the file may contain bad data. - // - //---------------------------------------------------- - - void breakScanLine (int y, - int offset, - int length, - char c); - private: - - RgbaOutputFile (const RgbaOutputFile &); // not implemented - RgbaOutputFile & operator = (const RgbaOutputFile &); // not implemented - - class ToYca; - - OutputFile * _outputFile; - ToYca * _toYca; -}; - - -// -// RGBA input file -// - -class RgbaInputFile -{ - public: - - //------------------------------------------------------- - // Constructor -- opens the file with the specified name, - // destructor will automatically close the file. - //------------------------------------------------------- - - RgbaInputFile (const char name[], int numThreads = globalThreadCount()); - - - //----------------------------------------------------------- - // Constructor -- attaches the new RgbaInputFile object to a - // file that has already been opened by the caller. - // Destroying the RgbaInputFile object will not automatically - // close the file. - //----------------------------------------------------------- - - RgbaInputFile (IStream &is, int numThreads = globalThreadCount()); - - - //----------- - // Destructor - //----------- - - virtual ~RgbaInputFile (); - - //----------------------------------------------------- - // Define a frame buffer as the pixel data destination: - // Pixel (x, y) is at address - // - // base + x * xStride + y * yStride - // - //----------------------------------------------------- - - void setFrameBuffer (Rgba *base, - size_t xStride, - size_t yStride); - - - //------------------------------------------- - // Read pixel data (see class Imf::InputFile) - //------------------------------------------- - - void readPixels (int scanLine1, int scanLine2); - void readPixels (int scanLine); - - - //-------------------------- - // Access to the file header - //-------------------------- - - const Header & header () const; - const FrameBuffer & frameBuffer () const; - const Imath::Box2i & displayWindow () const; - const Imath::Box2i & dataWindow () const; - float pixelAspectRatio () const; - const Imath::V2f screenWindowCenter () const; - float screenWindowWidth () const; - LineOrder lineOrder () const; - Compression compression () const; - RgbaChannels channels () const; - const char * fileName () const; - bool isComplete () const; - - //---------------------------------- - // Access to the file format version - //---------------------------------- - - int version () const; - - private: - - RgbaInputFile (const RgbaInputFile &); // not implemented - RgbaInputFile & operator = (const RgbaInputFile &); // not implemented - - class FromYca; - - InputFile * _inputFile; - FromYca * _fromYca; -}; - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfRgbaYca.h b/3rdparty/include/OpenEXR/ImfRgbaYca.h deleted file mode 100644 index 4a2743ecc..000000000 --- a/3rdparty/include/OpenEXR/ImfRgbaYca.h +++ /dev/null @@ -1,248 +0,0 @@ -#ifndef INCLUDED_IMF_RGBA_YCA_H -#define INCLUDED_IMF_RGBA_YCA_H - -////////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucasfilm -// Entertainment Company Ltd. Portions contributed and copyright held by -// others as indicated. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above -// copyright notice, this list of conditions and the following -// disclaimer. -// -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided with -// the distribution. -// -// * Neither the name of Industrial Light & Magic nor the names of -// any other contributors to this software may be used to endorse or -// promote products derived from this software without specific prior -// written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -////////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// Conversion between RGBA (red, green, blue alpha) -// and YCA (luminance, subsampled chroma, alpha) data: -// -// Luminance, Y, is computed as a weighted sum of R, G, and B: -// -// Y = yw.x * R + yw.y * G + yw.z * B -// -// Function computeYw() computes a set of RGB-to-Y weights, yw, -// from a set of primary and white point chromaticities. -// -// Chroma, C, consists of two components, RY and BY: -// -// RY = (R - Y) / Y -// BY = (B - Y) / Y -// -// For efficiency, the x and y subsampling rates for chroma are -// hardwired to 2, and the chroma subsampling and reconstruction -// filters are fixed 27-pixel wide windowed sinc functions. -// -// Starting with an image that has RGBA data for all pixels, -// -// RGBA RGBA RGBA RGBA ... RGBA RGBA -// RGBA RGBA RGBA RGBA ... RGBA RGBA -// RGBA RGBA RGBA RGBA ... RGBA RGBA -// RGBA RGBA RGBA RGBA ... RGBA RGBA -// ... -// RGBA RGBA RGBA RGBA ... RGBA RGBA -// RGBA RGBA RGBA RGBA ... RGBA RGBA -// -// function RGBAtoYCA() converts the pixels to YCA format: -// -// YCA YCA YCA YCA ... YCA YCA -// YCA YCA YCA YCA ... YCA YCA -// YCA YCA YCA YCA ... YCA YCA -// YCA YCA YCA YCA ... YCA YCA -// ... -// YCA YCA YCA YCA ... YCA YCA -// YCA YCA YCA YCA ... YCA YCA -// -// Next, decimateChomaHoriz() eliminates the chroma values from -// the odd-numbered pixels in every scan line: -// -// YCA YA YCA YA ... YCA YA -// YCA YA YCA YA ... YCA YA -// YCA YA YCA YA ... YCA YA -// YCA YA YCA YA ... YCA YA -// ... -// YCA YA YCA YA ... YCA YA -// YCA YA YCA YA ... YCA YA -// -// decimateChromaVert() eliminates all chroma values from the -// odd-numbered scan lines: -// -// YCA YA YCA YA ... YCA YA -// YA YA YA YA ... YA YA -// YCA YA YCA YA ... YCA YA -// YA YA YA YA ... YA YA -// ... -// YCA YA YCA YA ... YCA YA -// YA YA YA YA ... YA YA -// -// Finally, roundYCA() reduces the precision of the luminance -// and chroma values so that the pixel data shrink more when -// they are saved in a compressed file. -// -// The output of roundYCA() can be converted back to a set -// of RGBA pixel data that is visually very similar to the -// original RGBA image, by calling reconstructChromaHoriz(), -// reconstructChromaVert(), YCAtoRGBA(), and finally -// fixSaturation(). -// -//----------------------------------------------------------------------------- - -#include -#include - -namespace Imf { -namespace RgbaYca { - - -// -// Width of the chroma subsampling and reconstruction filters -// - -static const int N = 27; -static const int N2 = N / 2; - - -// -// Convert a set of primary chromaticities into a set of weighting -// factors for computing a pixels's luminance, Y, from R, G and B -// - -Imath::V3f computeYw (const Chromaticities &cr); - - -// -// Convert an array of n RGBA pixels, rgbaIn, to YCA (luminance/chroma/alpha): -// -// ycaOut[i].g = Y (rgbaIn[i]); -// ycaOut[i].r = RY (rgbaIn[i]); -// ycaOut[i].b = BY (rgbaIn[i]); -// ycaOut[i].a = aIsValid? rgbaIn[i].a: 1 -// -// yw is a set of RGB-to-Y weighting factors, as computed by computeYw(). -// - -void RGBAtoYCA (const Imath::V3f &yw, - int n, - bool aIsValid, - const Rgba rgbaIn[/*n*/], - Rgba ycaOut[/*n*/]); - -// -// Perform horizontal low-pass filtering and subsampling of -// the chroma channels of an array of n pixels. In order -// to avoid indexing off the ends of the input array during -// low-pass filtering, ycaIn must have N2 extra pixels at -// both ends. Before calling decimateChromaHoriz(), the extra -// pixels should be filled with copies of the first and last -// "real" input pixel. -// - -void decimateChromaHoriz (int n, - const Rgba ycaIn[/*n+N-1*/], - Rgba ycaOut[/*n*/]); - -// -// Perform vertical chroma channel low-pass filtering and subsampling. -// N scan lines of input pixels are combined into a single scan line -// of output pixels. -// - -void decimateChromaVert (int n, - const Rgba * const ycaIn[N], - Rgba ycaOut[/*n*/]); - -// -// Round the luminance and chroma channels of an array of YCA -// pixels that has already been filtered and subsampled. -// The signifcands of the pixels' luminance and chroma values -// are rounded to roundY and roundC bits respectively. -// - -void roundYCA (int n, - unsigned int roundY, - unsigned int roundC, - const Rgba ycaIn[/*n*/], - Rgba ycaOut[/*n*/]); - -// -// For a scan line that has valid chroma data only for every other pixel, -// reconstruct the missing chroma values. -// - -void reconstructChromaHoriz (int n, - const Rgba ycaIn[/*n+N-1*/], - Rgba ycaOut[/*n*/]); - -// -// For a scan line that has only luminance and no valid chroma data, -// reconstruct chroma from the surronding N scan lines. -// - -void reconstructChromaVert (int n, - const Rgba * const ycaIn[N], - Rgba ycaOut[/*n*/]); - -// -// Convert an array of n YCA (luminance/chroma/alpha) pixels to RGBA. -// This function is the inverse of RGBAtoYCA(). -// yw is a set of RGB-to-Y weighting factors, as computed by computeYw(). -// - -void YCAtoRGBA (const Imath::V3f &yw, - int n, - const Rgba ycaIn[/*n*/], - Rgba rgbaOut[/*n*/]); - -// -// Eliminate super-saturated pixels: -// -// Converting an image from RGBA to YCA, low-pass filtering chroma, -// and converting the result back to RGBA can produce pixels with -// super-saturated colors, where one or two of the RGB components -// become zero or negative. (The low-pass and reconstruction filters -// introduce some amount of ringing into the chroma components. -// This can lead to negative RGB values near high-contrast edges.) -// -// The fixSaturation() function finds super-saturated pixels and -// corrects them by desaturating their colors while maintaining -// their luminance. fixSaturation() takes three adjacent input -// scan lines, rgbaIn[0], rgbaIn[1], rgbaIn[2], adjusts the -// saturation of rgbaIn[1], and stores the result in rgbaOut. -// - -void fixSaturation (const Imath::V3f &yw, - int n, - const Rgba * const rgbaIn[3], - Rgba rgbaOut[/*n*/]); - -} // namespace RgbaYca -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfStandardAttributes.h b/3rdparty/include/OpenEXR/ImfStandardAttributes.h deleted file mode 100644 index 76e1f9b4b..000000000 --- a/3rdparty/include/OpenEXR/ImfStandardAttributes.h +++ /dev/null @@ -1,251 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_STANDARD_ATTRIBUTES_H -#define INCLUDED_IMF_STANDARD_ATTRIBUTES_H - -//----------------------------------------------------------------------------- -// -// Optional Standard Attributes -- these attributes are "optional" -// because not every image file header has them, but they define a -// "standard" way to represent commonly used data in the file header. -// -// For each attribute, with name "foo", and type "T", the following -// functions are automatically generated via macros: -// -// void addFoo (Header &header, const T &value); -// bool hasFoo (const Header &header); -// const TypedAttribute & fooAttribute (const Header &header); -// TypedAttribute & fooAttribute (Header &header); -// const T & foo (const Header &Header); -// T & foo (Header &Header); -// -//----------------------------------------------------------------------------- - -#include -#include -#include -#include -#include -#include -#include - - -#define IMF_STD_ATTRIBUTE_DEF(name,suffix,type) \ - \ - void add##suffix (Header &header, const type &v); \ - bool has##suffix (const Header &header); \ - const TypedAttribute & name##Attribute (const Header &header); \ - TypedAttribute & name##Attribute (Header &header); \ - const type & name (const Header &header); \ - type & name (Header &header); - - -namespace Imf { - -// -// chromaticities -- for RGB images, specifies the CIE (x,y) -// chromaticities of the primaries and the white point -// - -IMF_STD_ATTRIBUTE_DEF (chromaticities, Chromaticities, Chromaticities) - - -// -// whiteLuminance -- for RGB images, defines the luminance, in Nits -// (candelas per square meter) of the RGB value (1.0, 1.0, 1.0). -// -// If the chromaticities and the whiteLuminance of an RGB image are -// known, then it is possible to convert the image's pixels from RGB -// to CIE XYZ tristimulus values (see function RGBtoXYZ() in header -// file ImfChromaticities.h). -// -// - -IMF_STD_ATTRIBUTE_DEF (whiteLuminance, WhiteLuminance, float) - - -// -// xDensity -- horizontal output density, in pixels per inch. -// The image's vertical output density is xDensity * pixelAspectRatio. -// - -IMF_STD_ATTRIBUTE_DEF (xDensity, XDensity, float) - - -// -// owner -- name of the owner of the image -// - -IMF_STD_ATTRIBUTE_DEF (owner, Owner, std::string) - - -// -// comments -- additional image information in human-readable -// form, for example a verbal description of the image -// - -IMF_STD_ATTRIBUTE_DEF (comments, Comments, std::string) - - -// -// capDate -- the date when the image was created or captured, -// in local time, and formatted as -// -// YYYY:MM:DD hh:mm:ss -// -// where YYYY is the year (4 digits, e.g. 2003), MM is the month -// (2 digits, 01, 02, ... 12), DD is the day of the month (2 digits, -// 01, 02, ... 31), hh is the hour (2 digits, 00, 01, ... 23), mm -// is the minute, and ss is the second (2 digits, 00, 01, ... 59). -// -// - -IMF_STD_ATTRIBUTE_DEF (capDate, CapDate, std::string) - - -// -// utcOffset -- offset of local time at capDate from -// Universal Coordinated Time (UTC), in seconds: -// -// UTC == local time + utcOffset -// - -IMF_STD_ATTRIBUTE_DEF (utcOffset, utcOffset, float) - - -// -// longitude, latitude, altitude -- for images of real objects, the -// location where the image was recorded. Longitude and latitude are -// in degrees east of Greenwich and north of the equator. Altitude -// is in meters above sea level. For example, Kathmandu, Nepal is -// at longitude 85.317, latitude 27.717, altitude 1305. -// - -IMF_STD_ATTRIBUTE_DEF (longitude, Longitude, float) -IMF_STD_ATTRIBUTE_DEF (latitude, Latitude, float) -IMF_STD_ATTRIBUTE_DEF (altitude, Altitude, float) - - -// -// focus -- the camera's focus distance, in meters -// - -IMF_STD_ATTRIBUTE_DEF (focus, Focus, float) - - -// -// exposure -- exposure time, in seconds -// - -IMF_STD_ATTRIBUTE_DEF (expTime, ExpTime, float) - - -// -// aperture -- the camera's lens aperture, in f-stops (focal length -// of the lens divided by the diameter of the iris opening) -// - -IMF_STD_ATTRIBUTE_DEF (aperture, Aperture, float) - - -// -// isoSpeed -- the ISO speed of the film or image sensor -// that was used to record the image -// - -IMF_STD_ATTRIBUTE_DEF (isoSpeed, IsoSpeed, float) - - -// -// envmap -- if this attribute is present, the image represents -// an environment map. The attribute's value defines how 3D -// directions are mapped to 2D pixel locations. For details -// see header file ImfEnvmap.h -// - -IMF_STD_ATTRIBUTE_DEF (envmap, Envmap, Envmap) - - -// -// keyCode -- for motion picture film frames. Identifies film -// manufacturer, film type, film roll and frame position within -// the roll. -// - -IMF_STD_ATTRIBUTE_DEF (keyCode, KeyCode, KeyCode) - - -// -// timeCode -- time and control code -// - -IMF_STD_ATTRIBUTE_DEF (timeCode, TimeCode, TimeCode) - - -// -// wrapmodes -- determines how texture map images are extrapolated. -// If an OpenEXR file is used as a texture map for 3D rendering, -// texture coordinates (0.0, 0.0) and (1.0, 1.0) correspond to -// the upper left and lower right corners of the data window. -// If the image is mapped onto a surface with texture coordinates -// outside the zero-to-one range, then the image must be extrapolated. -// This attribute tells the renderer how to do this extrapolation. -// The attribute contains either a pair of comma-separated keywords, -// to specify separate extrapolation modes for the horizontal and -// vertical directions; or a single keyword, to specify extrapolation -// in both directions (e.g. "clamp,periodic" or "clamp"). Extra white -// space surrounding the keywords is allowed, but should be ignored -// by the renderer ("clamp, black " is equivalent to "clamp,black"). -// The keywords listed below are predefined; some renderers may support -// additional extrapolation modes: -// -// black pixels outside the zero-to-one range are black -// -// clamp texture coordinates less than 0.0 and greater -// than 1.0 are clamped to 0.0 and 1.0 respectively -// -// periodic the texture image repeats periodically -// -// mirror the texture image repeats periodically, but -// every other instance is mirrored -// - -IMF_STD_ATTRIBUTE_DEF (wrapmodes, Wrapmodes, std::string) - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfStdIO.h b/3rdparty/include/OpenEXR/ImfStdIO.h deleted file mode 100644 index 0137b45a1..000000000 --- a/3rdparty/include/OpenEXR/ImfStdIO.h +++ /dev/null @@ -1,156 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_STD_IO_H -#define INCLUDED_IMF_STD_IO_H - -//----------------------------------------------------------------------------- -// -// Low-level file input and output for OpenEXR -// based on C++ standard iostreams. -// -//----------------------------------------------------------------------------- - -#include -#include -#include - -namespace Imf { - -//------------------------------------------- -// class StdIFStream -- an implementation of -// class IStream based on class std::ifstream -//------------------------------------------- - -class StdIFStream: public IStream -{ - public: - - //------------------------------------------------------- - // A constructor that opens the file with the given name. - // The destructor will close the file. - //------------------------------------------------------- - - StdIFStream (const char fileName[]); - - - //--------------------------------------------------------- - // A constructor that uses a std::ifstream that has already - // been opened by the caller. The StdIFStream's destructor - // will not close the std::ifstream. - //--------------------------------------------------------- - - StdIFStream (std::ifstream &is, const char fileName[]); - - - virtual ~StdIFStream (); - - virtual bool read (char c[/*n*/], int n); - virtual Int64 tellg (); - virtual void seekg (Int64 pos); - virtual void clear (); - - private: - - std::ifstream * _is; - bool _deleteStream; -}; - - -//------------------------------------------- -// class StdOFStream -- an implementation of -// class OStream based on class std::ofstream -//------------------------------------------- - -class StdOFStream: public OStream -{ - public: - - //------------------------------------------------------- - // A constructor that opens the file with the given name. - // The destructor will close the file. - //------------------------------------------------------- - - StdOFStream (const char fileName[]); - - - //--------------------------------------------------------- - // A constructor that uses a std::ofstream that has already - // been opened by the caller. The StdOFStream's destructor - // will not close the std::ofstream. - //--------------------------------------------------------- - - StdOFStream (std::ofstream &os, const char fileName[]); - - - virtual ~StdOFStream (); - - virtual void write (const char c[/*n*/], int n); - virtual Int64 tellp (); - virtual void seekp (Int64 pos); - - private: - - std::ofstream * _os; - bool _deleteStream; -}; - - -//------------------------------------------------ -// class StdOSStream -- an implementation of class -// OStream, based on class std::ostringstream -//------------------------------------------------ - -class StdOSStream: public OStream -{ - public: - - StdOSStream (); - - virtual void write (const char c[/*n*/], int n); - virtual Int64 tellp (); - virtual void seekp (Int64 pos); - - std::string str () const {return _os.str();} - - private: - - std::ostringstream _os; -}; - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfStringAttribute.h b/3rdparty/include/OpenEXR/ImfStringAttribute.h deleted file mode 100644 index 3ce76ebb3..000000000 --- a/3rdparty/include/OpenEXR/ImfStringAttribute.h +++ /dev/null @@ -1,66 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_STRING_ATTRIBUTE_H -#define INCLUDED_IMF_STRING_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class StringAttribute -// -//----------------------------------------------------------------------------- - -#include -#include - - -namespace Imf { - - -typedef TypedAttribute StringAttribute; -template <> const char *StringAttribute::staticTypeName (); -template <> void StringAttribute::writeValueTo (OStream &, int) const; -template <> void StringAttribute::readValueFrom (IStream &, int, int); - - -} // namespace Imf - -// Metrowerks compiler wants the .cpp file inlined, too -#ifdef __MWERKS__ -#include -#endif - -#endif diff --git a/3rdparty/include/OpenEXR/ImfTestFile.h b/3rdparty/include/OpenEXR/ImfTestFile.h deleted file mode 100644 index d81c61a78..000000000 --- a/3rdparty/include/OpenEXR/ImfTestFile.h +++ /dev/null @@ -1,63 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_TEST_FILE_H -#define INCLUDED_IMF_TEST_FILE_H - -//----------------------------------------------------------------------------- -// -// Utility routines to test quickly if a given -// file is an OpenEXR file, and whether the -// file is scanline-based or tiled. -// -//----------------------------------------------------------------------------- - - -namespace Imf { - -class IStream; - - -bool isOpenExrFile (const char fileName[], bool &isTiled); -bool isOpenExrFile (const char fileName[]); -bool isTiledOpenExrFile (const char fileName[]); -bool isOpenExrFile (IStream &is, bool &isTiled); -bool isOpenExrFile (IStream &is); -bool isTiledOpenExrFile (IStream &is); - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfThreading.h b/3rdparty/include/OpenEXR/ImfThreading.h deleted file mode 100644 index 50fe35e6b..000000000 --- a/3rdparty/include/OpenEXR/ImfThreading.h +++ /dev/null @@ -1,92 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2005, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_IMF_THREADING_H -#define INCLUDED_IMF_THREADING_H - -//----------------------------------------------------------------------------- -// -// Threading support for the IlmImf library -// -// The IlmImf library uses threads to perform reading and writing -// of OpenEXR files in parallel. The thread that calls the library -// always performs the actual file IO (this is usually the main -// application thread) whereas a several worker threads perform -// data compression and decompression. The number of worker -// threads can be any non-negative value (a value of zero reverts -// to single-threaded operation). As long as there is at least -// one worker thread, file IO and compression can potentially be -// done concurrently through pinelining. If there are two or more -// worker threads, then pipelining as well as concurrent compression -// of multiple blocks can be performed. -// -// Threading in the Imf library is controllable at two granularities: -// -// * The functions in this file query and control the total number -// of worker threads, which will be created globally for the whole -// library. Regardless of how many input or output files are -// opened simultaneously, the library will use at most this number -// of worker threads to perform all work. The default number of -// global worker threads is zero (i.e. single-threaded operation; -// everything happens in the thread that calls the library). -// -// * Furthermore, it is possible to set the number of threads that -// each input or output file should keep busy. This number can -// be explicitly set for each file. The default behavior is for -// each file to try to occupy all worker threads in the library's -// thread pool. -// -//----------------------------------------------------------------------------- - -namespace Imf { - - -//----------------------------------------------------------------------------- -// Return the number of Imf-global worker threads used for parallel -// compression and decompression of OpenEXR files. -//----------------------------------------------------------------------------- - -int globalThreadCount (); - - -//----------------------------------------------------------------------------- -// Change the number of Imf-global worker threads -//----------------------------------------------------------------------------- - -void setGlobalThreadCount (int count); - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfTileDescription.h b/3rdparty/include/OpenEXR/ImfTileDescription.h deleted file mode 100644 index 0e5989057..000000000 --- a/3rdparty/include/OpenEXR/ImfTileDescription.h +++ /dev/null @@ -1,102 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_TILE_DESCRIPTION_H -#define INCLUDED_IMF_TILE_DESCRIPTION_H - -//----------------------------------------------------------------------------- -// -// class TileDescription and enum LevelMode -// -//----------------------------------------------------------------------------- - -namespace Imf { - - -enum LevelMode -{ - ONE_LEVEL = 0, - MIPMAP_LEVELS = 1, - RIPMAP_LEVELS = 2, - - NUM_LEVELMODES // number of different level modes -}; - - -enum LevelRoundingMode -{ - ROUND_DOWN = 0, - ROUND_UP = 1, - - NUM_ROUNDINGMODES // number of different rounding modes -}; - - -class TileDescription -{ - public: - - unsigned int xSize; // size of a tile in the x dimension - unsigned int ySize; // size of a tile in the y dimension - LevelMode mode; - LevelRoundingMode roundingMode; - - TileDescription (unsigned int xs = 32, - unsigned int ys = 32, - LevelMode m = ONE_LEVEL, - LevelRoundingMode r = ROUND_DOWN) - : - xSize (xs), - ySize (ys), - mode (m), - roundingMode (r) - { - // empty - } - - bool - operator == (const TileDescription &other) const - { - return xSize == other.xSize && - ySize == other.ySize && - mode == other.mode && - roundingMode == other.roundingMode; - } -}; - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfTileDescriptionAttribute.h b/3rdparty/include/OpenEXR/ImfTileDescriptionAttribute.h deleted file mode 100644 index 8a7125a78..000000000 --- a/3rdparty/include/OpenEXR/ImfTileDescriptionAttribute.h +++ /dev/null @@ -1,73 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_TILE_DESCRIPTION_ATTRIBUTE_H -#define INCLUDED_IMF_TILE_DESCRIPTION_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class TileDescriptionAttribute -// -//----------------------------------------------------------------------------- - -#include -#include - -namespace Imf { - - -typedef TypedAttribute TileDescriptionAttribute; - -template <> -const char * -TileDescriptionAttribute::staticTypeName (); - -template <> -void -TileDescriptionAttribute::writeValueTo (OStream &, int) const; - -template <> -void -TileDescriptionAttribute::readValueFrom (IStream &, int, int); - - -} // namespace Imf - -// Metrowerks compiler wants the .cpp file inlined, too -#ifdef __MWERKS__ -#include -#endif - -#endif diff --git a/3rdparty/include/OpenEXR/ImfTiledInputFile.h b/3rdparty/include/OpenEXR/ImfTiledInputFile.h deleted file mode 100644 index 13eb84f6f..000000000 --- a/3rdparty/include/OpenEXR/ImfTiledInputFile.h +++ /dev/null @@ -1,381 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_TILED_INPUT_FILE_H -#define INCLUDED_IMF_TILED_INPUT_FILE_H - -//----------------------------------------------------------------------------- -// -// class TiledInputFile -// -//----------------------------------------------------------------------------- - -#include -#include -#include "ImathBox.h" -#include -#include - -namespace Imf { - - -class TiledInputFile -{ - public: - - //-------------------------------------------------------------------- - // A constructor that opens the file with the specified name, and - // reads the file header. The constructor throws an Iex::ArgExc - // exception if the file is not tiled. - // The numThreads parameter specifies how many worker threads this - // file will try to keep busy when decompressing individual tiles. - // Destroying TiledInputFile objects constructed with this constructor - // automatically closes the corresponding files. - //-------------------------------------------------------------------- - - TiledInputFile (const char fileName[], - int numThreads = globalThreadCount ()); - - - // ---------------------------------------------------------- - // A constructor that attaches the new TiledInputFile object - // to a file that has already been opened. - // Destroying TiledInputFile objects constructed with this - // constructor does not automatically close the corresponding - // files. - // ---------------------------------------------------------- - - TiledInputFile (IStream &is, int numThreads = globalThreadCount ()); - - - //----------- - // Destructor - //----------- - - virtual ~TiledInputFile (); - - - //------------------------ - // Access to the file name - //------------------------ - - const char * fileName () const; - - - //-------------------------- - // Access to the file header - //-------------------------- - - const Header & header () const; - - - //---------------------------------- - // Access to the file format version - //---------------------------------- - - int version () const; - - - //----------------------------------------------------------- - // Set the current frame buffer -- copies the FrameBuffer - // object into the TiledInputFile object. - // - // The current frame buffer is the destination for the pixel - // data read from the file. The current frame buffer must be - // set at least once before readTile() is called. - // The current frame buffer can be changed after each call - // to readTile(). - //----------------------------------------------------------- - - void setFrameBuffer (const FrameBuffer &frameBuffer); - - - //----------------------------------- - // Access to the current frame buffer - //----------------------------------- - - const FrameBuffer & frameBuffer () const; - - - //------------------------------------------------------------ - // Check if the file is complete: - // - // isComplete() returns true if all pixels in the data window - // (in all levels) are present in the input file, or false if - // any pixels are missing. (Another program may still be busy - // writing the file, or file writing may have been aborted - // prematurely.) - //------------------------------------------------------------ - - bool isComplete () const; - - - //-------------------------------------------------- - // Utility functions: - //-------------------------------------------------- - - //--------------------------------------------------------- - // Multiresolution mode and tile size: - // The following functions return the xSize, ySize and mode - // fields of the file header's TileDescriptionAttribute. - //--------------------------------------------------------- - - unsigned int tileXSize () const; - unsigned int tileYSize () const; - LevelMode levelMode () const; - LevelRoundingMode levelRoundingMode () const; - - - //-------------------------------------------------------------------- - // Number of levels: - // - // numXLevels() returns the file's number of levels in x direction. - // - // if levelMode() == ONE_LEVEL: - // return value is: 1 - // - // if levelMode() == MIPMAP_LEVELS: - // return value is: rfunc (log (max (w, h)) / log (2)) + 1 - // - // if levelMode() == RIPMAP_LEVELS: - // return value is: rfunc (log (w) / log (2)) + 1 - // - // where - // w is the width of the image's data window, max.x - min.x + 1, - // y is the height of the image's data window, max.y - min.y + 1, - // and rfunc(x) is either floor(x), or ceil(x), depending on - // whether levelRoundingMode() returns ROUND_DOWN or ROUND_UP. - // - // numYLevels() returns the file's number of levels in y direction. - // - // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: - // return value is the same as for numXLevels() - // - // if levelMode() == RIPMAP_LEVELS: - // return value is: rfunc (log (h) / log (2)) + 1 - // - // - // numLevels() is a convenience function for use with - // MIPMAP_LEVELS files. - // - // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: - // return value is the same as for numXLevels() - // - // if levelMode() == RIPMAP_LEVELS: - // an Iex::LogicExc exception is thrown - // - // isValidLevel(lx, ly) returns true if the file contains - // a level with level number (lx, ly), false if not. - // - //-------------------------------------------------------------------- - - int numLevels () const; - int numXLevels () const; - int numYLevels () const; - bool isValidLevel (int lx, int ly) const; - - - //---------------------------------------------------------- - // Dimensions of a level: - // - // levelWidth(lx) returns the width of a level with level - // number (lx, *), where * is any number. - // - // return value is: - // max (1, rfunc (w / pow (2, lx))) - // - // - // levelHeight(ly) returns the height of a level with level - // number (*, ly), where * is any number. - // - // return value is: - // max (1, rfunc (h / pow (2, ly))) - // - //---------------------------------------------------------- - - int levelWidth (int lx) const; - int levelHeight (int ly) const; - - - //-------------------------------------------------------------- - // Number of tiles: - // - // numXTiles(lx) returns the number of tiles in x direction - // that cover a level with level number (lx, *), where * is - // any number. - // - // return value is: - // (levelWidth(lx) + tileXSize() - 1) / tileXSize() - // - // - // numYTiles(ly) returns the number of tiles in y direction - // that cover a level with level number (*, ly), where * is - // any number. - // - // return value is: - // (levelHeight(ly) + tileXSize() - 1) / tileXSize() - // - //-------------------------------------------------------------- - - int numXTiles (int lx = 0) const; - int numYTiles (int ly = 0) const; - - - //--------------------------------------------------------------- - // Level pixel ranges: - // - // dataWindowForLevel(lx, ly) returns a 2-dimensional region of - // valid pixel coordinates for a level with level number (lx, ly) - // - // return value is a Box2i with min value: - // (dataWindow.min.x, dataWindow.min.y) - // - // and max value: - // (dataWindow.min.x + levelWidth(lx) - 1, - // dataWindow.min.y + levelHeight(ly) - 1) - // - // dataWindowForLevel(level) is a convenience function used - // for ONE_LEVEL and MIPMAP_LEVELS files. It returns - // dataWindowForLevel(level, level). - // - //--------------------------------------------------------------- - - Imath::Box2i dataWindowForLevel (int l = 0) const; - Imath::Box2i dataWindowForLevel (int lx, int ly) const; - - - //------------------------------------------------------------------- - // Tile pixel ranges: - // - // dataWindowForTile(dx, dy, lx, ly) returns a 2-dimensional - // region of valid pixel coordinates for a tile with tile coordinates - // (dx,dy) and level number (lx, ly). - // - // return value is a Box2i with min value: - // (dataWindow.min.x + dx * tileXSize(), - // dataWindow.min.y + dy * tileYSize()) - // - // and max value: - // (dataWindow.min.x + (dx + 1) * tileXSize() - 1, - // dataWindow.min.y + (dy + 1) * tileYSize() - 1) - // - // dataWindowForTile(dx, dy, level) is a convenience function - // used for ONE_LEVEL and MIPMAP_LEVELS files. It returns - // dataWindowForTile(dx, dy, level, level). - // - //------------------------------------------------------------------- - - Imath::Box2i dataWindowForTile (int dx, int dy, int l = 0) const; - - Imath::Box2i dataWindowForTile (int dx, int dy, - int lx, int ly) const; - - //------------------------------------------------------------ - // Read pixel data: - // - // readTile(dx, dy, lx, ly) reads the tile with tile - // coordinates (dx, dy), and level number (lx, ly), - // and stores it in the current frame buffer. - // - // dx must lie in the interval [0, numXTiles(lx)-1] - // dy must lie in the interval [0, numYTiles(ly)-1] - // - // lx must lie in the interval [0, numXLevels()-1] - // ly must lie in the inverval [0, numYLevels()-1] - // - // readTile(dx, dy, level) is a convenience function used - // for ONE_LEVEL and MIPMAP_LEVELS files. It calls - // readTile(dx, dy, level, level). - // - // The two readTiles(dx1, dx2, dy1, dy2, ...) functions allow - // reading multiple tiles at once. If multi-threading is used - // the multiple tiles are read concurrently. - // - // Pixels that are outside the pixel coordinate range for the - // tile's level, are never accessed by readTile(). - // - // Attempting to access a tile that is not present in the file - // throws an InputExc exception. - // - //------------------------------------------------------------ - - void readTile (int dx, int dy, int l = 0); - void readTile (int dx, int dy, int lx, int ly); - - void readTiles (int dx1, int dx2, int dy1, int dy2, - int lx, int ly); - - void readTiles (int dx1, int dx2, int dy1, int dy2, - int l = 0); - - - //-------------------------------------------------- - // Read a tile of raw pixel data from the file, - // without uncompressing it (this function is - // used to implement TiledOutputFile::copyPixels()). - //-------------------------------------------------- - - void rawTileData (int &dx, int &dy, - int &lx, int &ly, - const char *&pixelData, - int &pixelDataSize); - - struct Data; - - private: - - friend class InputFile; - - TiledInputFile (const TiledInputFile &); // not implemented - TiledInputFile & operator = (const TiledInputFile &); // not implemented - - TiledInputFile (const Header &header, IStream *is, int version, - int numThreads); - - void initialize (); - - bool isValidTile (int dx, int dy, - int lx, int ly) const; - - size_t bytesPerLineForTile (int dx, int dy, - int lx, int ly) const; - - Data * _data; -}; - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfTiledOutputFile.h b/3rdparty/include/OpenEXR/ImfTiledOutputFile.h deleted file mode 100644 index 3b4f3ffbe..000000000 --- a/3rdparty/include/OpenEXR/ImfTiledOutputFile.h +++ /dev/null @@ -1,475 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_TILED_OUTPUT_FILE_H -#define INCLUDED_IMF_TILED_OUTPUT_FILE_H - -//----------------------------------------------------------------------------- -// -// class TiledOutputFile -// -//----------------------------------------------------------------------------- - -#include -#include -#include "ImathBox.h" -#include -#include - -namespace Imf { - -class TiledInputFile; -class InputFile; -struct PreviewRgba; - - -class TiledOutputFile -{ - public: - - //------------------------------------------------------------------- - // A constructor that opens the file with the specified name, and - // writes the file header. The file header is also copied into the - // TiledOutputFile object, and can later be accessed via the header() - // method. - // - // Destroying TiledOutputFile constructed with this constructor - // automatically closes the corresponding files. - // - // The header must contain a TileDescriptionAttribute called "tiles". - // - // The x and y subsampling factors for all image channels must be 1; - // subsampling is not supported. - // - // Tiles can be written to the file in arbitrary order. The line - // order attribute can be used to cause the tiles to be sorted in - // the file. When the file is read later, reading the tiles in the - // same order as they are in the file tends to be significantly - // faster than reading the tiles in random order (see writeTile, - // below). - //------------------------------------------------------------------- - - TiledOutputFile (const char fileName[], - const Header &header, - int numThreads = globalThreadCount ()); - - - // ---------------------------------------------------------------- - // A constructor that attaches the new TiledOutputFile object to - // a file that has already been opened. Destroying TiledOutputFile - // objects constructed with this constructor does not automatically - // close the corresponding files. - // ---------------------------------------------------------------- - - TiledOutputFile (OStream &os, - const Header &header, - int numThreads = globalThreadCount ()); - - - //----------------------------------------------------- - // Destructor - // - // Destroying a TiledOutputFile object before all tiles - // have been written results in an incomplete file. - //----------------------------------------------------- - - virtual ~TiledOutputFile (); - - - //------------------------ - // Access to the file name - //------------------------ - - const char * fileName () const; - - - //-------------------------- - // Access to the file header - //-------------------------- - - const Header & header () const; - - - //------------------------------------------------------- - // Set the current frame buffer -- copies the FrameBuffer - // object into the TiledOutputFile object. - // - // The current frame buffer is the source of the pixel - // data written to the file. The current frame buffer - // must be set at least once before writeTile() is - // called. The current frame buffer can be changed - // after each call to writeTile(). - //------------------------------------------------------- - - void setFrameBuffer (const FrameBuffer &frameBuffer); - - - //----------------------------------- - // Access to the current frame buffer - //----------------------------------- - - const FrameBuffer & frameBuffer () const; - - - //------------------- - // Utility functions: - //------------------- - - //--------------------------------------------------------- - // Multiresolution mode and tile size: - // The following functions return the xSize, ySize and mode - // fields of the file header's TileDescriptionAttribute. - //--------------------------------------------------------- - - unsigned int tileXSize () const; - unsigned int tileYSize () const; - LevelMode levelMode () const; - LevelRoundingMode levelRoundingMode () const; - - - //-------------------------------------------------------------------- - // Number of levels: - // - // numXLevels() returns the file's number of levels in x direction. - // - // if levelMode() == ONE_LEVEL: - // return value is: 1 - // - // if levelMode() == MIPMAP_LEVELS: - // return value is: rfunc (log (max (w, h)) / log (2)) + 1 - // - // if levelMode() == RIPMAP_LEVELS: - // return value is: rfunc (log (w) / log (2)) + 1 - // - // where - // w is the width of the image's data window, max.x - min.x + 1, - // y is the height of the image's data window, max.y - min.y + 1, - // and rfunc(x) is either floor(x), or ceil(x), depending on - // whether levelRoundingMode() returns ROUND_DOWN or ROUND_UP. - // - // numYLevels() returns the file's number of levels in y direction. - // - // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: - // return value is the same as for numXLevels() - // - // if levelMode() == RIPMAP_LEVELS: - // return value is: rfunc (log (h) / log (2)) + 1 - // - // - // numLevels() is a convenience function for use with MIPMAP_LEVELS - // files. - // - // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: - // return value is the same as for numXLevels() - // - // if levelMode() == RIPMAP_LEVELS: - // an Iex::LogicExc exception is thrown - // - // isValidLevel(lx, ly) returns true if the file contains - // a level with level number (lx, ly), false if not. - // - //-------------------------------------------------------------------- - - int numLevels () const; - int numXLevels () const; - int numYLevels () const; - bool isValidLevel (int lx, int ly) const; - - - //--------------------------------------------------------- - // Dimensions of a level: - // - // levelWidth(lx) returns the width of a level with level - // number (lx, *), where * is any number. - // - // return value is: - // max (1, rfunc (w / pow (2, lx))) - // - // - // levelHeight(ly) returns the height of a level with level - // number (*, ly), where * is any number. - // - // return value is: - // max (1, rfunc (h / pow (2, ly))) - // - //--------------------------------------------------------- - - int levelWidth (int lx) const; - int levelHeight (int ly) const; - - - //---------------------------------------------------------- - // Number of tiles: - // - // numXTiles(lx) returns the number of tiles in x direction - // that cover a level with level number (lx, *), where * is - // any number. - // - // return value is: - // (levelWidth(lx) + tileXSize() - 1) / tileXSize() - // - // - // numYTiles(ly) returns the number of tiles in y direction - // that cover a level with level number (*, ly), where * is - // any number. - // - // return value is: - // (levelHeight(ly) + tileXSize() - 1) / tileXSize() - // - //---------------------------------------------------------- - - int numXTiles (int lx = 0) const; - int numYTiles (int ly = 0) const; - - - //--------------------------------------------------------- - // Level pixel ranges: - // - // dataWindowForLevel(lx, ly) returns a 2-dimensional - // region of valid pixel coordinates for a level with - // level number (lx, ly) - // - // return value is a Box2i with min value: - // (dataWindow.min.x, dataWindow.min.y) - // - // and max value: - // (dataWindow.min.x + levelWidth(lx) - 1, - // dataWindow.min.y + levelHeight(ly) - 1) - // - // dataWindowForLevel(level) is a convenience function used - // for ONE_LEVEL and MIPMAP_LEVELS files. It returns - // dataWindowForLevel(level, level). - // - //--------------------------------------------------------- - - Imath::Box2i dataWindowForLevel (int l = 0) const; - Imath::Box2i dataWindowForLevel (int lx, int ly) const; - - - //------------------------------------------------------------------- - // Tile pixel ranges: - // - // dataWindowForTile(dx, dy, lx, ly) returns a 2-dimensional - // region of valid pixel coordinates for a tile with tile coordinates - // (dx,dy) and level number (lx, ly). - // - // return value is a Box2i with min value: - // (dataWindow.min.x + dx * tileXSize(), - // dataWindow.min.y + dy * tileYSize()) - // - // and max value: - // (dataWindow.min.x + (dx + 1) * tileXSize() - 1, - // dataWindow.min.y + (dy + 1) * tileYSize() - 1) - // - // dataWindowForTile(dx, dy, level) is a convenience function - // used for ONE_LEVEL and MIPMAP_LEVELS files. It returns - // dataWindowForTile(dx, dy, level, level). - // - //------------------------------------------------------------------- - - Imath::Box2i dataWindowForTile (int dx, int dy, - int l = 0) const; - - Imath::Box2i dataWindowForTile (int dx, int dy, - int lx, int ly) const; - - //------------------------------------------------------------------ - // Write pixel data: - // - // writeTile(dx, dy, lx, ly) writes the tile with tile - // coordinates (dx, dy), and level number (lx, ly) to - // the file. - // - // dx must lie in the interval [0, numXTiles(lx) - 1] - // dy must lie in the interval [0, numYTiles(ly) - 1] - // - // lx must lie in the interval [0, numXLevels() - 1] - // ly must lie in the inverval [0, numYLevels() - 1] - // - // writeTile(dx, dy, level) is a convenience function - // used for ONE_LEVEL and MIPMAP_LEVEL files. It calls - // writeTile(dx, dy, level, level). - // - // The two writeTiles(dx1, dx2, dy1, dy2, ...) functions allow - // writing multiple tiles at once. If multi-threading is used - // multiple tiles are written concurrently. The tile coordinates, - // dx1, dx2 and dy1, dy2, specify inclusive ranges of tile - // coordinates. It is valid for dx1 < dx2 or dy1 < dy2; the - // tiles are always written in the order specified by the line - // order attribute. Hence, it is not possible to specify an - // "invalid" or empty tile range. - // - // Pixels that are outside the pixel coordinate range for the tile's - // level, are never accessed by writeTile(). - // - // Each tile in the file must be written exactly once. - // - // The file's line order attribute determines the order of the tiles - // in the file: - // - // INCREASING_Y In the file, the tiles for each level are stored - // in a contiguous block. The levels are ordered - // like this: - // - // (0, 0) (1, 0) ... (nx-1, 0) - // (0, 1) (1, 1) ... (nx-1, 1) - // ... - // (0,ny-1) (1,ny-1) ... (nx-1,ny-1) - // - // where nx = numXLevels(), and ny = numYLevels(). - // In an individual level, (lx, ly), the tiles - // are stored in the following order: - // - // (0, 0) (1, 0) ... (tx-1, 0) - // (0, 1) (1, 1) ... (tx-1, 1) - // ... - // (0,ty-1) (1,ty-1) ... (tx-1,ty-1) - // - // where tx = numXTiles(lx), - // and ty = numYTiles(ly). - // - // DECREASING_Y As for INCREASING_Y, the tiles for each level - // are stored in a contiguous block. The levels - // are ordered the same way as for INCREASING_Y, - // but within an individual level, the tiles - // are stored in this order: - // - // (0,ty-1) (1,ty-1) ... (tx-1,ty-1) - // ... - // (0, 1) (1, 1) ... (tx-1, 1) - // (0, 0) (1, 0) ... (tx-1, 0) - // - // - // RANDOM_Y The order of the calls to writeTile() determines - // the order of the tiles in the file. - // - //------------------------------------------------------------------ - - void writeTile (int dx, int dy, int l = 0); - void writeTile (int dx, int dy, int lx, int ly); - - void writeTiles (int dx1, int dx2, int dy1, int dy2, - int lx, int ly); - - void writeTiles (int dx1, int dx2, int dy1, int dy2, - int l = 0); - - - //------------------------------------------------------------------ - // Shortcut to copy all pixels from a TiledInputFile into this file, - // without uncompressing and then recompressing the pixel data. - // This file's header must be compatible with the TiledInputFile's - // header: The two header's "dataWindow", "compression", - // "lineOrder", "channels", and "tiles" attributes must be the same. - //------------------------------------------------------------------ - - void copyPixels (TiledInputFile &in); - - - //------------------------------------------------------------------ - // Shortcut to copy all pixels from an InputFile into this file, - // without uncompressing and then recompressing the pixel data. - // This file's header must be compatible with the InputFile's - // header: The two header's "dataWindow", "compression", - // "lineOrder", "channels", and "tiles" attributes must be the same. - // - // To use this function, the InputFile must be tiled. - //------------------------------------------------------------------ - - void copyPixels (InputFile &in); - - - //-------------------------------------------------------------- - // Updating the preview image: - // - // updatePreviewImage() supplies a new set of pixels for the - // preview image attribute in the file's header. If the header - // does not contain a preview image, updatePreviewImage() throws - // an Iex::LogicExc. - // - // Note: updatePreviewImage() is necessary because images are - // often stored in a file incrementally, a few tiles at a time, - // while the image is being generated. Since the preview image - // is an attribute in the file's header, it gets stored in the - // file as soon as the file is opened, but we may not know what - // the preview image should look like until we have written the - // last tile of the main image. - // - //-------------------------------------------------------------- - - void updatePreviewImage (const PreviewRgba newPixels[]); - - - //------------------------------------------------------------- - // Break a tile -- for testing and debugging only: - // - // breakTile(dx,dy,lx,ly,p,n,c) introduces an error into the - // output file by writing n copies of character c, starting - // p bytes from the beginning of the tile with tile coordinates - // (dx, dy) and level number (lx, ly). - // - // Warning: Calling this function usually results in a broken - // image file. The file or parts of it may not be readable, - // or the file may contain bad data. - // - //------------------------------------------------------------- - - void breakTile (int dx, int dy, - int lx, int ly, - int offset, - int length, - char c); - struct Data; - - private: - - TiledOutputFile (const TiledOutputFile &); // not implemented - TiledOutputFile & operator = (const TiledOutputFile &); // not implemented - - void initialize (const Header &header); - - bool isValidTile (int dx, int dy, - int lx, int ly) const; - - size_t bytesPerLineForTile (int dx, int dy, - int lx, int ly) const; - - Data * _data; -}; - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfTiledRgbaFile.h b/3rdparty/include/OpenEXR/ImfTiledRgbaFile.h deleted file mode 100644 index 4d7dd7580..000000000 --- a/3rdparty/include/OpenEXR/ImfTiledRgbaFile.h +++ /dev/null @@ -1,453 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_TILED_RGBA_FILE_H -#define INCLUDED_IMF_TILED_RGBA_FILE_H - -//----------------------------------------------------------------------------- -// -// Simplified RGBA image I/O for tiled files -// -// class TiledRgbaOutputFile -// class TiledRgbaInputFile -// -//----------------------------------------------------------------------------- - -#include -#include -#include "ImathVec.h" -#include "ImathBox.h" -#include "half.h" -#include -#include -#include - -namespace Imf { - -class TiledOutputFile; -class TiledInputFile; -struct PreviewRgba; - - -// -// Tiled RGBA output file. -// - -class TiledRgbaOutputFile -{ - public: - - //--------------------------------------------------- - // Constructor -- rgbaChannels, tileXSize, tileYSize, - // levelMode, and levelRoundingMode overwrite the - // channel list and tile description attribute in the - // header that is passed as an argument to the - // constructor. - //--------------------------------------------------- - - TiledRgbaOutputFile (const char name[], - const Header &header, - RgbaChannels rgbaChannels, - int tileXSize, - int tileYSize, - LevelMode mode, - LevelRoundingMode rmode = ROUND_DOWN, - int numThreads = globalThreadCount ()); - - - //--------------------------------------------------- - // Constructor -- like the previous one, but the new - // TiledRgbaOutputFile is attached to a file that has - // already been opened by the caller. Destroying - // TiledRgbaOutputFileObjects constructed with this - // constructor does not automatically close the - // corresponding files. - //--------------------------------------------------- - - TiledRgbaOutputFile (OStream &os, - const Header &header, - RgbaChannels rgbaChannels, - int tileXSize, - int tileYSize, - LevelMode mode, - LevelRoundingMode rmode = ROUND_DOWN, - int numThreads = globalThreadCount ()); - - - //------------------------------------------------------ - // Constructor -- header data are explicitly specified - // as function call arguments (an empty dataWindow means - // "same as displayWindow") - //------------------------------------------------------ - - TiledRgbaOutputFile (const char name[], - int tileXSize, - int tileYSize, - LevelMode mode, - LevelRoundingMode rmode, - const Imath::Box2i &displayWindow, - const Imath::Box2i &dataWindow = Imath::Box2i(), - RgbaChannels rgbaChannels = WRITE_RGBA, - float pixelAspectRatio = 1, - const Imath::V2f screenWindowCenter = - Imath::V2f (0, 0), - float screenWindowWidth = 1, - LineOrder lineOrder = INCREASING_Y, - Compression compression = ZIP_COMPRESSION, - int numThreads = globalThreadCount ()); - - - //----------------------------------------------- - // Constructor -- like the previous one, but both - // the display window and the data window are - // Box2i (V2i (0, 0), V2i (width - 1, height -1)) - //----------------------------------------------- - - TiledRgbaOutputFile (const char name[], - int width, - int height, - int tileXSize, - int tileYSize, - LevelMode mode, - LevelRoundingMode rmode = ROUND_DOWN, - RgbaChannels rgbaChannels = WRITE_RGBA, - float pixelAspectRatio = 1, - const Imath::V2f screenWindowCenter = - Imath::V2f (0, 0), - float screenWindowWidth = 1, - LineOrder lineOrder = INCREASING_Y, - Compression compression = ZIP_COMPRESSION, - int numThreads = globalThreadCount ()); - - - virtual ~TiledRgbaOutputFile (); - - - //------------------------------------------------ - // Define a frame buffer as the pixel data source: - // Pixel (x, y) is at address - // - // base + x * xStride + y * yStride - // - //------------------------------------------------ - - void setFrameBuffer (const Rgba *base, - size_t xStride, - size_t yStride); - - //-------------------------- - // Access to the file header - //-------------------------- - - const Header & header () const; - const FrameBuffer & frameBuffer () const; - const Imath::Box2i & displayWindow () const; - const Imath::Box2i & dataWindow () const; - float pixelAspectRatio () const; - const Imath::V2f screenWindowCenter () const; - float screenWindowWidth () const; - LineOrder lineOrder () const; - Compression compression () const; - RgbaChannels channels () const; - - - //---------------------------------------------------- - // Utility functions (same as in Imf::TiledOutputFile) - //---------------------------------------------------- - - unsigned int tileXSize () const; - unsigned int tileYSize () const; - LevelMode levelMode () const; - LevelRoundingMode levelRoundingMode () const; - - int numLevels () const; - int numXLevels () const; - int numYLevels () const; - bool isValidLevel (int lx, int ly) const; - - int levelWidth (int lx) const; - int levelHeight (int ly) const; - - int numXTiles (int lx = 0) const; - int numYTiles (int ly = 0) const; - - Imath::Box2i dataWindowForLevel (int l = 0) const; - Imath::Box2i dataWindowForLevel (int lx, int ly) const; - - Imath::Box2i dataWindowForTile (int dx, int dy, - int l = 0) const; - - Imath::Box2i dataWindowForTile (int dx, int dy, - int lx, int ly) const; - - //------------------------------------------------------------------ - // Write pixel data: - // - // writeTile(dx, dy, lx, ly) writes the tile with tile - // coordinates (dx, dy), and level number (lx, ly) to - // the file. - // - // dx must lie in the interval [0, numXTiles(lx)-1] - // dy must lie in the interval [0, numYTiles(ly)-1] - // - // lx must lie in the interval [0, numXLevels()-1] - // ly must lie in the inverval [0, numYLevels()-1] - // - // writeTile(dx, dy, level) is a convenience function - // used for ONE_LEVEL and MIPMAP_LEVEL files. It calls - // writeTile(dx, dy, level, level). - // - // The two writeTiles(dx1, dx2, dy1, dy2, ...) functions allow - // writing multiple tiles at once. If multi-threading is used - // multiple tiles are written concurrently. - // - // Pixels that are outside the pixel coordinate range for the tile's - // level, are never accessed by writeTile(). - // - // Each tile in the file must be written exactly once. - // - //------------------------------------------------------------------ - - void writeTile (int dx, int dy, int l = 0); - void writeTile (int dx, int dy, int lx, int ly); - - void writeTiles (int dxMin, int dxMax, int dyMin, int dyMax, - int lx, int ly); - - void writeTiles (int dxMin, int dxMax, int dyMin, int dyMax, - int l = 0); - - - // ------------------------------------------------------------------------- - // Update the preview image (see Imf::TiledOutputFile::updatePreviewImage()) - // ------------------------------------------------------------------------- - - void updatePreviewImage (const PreviewRgba[]); - - - //------------------------------------------------ - // Break a tile -- for testing and debugging only - // (see Imf::TiledOutputFile::breakTile()) - // - // Warning: Calling this function usually results - // in a broken image file. The file or parts of - // it may not be readable, or the file may contain - // bad data. - // - //------------------------------------------------ - - void breakTile (int dx, int dy, - int lx, int ly, - int offset, - int length, - char c); - private: - - // - // Copy constructor and assignment are not implemented - // - - TiledRgbaOutputFile (const TiledRgbaOutputFile &); - TiledRgbaOutputFile & operator = (const TiledRgbaOutputFile &); - - class ToYa; - - TiledOutputFile * _outputFile; - ToYa * _toYa; -}; - - - -// -// Tiled RGBA input file -// - -class TiledRgbaInputFile -{ - public: - - //-------------------------------------------------------- - // Constructor -- opens the file with the specified name. - // Destroying TiledRgbaInputFile objects constructed with - // this constructor automatically closes the corresponding - // files. - //-------------------------------------------------------- - - TiledRgbaInputFile (const char name[], - int numThreads = globalThreadCount ()); - - - //------------------------------------------------------- - // Constructor -- attaches the new TiledRgbaInputFile - // object to a file that has already been opened by the - // caller. - // Destroying TiledRgbaInputFile objects constructed with - // this constructor does not automatically close the - // corresponding files. - //------------------------------------------------------- - - TiledRgbaInputFile (IStream &is, int numThreads = globalThreadCount ()); - - - //----------- - // Destructor - //----------- - - virtual ~TiledRgbaInputFile (); - - - //----------------------------------------------------- - // Define a frame buffer as the pixel data destination: - // Pixel (x, y) is at address - // - // base + x * xStride + y * yStride - // - //----------------------------------------------------- - - void setFrameBuffer (Rgba *base, - size_t xStride, - size_t yStride); - - //-------------------------- - // Access to the file header - //-------------------------- - - const Header & header () const; - const FrameBuffer & frameBuffer () const; - const Imath::Box2i & displayWindow () const; - const Imath::Box2i & dataWindow () const; - float pixelAspectRatio () const; - const Imath::V2f screenWindowCenter () const; - float screenWindowWidth () const; - LineOrder lineOrder () const; - Compression compression () const; - RgbaChannels channels () const; - const char * fileName () const; - bool isComplete () const; - - //---------------------------------- - // Access to the file format version - //---------------------------------- - - int version () const; - - - //--------------------------------------------------- - // Utility functions (same as in Imf::TiledInputFile) - //--------------------------------------------------- - - unsigned int tileXSize () const; - unsigned int tileYSize () const; - LevelMode levelMode () const; - LevelRoundingMode levelRoundingMode () const; - - int numLevels () const; - int numXLevels () const; - int numYLevels () const; - bool isValidLevel (int lx, int ly) const; - - int levelWidth (int lx) const; - int levelHeight (int ly) const; - - int numXTiles (int lx = 0) const; - int numYTiles (int ly = 0) const; - - Imath::Box2i dataWindowForLevel (int l = 0) const; - Imath::Box2i dataWindowForLevel (int lx, int ly) const; - - Imath::Box2i dataWindowForTile (int dx, int dy, - int l = 0) const; - - Imath::Box2i dataWindowForTile (int dx, int dy, - int lx, int ly) const; - - - //---------------------------------------------------------------- - // Read pixel data: - // - // readTile(dx, dy, lx, ly) reads the tile with tile - // coordinates (dx, dy), and level number (lx, ly), - // and stores it in the current frame buffer. - // - // dx must lie in the interval [0, numXTiles(lx)-1] - // dy must lie in the interval [0, numYTiles(ly)-1] - // - // lx must lie in the interval [0, numXLevels()-1] - // ly must lie in the inverval [0, numYLevels()-1] - // - // readTile(dx, dy, level) is a convenience function used - // for ONE_LEVEL and MIPMAP_LEVELS files. It calls - // readTile(dx, dy, level, level). - // - // The two readTiles(dx1, dx2, dy1, dy2, ...) functions allow - // reading multiple tiles at once. If multi-threading is used - // multiple tiles are read concurrently. - // - // Pixels that are outside the pixel coordinate range for the - // tile's level, are never accessed by readTile(). - // - // Attempting to access a tile that is not present in the file - // throws an InputExc exception. - // - //---------------------------------------------------------------- - - void readTile (int dx, int dy, int l = 0); - void readTile (int dx, int dy, int lx, int ly); - - void readTiles (int dxMin, int dxMax, - int dyMin, int dyMax, int lx, int ly); - - void readTiles (int dxMin, int dxMax, - int dyMin, int dyMax, int l = 0); - - private: - - // - // Copy constructor and assignment are not implemented - // - - TiledRgbaInputFile (const TiledRgbaInputFile &); - TiledRgbaInputFile & operator = (const TiledRgbaInputFile &); - - class FromYa; - - TiledInputFile * _inputFile; - FromYa * _fromYa; -}; - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfTimeCode.h b/3rdparty/include/OpenEXR/ImfTimeCode.h deleted file mode 100644 index 3030d4935..000000000 --- a/3rdparty/include/OpenEXR/ImfTimeCode.h +++ /dev/null @@ -1,226 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_TIME_CODE_H -#define INCLUDED_IMF_TIME_CODE_H - -//----------------------------------------------------------------------------- -// -// class TimeCode -// -// A TimeCode object stores time and control codes as described -// in SMPTE standard 12M-1999. A TimeCode object contains the -// following fields: -// -// Time Address: -// -// hours integer, range 0 - 23 -// minutes integer, range 0 - 59 -// seconds integer, range 0 - 59 -// frame integer, range 0 - 29 -// -// Flags: -// -// drop frame flag boolean -// color frame flag boolean -// field/phase flag boolean -// bgf0 boolean -// bgf1 boolean -// bgf2 boolean -// -// Binary groups for user-defined data and control codes: -// -// binary group 1 integer, range 0 - 15 -// binary group 2 integer, range 0 - 15 -// ... -// binary group 8 integer, range 0 - 15 -// -// Class TimeCode contains methods to convert between the fields -// listed above and a more compact representation where the fields -// are packed into two unsigned 32-bit integers. In the packed -// integer representations, bit 0 is the least significant bit, -// and bit 31 is the most significant bit of the integer value. -// -// The time address and flags fields can be packed in three -// different ways: -// -// bits packing for packing for packing for -// 24-frame 60-field 50-field -// film television television -// -// 0 - 3 frame units frame units frame units -// 4 - 5 frame tens frame tens frame tens -// 6 unused, set to 0 drop frame flag unused, set to 0 -// 7 unused, set to 0 color frame flag color frame flag -// 8 - 11 seconds units seconds units seconds units -// 12 - 14 seconds tens seconds tens seconds tens -// 15 phase flag field/phase flag bgf0 -// 16 - 19 minutes units minutes units minutes units -// 20 - 22 minutes tens minutes tens minutes tens -// 23 bgf0 bgf0 bgf2 -// 24 - 27 hours units hours units hours units -// 28 - 29 hours tens hours tens hours tens -// 30 bgf1 bgf1 bgf1 -// 31 bgf2 bgf2 field/phase flag -// -// User-defined data and control codes are packed as follows: -// -// bits field -// -// 0 - 3 binary group 1 -// 4 - 7 binary group 2 -// 8 - 11 binary group 3 -// 12 - 15 binary group 4 -// 16 - 19 binary group 5 -// 20 - 23 binary group 6 -// 24 - 27 binary group 7 -// 28 - 31 binary group 8 -// -//----------------------------------------------------------------------------- - -namespace Imf { - - -class TimeCode -{ - public: - - //--------------------- - // Bit packing variants - //--------------------- - - enum Packing - { - TV60_PACKING, // packing for 60-field television - TV50_PACKING, // packing for 50-field television - FILM24_PACKING // packing for 24-frame film - }; - - - //------------------------------------- - // Constructors and assignment operator - //------------------------------------- - - TimeCode (); // all fields set to 0 or false - - TimeCode (int hours, - int minutes, - int seconds, - int frame, - bool dropFrame = false, - bool colorFrame = false, - bool fieldPhase = false, - bool bgf0 = false, - bool bgf1 = false, - bool bgf2 = false, - int binaryGroup1 = 0, - int binaryGroup2 = 0, - int binaryGroup3 = 0, - int binaryGroup4 = 0, - int binaryGroup5 = 0, - int binaryGroup6 = 0, - int binaryGroup7 = 0, - int binaryGroup8 = 0); - - TimeCode (unsigned int timeAndFlags, - unsigned int userData = 0, - Packing packing = TV60_PACKING); - - TimeCode (const TimeCode &other); - - TimeCode & operator = (const TimeCode &other); - - - //---------------------------- - // Access to individual fields - //---------------------------- - - int hours () const; - void setHours (int value); - - int minutes () const; - void setMinutes (int value); - - int seconds () const; - void setSeconds (int value); - - int frame () const; - void setFrame (int value); - - bool dropFrame () const; - void setDropFrame (bool value); - - bool colorFrame () const; - void setColorFrame (bool value); - - bool fieldPhase () const; - void setFieldPhase (bool value); - - bool bgf0 () const; - void setBgf0 (bool value); - - bool bgf1 () const; - void setBgf1 (bool value); - - bool bgf2 () const; - void setBgf2 (bool value); - - int binaryGroup (int group) const; // group must be between 1 and 8 - void setBinaryGroup (int group, int value); - - - //--------------------------------- - // Access to packed representations - //--------------------------------- - - unsigned int timeAndFlags (Packing packing = TV60_PACKING) const; - - void setTimeAndFlags (unsigned int value, - Packing packing = TV60_PACKING); - - unsigned int userData () const; - - void setUserData (unsigned int value); - - private: - - unsigned int _time; - unsigned int _user; -}; - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfTimeCodeAttribute.h b/3rdparty/include/OpenEXR/ImfTimeCodeAttribute.h deleted file mode 100644 index 3d548fa10..000000000 --- a/3rdparty/include/OpenEXR/ImfTimeCodeAttribute.h +++ /dev/null @@ -1,72 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_TIME_CODE_ATTRIBUTE_H -#define INCLUDED_IMF_TIME_CODE_ATTRIBUTE_H - - -//----------------------------------------------------------------------------- -// -// class TimeCodeAttribute -// -//----------------------------------------------------------------------------- - -#include -#include - - -namespace Imf { - - -typedef TypedAttribute TimeCodeAttribute; - -template <> -const char *TimeCodeAttribute::staticTypeName (); - -template <> -void TimeCodeAttribute::writeValueTo (OStream &, int) const; - -template <> -void TimeCodeAttribute::readValueFrom (IStream &, int, int); - - -} // namespace Imf - -// Metrowerks compiler wants the .cpp file inlined, too -#ifdef __MWERKS__ -#include -#endif - -#endif diff --git a/3rdparty/include/OpenEXR/ImfVecAttribute.h b/3rdparty/include/OpenEXR/ImfVecAttribute.h deleted file mode 100644 index ba13f8648..000000000 --- a/3rdparty/include/OpenEXR/ImfVecAttribute.h +++ /dev/null @@ -1,87 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_VEC_ATTRIBUTE_H -#define INCLUDED_IMF_VEC_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class V2iAttribute -// class V2fAttribute -// class V3iAttribute -// class V3fAttribute -// -//----------------------------------------------------------------------------- - -#include -#include "ImathVec.h" - - -namespace Imf { - - -typedef TypedAttribute V2iAttribute; -template <> const char *V2iAttribute::staticTypeName (); -template <> void V2iAttribute::writeValueTo (OStream &, int) const; -template <> void V2iAttribute::readValueFrom (IStream &, int, int); - - -typedef TypedAttribute V2fAttribute; -template <> const char *V2fAttribute::staticTypeName (); -template <> void V2fAttribute::writeValueTo (OStream &, int) const; -template <> void V2fAttribute::readValueFrom (IStream &, int, int); - - -typedef TypedAttribute V3iAttribute; -template <> const char *V3iAttribute::staticTypeName (); -template <> void V3iAttribute::writeValueTo (OStream &, int) const; -template <> void V3iAttribute::readValueFrom (IStream &, int, int); - - -typedef TypedAttribute V3fAttribute; -template <> const char *V3fAttribute::staticTypeName (); -template <> void V3fAttribute::writeValueTo (OStream &, int) const; -template <> void V3fAttribute::readValueFrom (IStream &, int, int); - - -} // namespace Imf - -// Metrowerks compiler wants the .cpp file inlined, too -#ifdef __MWERKS__ -#include -#endif - -#endif diff --git a/3rdparty/include/OpenEXR/ImfVersion.h b/3rdparty/include/OpenEXR/ImfVersion.h deleted file mode 100644 index 76f0d8437..000000000 --- a/3rdparty/include/OpenEXR/ImfVersion.h +++ /dev/null @@ -1,117 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_VERSION_H -#define INCLUDED_IMF_VERSION_H - -//----------------------------------------------------------------------------- -// -// Magic and version number. -// -//----------------------------------------------------------------------------- - - -namespace Imf { - - -// -// The MAGIC number is stored in the first four bytes of every -// OpenEXR image file. This can be used to quickly test whether -// a given file is an OpenEXR image file (see isImfMagic(), below). -// - -const int MAGIC = 20000630; - - -// -// The second item in each OpenEXR image file, right after the -// magic number, is a four-byte file version identifier. Depending -// on a file's version identifier, a file reader can enable various -// backwards-compatibility switches, or it can quickly reject files -// that it cannot read. -// -// The version identifier is split into an 8-bit version number, -// and a 24-bit flags field. -// - -const int VERSION_NUMBER_FIELD = 0x000000ff; -const int VERSION_FLAGS_FIELD = 0xffffff00; - - -// -// Value that goes into VERSION_NUMBER_FIELD. -// - -const int EXR_VERSION = 2; - - -// -// Flags that can go into VERSION_FLAGS_FIELD. -// Flags can only occupy the 1 bits in VERSION_FLAGS_FIELD. -// - -const int TILED_FLAG = 0x00000200; - - -// -// Bitwise OR of all known flags. -// - -const int ALL_FLAGS = TILED_FLAG; - - -// -// Utility functions -// - -inline bool isTiled (int version) {return !!(version & TILED_FLAG);} -inline int makeTiled (int version) {return version | TILED_FLAG;} -inline int makeNotTiled (int version) {return version & ~TILED_FLAG;} -inline int getVersion (int version) {return version & VERSION_NUMBER_FIELD;} -inline int getFlags (int version) {return version & VERSION_FLAGS_FIELD;} -inline bool supportsFlags (int flags) {return !(flags & ~ALL_FLAGS);} - - -// -// Given the first four bytes of a file, returns true if the -// file is probably an OpenEXR image file, false if not. -// - -bool isImfMagic (const char bytes[4]); - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfWav.h b/3rdparty/include/OpenEXR/ImfWav.h deleted file mode 100644 index 815d2d57c..000000000 --- a/3rdparty/include/OpenEXR/ImfWav.h +++ /dev/null @@ -1,70 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_WAV_H -#define INCLUDED_IMF_WAV_H - -//----------------------------------------------------------------------------- -// -// 16-bit Haar Wavelet encoding and decoding -// -//----------------------------------------------------------------------------- - -namespace Imf { - - -void -wav2Encode - (unsigned short *in, // io: values in[y][x] are transformed in place - int nx, // i : x size - int ox, // i : x offset - int ny, // i : y size - int oy, // i : y offset - unsigned short mx); // i : maximum in[x][y] value - -void -wav2Decode - (unsigned short *in, // io: values in[y][x] are transformed in place - int nx, // i : x size - int ox, // i : x offset - int ny, // i : y size - int oy, // i : y offset - unsigned short mx); // i : maximum in[x][y] value - - -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/ImfXdr.h b/3rdparty/include/OpenEXR/ImfXdr.h deleted file mode 100644 index 7992921bb..000000000 --- a/3rdparty/include/OpenEXR/ImfXdr.h +++ /dev/null @@ -1,916 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_XDR_H -#define INCLUDED_IMF_XDR_H - -//---------------------------------------------------------------------------- -// -// Xdr -- routines to convert data between the machine's native -// format and a machine-independent external data representation: -// -// write (T &o, S v); converts a value, v, of type S -// into a machine-independent -// representation and stores the -// result in an output buffer, o. -// -// read (T &i, S &v); reads the machine-independent -// representation of a value of type -// S from input buffer i, converts -// the value into the machine's native -// representation, and stores the result -// in v. -// -// size(); returns the size, in bytes, of the -// machine-independent representation -// of an object of type S. -// -// The write() and read() routines are templates; data can be written -// to and read from any output or input buffer type T for which a helper -// class, R, exits. Class R must define a method to store a char array -// in a T, and a method to read a char array from a T: -// -// struct R -// { -// static void -// writeChars (T &o, const char c[/*n*/], int n) -// { -// ... // Write c[0], c[1] ... c[n-1] to output buffer o. -// } -// -// static void -// readChars (T &i, char c[/*n*/], int n) -// { -// ... // Read n characters from input buffer i -// // and copy them to c[0], c[1] ... c[n-1]. -// } -// }; -// -// Example - writing to and reading from iostreams: -// -// struct CharStreamIO -// { -// static void -// writeChars (ostream &os, const char c[], int n) -// { -// os.write (c, n); -// } -// -// static void -// readChars (istream &is, char c[], int n) -// { -// is.read (c, n); -// } -// }; -// -// ... -// -// Xdr::write (os, 3); -// Xdr::write (os, 5.0); -// -//---------------------------------------------------------------------------- - -#include -#include "IexMathExc.h" -#include "half.h" -#include - -namespace Imf { -namespace Xdr { - - -//------------------------------- -// Write data to an output stream -//------------------------------- - -template -void -write (T &out, bool v); - -template -void -write (T &out, char v); - -template -void -write (T &out, signed char v); - -template -void -write (T &out, unsigned char v); - -template -void -write (T &out, signed short v); - -template -void -write (T &out, unsigned short v); - -template -void -write (T &out, signed int v); - -template -void -write (T &out, unsigned int v); - -template -void -write (T &out, signed long v); - -template -void -write (T &out, unsigned long v); - -#if ULONG_MAX != 18446744073709551615LU - - template - void - write (T &out, Int64 v); - -#endif - -template -void -write (T &out, float v); - -template -void -write (T &out, double v); - -template -void -write (T &out, half v); - -template -void -write (T &out, const char v[/*n*/], int n); // fixed-size char array - -template -void -write (T &out, const char v[]); // zero-terminated string - - -//----------------------------------------- -// Append padding bytes to an output stream -//----------------------------------------- - -template -void -pad (T &out, int n); // write n padding bytes - - - -//------------------------------- -// Read data from an input stream -//------------------------------- - -template -void -read (T &in, bool &v); - -template -void -read (T &in, char &v); - -template -void -read (T &in, signed char &v); - -template -void -read (T &in, unsigned char &v); - -template -void -read (T &in, signed short &v); - -template -void -read (T &in, unsigned short &v); - -template -void -read (T &in, signed int &v); - -template -void -read (T &in, unsigned int &v); - -template -void -read (T &in, signed long &v); - -template -void -read (T &in, unsigned long &v); - -#if ULONG_MAX != 18446744073709551615LU - - template - void - read (T &in, Int64 &v); - -#endif - -template -void -read (T &in, float &v); - -template -void -read (T &in, double &v); - -template -void -read (T &in, half &v); - -template -void -read (T &in, char v[/*n*/], int n); // fixed-size char array - -template -void -read (T &in, int n, char v[/*n*/]); // zero-terminated string - - -//------------------------------------------- -// Skip over padding bytes in an input stream -//------------------------------------------- - -template -void -skip (T &in, int n); // skip n padding bytes - - - -//-------------------------------------- -// Size of the machine-independent -// representation of an object of type S -//-------------------------------------- - -template -int -size (); - - -//--------------- -// Implementation -//--------------- - -template -inline void -writeSignedChars (T &out, const signed char c[], int n) -{ - S::writeChars (out, (const char *) c, n); -} - - -template -inline void -writeUnsignedChars (T &out, const unsigned char c[], int n) -{ - S::writeChars (out, (const char *) c, n); -} - - -template -inline void -readSignedChars (T &in, signed char c[], int n) -{ - S::readChars (in, (char *) c, n); -} - - -template -inline void -readUnsignedChars (T &in, unsigned char c[], int n) -{ - S::readChars (in, (char *) c, n); -} - - -template -inline void -write (T &out, bool v) -{ - char c = !!v; - S::writeChars (out, &c, 1); -} - - -template -inline void -write (T &out, char v) -{ - S::writeChars (out, &v, 1); -} - - -template -inline void -write (T &out, signed char v) -{ - writeSignedChars (out, &v, 1); -} - - -template -inline void -write (T &out, unsigned char v) -{ - writeUnsignedChars (out, &v, 1); -} - - -template -void -write (T &out, signed short v) -{ - signed char b[2]; - - b[0] = (signed char) (v); - b[1] = (signed char) (v >> 8); - - writeSignedChars (out, b, 2); -} - - -template -void -write (T &out, unsigned short v) -{ - unsigned char b[2]; - - b[0] = (unsigned char) (v); - b[1] = (unsigned char) (v >> 8); - - writeUnsignedChars (out, b, 2); -} - - -template -void -write (T &out, signed int v) -{ - signed char b[4]; - - b[0] = (signed char) (v); - b[1] = (signed char) (v >> 8); - b[2] = (signed char) (v >> 16); - b[3] = (signed char) (v >> 24); - - writeSignedChars (out, b, 4); -} - - -template -void -write (T &out, unsigned int v) -{ - unsigned char b[4]; - - b[0] = (unsigned char) (v); - b[1] = (unsigned char) (v >> 8); - b[2] = (unsigned char) (v >> 16); - b[3] = (unsigned char) (v >> 24); - - writeUnsignedChars (out, b, 4); -} - - -template -void -write (T &out, signed long v) -{ - signed char b[8]; - - b[0] = (signed char) (v); - b[1] = (signed char) (v >> 8); - b[2] = (signed char) (v >> 16); - b[3] = (signed char) (v >> 24); - - #if LONG_MAX == 2147483647 - - if (v >= 0) - { - b[4] = 0; - b[5] = 0; - b[6] = 0; - b[7] = 0; - } - else - { - b[4] = ~0; - b[5] = ~0; - b[6] = ~0; - b[7] = ~0; - } - - #elif LONG_MAX == 9223372036854775807L - - b[4] = (signed char) (v >> 32); - b[5] = (signed char) (v >> 40); - b[6] = (signed char) (v >> 48); - b[7] = (signed char) (v >> 56); - - #else - - #error write (T &out, signed long v) not implemented - - #endif - - writeSignedChars (out, b, 8); -} - - -template -void -write (T &out, unsigned long v) -{ - unsigned char b[8]; - - b[0] = (unsigned char) (v); - b[1] = (unsigned char) (v >> 8); - b[2] = (unsigned char) (v >> 16); - b[3] = (unsigned char) (v >> 24); - - #if ULONG_MAX == 4294967295U - - b[4] = 0; - b[5] = 0; - b[6] = 0; - b[7] = 0; - - #elif ULONG_MAX == 18446744073709551615LU - - b[4] = (unsigned char) (v >> 32); - b[5] = (unsigned char) (v >> 40); - b[6] = (unsigned char) (v >> 48); - b[7] = (unsigned char) (v >> 56); - - #else - - #error write (T &out, unsigned long v) not implemented - - #endif - - writeUnsignedChars (out, b, 8); -} - - -#if ULONG_MAX != 18446744073709551615LU - - template - void - write (T &out, Int64 v) - { - unsigned char b[8]; - - b[0] = (unsigned char) (v); - b[1] = (unsigned char) (v >> 8); - b[2] = (unsigned char) (v >> 16); - b[3] = (unsigned char) (v >> 24); - b[4] = (unsigned char) (v >> 32); - b[5] = (unsigned char) (v >> 40); - b[6] = (unsigned char) (v >> 48); - b[7] = (unsigned char) (v >> 56); - - writeUnsignedChars (out, b, 8); - } - -#endif - - -template -void -write (T &out, float v) -{ - union {unsigned int i; float f;} u; - u.f = v; - - unsigned char b[4]; - - b[0] = (unsigned char) (u.i); - b[1] = (unsigned char) (u.i >> 8); - b[2] = (unsigned char) (u.i >> 16); - b[3] = (unsigned char) (u.i >> 24); - - writeUnsignedChars (out, b, 4); -} - - -template -void -write (T &out, double v) -{ - union {Int64 i; double d;} u; - u.d = v; - - unsigned char b[8]; - - b[0] = (unsigned char) (u.i); - b[1] = (unsigned char) (u.i >> 8); - b[2] = (unsigned char) (u.i >> 16); - b[3] = (unsigned char) (u.i >> 24); - b[4] = (unsigned char) (u.i >> 32); - b[5] = (unsigned char) (u.i >> 40); - b[6] = (unsigned char) (u.i >> 48); - b[7] = (unsigned char) (u.i >> 56); - - writeUnsignedChars (out, b, 8); -} - - -template -inline void -write (T &out, half v) -{ - unsigned char b[2]; - - b[0] = (unsigned char) (v.bits()); - b[1] = (unsigned char) (v.bits() >> 8); - - writeUnsignedChars (out, b, 2); -} - - -template -inline void -write (T &out, const char v[], int n) // fixed-size char array -{ - S::writeChars (out, v, n); -} - - -template -void -write (T &out, const char v[]) // zero-terminated string -{ - while (*v) - { - S::writeChars (out, v, 1); - ++v; - } - - S::writeChars (out, v, 1); -} - - -template -void -pad (T &out, int n) // add n padding bytes -{ - for (int i = 0; i < n; i++) - { - const char c = 0; - S::writeChars (out, &c, 1); - } -} - - -template -inline void -read (T &in, bool &v) -{ - char c; - - S::readChars (in, &c, 1); - v = !!c; -} - - -template -inline void -read (T &in, char &v) -{ - S::readChars (in, &v, 1); -} - - -template -inline void -read (T &in, signed char &v) -{ - readSignedChars (in, &v, 1); -} - - -template -inline void -read (T &in, unsigned char &v) -{ - readUnsignedChars (in, &v, 1); -} - - -template -void -read (T &in, signed short &v) -{ - signed char b[2]; - - readSignedChars (in, b, 2); - - v = (b[0] & 0x00ff) | - (b[1] << 8); -} - - -template -void -read (T &in, unsigned short &v) -{ - unsigned char b[2]; - - readUnsignedChars (in, b, 2); - - v = (b[0] & 0x00ff) | - (b[1] << 8); -} - - -template -void -read (T &in, signed int &v) -{ - signed char b[4]; - - readSignedChars (in, b, 4); - - v = (b[0] & 0x000000ff) | - ((b[1] << 8) & 0x0000ff00) | - ((b[2] << 16) & 0x00ff0000) | - (b[3] << 24); -} - - -template -void -read (T &in, unsigned int &v) -{ - unsigned char b[4]; - - readUnsignedChars (in, b, 4); - - v = (b[0] & 0x000000ff) | - ((b[1] << 8) & 0x0000ff00) | - ((b[2] << 16) & 0x00ff0000) | - (b[3] << 24); -} - - -template -void -read (T &in, signed long &v) -{ - signed char b[8]; - - readSignedChars (in, b, 8); - - #if LONG_MAX == 2147483647 - - v = (b[0] & 0x000000ff) | - ((b[1] << 8) & 0x0000ff00) | - ((b[2] << 16) & 0x00ff0000) | - (b[3] << 24); - - if (( b[4] || b[5] || b[6] || b[7]) && - (~b[4] || ~b[5] || ~b[6] || ~b[7])) - { - throw Iex::OverflowExc ("Long int overflow - read a large " - "64-bit integer in a 32-bit process."); - } - - #elif LONG_MAX == 9223372036854775807L - - v = ((long) b[0] & 0x00000000000000ff) | - (((long) b[1] << 8) & 0x000000000000ff00) | - (((long) b[2] << 16) & 0x0000000000ff0000) | - (((long) b[3] << 24) & 0x00000000ff000000) | - (((long) b[4] << 32) & 0x000000ff00000000) | - (((long) b[5] << 40) & 0x0000ff0000000000) | - (((long) b[6] << 48) & 0x00ff000000000000) | - ((long) b[7] << 56); - - #else - - #error read (T &in, signed long &v) not implemented - - #endif -} - - -template -void -read (T &in, unsigned long &v) -{ - unsigned char b[8]; - - readUnsignedChars (in, b, 8); - - #if ULONG_MAX == 4294967295U - - v = (b[0] & 0x000000ff) | - ((b[1] << 8) & 0x0000ff00) | - ((b[2] << 16) & 0x00ff0000) | - (b[3] << 24); - - if (b[4] || b[5] || b[6] || b[7]) - { - throw Iex::OverflowExc ("Long int overflow - read a large " - "64-bit integer in a 32-bit process."); - } - - #elif ULONG_MAX == 18446744073709551615LU - - v = ((unsigned long) b[0] & 0x00000000000000ff) | - (((unsigned long) b[1] << 8) & 0x000000000000ff00) | - (((unsigned long) b[2] << 16) & 0x0000000000ff0000) | - (((unsigned long) b[3] << 24) & 0x00000000ff000000) | - (((unsigned long) b[4] << 32) & 0x000000ff00000000) | - (((unsigned long) b[5] << 40) & 0x0000ff0000000000) | - (((unsigned long) b[6] << 48) & 0x00ff000000000000) | - ((unsigned long) b[7] << 56); - - #else - - #error read (T &in, unsigned long &v) not implemented - - #endif -} - - -#if ULONG_MAX != 18446744073709551615LU - - template - void - read (T &in, Int64 &v) - { - unsigned char b[8]; - - readUnsignedChars (in, b, 8); - - v = ((Int64) b[0] & 0x00000000000000ffLL) | - (((Int64) b[1] << 8) & 0x000000000000ff00LL) | - (((Int64) b[2] << 16) & 0x0000000000ff0000LL) | - (((Int64) b[3] << 24) & 0x00000000ff000000LL) | - (((Int64) b[4] << 32) & 0x000000ff00000000LL) | - (((Int64) b[5] << 40) & 0x0000ff0000000000LL) | - (((Int64) b[6] << 48) & 0x00ff000000000000LL) | - ((Int64) b[7] << 56); - } - -#endif - - -template -void -read (T &in, float &v) -{ - unsigned char b[4]; - - readUnsignedChars (in, b, 4); - - union {unsigned int i; float f;} u; - - u.i = (b[0] & 0x000000ff) | - ((b[1] << 8) & 0x0000ff00) | - ((b[2] << 16) & 0x00ff0000) | - (b[3] << 24); - - v = u.f; -} - - -template -void -read (T &in, double &v) -{ - unsigned char b[8]; - - readUnsignedChars (in, b, 8); - - union {Int64 i; double d;} u; - - u.i = ((Int64) b[0] & 0x00000000000000ffULL) | - (((Int64) b[1] << 8) & 0x000000000000ff00ULL) | - (((Int64) b[2] << 16) & 0x0000000000ff0000ULL) | - (((Int64) b[3] << 24) & 0x00000000ff000000ULL) | - (((Int64) b[4] << 32) & 0x000000ff00000000ULL) | - (((Int64) b[5] << 40) & 0x0000ff0000000000ULL) | - (((Int64) b[6] << 48) & 0x00ff000000000000ULL) | - ((Int64) b[7] << 56); - - v = u.d; -} - - -template -inline void -read (T &in, half &v) -{ - unsigned char b[2]; - - readUnsignedChars (in, b, 2); - - v.setBits ((b[0] & 0x00ff) | (b[1] << 8)); -} - - -template -inline void -read (T &in, char v[], int n) // fixed-size char array -{ - S::readChars (in, v, n); -} - - -template -void -read (T &in, int n, char v[]) // zero-terminated string -{ - while (n >= 0) - { - S::readChars (in, v, 1); - - if (*v == 0) - break; - - --n; - ++v; - } -} - - -template -void -skip (T &in, int n) // skip n padding bytes -{ - char c[1024]; - - while (n >= (int) sizeof (c)) - { - if (!S::readChars (in, c, sizeof (c))) - return; - - n -= sizeof (c); - } - - if (n >= 1) - S::readChars (in, c, n); -} - - -template <> inline int size () {return 1;} -template <> inline int size () {return 1;} -template <> inline int size () {return 1;} -template <> inline int size () {return 1;} -template <> inline int size () {return 2;} -template <> inline int size () {return 2;} -template <> inline int size () {return 4;} -template <> inline int size () {return 4;} -template <> inline int size () {return 8;} -template <> inline int size () {return 8;} -template <> inline int size () {return 4;} -template <> inline int size () {return 8;} -template <> inline int size () {return 2;} - - -} // namespace Xdr -} // namespace Imf - -#endif diff --git a/3rdparty/include/OpenEXR/OpenEXRConfig.h b/3rdparty/include/OpenEXR/OpenEXRConfig.h deleted file mode 100644 index 6fa1a853a..000000000 --- a/3rdparty/include/OpenEXR/OpenEXRConfig.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// This is a hard-coded config file for Windows platforms. Don't -// change any of these settings. -// - -// -// Define and set to 1 if the target system has POSIX thread support -// and you want OpenEXR to use it for multithreaded file I/O. -// - -/* #undef HAVE_PTHREAD */ - -// -// Define and set to 1 if the target system supports POSIX semaphores -// and you want OpenEXR to use them; otherwise, OpenEXR will use its -// own semaphore implementation. -// - -/* #undef HAVE_POSIX_SEMAPHORES */ - -// -// Define and set to 1 if the target system is a Darwin-based system -// (e.g., OS X). -// - -/* #undef HAVE_DARWIN */ - -// -// Define and set to 1 if the target system supports a proc filesystem -// compatible with the Linux kernel's proc filesystem. Note that this -// is only used by a program in the IlmImfTest test suite, it's not -// used by any OpenEXR library or application code. -// - -/* #undef HAVE_LINUX_PROCFS */ - -// -// Define and set to 1 if the target system has a complete -// implementation, specifically if it supports the std::right -// formatter. -// - -#define HAVE_COMPLETE_IOMANIP 1 diff --git a/3rdparty/include/OpenEXR/half.h b/3rdparty/include/OpenEXR/half.h deleted file mode 100644 index 87ddc9de9..000000000 --- a/3rdparty/include/OpenEXR/half.h +++ /dev/null @@ -1,775 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -// Primary authors: -// Florian Kainz -// Rod Bogart - -//--------------------------------------------------------------------------- -// -// half -- a 16-bit floating point number class: -// -// Type half can represent positive and negative numbers, whose -// magnitude is between roughly 6.1e-5 and 6.5e+4, with a relative -// error of 9.8e-4; numbers smaller than 6.1e-5 can be represented -// with an absolute error of 6.0e-8. All integers from -2048 to -// +2048 can be represented exactly. -// -// Type half behaves (almost) like the built-in C++ floating point -// types. In arithmetic expressions, half, float and double can be -// mixed freely. Here are a few examples: -// -// half a (3.5); -// float b (a + sqrt (a)); -// a += b; -// b += a; -// b = a + 7; -// -// Conversions from half to float are lossless; all half numbers -// are exactly representable as floats. -// -// Conversions from float to half may not preserve the float's -// value exactly. If a float is not representable as a half, the -// float value is rounded to the nearest representable half. If -// a float value is exactly in the middle between the two closest -// representable half values, then the float value is rounded to -// the half with the greater magnitude. -// -// Overflows during float-to-half conversions cause arithmetic -// exceptions. An overflow occurs when the float value to be -// converted is too large to be represented as a half, or if the -// float value is an infinity or a NAN. -// -// The implementation of type half makes the following assumptions -// about the implementation of the built-in C++ types: -// -// float is an IEEE 754 single-precision number -// sizeof (float) == 4 -// sizeof (unsigned int) == sizeof (float) -// alignof (unsigned int) == alignof (float) -// sizeof (unsigned short) == 2 -// -//--------------------------------------------------------------------------- - -#ifndef _HALF_H_ -#define _HALF_H_ - -#include - -class half -{ - public: - - //------------- - // Constructors - //------------- - - half (); // no initialization - half (float f); - - - //-------------------- - // Conversion to float - //-------------------- - - operator float () const; - - - //------------ - // Unary minus - //------------ - - half operator - () const; - - - //----------- - // Assignment - //----------- - - half & operator = (half h); - half & operator = (float f); - - half & operator += (half h); - half & operator += (float f); - - half & operator -= (half h); - half & operator -= (float f); - - half & operator *= (half h); - half & operator *= (float f); - - half & operator /= (half h); - half & operator /= (float f); - - - //--------------------------------------------------------- - // Round to n-bit precision (n should be between 0 and 10). - // After rounding, the significand's 10-n least significant - // bits will be zero. - //--------------------------------------------------------- - - half round (unsigned int n) const; - - - //-------------------------------------------------------------------- - // Classification: - // - // h.isFinite() returns true if h is a normalized number, - // a denormalized number or zero - // - // h.isNormalized() returns true if h is a normalized number - // - // h.isDenormalized() returns true if h is a denormalized number - // - // h.isZero() returns true if h is zero - // - // h.isNan() returns true if h is a NAN - // - // h.isInfinity() returns true if h is a positive - // or a negative infinity - // - // h.isNegative() returns true if the sign bit of h - // is set (negative) - //-------------------------------------------------------------------- - - bool isFinite () const; - bool isNormalized () const; - bool isDenormalized () const; - bool isZero () const; - bool isNan () const; - bool isInfinity () const; - bool isNegative () const; - - - //-------------------------------------------- - // Special values - // - // posInf() returns +infinity - // - // negInf() returns +infinity - // - // qNan() returns a NAN with the bit - // pattern 0111111111111111 - // - // sNan() returns a NAN with the bit - // pattern 0111110111111111 - //-------------------------------------------- - - static half posInf (); - static half negInf (); - static half qNan (); - static half sNan (); - - - //-------------------------------------- - // Access to the internal representation - //-------------------------------------- - - unsigned short bits () const; - void setBits (unsigned short bits); - - - public: - - union uif - { - unsigned int i; - float f; - }; - - private: - - static short convert (int i); - static float overflow (); - - unsigned short _h; - - //--------------------------------------------------- - // Windows dynamic libraries don't like static - // member variables. - //--------------------------------------------------- -#ifndef OPENEXR_DLL - static const uif _toFloat[1 << 16]; - static const unsigned short _eLut[1 << 9]; -#endif -}; - -#if defined(OPENEXR_DLL) - //-------------------------------------- - // Lookup tables defined for Windows DLL - //-------------------------------------- - #if defined(HALF_EXPORTS) - extern __declspec(dllexport) half::uif _toFloat[1 << 16]; - extern __declspec(dllexport) unsigned short _eLut[1 << 9]; - #else - extern __declspec(dllimport) half::uif _toFloat[1 << 16]; - extern __declspec(dllimport) unsigned short _eLut[1 << 9]; - #endif -#endif - - -//----------- -// Stream I/O -//----------- - -std::ostream & operator << (std::ostream &os, half h); -std::istream & operator >> (std::istream &is, half &h); - - -//---------- -// Debugging -//---------- - -void printBits (std::ostream &os, half h); -void printBits (std::ostream &os, float f); -void printBits (char c[19], half h); -void printBits (char c[35], float f); - - -//------------------------------------------------------------------------- -// Limits -// -// Visual C++ will complain if HALF_MIN, HALF_NRM_MIN etc. are not float -// constants, but at least one other compiler (gcc 2.96) produces incorrect -// results if they are. -//------------------------------------------------------------------------- - -#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER - -#define HALF_MIN 5.96046448e-08f // Smallest positive half - -#define HALF_NRM_MIN 6.10351562e-05f // Smallest positive normalized half - -#define HALF_MAX 65504.0f // Largest positive half - -#define HALF_EPSILON 0.00097656f // Smallest positive e for which - // half (1.0 + e) != half (1.0) -#else - -#define HALF_MIN 5.96046448e-08 // Smallest positive half - -#define HALF_NRM_MIN 6.10351562e-05 // Smallest positive normalized half - -#define HALF_MAX 65504.0 // Largest positive half - -#define HALF_EPSILON 0.00097656 // Smallest positive e for which - // half (1.0 + e) != half (1.0) -#endif - - -#define HALF_MANT_DIG 11 // Number of digits in mantissa - // (significand + hidden leading 1) - -#define HALF_DIG 2 // Number of base 10 digits that - // can be represented without change - -#define HALF_RADIX 2 // Base of the exponent - -#define HALF_MIN_EXP -13 // Minimum negative integer such that - // HALF_RADIX raised to the power of - // one less than that integer is a - // normalized half - -#define HALF_MAX_EXP 16 // Maximum positive integer such that - // HALF_RADIX raised to the power of - // one less than that integer is a - // normalized half - -#define HALF_MIN_10_EXP -4 // Minimum positive integer such - // that 10 raised to that power is - // a normalized half - -#define HALF_MAX_10_EXP 4 // Maximum positive integer such - // that 10 raised to that power is - // a normalized half - - -//--------------------------------------------------------------------------- -// -// Implementation -- -// -// Representation of a float: -// -// We assume that a float, f, is an IEEE 754 single-precision -// floating point number, whose bits are arranged as follows: -// -// 31 (msb) -// | -// | 30 23 -// | | | -// | | | 22 0 (lsb) -// | | | | | -// X XXXXXXXX XXXXXXXXXXXXXXXXXXXXXXX -// -// s e m -// -// S is the sign-bit, e is the exponent and m is the significand. -// -// If e is between 1 and 254, f is a normalized number: -// -// s e-127 -// f = (-1) * 2 * 1.m -// -// If e is 0, and m is not zero, f is a denormalized number: -// -// s -126 -// f = (-1) * 2 * 0.m -// -// If e and m are both zero, f is zero: -// -// f = 0.0 -// -// If e is 255, f is an "infinity" or "not a number" (NAN), -// depending on whether m is zero or not. -// -// Examples: -// -// 0 00000000 00000000000000000000000 = 0.0 -// 0 01111110 00000000000000000000000 = 0.5 -// 0 01111111 00000000000000000000000 = 1.0 -// 0 10000000 00000000000000000000000 = 2.0 -// 0 10000000 10000000000000000000000 = 3.0 -// 1 10000101 11110000010000000000000 = -124.0625 -// 0 11111111 00000000000000000000000 = +infinity -// 1 11111111 00000000000000000000000 = -infinity -// 0 11111111 10000000000000000000000 = NAN -// 1 11111111 11111111111111111111111 = NAN -// -// Representation of a half: -// -// Here is the bit-layout for a half number, h: -// -// 15 (msb) -// | -// | 14 10 -// | | | -// | | | 9 0 (lsb) -// | | | | | -// X XXXXX XXXXXXXXXX -// -// s e m -// -// S is the sign-bit, e is the exponent and m is the significand. -// -// If e is between 1 and 30, h is a normalized number: -// -// s e-15 -// h = (-1) * 2 * 1.m -// -// If e is 0, and m is not zero, h is a denormalized number: -// -// S -14 -// h = (-1) * 2 * 0.m -// -// If e and m are both zero, h is zero: -// -// h = 0.0 -// -// If e is 31, h is an "infinity" or "not a number" (NAN), -// depending on whether m is zero or not. -// -// Examples: -// -// 0 00000 0000000000 = 0.0 -// 0 01110 0000000000 = 0.5 -// 0 01111 0000000000 = 1.0 -// 0 10000 0000000000 = 2.0 -// 0 10000 1000000000 = 3.0 -// 1 10101 1111000001 = -124.0625 -// 0 11111 0000000000 = +infinity -// 1 11111 0000000000 = -infinity -// 0 11111 1000000000 = NAN -// 1 11111 1111111111 = NAN -// -// Conversion: -// -// Converting from a float to a half requires some non-trivial bit -// manipulations. In some cases, this makes conversion relatively -// slow, but the most common case is accelerated via table lookups. -// -// Converting back from a half to a float is easier because we don't -// have to do any rounding. In addition, there are only 65536 -// different half numbers; we can convert each of those numbers once -// and store the results in a table. Later, all conversions can be -// done using only simple table lookups. -// -//--------------------------------------------------------------------------- - - -//-------------------- -// Simple constructors -//-------------------- - -inline -half::half () -{ - // no initialization -} - - -//---------------------------- -// Half-from-float constructor -//---------------------------- - -inline -half::half (float f) -{ - if (f == 0) - { - // - // Common special case - zero. - // For speed, we don't preserve the zero's sign. - // - - _h = 0; - } - else - { - // - // We extract the combined sign and exponent, e, from our - // floating-point number, f. Then we convert e to the sign - // and exponent of the half number via a table lookup. - // - // For the most common case, where a normalized half is produced, - // the table lookup returns a non-zero value; in this case, all - // we have to do, is round f's significand to 10 bits and combine - // the result with e. - // - // For all other cases (overflow, zeroes, denormalized numbers - // resulting from underflow, infinities and NANs), the table - // lookup returns zero, and we call a longer, non-inline function - // to do the float-to-half conversion. - // - - uif x; - - x.f = f; - - register int e = (x.i >> 23) & 0x000001ff; - - e = _eLut[e]; - - if (e) - { - // - // Simple case - round the significand and - // combine it with the sign and exponent. - // - - _h = e + (((x.i & 0x007fffff) + 0x00001000) >> 13); - } - else - { - // - // Difficult case - call a function. - // - - _h = convert (x.i); - } - } -} - - -//------------------------------------------ -// Half-to-float conversion via table lookup -//------------------------------------------ - -inline -half::operator float () const -{ - return _toFloat[_h].f; -} - - -//------------------------- -// Round to n-bit precision -//------------------------- - -inline half -half::round (unsigned int n) const -{ - // - // Parameter check. - // - - if (n >= 10) - return *this; - - // - // Disassemble h into the sign, s, - // and the combined exponent and significand, e. - // - - unsigned short s = _h & 0x8000; - unsigned short e = _h & 0x7fff; - - // - // Round the exponent and significand to the nearest value - // where ones occur only in the (10-n) most significant bits. - // Note that the exponent adjusts automatically if rounding - // up causes the significand to overflow. - // - - e >>= 9 - n; - e += e & 1; - e <<= 9 - n; - - // - // Check for exponent overflow. - // - - if (e >= 0x7c00) - { - // - // Overflow occurred -- truncate instead of rounding. - // - - e = _h; - e >>= 10 - n; - e <<= 10 - n; - } - - // - // Put the original sign bit back. - // - - half h; - h._h = s | e; - - return h; -} - - -//----------------------- -// Other inline functions -//----------------------- - -inline half -half::operator - () const -{ - half h; - h._h = _h ^ 0x8000; - return h; -} - - -inline half & -half::operator = (half h) -{ - _h = h._h; - return *this; -} - - -inline half & -half::operator = (float f) -{ - *this = half (f); - return *this; -} - - -inline half & -half::operator += (half h) -{ - *this = half (float (*this) + float (h)); - return *this; -} - - -inline half & -half::operator += (float f) -{ - *this = half (float (*this) + f); - return *this; -} - - -inline half & -half::operator -= (half h) -{ - *this = half (float (*this) - float (h)); - return *this; -} - - -inline half & -half::operator -= (float f) -{ - *this = half (float (*this) - f); - return *this; -} - - -inline half & -half::operator *= (half h) -{ - *this = half (float (*this) * float (h)); - return *this; -} - - -inline half & -half::operator *= (float f) -{ - *this = half (float (*this) * f); - return *this; -} - - -inline half & -half::operator /= (half h) -{ - *this = half (float (*this) / float (h)); - return *this; -} - - -inline half & -half::operator /= (float f) -{ - *this = half (float (*this) / f); - return *this; -} - - -inline bool -half::isFinite () const -{ - unsigned short e = (_h >> 10) & 0x001f; - return e < 31; -} - - -inline bool -half::isNormalized () const -{ - unsigned short e = (_h >> 10) & 0x001f; - return e > 0 && e < 31; -} - - -inline bool -half::isDenormalized () const -{ - unsigned short e = (_h >> 10) & 0x001f; - unsigned short m = _h & 0x3ff; - return e == 0 && m != 0; -} - - -inline bool -half::isZero () const -{ - return (_h & 0x7fff) == 0; -} - - -inline bool -half::isNan () const -{ - unsigned short e = (_h >> 10) & 0x001f; - unsigned short m = _h & 0x3ff; - return e == 31 && m != 0; -} - - -inline bool -half::isInfinity () const -{ - unsigned short e = (_h >> 10) & 0x001f; - unsigned short m = _h & 0x3ff; - return e == 31 && m == 0; -} - - -inline bool -half::isNegative () const -{ - return (_h & 0x8000) != 0; -} - - -inline half -half::posInf () -{ - half h; - h._h = 0x7c00; - return h; -} - - -inline half -half::negInf () -{ - half h; - h._h = 0xfc00; - return h; -} - - -inline half -half::qNan () -{ - half h; - h._h = 0x7fff; - return h; -} - - -inline half -half::sNan () -{ - half h; - h._h = 0x7dff; - return h; -} - - -inline unsigned short -half::bits () const -{ - return _h; -} - - -inline void -half::setBits (unsigned short bits) -{ - _h = bits; -} - -#undef HALF_EXPORT_CONST - -#endif diff --git a/3rdparty/include/OpenEXR/halfFunction.h b/3rdparty/include/OpenEXR/halfFunction.h deleted file mode 100644 index 19838802e..000000000 --- a/3rdparty/include/OpenEXR/halfFunction.h +++ /dev/null @@ -1,159 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -// Primary authors: -// Florian Kainz -// Rod Bogart - - -//--------------------------------------------------------------------------- -// -// halfFunction -- a class for fast evaluation -// of half --> T functions -// -// The constructor for a halfFunction object, -// -// halfFunction (function, -// domainMin, domainMax, -// defaultValue, -// posInfValue, negInfValue, -// nanValue); -// -// evaluates the function for all finite half values in the interval -// [domainMin, domainMax], and stores the results in a lookup table. -// For finite half values that are not in [domainMin, domainMax], the -// constructor stores defaultValue in the table. For positive infinity, -// negative infinity and NANs, posInfValue, negInfValue and nanValue -// are stored in the table. -// -// The tabulated function can then be evaluated quickly for arbitrary -// half values by calling the the halfFunction object's operator() -// method. -// -// Example: -// -// #include -// #include -// -// halfFunction hsin (sin); -// -// halfFunction hsqrt (sqrt, // function -// 0, HALF_MAX, // domain -// half::qNan(), // sqrt(x) for x < 0 -// half::posInf(), // sqrt(+inf) -// half::qNan(), // sqrt(-inf) -// half::qNan()); // sqrt(nan) -// -// half x = hsin (1); -// half y = hsqrt (3.5); -// -//--------------------------------------------------------------------------- - -#ifndef _HALF_FUNCTION_H_ -#define _HALF_FUNCTION_H_ - -#include -#include "half.h" - - -template -class halfFunction -{ - public: - - //------------ - // Constructor - //------------ - - template - halfFunction (Function f, - half domainMin = -HALF_MAX, - half domainMax = HALF_MAX, - T defaultValue = 0, - T posInfValue = 0, - T negInfValue = 0, - T nanValue = 0); - - //----------- - // Evaluation - //----------- - - T operator () (half x) const; - - private: - - T _lut[1 << 16]; -}; - - -//--------------- -// Implementation -//--------------- - -template -template -halfFunction::halfFunction (Function f, - half domainMin, - half domainMax, - T defaultValue, - T posInfValue, - T negInfValue, - T nanValue) -{ - for (int i = 0; i < (1 << 16); i++) - { - half x; - x.setBits (i); - - if (x.isNan()) - _lut[i] = nanValue; - else if (x.isInfinity()) - _lut[i] = x.isNegative()? negInfValue: posInfValue; - else if (x < domainMin || x > domainMax) - _lut[i] = defaultValue; - else - _lut[i] = f (x); - } -} - - -template -inline T -halfFunction::operator () (half x) const -{ - return _lut[x.bits()]; -} - - -#endif diff --git a/3rdparty/include/OpenEXR/halfLimits.h b/3rdparty/include/OpenEXR/halfLimits.h deleted file mode 100644 index 404f58936..000000000 --- a/3rdparty/include/OpenEXR/halfLimits.h +++ /dev/null @@ -1,102 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -// Primary authors: -// Florian Kainz -// Rod Bogart - - -#ifndef INCLUDED_HALF_LIMITS_H -#define INCLUDED_HALF_LIMITS_H - - -//------------------------------------------------------------------------ -// -// C++ standard library-style numeric_limits for class half -// -//------------------------------------------------------------------------ - -#include -#include "half.h" - -namespace std { - -template <> -class numeric_limits -{ - public: - - static const bool is_specialized = true; - - static half min () throw () {return HALF_NRM_MIN;} - static half max () throw () {return HALF_MAX;} - - static const int digits = HALF_MANT_DIG; - static const int digits10 = HALF_DIG; - static const bool is_signed = true; - static const bool is_integer = false; - static const bool is_exact = false; - static const int radix = HALF_RADIX; - static half epsilon () throw () {return HALF_EPSILON;} - static half round_error () throw () {return HALF_EPSILON / 2;} - - static const int min_exponent = HALF_MIN_EXP; - static const int min_exponent10 = HALF_MIN_10_EXP; - static const int max_exponent = HALF_MAX_EXP; - static const int max_exponent10 = HALF_MAX_10_EXP; - - static const bool has_infinity = true; - static const bool has_quiet_NaN = true; - static const bool has_signaling_NaN = true; - static const float_denorm_style has_denorm = denorm_present; - static const bool has_denorm_loss = false; - static half infinity () throw () {return half::posInf();} - static half quiet_NaN () throw () {return half::qNan();} - static half signaling_NaN () throw () {return half::sNan();} - static half denorm_min () throw () {return HALF_MIN;} - - static const bool is_iec559 = false; - static const bool is_bounded = false; - static const bool is_modulo = false; - - static const bool traps = true; - static const bool tinyness_before = false; - static const float_round_style round_style = round_to_nearest; -}; - - -} // namespace std - -#endif diff --git a/3rdparty/lib/Half.lib b/3rdparty/lib/Half.lib deleted file mode 100644 index 8c066c462fccc09ebb10a91bd68a224b8d82d46b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 286030 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 IZwnLt9|Bf9$N&HU diff --git a/3rdparty/lib/Iex.lib b/3rdparty/lib/Iex.lib deleted file mode 100644 index c78b56cc8c32655e5357359c6ea8ceaea182f2a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 196714 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®Z}jF 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%0AZ53r3iyZ4ZWm8}Fmn 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 z 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%0D3=z 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 vM-r<2{=Gh{P6Yl@! zGmPvziS3bnX|_iqkFY(mWi{KQLDOSwk8kJXo&wo&p6zPvu<>yLJ4NutY>$$99owUbcbXB6h9hXQy!wdC zm@4J`m8L%aVAG0%oXB{#L=l-Ctqm7D79?0=12t|}+muP21)fMsE>9#S*GeSfu%JpL zeSw-6zguk5ly`>7Se4N?y@p4~ueaGG*fqI5WSM0TJAn_CJ@=UQ(9G8;;LM2=BSRDQ zsc5`DmW+6sgorGVNe|joBqPXf0#rt*a*{-Kyv~U_UX@5^j}pfP+0;xw2wMll*%&)z zo@X)}VLZku81%6y^q0{l(LRNj8R*&gTi1IVu$4DlAQXC+9i_bfg6&Z$^ltp=aY83a%qKQ3^Jo%1+ zo_RtysCgN{ZFfbU{K1Y=o@|Q}AEZOZZA_6TbhFFKWy+JXM9>VO8&+0aS4J2I=zdG< zW(ZFXWr&p=XNKSjl3*D^w>Nw$r8Pp@P3eL?%@iNZ_WUbJFUC>FoMTg@44Hr%8bPyU zKU-`g2VDOj$S^7~tyM>Of+$O@1Ua*$2doHGNBS}lYdP7p0GrN8hcm~~U*rCGaV@2d zCcPAlo_-+XS5o@ed1oO#oa<$i3|hv^3eghoSim#@3x#^KPg;|sl7b~PE;A1iJEyy_hJ7u~ z$S0dIoC^q(SPWY2QZG`UHZrF>7ODaCSX$Z*hV8zry!*1!9&70CJtpw%lX8Q*YMPIn ze$6{-#Kd|>_M~(&d&m>>bDOrFoSv689;@tFRnHt! zni*hKeHItO!YJ~poUiyS8FnaOoFw1OW7np383}XL87ki49UCdZ2i=DV3 zSV&ecER)sTK3dYU7LIbn)s5xkWlWKkH28nwq;%h9xyZz24amx@^tkM04Rl8&J+^$w zOOu;US{%wqcT3OBN*`A{r28XXPp74+#bML};Gp6SLsH8_PqIsNJ^c>+pFXZ%{ue`j zSXPtS_4E}4|DLg6zs0|I=(^-w{B_2hj3LKW;Sya>KLvkA7O%-Tc3BNw@EBC8#ZP7| zo14WCiX*>fG##7KEuEV#&q~j$9n$ZD`D1YTKll~r4aL=#{5XGqy2!4$NYkDW95S|Q zS$Wp{9iI#{$A8`l$8cbAI6DI-4;fo?Vs^T$A>IA##h>ALX5?79G=*;HVJLJ6?Mn@L z=uGCRpljpee$KG$GfKl)8D|XxD>~_Q^d}8r`JayU@wL=`(ekTvb^Ky>>-?wI+9ijblA0?o<{vRaeK76QYf?!Ucu7bMpt~56Id!S(OK2B-qy&=TyeWyi2%2Ko(G zJ|z8s?eUtBogVS2>oyT?EQsc9v?-n>Nm<71C1x+L~b4MtU1;Dxvr6 ze*!QP9LBy8xDk{;+z9IKS;n*0hq}N|pu>ki&H>HGID=7mVdmmhyR(59?^O+H+~{Kf zdbY{w1)1p=c-uG|dyAhqoc$3&f4!D2!pB*ZXOqp#^)!X3`9uLSE|(4;ti0Th7Lcn1 z{%ZmKlmLxRS&Gu(K}ujN3#d{8TU$Vl66nf-2|1{LljiqHr*g8MtvolU?3|xAc3i*u*Ua>q)t~OwaSe;w%N7w&O0uZrL~6dd z7k5vORx1qoIca!zbmkeE|3_K}JsCM8a}oLX5d3BNw?tgX@b3}a#<3`hO&#-Bt;LxC zpf#(1?!c_tQNYH3MW$8M?sKcM)5Ee3T8$Wz6~kb~$_QPYp7OUYez4=>!}-O%o?I9y z5M~edML;b^7|Tye#%Gi9d`jpvev%7jDOJNqa~MNsF)=`$qXPO0HhW9REeVCD^B87k zX9v&h7>}xcu4!hoElGIErA)cSt9q^_CuY$Hg3*u6lZakQVu4Ap)5h|pA+Xpyy?7P( zuJaO0C4$e;ox~ZO(9G`7G2^F8vlh8e)cmj14{Iqwe9mko>;fy65veMN zVzIwcKe9->QA`9QF_-d4)WLB}ogLf?3*d=$0@rZ>t$n(~q%@{oeetny0gUdrY!XeZ zX-)uhIHWb{w!nO&+}{~yD;@L zGyuUvWad?Z)|>}ej4jn+Jj$=HDLIevv+N1M^!CfT;aNX=L~ty57|;2UW0sX>r?*~K z+D%Ls_cznWYx>hn;WUl@I<5~NFJ3iuEk$*f?3Yb~opx59*Ui(q%CkWt)RpH0iQo^i zIF0y(6NNlJpJa%1;=fJeEHBT_v)`ENth!CLRlcbqP38O1iiPUNBAJyBk<^v%zlI^Y z%184fG5l0lzO6X08r6w{ zSPll__!))nV*4!vDVArYBEITmFbcP!NWIh=1ayI*Q9vXVwl2fx z5OJFbr1njdfi8wy*viy@FWY?Zr}o%~dd&;@#!mngTsYt1i$lZNZ@VJ zzj^RIE|Q+-vJR0|?rXG0*w(w zzB*P=c1Samllp}RV|u1hKj>3<&qOd@FuZbgrT+-h&=u;ByWy{Zn@U6NNo-9+m>)!1v@xYNhFa9#R7P%}Z6EDT%RSwKXK+d@#_aaQdH4izs|9)m zf2G#P@wrD(j=||0_Sn67TMYG|xh=67Dej+ihg*tbNPO1nHG%-FEAW@yB&Wd#qeP)W zV6J%oGngMuZT}rA9V=GIM+DV$XqBFj_^kBn1p)M`^y}brfJ*1_XYhUxBkw9VMruv| zQ7o+?3P?4#x$)OAzn&<-U)T$*-h~>;J>rdVKXtLyVvBMmS-k%_yA&!=u45684opYZ zrpX$hH|ae?>Elznxb=ksltu?uEC@Jkc};~~MAzgoP|gZUyfr;NK7ar< z57X&AlV2ekH^ZG{gi#F()#ms{LIbITn3j%^YaxgINk(GmoBw~kcsV4#REFl zB#zG11st`FY+&K!=m7**Rn6%R88i9#x)LhtML`0tV~_l<8`&%}J2b5Cc)2KK=uGCA zYv^pqm{muPdu(+Zg|574ENeKA%6t#GDW%r5N(c_Md}RE>_s=v0XKa^Z(Xl#>6|?G< zDRgv&J6RWbGS3Zjc%zYQg2h< zvEOWCK@&+j>ZA0<)W%}s!x!zfU?XA_I|lJvlvaT$(9>>8Qn|VP>{sIb5Jt~3@z=H_ z^&%fT)c>+iM~}|yzf;NQ>U{Dmtp4C8c1d1he^z2nbJ`y_9>?OV;+*a9-%pH5#}#oIF6n3CNW6GMS&J>jJBf>8uMn(@>+#D0Wu9-uC5O z3YXi^-<2Q_ZP~I#*=24`m*CZiRdWtYa~M&7yC#UXAxvqqG9^`;d>A@HVM=8gPT@8= zKND~IIn&9R|71zYm~#124;)2p^8gY6w`0z|=C;bIAj2?&lFufax0Y(h9up{e3;#C6Mg*4}6&n#~N0_1|0ed6XqR`b!5Xwtr1S8=oaf8+(Wh4D7V@+R36cs zo+{Kty_CHPvyOW)%c*GTFGdH@xj^#*ol6)tA?bL9eOdYH39x*rtL%(NHq@MItyS@@ z*2(Nq&WLkH4*7{(y^xKbX6OcmZXniw zSs}VtnVxlxB)Ey}%RWi`o{?Zd-EM zycyWkBi0tZ2;^$CO|s^jxn3@LWzDS=M76;xK^#dt1+i1#Du|2Cw+rI9R#>^gI^)9> zJX6KjC8l^dA7(C|9p2l`ag#4Rb7sPuQI+()trHyu!y5^a;XTXrbf3bjWxA7LpZ$6^ zRkcTFs3!ce>lpER7E;j}(`s}XtQoI9v9rAM_}p%zFY7J|EIrClH{YKt>~)_efliUy z6YAK!)?)4Y4_D z4UHzkpDM4khL|g@p{YP#4PA*}*}45ePHs-js9GVP-rr~zHrRV2afr~fxVwqZ}&yNpH+8R*YA$X zUvpQq|MorB9L@B!<}M+^U#T?;pIUPbMB+wuw^wsid1u$$Hq9nRPfXG&TfqV=tt&mb zgY63kF7WSj3M_49bKy1}{TH>B?!K4!WjAQSEz=wjRFmLs49L|aaF9`UOESvY9OF;- zFb`EUbAZ#g1|a5_{5F$(auv`qr;8M}d#1G}AH%2rt`TA0ETZ8-t?7#~ztap$mqKiL z*lzgr6YqxAqoO5~BtSnnGOc1K#n6G{_di(t6W#cf|6^+tl}+}PXgMZq`(PXvTl+8* zv|oSyYsr@}A(JdnVB%x)cyggMa6GRBjJRn?{M<60UMRjP!6QHZ9o8aNNIoK{ z-`DXMc182PE~|Y~;*$s8Cc|ANZB_h_=17HS97LEol9 zbP6n8FBtnZyI$(gm8ov@IAxaThX?9E)@I4<50Z}hQ_C?a~S<6I%cwyq=m11`yq zHH$0Aj7gdd`MgwjQK}0f)sokgC!gv>HN5;gCaS-_OPpZ;E#7%pw&6iPcH`UmS@usg zKrSaLk=L8ciMo0P7EY8u@CG;OzH*|+B*s636Y=1oe+N#qP4W@J+dMQ*^sK}uC)zHE z&Eg9DWpkpZ;G>-A6nUxm>3d!f|0BhTelOGx$cefo$N?JdOG?A#A~Hjexo`eCQSe_h zLwL<8YXMHOPrY+_rRlqWKUg&sL%b5{+LIhhT*>iKzQaS39Qz4bX$nRhG2AAkDHhP* z_BZ(n6yPN%ngBl5S&|7zW)F#Vo-8B}&{iTxKF!mWWPw^ZTYS-7L;;h3$0X}h&sw0c zz7>DkA&tas*5Mw-3y|foBR~uH@*FW*Aq<5_DqmF&tpqd%&N^550d{AsqoT)KGc$WL za40m~aV?lr`$vXaU7x9mZRJ7oRxi~2!&l)G4+pP-;RAPDj}Ku*GCdj#pXKS%;q>T= z^ytdW_-Gmm&d$*h6*J}(WyaTRz^RBu(o*a~XCY2P7P5DHQoGYCZdU-c0A=m*tlyjJ zie_6g<~&cNpsNuUbIKZwCWp6p$1#x47sT!^Vm6gpIt zHVfi>YN{Xr>y!9nD03!XBYbl0)(Y3QJs!$s>WnGmL4Sq4$JjmijMi#cYZaA_D#mnx z8Z#?vTQpvi@8C(^)wAg*RR}-wb_+UtlPS&zBs^s+uZu6 zt%Rn@7K?As*7X8W&+GW!%^3WN6#-eKQz4}766ZMSc`7bx%UoY=nh z32wks4j9ngadjK%+Tjm0H$oL$!R3&MSuiQbPWRNh%AQmTSt=^)NMP9s`_Lz2b#+}Q zVreJ}9zc$_^q4UxkHd|E^K`QNKZ^~`=E5Tz4q8Wy$o^Lh(C+E z2+LyY8~CN0+gD4H-sX0*nAca0L5IX=?b?C>tk2+&>GiYDmcDZ{eEQO9xF`Eyo#uZL z2BKr3Jtx?2;>fI?2AC}XM_TtW6KngBiQh^l4nDEy+rEV_nw;gB4)wBzEYCIW;TWZl za+LcEP#O)xBkT*wvWA3NoLEER+p&h^zL6}OBX|_HhD6vtSwnuKKz@3a?4Wj@-xW#) zt&V?iVDE?28w{?Hwd>C`M6Q)$-hE|hpC>tavasPl4+TTg_+Y{`by z(x3%iS;172W!PaZi))*l(du}Z#io{>AGFHuTGKfOR%KwBd3Pl6+~jO^#t4v8quDl~ zUyHAw`{mt+z|zwwHkbRoAOsGb`)!x_K@4xoW8qYUI<-h02ic16!k&)9kt$-(E;|d&`MPjyNpRUIv1fTXL^#$G z+!*&?+b%9EN%GkOLKVn0OX8QNGw@tDCjKlS0^&g6`|g9TY}N_4sW<UZ;C#DgKxcio-Q3-1JMwU9-~QzMRQ;YnYWW^3d5Wgp z3_Zem16rKr*x1IzL?-X3v&aoPB!bQmwDk>tI&hcWBTWB15 zoh6p)DcXG%#(#T1viBWHarK1rkiGMmz2X?byXS%`7J%fc6SW0ZWyTe7qbwYjiu-N+8k5xUJ>rQMo;Guq>@J0gj+W(+0KBJk;vF`fN#1=63W3$XlP$^>LmHd;j@T%78Kz*o%*KcrW21+)UY_=b*>WaO9w{Q~P0xVl%&*C*WNf&qn{p1ZiFDVwDm;6@CmUn!kMM?hg z?T-?xpp5HU`SeY`>hWsjh)RKbP1$_ww#A2H@)B@NUfy&`cC6v}v^Y$&mjjx-7_sTE zT1r;hv_NbcPKU$Xh)N%qxb-4+*s+FJ_%4bn~+8 zGd0O0^vVZjQ9Jxsex6V(s8hXAz4^*()J6*pP97th$Gi}J6D%_x)tCUj?srIL6Q=vs z8j=NbHC94233n~G@7szj55}Q?k30pCzC}OjXm31rU9!I|3tg}%zch#=SNGY!20xCX zUq{fZDPs748-3q3PCu{h9kgp+SvyxJsmC;<{LcsMYo@4AJPU9!Vn2 zj_=&)IE~-z#MdkoAzB<&omxMj84|Aj=;ul{zVF%8n(*}0GbZDoVa7Ssa``)sf`+YY zfGGHet)(tXyNF9M>icyU0a!2c15ZDzTn35DrPA_<&eerP=eN_#_uzEfYYd1k%RrcVoR(`VFO4mN07=&3# z^G-9%e5dYsr+zX|(e?dB~E zjq1i}ZHR-#=bm+{m{!lj3XHAmXKY$4M#Neo>JI122($0wyosv zP`1XV1~V~7I=N>V^StBHp_NM`7AEucTiF2vX!PSlXem+WRg4d97!fIQW)=sc@cvm$ zHB)CIP7H0h)I{V|gf}i`PerbU+ZED#DAMZ?I|j{Zy13m7G)+(=I33rF!`5n`$wGx^ zbbmq+&zf!(#KV@=mnRfY6}RO4MQv9txMu$B>#^6g&D_4~%~sa*nypY9@dp0Fa-!GO zLd83E*~~x8Hv-Co%(}`F!=Se!5It-7k@aNTt1w>fL$?V2W=YxufF8l0u0u}|w;KGO zB#3jB*@7kjT_ec9fOONIE%2H6WqioFXRD&*US@q=I6!J&adH8sktJB^pP+ADUM0?d zUlrZShv(jNbV@?k@@Cb@Rk-Vzw_nds&KuXZxNUCxfU_bC=0|38Z*$~ooH8Fd z%{nbIAlrL(du0BCL}X^$)ws-RX5?y6X}m06KO)|K)*yER-B-(kg_0M(x0Qm>4-fdT zB)3RN*2PK)-CCw2yK&mP2g#PSn5DJ&qiK?5@#-5GE5S$S>3!HV=Uq8Pai5Rb?8XH0 z98rJM9*%$ohUGMrL0o?sYBvWP?7CKr#}gXNG4#^>F(mck#+da=C(KM?gHt21WOv6~ z&|eiNj>?P<^%M_Y!;xtg^Cx8DnU0wVD-OLoqUWO2&|5P?yup4#qU$f}$27nkoG2h3 zTgb0@Gj6Gzo1;CDyyiZ*g=I-ld*E$wyH~>938X#ni$I?fx32+dZ~Lx`e(a(ypwCD+ zDxmHb%D)5B4%7o=dZ1Lu>2Pov_v+RIcfU%6)$VsH&{rgtGk~=F`McI!_N$iJGZVA& z^{qh>_W;XoqzM}C!)As~D-XQH&wLyAz9^>HXLM_S2|K<(F7SMaR+1F!VV<6Oo$oM5d{n za52z&@x28|ua~$3s7u^915{2(?x^Si7d;H5vIr$Tl|>!{(oyLtAj1idfGn~}GISP* z=3|BsBw8mxtSBI7;LhCSytes?h$Cdoo*%)LqqAp5A#H-%B+6qtp`3 z^py=w0r~^n^wuF|NMC}Rie?<`R5bfO(C;O#Cx)$on=+)$E_xP7MKiKy70oD4sc80h zAj6OjS2Wu#xhXUP&YY2$(K37f%mqtEFIXh=pMUv4xJxn|K^61};z0PKAP$6k1aTnz zv!FcU**160PgzBHiJ1In%f`m4Cj2hywL+kv#regR0;P8)!RHlC#Q-MMsK#Sm?#uQMLNAD-}%@D6z1pfd(=$||n`isr|!gwqN%0hjMdDN>lc-#meyHI7BxZnml=n~ zsNGX~vHfJ{)ORE{)C?2gC9VhP+e)D!lL;cQM3fkryZO6uV+X%jz$~x2O8H^$wQ+CE z_#l+gWe@(MWAlm=pgE~}%C0Ou1i8=H)TPkD+e##<|%*%Gk&NPnU2@ft0bW z0y<6HRs$(JyVFJYx`@Jp&Psj+q_dKZKsqbg0;G)XX`oYt-gcl_N0BX)5$m0I{{f_V z`8JR;+3y2sUVa92vcz2nq z8)J138zDpX>HsRX7vl{eChs%Wy{Jl?ELc%Bkm{5!06I%@%{o_RJaWc-YF(2H!H3%- z3-t&}M^C$O_EKnWMHB0&Y#o2=;IRfpMjI{f%mr=Al&@MaKQRNGd4@k7k2`Ne>5wy7 zlAxA~1w*~bLzx`!NFL+n{B+$AUE*iEXJZV#@{q2lxvG>ZiNLK&&_JMpf`$N{Er{Iu zBta8^P82j3=>39n^#)tvgEeIDs*P1q@(Z(ifvJBQ*Gmfvk=@Joz0m;5WUq>{xR?dL zgV6R}QI6mgrN##uQ(Xz@2uy7#_Ze!>g1N`BkCt`pL_lXHWL7pSd}70@DBr#A)7$r?ufgRCy2NU=Y_MekoW+D##{#h*q)@a@>YB60`i zO2dO2VR@KY6{YxtP^njnlE1~ud>ECx7c|*|G__mxl{rg1G*P>0{Z52%c3alUi>KCI zr!pS}QZBX#NLSanLZdw7E}&5oVN+O4}p3Q_c-omJ@KU$wN-PjK+>v?9|HI@rqqsvf~xs&W=~^5_pn+;eu!A@g;+2W(5+Ts)CtLu+} zlD%NgPUt0}>AaveV4aEbo+C9n2*}$eHrA~Nwq4i{YPvLZ!v4(IKFsHxqc^hB-OpWQ zCSA47$b_g;v8tX#+L>^tMw*_U81j;z<|gm$Cu?9NJVj1JUDl`MQS3|n$!mH{JMa)T z&}S8zH{OKh8Z&RdS)C^8rh2oaDzh9he)P5uf$n>}hNDwxIkv&t=RCWLj26#18Ry_T zr#>y=kG!GbXC1m9Vns}}&+B-r#r`C(%i;A6ICS$-x>s$=48J|Lg4Z^zkZT*@SDs!P zn4YedeN!x)XH|L$qu?oaHpAR|;3S5Bs?U_EN9SWGe_1K(j=+^SPCCd=9{Brq^86Q~ zA8aQN!$4hsg>a>=)lI& zK@v<`_ToT#ad6r?niM7Bre)$mHu`7-|B04Kq$Eg&eXOnss_WE)RoBmZlddtR(Z*?{-(LdyXbgk@tGV0*)(xLw6`PWbsl({`g0L>q;x#9 zB+rf%(#3NunP!8NS3491C%|Dp6`bG7MBpTZ;U*Go7}WYOGo?`%= zGE%FN9sd}Kj{^8?#1CnUhB=kA%q7|9EgH%YQAUX>?BR&XZ#*zpMHz29%~;d|A0t40 zK+-+(+~pK4&q3ru2xg}g6wLPd1v4JHsipC@ZPaOD+|ooP)dIrQ*-jO65JO`<+NcmP zdP(DU2CONB*VNX{^Piy-j0W2O`)fVnC`D#nVH%&n>kn}txSW{YQ5d3rz7y|NZUB^oAOy}h8oTS^1!p%O$W zLa{fLr=AUW$vef0+fPa;dy{;j&>elqbBV_J7v1PG=o?eTzx-6XDzFtf-BMUvRv5N?m?hg z_;W8s%hR=bS8#6^)OOzPC)pXi-+lszZ|RytY-8E2ZOBM!U(t%`*hNv+(Sl!tUy_hG zi+#EM#9-BeDQ*GWbUw+j0XD)6yx z5RJp50@Z;{V+g_1Afs%H0~_!Hcym2mhd8_E;057xfJ|pFURP53j&gQ0Fb)X=yZ5AE znBicdpsZslb=V-}@NfKb7Yl^<`xXoKAvaLM&B7P&;L6(*4#GdQBDK9Z2bRP$N4lB& z*t1xRejWp!io>rW@1>TvwlNvMKL_8iH52F_LG3QO8R)a(X1j>19J&U=naF40s|Ppe z8pw-qyHniwX77-=O!Ibe`wNh+W3YA=9ql5XC97^HyJ#Sgu34N1q-z#5WzjW@kwCg; z!L^NBCACHuO#-?z$g=Uk2+cDOjIbpyw*YCL?_@Y}y9Y?~{57CXar+jK=IVzo;%c$F zZEz7+P1J2CkmmUhK$_>*fHcp40n$9b3)CTb?uW$*MW+F2PR|5dB{{edNOL+8NOM{T zq&aN{(%PL2q&b-BqIoV_?4lc8bO+Gm$VJ$?8%T5dMIg=Je*xVj`FqeszW~zwac|p7 z$=?e=n!g?(&EH-i&EMaFG=C+SR%!l1E_%O?IB z7fl6PCT@#?G^aNZNlsS-X-+>2q&dA8NOSrPAkFE6K$_EsT-4>FU%2R57wrPlobCqF zoW2g^ylJ4NlB<&fCRdd}OC(oSK$@$M0VTxk5+JqR9tWg3Z2;1oP6N`M&IHn&&U4XX z7x5-|_3d=gf4J!LF8UVGc4-IS15yi%p8#p@dA~I@KWHVpfXW2D3UrL10A$&p98KTj zfoL2XwoU<3-*bR82JdR+R;aKw8c1Wrfi%Vp*Y|0l>!hxDy%%>Phph_CGId3A7|=qg zp-X{gOP_Wbh+LPPebu!Q zF+z!4wP4{VBUdk4FfV5d;h>1D^)5&z7A6zAqze;&t_IH>7{UFlkpxzPXV1^}gt-f2 zE&606+0HGBmrGn)t9t9kyl^A{|c9}!F5`UNwwgAqBL zkr;$6j91TKT7zUeNC1URkat(cWZIQ%+oEPaA-A0#<9OP+-d6n>C5JeR|@e4@+~${0iNJfxZI;wfeUUN>GBT1WTe z`5_Oa2s}UQW4N^%t}n&~8#O3Zdj~cy*dhV_TBFpSI-kl2yV4zf(QZ_6V&zhtRyuqZ zbB+l^rD|<3dy%v3heA#lFR4=#Xec*(WocKoA>zU`W@Qq}E)kMP**64xD(t4<%IlFp zz}|;z0>(uXvBz+%MDkiW7qLB%EJ-g3*tLOSt%2lGSn=&ScG!oLf%L^aCFvDGduqTg ziDC68`F;imjSW3Vn*$mG=@R;ni-w0m2en87^s_glM+SS^yfFBMo8bfY`_lcXstVYz z_Iyy1zD|=)Uu=&I@{EY4V0x^Vk-9+7@%G5TunOcQh`eCoZ)6}nBCxtCvU)_Mvmw$s zGJ?7b|Db4SYox4$*6((GAoj^X*{a_I51kIjU(>NPwl8@VPJWbABTndS#mxkdZx|gh zwq^{wozo(A9KGam1dtl< zxlZW!&!t}~-;G@#z^ZFmM?Hq&oxKe8Z5X%|1CgF3N_+AZE2TogRT??d=%k@CI8u|hdW#+I|j4+g=!`4@U z)NW;Q!%cVH<^pX6%`kS7d@sws?9vD9vG@0qU?37YcaEG0 z^oGRa8q|xD^9Yd29ss_FBJ6bJNH-Y#UP8~FuUiJ^%~*JDds|}ogo`7vJX!CcC<^ZBT~5tp6>O5?nic)%(E;OLxQ|ydze-+yAk-JYi^4uLH zv$#8c_2%xdg?TUBU1%JLyCXnfxjT|RRPNrodPHkyLu=>AR>R#}^Ko}L=5Y5`3+%eJ zRk(X=7I&ZIaQ9Y+ySF;ry_MV@=S+dSd%;(aZ|$sW?VQ$XxO*$Po<;5s`rz(<`rz&$ zuiU*=xqBoD;@Sz_vWED$%a_68R zM#$x#`?FY8pRK9X42|Tf_#uz7{^O8Pp3PFJJ)uH7rCv=ZaeP;BXVEbjJsk{+)u{sk6yLr#b>k(*QqJ*cem4Fxewq~aL*&h$K7;`X~o7&i4lzU(n zSR?4*#4y#H`*-x5B(=oxM)k!FKr}`RTh{@d0N=26ql>-= zIbG3#`vjm5N>ZG(=&P*(%6`nNHs8jNuhzW!Z1Zm8X2S8CZb-%oOIn=kRSKe*{UJf4 zfKC=<<~Xn!g&klK--H;`!HSMB=-4CZY56n*3?nLb;m9XH^z}zTOb*cGaPJ+UX^u)i zUA+%zeCExra*fZLX8I}hdN$@ z9qZeP(%9T+Wx_eTmDi-97er#OB?j1IdYnH)Sf%%ek37Jv}%XBV+mW^uoZj z^nj^r^>!MSST02y^6WXLNSk7-(o>b|BqzAKjdM|mLlK%jqq*7xZ~^7JZic2rqp{y4 zCm|8s(PPgKz;lD~95y#PFnKX|-ZTUn4WBV>-!mkYE8JWISFBRnL+NU0*Ytv*kf7fmlV!4vys2n{& ztD^^a`=%R%k8Rl!TI8w$DqJ-{n2VT0FyEiaOo~7AAr^LFk>Bk6zEz*m(z| z1$GRbL4Tf6*`N9klmq8aV*5x#z-|e|E~U0(ER_r}r74Dz;TR|x#smmZ4QbgO?h9fxv^JbgM|d$zna7;e+V?IIwZO*aAYHHNKL zd=3dPMjH^15PcaUpKvrv4?V@uQ{C7s-nMeXp%?7M~9k$~UrE!m=DzL~4RVw0Us{g^Dq+F3Q1BMz%JjaW)^D|Rg z4n@{MCNjE&#OU5+<{ZYuQ|wG;z=y%o|34sK>MYhTU+OfBat<{FTH}vN<#_VtMyVjN z*T-T8WbjvE9E|fqY^y~jHE1R=C&$?$xFQ%5hiI2R%G(5?WjaQ05`-4+t#mOK4JbK{ z!0H9Oj>SDl3KMT)Z)y-b_5xP=1O%GS4PE@jnX^vF0jwlH@R*GRTg;nNmS+d!6B{OC z0V?e362=GAgcFMlxTziT{pjE{i1X`6m&MB6WH$uv6s_4A`8+Ktpq=tTlaxmT;DR6V zJW}j-hfovIfyVt@Q+Sr(^&4-dklSzmAOz8G4ypDzX*pQ!|5;LC!wYrnV7tQ%3_Qim zz%aq80Mm`c-cFp3l`_;-m?zijZZC>l6^$*$}R6qwEzpO}--bw%xt#1}JSO z24nH?vg=}RCr`$aJF&Vj6s~Cd@$%R&mQ7Cfvrml0L(3ZNn&A1H8DCaDf4*w7{de%# z3NDEz>d@O_1He7Q$srS)=M*(KHkH%SZ^%w7!A@m{x}hdmlrG2YGDN+X_5C6e?D>wo zXjan1OiQTIiM(n};yBjB#AZ&-kzk1>e|N?I}~+0yZlY>T}jIBZ2= zaq<3N>YX}7Efbr_^03~k!!J+%NP)xA7)pmziWihpl)1<7OBt9Br^iV`Y!Q8zU(k2* zSMpKLg4+ou_lLw9`ofq`a#J9m4BM~9{*w5RsBWAwpu$v$G2@<&7l4YvJBXkPG>rj3 z97MEgD0i@GikyC5DQV<+-+5p4!8UK5>gHIrSMP1G>I=I(!=wPo?HrVYP4zI^4B1}( zHdEy!gqxsVO|1x8Ey+{SfTCn?;5PAwIYp+@xlBp6RBrL)v5!$;k952Q)!fU5iIckz zh`pE`f~W&CBSUc$l^cuZU;yL$jW&5CCr|Z=cDw{hB%507MUqKg$gE5Xwq%;X_l#Hy zrHDrkWYs;JoIm-*RbY_OG_J@2Hy)tO6w1XGT&r%{7MSV9DER=WYMVm$$#!gEnr;>o%TP_(sbXh9m?E~sLpLuc)7HGKT7$|QkSx#ChZ;;_ke`n^ zb~A2Xn)2lZqe;HJWQ$JZ2a(BB)BUk0a5^kl>@Md`M$oc!RJasKdCX)W9TnPL-#c7i zikIrU*7fBwsJguZq+<(Lz0@tjHzn{amIBx4XXI2GST^ zF8VbP$0lvh`|yjSR=^pxs-->mIz%+JCsJrNYrCBc%YAg28iaz5&B?&v{jgeU z4^_RY*W0~Z@~f`D2JF9fy>d#)U+rXh$6IBqJ^}tBLD%$r03vhM#{+q;!h4uUm*6VG zC)$sa_nx{TV1fF9qLgfi?JG;2hH}{(pYHyN5O^x~Ts!krT(Yl^6xxq9*UauKdDk=> z6mCN;`fqc2W4bnMH-{UWaFSmr?z`P6wLX%m-`apHAe?(@KOQuZ+!zfyS%6RjX$4tX+!(Kb*r`aB_<)`lg#gJjewmSR;Gi(L<(F8`eZI{<>>`oT@Aj z*-uwJmu?Pg@_#OA4yWtO`MTD2b)QnQHnt%X5b?Uby=p_rnvyjrddbE(I+|O)swXqe zTO0FazY5t8vLX;yfmX_MLqt(A{vGCjF-$S`4=#gst}h>6te} zfu0M}jdnDgHiWIKT(`S`wjzGm+UBBNK)NtG00pMl27@agjk^Gd$03BRFSx$n0-~BQ zZ2hn63n5ev4IKMaFD)?gpS7rZu@tB9qG}C7XFq0fwa_;gSdEN_-1K@-I`<(qzZsT) zWF^K8WwJgh`Qs|jP(gJ-mkNplT_Pv}G(u1(P>mo?`$9bC1|~l^E%-^fZ86+re=z-l zRCiIT3w>hAYm+m9AH(#A=~!}P5Wh>r)Yh_UL5C7*0wQzYbU`#h)z?Wn1Nnic$SKcQ zrKdT9h*h@gcoekBo*wAf(VPg`3xf79tDf!pYf18WX_HeYQ_6yfC8>jFZSDzT@>8{` z>+O=*(@SdN%}o*xOEi!QI@Vw(@aVwQ!TU3zeUqsHa3bFrtlCG9uKgu`AH;BIh78T& zo|~p)KO4_f{-Vj*FgFp)K`=24HO8BqQFiKN%mkfm`kBn-%Ei|p&sfpqM)a(a`9z8o zEnHl}E<1-52)QLb1Jy=Z8aMd@abtVf`mu|C0W?zFb^>XIzY7!=qE|-^(rG9yP@a9+-D&j3CjG92aknH|WYK}!jQ>bo!Y2+Zg}zKlrn@Py zzx-pSBr_!qh~3hS4zB!MN51B%KC7hC`9YqA9Y#WqQaP14u{XpNFOtVQ%^$sWDq27j<`{vF{UV`Mz^t=o>s3Jm855Ev zFOr3tt~S^J9Sst6WP@6j4WKfC9BhvGnw|-)Mpv8cq}MxNI%XdrikG`kq1;{M6v|B% znaWgl;%Io~SYRZyRnB50)3fpf;{eaT+&weE%sdjpJeonl&pf7^BC!*3QWdtSa#2kb zcaG}N90B5yL}6<%5LX4m)@4A-Mw;AklYw|Ro$d(LaD2-=I+l-NDD!(aq62CIr4f00 zz}!aEF62^sDj_U$_60qiR2kL_wwbkp*t9^RJZE|pmSG0b>EykRwS|+pU3)x3VZ3IDJ}XWF?dzm1vY4*K}Qh=0(bkm~ovzaMhYZ zf7nX6zO?w#Z~)fr_@fG?$T=!*sT8t7)0mmEuq45d)zDgsu|u_u$yy z45Ot>#|}(bUog{O`|+H}&U67YPfVkm&7kGzdmQ7NOju>%=Q6|Z#1VCvo<{TlJY$^0 zs?$U8rcRy&IheX&EgJ_XMO3C=Aa#&(-M;D~0P7+AvFQY?V}waBmpZU93zg;1puDc} z7&KeZ_xEEkS`n&xyK8?jN?Fmdqioepi0n*uAdbk0TKp3TVV6`r6?@j1+vNI}tc&ey zE=&Co$;wQ|3GU8h@`Z0dL0lyVLCHbM-`v>?&O=xqw7Ze(3JhVUlf!a}(-`fbU`Nmv zjSjlry``7plI=cOAv57;*t-7(D?L9jl_yAo6=1yr6AqZ4Kn23L+VwWhb@~FzVZ|Op zgRZonXdjI!M6*i%NY37*ftZ)7?OtvWwg|q9gD@z9&t6yMADW7b){#iF{hO+7jwIFG z)Pl5?ML{!wPBYLqC2*pQMK-PziT|5GddlP)AZkOy))PP!9m8@}uDVe=Q3i7hc#N3Z zDHLU$KxF9H>xmDM6``Z5Sx#z0d1_;M?Dgc!)E!M;ht?3r7pD-EuEIj?eEH-|iE}2H z3JF!eB~-(g=`(meZ|Dp14qyBXh?mMK ze6NCFsdWiHDFk5!1B0Pmzt^l=1=s1k=pB3PzFzYpZeOEKbJ+SYKHm`Z5qy45s1E>A z>lich>Fa)vyWQMltDRH#b*01i8Tuj>b71vkrQV`f#9>{fonab5?f-h8_GK@PS_$!Lo@G>43y z;=?nKYJ{$&1};;>Gml1j$=w()PM(Eg*07kjMu+oDvmb9jc^i%LqH_1qkRwff-2OZ$ zKwTQiJh%-AbSugCc%I2nbdDj|vjA1*K#W$^lDdt9Nf987;qdXqF-|S1bXYx%^|%gH z^3`M3OOO&Y$){FlqhKBe?^b7nQ=P0)N%+ueuh$#M=*cEL-YB~|M@4IR5WH8N@UP7L zco$MP!w*&4%d}FZidShB-zu%F5mn9B#`Es^-Guq3Tj3KyEYe_15zEsj!uBxDRmET$ z0%}c&{uK?V=+Sz~o(x7DMyuyCUF1A}B<&S~w+vU*2-zB{%%LI-Tyl5S3q&d9b zc8(U}xa_jQmL@c);f?0Zs9UA;O+>d@g^G3fY%oo;NE~zueLS@Zany$_jXjPbT3)?f zVJ{8rei?^S&(T2>ia{pYu?CGKf|{T{CvmcUtG4~S&z5dvQ1HTOe79wu}fg zd?afX(&=i%64v26R);633CI7Da8hnaQ;y%te9M;P1dyKQuoCEhBpl}fddB{(Kzg$N zr(N_#p#PR|-viQ<8~zta&(801-L|-H&$w>Caov9Jy1neWaSTyN|`?ea!ynM(z5*$NXxbZNXzzH7rhLmW!n#= zc{v8JMaxzWq;4m>Zl}6#ypmYMo$tC`E8I8-+HneP0fV6D0fwXM%fwXKZfv&|L zR5|$6Qf>sgP2B#BPc3ghut6>F$u2s>Md!I_xQlqsi^gbl5l?qfw_AWTwYyxmuLCWW zbiWU@74Io*tp!rM@aKRuSAPZ4Tpb%Q$1e{BS}1XwfjF1Je$=cRx3jU`u@~J#d(Z8zxiRe~eD&=aNRR)u)^GbRzeK7ND@5Y7aD$&YgAX`b`^Z zx9I2wAcr@8>K^33V-4?m!^-&W_u^OH)s|${ES5Brc>}LkI9b;3hK(I`W&rWBn=9>F zT%3nn^MX*RW)Enkcn^*@)VlRhluX3tu00Zs10K(&feHmav91-zrt5?0+7Jv`YJ;&C zR+QS$+Ar9z{e-V;SW7%TwL9JXeDWA<8QWO*Z#ICKhn=vh{-Gkek11(Jx8#A@rv{$4y6oCY<36~qN zBzkIH5#qyJ9$_Iryiu!pYpnUHvJCkt>Il0| z?ORwpN0)u9eVY^sYV%@y?citr@~VBCcyG4N5(Fzot06I&Xw3ns4m@znZC6ME{d*wm+%kMvi^E~$1x;_lcsCsP1c)qB)8^3U8B0NxI@SC~| zwN!Rn4;c&_$MZ$?JJYr0yMGM_ygs&Gso%jna3mmh^eqaQsz{9SRYdzx9CKfwZlrGQ zz(YLiAkh!PPD!RUx}he5(@cwcz5#{InN69@GBh(uY8Ky<{zmhsGabZhJre{BjA3c$=Av!m1o)C)dkOXQf#;o#os_pFm*AqSF}j z9c`L@(;11IehNO1Uns#*nw+~PDmT&pM%duV$ec@8N&aVLJ$oVjkULCpJMbuAj2bHiz;a4vPpsL_zDB7?P2((RnW8f4z4vq&}fj?+8 z@kwTkxInAK&Bmuv`4Ny(Sr4RCI1)c6F!Wtc2qTt0jLPNK5__ke2*4AdOp$Aw(sf4*}^-Y^MR~*<6Ewo)miAKcmvf zMK0o@(CWs+4D=?p89;gy8x=S@)Lsvysb%Un?M4OTbct>9jSEfPp}TgMf%@LFkDtKZ zY_rf5dJX3w?A&d{!BXpwBO#er*owG_Dj3bnr9f}sFKms$=T0fxI3OM3N6UFr-UzS9 zW623jxo0ZzGEJOCg=3y(&&TC%?U5Of0i07TjK&9aorf8HA6~W|dGSX{cKiaIxiw>6 z8&1;V5mk})g>6^OzIrz9Pr|iISt++KNG_sO5p-y+ce*5hk}mZ>Xc6*I!k{9Uk8#sq z`bjrLmo9DGO*mvv9`kL&!H`lOrbXqvmf~*dh#hvLAd`1Eub5 z<--(;9!U$zu>edYbfKW|ZJpXLN#q0kz=Jgm`6d}T4}=RzA?L^^P<5_)(9sQc zisWYN5tiA&luhjYqoZpS}k)Q*G5@apb=~o0}FS@G}(2>Vm z92J79#@&F|Fvqf3&6%lk)6W5MO+ZWcU--p_UWE4|&+(4v4DA|j zdKd%Xf&N%@&Bu7ejru#<0&!_{Aht2<%7OHX0A781MM!Dyq#~S)V_Wg3xxRo@@xU%l zzRQF#T9FuFyQcI()IFMlMGdeV37kz$6E-g(9Uvgy+WjRX3K zAiTNMu6?rU&I^)NFFF_o3ZYV$m%S>j#D9ulNhREfQ;iW|*f8W3FVJp%abO@oKPN zF$5Y?YHf&WXH4I8{Rf06xLQ*ZhQdz>Ym^Eh`X4Ah4)d+F>>-epv6*g(*h8%YNsIrcqA`o(} z7cT665#pMo4QG#40bcTpOH*0BMfvibKz(2leHLPXr>GJ%F25#b?uzb$tNbvt!9Jbk zo>>*$f`~LlUMTNVNbnc8^(UB=IJe-o>szB(B(~u@ar!*S%dv-(8rbx?{3J^}l@nWL-a*;!1U;uaSv$bK7)@~Tci5Ffb zKdnYo66;gyjHwL~1P~Rldk{Lin@LRqt=*)EhL>7f4SfjKaa>1cBY&7teF!t5P#7%i zr`91Y*PpE(UBKi8ORlMn+5S#GSa7V141Q*4oI3?3l-<2{@MiANsv9~s0)zFkySp0f zx)6-(=3tQoRRk49b-X~uKy0Yk*)#KiS%Tk8u;SsZlFs9wF9XPaU;;h;>PxHk)Ulr!v)d8T{i*q_;#IQ^2n+f zd`qog1L+iVC(uxFdkN?QL9YYp#FEorMMq(LQFOeEPI6HdkgCY5fpoe{Rk}`hF9p&8 zu@Ok~G7ac_NsY&1Ddm+wN~HrxseBqpseBelsXPp%wXunApn~&ZASY`boC>6Mz+=y; zvJYD;DMd@TG?3QI?U2gV_j8ob#rMB})c0v1T_@fSq}zV>0MQ&OY`p_S?xe?i>*PO^ zp~_q4)tSsJzWUP<0=l7Wyu}1TbH@49-)4JU{Qy3D&8;aH=iVE93fy!aeKrvH2!*W? zKyTm=XNlu;lvL@*fgGjz+_~o9<#yf+JVTF<*2ARdCEF8nN^|>+c?)rB@->kG=M6mX ztU;EX5*0H9hy=(=DU&TLJO z9Hy|%NI08aK2-`Ltb-4Ze+0h>9XT<)#1X^mg?NJ<;PB#2D7{NL!s{p}Q>fP5eF(o; zXmj32qY(JNAvI4$UjMmL^A(aJU;IB$YMvr#Mv&%}f+#hALeMCns|1Y$njwfI7vFnj z)>VjdLrbM>M$TIImis3^fJoX9Xqd=`V6GXw8a|@jklWT^mIk`+<&``&fqDh69Z|=@ z2YgYUYbAOEXWg<1fP!oQ`;nmu(0&4E1*!Gn{CgQEiEWf75dqPy_|v>z0>r!;705zK zOza}daZs4-(at_63?c)%Xe71`d$h*~Tbj%+AlkM;#vhHHGOl$4H4_M2&I7`DTo&{< z>@hkxo&&@#78YA6uk@3c7d+UlEwkaImL6rMN~Vve&$I|(k}>bXoIZ2CLk^No_G{%E zmAgeFS+5oOB|rCG>{hqyT zUVWP?GEDF`A@*LF;M?itJXsQZ#(M3G2xRYznCrWX+}Rf)caggnkz?Z)rXs^ey6dX7 zdyEPR@@1^uRVYDH-B63Y_FUC+OxX80r`AKs#zQGL_R=;`-B#Z%!Xw3g0kZCL4~m@4 zOQ)fJ^&ZVOAiYQPHX!W>_qvEmCT(jwfY=dnhY66QsW98A4t7T6e@gOHbLMBPlzZTr zSIe!OK#wXl?8mq}~ijd2@cvRl}DV;s_Y+J_zEuM!R=PM(x_eH`@Jgq3#Jdrr%L+c1p=|^m^zQz~6V> z-2Ffh12#E+#%T9j@NooSqblyRr8KKn2Y_5l>4$_W2|C*jDRC6+x%nlIbzB|MHgPJD z*EcC}@G-{TKa<2DCgfL2vxJ(kRoEfu2)9Br1>FhaxZeD|$-Yk`lJ=Nf+4m1Zj-y}@w!)#r zM6ALM-eE5ZV6o}~Z2pbCnK;dsb*6P$nzQt@Kzdp*Jx$h`-c0U>%@Xrm5AF zJ70f82nZ+Q+Hd}8nioBHn)bG)?-O?pX_}@Np78nA&!68k4j)7T7k zn&y>0cbZlL-3*%QKd1CTN$iMCg_w7361h{M#4s=Z?N z7hsAU9R_tsqBhopB?1|b(OW8GwVu^KmbdKLm9ZWq)@-Se+$=fbk`Pu8G=TBKVx7>qIU!cq*E5(~0>HF@L z&oAKck)6L3~o&eTU=aVm&QJChI7{fcp_`qx*Tpi#2{>40rUp`!gBid zS%{&hZ|n3O9`19F_%YQnf+)-=>u`hk0IIK-AVfDls4{u5+9D6B@;OSs#4hV>No4?B zB7!Icog!!`(1!)p0DVYM9Z;p9IMB(0T7f<&2%y(P6+*T6QXClU3pePJ5zV7;vtteI z2xoe?WY%0Z@9LTwA@v|W)v|>@O@T=CLLVvmTEoPNr5x^hnz}H;Vhsa2kLIfazx?^4 zcfRnK2vvr^)TPg`D96P5WTI_p&1G}vO_;?iI`d}VoOhSyL4ol=^ZN8;fPvG!+{f4iS1OHtOZg z<&O2CoUuNVJ=RMxx4%56WIG1o!TY!4n1JowEe+elQP@XB;|<#@qjPHJ)Nr6!79FLM zfy8+zf(&Hl562}_5Fd)tqX(u(SEpADNv{|x{^{C)+#XXK;O#N^Hglt=CX&GaKO=sof!;MG`$&)i2InttSde0JXU0Pzih^bNuE4WZ0; zx8bMe;HdN?n-&R%W=cz#3Zz5jl|WO)?Pef7 zg5`gJridGN9qWl2R|DySC6vR?XwvNsMSx}~0yINWw{IxIFIJ<8d{Y-|PJhWzw96j5 z^Pe&l&60YVgVfDXv{JM;|L9?7wxl}%=}s0@4fF{?LxCmC18kWU56*x%i!~DQwRLi4<7TRZkQ=jY|tFSe~ zrqy_6yjp3g4wxEicKxsrIZHlCOh@r{A(qP&Dsz}ZwP6ZKwFVY>aWpUKMQWXApk1EE zC0t^#=Q*Xi2I2%ry?z9nj2pPgI6Wei9jqKb(hU=^2U!5_pyMIm>4quTe=Fb$D3ddF zvl=q-nT?scg|PIwA`_pBZBbV?H$avjVxXkO5Y*fyp!D=roi@dskN0lyC{2b z%)s=gzD;-B+|o%<_F!E#MuT+c8vGc%;|}roA@EV`RJ8i}ctUpbkM)!>yaB}WhOLuOxaAV#d?1F^vq_}#CarTf9LW%~)y{KjBWDIm3uK&` zO$6u-{ON3GH9Sf!T0ZH3VdP}<&4B|67kp3+vh=Y`=!Ed=20;}-wjf5m9{Goa1+J-g z$u5OYp34hw+C$;QHE@13o~eC9IcK_Uugwj&v-TlCmYl@CU)znd1F$6!53~>UR>aI<;w+TBo znQ&X=Sgg=_S{mI|*veW|rAu;`>?#bny9%+5GdPQRj%PAgAedm+sNLle9&pT!p_I9s zbj_*CnGAoyHorsz_!qXnAg_RWPnDBC21NTlJ?=&uIwdBKuVHHm(7l3I0IBb1f&Nq6 z9t7fx3tN8zQj5c4RIP5XJ09qB@GZ5%Kx%vVAs3zDA|4&0+v-LD>9)ECAT`1J1duWF z@7A(o2fVkVPD`7!jcx)epqF&zHT`nrRyzSD0ZoVNXW9uq3iKt(_i!NX1S4n6r}f=} zg>CaAv**pYrcF)zPII@b?LvwOjrOdQ*norS#vWs4ocM9sYTy>;+oaOIv=z;8Q=#?y) z_8goEQp?>V>6_W74%C~l9s4rvP5td+=sce))SF7&-UKrcwW$}nN2*H|=j&46k(zw( zUCKtOwfn3C((dyDkanNn1N})j{3}4(k=_K-j`XgJcwDf$^#{_9bQ+L$Bcu$!zRzi#L-{+ zNjHC&__pLC0{8zGGyv$Ef@*-iA&6b#2ZAO5eP4ZPSvzR<%riI4N3NL5nycGpBnDNJ zJvlCeW-e;GDzUf?4w9RaqFAspkR*&RhmeV~(rUZrrw@5)&4V8whVkc+ZN|%?z3J$0da-V06g&*$ zk99O$yjU%tz4CT1);Aah55xFlQT*^?y)xj3k9x5v2=ZYVf2?ES;>G%6%Ln3KtZqiZ z!!Z6>A-H(4{O^l;2R;nrj|I(gR;<5t*FE5+6?I}Uj6W8XSy{301CRTbomdRxkHr?~ z<!F7Cq0yOGr;?@NVHkfb4x?VIg6dn)on`KNbRI#o9T#eyA5K z;lyGXe=HggcxkQ4e14%9>s}`o!}w!SX7pmMJo$p(da*V+u^7f5>l9zC^H$xy#EbQ+ z6N_Q|u_C@$$DDH?7?P>OQylisF#cGl`eNPjhiju=tdBdf7{(v#G+!+Iz+=){>cnCg zf2@zd#j6cJ-}tfzi{z5uQzV#8%959vkuLJ7lq_r(28ex?G zTh_0eui55NUhGgFs+6;&0n-7Bp+3B#J_^W4MVJJU;RnM1iw(#ocM8N&KYQP+#|SP5g^ z=P`HALv@)NyVapQwio4(_o6(u7v*sh#uR%<&yGnR<Po@hiUm-}7o_ZqMg=-sd^bSwH8q-2P+_|M6NFY8AMIWV z0kX=D$GN`j)dh4F(4q4(_>_6gN^4ZdZ!yC(GUVZ~kcU)uYaBZZ^h})D3j2(m*C^6~ z6Gcj=d^m2kDd7S|9z}WCr5H_Cx(3m7l<22tlTJMR#y-(ye#`@gyjGFV7UXlt$|j#J z$k_K|0>{H|tc!_H{`jyV<6Gk}1(|HEWX6EBte%T+k3cU`$8A3uWL2Bw@Qade0Yg>T zPzS86elZp#F@c8gJAlVxzK2Dnw!%jgF`jd6FPc6lB=g zDzhE#ROHE`9pbvEtakVsy1tgL=|5n0uT-&n5s55B+0SUsq$P{++{ z21rbM-qZa>m~wTwo>x|=<62!zRv3AG9&fDPP*$kpT3td`IvSUK@a<#9>T_j8_V^bO>ylNGvxEtiwFTC1#3 z$F;fwBxd|6+`VC}$*T&qNld8YT3rbeW981CLzETjfR$CtSCLhF_>Ixnb>mvA&0nXi zP{+;dYO>O8-W`qCC@a))t)Q`jhyJ7Sx5^52T&ruyO4qWxT5g1s4mH8?F-R;c6Vbt6bj>veZmb|@>pvo|+ek;(*OGrv6@>)`6UUNlWw~4%NCmsKCtykpR zDKGnug?VIkB>sjUPI|;|T$e{l)NyP14v>^Jo1YF=m{136$E-8wgM`mmp<2DfmZzkf zXbe$4s$F0)`$V$iAZ9ktYE7WnV9waOO_VcTr9}(^6QL^$MZDxWMwjb1Sqxu+G`L~ukRbHqAR#t0SN>+Nc95d~RZ%j0w zP*$kp=JhyP`L~wM$_jN{t7T;6-&)>RR;c4zJwaCft>t@Vg*w~@j>V!-idB+RElFMg z-$Gh;Yk3kZ-PZDmsMF=77ERv>-nv z$SX-l&seYBTN*IrS&F<;ke?Ccm4dvAbo8v)a#)=MhWvmcuM*^E1$mVquO=OR{;_sO z;8a82q{yoU`8h#eEy!ye@++?_yV#IFSL8K<{JbEq5#+U`(-?jS;OF__$2BqJ6HWjT zq_srGPpL|xMt*BOp&kKSU|)^ink1LbAUup2?wEyV^w-b6aF@EenR_5W=}-XzE{rG=3<3Gz#% z(+jbXo?LLjdnP`Wa5#bVk|4hfQrG8~1bH**oQ42MQ;&Z47(;HO$eRUu3+TG!&4T<2 z>BPfttjXP#$3Rokb(*2buMimyd)F%ox1ZpI>4Uc_@|%ME7U;S@zbVLXlTHTw##!yLSMRvNkUv-Cx0!5R z1>QwgIM(49ecfd>2fR)8@E`BElkhj}%Yao3eM(mn6;*4s{09e|%kizZmJRj#r^9d~W>K1fXMxcfFYD=XA-tv(>DY9xnWlyn0}USEKR z&@ZgJBfcc75%3$S1Bb1C-B`^9tF|B|9r){cFMuQ#{u;^mAi-oLjZTKUC_)nZ%=ash zmemLQgB2#!fpS@`?rV_51n_VGeone*;S>{>d}W0?I)>ce;e^MkQ@7P!tE^DRwc1No z{;h72vO*o#>RYnH$*cnWxV>qevO*m^3avy*Oj|v&F&%(kc%}G#P-9IkwcFu75XJ;* zz;BGknJqWoWZL0rin9+mOc-vFF{!!2=b4lqkRrue#DE0 zyjzif6y%=-`A0$i*&$chc|j{ft{evkA^j}KP_Qtce-`9lNk{u!xk1fdhJ30b|0>A8 z3G%Ok{JTT0p1$xSL(Wv>-v#*(LH=EkvDuimk)HezG)xdtdO(rA0JcNBZQzS~-5T`h zeo4F4RdC4X9DUL`hP+jgD+qFoAXgA%e5xrX&;@*qfuD7|ZnAv-Ns%iGawS2oD9Dvb zX8=$!9d-JsPR8e^O;}nv5FQPDOwx@;WkJUKsbT^x0RbOijWjFBeFm9B6uD{u$&{M% zAN=h`zM9CZs>rK)guEIla`ixXDUJ~2>VkYE>EPN1lY6h@Rz*HC5KcZykdG8(e4;xh zP#vi7A?)ntb49Kp$VUru4MDC+I@nS$xqBcn%~)D95biTR@aooSO+h}EbQ&?jduUi6 zIF(WL=bfa;#|m;SK|WTHYm-iQAj1c5?)FYI4fzH|t}V#N336>gu0uMtfQo6<-Ayhu zIH%6uF)tA1}!D1i3!x__w+SE!gM!f_#D? z*B9gyNk_L0_qmBYMLtoG@l6A6+c;5>@l}U00UhTpC&%wL(RfIaPZDH&?YT=nNswb5 z@;j9;I>nHe;{XFGHV|HejRZMXknz!OvnILZ#(7%|c{SvM>Eu8-xv?OhEXepoX-uFI z5#WCIAL?2?7&hq9i0X$NO{n3@K{$;|}0sUSBe9lb(xqfxBL z%>}uIAU7A}mJxj3rN}J>`4mBJDafrzrz(^gQ|DtUv^F(Z4?bgR6$p>Use;@}kXt+C zX|cz5FyvjQ5!h=j$fpT%YeB|`;Q46_q`ZBg(lv&B7pzn<#RtNDP7vgHK~8jhzGLs_ zRv*m6Q#(kBfpBsgK~5CpwhsBm)xi?ubK7O@t=Vs&c^Bq~*F%TY&(*?PsAa^1iJY&VQYyak6hI|#QpfGg` zgp)f9awkDPgLL$Ydd~2%4Gp>f83gvu5acd`e1;&O>5%8v+wr&|AA2T~&lKb&K|WKE zlSwC?5#DnNztlD4*OOSBEXeqN8h7MR7UWdY@t>{crZ72Gkh=%w*B#{A+J#6fr30pkOvBKI_Xqm=fXz*Jurq~N)Lp` zd9Wa-3-S=hXLsap(3`;C5J4U)$U_8qm_v3){vmysJWP;>3-T~Q9^sHTHtY7SiSta= zHAe{YNI@PU$Y+s`ZqM!&)m{DA=d%QPlpvoa$fF&yJ6o0ZXYy!4K3kAS3-URnqi3u6 zYYVMa?!D>+{Tx9K3i3IEJce}iY?bkmx7Wn^je+d*7(vbu_r^|09Y# zPLT5id7L1hOFDYwpW}71Rx;i&_W4{v9xuq}3UWT_=&`QxiV9DdXe?Ibd_kTd$oYa? z;E>%B>7(K7bAcci3UYxU7dd2iL~1;e$wh*Eo*)+qajlUkG#8UEv~AC14^F0Mc< z>_FC73#QF=SQ$g919>wsN-5) z;8=Zp_ZQtvUZu(kb=d2rN`frlSl2-=Bo3AoK2YKq+B?$INhceQ;&`{c(}1O#>v>xh zd3qog$yTeoh^%z0dm(;P_35Ejw@+DJ1XjE*Z;}aUmDuOrAi;WP9lLgB5ZSJGL!Jy) zSns4myoHL)61(gd6UQz)bL_HTLONrBBzxR;MZP2uUiM3!vSW|CBvkh9S>%>?DOkBZ z4)dx^2RDKamYsF%vR_7IyX+PjstCO#9pbFTN`u4_yX=<}$1Xc_?6O}$I#}nJ+&L~a zhox5psO(mYx>As@5aZZYq%#H(GOCv=@>NW>TGZ8KrCSt6^{P-*zf)FMgOwXq%&Riw z1S3c;N0oK#sLmv^9aTf#3s&eQ=@2J>9Q{!eJF3?Z$Brsl%ZzY|k zfPfEPyDvvw<*5-I-bGlzd-t{~qo$a4jG z9_chu`1oXl(fxG&2On)R@wr@)?-k^Qf_$$a-$y$A**S0T1>K;L>h|+QF^lgLP z($S-qd;UIb5|bAT^236>Sdf>Hj{m4Ndoq)k2=XI>yhM;6B^{m#;f3~J-14T0#?~oJ zepHYj6XZt)d8tD#>b7%)A&;HPG=HYJKG>Ix;-C1jeUMnke3VclY+b=q=S?{wj?GP@@Pd~A;?dKtl$Hs6@vUU>9mKV zsMGD?K5rOu@AKK}=|F7QxUo`@pBCh2NJsA)eO@tXvmtL$NyjhT67UV6Y(;Z!d)a;V%9mePLE@A1GK)BDZ2=W#|ewB2vcVl{N z?PomHG@>`^%XRA}+ynKPF!B4N?XuKuJ zZwvBUg1n1#j%9?mxYiLr8*-H^S-gwL__?u?;AeLY`HskIm&of~($Q<1hP%(LYVtZ& zk>3r(hLLv*^1Fik9_gG+UcuY!7OsHn5xT!mQsnmp`F%ltPmn(#onwHEX;Yn=*BSC$ zMgAZV?(>I&{DB~UL^`@ow_G{{&hNC(%M|$|LH<~fKN93m9G_2E+0vSGH!Jcdg8Zo< zeOdQ_c6UD~ zD}9}4?t<%f8LMf^3U!$IsFHYIEOM;--oGFYu1Vm7S9RV?A8H%VTcfN{$F=&BtU4&G z4+quCFjj9XE7alKYr=YxQ!H|<9pJBs6AK5cz|Sqm-m*g5cwPr(g*vX)*JOo0BY)MD zo1ZmS{goB!xK`gpu)0cFp$_}}e3?G)bvR8P&iO*yz*Be13U!!s{!DODCD)&C9nS8n zcOI#2V5V1AsKcDj*Juh#>=^C~ao_`ZU~@{973#QF`y*K0s;p24tgKzf@5rhq;`V@c z`qSPU@PF{uUeIA#)mbc2{oU$uzYzzT8fo4+zw?*c2A;fAR;c5)mfy)r_c-@DNNZ(< zI&N$EgRJb<@{5QMx)Bo?3;tkyuKH?gp7AGNm!d)}sOk7*V9~$|Mp3I}28d(l|j~vJu(aGfXs>-W^lh-KBO5_zI@~R;6sz^Ez07`CKZF?h2D^gx|De!wa z-21F53UX!A!4hC{*K9}M%+kt&j9)?Sk}C^x)d)Vv&1P~{L9QmqRRy_v1fO$nVRCgr zK0=VI3o^dJ!`z?gM&tK6Og>VOj}qh~1-S<4U<<%l54wDQUDH~Qxs}N^h^$-YSs+9! zw`CqJ@~R>7!Y@vY3Fwtol@V{`D99&~P8~&d-y$+ukxvrjhJt*OAjgu9Zinu5q8Ai7R*)MB za;zYqOggxJ#8hkNkK0T%KE0czCkt|8K|WcK<0AN6X#tbt1i6VI#|d)N2tLnJGe5xR~66Dqqe7upCo+ECuO#@{ zT_Yukyy8V(iKOGdmZ*3?GT})9QHnN#oG8d`N#`U+cn=M|WSuF+CyLxwklP7zTS0D5 zI{v+K;3Cejy&!iGrS1i6bKpCQO+M({cRAts+G$Vq~HrXVMiPCOv6<*j(B(SMB3 z6&Eu(S&&l%Ia!cXNv9qoyvxS6S!KvSC~~SGcNOGRLGDI6{yin*Va~9dAa@t!Zi3u{ zbZRM|-6!T&DRK`%?kUJU1i6<(cAuE*yo59CCCF)l+)I#qlTHmlU_{(!#GX*(-h$jm zkb4VqU(y)^)T;2~-XYoi5fDM@%Vg`$qJCr*2gfSH58heSm&mAnkFx3qR_>iem{(;~ z@mfF1du^;^?}79uGWIX{K;OP$$jiVAy(As@3s0UsMt_vVKK~j(oSJZ0w;|@(XORO* zhdm0v!n;zh`{ zf;>c!hmnpR*?#)zZ5V+;L}`yA4-@3!f;>!+N05&Hs^HbfIfoH~JW`NH2=ZB^Mv%vnj*fZ-YgU6>=o?u zI6=-6&z@eo~Ov?3i5bCK39QH>5PG5%Q@v2 zMJ`~nHK!Dkl|82v5E-M_`YHSk-;n`U?wo>o@d#c5Iyf$}jy@>O9gon>G;nncPjEEL7ptglLUDR>G=2MwTe7Nkf#dr6hWRwI(pA)*6&xBm^gQP zhT}Yq$a>_*Ju9?wNB;9gUeiQg7m$t~>)eq)SLJnqD8+?>e1RZOcgXH2dW|Aa7vzfs zdAcCaARYh6zpltL1o>h?o*~GWkWL$jCeBvho<735T6#RJ|1n)6$d?N8C4zhz>FD*E zyVJf(kuMYE%LVx|LB4`?aIK2Tz5lQoTyw;9g&qaz(yXkZ%*@TLpP8>FD`u>)ng?nmE6v z$a4kxc0ryi$nzqQ1J85Ym?y}02=Y8Zp6`%Li@)n^e2!P-`GS0>AkP=%yGUm$IEQU| z|D-Y5=1euH$agW>S|i;}RyZc$Y}D++gp#|64FB=wfEBJ}?gpzE6nMK8$4Hv5r33IQ zmRdX9?GlpclHCFlxX`aS_B!ew%DpWdL;fE#K5b-j-w9T@G9n%L3*Ym&j{Yc#y^dNy z9D5zb9D5ygFX>DI1eWxLQKP>x@ySr+dn;fm$Vz=D=|ZyV1Qxgg>tAEkG53bza}`)& zxfX&I`VV)-fCM9EBtI*%k+fM)s_;ukEFB~bLsoWt?xWn#fMXTm=Z4O$5>4)xgH=6{ zk`Da!yr&eIC3bx77x7_^9iK&{<3DPBt;mZwKGwDM2LySMXqgX^&S>y306#PHPPj?8 z49`3M1@zqW9u(w<1o=ThUQ9X|V))>tY+C-YsnZ-qUQA@nW4V%W|`@>)VV zbAW>_VcCxU878kU6nP1k!s=g-kX2)_z#9DKqMC!3gxXKP4IqN_2w26?r!`7q+Q#P~ z!4}0jcH4NA$o4siA&=O|R-{AZ4Ish961(h=iLx`tZW~KU$G>fK*u>BYD_O*EBQaNw5yY z^o$^{669wD`B}$j_lda%FEjaBL0&D$&kFK$q*I9zVRy59p~%k(@)|*YPLQ9EK)zu! zXZXAzuNCCy1$iCmV2{P*KBpNEdu5o`3G#YDUMI*ekWPO_c049<5d>FAjlg8 z`2|7VNIEf!-15qv2Ml@JRu*p*eVzYqVX`&Ozd}}x;V@eD zIOp+_Eks8B+Hc@*c(xX-V(8PkN`n7k_M;%dR>L~>IR7egY*jwAr%YBtsuc@u$3K+?Ua`t4U^Xg%8GP|eCnI@$76{djn|1|M}s+bG~OT` zt}%H3s?#r~D)Ji~4QtlhA;@otHnx*=nuBxLdfn$DUwn&w-YLj$3i3`tev5QYV1!q* z8jjBJk5bGo{`;07zb(jb3Gyz|!L<)2_vyth@33^2AipEXy9D`N(m56o7>%a}EWE(@ zoc1o0-xcKDg8Z%^zvuYuJ{Q>&#!pP|3G(}b{GK3x5W(kX6!`-|{!oxV5af>>pWWvo z8^1>`dmjn%$AbKkAb%3U=Q)b}i6DO}$e#%E9@4@6P)to9>G6xH!C&4Zp|?knKNI9V zg8Vt@#4sYP55DsOi$53SF9i8>LH;tNgB15E(dR#6@|S}ARmck4DyA<5`D@bg@7)i= z849Ma1^F96{#uatl1_WD$K2iLPcQrwxt_OIkiQk=y@I@tbYd707U#S@EZ!%``vrNQ zAb&?XdfafI5`FSBCVwZ$-wX10f_#8<{MP{UK4};&jI;Zc=q$KD z2h)#&{F5O6D9AsP4(@m$`O5pYTVq{~FOduH@E7D?1o>w{{*`q6&q~%Q@~?vYn;`!x z$iGJ*r+vjf|1QXX2=ecOjLV^zKu17eG~DM;v%hAt7ZVFJm_2s~$jY9(y%;=8u;=ay zq~jlr_Z7KRTv3oKlaBv9*k>=3D+_WJ zL9Q&wRY|87BfO8=e*U5H`L=IaTvd>(3363Iu1-4b08s&cu4(h`eTMw~J|`A9*oK|20%u6uyVH3a!+L9QXlHA%-m&OiOY?{YJ*I86`IV)0 z1i7vt*Ae7;A)k?wf7ue)psm0_FH@203G(rRTu+eelg?!@990M2>egfH8uGo0T%XC- z+209d)fg=B?C;^K^Xk2e-eTKMQS)nbL ztnTm3F_LqHrxu&J+FbNos-DQ9@QI&+G$8SRT%8K*G8uVILC&9 z94p8T1-VfK^3)1UZY0Pj3vwetZcI8Ol+T&h4*XfyD15`2A~zP~I6-bK$W0>nyd;Kw zZX(D{1-XeJHzS>R@EIxY{k_LmWO6e>ZZ62p1i1z2)K}5y;Pry3qk{V1NtKw~LXcYu zatlE|g>>K-CHHLoIz>K3kXs4zDS~_|>0mT4^{;|&($+rjSL9O#xwRmlD#)jij&2*? zT{~79aglS_PK)~cNF9ff_ysZ;2eh(_fE_D)tP*{Aa@ev z(*?OR=`_M72kE8V^%k49QS}HWcNXL`1i7;ycOe}e=XbY$HO-KhDsmS=K2wmp2y&7` zUa;+=HHQ4ak?eDlASVlQk|3v$j$RGAcTCMcipeR0oGQpEg4~sK{O6QGHJIF0kh=+T zS3&MhI=T`5w9wf-=f;>o&2a}F}Px(NR2Mh8LK^`o~LrDkMmzegg9dGUOwK#^O zF;tL;3Gz@u9!@&`eek(snLJ#OM+ow8K^{pudVF^8dHY`?N0E+yG=|k; zpGOJuXh9w&$Y+xdZX)B@vGsy&<9K$#sCTK&}G)GH{9SNPMsC#=ds1zrF6@2jS z>GIx*L5dG@wkWHN81&gblNw7_P$g75vybcdw6Qv(ZoumXM@R=TUK&X7oW@9If&|Z- zjASE7FtNlwlggyLo`+*K;Ac|$op3c)m#<1a{*(zGa@kue39{U~n6ij-D#-Etbk!g8 zKFAD}^b%#2MJ0uMo9VlQF;C1L?rpZ-5Ry$CEDz@hA3~p2Dh}#E?pABbAuAk3F{P&C z6)tW6nzBM2*D9B+TCtILXX3Wcjny&7bJ5jbKv@-n6^#iA9Y6=SPcbiEGc`Ctmlb`+bXiD3@v+)i z5#@CXX~7lcg~M`DgHz&(%t0Nujh#nU=pCltn&-pQn%e3-WraE{n*|cUf`{lcrnO3k z$6l1|0|~Y|E|*>J#gx|=IEJM=_SBo3n`ks^5TG3x(t)G!1SCkXwvA*CNH7`6%OJs# zge7)MD51P`eRchHB@ER%mN6&srxGXyM8m4DQnIq^t0Yukrz)#bDm#u6y1p{-l!w!d3lP1IvmwSAi=1jKOls(3nUmr&dZMBBqEQ2V>*V$!($tA3`qwx zVC)46#?VME1qmi2c^V`bLzdVvoJ@J)4If9r&+10Gr6z{^6lb!C;S{p6N7~7u7}k&F z+^2+Mh%?%D_`$r~7)~XQ9y3Sv-vnDG9549RUBy8iw>?iID=ZJDJ~j4O^YTr~3U!#Y z4I~(6_Q#I%`NY8*L`@taO)080;t`T`;3(`Jf&>#w>{06i;$R)H29^|8rgoe!Bpn^+ z*a^888tr05z7Qhjw$HO-H@xE z%w;DXu!i**NHDR)F8d7P*kxyqUG|Gf2R8w6T-}{or@1M6i6UPt%6Ys8fNCj|It8_=Ns|5YlR;<9S#+ znCi!IR5^D$s+Un-V?amuT;uapu)_Uk(t*F8_a;a%az=7S6ZXeQ=79uTI!o-RUQT&+ z1%ujfywAp>QWMqR6z6g%h1;U8AS)f!>R$~x{qj&$2Q}r~ub{HS=$9A|Ttxq1-pWraFSx)UVW3%Fc%ea$4!7&xZu%S7W3u)_Kx9r){cW14e)8Ob`3U^0>> zEx5i|V&`=Y!2>c z%36J0PgZtczD|r|H;_&Z2rT-v_LeTgO{@D>k#AtKHRsMEt24m@w1IQiFELh?TCvZl!#;NfNi6up(Xd;~EyO8;W9avs>$e3=oM(X*=0G~|*Yn;5 z3D&leoOUYbWh57Zq*qAC9)IRgUiiLHYzeJD3Vvc*!pn*?2coK4raBw_4_V>85I92? zoZW8DoKQ>n8LW-~>3^s$;DgtxHT%O79FgEciide(?%0;#*;J*2pWUe5N_o}81CV+r zew&~p2xlb93Uyqo+sF!jQEGbowtJ1$er1I^uGL(!;`;HtCF2uLH&!)H<5HlGYjrzW z>9%^p>=uiRRWoIUIE9IjZb80Bkna}c1&+_|ecksbu+Iww`CdU@Ajk_NkS8WGd7&WRC&&v0 z`F_&zkH#Hsn0&t=FB0VY1^EHeIR;{k>4Ig~oU2zs8=q_9sUM_Gg8ZT&ZxZB}NJqzcU+T5j81jBaeo2sD7UY)% zc{AzY7>E9SeRqf9hP=ER`@C6@w+QlPL4JjF{NwyW4<^4N$gc|WD}ub0bYOdne4g~> z4lB-0dNFycAipNaTLpO=>G+QuwbPiqO^~+>@-{(!Jpy@QZzjJk$ZrVp>w>(4babn` z`jgXEm>Nv)!{i-;yi<^O2=bex(*oj*$$k6lMn!&8klzyIHwF1^(!qTs^v`|Y>1lo0 z=eGrUmmt3_$nTJj-pz2|L3+O;zaz-+3i3OGyqk33^niSJ?{KTxkA2=P$nOdAZb5#Z zbaV}Fh?&*J)Zk5u{JtQ6Ajt0v@`t3uzJ=fCFrz=qKNRGT1o=Zj{+M(y8kl;%^`UjP zl{bLN9}Ds)g8Z={e@Z%djTI^1HT?me_^5!HK$Qa28$Ug}3kAnPzApb-<{*iAyjN|i@Apb1LKMC?Lq*IlH5q59SBt`y3 zkbf2AUj+F#($TYn`*yF#hqKSW3G(lP{F@;EK{^R4&Uc=&+qxg=V@3W$knv))`_}P4 z1UW!D{?TYTf_)BDjD=dY&%Y`Na-d@PZchy9=-r+*ds{9vZDYA2#|UyoL5>mRN)FlG zllfYaD+zLCL9QgoRUGo`57v3q_jz$$ht}4h?1i2dNdj*@sHPM7^~^Z3U!$D zxRQ8YY#65oaqt`;)5b=luhTZ3_o=c%9XI!*$*Lh6dCw17VYQ!Q&*qY%4(C2dNo4Ld ziGw2vrrljqp;~p>OOzGruxzQrL5uB<#IB2Dh>T}sn4aF+5;~|R2hL#+QHNzoN+LZx zmNcQnU@c4^&y94s({2$*D!0ChU$kcMb0BXn)>TR;c5~xi(qhyo0H0ul=w% z(pJX>xfH0wvUDYpr8tf_*!nRI+cNuJZR2@2DJ#@r&dX(T>JSI-QpR*g-Pyae4b0if z3U%C4)Fmt2Il;6hQ1NwR)ocux0(Cg|Y$f4Rpv4_RvR+8`gCq#L+)wSD|9X^r796Vv zKSxh*Ki`ZkoijLh(t)FJ?HMF-@Rud_TyQ*bYQizL!4aSm{Lj8lRG)P4Dh!t8)E81= z!qM7WR9^LI^n=4*rLp>0EJn=QDLp~tRbS+FBI(ox4pMrK{^op>S35;Mk@B+14Fvf_ zK|YCe8Y%LM^YE!O?dg?@e3BqH6y%cxIhJ(%cNE`Ji{GUezm~V5~=T=O% zRt~3bN7@X=H_GteB?%IOzss^@p-T9cG@97oahS{jqb8Cr&G1peEj(WlC}8xqOEJ>0mZq z%6RsNB{nC4I9Li?DeYUf5jKZ(dAjGb73x4KtgCw0uIFYbE7Wnvs5YUz zn2S-Z1orlL*p_ts@6A}K$ZbVyX(z~S1-U)x=rc0+X^Rbt++L772y%Nt?&y%+bG>^f za9KMF^67%yQII>44qgGrIB)N>{bT+F|M6-UFu9W;cNXMMf_w()=)UtwtM=9vgqDR& zK7+|t-|0eDagaNFpuTekk^YY?b{k739lbl}?&_~rFo3xy;DPxe|aL4 zyRwzlPrH%T2(W+;-oRn2UpH1qO%8Z?=0Q5}7rqO6O2CVSzeX~9DwB=mjcI)61550v zcBi~>Zy9Ym|NO)PQ}*L8U`}@t)gEMJ*H?ED)t;nN38pM#oxu+oa66BtOoJKnS z*Bx%VkbO=QcE_==2MF?@2;_E`GI@|7rwj5RK_2Xo-DuRjjLCxqd59nn7UZF%Ga6bP z_TakfzJPA6`|@XsJXDZ}3Gz@u9!@$h0Tp}wfWG6m8}cT+-44=lK^`HF7TA zVYAD>Hst57VDd;oK1+~C3i2q@`3exY7Js4N0~Z2_oK2kCXa?!tS-%yS+;?BY9Ms|ZseLWaGEBB- znRAF^&oaiJcGvSPLpqet@L5b|i9O2%iDQpi%(2JAF{D$8Na3T_w40bbM$|=yAdeAs zF_v_6EkE|iIBU)J=FLnVE6ACGJXVmiNQVhMMNJrP8 zJ3DN=jmbrVe4Zc|339PRcE|9i<}$fhkV^!)SddE{vb!>0bUTwv1$m+%mkRPEhwMgU zry@@htg@Sy6AWtV9oO6)k-oLs{k*5ptMS?tCkY|vNZqIJps4$;> zo*~E=3-Sy>zJzqffxoy`@AO30G!u;iMZQFkFBRlV1o<-3!6%;3zx11%!Rdn@kuJQG zeZEYPFBjy?1o;Zm@n4gSy^G0L2=bMJe1#xiMLH9e&p%abR%m=a`fes)CCFC`@>PO7 zlXUPL24nE!mJUk{d5I#=6y$3Jd8Qy=OFCG4nB42aJ?~+kuNCC$1o>J)zMgdaTitt# ze7zvwAjsDX@+{Ih1N=q*s=o2c{U#de3)tsbf_$SO&l2RDNJqE2+aAF?CUvVjpvX4~ z^38&LlOWF~9se2}ypVmKEy%YB@@zq#LpmcN66ooSlHJXW&+YGH@*F|_k08$xxz7jATJQ)dj$Dj($R6={b}`7L$0=%eZE(a7Yg#d zf_xw8`1h1$ihQ3S-!I7b3GyP+!E0?8jT*J;!DOrBoc1vLyhxBA5adOI{2=N0k9D6Z z@`Hl>kRU%O$cstGKN`cAu+NJH`C&m`EXYep$G>f~e}u_P1o;s`ULweklFpBSs0DHE zf8RH-MX2MvNRb~EWt`XJ#Ieu2myy-Ar~^MQ z&u(AGSk-$X;3b2Ubl@*MhxlZ`%W@#`&-qU?`3VvEC&|h_$A3aZemUvjegaaezVZGwh8(++$;$NJO7W~9uM*_d5y($H!;xPt$j=G#YC&E@I{xEf;wmPu5#;9ud5s{i zC7n|snn-Dwv}K@){F92jR*=^T@>)S&Pdd0oTMfuZ9kmrc=@H z1V0yj)5bdE$as#)FA4I?g8Y&oZzdfWuxJ;w=Z3^{jL+lNFnKePq3^VZ?Mx4K(aP;R zTSQ))MP9Fv4vt#L?fmA3=S^OD&vRa{h*G>N$gc?UR?*OtyB3x04l)qVU1nv%BKM+lUPR@mj58tLJ4naBFSmGs$vZ?0 zcM9?j5yLl0$A8T1rpRv!@>_!ZrXasfIuqe{DwO-=GaJTn+rlUW75QyZJG;oLC+J{5 z{ie#Q7vB!m&SJ2t2hv@k+BsqazfHnO&IJi3mf#AcEffyDK!4nQ{&y%ZBw{L<_ZTdd zur4ueQXJHA@2Pl~tneNXOr>eFtohyB$ho5qlM+DE6!h31yZ!7Y4xT~72QTH^BZixj z&IBv;i*(>Gyti4ASz@=J_lRS+ALiKY=Y7)gpJkFZvCr>|TK+(g-xsy~A?aKMzp+Ox zJ^C8hdSRaDWh?TBqLx1*E0~bz-3X0pz0v){P%YmKRv595LbbdNB)A4Nl3FkFddx@$ zg9PuMHj$k?D{#`s}uZkI5hGUzi&G_Ru_CfAB^V#X%je(;6=YJiIF( z%jLeO;uGSW#2Bx8jZM&qb&Ki&R+v!7y}#vCvcekFy5`diWraF?bheUsUaXQlE+l&# ziGAPc9?C18Jb^c^SFPMfb7AfGGJA+RoL34+aOCC~+O799;>>_!)#0aivy}a&2G0kp zIFOPK{PnyiL4xHolJ8VrMsnI_e!B%r?7Tjwykfx~SEue<@5X}_Ce(4G`UP2?2*C@a(fE1Vq=0_jV#^1mbKNoDn==qX>36_${_K~5$3pH2RnbWT<}bq-twTeezz zt0I3b$lnO^*Mhv4bgU{ zS&)Avo#Pbw+oS9^Z}-N9JEUI)`8PrSRgixtoqNE(68vO#eh%KE#-j$bK}G(Z$=2%Y z531Tj=e5`#@bXBaS7_(F&MP#wvd0Z{ zEG94pw9&&3KTMlt^19^>exnrWz)@H?@8B`YNUFZc{uoK}TRgI{#O~bz%BwT{#x?Y* zOOBdvddk$dnG>iKt4AAkpH&62f-PMd*@k9}Z4#)2zG8Y3tf0Gj6~GGn2$W(MKM!Ig zLqKwbqq6`cm{z2_|?eDo_DHJ`?1N@NymTGs{bDQ zQ(cgc5ajBDd?e{KP(Cl;aD_E$%~j+h1^FmJK2nftkj_0oh7Vz5%cS?&=Ne45#+IYW z${t&45E&5OybsvwXs~j}7R-ysmhB(%*n(v4aTP!2v4ySddap@&jR7)xh+~V%tNkZD zwvY}Sg@x|8sUh8Wn*A?V?f?QXSk0%`+XZJb!YTq#VctNf&$j1xv38bU1wY9#X zK^+r~DtnoHf*_wL$R`ML1Jd!2^F!Y`B*+Z}xgqIvRyF8ew>o(rlN$x;5&ptOMGR%w}aJ{t$e$a|X zfNwx&2T5=QpgyQ(>Np}}Pr+7)cSJX)+~Ggor0CBK+VT(Z=cz zu)=*8(t*G5Y~}YnUl>W9157rOyFh|{nkDuq(UkHU1jlIX3VsP^;yf?HHI5&c(^N#Y z8Clt*MAJ$ja?V_ulTHsnU{p`&(xIUt->1mU1-XSFHy7lVq~pJX*BmciL2AilYn(rY ztn@gKJ9sULjM~k9VyjcYipTJdKl2#Q61#R<){BF<-!l|9;Y7IE%EI{vfpopqSpMUc-F=N%t>>cvKR03O#;%s2KY zHD`O&(fci&*Ko4ZXtWd|b8c9}qe|}7@UsoEd z%as-CxK?L5Ry`-Z*~wTvqO4E{tgL8^A}hT^{>sxIykx9iRaU6u<~5qEbTsCB558=y zzEoDI<650fR`81=4}T!(xKwPxpHPQCov0+HWp=Y9d4V3VC8VvHWv@KXp}e$*c%0jq zJyQos$A9&nuks3VU$%CZ#t3pyj1n27qwfQmx8|YQrpy<#WUn)rY>g6Q$x4qBkH1#; znvBpWu>h>PLn+3B6^|0TK!T%$ksNmlj}k`GA0$|}Msg)caFj5T=Rkt}&`5p)2__>+ z#IO3I6suyM;YjRJB9lr{QRz>5;^XT~JuOyNsH58kD`q)XEYo>DqpVPeWiLCqqxPpD z!O@0&wnv+6BHN>liE8~*nMXR5X@8K!!6%m3Eh>jNc8g+;-J)_y2P2N${w)?;`+k?I zymGnTtrj&-kaMZtZE_yz=yg=qs1@^dEa3geikv6N=L&M3Ade@VY0#)}Mtd`V-^He_ zZdK&*Ot#u;K3U<;FMRM8rS&>(Jdxo)UZvI*Xzx8AthlZA0SP7}xlu_>?_MP&-w8?5 zY0NQJMM83?kbEd4jpM^PqlDxtA$b5K*mt-Tb{m^O(ZD?mEbocOpK-Q{#%ExKt%h{q zFPyh0aPBOz+gJf{>^8<6yCoEoP7o$9@+DYvm#MFOMJ^QeRYX?FkUO3|^%;6YL1C!A zZU-yacJqot^|cEmM>vuOiR?4$;MEhnI&uzpf&RExPtK#fj)&uzI^H|Xx}tH8;-C%_ zZvn|B&_kcOwQNy3rk1}Hk{WF)cqfAu`(xKdG38za$8c0zP&%=pDQOy5#etM`;IHRh z4ib#Fk*os=CL{6MR-kW}V2NE9C6re(L;;HEyDp$U1joNoh`Ac7C~B zfVNg%-JJZwjB3k$Qx=J{3tM6VP_3GN)(g*oNY%gM;gFP9>WOXboF_R1*ELaJX- zT_5ub{B#BsWfx2+%+duZoakHHFfBDahPR+_t)ilG%x#nF|r3w)ckOG@fyrm;b( z-3O+28*vs)gYiT1^0T{Tmt+>_72&+c^W316?#XFs!`t@Fo|K*6kLoj7{V%<6VnJ43 zL9UV}Bc!80B(;06e@g1G_=IHAiVw|>JpW-P;07HFb_hGzJ~i132Jq z9Zj5Qn36h3o2Iw*v4sgfJw7RASlFTDjyUyqz)3flSCCVfoQxTva+@$sQcO?ul_sPl zC&i~EcTd4p15fx|BsMaK!yMX5~O7^v=dzu3E`Gd6V!}?k^E_sJThejct_49!hg_H{eOKhp4&(;4Q9NI z(!yd`OTm;Ms&8(r`GvW8nZfMh;=*Ec2%1<@9B9LllG0*mn#tXUCdFlr%P0<(7H8y@ zmLzv$Wl&QKJTUK;oS2+UEi)LLSTH%SAS(w(j{NM>IB0N(BA>YUP#EL?tiPdfSluev zL3kUj^H7ZjOR`~f$t#^2%q%P%pO+2ZWse(|QIM6NU3{ow0C@zvPMOl97*^E1IIA{Z za?o;RTz2Mo%}YfEpLdkelJh zU!kWEyMsr>!wG&zogv~cw{7g|G)&2?%s>^4T#ESo?1J3VasSst1 zp_k-P=*vEYp_fN>=;aX=`mzp~(3hdnQ_Aho2D?W-p5S{}hu-&~34Ka&Zucpf$!T!@ zmh3LC>?0hs_*9r+{k7BEN_AdN*>W91Tc(01MJ8;KjyWzd3#-o&>uepN%GXDh&`+<` z{?fo?ocT)_?fhSYsKWjqFifrdAH(3(99Lq&Nw9a(Eo|LIix_*oj8zO9Hsv!h5iF-c zC|U=lZz7}3#)j6TrY*>0+C6zh`BByZE5ojZ1*I8z1=;o*IF#qmpx@z8wtfe7&Sf97 zJBfC%TvcZbwOM$WER8br?`e+-?qFHQ5n3NOz1=#AiMNgDWD(mJI2JlXfb)dxj0xpG zPv9m?=gUr}|HtqI+i{2kkNOEtmLYL`UpyId2Jn>syK)9QxcJaS>o3MG>>klA(v_;F z=qEHCz~^XBSLU{nvX3Q*Lmblhv_dyu>fi(1wk`xll$R!-?{MOHjNTVh=S zmPkckNKEL%5B0PJZqUm(kl@NyxQD=gixY6O@8cW_wK88RHZtdcE}|n;h4hh`V#XiKRU-lynsqnq*SSP^0NobQ{gc z&fW7Ww;^s;wJlePP?JXNP^&DX2128FG(|nKmru_c?GM@jn~GJLoG}$9>`2J>Fu8Ws zPuw$V_`;^2XzttURFR^`gc>>A+>kjA_BbP{VS}bQY)B#XzX3TpCE2ix&V3IC#y-w0 zMxz$Da*=NtEnDb?{L3C^ZTCiU5?X#~@zk+6o#=hrDC$)7lBpA-l|B*BKAod1pF znCWoF8VBo%?BX(p^wjRKGVaA1ycEg7iv(&qD=TNPp=$|BjSWk|-w}gxMOBs=EuK(q zWOTLs&?V5aXh|vdg;Mr`tei`wQLPZ;{b$IQZllF}e7ed+QYUbP-loSmJFJ3B*QwV|)Y4KtUahtfh1 zmT+*nE+6hkO16&qT(JYKq71k)9v9a&)zS=6*d)1KavWTnRsW%LCTODSLNqPr_+lpf zE`TkLysThR2DUWtJ6Hhs1LYLLbpB@w11tW5g6#aiTpYtGZ-HRd4!5fn7iUa`tD1U+ z#LM}FvJRxm0|Qg2o6@;RQrx8MOt=c0JT%&Z+}YfVsvTA>)De?X4ohw+-BV!E80GYW zE}**+fb%5m17$9(od85rj#B<;=6^mfEPXUO-#q|rDVUm<1?Lmx>u|jWrVfR(Bv^Ih zxe|9cy>$gFbH%-UIG2!_QIwGh*QjAQQ4JD8AU*~AIDrZFvBT^fGS(4opc6Bq4C8WQ z%CIh9)*&BY_@aK|HcR7z`4kcSmz*iX_;6$`;*gcC+7#Z7Wtx}q#e6z+0SPrzxUt3L zXFeU0oD-9&i^@(BbzB3-Or)Y}+ucXEKAd9?8iAWfxb!Qd%F5{oP$0@tl|#dqaWmS8 z7pg__60WS|!<1Ln%B8Fw2bysqCugH0u}x@I6Vc9Rn6bynh_*g?s+wyr)DgpLqUL3P;oG|2K8m zSKUSb@2tXqc`tiV0vNU|E9$M@+vGYq(^A~oeLY@0{b_wYv?`#cazb& z;CHa&i`octFGr-8f2&GeGmMxmJ+fHV*5<#rswk!$U$ry)?=7p^aWD4;;fU?!A3P0m zKXI>x_KuUdDs2$hKfd&^6!-&Ugy+~Or#y|!|RY5gUhu%JiMNT zjU^FwlMk<7|1A-VymR|E#Oxp5CnN5X{x4jiyUuwC3%g@3+N4UICbX>r=UDp1X@7o) z>2Ii#Pyz6cy?@>kf$tGKy_`E5e?$Djo>fSSazC5xp?PrNubo&L4p*kn6BU2%yw`va zrGw?W_2_R5+(CDY!xcAhEOh5q`A_E#k9TTGQO>(N4u9>2Eyc=xT6dVESJtVWaRY9* z|Hn2^yhIcn0k0o}GiLD+$RWP>o*JNY8@Om@F{)$jB4nmmH&%N z3dDt8vNMJYntr9&BOCdq#e+T)hbw(T*F1J6Zjevhb3}c|N%u z7j7fE_)o8Y{RDlmPY!)&j{P>A|I&gDPKkO8*k5e%hxTq@GYuzoE9bR<|I(ULgF3!m z>o3*_-+>2TuJr#!z~Fv+EO1hMa4_An$X`dJ_l?ST-y+^AnKF#uAgZ>W@H+s3J&GBtor5>OihKQw=_ozfK#`u_sv^R7ManC>-Q4p>rrIY;)xTbp{6 zJow8}hofr_OjQH?!9FeVcLWi>KIxx#QwBeo5G?n->gH0VK7p}98Rc}v(j00yeqADT z=628#Gu%VzpL4x=LdKM!y7AS#`^sFDG@lOPQ!~V4n^IQvptUU9ZbMh#u^MN;js6c2SytL|Z6l_%@2_7|z*xXgH?jaZgw*4x=}P!k6|r z?|+S2+wPu1v=?(KS9B}uWu3vnf|YJp9~Sl9vj?NPk?vtnNVRf_3hVCxuK^V4z^*0wMM?fzZ-l5cUUJV>%oqL z&F>%85JP9IBmb7pk8iTYE3^FN86E!?A3_hxsxJpA(+M;6nooyr5_X1ElcD)^=(4uo z(&~KcbJ>j~+QjOVCYrL-Bg@-FqCx+>2Vo5)KKh-||LsEpo}S^i<;2JT<()?UO7L>T z%wEnP`jfrT>{~`j{k(y0p-KZo1W#qAH=0j}u3y5uh$pD9VDNoAxAG}kM*s>u(v1@< zJ=-m3SemNs3mbmH(6g9zjJvJV&+K{G(v0*lHr_7d2iIRb53#p>`!DTkb}1tkfxp(A zc5-2Do(MA~e0Lapk(mB2FPJ>_>DL|3RWt@Ot>P7(^lGY*o z>*`>0JxKS9_D$~AJ0&e;K>wb}L*YxWir@q)J1ePOhK?@WH42_5wbi$b2GfUhn_7@D zAuqFQMoB4R=$n;HZIGMl>tyijX3FKOF-no8HEdHPxXDhI$-XxZ+eml){lj!$oFl;o ztk2up^IdzoD9%@0lBFXFvxKHy=3!{N=4L&8y#`)00pCV@koWnL8-IylyPepPZ{+(w z1BMk;fB!1pMiJo~cU7Uvscjb^LHqwFY#m>SSwvf(JQodTa%0^cH@wBb{#j5$)Ld zGS3zw+Je{NBRbw`DIUTf+6?s@oK&dnyPnGx89$b;YU@~(inTP$I~J>c zXggfaGOCj!GwGD0wfi}ESc*9^<)8SRy??vagAK^S7&+?Nx_JXS#VV7INt^&tRE{3~y2Iu7#WM{!$g2nKy8H4Hl$7uuj+Q~5e z&FOGM?ue{n7Q*}lS0D5d+>P(bw?4!L)9_2Hi!%zc3Mar^dw4f>aC-&ZR2yGODMQ(h zU`A#pe3f_Td%%OG8M(BHt;8u5xXmZ(mQ&cOsXSF4l_@JKs)=+XdT^scwI4n5^7C=o8trz(@bzO<1H3DO z)|}ih`xQ>gRxLBCsny5e(VndAoIDsmf)kKnI#+ZGXYAHFmNe3Lo0~1bgXrhcpgPv3 zb4Ii9b0au7Vt0y$)J}9QESefDEW#lonn}ouNJAaPN!QpxFyrGRQRCr)R@vnpig$73 zLVFsQojD$wM%d^=m!t8?u;7I33Dj&#XmC{fxj2F3W>ce&)D)au*Jz>Q0O&B3<00^P zy1;I3UXPkVqi zkW-kPloCIsO~*E;C$vpy&x`|L`DC*HPG3YuTf2KKL*vDpMj;BEW>*oNfiqO_v)V2{mBt|uG z7dZN2VN^3c9O8A1XuS;kv3xAZj6R3%61ILqNIhjWi5_`LKAbt1@fPTEy1-F}eR2qM zbQAThS7Gl6if%_e7u3u=UQV0P-Q(qZTTwZwf8CQPFD^Q4e!#s^5#C{RINgZ!I-|qq zhyN2j<;-981@)+6QrST)f4;%Pz~VeEfp1@c)jT}%RLD%7bPGk8KuBJ(!bUr?p3oPgrY-rXO0*!BZqSPnohtvxF_bzjlg@%OgBr{D177 z31Ah){l{M*0wO9XD&7I3cpxSO5Jb((eIMMY$Ri{#@G!}XFE1R5SJ5g)s{X51tM#b2 z^_N7!L1B1iGQ`1H`J(yvM4rAlgYxevqg0Yy;U|vjpF; zKmc>$~4Bc_w=R^Lh-dNz)7MqdnZZ4zrizINDM z(Z{NobQio^Z)dWpnRZWH2No^X zG$VAL-UJdOxW7Q@XHQ(&^XY7wb+Z;XR25jz8Jb7M0aU)ZH!BnJoXS(aCo`7rz9Ua} z_{yn9EQkD=qq`|#)?2c&zP|Pd%qE^P7g$=l?*y+|5G8!H;EFud?BsZOtP zu{3)Dk*d{(bTSn!O*OQ}`K$jZ^t`SNz{U1W)rpR@jZfFBtMHt_fdDlCXlII&t?gJ6 z+W{Y|At~cxT7n>bqw`IrP%Y?09QK`?6#z9<69;#jy+Vh9m{M`m zouC3|F1l{Ji9q^yvu%nB%i z)E#x717V`+O)Nt@?!+;&gcZhRVX0wNOH1Qv2`z3&H$>_0COrIW?@VKM0Og>ynU#Qm z`G`EMMyCfA$+i{oRC-R5-sJK>F=RcHxk@*%T?6$)3sR|u)!04)3;1QhinjWehDPBN z_HtN#K{1;0!s7Xp>l3TuEmTQj3jkixN|nf*hK>^y9uf5s{aThvcDBn!9ii0tu$)X- zwbd6cVl;`0i79*PBvh(SAlQrj?tIzzQ6bOK%T-5T#DiT6q#KsB#Iq?*?AJH?#65RG z(l{Zv$r%0=CRfosw)?e6lp)n_6ug-F%9^ZbdT!^|`bMfX6C|Dpuzo?l@ebwvyF9`2 zt9!Q}l^;-nQExC-VZL{`O2&E_UiyuXE?j+QP$ml*r$n=J?BjZQP^^8pO*e#>{2}cn z+B;v0-lRRd;@+k=Jjx~e&Kbnk>=5k?5&G=M9hspI_J2od3XG`b54Vww^7{O?=Fs!n~gk2Nu*u#P! zYfCm!Dt{}YfY-0Fu#MHjBFMX}+^PZs?eX|`Wo5bQ3bc!C>vdCPbN@ym##^*^*TpR* zlsple#J(@C`sdr5bERq*-FLGk;9GYB=NDVEuvS&{t*M6WX1%wkL{Tp*zvMfz1ucfi zwA~~Nb4~|4qXjtwGxUkZSWk{;@lL7qT9ZBYWCyY|w{&(a>$c|*KpsBND0UNs)jdw# z1cL5)nO;X7%{TSbS8O`Uo0z>&bCNMu*U`MH+sVieIA-~vv#qhAbLp~lEbcx5mZq(l zx8*6&UU=CzxwZ-7(wb%Hjkoeutu#6_;qA0M*6OE?UU`p-x2{{DAI022PH3yR8KREQ zC~k4diX$_m!&%`p0*=vqpSx z!DBch?gc&~bd7op?buTy8q0<<8ry;1wVk#v@Qjmf`7h==XmspMdpJIEt^)OY=O^BK zq(`fcbIw(tI4qV2NT(`@R1cl;aRoJ$7A3{%AM2ysPzm)CN?6#O7JF{u4;$IEC)gE_ zQCvX_gN;LGCd2|3hO%(Qs+S}?+nTgh-_|-vWO<~*@O-PSHITH8d!XOxv15<>Sb@sO zT;3@st33>~7t%ro+EutI%8h@Ti~rD#-dcBE-cmwq-0$0318B8pVr2gvna!Z(_u*Z? ztu;;Mo_D@_ z4|$y@b;-VkPvWd0MSkgbq{fryZ>2M$`lU*6pASV#F8i}?uv<9lv4`v{QD5jg3PEgH zI(@VF+Ot|!?+H}6Vo>N@^~qqA#ipxya2#~5`p#*2Qoyy6SCy$L#rtLu>CV#nbm==E zc(MkSDtci;`NqIzXyNGf6!xxC3tqa8N*=&lD6Z^-p1#Q&M7$U(XMnc229%W%dx&Jz z)s!O0-u>4a14+Me(VoPgYyMNrD6yuG?HnvmsBMA%bw?=Q-zvQOF2!5F#3@^GoHv+jV1C{fHa2P@fHu4EA-=dl|b#1utgt41f4u-#yyk zTkP(gKNYoSBen^TrBe-wbO%;~Nrf4QqtXLkv-jO-0Wxixi8W%%C0p5jr1y-hU-|}+NXIg z&$j@t?}Fst^rFw|Nu#~2yxVDn`34K=>CrT1gtS{W^-EL8>QCDH!g0;H>XRl|Y%0SK zqEtjc=mapY^Vz8@VROZ_ork=~ytI`|s56#LJBCbcgzxsUmFyraGAP@~yU#WSR_^#c z#Xd!2lkOL0HTxfpa8I`|*5ej1>Hg7V*t$AN1)PA=d6DjN3cE#Yy3olEk zADmbF4E@!OGAqiRZ@a^Amp0Yr+`ZT!v?t*V+D>Xy1W9^I+>g(ntf#li#{q^-jGd?D z=1JEmi3yE-{evDuS6%tr(2g^t^bC6R<2pm--ucEez}3ZF(8x3!Yc#}}3Y~0!)I>u| z;v_m_pntYWjju{a*`d^7U8-K}l*&huyg$}YJDvuf4Q0?KEr~B>@9Xz(k;a+f+K23Y zoT2%`wm5rJ_d6D7dD4!yEa>ByW~G51KlG^X5ier|3~Y3@5HE#xe>*&s?xBRgoeOj* zuz|8R>tnBxi;ZFfT9z<}TyH_>n}lE)R+nRMJnbCfCff#*x`&?nCD?0)B|#N~&aR?F z>rj>{kYYV|##@F0UGimq#V-qnj&e)af-2mu?=#D#7x;o_yF7(w_<0ebVlZaLzYOvD_6yEZ6Lg zKC|f3p*N{4HpbLsPo0ZBh4k|UpLw`Z6=>5&d;AkDs|1xG-++`D_4Lm zKE>8*`SDfp#!gITJ5NOPyKd1kW9-mX6piH+mPgBr>dMP%YHFjMZK-%;a%mg&Ve_Zh z>yELxTtO5Qm||+an+~x}CfO`^{$y#QJkhpPH%sm+_q3y(J=kHdf!Yrydgvc)2}k|& z(p0il-tAND+KJ;+tsU|(M_)02a%nP!9mt~64xG7B_uhGwpPO+QfLLESKapN`Y&?~W zi*&Mf-7}G5%dVQRmEimY&S_l}P9)n3mc-$L1SexfP8OdkcxO*suM;&E+$ zLq`V=sE!um2t|7nX84jGAd7uTd!4$h*5a83&&)KBXFW{@B8YVldi30zt^bj|ZC-3e zkBc>|Mb*)=f+BP&t80Aa%ZXuc0kg|jUU_kCc|k>C9WPyzseHMbVMik{d1(h!hR#N- zZZ#y-8qA+uO&Mest?)(3tD$|{SV!Jfj0|1zv<>FAJZ*xxMW-z=wBv6B3@wWID~~6z z8%tnZBNjYWHFLtiCY2@LA1kVf*40*()fUzjtFsMP^W+<;duHq;y$2z^Ibdo}mDC0y zgf&%Ko7wavwt*#0Y8%*OP5lDuMFlkV%6bzmfq^|LkRqw8qJ^cEm6fISzLd75Jn1Yq zz$MYLs;a`0;<7@i0mc^kovj%2qOrEx-2_^0OpPVbrKiK2DXU1yZo3qgvpo%^K}g|{ zx1}_(MP039dKmu(_E^Wr9RUWmJh{G`UKH=K7~0Br4FIaCmewXt_>e%o@%AQn!l}WE zi=$OVWhGVBg{8iHt#B4GD+Y3kA1NF7HhH!ty8=f-6l^ML3Q;lA3y->h(Uf;ArEsQq ze)nX!zR>s7$9>_1Q*m!{b$<=N$(``z9!k(&6-0xgxJlfQ%3@Kpv>ZLqx=MdP%EE91zcXZZ&Y~*J zRn>LH6;;uqhBh|$!^QKb;1DB*S<1c_AT^wtk{*ZT14%G#>Z`ogH?Age5_ zes^`WqOPX4s=T7w(1Vu6l4x;tMNMsad6npLH({1nOmE>$xO4;cwHw^Q^z^rT8AMNo z)O$5g?bCZfr>g0tR`wJ--;4fpF9q@B7Vqbu5Ktk}>;23qS3Y#dw(4lDZrQh2DdbPJ zrbtaUD&|i~XoxEEZDB>UthT1UpuDow&hSYbH^iP!tF5lB zsgB|Sv6y`lKjl`G7nWC)Rbg@p6S&k4TP36}T3S+7Syo(7PbH)h&GeKx%b?EPSk_>b zmep|#QJ2KyC@&pp%m-U;78jHkRM(a;+eOMozB{q#DJ|W!>KeRu%Wi&tk>SQH{kzJW zO^Rapgcl{k_AL;bWt(mgzB$4ncCipX?MaOH&yJ|!vF`W-T?qDUw#eSv2Co`?`;HQ! zJh*8#u>Y3FlPix~FCM8g#O5i2m_@OZKej+hDG0B36rrM!Qo zb^5qde8VzDZ*madT8PFseCra$#?$;n<5IiI{&w~*T&<@3daE7o(AvP24xzMMltl&) zTY#y5S-ISKyR={Y%ibNvOC@~7sB*o}GA)0UW4Rr&>(plG;Gi8aJ1?t${l?}QS-$`$ z?Agcd(V_&`QG5OCDXZZ$s@(h6YkW{e{iuQX5-$PSd&;T0pY|CZc!%3$s(_};@HU!g zOk(Zn)E1H#`(P8t#+G_J>Uo|C|h+XQKuVKQCn*u4J*5?HF(`> zX13NqYAfLG1_*;_gUY$Ps@Bv;pgrEOxckx4taG4U6j06Xi~dasQJ$r0K2WyLc7x0> zv3u&@)|LSieRPB-A0$W%HSK^SrF~OWeK$Mg%2)mCv^_D!M|%C{c+ge^ss!n~Q5&1W z36s|kaHV|{#7+sJ18g{!J1LL7)^9H}G_{n&Cq1%hjTTKkg^kQ@muPbZ8vcb@piVOL z9rc3!feVc&dn+ciZFcC4ZFzzhZqFOOFdGOSw#jq?7@KQvd(n!=$T4dJB$F)@H%(AO z)~SXj7(z_Jan&KAmYg{rJB>o^2#0)2VM8qn$5@84CJ|%w`gS}TYPYAsGSBX`)kSwU zIttyZhm9Yzk+BkOiFAw#YOKwqs8;kU9ZdsVA<8#itk}fiHrUMs{R!1JW1+b~WWAs* zlvr0fbeAzxm%=x9>**$Ahysx_sJ=1D7riLpn=n3llwUSkBq0t09|hQ(0=Y7Em@Qs0 zg+@}CjP1CuY7Dc9?ID$})9qPQLHf6QNH;9CH!Gm3yG7`L-R0;NY7Xm>n6tL zB$~Qok-e>>>U{?~$zvvX#~Q=^G5RARd7Yeic}x*{DZYiRY_5^t(hCpyw%;}Lp+u$VG_<1)P8jn!#xXH*v8jP=F~cZg!U9&dkZH&nor zH?*JBf;CmNVVmtzT+zr|@q&HNwN$U^_CoD&`;BG$wfbJDP2Hqw&fCI%y3x2W6Wsb=gC!(RG7u`|(l0$$nd2rP61+TAJO`tY?bFw z-wP#~Pmi!o3$Uq2d0AmaX$AM^l;#HJ8}cvtTYlBMus(`ao`{T!S^+n-;Pv{Z)f9HN z6as;v^&N-|T9{?~F40la+MZs`eCFQJh&Bji?J4sM){#~gRMl6OR~Pwx!()$P4X!L} zSb<1rV*7njoJ~{JK=MX&qTcF=mczsGlwGZ1!KZ9hyo<|yQy#6UsH>~1!Q2;%3n^~c z8}7m{ogKDU;%)FuW3m-%P_Rt~w&L-*Hh;3Utq}d}a;_j+f}B=`m+1qYlY@?xH2K)S zC0>`JFex0XwttkJDk_cER#aA$6c!ZP`I<_fNIk@FGqy^ym+Ukr>}-iGWXj8mE9*`_!4EiI}nE-S07i_Y{GJ$T;ZX*3>e zm!^0vwQ!zhg_jDuS>wy|3yY#9CFKQ0JxKQVP$-K!SsYt<^?C(A_2*oQl#ZH3iDDzjz(Ry2 zPOQ@#{?Mv_U(;d3I5bXd0h6erda?k;>S<1jS`R9vaPaQ6YtEy0?`X@u#XwMuszYbZ z+&&0<#K3*cziIHu>Ose~uqh0eV_~q$t>C2xfe&5bocCF-l`MhwLJ}&_uEI?bD*y9i zL}xb_F?84Its%H6Y~h6_>)ZKOlP7)W<>5iLY9NVm@^>y4#HI{+h$9R}V##Lln2A-! z*1F8X8hW@_Szb_95lys--Go{j+VgXNU8e)|ZRZ3v2^x}l@kY!! z#;h8lj~-j|UZQ8xKCFY&d?t&WlOTS%`@B5f7XvvZvhZw)0jP0O!xb#wXMyMNtQ z73=aQf?JixyU~ViNtp%nkAce-HjiKVB7-72BuO{o*bE+H&+`n{rS`AaoHxPQfJJPT z7#oPZ?yX~Dn?brJHV2{*^WbbAGq54`55_62{sqL>eIeBoRLYWK=N z8q59RG(`oUrgF`}IZiuQ-`em?(=h{Cfu7xZ>V=Biz;4gNhk5521L(Ynh_2RO3)l}phd-?O}r^2=8v(f1T7^o*-rw~ z{9;(#hch+&1%$Ab00`Ekyvb2(*Pn00<}frmm-kKTWZS?baAxUA@uq&;4Mr>sH`(y1 z#~Z@1%+G@xu!~Y?9z!1RY)FAS1{sGe*%`;##mODt{jkRhl|y?SzPZP{y`PFYx|PAD z2*mr1+Ktog4NF{462feW3P%oZm=)Wh?(dA^4z7DEr7&l$O-_0kJh7Ehs4MoSD4w(o zv&eRRncdjX(vYIY7?&_}fA z4y-yG$;GO~V`IB*U_ei_b4c7%$8dS-Ym|g-SmIuT>g24jYRVOyFxY7vqERbXHYWy_ z6i7=7>{nTQ6PK#jL;C)ed}+`kc>qHcEXI*@vOIq+f$A4oww4#+`QxN5@Xg}|h<(1I zGv8VXq+Z9WN{T+tH1;zp-=1Wl{a$yD3hUm>wFx;&wNG7Vnr-e>(bk+)EZX4->fZ1y z)Kc$!Mejbu=3=jumMv>Yoi}+(lty**FB_lHmTup|a~Hcc?-Ed{^=jrNxR7>N+A6?- z_IT-V=iS~sW8_0E|7HSKakuL9zMnPH_PYC~Bu|Rky~4z|_^CUKRjU{&wXZuU{To<*w zY-8;(FZ6OY$eBtFb*RS^Lc9j1(Oj&|P6z*hl4I5gxV~TkJ4n=86>0JcHmU;tTD|qW z0EyX?A*qw$1AWP!0`z3un;T_=UeV#qfPCZ( z^ZTahv@#*zyh)oxf&Cbir!D4?x0qffcWySMb-y3myAsFkj_d7R9n=M{FK(k=i zqJ5ZJ)IXN$&pzKBgvNAX!(h~yv6!{6n!l^_osJE*K5!sD>}g2vjvE6dhLsq_D{kNE zVuMP=yS96vGO?@Hj@7N%v}BfE)c;OrlWf|EU0T0B5GBWEJG;qS3(^N-MKMtxHkj^* zSq3prj+1TdneuGw6*PKAXELDX^Be4Fy>J^jd^#RuM-yp`HGRW6XP4Z-aW@T9-Gf0a z1i-F!0h^v}X@fByvG#ZyBTNcHKMeUj4kNMp+hJ9z_qQMTxZcUBp#u+Bc@3rIX+cds z-`aC*0na#FXQ9Jc8lK4+|2By<8nr7Fyv0kCbqVV+%D41ck=Y1b)i>z+&n%r+;LY6T&Cd@!ChaAn#!RyFswa_C&4PNu@6}4XAgKMD*D-ZjBDgMf&O>hwWO-QoyT$=|M_a-UDNzr?N3WOo15b) zzV>H+3iF|g_jLFv)W!C3PI#@yIS>tpd6dsAET$7ZtX;kA{I?0krA@>7L_W7~eebOF zt%#P?SJYQkRu@JK(&;#kqQaS5Sl+vmBA*|>#ZJ4baG!RC!+@&GOUf&2$}mq}RGB}e zHJKtDC*b8zNwzh{t@Ev1n@n!P1n`uuO{?rGIh#^CKYy|+>wCNFEb^&^?9d!*gU1Gx z(b>T@zHHtd+u4d!^}1zWagJWM>^pNEb~);neZ^UM-LgN4o|qR!V>w0D(aP%D+N#RB z`e-RX=S?mM^3iSL8LpDC!T0)NYgoP4OF76 z<0UYTDkvZq=Tsbym+vc*C94{v74cP3I({s7PD95DWvOImd$gjZbB8gfXE=EsP68c?U)4nT0dWR4Qq-r2D% zwxpr)gnoJCim1U0(&5t!@E8s%#F9(LSA8)aVts4!6TM>;Iw)ejxSowtdN>+Mp{yob zV-1asIJMC|!r4S)67eRuIA_Oju}QRj>a24c-H*0PUJzHpw*u}+__C({ctDG}`%o8HJdr!Q<0ImN_j zZ+vIZ)!-=el8VyWg0k|0XhBO0rfM*Y(H3vPyhZ|3o(+7e6f+%k@I9tOJ3H)i;R_3* zHKpbCRnVhlA=2{tTc(b4vc3n!N@W! z2(F2!USttZ@1u80u8HT~NcHpF1s_;C>#X?D(%`u#8^-dXB~4J+J6&{ZP-^et^sSsq zPz~C<7qk5{Xcy0~x8U*mK&*Ku@Nf5Zk z(yJ#q-R-4sw&=i7H+*c-!%iuGVrDPsupgB5M=J77tHNCp$N5;B2#H5|;r7_b3s}z| zqiQzy=?|yzz+AlpWgj~(ZTAyW1(*~Ngy?Q*``Q{*k6s&n4W zF!X*e;yH>p*Go*2HJ6@}Z=U*}ZF(|qlGxGR*}hW^!9x}_5@M&qlb-+qoftXw4Tbp*r-3^LAz$Dj~(y9(x*Q5 z5%1&Uk)8GOr|Z4PK6c!R4qpxa9nTvE%fk9NZMKk%f%eq(#1q}-?{KA|U4z;mnSqZA z)r(J^`a|wl_pz_~X+^BH54jT>=PGc63}8KRo$|NAfWwCJH9^ONTt z_#)L}@BRopFKAW<=*I|<3RE92>Ih!C-yf08qqpC4Sjejy{Sk7Wz2K6na_SEch%;;G z1gy=HxwTXM{Sx@ll|Lp=etDnBejPI4d3k??X&^_@GtkXeoO++53}5jX$V=&DD%vM~ zKBwv3+G{7pP~NqgP) z?Z+mNJ!0EZ=1w+q%52_IFMo>{ZMSZDV1Hy%xUt!$keugt{rSKJo7ryObPt_5v!?4e zOSP$b^YFWp5j`)`_HnRtX>Vocb;^Nyz;o6_A4mTdP!CW+w`%|Ic)9D(79ebCN*`xD z{*u!c(C&sVl=-ei1RltTE!+7HM1{PFNVP=cI}in|Xd*WRFBtg_MFd~Il1sZf)ipO` z=a&w#J&wI)zH+~NwoT7m&RFkKI`0kShS^c={+%CgOR?v-fi1;O-v+jvEyKDKF2$x& z25u?#jxw-CTSVp7bf&Qvx3u}TNEH0!*^7uDixfLtpEgqqJ=&WM$majI1u-=Rto(+BP~B{}+NqsAmwt3382-^7}-Dm1dFstt`SswzYy zi>f-&$fBxRG_t6w8I3Gb<(Q*v)#gvGj<1Nf)FhkY(cEZxd3|AdE}M|a@m84S-Z&{*gLbhYy(}87fk2`yUYBZ$rywwYauN2o!;bA8iDVo8hEyzua}ZjhdCk*u z$XI`~Kj?4x%vXvJDqi9}&@slJ{@_cgK=IjRRLNJM@lLDIeDUtvkC3IVN~okkXD#Ve_?TFP5Z z@#cokmUL+{g*?PNSjQCP7tEh5?pRp}?}4#NqddNlx-GtvqDK0a^}EdEH?@Q0;Fd6;jsh=+}hoh>*Jq;NG31*wmx*bb7G-*J|jTOTFBwn2Wb zXlqVdFpfQ#NB1xd-k3_Xr+Go4Q)K9@zVh6Hg7Qf$mTt9*`p7yxm3#ZQ)Jg6;parW7e%Q}biC;K2*W8o^n-OpK`;@l$v*V3jQ zD2SRc-VY%i=hi z#Fg6$OBS#S#g)l;J7*YMp8VBayS}yG-3T|FmRDN{ z+I$)$6gez!YEG79a&xEVOrL)E^qf5DCN6Vxa;8q5nw6E8GkJ0@`)Tp;>WrU7c5KNj zd1q22@^MClnTbtkVACt&{I5u4Degb9hxM2EclgN2#HRR?&ZXJ2tzWLkMc!W4U;N)_ zWMtvQR1;cT=l+hke96m=%!y8PW06d7e*yQNV99&YNX`bY9&w+l^gQko_oX5CA44u< zZ-`1JO5sqryNw~Yts%F)Avem9+r^OE-H_YckQ-~r?Qh5(WXK(A$mJSxQw+K3hTKtx zT!A51V#rk(ay5qBOhaz2A$N=+cf29jV93P{xr8CtYRH{v$aNZWs|~qR47oE5xw8zp zb%xw}L+(OD?qWmkGDGeshTJuV-1RCB)A4Dk?b#jIH-mdfu!Hb-*2wzB-u7q&?!N%$ zEx`@O-%h)gox-2YjHd5>B9YPfkRd(BdD>}m_dqZOf@AIUNUNQ8^hScK0&|?36YZtL zk+f#&-rciJ};iv|)(9QY6 zLGjWI<}|?#!QZNQrf}Q?=0(Bj{8tI?Jup+UZ~?>p7u~?q*NGR3=lrZlqz)f4A{;*d zjlyroWJMy&@gYO~Bc1>LD=QNDIX+};|0&}6p{z*cHGIg}oF|^A;yT!2T&Su-CMljDyTy&&gZ%^pGCKy~Yqtp8m z+_u@A;ql_v8;_rN77Qmv`=RjP5#TCA^vG*-z^oJ;rLWF^U0^N`(K{ISuLtwA#Od^2 z2J=^mQ^nsf=>0=5xMW7B_Z7J9_UDW){zz{Z!EjO^-o3#cYM^(xpE(p;Z4!s{6>Rku!&Jewwp?ANb-m~D|4AI*OdhZ$P{RiCk2fzZ1 zF29ifb`uN(@ukau2ZK8zM33sfVne;f;MzmbL()FxFkx zpY-Tu;m60oy(`$E_*=zMex7&`+8KPv*zS7th+72aBm?dTU~Vzs?g#UV0rw%8;gm2i zJRe~GPvO7OU~&w&Bf!iPoE=_8`@0;>NiIEqdrsqzGr{~s($nRa+rc~-qIVPYeg~%G z5DIN1Lg~izSU;BCVqY|l`d`6VcUk%>!tr}>e-f;&9Fe;pfVp@ASF_z!==~AQdxF#H zl|$xJFh?EA^@!8OOBtB?5~nIhkHLNen1d#Ay&(a5aWI{N)A^68snft*FL65m-3I0X ziBtKH`iYMVhWk(--nYU1GemD3M7}oE%Q_7C9v?Eg@E(WXjsSD9;3(hg!h18A{|(W* z0rnpTlgPmZOi=oEfLSYXs`#VySP$k7iPQP-J}^&8oJy|+dM|=0$|c_g`>zJf@e-%f zBmXT0vtHtK{`(P_8zoMqHv)RMgSk)Qbb7x5^PE(Ltm~jbE8)%bPSltF56Gf7B!z zQ^}5Gb9&;uqG>r3i)PIkpS2>MqW7wf8b57f&crD>Q*-d|_^kF+vJo#_B~t~d#$|~# z9*lLSAh2rMRQ%Stq$SZ<6<<9kc|sf(bDJBdEy-Ily&*TAJ1w5KWc;|S!-`8v3+7hO zsjetIVq9y-ipKU-8h5v7Z`RD7hY0cby{@{rwxFhD_P8u6p7F@G_(rqac*MfF9r4t{ zdG!lf1g(fKEUqhB$lo>USXhTtC|NLTA-&oVUzIvEcjDxUISW@b;{Rz2TM|na;%#EQ zkuWRX5^v~;FT^E#1X`2mXq=c_vV2-(=aCtxZiYs7fMeqy<=)kD;yUsh%JPw}M;ASm z$r9o+{53kVBfhC@upjZSW3IsE5Ek5T*cC-X23+uyWQWTCRrm~HJ-=(&6~366i1&yK zQcFu#HAXA&GI*5Tyc*wJihNDYGZ~V(0Uxy^MA+tLTyg*1%C5+Nce5)Jd5>LD#C^!F zXkPkbb~Ogy|72JAvK{&chW?JymoPj$#5>`k{w^66e;e)(i4gxwc7-oyDEx)UszDK8 z1(^JP7e3bCT*3FvgG_mm2bluTgG>TE$P{=UWD2|!WEuhyr3%75xX*)dKfA&gGZcjU z>?I8yiN;t*I)!o*EuNd7jdO)lcs-&afn^!Rd~Z=;&U)@*d(%s%ay7o4fRXRXkY66e z$N7cs+GZoJcsl=vT~Sbf&#uVg>+A|&5egO=(_m5IBBSDei~Bqpo@7_Vk>Sx0!)sB9 zf!GSXL|g0$FI&LFV}jYZ8sAR9EI*RZpK<+yKe*w6q`2XMq~JP%q_RRr<>?o2pL_ac zc10W+^0eh;q+nd@J1a)Wcdz2(_?u*ef5>N!f7lQBQu*gC+~@vzhh14L{4ldkf(-4kK25Y&{MaK2e$Y1#_Ttb8@1U`0W7vgIOei<6+ zs?N^L+pzY_j8k`fZ}9qx$g^Lr-H?GlPy6g);%Hz%#`X%ggq9}n@x15OevxtNuCR1d zMtYlH6Y}gAYah(O-P1l;pE;ZfjAzyzfl*9g?V9XikLN<^lTI6xwXDTzZQVuX^& zu?hCG)ehk{Fz8#Mq!I=jsTDwNA8`)Knxvo4@z%;Q)CWG~2(68a} zoa|v;%)+{1>*_Nf;$h#3qab;l6?aFt!VyNK&g+^qIJaw7=HQu`>vG`2BH;wh&yX1; zI*qm57Ho8lg#U-l7+w_eUq(J(k4R==<$odc^}i|3rfQH? z#4Idx4oPR%&tLm!#siRu{QfUpk6!lqHz>)AGu9PnFYFxI_1KQLJw4;8Q--1jp*t~D z1Q5w2deQpK>@}I|i?io+p{$obOvGkOYrHL;g_otX5^Y&%vJ*{N*yepHCRK*oR@E0Icsi3AhO4!< z^x5o+x>sH7io9|@yQ03|f3YjdzZbJBT-e5Hp^C*Fa>40kUT(xYz05ORyxc-rrHAyL zF5Nj=9zQTcywhTyXTw&^4&Bg(BE~zk@wSQ-*^rro3Z-xuGXC0kBRigX9^6^`ZbrI-zRb!&SLFzZ%sFIE zcKyt?4`s|^WoGThVbo|MTf?7o4k^yAN1e6skm~FObo;@Kb(z^S9$Z(QU5)%-y=E|q z0?CY=>9u_~JjqH2)hE~Ck0B8%3A}VrN#LbpI<9!>I2u>Hbj-#TwS=Q17ur{I+fHap zu58P)7no%=vlTxRLEsTRJ`~a0h+5|AO&UWB5km{M_!v^f!_6!n=H-1hJ)J$`)T3s1 zEzBM>x2q+44D~GzoIh{&T$biY;mKx@n+#Z~yn2 zKg5ndZqdW^z=N_dufNL4K^V+0P<;})jmJ4^TXJS3bB0=tk>pnP{JFF1c>{zjHvvu* zoP14EX4f<>oU3qP_q7|x#1DHn~7 zOu`k#JstK} zTHV#9Rt}at{U?Nd7m&RI;A29~?NzU4hS?fn1y>3-zY~7ee>&nqF8*$vj z)Gz1xYMOmTemIW4V1}`>jY)mxk+tt*pNt4QeaucrBo`u3m>Qz@rN&f0WOhJ8O15DzYPa$Gxi@b>FbA zXePWlqd0psEF%AB@3nqT_Fic4=VXtb0V(ifSo1#;ekexn*@=ZGXVLK@K(PJreE6IE z%gf3QEELqO9m8_NQ!FH#A~*bAqg0xC`l{)X^fuqT7+dr(!o_mRn63=E+c~`JF@BZ) zEViyT6F`*VoqMmpE*oBruuM6ubBA@MnO)Cx6>_b=#qg&$ceW7D49}e}Y5e2M=M%h2 z-hBRlmJ-ijk1l$css+;LacVWb*7V6+-Q@qm__K9*eE2dvPdZ#iaW*YEh9kC6N$&)R_A@DPmAUZlT}t47b5mzkb?)`m{&RyA&k zB933X3McT~mH~Y2#!M)VWODCa3xN@_MaOl$bNs{P?nf-F6fb{gSJZ0qdV$KxhwR=; zTz$Z<&c+pwohYqHotS7E|7aV!DilA_=6FMTVh#<tCj3*8-@v6TLC8F|4AjZgN7jN8^Q+;MFE{lGgPaco^qR$z#6+oHPPv31q_-Rm7&za}d%#JFwIaM`hS^lg)_ zc5G26mkcp(TifA|W9##G%WraQeMVMbh;iGZa_870#<4{+8)S%a+oBl|$Cf+24i&bD zaoeJY3XUyzdd(BIh;iGZ9O&3`rxy*1$PnYUMJ3L$b!@rQYcLfx7-HPEXr9Bdb<~2<$VLK=94an|aoeKW(y=w;SI2zd*qS435#zQ+ zBU#7R;maRFSS+{Jhznxewsv*dYJ2`n6nD$kjpBkBx2@e=wqCtyTNEbC)|29b7`Lr4 zE?alc+!-0cvh@#fL5$lLjisD$wO@Mx#+#O{-FXuhA;xWsM)QuXH%eK4WiAut<^|7!;jN8_}E?XD8a{~GdmaV<1B8MTyZ7U0R9JlZXjAg4**vew} zldmOGVC5w?hN+d9l;%bm(U6}E_R+sbj-a)*mQK<5wW-L`UF zwjM7#30)E^Tz?d95d&M&>-{t)9-P7JNepCv^~HZXwmucMCPlJ5KFnjbSpNZ6+z2?b z1L}M#EW~j4$Keh)jt*b+Ga0uBXYe-5Vk|!&DQpn~KTG}0Da;o6IRl^P&Yg{>(y}#E z*dm7CTV}h?bfl##Q<)C+1W0E^$>IwwJ9s@@*doS?XYS|2nJub;9bwD$ABbDTxNV`C zK}dORkC&&j-#*uI>l$H;7`LtIE?fEQ|Mi?>>po$N7}!E8}0M&Y{hmN(yZY`r3E z5#x4i2D4?w#=9lIJ>IePiLgbC+t!iH7Nv!i{*J97$bn>taoaiycbwQb^R16>cWmt; zY!TxQ*U`*YCB7+KZ~f<@+Z=%@W70!>O|mLyX&2A?`S~%76XVpB!6f3R}d$mQ)Ig zm@Uem6s}hWDjg{xe4(ERp zcbxRP z_Uz|#9Jlg?En?iZ>Rh(ECjNGrV{4VLMU2~4z020ERe%4hW9!Gl7BOyHGhMdaG5>(D zMGS07C1sXvi(=!Gx%bX-+t z<$1P$&egg#-{;mmpIZwULn9+HyT5SL%W>-;LV2+-6b(M* z#XjXFF6Ezm^taa?!}Eai(&%G=FRzKI%nm}Z~yQrvYbH~W-P*@2`jp#!$|=TBYfk3ytG`4g zYPFRQ2<4Pd8Clcg=af%5%@~orB9HGna=oMcwop#{lskROX`k{6m-3$X9Q>rC{IyVC z;Zt7eQ(oayUd5Qf_$JeI#{1}oTd^@_7k+n@PkA+daHrrZpYlnJ*$3aGS9{Q{S2)U( zgz`yD89zs=#T{w~-L>Dz_|@&!Nj|sMFvhBBpS|X$j~us-5z1?P%BT30*Z7oAbt$J) z|D53{pCgn{^(mj`Q$E$Fd^%(3n`)CQT2H&jX?OldD4))hv#V=!bHNZxpCJ)>;ocdz z!{f(FH^+y67COXO{T5upd=H<&8GEzqNaTy+A$vHsz7n>G;hIx+6(A3(v}|xK)5*g3 zP<$@l>EgRBJJ>=+*dhk5OSaC$9jE7c->M(p@7QV(wuo`tIxE1|Wx^IQ+|R$)`uY1V zo&Ep2`8~@Hp4s~@{f!m2hUKX~9;rFV?SSoZ!j*W9{ zoeW&Lb=A6^a@wus?=-hl@C!azsrd7{}9 zxsLoy=5${UKM!|xb4`Z|<@0!sl9W+tdX&%eDPs@|<|ceou6ymNs{eJ$PK8kZ0aK>3 zGX)H>WD8|Sda8In?hMXA)@LU3n?Iaxg&Z%}2_0hGVZQ)(+%?h@et zV=JaM3gruZJ|tW4p%fec<#X#opIbj~rf!j5z?`6pAVDA9s$E7S{>o zANiCo^(p_zr+gV>_QW@tk=x#n%+2#R-d+*6FY_t?7_8gRm-&=0XUsT~g*oAyr_pJ$ zly4PXjLUt>Xb3&Zm;01|!kFXmO?qRqC;Y~V`L~7gPkhQ(`jmg-Q@)BZH{d%1pJyL= z=2}NNUo;3;`IN6_wy0B1w#Z!NQ@#dw2WO~L@N%JijZgWf%$BTtjZYa~gfjJG$@Q5h zwW3&9@tmM82F$fSx=#vgwU@;dv4|Heabg722BF< z^U1eA-tH*Z?TgzmH~N&R#&9d&=u^g^8jM=`KSKFtpYkm}<(qxVKVuA)sUi6MS83A| zPI^zs!Y!DeF=e_sE{nd&WQo*Ro5lW=?%d(K^N#DzPGj-be}1ee8q2AVmX(***Va`Q zMzJU|e~PmzGC#YZfKFk-?HIcotHDZF>^>dIZ%nq(e(X3$E>@jvWXpQW`C6k%<%Rf} zmelHgY)!Vs(+#QBy5HOI7I!MqsQVd3$P378rfhRdvcXt* zX)@WgB%w?I#9o?e30^qj$z~(2xgpVF1fpIt;$r0usU}iYMXKA6i8d8OtJGWB87-`o zCp(p)^-!XE^yVNh)!uI4VmgHry$!fnZL$%EeejAo#AUFlcza7jqp}L}cymdjP1M*S zs!QTaRsNhEkDt(#z=$XFdn#-|jXvK*^Lko6nb&Gdm#l2 zkx$i%m1urhxeSL&xvG@8g(awE=}e^jT#qGw3}mhw7l(bK50Xq(Czno&<`?9wYM9iR zlhfGTWF6yFPA8(|H^vh!AxJ9O+13=mh!fam5r%yp*hy^ce6RfcX^qLYj&uxr`lK4t zI1LMZ$2qBZoX&lU&1r3Dw>HC==d?d_ikC}xfv09vel!G>v9S@UeZI8v!(6Du{vG#@(nnn0M z)`sywa}tMtS9G-TKG2pF3>;BbP+X5)B5J9FCE^%br0n|gQ{y%bc>B*YCdAsVqRk)WAb)2 zq}gG~X%*}I0`KvM7$M>GMAk6p=O})Rvc`(qDvYgEzYDuK@Yj8=A_-GFCkvGOpu!Ri zzuZuEYr`sQw(gjMfO@C6nuGr+CZ=}_Z=vI2XVW>Q!Wx}isp`Xs!(ZoA9PSyE!bvvm zTUZ;dtE;LluPZ8yqFcsx&d8s_&KXSLltI>s$e+S?&&WrL@R{JERjcMKOC?v9*t-`^ z!~Ag3oC2RKbe9gf_K%5?_;NRp#?@BFn99{Gd#-+Abed{JF4+wFnR(KZ?bWc2d81bf za)2jI%cTP!k>@Z3=;?NAvY;oR)&L`9Tp|KxNXzc!TK?~WU6)@i`-lgzX<2j{iA(uN zH;VIM{!tGi*fY3s1%ahN06+<(%dr@PSZCALcD62Hn{8l5T{U7sR;9fw<%4G@;mBuE z>G3jI6~!K!Wz}^xl~J*ONB$Ih0}q_}$#(FtilfWvV|whg902m5+WV;9$gj$}hWGO} z#i_gbvAL*9?IYrgxA+lQL7`DMh}w@>4WC@zvN{`EYzIvmK~Vh|c;K=q&UTj|m$$9- zZaP218QaaW@?o`_XcI#u6{VF9XeUF>wo95y%_dP6bwSY#Z#D`qV#Ah710|c9azoVK{cXL#F(u;tW z-ef~=njv?jAs02|iVeAPL$2D8t2gB47;*~?xrK(@VneRUkXvTRwHR{khFsc^TV=?t zG2~7+Qhf&2J=@p7v&28oKtAGh2B5F{9AAo4we7N-H{JOA`|c-6U0TqEc9}o z{tM}~gE>!dLE*Rr%nfeN7YH3oQ{eQ8OjH`{5)?17HHx_MyE&NZQnqIV|03*8zPaj@FAnq zqxMyE&l>Xr>eI7X*;#|E4Pg%25>UJSoIxdHj_L8ADwF{VfL zhI0sBBpbgi0`on=Q9qe+p8hVS?=4_{B{;iWN(;4su+6WZC*~pgOP}v)9pY#(2YNYA zzTXGjkzkG$Tn7F|dE4MEmy}PNz@*)rFW*x!<~qR*#^1Vp@DP~i1gF#60rp=N z3@(|`>HQ7dze4nKppdyS5}Aw-89Toy%K1VtErQeek5)IW0CT?JC_Qxf?^-ao32rbr zRlQ63>PawfN_whxVP9~cf*Jh?E?|Q4)jnV*x;bBdq2cp1FeQT1`H%8dBbd_!N8#oE zb2e(gEtX$?2Ee&_%YTD;OmO6`E`9$D=CcqzO5ez%*n$KfGMV`3^cH|wCODn{ zD1B34x&#-LzE^?ync#HsN9p@GnE#XXbm{vsn2}ftMJ6bH_W*OSn^UImWH1GS)A^6m zHwNZp!3Cx7`CzURoG$(-eQyS{QE)-&`xcl_Li8wo{|#mWt_ zn6m{Jl)jgPxlwSs_@nfF1kB5lo+^FG-4DPFc^nroLFqdZOqQGTrSIO*I2cTs;D+LF z=B}sTN$I;D%*}$c(^tXW2j*oj=V{-lU;F`>p})liOi(yRff?)OeBq#YIRs3x;D+FD zT{un$bA{mSaCrPz3H!eQ^Dn`1|3x>b+TYCIp+3cjj0lI%f1~i*K41~Zh z2xgj_^Z9QZXcU4e3*jjKW`b!ITu?a90P_HaoGv}y0rRQE>C)pHFk_zK@e-6C6TnOpTu^$<1G8Mx)1}9$U@j9} zP;?F(LMZ0kv1Lj1*1*PxF zV7lC#GJP)w^Gm@6rSBJDM*p4#BQSjr1T#%=y7XoBADA+U)1}8uFbxu?N{?OPtrG;p zeW2Hfo-dfP$o9z(rH!MzZow;%N005kY`9$JcLUHokiW^aj8 z#orFFKOW2!iPP!jgQ=4^l^*pcj}Z*_q27Pjg1aL`Zx}@G1M`T)>HPOJnAasv2$yq4!^4 zZjkg;?e9czzXtQJ;JE+P^O&E28T2wNzzEJ)KU4pH1ejd}XXgWt|ET|b5SS7J?ietg zUd}TPpnljoFgFM;C>*~4v%$^z!a@1yw_u+3a*FhQ8O&c@oWDQb0KI>Jnez%RVC;PA z$XzI9>fx1ZK9x zsp>0gmyZ_=xl2Z;*90zYpm(aF-dW%-4$;ekf35=afZ*)%rij1agZWd4-f-xBAQ)US zqYLln;D)}+8C`l%{EZR}C-w0+2Hb%LdXo(Grh}_6(3@?jcPzN&26|~jy_3Op8R%VX zsCNapTMhJnWvF)_xF7YOqs-~^k`mcreH{qj83l|-02~D zN5THNV16TUI=yGXyeV-i|LqLD_XI&+70Yqtm1GXnlhS$LRFh-$41mhm1~- z!h7x;n2W=QOi*}#`Ub}5_>j@*k^k;}g9yjy{P(~c=!fA$MyE&pq?g|y!ZA9%|9b;% zH9ll?dNkhp{0$-;qtpB54IJq9Cg*f|)Zg1(FqWcDZy#_IL-fdh(+u^Z;OY(Zjy2R< z0xo5sx5iNKOmG*4=u!G!X{h&8aKALryVp=}1Gr~G^!9@PUNO}B4BU{ncrM7mKdSn9 zPuw3V7*0mC?Z+YDW`yWbf3n0-uNvG!1HEQLy;g9igy>QEINMO~JaAWp=uv%j1DHD{ zPFLRU2lJG~snUb`FE4=^^e0@vP`c^#Mu6E%;#7K6eh&}~>5u4xnBzy8viS3ir?c_fA~4?*TqgczoM${e z68CQb^J~Ek!r#vGU;H5q^-G=-jCGH39zE)>y$NpncQ|G1c{p-+ESOxu4aVOpJ*r>o zz?=}GN8D*(E;rzA1M@pCrx^df4(9KI)74jTxceoTMSsQx%r^Mw(&GX!cM2}k;ym#} z@%Jj2VSm8|j2(Xp|Lp~4g5Y%iTMUhaOHWZgjstU=;DW+?BbeU{E-1Wz z0rR=wg2J2eH|{sgWBTHw(;4iPPzw0p>!9 zQ|avvz01MeDRDZz`@uXVaXP)1zuV5I6FP+|aaEFKJ z)xv&(q2Br6t_snc1-+XM^}YhP-TOQgy6_%|pLYRsl*H-6TLxyn#HrGQ%1wh{xXb$Z zi-YS7(WCm{G(){J!Ce%hHw1cD8tPpK?oI=}`wjIrf_pwhkJ{DO4D~(+m+=9QWnKDG zc()S_C-vzu3f$NbJ$in02$-0}>GDeg%xZ~K<(F-tw^lG={yPuc6(M>we{}^;NAVuu2bC{uC0l1kVdZVCs zoS|L|xHTbq6yEO}>RkrzW&^!D4D}ub_dlp`(#Qn3tTr4=d-|68-fV&yYT_GHej~)l}j+ayPv%dth?I*ARqsv!|@Y~K{P86IS z4u#&eVD1RfTL``T!0i4Ha#e~KgPkANeOP7$%4>T{&6~?xYYsa_3A#y|chw z9HK}5yUI}SI&gP}=p6^W`@!t~Ph7wRrAHN*;{>ORzfsVL3x)~eOBa7DzF8_aV5iL-Z)VhJ9)&@qcyU-5%WDg4M;}P)Lk7)SC$I z=ny^fU%8=P4Y=b&^vHip4fWcI9+(}0Q0cKsnTOH z^qvHB=$E*F37Qu@1w9L%SJv-_ut{@S+xLcatbGP?Aod5ir7!$5rL!g~<7 z=^=VFt}O!7Dsei!m0-@6I92@7IP^lng!%8s;BE=gqx#@ZL%lb^eH5Zc?c2W$^}YeO z<5xTsy7X9ppLYjyqTonh7k}4+xg$i6?B6FC?y_F*A#l%y=p6=;SHW!eZ>~n+(D`o{ zF#AiKDt*Vo{$YaQih8|zaEn9qD7?!J^^)LD3(=$cex0G-1>mkW(7VM@?{;txhUig! z`a46t*T8*fp!bEL-gf_qME1moj4nS@eY!uGJc-lgm!rVcNSrFaEQa2EF#jXCp!#&^ z*O)`ahfGj?IvdPsf(xooe+cGU!Rf+F_33{LhB=HcU3l*R_i%_F)u&H_`CQ_3dKur~ z9bSCM==?|Z>7IgNAii{Z+2AIJ=u!DN+EA|q+}seoh0u$Exkqq8_1_0z{u81{_J^|A zz=bfn@Qwhtmtb}AM|uYs>Ky`ZMu;B8Ux}e!HMoT#dNiJC26LIj>B4(0m^&m+Ro*Bb z?h_0ynbGOp5ALZDJt~JU8S1?X?)?xwioeec_5K5H`wR+^zI;&owi}pIiPMF*9?W8i zQ^g9H70yTqx|m-J2obDhNL^nMQJeu>lRJqG3ziPP!*8_bBz@bK;m zCMt0{y-G00N}S4n)P6L9*&uN`z2Aa)MdDO?l>goaGiVzgj-dR!E0_ZWr%T^`p_d~V zTr#8cUmdtuh~D{7NPzi5aP&SG)AOw3qkht^Loy=!;6ujl=Xlo1jmB@2z?6D9&-%Bq z;En}zvfy}l)$91q0&}sOQ?7rz3e0sO++J|^=U{#-I6EAQ@$YM3K6L5%*P$H%y)VG* zGnB^*ee2TWKrquJPL*F;V80N|&m~T$cQ=^FBu=GA{(BD07ZRt_8#F8GZ~e%QeuOVW<}cS0AEB`T1Bde-)hFZ}+@Mwja1r+h#;2<3q;gJkRN9 zyuT34If4tyFIRxMRdBla>ww;`z#KH3yKDDP75+O8%&CG4^4|?$o)cV<|Nac-Gr{Tn zN98}V9rqhulF_B_U~oGNR;NerE$t1aMB;RMbzou=r^?TJLN6g0@*5eQ-kIPo3eltS z)|G~O*MYk;L~keP-4Es&iPQP-6)=C3I8}JbfBzH=E}7Bk{R`ai5j^d5=|TP*4dwue z)9K}aiAtQ#f0cp}-qWT>J-EdodgQ<5VAe>S&VSzrbBV;M{5KhTSA%(8;&ghif%#D4 zRC-iCz7R}Uc)tR--S)xhaTG*$0W(YDbpBfirbXgZ{-f}&0CS7P>GbXdvr*zyder}W z3d|Q0r_&p>1KJOK$msGP>FoukRN{1c^i5xt!6h>~z1_hb6rxAvBM(f8#Od_vz{Dg@6<(VEO9+PhPG6s{ z0e4=A9_7DF!2DL?bpCrD%-a&D@*nAa2xiEpsF;w%eI&S@(3|C<8ZNuw+9O4!Yl9 zsJ8@MDnyUw8P*u;tp)c(1HGRZ>Rku!&Jew7`0sv0z2T!Ve}E4eUHnmavjxLIeCg8T z5O6a>^yoQk37Afa)9IZC=6s1$rSBflyG$@){<{O*!y$UqZarzJ_YAl2qE zW0#D`!T6BTr3XE?nk*Ow;!78Q=YhK-M34GSHyG;O3hv$zJ*syf1@n@`>HPN=m`@~5 zmA=%@{2R;xyE^fr)5`%9l{l3i)svNAPL(*F-Z@|{l{l3i%@h6<%(D`w)B7Ws_asiG zHx_!I3I>IR2=7j1Ua>oxZ&71a4f29+i&?V2+kJU3kmE zERZ-={84%=0dtGUoEbA!aG^r(FN0?gYIr_=io%-0g9(xccNwmXkwTr#86+ZNpJ zf(^>g`+=#EIGx^nFiRy)$* z(c2CU`Xykl*_(%XlBMVA#~zCN7w?Pu3Li3dKh`t9OY_u!6AT0KrCLvX2<{Kda>uid z%QN7}-9?7n8Wrc6ucPegAW0dr}H9?g5-3g$5b?o}{f7;q!TWke3dhm0;9J0Sbmi@7Ft3N`ZGip1g1LD=9^T;r zdfR7bME1sq3=gm0e;2|-V@*yBLt(}TF%^xg;4^SFBe?k@!MJ;B-ai^tu?;BEmk z{9vx98z)nJa3q*x1s9ZVZD39n9I2}6-PwqUbHM!ZQ0{InI8``GasQFSFkhF$IVx|A z^P~sWe=`MxOJ-R7c{qxPH7d>%FH~Qh4(+^#IuT{dZQN1a>3d0;t2=ooeJhk1HHG2 z$>Z+YdY*Y2sy9Z1IaK0UK2X#{1z=_hj#O3okMxcMlQz&h2h61*dgGw?Q!pDPPUpX; zz`Q1LD*sV=dl$@*$vj@@Tcf7-AJvl!!EF?*-Tr#=%R}IXPs@lr zfe#t#2dMl<{jdeoGa_fVD1x~oliaCp#J@{f+0OJs(PpZ_rLOS(da}^ zIih~akw;`imf=IjcGtsY;kPwlt`M9ZFCLD{?^|HL_Ub9h(M~fkzQl(NeXH^Tm7@t@ zN(4v#)8(sUz$8NSK7#!YFpWoYcXjDT@%(o%yC20lJKa3#LG40;U~tKdDqk(eFD>An z5Uj5KCI1aO8vQVQ$OQTC%zV5rfDaj+|5(3MFbu?(&VPfV8IdLUkkR??5BTj$FdYS) z+a7=G^8Ke^#uWzpkK(yfFt}t!m7lZmOIpQw@*jowQg9muYv*T0{(A|`yMiNMs`4L& z_Y*L`DGCp7MR7)C1wLeS=|SPWQZNj}mnuCd9FKwfr(lD^F{~sbG6o+qx^N7_597dO zmvSyBU;P5iD}vL7gWeY%RK~TK!}wB#V=?Ye0e7)rb@_^-_gOHbE4b!p*i+>zioaLE z45{Rt&VSS{OcV?*nNj5{Y6lmqI8VM>4DM8LuL)Kcjsw8$QH6P1e8|wZuD+@SbF9Rv z^4|#9ZvxXUaXP(|z?>^_Dn0VwMPPm{aXP(?V4jyal^(4-eoZjAWJag=cW~c?=2jRAL{V9AEce=WE_3Cxuer}N)UVD6SUm0l(E9s)C>hWjz7J<0-;BRHM^ zs-SlSn6nJ@E(3FOh+aAL?f~a_8IgVQA*1sjjVBKh3|Q|Zw-YA%>_ z1s9ZGt_1V*5WT~pcQ=^7OPtPsUxL}T-U)}we}&N78O&UX)9J;)BqdIzNB!^Bg25#- zI=xfD{UAh-^2?=Qo{%`5-V0#GVzk zvtHs%LNH?y6|2C<_3vVg_p)}zX0=u#Od^20P|;wQ|Zz3l#jsdJI9G%+2AC>|Q|VE7=L&}O$msNr2iF>+N8^u`VAe{UPH#P!pGcg_e>DEM5zLbkr_*~8 z%wHrn{y&m>N#cNdsPBu=GA^Po?I z`Lo37^gbfy7$;s-dSjtC9LymSr_-APrbOaYdX!)4z#J!WI=wiUPKnd$od%{$;&gf! zgSlSfRC+Y;ahqUp$&60#K5$PO=)GvD_YSyEL-eRV{RYfI$2#ez^IsmAB8gLlm-K4D ztduyN-WgynlsJ{%jc9-_2UB=F_aD9g!}L7!@-$!f8JIm5an7En@yx4?1Xl=Vmf)y; zQ_a&*zoc0(xMW5(-!uWgd=K2uy?P3F9|H57;HX_x>5;o1ff*6w;jsOum`}_ClOs5y zRq;pj*++nxE$QjfV=0)GA$ru`Jp;_G5~tJq6_`gQPUXKlp!W=zwTpRp?dPGM^re31 z<6zzv9K|1V*Avh5e&?VD%yZ#GhVlW6XV3E#8uxq;%+CZzv@RTXfq6vYRNCFPOMB;RMEnqH@IGx_r zV16NSI=x?md0XOidLM%MTHHN18%u0z<=}|xX3^3~@PN(-HFgHq^N{{m2 z?O^^WaXP(sz&n5BZ# zrAH_1p9tp95~tJqh?o<&yE;9Zw-^rQXu$>Lmswzzgy>O!szorkWJc$|B)HQ;^eBDT zfw@ECbb9xJc~at3=|Rs)UIep!ixV$8z1_f!mpGN)G0@8ebFScm;_pf@KM&EP_V;cu zZ%UlbfA4|$O5#-hqj{QbTJc^kK4j=yrxyiNFL5fpv9N!vU`UUQPVZ!JT_Ji$!~Vr! zelNJ7`1=c(&qMU+eW{E#JkP_2OpsnZn8ku4S`}W3zvW;qmpEN`uLpCN#HsYCygdNs zAA$?=-_RuHhwvez^B?8sv0&y4E=cbLFeiuTQF%KH%xw~<3-AAed0gUD;idHWJ(wNZ z!_#9Nm`Q@uh4&W-;E`b7PjNkZj?et380THmkrBBaA2Pae-g)@#X)wp7IY;%gYMeI_ z_kSc9Tr#7Jmq)<;L9n`T(0KoKFxz!?%(T7F4C>OO#)mE*S(rRrevGvj_wzmAg-*cYp zW;Y3nZGWH7f8cp?cIM2PGq*Em&df6doSAEtp0htO1HBEvx!%IdMvv|Oi@*C~Gk(JKc|gN2ukKh6W@11IUh%T^zs17L&x?faw9|kxDYtYExc^y$MzQo&euG6+46fkaPITq zWy&x6TMuyFvhW7#ABS&5JHSJijX(CclYn!Pg*OnrHsD-k;bo)u4bV#h=hUk;U8g=W zlwTEaW?OjK==}urE(XrA*C@S#^z269v|4!C=y88e8*py(;AN|i9{^{o2QO27a6io> zz{yD{e|%@7cQ|l9oi@;5y?kdy3^o)<@K8hTlRjO`fuy8ehOTgNM#(2N~AECIRQu7G5@aRSO#T0cXS))97Uw&r5(a(Zb7C zE|mzF3Y^VfQhH84GSK@ya9+3YveBdd_YQC___ES-@|#vJ)azCP=Svn|Hu*xlZs5FP z;jtZL)Bke5l4Bf+hb|j`)OSAwoN5nVwsz1AoJ%}-nc4x{{U?BPw}m%QJKYAHCkLTN zed7h-yy3yi#@|1IbHvR9=a=Kr2Z2-L!OKSPLf|a-;AP716wr$U=f@V_K>6JToM#51 z_f61y5jdS+)qD&z9{mJ3FIsrn+RFmaJN%X$<5E0yq?c(tV!3=3IKQ^=h@Gum_5kNq z4_>Bnp?v;3a8CM~raKV5(}8oY2QL%7MW8nwICofh1C?_ZaCQ$ukMi#~z{&gi;QSo{ zoDX~OGVw>fWHfNfJ$Tv5Zx(Rod+;*Rqnum{oP-B28@&{8zUsltM34RQyTEzb!W*dk z{tlcG-*C$%6FrXSVc@K^@Ep08K~9>$`N|;l$ltet^OA)(5P$oD6a41D{BgWI3OLmk z-azyg0_PKh&?^JIPXg!vhCuHz;QV$FdK}jF0%zl`nh);lk@`&=7Z%X}+rYy^=Zr^b z^9s&CegmA}TX@W`^z*cFwE_Nb0%yi|l%Dfls?dwBL9n6OAbl&6AWBz)9v)_-`?|f?JFZa8!PvW6-(oN%!`;0~bCpHAU3xIQJI$l~n zxKIBo;C$7>8z>*&1VH0Iol1K?dfrMGLjIPD+< zy)D4`vW2Jl=uhu71l$UoUw%*NId;Mf?eF;i!F>sM=$v%Z+8@WCXDu8-#7o*=2E5;9 z!pqQ3Uj*LScWAm!JI#>a^}tD4c*M>muUNld0M3ssyn*DwF5o;f2)$E4??vE*zOVf8 zolQO;1DumRc$xSc1p!(LoD1$&ddJ%I(&~eDis}E0^=>?Lj((6<&Rjpb-NF$>yfVoH z+UtG;ypcapdX(dWm!X`;0%x*?N9;`bScZT~;N0~?rFS&&GRd_v_^0Y!yJakSwO-uJyggpVAwfDJrnaYLo^rygi(Zb87*KrsCY&)kvTET< z{HR{GXiZyt+miUWrfCyP$4#qi7#+E+bxr%SwpAY=J#k#=xQ~{eRf@l(Bdgc6EoyCV zZ(B2E&7!5t;;oC~9cw^f-NdsH)^YKQWsA;ly}Y6A(pE$qzhu$Gizi$>Y2oNRor{#Ucv(XnjtxE0GTPUGI=y>LambGy3;)U(Y7PYjs$JewjTv?WdL|JJWkjLXa)ro=_%T`^IEk;_RXOw|N z*@Yjsxjjob`%kdoZxq$_O=x~;WqrZS@>x@=E9y^(uoEnoA<8foE&ABp#`e}VbDL`B zN^`udb#D0u)8BpC8OIh2Ji`sMAsRHh z&6&|aGKhC5SrdR)VX`WitO;#pQZB)O3|-sXhNKZwUuNG`ivmY~A~O#Xfi@8QM{iF@EAda(?&Hi)qcj}jtT zuiJ?q!;L2MHLX;w;5Sj*Iq}1qdWo6X7SO8Z*sCND2c#sK%g69=o`Mlr-egM~U>AO) z*?}6XTa+aJC2w?3;u$V2LE109?4V~P$n4%hPenOQK)w{|1wg}%a&EO`D{MRa#Ns56hB4;MPi!kh^JYF? z!IN)rr%9hc+#|D3pfbGwBv2*Ze-y~9epPFLy)89$zd7Tt6Lv~L-ivT!FJCN4Ex%&` z{RL0hprzq;Jo!ch??2IMmhE}9_?Un z2!vNZ$ENZ&9>se{ARCEoc}3eL7z10^tib>&1Cs=1?~3eLp4Lq4Tw$IJxoz8K-_BAQ z5iO_euPw_m4=S4h!#WNfYt{Bg>5jeUY&v|I|pT+YKo<2N5l+QFg7vi}F&u%;;(Rj|p zGXu|sc$VU!Yr(@@;@}Tyye|TlUdOg5Wn#6#N9SwfLHbt9;=pi(6cfLp(^dmO+6({M z!af9?;YQ-}XyKZGIi;{Cg@>Vx?{#c1nUfxo{X3X5PffzgtG2G;lpFyPg!$G#kxgh(_7b-l@Z@?$132Wz|~QF#C?&i zfc}5h3L5#lLLl;Ytw1C~+kpv$0^PNdjXnu(A=7;J7T_$|&nM0by z-zbnE;>G+=#SCho0VjH~?65b6>GKaDNZ z+E&FEE?d>Qre#2u5K$aiy2nSw!vy&zLMA3M)g*~#!_QWT+3+)EGJQl@j09yWmR$+k z1r$}nTw$C}W~Y$Z3+ADxK{P-|u09 z_I}oh=7@FT<|w^R-auZ5+}+%wPA78&GBc#AJxUMK8jMcZ9}cs(Z0CpTsgl_6}0!WUNt+cS2sK974kuFF{BDPLl9vD3enzb z=9p!{I{vCVu)BwO;^djm))>wf{Ck-{2~QV?la(GO(cQg=CHCY9608v7(AdOH5u}Y* zMuW8IA>m+hfsCGnjvEmvv zU+k!qWRsO4DcxjcVPfY2SW8p0N|Ke~WMxsZvN%~8*tk zMlG++k>5!!mn(5^`(>YId}Bn4uaI zFOm3^18o8UFibqGBirJ&7$HNq)|#_Iox4y{VYcje5Z$M6dCq~yQGDCsX-L_jn2AAV zwRq8jeCFGpJVd5t&|8pI@Vgv-VPg&;Ee&7su_(2Pu{mck;JPKrg>|JD1*Bzq3ZV6p z?l?gHGKGgYmMu`SI%b^Zw@&C#^IIzr#nT3X02r(A5DRuBAr{A5>;_Uona%jbCtg@g z+OFA-ErHH9-Y0~XZ%APYqf`pD{U>JylT9HCl#nd;T_;3or8EJh3oy*D#Fxq6E)WYb z53l~12oUA?GlIv4^*J9!4lrB>oZ7KuN$Z-1h3%J?ojav;-IDPiEnTu?$=PLCB`hl= z5zh>tzd%GBi}Q;`|tV)c=#PH5jn1~cwyZJ;?Vn@WtXiCrK%{XWO$IKWIk&5 zHT{{XtI+`O?P{kYd2I>2HChGmOh7*bUf4jV6G1*eFJnz8GRG_JTU`12i6k@%kiTyY zRbKr-;8kOT!aM~5nfe< zhG?Mk@un-snek|-^UW(ymLf~+&*=!ne%()* zSonsP^&jqh{K{j^s-=*qp;+L5*B{Z@b>(5QU1>hn-Y0+!wn!X9C~vk#Rqy^T2~nTR z@9b(euZ)J`f!OePzBTAo1}5x^ofl{+xT$+fH&^6^-8@^YvJ=wTQvJXor8W%dNH6K^ z>d5Iarw7OEy!R4_;J5a6|2<%C?d~0ww^gc)oz?3`NJM6;GGOQGICEB}__6(K?7Yqj zqyi7Nqym!9F{J0@)2<#np9RWUEt*6}-h{3mb4qZ`*6#he!VL#)uM0ce%nEew(lQR2 zmBBIHh~Y`U66xRD!b0Xgb2ss^7BM^VV>R)CRKEr;5HJ5d8Y%!kN)K#7iH93bcpR8V5syZDW=l+~@=+x-^M&0vCEPbhAS` zMvDhSS7y^O7AwXSjh~*0WmahBEUt2>n^nP$m(MXeMy944n271G_}_Y%WA4_bv-8#N z#s{<(?8kCg#R|;=#s@RveIYjbfkYD z9>w43;4grmsx2o_1DonMMy1)x9S$v4i&`;P*p?U?$jIpfugEoPTs`&-PfglYsK+G6Yi z9ctC@miVmtUke1lXvM>V#aGSnGYnQkdf~l4{cw-)Kwb1d+Yet9J|f`b-IeMK5}&2| zl0X2A1$ewo@>zsHb<8#h?3Lhuhw$S*F>hmyg3WMSLm-vd=~m!0s$}< z;PDpvpAj-Zp}(WS2Ql*Ipre2wVqo-5=9@vYHeie4)duEw9G;vKNERli29S4i zMj&=%$B1N(?U9@kv_aCJ#TT5-NwJ$wZj-q>m^=foEa`-pPEF8Fs5aOEKkVtY{E(^* zGL1UE;Ovq=-pO?nXFi3U2kgzj$;v>7HT6oKL)!x;3!)98EVUNxaW2=|W_YsF%A$vl zaZ-}P9j1IZgzt40snJ3V6WpbdY;VeO^H)W0q4ie`W%^kT1ocxd|!M>IlV-v(Zr+cT}?Fo$ck5CvwTt!z&clPYF*)d9MIqRcFX3P+1tzJ z81uKPL_W*nZkSa|E0o?qE#nh|qg-a8pb^lyeN5+8pR|IZxdqH4lZ6mg$tp@HI@_{< zW9#JiMnQfC!rknCrU-w7&&&=$2GB82bh#Gyol2Ovg&-b`9l1W&`WS^f=jm*V!WKnk z!4VyD^o(R_a>RV;hc*wnmi6lfhwc_2!m_vJn9YToN2Vj|Aaau+3mscx+kd~Lbdc>t zAJ&%E9yMWC_wNF=y<{x0Es)q2>cQ&WgvZ}{EwR6_{Uywy3OR=g*j8{I$(9nG-kd~9 zK?s3ISQ_6#3Snb1Aw2oU6uiF)zkHGI-xR-kymgucz~_Ky?8Ku}o9{?GyTFLZ@Y}_g z$!4EMMG6LzJ-$-Kw;uTC&0nG3oXB)E1$paGXEms zk&6*@Hjl4oO9N*N3gTN%8X5EWPPX`V9&=DCq6`PYV_?kICYZw2QXfu*I+;Z3%t;%L zsI9BDEd|>OWqoQif`%iq>K+q>8UE7B&lj@7lHKgViMWuRB9~NxvF`YhtWg;qV0Mjl zcl=GIzP(Uw7sZhhFGF?NMRANvSeLdbJ{|y#`M&ToZ@_ly}f*OfWQQ9OBD{28A)koD* zSdEb3M)pbAMG~HMUUZOihXq1yz|TBe6-Bj0>3YG~Z`kz`e=14zqQ|MQL_Zv;>n&F* zXkOB;@k?B;^|wuf9WCg;K|4&>)Z)rxHof8sJBJ){`CWHNRxeY5PUf*Gb!K7wh??4( zI-lr>BFGgTr(30wZ>VMDDu-le*JVW{NzxR^;}g9(iEa$=YhPEHe7qIamgSr5sQ&WK zv(SLfi>N%T#L@$ZmC{Fe2< zK@#01d_+*2?@khZPvTP&-7OHC#R5EDN%UQWs3aOCm6~o2`mux`DoJ#|P#aJZJt!yx zG}>)S!;vB~L-_^smRUm&{)c8LyR5uI!=}S8arU(TF%3?am3H5KQi2C4hG*>fuI8BM zXpTQ;QtwK0d_l-cQ?S($TiU#+DP}P{_S*aevdEHGYy_X^%u5A+PG;Yg=zLvB4p2yM z9r`riQIc6oAqV|uC|g7IlO8JT?w$}^FEPx4yuJ%R$L#EWJC}1PTH4I(1!I@__jrMMtpr;euEMINC<)Wrb7cnZ zlf73{LB}m=nqTPbwmHsDUyN7Tw?K1)=U`i)Z<98l=3TLt)?%e4VAgVN#he~WR)s7P zYHx3|Md(CfqTYPQoED(14zqdLMrs~uP7NH`y{W5XVWW8({hKEoXxf*b`ikJR2kat= zpW`c#_R~9erI%6efnO=M8NLrxRar^El({2k-;d|F%rno&Ubc&1fjQF5#pe0lJv1Cn z0b}__gsDkeZ3A!){B+=@H(j}4QM%R%B%Wz68XC`&P!8iWe0cW$Z1c7N|k|)>*g5oVF#XSncrh?!74Iy=-V;E+^JCf&6eb>01(Oq zz2n2FTcac^Yy>+-V!_Sajk*+Ce`>+cbbeL{7ko*pGUjFBr(e!O>6FrQcCk>(x*mVY zz`-jd*slWDHf7pi@^%tCSYgzNB+o|qSHYk%K5e!57?eQX_QblN0VBH@Cprquvaw=K z+-V7hkyvL=TzN*&D7dL>^LYVt2WBQ2x1#Xm7q7-V1x2T;(5-+vB-FnZJ>&ip_64po zhvn0$zu;F`tdN%rfp@5%5ZyO&K9iSRH|85&A&SURW7+?rh13NYv$$i{~drT7f3Qw zy+>kYozlJQMfd*`x>@SIO9J1=<@TRj3CxWKrDcWP9TxEslUf2;z;6j&=5Dk|&gX$^ z7h$3GL^fR+rwN?N7hJ9!l!Sw*1}-hf6gRY8ua6y4YENb>)I+e0|I8uf^aY`YagW`| zoebxqnCV{BU`U1josKJAnHzGi6U(~>W+h=;r!)baFDJ-cR5-Nl>nk#_TYkZc0_}5$%2B`j?Cy74NVfIu6@W(TDOj_FZODK`_fp3s2%aG_k*Id&N6B z@$sF{ZWwJ+FW55kjM7x#41ChGxw_YE?5#5`ts$}hK*y>?bzdN{zR&0wrD-?9s5!o* z*|LkqcEp>kgb-W?J!HbJWK~hJ`W>^n&pc+iQH!lyd5`LV3O2zVM^WJxAM;lK)!hzz zk@<&tJ&Aoedlv!0JOK8-FDY(m7!UTwlfA}Xv%0s|%U(X&+qVhP_C0D=1hJQ5Mqqi) z@<5)Ig?m{RJt(}rD?k+$AxGNjB7Yx#9Mj;# zj=;ZkEKP;{Z*J&KAF;g{jL$hlj-(j@G(w;fKrAO+$v#~CX2S02y0**Py74B^9qAd8QU=89-omh#Mp$2^+04=rzN?2S}lW2*e;hWYFG2gm%m zIW_rI^K~p!T8kxED0!u2{ybe+W?|6f8;8qW>4d@97;PgQ!bQrlLNm)Er6o4)MSpvV zV7$c1GN_-WOr|Z^ez>U_^7wGiiV+G$mTf!!XfN89YH^@EbkQ~@ltel=vc$tE`Xcku zF%S1Eb(DEt7yn_p_wzB`u@_MKA7bf4^}}LS>wy)T zw~Rv)7l|?tNi!r?R^93#wS^1ZQaPkLO@o~`pD8x?-K=5-tW~Tz4$00g_V>$p;)HA~ z7@utw3xz0dzUGpJHa`%Xk8e4lzU+V}PZZTLAbEDO1=CNo9<)SRHbaM}Ts92b2AE^b zK^A$a1t-l9yf+-f8E zy5GB639-B1?Ka7*T-_-cer59Nz6f}#Z?qLk9O%3$dM3QA&y?Aeihq6-Eyth6n%cV5tQD%6O*ChtlOEnv(D@KLCKRf?)OFDx0kkY5*D0Nwl+Grh zvy^?fQQo!ku9J5SVm^rw4cM_M%9GXTdihFh3)KDgN+-%#JIWo=D_OFF*k~bbimrxVVq3{1(2k$96hyf-*2^z`aigq< zUoGKD4be#E82xjoRWk`^1!a!GeE8GYBy9s+h2tO2##Jx5H5-lC=XV0w;NWR{(OBit z6;=UhiK^}1D&8YEb(s}LO}x;o3!#v&i_S)2By;u^piRzYSs7+sum&L&#+UMT9Q{P1 zE1Y=TNM6hON=jWJjx=cNz;P;MS8p4OsB&%%PpQ^@7=4J5FZ*_X4ZpCl4!?gTp`QWt zq(EN;^h<$maiCir=zjq{Dxq5ey(3CLm!%&Tzb72O7aYHr96y>m74L73AC-0W%LkzW@(lmJZ+BS*7quMk^4pelFF%po*I2w?~I0;a<#25!iV@v>~G0FgGj0!*+ zqZ!c8B*p?jOfhV<0@4^f2TAd+A|!Y`iAC{J4&E0Wyi|%4I?tE0*X;fmrj1)3!Mopt zD~PK2kr3tNO0CgRK)(?`ZWYyS8I8D7V>P~yZCxCR+a2p z4;I7`-#xnYl_BBl(WMpv-vOsys(N54u?~mc#V>(}8>i8BVEhoN$gbn;$CNUo`X!(C zNk&Wml8=R_o0svSE@y2sRctrg16o6LfsTXr7&tS!LWehd3@neX(>QjN2cnyik|H%* zW8iQMf3a(K!heG^0ET+W(NexJ>V`OAvvt@5_H6*MB#XfTwt%Ik!7*YuMu#uu$k@q%Le)w{=3?=&l(98>W~qB{o`!h*ZHlhrSo7X;1Z-C(TXuASz2A(VAu zUC4+xPpS&8ufsy=j1aY)APVpTeDGLkHiyjWopp)6LUS9w!)knlYxUK;@hz6w_#}=U z1PQY$gbyiE{AB^Nt|;01Toa3*v4i`LGEnG!vml?huvIH+GgX< zRNyP-mE94XdQ))M-_5FM!ClplY+UyNBU$}ie3aSv67o`411p`S-L3D%w@itioV|0= z|IO8*=gW#(I)&sz3 zPV@!ye))WHw5F-9)=#>Gq;o(zQPG#Px0hp7N3Yow+IU6O==g|P{WPm2fI^)Ws^OW0 z(yPtN(Dt%u&b`PGjF@CzHC zWX+*T=Nmr&6cWE9Fm@a+5D&~cOybr93JSEABa1*Aolu@(r=cCI*0e5ayJXd}D=>Pt z+Sm5DX3%Z@M&%>GfR4pngF9L%^N2407D-zwBS0M4Mxx>nMcmUsB2Xs3+!x0-8<+9Y z9sMGBJ|JnA0J;xPzFaIdLj20`d$>R|0UaYy1E8=#8M=HhTbHjWG^<0Fe*7v9W=wYU z`TF$wh}l?dRu`ES;ne(KeQJK7zPYY8xglb%57jjDfXrD%$)@5RtW|sNRJ^>|g z7@n{k@2+j;!}xuI@N@zoZ8K$nGC9_>UH^7_O8+}lgZW1!%?K#+gT{P=15B|%)H6;J zh;8LWfnXQu#SbIU)gUJf~ zK${QqHwK?>^PyC2PO>q4KWk!AQMH2`5xm7xk(xrYac@a%*GAYy*P z-4l17d2JU`u})=cpV)s-oPAK-=N|x`8MvQgN_=?dvmJS<*(Df)3~r9Qz4O`l==xM@ zo4*Nk@^{S+`GeS+nT_lB7+{HK&{jVueDxDCTZ{TtliBff=bMN&EIuq%8QPai!PHkH zWhOLGl5RbU56a#yA`hUIjM+s2c-6gj{$lV;t^|W zfYc5^dz{(^8Ud+I;vy%M^fh#a6Us$Ljl01KO#rGAt~g=QP)7hxMD+~LUjx!|c@5BHiSZ^No(mc_a-o_`62BlI&C!t#besc40i7jy9|iPLKw+Z- zkWTk!0n&6+)z7hVusqwVe^pAHBz_*)9)-4CiPqh3AmS8{XLpBXs-|U71V2qJ>OdS6 zbeQ@$pnBnNDj*%EDtHB4gy+`scFonx*1?Ftd%Yt|*0imREL*wolGex)PTNl~P8b(K zG`}MgXMhQv<+liNncJ^wi$@klaKp(mwO@=g#`t2LW+VXV-=!@f+O5K6Z_S0YbrXTvL z$U@uS#zO|h+2LfIj(>F)9|H7o$v^~9qd?4XlR#$zY7mI}+5~~-0>U0hWPUNA@dCvG zl?sHOIiO?8a|IKx_sycQ3I(8gR_lUe2yZ0gG;Ew0OFy`9drIH)vXsis>T zn7JVvE>wtQB13M3j4V>t&_+M=T0YID{*Zxtvqk=POOF5Z^eOwYOvy%{sq}BzXur$}#;Cz`{+a6S4HWnpEV0%tt zTQL;?jgvlgb;f?#ORIC;jy*E==Xu8dmwaP?XE9`eaF=1omvpENxMP2c#A}_gpTEFS zt|Iuy{>?#lHZ~3&`zrwH*uMghj^7=CJ|%dx45=1y4ImveQ-HLUb9F(-8Wx{UjqV3T z>rmL(4M@kmzXH;6uK-bR?p- zV2^wDcqc_Jadq>XOZkq$StFK%1wjv{-&3FwIf@6tE;mkvQrnD@6mLU5F^`=K32B3du{ zG29(BHc18|@Jk6)3g{Yv$^cz0&`dzr3)BGUI)T#HTpvM5(>L&v^F=qwI;VXuWG}rF z`*SYjQ&lZ*0Q5zP!7ibnGH) z7Pl_JEoh4)OQ6M3Piv2?T^3&&sheI?J*CE4=~>yfxb>8SUuC&T7-VIBOQ50XB)1DD zUhkVu^1Kuv$E`ahEda(=JZBM*>yHfM(+C;zfUZq}k<;}8CXmt8@kJnK84PJ`#<}uU zXJT-I)w~AQ^O?0ii#bpJ=rzy<%j@B%BgSU|X}A0up!+56w*hIlywibx;y~Si zbj0BHRvj^Z4@f2aK0tQ2lmhXO6tltj0DZC;v9(Vg52#DHIT?`lNq>KnMbqYGi{nc( zbU4Hm*NgNlQ2szXIWq_ZNtpc?jZ@rEEO`EL;Qxft2x4y)Xd<9{1S$vABM_^hTc8XY z+Rz*2Y&6P-|Mwc@W0G@MK{}X5`3s5r-_j@_7j6b@lvSG{oF7T*w@-slH!#@m2b@<(YY$>>c^2L>c*Srhmv`zh0GJY^^>J5qUU(}}F5{3q7Q**MlDSN!+IBAcW zsMvmvVH_v_A}O)G>=%fL>FuQtA@5RMgLwkq5_M2x)4|cv+_>ifUlqN>1bg{PY>Q<0 zSP0js>3Yw9i2^tLFuwvf7o6wAFKl!IQqlEwK&rrTTvP>)+YJK}*HzZK;HRQ%mjiL* zp(=0`;;O*Wn4k*WKLOdI>%A&)BZQl5VAk1zJN6d}_?p6rYgZiduX zD3~*J6?>r1G|amevVYHvs7P`XLD?QJ5IfS*0MhOlw@SJyoLk{G;6a2N#JK;eGp7Tx+ko~+9;121$lXEP7;?dxQ zuGp*1*lKZJAbDOed0wbvcnk0H3m8{prSm|+Wy3`D)aZta?w133uR?*hu-ArKc>7<# z7>)e$a-6W-bmX3*FvBT_kU-Nk-3fXDUu-{wXk{Q-8N}tkZn_6}$by}2vm~DiJ;>$z z@J>Zh9ySxKLv+EwjP?eVI1(GU_ z2ynm`N1Fv*qXZuMud*(*=zf@qG@0W&-)uH7=ixlO`5>GMY)nnw5!=A~4mQYr2kNwnTGZtNN23FJDDt_nLg}I>Z|d zSo&@%Q>_GsS%2Flm8^#>tdrnF-=fyPPjs&ly0s`LE{}$`2XJX#AS&y$^t2Xht)1jp zKz7L7gF=~!tP-&XEX7oCq^ zHkxB8n0)S6o-JO@P!ydvi6#9c8p&QFd=O8W z!y|Q1GLvtybeBd)lPa`Gq{pWOaq~#CwKx8cG$Z9W!thX?34EVJa>!p(Q#8>1Orlb# z9J;Za$5rcK=6?B}K6dj+x8cU2moB?BKZEE57@9|A9h&$1hh`pmtGVG3t=ewWhvr8m z)ht8vlU5PywYu@c>^V|kN2N6G9hEYq@2C{5W_}O1xQzIm(kOkMYLK$_zfsC$H;*8~HBCXBH!9=RNTP^Sl{`8`yi)|PUd}dn@23%r zvvUJG5C+EgC~GDNHUHvIqOZz#0swZDSi4d7qN?I@O6KIHEC?*X6srXZ>oG-KkC})C z7zvWPv5_WnU1l<4h`0GPFjpt%M#K6uPY>}lKN;LtWYz~aUNOgr2h9CAymn?Z9(&ll zJlJumX!z{`T==&Z+r|QuW(PWkVHUFQ@JS!(2qe$hmzUfSH0K4(yci}e9UmY%Xl&ni zm@@}R<}n-^z@+no9cu((xVb$!Ex51M#lbJ!A{H=@P97NpTEKj5-*J-kCp78gIp(w= zK3fBu$r&yqRe^mYapvr#BJdIfFZlLtS^yUWZmFNWWyhl~`Gfx)qhpO( zIPt>SIAO9XIC0MGc#Hl8`h~M=fL`XJZ<#fFbJgt4^Jn9GJx~IIl=!|+2>m0|>E{di zqk&BNA2CV351mMX%>2t+}t7spd%wb?|?>y z+YR#Z*+vrQZQ+}L)XZuKg?JLD{IZ(n+Ix=pg??gN0|o?k&uM6|-d#s$!f&ehodZbk zOl|`W>eJg>bcfmr@t$MmZu zBnW65f|Zl(-&~hi(HV2Pa86CSPG~UbyC^qWr1OkZ#4tS(A%pA&a&H*b>Lr=<-9Su0 zjDxhDR|RalG=3%VMQSC~G-kj^8ff0h%YyTJIEtx-fc~5~s?!o^7IOW}|G4390Na1B zIWM^JlQ2Ud(Tcu~^9t@cAK&O!hf?*0b+{nJ+GmQdT`B&|{qely`aUzS83EoUg5+@X z{2;!?dsO-{EO7Ypt^by!Ao?r3dvyWbzgKmk6gG>!4^O^Pi#P2AVdE2k<{~s~T;)LD z2BZaXCm`)M9J=KTyO;X4WR}}s@Py@}!o`vlbpUO@Wq`a6V#K!t#|}foa3+Urt7sJB z=%4QB#{qo4q*V%Ni9j4}E)l34P^&<;DhMMTOf)%8^`qX|5`tDUP}4CjG^!t*0s`u^ z`j>+k8fCVlE88?U2PR&bbS3j~N3B$sYDnx)u3h>#i?n^AV_agZvhd!|zPj8)?Y*lW z8$8tBJ8y|YN^P@;+I!DwN~rO;zfk8ZFfqOz&yTIZQ8@O8ZgHGNhr@JYug6R9<^7ng za!H$YU08jpczoJ*Vab-@MHu4>TX0YD{A9^Id`TeUO(f=2v;cRS!_{88Vb-~TpAk-K zk(zCbaK1|@q)`UP3)$ObiZMivLR8lrpLoFk_!DC4b3>TJ^l&dgyI6-n}(P$zq}pTTGA5*8?F#Jom|1$H;O$iB<i0Y7i!AChYSy-iJZmVpOf9V4k9x&!cOk{MbNR9gK}2;#5|PE&CA+kSK;U*eaMFtC*p73!5wSL4f8Q%gfL|RHwSbg4MJeWz z*F4M)F&zm)gyUYv{MePz5}RghZggz?cuZ|0lF|BR9QIb^5C=D8b>A*hN>0SACOO-t zL<2JOmapq)0#(CHHLsKtdNUwZ9li&M%CU;yhw+O_(lDcd+J(_41tg|d%tKK|ubCSH zxXjZunsow(^;qbUW>X+JD`;JO(Q!7<%*X6<1irBsDE?+Lm!J5fkf!Lw^Kcxos$l$Y zSYi&!>6^);fYd^@nP+iQ+fyZyjCAk?mm@lwVZ3J7oQf1PSkqM71lvK_(SK*TmqSnJ z($!QP$`kA%U1lqN&F)P2tA42R^i4@2i=Fl#5_qV@nQ=JvKpC2;=oQMrqT4a57^q@7 zXQ;TYwx-Emk-jIfttb_EtY!WjjME&T+~JdJn>tQ|B-}8e%=!y;KFjJuL!0YSKdyxO zfo2waJAM*u1xOMnWk62I$BKLv)!8R5Ax$iogCAM4ou4ea$ftXhAu)G>jI(7r=pOQS zgquO{vJX=@c-^Bwh_PhA`VcQl9MlLLc8Csn*rjNpJ657*XbW=2Mn=PZ{4h0A!gfJ1 z6_7@)(|lT|6(Vh#BIxYPkv<}6iNMn9hmdTuxgj`dL*O#rCnTrb5^8R$XLpF$-9c?1 z!5(NvmVlsW=Ln%4KZal0`bSE~KhZ9agBUx|ApE0;ZD}87&7(_f?%%ggdzzC1`%u_? zE%p`;Yoge-UA}9hC3?+alV6`QQ<1E1N)9K>qBFH zsmEvksr&B%^Y7h%8I|{Uv!k%{&4Nv5p{zQ00kMmSK_BAQ?%q*(Tkq#Kn=!j%ziuBU zs0JS!zk|9~Gby(DrmA<=;=6KdAISMZJCYNl)-pt%AAp1$gqc^dyW_B0 z$uoOC4ps_1h^3d4bSeaQUfn5R5-p+y|q zo~#bHx2FR4=!xdYW8RLM+GaN+Ji{$x)G@C%)tV2Z7}(~8S0tV@Eofd8WMPbXy52T& zehdJuuWJRHpX$-?gjxDQoHP%Q5a(QoA!x~C26FH8> z=b`0#PkOo$e!BH)KcEp%a>7Oc?L#+VodQT_Y?AG*cj|E+Ovu z;{9OT&Bx@N_Hey}LlA>k zDS~Fmra9U5({#)yYEs1y)vGDSYzo3EgtY2v>aFo=-bGNuEH-^5WL|)sWFmGMM`n8V zShuMwehiiGW`yvB1l#Ca8FX@dGK!94K5i2M#C7(t@e>Dn2oRUa!^R#!THyZz#Jvo# zK%r1I6kZ1RH`C=9LD3{Gl1lJQA>N*_E7lE0-$X&Q2gkhH{ja>(Ysm`&$qRzX3qtW$ z+5Ty7xu{h|Nww zr-|$OVq#lia&2&)ed7O_z|dVA)PQu?#%xBDsnaD6)CtI)7JrfcaF~rq9v4U+p_aXG zip>%yh4)Xfxm40X7Nn66V%tVrmyOZx9!pxVs8{|;x>0yR_816 zA`D(*e&M--#YT0-@XnIuA&*J_fxZ(@?i_?J}LXVD^F;0S{im zEO1(|7IT+I?XS~haPI2(0D3_xu(2f-?w*%K-_kV5%1(em=*|01#*E)xPqqeSyIb156`DXjGGTkO+uNnWvks}xg^i7X zbl&v_ARP;Ns5iGHhK*uC+FN;ehlY*=G+ja~0MU@E`XZ0}qO<#Lhg4rJ)Kc7+qDm=h zB7U4XKZrYP9`jV478X{KF|&kHHa_+byJyk|hqVP_FW9CH^B2CTmgYD!8m(QP(`d^$ zYZ_zO$W!45QM|AVBZ9Ol?PCVT}Jny18P?J8!3`ozN=|EhJnj&Sz#V8H^ zk^>RA6Av>VFh)pkzCv=&sjk>kgV^j>gm%%ni#OpOfYjO$8uNDdfn4OSsPox^O;;nb zBYG=E^yc1=QTklyxKH?XT#RcPp4SuG-&m0N5t0?P)bAoQ{z ztXl|q)lmdP^SHaZ5TfGwF;81VZeu-;91Uu3#;pXH+K#Qsd#u)0MT@K`Gr)%KkN+MZ z-5=ith|~M9@hBkb7-8eLjvt3H?IJwEM)BqXQoJ}I?u88-Tb$6(0pecPu<>0d6hw?4 z;};z+bd+Xvl{BM+&}Ja+{QAr|C5XnUq&tP8SaU?#ioFs4Foy$l&&Q-_659(CI|^fO zbo^Pyw;r^H@cfI!tRp8gRWqI z9vvTnG^|4*(Y}KAUJDGfvT^;hAf9iqJo@nD8|UK9(Gqs1ia-sn8?~oHLF>HLcgz|4 z`>h6}w2f!*gpH5j{TG2w#QXC?y#&yo#m`oahq^D}GY)rO5C}w!dOTF8bB*Jr)NeqD z`#sQm9u;pEa_^_A@C_%0_fJ*$j+2JipLB@cg$X~jW$)0SqdJC-^Kry<#u2l9ygg>a zjOE%qYn$qp=QzDPv7-dLvRW)dO+AJn&lm%VR|8`gnx-w+F0wH%Mm?%=^lCsV`)>k3 z39p@j?VOXK9IG?@kDW2B2*B8FOZ_fLeM@q4OpEpK@KSp;P+1I-82g1i@QLYd%x_6V zWv^v_gE<*CfNF|Q+%Sg4-q_Ra=ep6L>|mU;iQuB;aBA|`oDW;9Q4dQM%x%QZtxNjj z$cScg768hhun~9su5loD_`4l`To~5Epu*3>$h9Qc-BK7LZ`=#(n$3TV`B(RWK=&U5 zdH;k2I%>?Hn^K{1w)}zcd6mKkx6_RVDOc=F!Y?{V0}+ouc8S}bxeNUPEinkC3%A@clZ))ZU~awmi1+?BA5nI!RE? z%MQ2yk`7G-yClsBpvMF%1++t;azMKUqNew#K&ZLIOI`kf?CQSTK+M@qCD%~#s99@F zdo3A{&P6ZBpmwDc&h|~wjUbozN|IiZ(bC>Qo?>5B2vc{zAFe#G0^K^Hz|>)Zg}=32*Bjdtkr-(va9%Sci1V zY~>BaHwke|mm_f)4}^Fwh&M#bgz&XMN?eIOviR1?Lm;>?unVP8jA$inL(l)H)i8-I4Ov|FXDqvIT_))DD8CC zM4U{bxLLqC7PFJVY?)mUU=}~;E=7in#CAQOMbBYuO5GFE=#KD@wUm- z1yY-$H1F~buzT@W5QU26QHvUXfC<7$AeIiX4;jx2JgdP^1GLrhI`F*>4CD$9s%f&_ z96;x0#Pzj-Ox1KZnmG6)2V6Y$d zp{~T!2XG%o>Pk(lT-(V^L`Sw`GwfzmrOn6+CUx?wt?ZdUM^I_-&bFJRTHec>(^GGCC8HlfTO9gEm zjF!b}ZAQ`FJ*DDjRG4I`Sdx2)g|lH8Sel))@yh6IBYu*bHqr&f$##*WC7ZRS$%g2H zeJ8s0lEwk6Y3f)stpzR}Mr;5btFY096J4be47_zxy91)c2SeE;l4Ni!3bRaDbHP!M zawNf-gp4ORty~(S>n7})IOBNpCSl|GsYL~!>z>fX-CXM?PKlV;MQ=p9W^D)}xZrbL zlr9UbHiT|64adedM6VQIoLEtstu=vK1KQ9{Y(vtj%q)$kQ0lScFtkH$egGzGjCsMm zr@ey>>cg$}fp$xJ0S=}Dhf3lBOYb<@q{yq%1`ti_O*Po zHe=txQT&7S9iEGa5}RwT#^L;vp`JycP+6;=*GZSM)keqILhLGDpS-y4>TX&#HTMvE z6W+u=7grSnYgb~tT#9D}p4Haq$U$ABK&V0}+EYMiYPdlglUiyNeKJCG_ST0d-zdXd z54N2TXdgm#+wh+RS_?l_WK95j#gFs9UV)g{9|gJz$ywW20O=_mJj(H9gytK+1*E5R z`~lF5;`chBJp%0qWS!RmmBl)*!-06Uoca|z5HFO|qq-&n(z8R(2c&0*)BsX#D-P&+ z;cp`#&Cv~jG#?KFQtmkh)ZtgyxE~N_9%1>~Tenj^2S3I8*DxC|2-Q#Vc#OG*P6ebf z&IhEWvC;|c1EguZ2}tAeI&F<{Dz*dYlJ^;abjf=y7+vw1759u}NR-HXAT zLlN%an8>O>N#U>C-sk|q)HO5l)7(;pcfZLzXjy009}P$kKw-n+N_bebd7a?XnD-a> zsnI|u`0x@pJF;-q;?r^5>E)63j*HtDu3Rlgr!HBz2%jgkN7|OiS*eSbE?l(=XW8TD zvQ?`);?5!Vk%enoG;w!Ivg%EN)ZN6+JU;0*NLV^nQ^?7v>c*7o!M zMVrGs1&7p2zCwVW5{MI$Ukelg^r}GU#yIO*br|%bAObic)459le$kO2-5UteZ)8J< zZmO1NP1W`b@mezwg$QtuB)8AnPHYSJa4yA(mvYAwAjp}$UHG3u;Qx)8RS>oE@10p4 zE-99vytI**0ZMl)O^6DozS;A>E8K%7~P6lf-( zkU$*rSntK2-CM=<#65A?B<9&UE+-{ya~i@JkYJMb2k}ROoP35O-vz@E4Z6;@^Fqwf zj|8&Yj`%%29dk~1j6|>1RW>Ms#fTrkvJk9A+D|ap*-C#n^LCs$Vhz6dsyAQ!H04qV!#GXF5eR zj9~*$BDB-G(>7!dlnEoV%T^IkY&xXciQwfUL64>)gF!l z#8VRTWg~HB!DC04>EE0@%1hA*lOnxJAaYA^StzG(xnG zGmUdxKUq5sbngk|ZLKw*wl~RC2653Smep%&?KzEalgut`HfRdg+4COH5E1CVX9jCh zYGAWh;Ro3>LkXdKW>kW+g=>xM0;GP=0b=J58~Xuq3=11PBT#FJ*KPBJldy3XAjJck zQHfu4_IiA+)STbCdB~ROE(G!PWx8{OQM2N`FVoEv>aK!g_c!(}E0>zrv^T>z7SD0G zn=cU2(wFI)5Mn97_Hx3I*G5^iIsl}vjV=q&Y z*~`02B{8T8nHMgYL*+7k;bNskd{65%ZV{xf)2ulJMS$r`wnCVqW#AOTT1oC;M#=x& zBFr`5)jPa#5k`9r7h#x_L%j&oDJi-=smv-p?;rM>LpfErTGEVw>Zb(a7yh16|3UZ3L1n_#aHRgt!3%TQWL+fF;nD9x8#_ z<0~8pfU$@#I4I+y+kei=-$8tx>*g+9)BLhUY>@dn)70WgpRa#S2#6%&?O~axX>RoN zY1*xtzE9nGSJO02B7$=AOHDR$9U2Vdc1i5tG)-eO)M=WV`}Aqro&V0<|4r%A8Wz+0~T#MCjeky*UbK$@z!EGWcty(mDvUt)%8xc6cfV_C9=r;S*$M zQpB^08`g`c&C10!*qbyKlMKs_UAa{I=!9o60h)Nr9SFdR`}McsZ|q?#wB?wE%X1Dq zj-3Yw%&L!{HGKM+!-q^l)q4^7$`RJZgeBi;mYVR<+ z{UYQRMo8X5^2uAaG4i!HU~0qUn&#SOtWK8Hn2%x2YO-F;>y=umS;ZP@^W12OaF0_$5P=$+{)Ard8uWR7 zPLb^E+KmeGo}P0$IDAa}$^e}M3v<|*?m)Ky(wW^40MI@jHtq$az4{Rcdd-0%Xbsv> z_&tZ>)d5m#H7}%9ztw;qLAp3<1kl3*VJ^BCgg7U~8omoocEJ@ks4E`sFLI^7WRm%k zIb%;h12$DsO{oBorhXhCZoCQ`Cjnyf4I2{xsZo0hAbz|YHtGQV1y9(ZvhW1(@{PHG z{N`DK5>za zrs|G(>$Q&ML^xp`r&Hn0K?KJWCEJ3Hbg5Y@Ff2^WO|Dv;T&24( zl6T6ubLZDVIeF);cyE~*9lQDZJDAe-l#a7PksbwnD`xqM0J7e5Doyn=8XPUM#`E)GXNY3&iw~X5Jo(k`+w}=f=$$5 z%rgCwCDvPz_$_`fpD9T~T0`0buQTnHKgfhA zz8A2T&z=Upc>|NXdI!_Pw+5S{8v$@^#z&j_ZDVe%*U`Zt(~56H;pkOx=8-su`E(YNX6Ux$oIv8|ITN1U`wwnrKoQj}HLFefkbNaX1tMh)e3wPRf^|KJlag9CW*viC_J#6=MY|dBYr18e-nMN$;u;s zq0X-sb^c804mme-SjdWkS@wx45$<_!p2HKrwhas z#|iXZK&J`xCZMqb@qo-R0xbiicMog^bgKB>4CoYrZU?j&I$+p%7LZOO0{C4bq2mCl z-$Fn-5?l{Rg~C06beQh~q*A9B&}fNkR@|uNJf|mBeUnG+zs{Voxu4q4DWy^<0Hi8@ z1Q0ues{Ln!YQAwQeyciPv2JziqBt(*T_{&jZy@P~DmUYwe+yRF1l zL%oYnpxV!|JSbRCl7t}!ji^9HfF=qAz!-(`wU~f)7UuB?$#_TF%|LOsO8>kjRqT)Q8|wB!oS|sRck2*x4wr&BM2q*#3+-nED*)+Q%}bQv8KH zixRvcOCquBW~E>#JNhK`v9>D!v?3z zy6G*1a@MP=hr z`53)O(m;2S+_YO^53(+JDXlR4sf@2BiIG8n$oYqRF<^ zt!dX_gIjSgAw>e_Z~7s+#JB(2c=m7aeA&IN{XAhag7_B* zG!{^eKxYD)CD2SjQw5p}Xo^590F?>UZ+YYDzC+XZ3{T%fr!#k>btkX64GFuWN7Y0Q z9mVLh%&t_ZwdR@WjyLow91JVB)C4i65U2sre1ZJa3`lbUOkTnruZ0 zpB)zBb7TsGrNZrzfco&{%Yn`+$4l{BWp*tfmE&9myaX}uu`3{LY-Yu)wh#qxI5B3w zIpePbNKFpqTFYFdxm40W0g%?RU309dOf>{Vadu5Dk@%FvD+FTTt$0|A0V66EzX&12 zjWTYH9k*=p=yaxKsWv!&b6!LO@Wj7sqi5s`L_2Q08 zqEs10MCawuxaW7{*6<2X^&92Utj!0jE*?|SZJ7@wBG8iy3I{1YQ-Xs zKh{WJEc}48%kW$)7IFNs*aF>r`Rj{%5*=~;vDmZRSpNFjWW^$mKNjVQ8_Qo`cUrNC zv7;eGRjUg*g6Ll&@|qe|?R&ViCt5il!N-as079=!@_1tZTq2t=I{$T;c@yFs4k(<`NwMV1T*|CnNNP{DeKNb}mH`eNJom}k3 zI?swl9Dghzd1CFUte)t`id(UWU#uJdaB0+yb-opg zIR02C_+sG)oSoJ>D;9D5u}*}KTN-}3@eL~$as08skSCU3ZtSvR5yv0vBwsAQ+<4uJ zMI3*ulYO!L65u!vcW}h<$D+2GEngK@EaLcMmH1-$^R?WHMI3*uQ+%=f`MS}HMI3*u zQ+=`g^6(xj7IFNss2#ZZ@|VVQRxIN9V~zF2@=LY=2Y)!?_+y<0A2%((WGl5|5yu~E zoG+GN_VRNtI^y_aoem#2E#eSE-L+OM;`n2g!pDu}Z@vFx#UhSB)_7kme=YB}Vi5#W|NeD$z zvk3_#Bqa1A;u4ZgSV*!lg=Rw$5m5mV6}w`=g1tBFz4zWLc16Yho-%i5X3yQdOEtgu z|ICN%E_2WMo|!X!ZbL1eLk>o*KBR?Xs2~3eA(Q54COHdYQ~as$iQ&m@(!scs_w8_! z1tCk2`$B9AU5(|Cvjn*x$#5?XC%DH{y{XB=6}caijX7<9(xN#J{NkW8=&J@TY^o^3 zX`H7xDChV&tsegeoj9bB$65S81}9%vD=m~kk3}cc^d#^UKlb*Rug{O#!|?MOrFC$W z^j2K!hk%Us&vC80=4$KTC@qw+(>##0c(w^YDL83v(T4wzGPc&C5W{Ik*~#tyx>wuk zq_j}R)`E-~T0>^M1<7%2^;cRbWBcdus22L?r!n`9)>>ng7RuPRaDAY?ak1~(XSG(H z(n1+qD?nPs0>**+D;CL=rp5z zKT*STNe1gGrs0dv#sSUo;W|amjizS@ELauLtF+dmb~*@RZCkm*RvyW8#ZUOVxPR&$ z+SY-JoENo)53S>nie5ErD^J+MM5Xvuhwgjh?wh)4TVoY@FxfK6Lj-xSAQzB~ zA3iZ`yQ~J><#?=8kqZR55M=E%7YOoDl5w(~_4PZjymZKoDtf3O7YXuEK`thlAbg@n zPPzMz`!xA1MJ{GC_Sk8&KnnI};V;FH^APN@c33;DUoq*!e|&3|)-cfGK7BOI&79!0 z0{(vqe5Lr^`@^e23+X7sd4160AmIZM^Ap5i00q@d8TjTKy78N1co%~E=iv|=uYVqn*@b{ISbKH7l@uR1ldZd3{th7+Z)`AWZ zv~UDLExR|qLusK5Gx5ST4yh{US0g6uPl0S|>nPc)feM3^#=vKa{|fpIzb1b5FaI=K zx6y!-H z!>d%d;s1{Ht2OyPMV`cDV148;2jXABNw%f&(y>C}Y}TS&i{8p@D1)BY z?P4-%b%swr9!vQJrhZPn8LG5U#Gbm(_AIUVUlsLhy4{f%w(e;P9rV% zdbk9%upXj}U0%~ks{_Tu2L;FD*D6~mgZ|O=uo_}g{7yamxAC3dbU8hyv{1&jRYO`% zzhT$IkChh6*jlxuVBPQ%0m9QSx0mm-W zuqe}`Nyfb%&QP|F7PSSJI5zocL2e+KboiA0;aQ5@Ajpk^+#twJB;#HWZ&BnXQ4eR3 zmU}&X2DC7hD8rurKyldf=FDLxaolU>?@9}0?3#(QvJ^k28H&vJ@@b>mJC@*j%AFw! z0?OF6Wj4fUKhMaYyi{v-Raz)xYt138z2UPp{BdyF&H$x_GPc$+5Tj=f9n(HNP1`C` zS}0>{9cyW2pYg}bTB}NFp$upl?esX(+5u(U)55WTk~Nwyony3tfy_U*rthJGIqXBB(0(Fi7EW} z@3U{zT08FoQ4mnZwsjK3=u-Zp-O!V@)&!-6GPc${(!!)*&E?>D<07SnGPV|=jZ%($ z@Wd2t>m#LwGPc%yOUoWTdqGXcfHI(El=3MMlj83OpXiNump)?D`6{J_GPbP+q~(;d z-5Xz^v{1&@I+e8Cd*f%67RuOK3rWi#r_w?hJ73T+AYaZXvvbQA-$e-ydt=7{ z0cC7kiy%gqvb_p8L}{Unt#vwSwWWCYpy1dVrL<7S);a@XbX&G}SE`j3%GmijleG4Q zPb{zW>#sZ%B{(cqS}0@NS`0BdU-s_G%}NVpY^^1vg)3UL#lf-loYF!WTWcxA=zOhQ z@M^kF;a5rvWo)gpEUiVoo`%VeV{2bLsRaRLY^`MwqitPZ^!-;_D^F>m43okt#^*~_ zG4qTV*#CiSIyON`g^LUsux`xs&ISqXRTOU$AJ&zD$r;l8k$8c}L}9 zC6kR+$rYsKUR!V(sHjY+joM45KsoRjM{P)#OT^G>xwq_YH#kRv{1&j zbv0?Z*Oo(-7RuOKt4Pbewv13(C}V3~Lt5^&rBZ334A+5^RgA7Jml`o)|27~NzqVXU zww!#ye|#%NnO;XS?qzzPvUQ!PE!PY3b%MN_WZdiF9%vB4YC*mMV(l8fT99F?2Quzy z&Q#~yiCXRc}{84G4j9oKtAuV*MAO6}-ed1}y z66`kP^c(`p*tO+Wh|%7#`>{Qh7RuOKw~>~6%{)kHp^U9{J88Ms%xtBFGVGrtRE(~f z4Mt4Z-!oy&yn}3+HSq#WSoKXyh;1yIJttJQIYQ! z>47&58nYe6jMmW`eTeB4??VMYmKn= z5XrQIPqg*e_XA*(>-cA|B0m(hH94-WhlQ<&gsn$NW+;4OsCi=^bQ@?D!(2svBx>uC zs4Yy9nXgAd-p;eSk%^UQCqP-d|cRiOxSuNfvw%K z`9gRiYHN^+@llMKuO~sy&es#d)>9;dYb9)l-Ky~tRLmiUkRm_DWaEq&bZtQH2A|lc z7C!yfs;5XF{^Pq)X*~^EDH!4V%t|4~w8E}S1@_{|XbgG`!$OF`zMMJcd8=n2);@2g ztv?G|SV|-V-#*_?`_Pw)G5zx_9I*Yv9P@n2b0kv>pP18y|9l?Q{u!gl&k6rLPg&~R1B9X2>W*E3^UKDmg$WbAU4IHg`e>E@7yoC zXj=i$!akT};2SO$hZqbTV|wF7h_$`J9Mc;wkqjmd%c!LL^%v?^aE&6r#NIIajh6-a zCGv(zeuZSPMj`o#r*DQv;D=urURC5*m~6~EUxlOb&Zy?3a+#qF*QjX_!yy%7%n|=J zh>mxrW?3rhpbYjKdgbyuY4w6nOlj2-XZLk1!F_V65Cs8cY+G+YjP|p=ckxv!9E5-} zw$_^v6YmV>&RtLko~{gkw$@t^qu1T`p3K2Y3uSDrw=FGu$77n(LK)C9yzvfcVKYW= ztZwmhAxdyKO=+QwZR=f#(cZ9kJg!t)C}V5AM_Smn&=v>B)_qC~WjO8?731@zs+bo0 zI$Ei|uzwYZIocd=wu|>6N~aKyzanby2P9JlpO~im?t1zjSb*bzWUp@F8j8 zxQul`a!gpI8teS2wL2Wu23;L7q>zT_H`^{_6Z*m`9Sz=0e^UAUz67=Es}ww zaLX7b0RqREdH)zpe@QLA(xzA>3TbC>HXJpGHe-5&CEEd7CtdF?K>Tc%SrQrX&n2tAb$e~ z>@jn8YLH?a&4#Q9Qd-UD2z=cklrz-OA zg8YXd|1QYTFd$#0@QLB`>wZetYbNO5ertPF2p`|(( zhj+s`$e$m3S~Jb~yaAi+r|SXDJ{+%2O7UZv!VljsKTUu|HuhE+Rx5IfKbG85koihO zliZ4A+7k(0i+5Sq<1~5T0UX^*knu)SJI$>`np=|$j&bnA_w8S6MriW2iriX|+X!-N zL2gSjZGnoxzW#7PcaClAkM+j3g4|Y+w<8&BHyG?|zfV@=?fkK1yvyD8#&&|d1Iajk zetzF{n36ap__!kPAjs_mc?UtpTYXdf4*9)pPUxx0FJm=_u%kaV%{vM5j)J^1$v88I zla^liye7X5Rxs@Bk0s;tj%;u2EXeIirZW-X;nKY>oTtg}V3mQ;-XBZuAjs_nc~_Eg zFTs+72n;WVk0tLW$h!)1N0M>(#%YS&QIPSu2evml3i9p=()^Pm?=HxD2=eZNyeG-D z^@BHD#-f_a#um_Mlw#_c;SWHPSoV3SxoLG z$Oi~=H$m=hksq1shdS(}xjU@EF?9E*LYz4c_7LRmg4~m2_96mYOY=y?=<6o*$1vx{I`;d&&2A^I$7baFtn)e#WQw`wQ~HB;)jT``y*z zc1C;hrW49b8XA5#bkh29jhh!!L0)2gS;Y_2})#pMKgd9Kl+1TsOB`sX$ zVP7_B;6B}Rhz$Sn%^8HB@W>l~Dy)Xmic6@y1tA7)ZR0cdWCjsuCphNRbp7k>Jcx#X zGJNz#6@#(P-WUG%`SOU0;OrddK$zUR5PH~>}(``?}{F74y&(c>~C}V34Aua5C zQMT~8H=u`cv{ouDl(Dr65@>y)v{1&@DzvmdyX;kv|p5My)F*tu)YR34f2LKecU9wANj% zw2DECXQFRgDFg-IzYx{&Oam>6k$IN>v z$xH_QHt=V+xP^*b>W|I)a4YZF;!2}=U$3-=gO=Um(AG9!#pjz{#Cc~KGw&maZ022) z*MSzMl4OWeS4>|j#?1Rj;+T17j+ysSB;!8DeXGc${FHa2MvWHaQKBCkLo$;ganh^3 zhjE(6FxjY4V@b=YQRvk%QLkRCw8ny#?NzkJUhQ1MUS%26tK*1ldR3Fp2Q5q`$xzaE zE2S?LV|sNwaZIl=$Mot1l5zLyGDV&Mxv<;m5rRBHcy%JlxX&D3Q{;()e54>x6y!-H z(-pD}KYU-VI{SQIw6{5II7C61+86-CJS3ZVXG`^3sY`iGr0ro#$YJ(qb;+PrwDSHAeWO2)*B3uef;TDIv2ea zx!fO1t`OvMK@O1&R7wgz9GeF_a!$`59LcdEe=NCDkVAr8MKTKETX$c-Lo|8GC?;14 z@>D^t667$+8~_OT;TySjWH(KIXf%_%-!-71WWN?JRV6UWnV>x!ZKh_)7f;?T2 zYe>dvr}irQ@NrD85#(Ayt`X!2$#9m5-_qVVW;~N4f?Oxa5kWrMB4-VF=5tNn zegcz^7UX(CK3b3)NXD7770jQuP?Jj)xj~Q{1-U_xo2)cH@Sb^H%EOA>B*-%axk->` zk_;}?;fL?yz{N1vby`ZRBOnUGOn+)j>z*aZGX;4z$>8h+gT24HK#^zrW65&_dA1-Q zLo&Ezf*-ymFXqhCX?{VGj}hc!1^F03K8|F1D6)M9VZ=m;hH#ueHqFNi@^ONELIU!u zihP0~&lTho1o=dg!6ga&@U45euwHxPha({h!ioOaG@m5MCkpaBl5zJ&{UieW<_Yr2 zf;>-<=aY=uYVqCt$XA1PntxH``GS0kAkP=%1tjBM>mE6Z)4V{CPZi_^g1j&Rc^obV zAuROA`uQ|LUMR?mNXF?!?R}D!io8gWPZ#7xf_w(aI6cxqZ_Qt+{hU1+5)9!Ce{7o1 z6y!4mc`?cCLIj`h`u5xXp~=C?9KBeOmk9D=L0(ESJ1g>2yX|y_CLg27O9lBXL0&4z z%SguY#`E*$)@br_MP4SzXAAN&L0)c=%l6*0gC^gg$jb%!96??#$mfy_d{D5TzwyLm zjy>0(8q+_YC&=dt@(Pl{p%iQ0ZLigQsngtU3X@k5+1c^H0UfpM9gp*)ww!T8bJ~5WJ8IA0Ud7~9 zM0QFUCm5(@d;S_>Yn8BdEy*}NTkG*}U!ZOI!ffkWvSoVyIzhfxkgq41Jph4i=cP7Z zE!E@+)0lj{Ag>nW>jn7+lG%+BKKmN`S&DpvAm1p+Hwf}gB;%B+y>@t9k#7>@n+5qM zLB54#TB|g-e{=mS+8bX?=jdAm`Bp)`MUZbxkmgn}nqauipBmG4ZWrX+1o@5xX+Bet z?-1lW1^Es^zKdkKW6~g;zHjxT)clY zM?Wgaj|uXlg8VqixVOpzShHYw+#j3fCj|L%L4MLApSJkdp*qcL6!}R(eoBy^6y&E9 zkiTuf6vLeh{@64>Bgjt+^0Op^yQvuVSiSaso#uIs9Q&+4mi(L`KP$-3CrI<;CMG{G z$S(-;^Md>$$)p1Ue)#TsrpviH&FdBUML~W^kY5z!mr14*P%*qR|JY(p{(1(-zU+_n z#w&vSvLL@oGVnpcZYiT?a_p=ASn_Lv{Hh?oPBQHo;j^#BTCK>h3-TL+{JJ2&X_4(~ zv3ky8gKrA*TY~(iAiqsA?EnEkeD<|iS1R(`g8Yskzb(k`lFVeFwt+wU98jm(5C!2~ zKl#}>Tk#%grNOb5@P}tB-X${p$9I;}de0wwwgPQ!gCf3t=J44HmNC}_?-Lo@7xuS! z-cysW04+=<$-pjUEK1c%`V1?HG%D?TI{PEqV$<*kbRp+B~ceI&>q z3a@@lGCja9TDSM3{#N9V1^E*}{#cMdB^md9l10aYF$kafW7GVZAb%>zpOcK!vn`o> z2237#%!7MZ6!~*O{z8yH7vwKV#(h@sz;T#jIPc<*P4icR{G}kTC7JP{k92!2eCY8I z1!1ip$<8WZ9L2=00=^cu)(TtSSh=uwdsZo1-;gb{9)2sx-w5(|B-0yG20wg{ess?& z?fD-S`8z@WUXZ^Ni+kk^rn`+Q@+6AA2FC&<4D@;X8O)gs&TjawD@S3&+wkbf2A^(5nrDQ#~% zdWrV)sFOI&>jn9DL0&J&e^}%_mK0Q}+6O+%jEWT}~zgz7{P~0dA60 z1i3{EY+EK7-!7QqcOO#*D{@Og#^08OP7|nDV+JcM{~?1-X+T??E!otYA#ZzRzesAGDCuyoVs~ zDad;W@?KV&?R~Zf6nQT}-dm9O66Adnqgr3G%*zjBhUEXJ|`uog$|Ra#ul46Xg99kWW|S{RO$3 zAnz~82P7b`Qse^!xw{}AAjmyP#u>j}x@^@Cx;{Uo$UOuZpJQW>Up)l*K#Sa1ziyx= z|DebR3i3gMe4rrXdwlhnYp1#M>0CE@336{i?j^|S7THd7i6W;9GQQQy_C~rOXOaw# zjM$Uz(`)?q+8f6ya;6~n5#&rk&LSE2mhzM$X9;p&LCzB7ek9YG9qP*(+8cUKh@!Aw zk^2d9e?jgi$OA}bF_2Q=@6}N^uVTL-y4xA}32!hVGXBa}F+N`^*f*cKcQA3*J0EtJ98pnh`2K+@_0T3CY9j(7@I-;UPlN(*Id zTZfXCGds1P)o`8CLK$1@Fw(-g4cg)WQ4}6mS}0>{9Zp(%ffUNx&!G57X`u`rg&EqJ z^aUTODyEwe6ZVhT#*uX7%(-zk*>duQ5(7jj2S{drIEK0Ca!1ugnpmi81w{SH5#)d% z=aNjdB9A?5Q8!KA8LJh9TtOZr$hm@?XQjFCHxrFIf0rWX339$5=Lzy)l5wA}(rect z&4UGbh#(IZ=BBR>&XW^&MR|Hxq^lOTW!T&IO6~thhW*KwMSWM&tl_c&%YVvxeMKTEU z6~ZbH1IL)PcNlTZ+RGesWmiHnuz;bpO!}Y(*wN+m!4o+ZxkTi>l(d|@OOo9r+Ks>j}he2f;^UF z_GE-_r?&W#X81?pPdM9xVXPpJ6XdaiJf38rgQQ?zPuq6|$Bq}|34%OckdGjlT>ydJ zxV!X9W0c7`pUFoE@nkNf#nIKOV8sM}`kPGj#7UZxXPZi{8B;$Bv!Bwvs z_4!goo+ilC1$mkvSCfphasRW&k7( z{cK-d{L^Ke<~l(>T9E4mxjsRfYcFSVy&yLTa=jool8iHNdHlh?BXuwOqars7a+4r8 z3i1q+aqsKiT*+ykA;>cYd4?d*BAND#@O_%K_7k1v{jcQcS%N%UkY@?<9FlRb&nI2Q zI*II&vLM zz#)plm|OUJnINAn$jbzIImzI41sJxUbEM&os#`gBxgeh-$jb%!T#|90&kwkb$>$34 zd4hbdAg>@9_c87cMP4Du=L_-*LB4=wdO+f^*4gu){cqKpihP<3Ke(q_ho{7 zxgcLA$SX<4@$>sHeLF{!+ughUD=qTMS5A0HlUv=*`FcUV zPLNlVjC&g#r^u@X`36B=Eyy>Lj8ix4HaJ(2ZxrO41o=imzL{j)+u#$5e6t|mBFHxj z@~tF;eFg@5zL9z#$KEQ)w+ZsCf_yv4INq>ZO06Q_F35KX^6i3rr$x3~${UJ&ry$=Y z$af0z-6Z4QQVzeLy>Yi7-y_I(3-Y}rgELnQKRq)2Pu;rbEAqX9e4ilSE6DegjC&j0 zYYp4GUyvUV;UMQ zF+2(!TJQA1`3>4c>u~Lg@qG2ih=b?jFmxJ|4aq*jbQrQ0(-@jUGkkUdKTk9!HE9d+jr)aHX zlorZ>mT^bn)18E8Ct7IX`u}KgD^wI;BSt3IvSIzV!nZx z?cq4rAJae2ldS`lE}qfQwQkU(yz(U(#QQFQ7z`X^a$X=#DjdUpVfil0VP?Xqfqf>W zg)(;OyhvJmfde5o;T^#of-8Qc16 z3ADy5EtCN*C{6>q^81kEf{D$Z=-y)d@ zfx0dHt$U{UPUeL%Lpgkx>t@9)74&+4-1 z`3&knz2~wpM#c|GYkxS_68;+3W|w>r&DW($>qE!$8T~-!3*tDQ?*>+0p%^S33|B!6 z)&|xxz3~y*nheKU!QZ`kb6aX#-Js7u6kzf8sDyPnmQRGjVZ20*z z(i#jJt>N$OeUB^tH0tLQK@0oo&p->X5Y|8prb5U34KZ!3n1L^%q$2}uxqpB7-$(#p z3bDSyli!q#uJa#8W6(3^+~#viVNcTY`8xdY9qbfA6ooTi;%}6(wZ0%NtUDO~KA?KF z)_PKDp$wD0fEb(+pnp=Vxx|;m!924h(wtv=zl{HbJ60fq<1$o?&ew1&#?04OppxQu zdYj8$y}6e|f%gh4EtIkIwU)Hln$LH`^o)bG*8NHgWmw{M+qyAF`kFZI`T9j^p^R<) z8`A2_+4k*L*(KGn1id;oHwY*L{~+W+%mMJtwZ&|4-x6mQ9K$|g%=1^T(6#PZ(89Ju zGVty5-3~FBQXTW7vZZ5syb9NwL}g4{-;u3UIEFRco~2ZP76z1ooErZ5p0wO&DRYz- z%Gg>zB(Qah(n1+q>&FDPo={pS16tT}Imy1CNXvbs{#$AN1oauTjGp9Y(n4=KeZx

q!RtRm|5z*Vq1_ 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

tMv*@wP4HvXWh-$uK2zk+75OtoUPqeX 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 RwNEVXGw6v8c@wf;;NJ}CzO9dDw?5iqQ|se9 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 diff --git a/3rdparty/lib/IlmThread.lib b/3rdparty/lib/IlmThread.lib deleted file mode 100644 index 57ecb349be26ff6e85729483b723e876a5aee8eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194800 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

NXU{6T;1< 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 diff --git a/3rdparty/lib/Imath.lib b/3rdparty/lib/Imath.lib deleted file mode 100644 index 4827a42f913424ae5c31f31770477e83a27d2a7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81160 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 CAa-W} diff --git a/CMakeLists.txt b/CMakeLists.txt index 5aafdf94a..5a1af024a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -260,6 +260,7 @@ set(WITH_PNG ON CACHE BOOL "Include PNG support") set(WITH_JPEG ON CACHE BOOL "Include JPEG support") set(WITH_JASPER ON CACHE BOOL "Include JPEG2K support") set(WITH_TIFF ON CACHE BOOL "Include TIFF support") +set(WITH_OPENEXR ON CACHE BOOL "Include ILM support via OpenEXR") if(UNIX) set(WITH_FFMPEG ON CACHE BOOL "Include FFMPEG support") @@ -449,6 +450,10 @@ if(UNIX) endif() endif() +if(WITH_OPENEXR) + include(OpenCVFindOpenEXR.cmake) +endif() + set(BUILD_NEW_PYTHON_SUPPORT ON CACHE BOOL "Build with Python support") if(BUILD_NEW_PYTHON_SUPPORT) @@ -1216,6 +1221,12 @@ else() message(STATUS " JPEG 2000: build") endif() +if(WITH_OPENEXR AND OPENEXR_FOUND) +message(STATUS " OpenEXR: YES") +else() +message(STATUS " OpenEXR: NO") +endif() + if(UNIX AND NOT APPLE) message(STATUS "") message(STATUS " Video I/O: ") diff --git a/OpenCVFindOpenEXR.cmake b/OpenCVFindOpenEXR.cmake new file mode 100644 index 000000000..72c652ca9 --- /dev/null +++ b/OpenCVFindOpenEXR.cmake @@ -0,0 +1,77 @@ +# The script is taken f + +# +# Try to find OpenEXR's libraries, and include path. +# Once done this will define: +# +# OPENEXR_FOUND = OpenEXR found. +# OPENEXR_INCLUDE_PATHS = OpenEXR include directories. +# OPENEXR_LIBRARIES = libraries that are needed to use OpenEXR. +# + +INCLUDE(FindZLIB) + + +IF(ZLIB_FOUND) + + SET(LIBRARY_PATHS + /usr/lib + /usr/local/lib + /sw/lib + /opt/local/lib + $ENV{PROGRAM_FILES}/OpenEXR/lib/static) + + FIND_PATH(OPENEXR_INCLUDE_PATH ImfRgbaFile.h + PATH_SUFFIXES OpenEXR + /usr/include + /usr/local/include + /sw/include + /opt/local/include) + + FIND_LIBRARY(OPENEXR_HALF_LIBRARY + NAMES Half + PATHS ${LIBRARY_PATHS}) + + FIND_LIBRARY(OPENEXR_IEX_LIBRARY + NAMES Iex + PATHS ${LIBRARY_PATHS}) + + FIND_LIBRARY(OPENEXR_IMATH_LIBRARY + NAMES Imath + PATHS ${LIBRARY_PATHS}) + + FIND_LIBRARY(OPENEXR_ILMIMF_LIBRARY + NAMES IlmImf + PATHS ${LIBRARY_PATHS}) + + FIND_LIBRARY(OPENEXR_ILMTHREAD_LIBRARY + NAMES IlmThread + PATHS ${LIBRARY_PATHS}) + +ENDIF(ZLIB_FOUND) + +#MESSAGE(STATUS ${OPENEXR_IMATH_LIBRARY} ${OPENEXR_ILMIMF_LIBRARY} ${OPENEXR_IEX_LIBRARY} ${OPENEXR_HALF_LIBRARY} ${OPENEXR_ILMTHREAD_LIBRARY} ${ZLIB_LIBRARY}) + +IF (OPENEXR_INCLUDE_PATH AND OPENEXR_IMATH_LIBRARY AND OPENEXR_ILMIMF_LIBRARY AND OPENEXR_IEX_LIBRARY AND OPENEXR_HALF_LIBRARY) + SET(OPENEXR_FOUND TRUE) + SET(OPENEXR_INCLUDE_PATHS ${OPENEXR_INCLUDE_PATH} CACHE STRING "The include paths needed to use OpenEXR") + SET(OPENEXR_LIBRARIES ${OPENEXR_IMATH_LIBRARY} ${OPENEXR_ILMIMF_LIBRARY} ${OPENEXR_IEX_LIBRARY} ${OPENEXR_HALF_LIBRARY} ${OPENEXR_ILMTHREAD_LIBRARY} ${ZLIB_LIBRARY} CACHE STRING "The libraries needed to use OpenEXR") +ENDIF (OPENEXR_INCLUDE_PATH AND OPENEXR_IMATH_LIBRARY AND OPENEXR_ILMIMF_LIBRARY AND OPENEXR_IEX_LIBRARY AND OPENEXR_HALF_LIBRARY) + +IF(OPENEXR_FOUND) + IF(NOT OPENEXR_FIND_QUIETLY) + MESSAGE(STATUS "Found OpenEXR: ${OPENEXR_ILMIMF_LIBRARY}") + ENDIF(NOT OPENEXR_FIND_QUIETLY) +ELSE(OPENEXR_FOUND) + IF(OPENEXR_FIND_REQUIRED) + MESSAGE(FATAL_ERROR "Could not find OpenEXR library") + ENDIF(OPENEXR_FIND_REQUIRED) +ENDIF(OPENEXR_FOUND) + +MARK_AS_ADVANCED( + OPENEXR_INCLUDE_PATHS + OPENEXR_LIBRARIES + OPENEXR_ILMIMF_LIBRARY + OPENEXR_IMATH_LIBRARY + OPENEXR_IEX_LIBRARY + OPENEXR_HALF_LIBRARY) diff --git a/OpenCVFindTBB.cmake b/OpenCVFindTBB.cmake deleted file mode 100644 index cba87cdf2..000000000 --- a/OpenCVFindTBB.cmake +++ /dev/null @@ -1,191 +0,0 @@ -# Locate Intel Threading Building Blocks include paths and libraries -# TBB can be found at http://www.threadingbuildingblocks.org/ -# Written by Hannes Hofmann, hannes.hofmann _at_ informatik.uni-erlangen.de -# Adapted by Gino van den Bergen gino _at_ dtecta.com - -# GvdB: This module uses the environment variable TBB_ARCH_PLATFORM which defines architecture and compiler. -# e.g. "ia32/vc8" or "em64t/cc4.1.0_libc2.4_kernel2.6.16.21" -# TBB_ARCH_PLATFORM is set by the build script tbbvars[.bat|.sh|.csh], which can be found -# in the TBB installation directory (TBB_INSTALL_DIR). -# -# For backwards compatibility, you may explicitely set the CMake variables TBB_ARCHITECTURE and TBB_COMPILER. -# TBB_ARCHITECTURE [ ia32 | em64t | itanium ] -# which architecture to use -# TBB_COMPILER e.g. vc9 or cc3.2.3_libc2.3.2_kernel2.4.21 or cc4.0.1_os10.4.9 -# which compiler to use (detected automatically on Windows) - -# This module respects -# TBB_INSTALL_DIR or $ENV{TBB22_INSTALL_DIR} or $ENV{TBB_INSTALL_DIR} - -# This module defines -# TBB_INCLUDE_DIRS, where to find task_scheduler_init.h, etc. -# TBB_LIBRARY_DIRS, where to find libtbb, libtbbmalloc -# TBB_INSTALL_DIR, the base TBB install directory -# TBB_LIBRARIES, the libraries to link against to use TBB. -# TBB_DEBUG_LIBRARIES, the libraries to link against to use TBB with debug symbols. -# TBB_FOUND, If false, don't try to use TBB. - - -if (WIN32) - # has em64t/vc8 em64t/vc9 - # has ia32/vc7.1 ia32/vc8 ia32/vc9 - set(_TBB_DEFAULT_INSTALL_DIR "C:/Program Files/Intel/TBB" "C:/Program Files (x86)/Intel/TBB") - set(_TBB_LIB_NAME "tbb") - set(_TBB_LIB_MALLOC_NAME "${_TBB_LIB_NAME}malloc") - set(_TBB_LIB_DEBUG_NAME "${_TBB_LIB_NAME}_debug") - set(_TBB_LIB_MALLOC_DEBUG_NAME "${_TBB_LIB_MALLOC_NAME}_debug") - if (MSVC71) - set (_TBB_COMPILER "vc7.1") - endif(MSVC71) - if (MSVC80) - set(_TBB_COMPILER "vc8") - endif(MSVC80) - if (MSVC90) - set(_TBB_COMPILER "vc9") - endif(MSVC90) - if (NOT _TBB_COMPILER) - message("ERROR: TBB supports only VC 7.1, 8 and 9 compilers on Windows platforms.") - endif (NOT _TBB_COMPILER) - set(_TBB_ARCHITECTURE ${TBB_ARCHITECTURE}) -endif (WIN32) - -if (UNIX) - if (APPLE) - # MAC - set(_TBB_DEFAULT_INSTALL_DIR "/Library/Frameworks/Intel_TBB.framework/Versions") - # libs: libtbb.dylib, libtbbmalloc.dylib, *_debug - set(_TBB_LIB_NAME "tbb") - set(_TBB_LIB_MALLOC_NAME "${_TBB_LIB_NAME}malloc") - set(_TBB_LIB_DEBUG_NAME "${_TBB_LIB_NAME}_debug") - set(_TBB_LIB_MALLOC_DEBUG_NAME "${_TBB_LIB_MALLOC_NAME}_debug") - # has only one flavor: ia32/cc4.0.1_os10.4.9 - set(_TBB_COMPILER "cc4.0.1_os10.4.9") - set(_TBB_ARCHITECTURE "ia32") - else (APPLE) - # LINUX - set(_TBB_DEFAULT_INSTALL_DIR "/opt/intel/tbb" "/usr/local/include" "/usr/include") - set(_TBB_LIB_NAME "tbb") - set(_TBB_LIB_MALLOC_NAME "${_TBB_LIB_NAME}malloc") - set(_TBB_LIB_DEBUG_NAME "${_TBB_LIB_NAME}_debug") - set(_TBB_LIB_MALLOC_DEBUG_NAME "${_TBB_LIB_MALLOC_NAME}_debug") - # has em64t/cc3.2.3_libc2.3.2_kernel2.4.21 em64t/cc3.3.3_libc2.3.3_kernel2.6.5 em64t/cc3.4.3_libc2.3.4_kernel2.6.9 em64t/cc4.1.0_libc2.4_kernel2.6.16.21 - # has ia32/* - # has itanium/* - set(_TBB_COMPILER ${TBB_COMPILER}) - set(_TBB_ARCHITECTURE ${TBB_ARCHITECTURE}) - endif (APPLE) -endif (UNIX) - -if (CMAKE_SYSTEM MATCHES "SunOS.*") -# SUN -# not yet supported -# has em64t/cc3.4.3_kernel5.10 -# has ia32/* -endif (CMAKE_SYSTEM MATCHES "SunOS.*") - - -#-- Clear the public variables -set (TBB_FOUND "NO") - - -#-- Find TBB install dir and set ${_TBB_INSTALL_DIR} and cached ${TBB_INSTALL_DIR} -# first: use CMake variable TBB_INSTALL_DIR -if (TBB_INSTALL_DIR) - set (_TBB_INSTALL_DIR ${TBB_INSTALL_DIR}) -endif (TBB_INSTALL_DIR) -# second: use environment variable -if (NOT _TBB_INSTALL_DIR) - if (NOT "$ENV{TBB_INSTALL_DIR}" STREQUAL "") - set (_TBB_INSTALL_DIR $ENV{TBB_INSTALL_DIR}) - endif (NOT "$ENV{TBB_INSTALL_DIR}" STREQUAL "") - # Intel recommends setting TBB22_INSTALL_DIR - if (NOT "$ENV{TBB22_INSTALL_DIR}" STREQUAL "") - set (_TBB_INSTALL_DIR $ENV{TBB22_INSTALL_DIR}) - endif (NOT "$ENV{TBB22_INSTALL_DIR}" STREQUAL "") -endif (NOT _TBB_INSTALL_DIR) -# third: try to find path automatically -if (NOT _TBB_INSTALL_DIR) - if (_TBB_DEFAULT_INSTALL_DIR) - set (_TBB_INSTALL_DIR $ENV{_TBB_DEFAULT_INSTALL_DIR}) - endif (_TBB_DEFAULT_INSTALL_DIR) -endif (NOT _TBB_INSTALL_DIR) -# sanity check -if (NOT _TBB_INSTALL_DIR) - message ("ERROR: TBB_INSTALL_DIR not found. ${_TBB_INSTALL_DIR}") -else (NOT _TBB_INSTALL_DIR) -# finally: set the cached CMake variable TBB_INSTALL_DIR -if (NOT TBB_INSTALL_DIR) - set (TBB_INSTALL_DIR ${_TBB_INSTALL_DIR} CACHE PATH "Intel TBB install directory") - mark_as_advanced(TBB_INSTALL_DIR) -endif (NOT TBB_INSTALL_DIR) - - -#-- A macro to rewrite the paths of the library. This is necessary, because -# find_library() always found the em64t/vc9 version of the TBB libs -macro(TBB_CORRECT_LIB_DIR var_name) -# if (NOT "${_TBB_ARCHITECTURE}" STREQUAL "em64t") - string(REPLACE em64t "${_TBB_ARCHITECTURE}" ${var_name} ${${var_name}}) -# endif (NOT "${_TBB_ARCHITECTURE}" STREQUAL "em64t") - string(REPLACE ia32 "${_TBB_ARCHITECTURE}" ${var_name} ${${var_name}}) - string(REPLACE vc7.1 "${_TBB_COMPILER}" ${var_name} ${${var_name}}) - string(REPLACE vc8 "${_TBB_COMPILER}" ${var_name} ${${var_name}}) - string(REPLACE vc9 "${_TBB_COMPILER}" ${var_name} ${${var_name}}) -endmacro(TBB_CORRECT_LIB_DIR var_content) - - -#-- Look for include directory and set ${TBB_INCLUDE_DIR} -set (TBB_INC_SEARCH_DIR ${_TBB_INSTALL_DIR}/include) -find_path(TBB_INCLUDE_DIR - tbb/task_scheduler_init.h - PATHS ${TBB_INC_SEARCH_DIR} -) -mark_as_advanced(TBB_INCLUDE_DIR) - - -#-- Look for libraries -# GvdB: $ENV{TBB_ARCH_PLATFORM} is set by the build script tbbvars[.bat|.sh|.csh] -if (NOT $ENV{TBB_ARCH_PLATFORM} STREQUAL "") - set (TBB_LIBRARY_DIR "${_TBB_INSTALL_DIR}/$ENV{TBB_ARCH_PLATFORM}/lib") -else (NOT $ENV{TBB_ARCH_PLATFORM} STREQUAL "") - # HH: deprecated - message(STATUS "[Warning] FindTBB.cmake: The use of TBB_ARCHITECTURE and TBB_COMPILER is deprecated and may not be supported in future versions. Please set $ENV{TBB_ARCH_PLATFORM} (using tbbvars.[bat|csh|sh]).") - set (TBB_LIBRARY_DIR "${_TBB_INSTALL_DIR}/${_TBB_ARCHITECTURE}/${_TBB_COMPILER}/lib") -endif (NOT $ENV{TBB_ARCH_PLATFORM} STREQUAL "") - - -find_library(TBB_LIBRARY ${_TBB_LIB_NAME} ${TBB_LIBRARY_DIR} NO_DEFAULT_PATH) -find_library(TBB_MALLOC_LIBRARY ${_TBB_LIB_MALLOC_NAME} ${TBB_LIBRARY_DIR} NO_DEFAULT_PATH) -#TBB_CORRECT_LIB_DIR(TBB_LIBRARY) -#TBB_CORRECT_LIB_DIR(TBB_MALLOC_LIBRARY) -mark_as_advanced(TBB_LIBRARY TBB_MALLOC_LIBRARY) - -#-- Look for debug libraries -find_library(TBB_LIBRARY_DEBUG ${_TBB_LIB_DEBUG_NAME} ${TBB_LIBRARY_DIR} NO_DEFAULT_PATH) -find_library(TBB_MALLOC_LIBRARY_DEBUG ${_TBB_LIB_MALLOC_DEBUG_NAME} ${TBB_LIBRARY_DIR} NO_DEFAULT_PATH) -#TBB_CORRECT_LIB_DIR(TBB_LIBRARY_DEBUG) -#TBB_CORRECT_LIB_DIR(TBB_MALLOC_LIBRARY_DEBUG) -mark_as_advanced(TBB_LIBRARY_DEBUG TBB_MALLOC_LIBRARY_DEBUG) - - -if (TBB_INCLUDE_DIR) - if (TBB_LIBRARY) - set (TBB_FOUND "YES") - set (TBB_LIBRARIES ${TBB_LIBRARY} ${TBB_MALLOC_LIBRARY} ${TBB_LIBRARIES}) - set (TBB_DEBUG_LIBRARIES ${TBB_LIBRARY_DEBUG} ${TBB_MALLOC_LIBRARY_DEBUG} ${TBB_DEBUG_LIBRARIES}) - set (TBB_INCLUDE_DIRS ${TBB_INCLUDE_DIR} CACHE PATH "TBB include directory" FORCE) - set (TBB_LIBRARY_DIRS ${TBB_LIBRARY_DIR} CACHE PATH "TBB library directory" FORCE) - mark_as_advanced(TBB_INCLUDE_DIRS TBB_LIBRARY_DIRS TBB_LIBRARIES TBB_DEBUG_LIBRARIES) - message(STATUS "Found Intel TBB") - endif (TBB_LIBRARY) -endif (TBB_INCLUDE_DIR) - -if (NOT TBB_FOUND) - message("ERROR: Intel TBB NOT found!") - message(STATUS "Looked for Threading Building Blocks in ${_TBB_INSTALL_DIR}") - # do only throw fatal, if this pkg is REQUIRED - if (TBB_FIND_REQUIRED) - message(FATAL_ERROR "Could NOT find TBB library.") - endif (TBB_FIND_REQUIRED) -endif (NOT TBB_FOUND) - -endif (NOT _TBB_INSTALL_DIR) diff --git a/modules/highgui/CMakeLists.txt b/modules/highgui/CMakeLists.txt index 613883c0d..3b53374da 100644 --- a/modules/highgui/CMakeLists.txt +++ b/modules/highgui/CMakeLists.txt @@ -33,6 +33,11 @@ if(WITH_JASPER) endif() endif() +if(WITH_OPENEXR AND OPENEXR_FOUND) + add_definitions(-DHAVE_OPENEXR) + include_directories(${OPENEXR_INCLUDE_PATHS}) +endif() + if(use_3rdparty) include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../../3rdparty/include") endif() @@ -282,7 +287,7 @@ endif(MSVC) add_dependencies(${the_target} opencv_core opencv_imgproc) # Add the required libraries for linking: -target_link_libraries(${the_target} ${OPENCV_LINKER_LIBS} opencv_core opencv_imgproc ${JPEG_LIBRARIES} ${PNG_LIBRARIES} ${TIFF_LIBRARIES} ${JASPER_LIBRARIES} ${HIGHGUI_LIBRARIES}) +target_link_libraries(${the_target} ${OPENCV_LINKER_LIBS} opencv_core opencv_imgproc ${JPEG_LIBRARIES} ${PNG_LIBRARIES} ${TIFF_LIBRARIES} ${JASPER_LIBRARIES} ${HIGHGUI_LIBRARIES} ${OPENEXR_LIBRARIES}) if(WITH_JASPER AND NOT JASPER_FOUND) add_dependencies(${the_target} libjasper) diff --git a/modules/highgui/src/grfmt_exr.cpp b/modules/highgui/src/grfmt_exr.cpp index 2ff57b7bf..e441adaba 100644 --- a/modules/highgui/src/grfmt_exr.cpp +++ b/modules/highgui/src/grfmt_exr.cpp @@ -42,14 +42,14 @@ #include "precomp.hpp" -#ifdef HAVE_ILMIMF +#ifdef HAVE_OPENEXR -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include #include "grfmt_exr.hpp" #if defined _MSC_VER && _MSC_VER >= 1200 @@ -65,8 +65,6 @@ #define HALF ((Imf::PixelType)1) #undef FLOAT #define FLOAT ((Imf::PixelType)2) -#undef uint -#define uint unsigned #endif @@ -78,7 +76,7 @@ namespace cv ExrDecoder::ExrDecoder() { m_signature = "\x76\x2f\x31\x01"; - m_file = new InputFile( filename ); + m_file = 0; m_red = m_green = m_blue = 0; } @@ -102,6 +100,8 @@ bool ExrDecoder::readHeader() { bool result = false; + m_file = new InputFile( m_filename.c_str() ); + if( !m_file ) // probably paranoid return false; @@ -166,7 +166,7 @@ bool ExrDecoder::readHeader() } if( !result ) - Close(); + close(); return result; } @@ -342,10 +342,10 @@ bool ExrDecoder::readData( Mat& img ) } else { - uint *ui = (uint *)buffer; + unsigned *ui = (unsigned *)buffer; for( x = 0; x < m_width * 3; x++) { - uint t = ui[x]; + unsigned t = ui[x]; out[x] = CV_CAST_8U(t); } } @@ -369,7 +369,7 @@ bool ExrDecoder::readData( Mat& img ) if( chromatorgb ) ChromaToBGR( (float *)data, m_height, step / xstep ); - Close(); + close(); return result; } @@ -393,7 +393,7 @@ void ExrDecoder::UpSample( uchar *data, int xstep, int ystep, int xsample, int else if( m_type == FLOAT ) ((float *)data)[(yre + i) * ystep + (xre + n) * xstep] = ((float *)data)[y * ystep + x * xstep]; else - ((uint *)data)[(yre + i) * ystep + (xre + n) * xstep] = ((uint *)data)[y * ystep + x * xstep]; + ((unsigned *)data)[(yre + i) * ystep + (xre + n) * xstep] = ((unsigned *)data)[y * ystep + x * xstep]; } } } @@ -413,7 +413,7 @@ void ExrDecoder::UpSampleX( float *data, int xstep, int xsample ) if( m_type == FLOAT ) ((float *)data)[(xre + n) * xstep] = ((float *)data)[x * xstep]; else - ((uint *)data)[(xre + n) * xstep] = ((uint *)data)[x * xstep]; + ((unsigned *)data)[(xre + n) * xstep] = ((unsigned *)data)[x * xstep]; } } } @@ -435,7 +435,7 @@ void ExrDecoder::UpSampleY( uchar *data, int xstep, int ystep, int ysample ) else if( m_type == FLOAT ) ((float *)data)[(yre + i) * ystep + x * xstep] = ((float *)data)[y * ystep + x * xstep]; else - ((uint *)data)[(yre + i) * ystep + x * xstep] = ((uint *)data)[y * ystep + x * xstep]; + ((unsigned *)data)[(yre + i) * ystep + x * xstep] = ((unsigned *)data)[y * ystep + x * xstep]; } } } @@ -446,11 +446,9 @@ void ExrDecoder::UpSampleY( uchar *data, int xstep, int ystep, int ysample ) */ void ExrDecoder::ChromaToBGR( float *data, int numlines, int step ) { - int x, y, t; - - for( y = 0; y < numlines; y++ ) + for( int y = 0; y < numlines; y++ ) { - for( x = 0; x < m_width; x++ ) + for( int x = 0; x < m_width; x++ ) { double b, Y, r; if( !m_native_depth ) @@ -467,9 +465,9 @@ void ExrDecoder::ChromaToBGR( float *data, int numlines, int step ) } else { - b = ((uint *)data)[y * step + x * 3]; - Y = ((uint *)data)[y * step + x * 3 + 1]; - r = ((uint *)data)[y * step + x * 3 + 2]; + b = ((unsigned *)data)[y * step + x * 3]; + Y = ((unsigned *)data)[y * step + x * 3 + 1]; + r = ((unsigned *)data)[y * step + x * 3 + 2]; } r = (r + 1) * Y; b = (b + 1) * Y; @@ -493,11 +491,11 @@ void ExrDecoder::ChromaToBGR( float *data, int numlines, int step ) else { int t = cvRound(b); - ((uint *)data)[y * step + x * 3] = (uint)MAX(t,0); + ((unsigned *)data)[y * step + x * 3] = (unsigned)MAX(t,0); t = cvRound(Y); - ((uint *)data)[y * step + x * 3 + 1] = (uint)MAX(t,0); + ((unsigned *)data)[y * step + x * 3 + 1] = (unsigned)MAX(t,0); t = cvRound(r); - ((uint *)data)[y * step + x * 3 + 2] = (uint)MAX(t,0); + ((unsigned *)data)[y * step + x * 3 + 2] = (unsigned)MAX(t,0); } } } @@ -527,7 +525,7 @@ void ExrDecoder::RGBToGray( float *in, float *out ) { if( m_native_depth ) { - uint *ui = (uint *)in; + unsigned *ui = (unsigned *)in; for( int i = 0; i < m_width * 3; i++ ) ui[i] -= 0x80000000; int *si = (int *)in; @@ -536,13 +534,19 @@ void ExrDecoder::RGBToGray( float *in, float *out ) } else // how to best convert float to uchar? { - uint *ui = (uint *)in; + unsigned *ui = (unsigned *)in; for( int i = 0, n = 0; i < m_width; i++, n += 3 ) ((uchar *)out)[i] = uchar((ui[n] * m_chroma.blue[0] + ui[n + 1] * m_chroma.green[0] + ui[n + 2] * m_chroma.red[0]) * (256.0 / 4294967296.0)); } } } + +ImageDecoder ExrDecoder::newDecoder() const +{ + return new ExrDecoder; +} + /////////////////////// ExrEncoder /////////////////// @@ -564,7 +568,7 @@ bool ExrEncoder::isFormatSupported( int depth ) const // TODO scale appropriately -bool ExrEncoder::write( const Mat& img, const Vector& ) +bool ExrEncoder::write( const Mat& img, const vector& ) { int width = img.cols, height = img.rows; int depth = img.depth(), channels = img.channels(); @@ -613,7 +617,7 @@ bool ExrEncoder::write( const Mat& img, const Vector& ) } else if( depth > 16 || type == UINT ) { - buffer = (char *)new uint[width * channels]; + buffer = (char *)new unsigned[width * channels]; bufferstep = 0; size = 4; } @@ -659,7 +663,7 @@ bool ExrEncoder::write( const Mat& img, const Vector& ) { if(type == UINT) { - uint *buf = (uint *)buffer; // FIXME 64-bit problems + unsigned *buf = (unsigned*)buffer; // FIXME 64-bit problems if( depth <= 8 ) { @@ -676,7 +680,7 @@ bool ExrEncoder::write( const Mat& img, const Vector& ) { int *sd = (int *)data; // FIXME 64-bit problems for(int i = 0; i < width * channels; i++) - buf[i] = (uint) sd[i] + offset; + buf[i] = (unsigned) sd[i] + offset; } } else @@ -712,6 +716,12 @@ bool ExrEncoder::write( const Mat& img, const Vector& ) return result; } + +ImageEncoder ExrEncoder::newEncoder() const +{ + return new ExrEncoder; +} + } #endif diff --git a/modules/highgui/src/grfmt_exr.hpp b/modules/highgui/src/grfmt_exr.hpp index 6ed561431..04aec365e 100644 --- a/modules/highgui/src/grfmt_exr.hpp +++ b/modules/highgui/src/grfmt_exr.hpp @@ -43,7 +43,7 @@ #ifndef _GRFMT_EXR_H_ #define _GRFMT_EXR_H_ -#ifdef HAVE_ILMIMF +#ifdef HAVE_OPENEXR #include #include @@ -87,6 +87,10 @@ protected: const Channel *m_green; const Channel *m_blue; Chromaticities m_chroma; + int m_bit_depth; + bool m_native_depth; + bool m_iscolor; + bool m_isfloat; }; @@ -97,7 +101,7 @@ public: ~ExrEncoder(); bool isFormatSupported( int depth ) const; - bool write( const Mat& img, const Vector& params ); + bool write( const Mat& img, const vector& params ); ImageEncoder newEncoder() const; }; diff --git a/modules/highgui/src/loadsave.cpp b/modules/highgui/src/loadsave.cpp index a29ec2373..977bfd2cc 100644 --- a/modules/highgui/src/loadsave.cpp +++ b/modules/highgui/src/loadsave.cpp @@ -175,7 +175,7 @@ struct ImageCodecInitializer decoders.push_back( new Jpeg2KDecoder ); encoders.push_back( new Jpeg2KEncoder ); #endif - #ifdef HAVE_ILMIMF + #ifdef HAVE_OPENEXR decoders.push_back( new ExrDecoder ); encoders.push_back( new ExrEncoder ); #endif diff --git a/modules/highgui/src/precomp.hpp b/modules/highgui/src/precomp.hpp index 2f1da1149..ad35839f5 100644 --- a/modules/highgui/src/precomp.hpp +++ b/modules/highgui/src/precomp.hpp @@ -108,7 +108,7 @@ struct CvVideoWriter #endif /* uncomment to enable OpenEXR codec (will not compile under MSVC6) */ -//#define HAVE_ILMIMF 1 +//#define HAVE_OPENEXR 1 /* uncomment to enable CMUCamera1394 fireware camera module */ //#define HAVE_CMU1394 1

p{YFfNzY~ng?^C3b*4mTrxix3#%p; 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%0D--e5>pa1jH<(3Gc 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