Commit 3d52dd23 authored by Rene Engelhard's avatar Rene Engelhard

Imported Upstream version 20140924

parents
cmake_minimum_required(VERSION 2.8)
project(COLLADA2GLTF)
if (NOT WIN32)
#http://www.guyrutenberg.com/2014/01/05/enabling-c11-c0x-in-cmake/
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
message("-- C++11 Enabled")
elseif(COMPILER_SUPPORTS_CXX0X)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
message("-- C++0x Enabled")
else()
message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()
endif()
set(USE_OPEN3DGC "ON")
set(WITH_IN_SOURCE_BUILD "ON")
set(COLLADA2GLTF_BINARY_DIR, COLLADA2GLTF_SOURCE_DIR)
set(BUILD_SHARED_LIBS "OFF")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
include(GetGitRevisionDescription)
get_git_head_revision(GIT_REFSPEC GIT_SHA1)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/GitSHA1.cpp.in" "${CMAKE_CURRENT_BINARY_DIR}/GitSHA1.cpp" @ONLY)
set(TARGET_LIBS GeneratedSaxParser_static OpenCOLLADABaseUtils_static UTF_static ftoa_static MathMLSolver_static OpenCOLLADASaxFrameworkLoader_static OpenCOLLADAFramework_static buffer_static)
if (NOT WIN32)
set(CMAKE_FIND_LIBRARY_SUFFIXES .so .a .dylib)
endif()
# Lets libxml2 work in a shared library
add_definitions(-DLIBXML_STATIC_FOR_DLL)
IF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
ADD_DEFINITIONS(-fPIC)
ENDIF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
include_directories(${COLLADA2GLTF_SOURCE_DIR})
include_directories(${COLLADA2GLTF_SOURCE_DIR}/GLTF)
include_directories(${COLLADA2GLTF_SOURCE_DIR}/JSON)
include_directories(${COLLADA2GLTF_SOURCE_DIR}/shaders)
include_directories(${COLLADA2GLTF_SOURCE_DIR}/helpers)
include_directories(${COLLADA2GLTF_SOURCE_DIR}/convert)
include_directories(${COLLADA2GLTF_SOURCE_DIR}/assetModifiers)
include_directories(${COLLADA2GLTF_SOURCE_DIR}/dependencies/json/include/rapidjson)
include_directories(${COLLADA2GLTF_SOURCE_DIR}/dependencies/OpenCOLLADA/COLLADAFramework/include)
include_directories(${COLLADA2GLTF_SOURCE_DIR}/dependencies/OpenCOLLADA/COLLADABaseUtils/include)
include_directories(${COLLADA2GLTF_SOURCE_DIR}/dependencies/OpenCOLLADA/COLLADASaxFrameworkLoader/include)
include_directories(${COLLADA2GLTF_SOURCE_DIR}/dependencies/OpenCOLLADA/GeneratedSaxParser/include)
if (WIN32)
include_directories(${COLLADA2GLTF_SOURCE_DIR}/dependencies/misc)
endif()
if (USE_OPEN3DGC)
add_definitions( -DUSE_OPEN3DGC )
include_directories(${COLLADA2GLTF_SOURCE_DIR}/extensions/o3dgc-compression)
include_directories(${COLLADA2GLTF_SOURCE_DIR}/dependencies/o3dgc/src)
include_directories(${COLLADA2GLTF_SOURCE_DIR}/dependencies/o3dgc/src/o3dgc_common_lib/inc)
include_directories(${COLLADA2GLTF_SOURCE_DIR}/dependencies/o3dgc/src/o3dgc_encode_lib/inc)
include_directories(${COLLADA2GLTF_SOURCE_DIR}/dependencies/o3dgc/src/o3dgc_decode_lib/inc)
endif()
find_package(PNG)
if (PNG_FOUND)
include_directories(${PNG_INCLUDE_DIR})
include_directories(${ZLIB_INCLUDE_DIR})
add_definitions(-DUSE_LIBPNG)
else()
message(WARNING "libpng or one of its dependencies couldn't be found. Transparency may not be correctly detected.")
endif()
link_directories(${COLLADA2GLTF_BINARY_DIR}/lib)
if (WIN32)
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
add_definitions(-DWIN32)
add_definitions(-EHsc)
endif()
add_subdirectory(dependencies/OpenCOLLADA)
if (USE_OPEN3DGC)
add_subdirectory(dependencies/o3dgc/src)
endif()
set(GLTF_SOURCES
COLLADA2GLTFWriter.h
COLLADA2GLTFWriter.cpp
GLTFOpenCOLLADA.h
GLTFOpenCOLLADAUtils.h
GLTFOpenCOLLADAUtils.cpp
GLTF/GLTFAccessorCache.cpp
GLTF/GLTFAccessorCache.h
GLTF/GLTFAsset.cpp
GLTF/GLTFAnimation.cpp
GLTF/GLTFAccessor.cpp
GLTF/GLTFBuffer.cpp
GLTF/GLTFEffect.cpp
GLTF/GLTFExtras.cpp
GLTF/GLTFMesh.cpp
GLTF/GLTFPrimitive.cpp
GLTF/GLTFUtils.cpp
GLTF/GLTFWriter.cpp
GLTF/GLTFSkin.cpp
GLTF/GLTF.h
GLTF/GLTFTypesAndConstants.h
GLTF/GLTFAsset.h
GLTF/GLTFAnimation.h
GLTF/GLTFAccessor.h
GLTF/GLTFBuffer.h
GLTF/GLTFEffect.h
GLTF/GLTFExtras.h
GLTF/GLTFMesh.h
GLTF/GLTFPrimitive.h
GLTF/GLTFUtils.h
GLTF/GLTFWriter.h
GLTF/GLTFSkin.h
GLTF/GLTFExtraDataHandler.h
GLTF/GLTFExtraDataHandler.cpp
GLTF/GLTFProfile.h
GLTF/GLTFProfile.cpp
GLTF/GLTFInputStream.h
GLTF/GLTFInputStream.cpp
GLTF/GLTFOutputStream.h
GLTF/GLTFOutputStream.cpp
GLTF/GLTFConfig.cpp
GLTF/GLTFConfig.h
profiles/webgl-1.0/webgl-idl.h
profiles/webgl-1.0/GLTFWebGL_1_0_Profile.cpp
profiles/webgl-1.0/GLTFWebGL_1_0_Profile.h
shaders/commonProfileShaders.h
shaders/commonProfileShaders.cpp
helpers/geometryHelpers.h
helpers/geometryHelpers.cpp
helpers/mathHelpers.h
helpers/mathHelpers.cpp
helpers/encodingHelpers.h
helpers/encodingHelpers.cpp
convert/meshConverter.cpp
convert/meshConverter.h
convert/animationConverter.cpp
convert/animationConverter.h
JSON/JSONArray.cpp
JSON/JSONNumber.cpp
JSON/JSONObject.cpp
JSON/JSONString.cpp
JSON/JSONValue.cpp
JSON/JSONArray.h
JSON/JSONNumber.h
JSON/JSONObject.h
JSON/JSONString.h
JSON/JSONValue.h
assetModifiers/GLTFAssetModifier.h
assetModifiers/GLTFFlipUVModifier.h
assetModifiers/GLTFFlipUVModifier.cpp
${CMAKE_CURRENT_BINARY_DIR}/GitSHA1.cpp
GitSHA1.h)
if (USE_OPEN3DGC)
LIST(APPEND GLTF_SOURCES
extensions/o3dgc-compression/GLTF-Open3DGC.cpp
extensions/o3dgc-compression/GLTF-Open3DGC.h)
endif()
option(CONVERT_SHARED "CONVERT_SHARED" OFF)
if (CONVERT_SHARED)
add_library(collada2gltfConvert SHARED ${GLTF_SOURCES})
#Make sure the dll is in the same directory as the executable
if (WIN32)
set_target_properties(collada2gltfConvert PROPERTIES RUNTIME_OUTPUT_DIRECTORY "bin")
endif()
else()
add_library(collada2gltfConvert STATIC ${GLTF_SOURCES})
add_definitions(-DSTATIC_COLLADA2GLTF)
endif()
if (PNG_FOUND)
LIST(APPEND TARGET_LIBS ${PNG_LIBRARY} ${ZLIB_LIBRARY})
endif()
if (USE_OPEN3DGC)
LIST(APPEND TARGET_LIBS o3dgc_common_lib o3dgc_enc_lib o3dgc_dec_lib)
endif()
IF("${CMAKE_SYSTEM}" MATCHES "Linux")
LIST(APPEND TARGET_LIBS rt)
endif("${CMAKE_SYSTEM}" MATCHES "Linux")
target_link_libraries (collada2gltfConvert ${TARGET_LIBS})
set(GLTF_EXE_SOURCES main.cpp
${CMAKE_CURRENT_BINARY_DIR}/GitSHA1.cpp
GitSHA1.h)
if (WIN32)
LIST(APPEND GLTF_EXE_SOURCES ${COLLADA2GLTF_SOURCE_DIR}/dependencies/misc/getopt_long.c ${COLLADA2GLTF_SOURCE_DIR}/dependencies/misc/getopt.c ${COLLADA2GLTF_SOURCE_DIR}/dependencies/misc/getopt.h)
endif()
add_executable(collada2gltf ${GLTF_EXE_SOURCES})
target_link_libraries (collada2gltf collada2gltfConvert)
// Copyright (c) 2012, Motorola Mobility, Inc.
// 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 the Motorola Mobility, Inc. 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 <COPYRIGHT HOLDER> 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 __COLLADA2GLTFEXPORT_H__
#define __COLLADA2GLTFEXPORT_H__
#ifdef STATIC_COLLADA2GLTF
# define COLLADA2GLTF_EXPORT
#else
# ifdef WIN32
# ifdef collada2gltfConvert_EXPORTS
# define COLLADA2GLTF_EXPORT __declspec(dllexport)
# else
# define COLLADA2GLTF_EXPORT __declspec(dllimport)
# endif
# else
# define COLLADA2GLTF_EXPORT
# endif // WIN32
#endif // STATIC_COLLADA2GLTF
#endif
\ No newline at end of file
This diff is collapsed.
// Copyright (c) 2012, Motorola Mobility, Inc.
// 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 the Motorola Mobility, Inc. 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 <COPYRIGHT HOLDER> 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 __COLLADA2JSONWRITER_H__
#define __COLLADA2JSONWRITER_H__
#include "GLTF.h"
#include "COLLADA2GLTFExport.h"
#include "GLTFOpenCOLLADA.h"
#include "GLTFAsset.h"
#include "helpers/geometryHelpers.h"
#include "helpers/mathHelpers.h"
#include "convert/animationConverter.h"
#include "convert/meshConverter.h"
#ifdef WIN32
#pragma warning(disable: 4275)
#endif
namespace GLTF
{
class GLTFObject;
class ExtraDataHandler;
class JSONObject;
// -- SceneFlattening
class MeshFlatteningInfo
{
public:
MeshFlatteningInfo(unsigned int meshUID, const COLLADABU::Math::Matrix4& worldMatrix) :
_worldMatrix(worldMatrix),
_meshUID(meshUID) {}
unsigned int getUID() { return this->_meshUID; }
const COLLADABU::Math::Matrix4& getWorldMatrix() { return this->_worldMatrix; }
private:
COLLADABU::Math::Matrix4 _worldMatrix;
unsigned int _meshUID;
};
typedef std::vector < std::shared_ptr <MeshFlatteningInfo> > MeshFlatteningInfoVector;
typedef struct
{
BBOX sceneBBOX;
MeshFlatteningInfoVector allMeshes;
} SceneFlatteningInfo;
//-- OpenCOLLADA -> JSON writer implementation
class COLLADA2GLTF_EXPORT COLLADA2GLTFWriter : public COLLADAFW::IWriter
{
public:
COLLADA2GLTFWriter(std::shared_ptr<GLTF::GLTFAsset> asset);
virtual ~COLLADA2GLTFWriter();
private:
static void reportError(const std::string& method, const std::string& message);
bool writeNode(const COLLADAFW::Node* node, std::shared_ptr <GLTF::JSONObject> nodesObject, COLLADABU::Math::Matrix4, SceneFlatteningInfo*);
bool processSceneFlatteningInfo(SceneFlatteningInfo* sceneFlatteningInfo);
float getTransparency(const COLLADAFW::EffectCommon* effectCommon);
float isOpaque(const COLLADAFW::EffectCommon* effectCommon);
bool writeMeshFromUIDWithMaterialBindings(COLLADAFW::UniqueId uniqueId,
COLLADAFW::MaterialBindingArray &materialBindings,
std::shared_ptr <GLTF::JSONArray> &meshesArray);
public:
bool write();
/** Deletes the entire scene.
@param errorMessage A message containing informations about the error that occurred.
*/
void cancel(const std::string& errorMessage);;
/** Prepare to receive data.*/
void start();;
/** Remove all objects that don't have an object. Deletes unused visual scenes.*/
void finish();;
/** When this method is called, the writer must write the global document asset->
@return The writer should return true, if writing succeeded, false otherwise.*/
virtual bool writeGlobalAsset ( const COLLADAFW::FileInfo* asset );
/** Writes the entire visual scene.
@return True on succeeded, false otherwise.*/
virtual bool writeVisualScene ( const COLLADAFW::VisualScene* visualScene );
/** Writes the scene.
@return True on succeeded, false otherwise.*/
virtual bool writeScene ( const COLLADAFW::Scene* scene );
/** Handles all nodes in the library nodes.
@return True on succeeded, false otherwise.*/
virtual bool writeLibraryNodes( const COLLADAFW::LibraryNodes* libraryNodes );
/** Writes the geometry.
@return True on succeeded, false otherwise.*/
virtual bool writeGeometry ( const COLLADAFW::Geometry* geometry );
/** Writes the material.
@return True on succeeded, false otherwise.*/
virtual bool writeMaterial( const COLLADAFW::Material* material );
/** Writes the effect.
@return True on succeeded, false otherwise.*/
virtual bool writeEffect( const COLLADAFW::Effect* effect );
/** Writes the camera.
@return True on succeeded, false otherwise.*/
virtual bool writeCamera( const COLLADAFW::Camera* camera );
/** Writes the image.
@return True on succeeded, false otherwise.*/
virtual bool writeImage( const COLLADAFW::Image* image );
/** Writes the light.
@return True on succeeded, false otherwise.*/
virtual bool writeLight( const COLLADAFW::Light* light );
/** Writes the animation.
@return True on succeeded, false otherwise.*/
virtual bool writeAnimation( const COLLADAFW::Animation* animation );
/** Writes the animation.
@return True on succeeded, false otherwise.*/
virtual bool writeAnimationList( const COLLADAFW::AnimationList* animationList );
/** Writes the skin controller data.
@return True on succeeded, false otherwise.*/
virtual bool writeSkinControllerData( const COLLADAFW::SkinControllerData* skinControllerData );
/** Writes the controller.
@return True on succeeded, false otherwise.*/
virtual bool writeController( const COLLADAFW::Controller* Controller );
/** When this method is called, the writer must write the formulas. All the formulas of the entire
COLLADA file are contained in @a formulas.
@return The writer should return true, if writing succeeded, false otherwise.*/
virtual bool writeFormulas( const COLLADAFW::Formulas* formulas ){return true;}
/** When this method is called, the writer must write the kinematics scene.
@return The writer should return true, if writing succeeded, false otherwise.*/
virtual bool writeKinematicsScene( const COLLADAFW::KinematicsScene* kinematicsScene ){return true;};
private:
void _installTextureSlot(COLLADAFW::Sampler* sampler,
const std::string& slotName,
const std::string& texcoord,
std::shared_ptr <GLTF::GLTFAsset> asset,
std::shared_ptr<GLTF::GLTFEffect> cvtEffect);
void _storeMaterialBindingArray(const std::string& prefix,
const std::string& nodeUID,
const std::string& meshUID,
COLLADAFW::MaterialBindingArray &materialBindings);
void registerObjectWithOriginalUID(std::string nodeUID, std::shared_ptr <JSONObject> nodeObject, std::shared_ptr <JSONObject> nodesObject);
bool writeData(std::string filename, unsigned char* data, size_t length);
void handleEffectSlot(const COLLADAFW::EffectCommon* commonProfile,
std::string slotName,
std::shared_ptr <GLTFEffect> cvtEffect,
std::shared_ptr<JSONObject> extras);
std::string getSamplerUIDForParameters(unsigned int wrapS, unsigned int wrapT, unsigned int minFilter, unsigned int maxFilter);
private:
COLLADASaxFWL::Loader _loader;
std::shared_ptr<GLTF::GLTFAsset> _asset;
const COLLADAFW::VisualScene *_visualScene;
SceneFlatteningInfo _sceneFlatteningInfo;
GLTF::ExtraDataHandler *_extraDataHandler;
std::ofstream _compressedDataOutputStream;
double _metersPerUnit;
std::shared_ptr<GLTF::JSONObject> _rootTransform;
};
}
#endif
// Copyright (c) 2013, Motorola Mobility, Inc.
// 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 the Motorola Mobility, Inc. 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 <COPYRIGHT HOLDER> 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 __GLTF_H__
#define __GLTF_H__
// system & STL headers
#include <algorithm>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <string>
#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>
#include "assert.h"
#include <cstddef>
#include <cstdint>
#if (defined(WIN32) || defined(_LIBCPP_VERSION) || __cplusplus > 199711L)
#include <memory>
#include <unordered_map>
#else
#include <tr1/memory>
#include <tr1/unordered_map>
#endif
// RapidJSON headers
#include "prettywriter.h"
#include "filestream.h"
// GLTF headers
#include "COLLADA2GLTFExport.h"
#include "GLTFTypesAndConstants.h"
#include "GLTFProfile.h"
#include "JSONValue.h"
#include "JSONNumber.h"
#include "JSONString.h"
#include "JSONObject.h"
#include "JSONArray.h"
#include "GLTFUtils.h"
#include "GLTFBuffer.h"
#include "GLTFAccessor.h"
#include "GLTFEffect.h"
#include "GLTFPrimitive.h"
#include "GLTFMesh.h"
#include "GLTFSkin.h"
#include "GLTFAnimation.h"
#include "GLTFWriter.h"
#include "GLTFInputStream.h"
#include "GLTFOutputStream.h"
#include "GLTFConfig.h"
#include "GLTFAssetModifier.h"
#include "GLTFExtras.h"
#endif
// Copyright (c) 2012, Motorola Mobility, Inc.
// 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 the Motorola Mobility, Inc. 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 <COPYRIGHT HOLDER> 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.
#include "GLTF.h"
using namespace rapidjson;
#if __cplusplus <= 199711L
using namespace std::tr1;
#endif
using namespace std;
namespace GLTF
{
void GLTFAccessor::_generateID() {
this->_ID = GLTFUtils::generateIDForType("accessor");
}
GLTFAccessor::GLTFAccessor(shared_ptr<GLTFProfile> profile, const std::string& componentType, const std::string& type):
JSONObject(),
_bufferView(nullptr),
_minMaxDirty(true)
{
this->setString(kType, type);
unsigned int glType = profile->getGLTypeForComponentTypeAndType(componentType, type);
this->_componentType = componentType;
this->_componentsPerElement = profile->getComponentsCountForGLType(glType);
this->_elementByteLength = profile->sizeOfGLType(glType);
this->setUnsignedInt32(kComponentType, profile->getGLComponentTypeForGLType(glType));
this->setByteStride(0);
this->setByteOffset(0);
this->_generateID();
this->setCount(0);
}
GLTFAccessor::GLTFAccessor(GLTFAccessor* accessor):