mirror of
https://github.com/scratchfoundation/bgfx.git
synced 2024-12-01 11:56:58 -05:00
204 lines
6.3 KiB
Python
204 lines
6.3 KiB
Python
#------------------------------------------------------------------------------
|
|
# Product: OpenCTM
|
|
# File: openctm.py
|
|
# Description: Python API bindings (tested with Python 2.5.2 and Python 3.0)
|
|
#------------------------------------------------------------------------------
|
|
# Copyright (c) 2009-2010 Marcus Geelnard
|
|
#
|
|
# This software is provided 'as-is', without any express or implied
|
|
# warranty. In no event will the authors be held liable for any damages
|
|
# arising from the use of this software.
|
|
#
|
|
# Permission is granted to anyone to use this software for any purpose,
|
|
# including commercial applications, and to alter it and redistribute it
|
|
# freely, subject to the following restrictions:
|
|
#
|
|
# 1. The origin of this software must not be misrepresented; you must not
|
|
# claim that you wrote the original software. If you use this software
|
|
# in a product, an acknowledgment in the product documentation would be
|
|
# appreciated but is not required.
|
|
#
|
|
# 2. Altered source versions must be plainly marked as such, and must not
|
|
# be misrepresented as being the original software.
|
|
#
|
|
# 3. This notice may not be removed or altered from any source
|
|
# distribution.
|
|
#------------------------------------------------------------------------------
|
|
|
|
import os
|
|
import ctypes
|
|
from ctypes import *
|
|
from ctypes.util import find_library
|
|
|
|
# Types
|
|
CTMfloat = c_float
|
|
CTMint = c_int32
|
|
CTMuint = c_uint32
|
|
CTMcontext = c_void_p
|
|
CTMenum = c_uint32
|
|
|
|
# Constants
|
|
CTM_API_VERSION = 0x00000100
|
|
CTM_TRUE = 1
|
|
CTM_FALSE = 0
|
|
|
|
# CTMenum
|
|
CTM_NONE = 0x0000
|
|
CTM_INVALID_CONTEXT = 0x0001
|
|
CTM_INVALID_ARGUMENT = 0x0002
|
|
CTM_INVALID_OPERATION = 0x0003
|
|
CTM_INVALID_MESH = 0x0004
|
|
CTM_OUT_OF_MEMORY = 0x0005
|
|
CTM_FILE_ERROR = 0x0006
|
|
CTM_BAD_FORMAT = 0x0007
|
|
CTM_LZMA_ERROR = 0x0008
|
|
CTM_INTERNAL_ERROR = 0x0009
|
|
CTM_UNSUPPORTED_FORMAT_VERSION = 0x000A
|
|
CTM_IMPORT = 0x0101
|
|
CTM_EXPORT = 0x0102
|
|
CTM_METHOD_RAW = 0x0201
|
|
CTM_METHOD_MG1 = 0x0202
|
|
CTM_METHOD_MG2 = 0x0203
|
|
CTM_VERTEX_COUNT = 0x0301
|
|
CTM_TRIANGLE_COUNT = 0x0302
|
|
CTM_HAS_NORMALS = 0x0303
|
|
CTM_UV_MAP_COUNT = 0x0304
|
|
CTM_ATTRIB_MAP_COUNT = 0x0305
|
|
CTM_VERTEX_PRECISION = 0x0306
|
|
CTM_NORMAL_PRECISION = 0x0307
|
|
CTM_COMPRESSION_METHOD = 0x0308
|
|
CTM_FILE_COMMENT = 0x0309
|
|
CTM_NAME = 0x0501
|
|
CTM_FILE_NAME = 0x0502
|
|
CTM_PRECISION = 0x0503
|
|
CTM_INDICES = 0x0601
|
|
CTM_VERTICES = 0x0602
|
|
CTM_NORMALS = 0x0603
|
|
CTM_UV_MAP_1 = 0x0700
|
|
CTM_UV_MAP_2 = 0x0701
|
|
CTM_UV_MAP_3 = 0x0702
|
|
CTM_UV_MAP_4 = 0x0703
|
|
CTM_UV_MAP_5 = 0x0704
|
|
CTM_UV_MAP_6 = 0x0705
|
|
CTM_UV_MAP_7 = 0x0706
|
|
CTM_UV_MAP_8 = 0x0707
|
|
CTM_ATTRIB_MAP_1 = 0x0800
|
|
CTM_ATTRIB_MAP_2 = 0x0801
|
|
CTM_ATTRIB_MAP_3 = 0x0802
|
|
CTM_ATTRIB_MAP_4 = 0x0803
|
|
CTM_ATTRIB_MAP_5 = 0x0804
|
|
CTM_ATTRIB_MAP_6 = 0x0805
|
|
CTM_ATTRIB_MAP_7 = 0x0806
|
|
CTM_ATTRIB_MAP_8 = 0x0807
|
|
|
|
# Load the OpenCTM shared library
|
|
if os.name == 'nt':
|
|
_lib = WinDLL('openctm.dll')
|
|
else:
|
|
_libName = find_library('openctm')
|
|
if not _libName:
|
|
raise Exception('Could not find the OpenCTM shared library.')
|
|
_lib = CDLL(_libName)
|
|
if not _lib:
|
|
raise Exception('Could not open the OpenCTM shared library.')
|
|
|
|
# Functions
|
|
ctmNewContext = _lib.ctmNewContext
|
|
ctmNewContext.argtypes = [CTMenum]
|
|
ctmNewContext.restype = CTMcontext
|
|
|
|
ctmFreeContext = _lib.ctmFreeContext
|
|
ctmFreeContext.argtypes = [CTMcontext]
|
|
|
|
ctmGetError = _lib.ctmGetError
|
|
ctmGetError.argtypes = [CTMcontext]
|
|
ctmGetError.restype = CTMenum
|
|
|
|
ctmErrorString = _lib.ctmErrorString
|
|
ctmErrorString.argtypes = [CTMenum]
|
|
ctmErrorString.restype = c_char_p
|
|
|
|
ctmGetInteger = _lib.ctmGetInteger
|
|
ctmGetInteger.argtypes = [CTMcontext, CTMenum]
|
|
ctmGetInteger.restype = CTMint
|
|
|
|
ctmGetFloat = _lib.ctmGetFloat
|
|
ctmGetFloat.argtypes = [CTMcontext, CTMenum]
|
|
ctmGetFloat.restype = CTMfloat
|
|
|
|
ctmGetIntegerArray = _lib.ctmGetIntegerArray
|
|
ctmGetIntegerArray.argtypes = [CTMcontext, CTMenum]
|
|
ctmGetIntegerArray.restype = POINTER(CTMuint)
|
|
|
|
ctmGetFloatArray = _lib.ctmGetFloatArray
|
|
ctmGetFloatArray.argtypes = [CTMcontext, CTMenum]
|
|
ctmGetFloatArray.restype = POINTER(CTMfloat)
|
|
|
|
ctmGetNamedUVMap = _lib.ctmGetNamedUVMap
|
|
ctmGetNamedUVMap.argtypes = [CTMcontext, c_char_p]
|
|
ctmGetNamedUVMap.restype = CTMenum
|
|
|
|
ctmGetUVMapString = _lib.ctmGetUVMapString
|
|
ctmGetUVMapString.argtypes = [CTMcontext, CTMenum, CTMenum]
|
|
ctmGetUVMapString.restype = c_char_p
|
|
|
|
ctmGetUVMapFloat = _lib.ctmGetUVMapFloat
|
|
ctmGetUVMapFloat.argtypes = [CTMcontext, CTMenum, CTMenum]
|
|
ctmGetUVMapFloat.restype = CTMfloat
|
|
|
|
ctmGetNamedAttribMap = _lib.ctmGetNamedAttribMap
|
|
ctmGetNamedAttribMap.argtypes = [CTMcontext, c_char_p]
|
|
ctmGetNamedAttribMap.restype = CTMenum
|
|
|
|
ctmGetAttribMapString = _lib.ctmGetAttribMapString
|
|
ctmGetAttribMapString.argtypes = [CTMcontext, CTMenum, CTMenum]
|
|
ctmGetAttribMapString.restype = c_char_p
|
|
|
|
ctmGetAttribMapFloat = _lib.ctmGetAttribMapFloat
|
|
ctmGetAttribMapFloat.argtypes = [CTMcontext, CTMenum, CTMenum]
|
|
ctmGetAttribMapFloat.restype = CTMfloat
|
|
|
|
ctmGetString = _lib.ctmGetString
|
|
ctmGetString.argtypes = [CTMcontext, CTMenum]
|
|
ctmGetString.restype = c_char_p
|
|
|
|
ctmCompressionMethod = _lib.ctmCompressionMethod
|
|
ctmCompressionMethod.argtypes = [CTMcontext, CTMenum]
|
|
|
|
ctmCompressionLevel = _lib.ctmCompressionLevel
|
|
ctmCompressionLevel.argtypes = [CTMcontext, CTMuint]
|
|
|
|
ctmVertexPrecision = _lib.ctmVertexPrecision
|
|
ctmVertexPrecision.argtypes = [CTMcontext, CTMfloat]
|
|
|
|
ctmVertexPrecisionRel = _lib.ctmVertexPrecisionRel
|
|
ctmVertexPrecisionRel.argtypes = [CTMcontext, CTMfloat]
|
|
|
|
ctmNormalPrecision = _lib.ctmNormalPrecision
|
|
ctmNormalPrecision.argtypes = [CTMcontext, CTMfloat]
|
|
|
|
ctmUVCoordPrecision = _lib.ctmUVCoordPrecision
|
|
ctmUVCoordPrecision.argtypes = [CTMcontext, CTMenum, CTMfloat]
|
|
|
|
ctmAttribPrecision = _lib.ctmAttribPrecision
|
|
ctmAttribPrecision.argtypes = [CTMcontext, CTMenum, CTMfloat]
|
|
|
|
ctmFileComment = _lib.ctmFileComment
|
|
ctmFileComment.argtypes = [CTMcontext, c_char_p]
|
|
|
|
ctmDefineMesh = _lib.ctmDefineMesh
|
|
ctmDefineMesh.argtypes = [CTMcontext, POINTER(CTMfloat), CTMuint, POINTER(CTMuint), CTMuint, POINTER(CTMfloat)]
|
|
|
|
ctmAddUVMap = _lib.ctmAddUVMap
|
|
ctmAddUVMap.argtypes = [CTMcontext, POINTER(CTMfloat), c_char_p, c_char_p]
|
|
ctmAddUVMap.restype = CTMenum
|
|
|
|
ctmAddAttribMap = _lib.ctmAddAttribMap
|
|
ctmAddAttribMap.argtypes = [CTMcontext, POINTER(CTMfloat), c_char_p]
|
|
ctmAddAttribMap.restype = CTMenum
|
|
|
|
ctmLoad = _lib.ctmLoad
|
|
ctmLoad.argtypes = [CTMcontext, c_char_p]
|
|
|
|
ctmSave = _lib.ctmSave
|
|
ctmSave.argtypes = [CTMcontext, c_char_p]
|