Asynchronous streaming and memory management improvements in progress.
--HG-- branch : async_streaming
This commit is contained in:
@@ -73,6 +73,10 @@
|
|||||||
E43B0AD715DDCA0F00A5CB9F /* KRContextObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E43B0AD415DDCA0C00A5CB9F /* KRContextObject.cpp */; };
|
E43B0AD715DDCA0F00A5CB9F /* KRContextObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E43B0AD415DDCA0C00A5CB9F /* KRContextObject.cpp */; };
|
||||||
E43B0AD815DDCA0F00A5CB9F /* KRContextObject.h in Headers */ = {isa = PBXBuildFile; fileRef = E43B0AD515DDCA0D00A5CB9F /* KRContextObject.h */; settings = {ATTRIBUTES = (); }; };
|
E43B0AD815DDCA0F00A5CB9F /* KRContextObject.h in Headers */ = {isa = PBXBuildFile; fileRef = E43B0AD515DDCA0D00A5CB9F /* KRContextObject.h */; settings = {ATTRIBUTES = (); }; };
|
||||||
E43B0AD915DDCA0F00A5CB9F /* KRContextObject.h in Headers */ = {isa = PBXBuildFile; fileRef = E43B0AD515DDCA0D00A5CB9F /* KRContextObject.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
E43B0AD915DDCA0F00A5CB9F /* KRContextObject.h in Headers */ = {isa = PBXBuildFile; fileRef = E43B0AD515DDCA0D00A5CB9F /* KRContextObject.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
|
E43F70DC181B20E400136169 /* KRLODSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E43F70DA181B20E300136169 /* KRLODSet.cpp */; };
|
||||||
|
E43F70DD181B20E400136169 /* KRLODSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E43F70DA181B20E300136169 /* KRLODSet.cpp */; };
|
||||||
|
E43F70DE181B20E400136169 /* KRLODSet.h in Headers */ = {isa = PBXBuildFile; fileRef = E43F70DB181B20E400136169 /* KRLODSet.h */; };
|
||||||
|
E43F70DF181B20E400136169 /* KRLODSet.h in Headers */ = {isa = PBXBuildFile; fileRef = E43F70DB181B20E400136169 /* KRLODSet.h */; };
|
||||||
E4409D2916FA748700310F76 /* font.tga in Resources */ = {isa = PBXBuildFile; fileRef = E41AE1DD16B124CA00980428 /* font.tga */; };
|
E4409D2916FA748700310F76 /* font.tga in Resources */ = {isa = PBXBuildFile; fileRef = E41AE1DD16B124CA00980428 /* font.tga */; };
|
||||||
E44F38241683B23000399B5D /* KRRenderSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = E44F38231683B22C00399B5D /* KRRenderSettings.h */; settings = {ATTRIBUTES = (); }; };
|
E44F38241683B23000399B5D /* KRRenderSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = E44F38231683B22C00399B5D /* KRRenderSettings.h */; settings = {ATTRIBUTES = (); }; };
|
||||||
E44F38251683B23000399B5D /* KRRenderSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = E44F38231683B22C00399B5D /* KRRenderSettings.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
E44F38251683B23000399B5D /* KRRenderSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = E44F38231683B22C00399B5D /* KRRenderSettings.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
@@ -423,6 +427,8 @@
|
|||||||
E437849716C488360037FD43 /* hrtf_kemar.krbundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = hrtf_kemar.krbundle; sourceTree = "<group>"; };
|
E437849716C488360037FD43 /* hrtf_kemar.krbundle */ = {isa = PBXFileReference; lastKnownFileType = file; path = hrtf_kemar.krbundle; sourceTree = "<group>"; };
|
||||||
E43B0AD415DDCA0C00A5CB9F /* KRContextObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KRContextObject.cpp; sourceTree = "<group>"; };
|
E43B0AD415DDCA0C00A5CB9F /* KRContextObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KRContextObject.cpp; sourceTree = "<group>"; };
|
||||||
E43B0AD515DDCA0D00A5CB9F /* KRContextObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KRContextObject.h; sourceTree = "<group>"; };
|
E43B0AD515DDCA0D00A5CB9F /* KRContextObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KRContextObject.h; sourceTree = "<group>"; };
|
||||||
|
E43F70DA181B20E300136169 /* KRLODSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KRLODSet.cpp; sourceTree = "<group>"; };
|
||||||
|
E43F70DB181B20E400136169 /* KRLODSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KRLODSet.h; sourceTree = "<group>"; };
|
||||||
E44F38231683B22C00399B5D /* KRRenderSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KRRenderSettings.h; sourceTree = "<group>"; };
|
E44F38231683B22C00399B5D /* KRRenderSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KRRenderSettings.h; sourceTree = "<group>"; };
|
||||||
E44F38271683B24400399B5D /* KRRenderSettings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KRRenderSettings.cpp; sourceTree = "<group>"; };
|
E44F38271683B24400399B5D /* KRRenderSettings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KRRenderSettings.cpp; sourceTree = "<group>"; };
|
||||||
E450273716E0491D00FDEC5C /* KRReverbZone.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = KRReverbZone.cpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
|
E450273716E0491D00FDEC5C /* KRReverbZone.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = KRReverbZone.cpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
|
||||||
@@ -979,6 +985,8 @@
|
|||||||
E4AE635C1704FB0A00B460CD /* KRLODGroup.h */,
|
E4AE635C1704FB0A00B460CD /* KRLODGroup.h */,
|
||||||
E468447D17FFDF51001F1FA1 /* KRLocator.cpp */,
|
E468447D17FFDF51001F1FA1 /* KRLocator.cpp */,
|
||||||
E468447E17FFDF51001F1FA1 /* KRLocator.h */,
|
E468447E17FFDF51001F1FA1 /* KRLocator.h */,
|
||||||
|
E43F70DA181B20E300136169 /* KRLODSet.cpp */,
|
||||||
|
E43F70DB181B20E400136169 /* KRLODSet.h */,
|
||||||
);
|
);
|
||||||
name = "Scene Graph Nodes";
|
name = "Scene Graph Nodes";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -1188,6 +1196,7 @@
|
|||||||
isa = PBXHeadersBuildPhase;
|
isa = PBXHeadersBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
E43F70DE181B20E400136169 /* KRLODSet.h in Headers */,
|
||||||
E491019513C99BDC0098455B /* KRMaterial.h in Headers */,
|
E491019513C99BDC0098455B /* KRMaterial.h in Headers */,
|
||||||
E491019C13C99BDC0098455B /* KRMaterialManager.h in Headers */,
|
E491019C13C99BDC0098455B /* KRMaterialManager.h in Headers */,
|
||||||
E491019D13C99BDC0098455B /* KRTextureManager.h in Headers */,
|
E491019D13C99BDC0098455B /* KRTextureManager.h in Headers */,
|
||||||
@@ -1299,6 +1308,7 @@
|
|||||||
E428C312166971FF00A16EDF /* KRAnimationLayer.h in Headers */,
|
E428C312166971FF00A16EDF /* KRAnimationLayer.h in Headers */,
|
||||||
E4AFC6B615F7C46800DDB4C8 /* KRAABB.cpp in Headers */,
|
E4AFC6B615F7C46800DDB4C8 /* KRAABB.cpp in Headers */,
|
||||||
E428C3171669A24B00A16EDF /* KRAnimationAttribute.h in Headers */,
|
E428C3171669A24B00A16EDF /* KRAnimationAttribute.h in Headers */,
|
||||||
|
E43F70DF181B20E400136169 /* KRLODSet.h in Headers */,
|
||||||
E4AFC6BE15F7C9E600DDB4C8 /* KROctreeNode.h in Headers */,
|
E4AFC6BE15F7C9E600DDB4C8 /* KROctreeNode.h in Headers */,
|
||||||
E4AFC6BD15F7C9DA00DDB4C8 /* KROctree.h in Headers */,
|
E4AFC6BD15F7C9DA00DDB4C8 /* KROctree.h in Headers */,
|
||||||
E46A6B701559EF0A000DBD37 /* KRResource+blend.h in Headers */,
|
E46A6B701559EF0A000DBD37 /* KRResource+blend.h in Headers */,
|
||||||
@@ -1546,6 +1556,7 @@
|
|||||||
E491019A13C99BDC0098455B /* KRMeshManager.cpp in Sources */,
|
E491019A13C99BDC0098455B /* KRMeshManager.cpp in Sources */,
|
||||||
E47C25A713F4F6AB00FF4370 /* KRShaderManager.cpp in Sources */,
|
E47C25A713F4F6AB00FF4370 /* KRShaderManager.cpp in Sources */,
|
||||||
E47C25A913F4F6DD00FF4370 /* KRShader.cpp in Sources */,
|
E47C25A913F4F6DD00FF4370 /* KRShader.cpp in Sources */,
|
||||||
|
E43F70DC181B20E400136169 /* KRLODSet.cpp in Sources */,
|
||||||
E414BAE51435558900A668C4 /* KRModel.cpp in Sources */,
|
E414BAE51435558900A668C4 /* KRModel.cpp in Sources */,
|
||||||
E414BAE91435585A00A668C4 /* KRScene.cpp in Sources */,
|
E414BAE91435585A00A668C4 /* KRScene.cpp in Sources */,
|
||||||
E48B3CC014393E30000C50E2 /* KRCamera.cpp in Sources */,
|
E48B3CC014393E30000C50E2 /* KRCamera.cpp in Sources */,
|
||||||
@@ -1648,6 +1659,7 @@
|
|||||||
E40BA45515EFF79500D7C3DD /* KRAABB.cpp in Sources */,
|
E40BA45515EFF79500D7C3DD /* KRAABB.cpp in Sources */,
|
||||||
E488399515F928CA00BD66D5 /* KRBundle.cpp in Sources */,
|
E488399515F928CA00BD66D5 /* KRBundle.cpp in Sources */,
|
||||||
E488399D15F92BE000BD66D5 /* KRBundleManager.cpp in Sources */,
|
E488399D15F92BE000BD66D5 /* KRBundleManager.cpp in Sources */,
|
||||||
|
E43F70DD181B20E400136169 /* KRLODSet.cpp in Sources */,
|
||||||
E4B175AD161F5A1000B8FB80 /* KRTexture.cpp in Sources */,
|
E4B175AD161F5A1000B8FB80 /* KRTexture.cpp in Sources */,
|
||||||
E4B175B3161F5FAF00B8FB80 /* KRTextureCube.cpp in Sources */,
|
E4B175B3161F5FAF00B8FB80 /* KRTextureCube.cpp in Sources */,
|
||||||
E4CA10EA1637BD2B005D9400 /* KRTexturePVR.cpp in Sources */,
|
E4CA10EA1637BD2B005D9400 /* KRTexturePVR.cpp in Sources */,
|
||||||
@@ -1713,22 +1725,21 @@
|
|||||||
E491016913C99B9E0098455B /* Debug */ = {
|
E491016913C99B9E0098455B /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
|
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
|
CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = c11;
|
||||||
GCC_OPTIMIZATION_LEVEL = 0;
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
|
GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
|
||||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||||
GCC_UNROLL_LOOPS = YES;
|
GCC_UNROLL_LOOPS = YES;
|
||||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
GCC_VERSION = "";
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
HEADER_SEARCH_PATHS = (
|
HEADER_SEARCH_PATHS = (
|
||||||
/usr/local/include,
|
/usr/local/include,
|
||||||
"$(SRCROOT)/3rdparty/**",
|
"$(SRCROOT)/3rdparty/**",
|
||||||
);
|
);
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 5.1;
|
|
||||||
LLVM_VECTORIZE_LOOPS = YES;
|
LLVM_VECTORIZE_LOOPS = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.6;
|
MACOSX_DEPLOYMENT_TARGET = 10.6;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
@@ -1739,20 +1750,19 @@
|
|||||||
E491016A13C99B9E0098455B /* Release */ = {
|
E491016A13C99B9E0098455B /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
|
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
|
CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = c11;
|
||||||
GCC_OPTIMIZATION_LEVEL = fast;
|
GCC_OPTIMIZATION_LEVEL = fast;
|
||||||
GCC_UNROLL_LOOPS = YES;
|
GCC_UNROLL_LOOPS = YES;
|
||||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
GCC_VERSION = "";
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
HEADER_SEARCH_PATHS = (
|
HEADER_SEARCH_PATHS = (
|
||||||
/usr/local/include,
|
/usr/local/include,
|
||||||
"$(SRCROOT)/3rdparty/**",
|
"$(SRCROOT)/3rdparty/**",
|
||||||
);
|
);
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 5.1;
|
|
||||||
LLVM_VECTORIZE_LOOPS = YES;
|
LLVM_VECTORIZE_LOOPS = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.6;
|
MACOSX_DEPLOYMENT_TARGET = 10.6;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
@@ -1772,7 +1782,6 @@
|
|||||||
);
|
);
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
GCC_PREFIX_HEADER = "kraken_ios/Kraken-Prefix.pch";
|
GCC_PREFIX_HEADER = "kraken_ios/Kraken-Prefix.pch";
|
||||||
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
|
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
|
||||||
LIBRARY_SEARCH_PATHS = (
|
LIBRARY_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
@@ -1781,7 +1790,6 @@
|
|||||||
OTHER_LDFLAGS = "-ObjC";
|
OTHER_LDFLAGS = "-ObjC";
|
||||||
PRODUCT_NAME = kraken;
|
PRODUCT_NAME = kraken;
|
||||||
SHARED_PRECOMPS_DIR = "$(CACHE_ROOT)/SharedPrecompiledHeaders";
|
SHARED_PRECOMPS_DIR = "$(CACHE_ROOT)/SharedPrecompiledHeaders";
|
||||||
SKIP_INSTALL = YES;
|
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
@@ -1798,7 +1806,6 @@
|
|||||||
);
|
);
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
GCC_PREFIX_HEADER = "kraken_ios/Kraken-Prefix.pch";
|
GCC_PREFIX_HEADER = "kraken_ios/Kraken-Prefix.pch";
|
||||||
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
|
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
|
||||||
LIBRARY_SEARCH_PATHS = (
|
LIBRARY_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
@@ -1807,7 +1814,6 @@
|
|||||||
OTHER_LDFLAGS = "-ObjC";
|
OTHER_LDFLAGS = "-ObjC";
|
||||||
PRODUCT_NAME = kraken;
|
PRODUCT_NAME = kraken;
|
||||||
SHARED_PRECOMPS_DIR = "$(CACHE_ROOT)/SharedPrecompiledHeaders";
|
SHARED_PRECOMPS_DIR = "$(CACHE_ROOT)/SharedPrecompiledHeaders";
|
||||||
SKIP_INSTALL = YES;
|
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ KRDataBlock::KRDataBlock() {
|
|||||||
m_data_size = 0;
|
m_data_size = 0;
|
||||||
m_data_offset = 0;
|
m_data_offset = 0;
|
||||||
m_fdPackFile = 0;
|
m_fdPackFile = 0;
|
||||||
|
m_fileName = "";
|
||||||
m_mmapData = NULL;
|
m_mmapData = NULL;
|
||||||
m_fileOwnerDataBlock = NULL;
|
m_fileOwnerDataBlock = NULL;
|
||||||
m_bMalloced = false;
|
m_bMalloced = false;
|
||||||
@@ -68,6 +69,7 @@ void KRDataBlock::unload()
|
|||||||
m_data_size = 0;
|
m_data_size = 0;
|
||||||
m_data_offset = 0;
|
m_data_offset = 0;
|
||||||
m_fdPackFile = 0;
|
m_fdPackFile = 0;
|
||||||
|
m_fileName = "";
|
||||||
m_mmapData = NULL;
|
m_mmapData = NULL;
|
||||||
m_fileOwnerDataBlock = NULL;
|
m_fileOwnerDataBlock = NULL;
|
||||||
m_bReadOnly = false;
|
m_bReadOnly = false;
|
||||||
@@ -95,6 +97,7 @@ bool KRDataBlock::load(const std::string &path)
|
|||||||
m_fdPackFile = open(path.c_str(), O_RDONLY);
|
m_fdPackFile = open(path.c_str(), O_RDONLY);
|
||||||
if(m_fdPackFile >= 0) {
|
if(m_fdPackFile >= 0) {
|
||||||
m_fileOwnerDataBlock = this;
|
m_fileOwnerDataBlock = this;
|
||||||
|
m_fileName = path;
|
||||||
if(fstat(m_fdPackFile, &statbuf) >= 0) {
|
if(fstat(m_fdPackFile, &statbuf) >= 0) {
|
||||||
m_data_size = statbuf.st_size;
|
m_data_size = statbuf.st_size;
|
||||||
m_data_offset = 0;
|
m_data_offset = 0;
|
||||||
@@ -117,9 +120,9 @@ KRDataBlock *KRDataBlock::getSubBlock(int start, int length)
|
|||||||
if(m_fdPackFile) {
|
if(m_fdPackFile) {
|
||||||
new_block->m_fdPackFile = m_fdPackFile;
|
new_block->m_fdPackFile = m_fdPackFile;
|
||||||
new_block->m_fileOwnerDataBlock = m_fileOwnerDataBlock;
|
new_block->m_fileOwnerDataBlock = m_fileOwnerDataBlock;
|
||||||
new_block->m_data_offset = start;
|
new_block->m_data_offset = start + m_data_offset;
|
||||||
} else if(m_bMalloced) {
|
} else if(m_bMalloced) {
|
||||||
new_block->m_data = (unsigned char *)m_data + start;
|
new_block->m_data = (unsigned char *)m_data + start + m_data_offset;
|
||||||
}
|
}
|
||||||
new_block->m_bReadOnly = true;
|
new_block->m_bReadOnly = true;
|
||||||
return new_block;
|
return new_block;
|
||||||
@@ -189,17 +192,21 @@ void KRDataBlock::append(void *data, size_t size) {
|
|||||||
|
|
||||||
// Copy the entire data block to the destination pointer
|
// Copy the entire data block to the destination pointer
|
||||||
void KRDataBlock::copy(void *dest) {
|
void KRDataBlock::copy(void *dest) {
|
||||||
lock();
|
copy(dest, 0, m_data_size);
|
||||||
memcpy((unsigned char *)dest, m_data, m_data_size);
|
|
||||||
unlock();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy a range of data to the destination pointer
|
// Copy a range of data to the destination pointer
|
||||||
void KRDataBlock::copy(void *dest, int start, int count) {
|
void KRDataBlock::copy(void *dest, int start, int count) {
|
||||||
|
if(m_lockCount == 0 && m_fdPackFile != 0) {
|
||||||
|
// Optimization: If we haven't mmap'ed or malloced the data already, pread() it directly from the file into the buffer
|
||||||
|
ssize_t r = pread(m_fdPackFile, dest, count, start + m_data_offset);
|
||||||
|
assert(r != -1);
|
||||||
|
} else {
|
||||||
lock();
|
lock();
|
||||||
memcpy((unsigned char *)dest, (unsigned char *)m_data + start, count);
|
memcpy((unsigned char *)dest, (unsigned char *)m_data + start, count);
|
||||||
unlock();
|
unlock();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Append data to the end of the block, increasing the size of the block and making it read-write.
|
// Append data to the end of the block, increasing the size of the block and making it read-write.
|
||||||
void KRDataBlock::append(KRDataBlock &data) {
|
void KRDataBlock::append(KRDataBlock &data) {
|
||||||
@@ -249,25 +256,26 @@ bool KRDataBlock::save(const std::string& path) {
|
|||||||
// Get contents as a string
|
// Get contents as a string
|
||||||
std::string KRDataBlock::getString()
|
std::string KRDataBlock::getString()
|
||||||
{
|
{
|
||||||
lock();
|
|
||||||
KRDataBlock b;
|
KRDataBlock b;
|
||||||
b.append(*this);
|
b.append(*this);
|
||||||
b.append((void *)"\0", 1); // Ensure data is null terminated, to read as a string safely
|
b.append((void *)"\0", 1); // Ensure data is null terminated, to read as a string safely
|
||||||
b.lock();
|
b.lock();
|
||||||
std::string ret = std::string((char *)b.getStart());
|
std::string ret = std::string((char *)b.getStart());
|
||||||
b.unlock();
|
b.unlock();
|
||||||
unlock();
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Lock the memory, forcing it to be loaded into a contiguous block of address space
|
// Lock the memory, forcing it to be loaded into a contiguous block of address space
|
||||||
void KRDataBlock::lock()
|
void KRDataBlock::lock()
|
||||||
{
|
{
|
||||||
|
|
||||||
m_lockCount++;
|
m_lockCount++;
|
||||||
if(m_lockCount == 1) {
|
if(m_lockCount == 1) {
|
||||||
|
|
||||||
// Memory mapped file; ensure data is mapped to ram
|
// Memory mapped file; ensure data is mapped to ram
|
||||||
if(m_fdPackFile) {
|
if(m_fdPackFile) {
|
||||||
|
fprintf(stderr, "KRDataBlock::lock - \"%s\" (%i)\n", m_fileOwnerDataBlock->m_fileName.c_str(), m_lockCount);
|
||||||
|
|
||||||
// Round m_data_offset down to the next memory page, as required by mmap
|
// Round m_data_offset down to the next memory page, as required by mmap
|
||||||
size_t alignment_offset = m_data_offset & (KRAKEN_MEM_PAGE_SIZE - 1);
|
size_t alignment_offset = m_data_offset & (KRAKEN_MEM_PAGE_SIZE - 1);
|
||||||
if ((m_mmapData = mmap(0, m_data_size + alignment_offset, m_bReadOnly ? PROT_READ : PROT_WRITE, MAP_SHARED, m_fdPackFile, m_data_offset - alignment_offset)) == (caddr_t) -1) {
|
if ((m_mmapData = mmap(0, m_data_size + alignment_offset, m_bReadOnly ? PROT_READ : PROT_WRITE, MAP_SHARED, m_fdPackFile, m_data_offset - alignment_offset)) == (caddr_t) -1) {
|
||||||
@@ -290,6 +298,8 @@ void KRDataBlock::unlock()
|
|||||||
|
|
||||||
// Memory mapped file; ensure data is unmapped from ram
|
// Memory mapped file; ensure data is unmapped from ram
|
||||||
if(m_fdPackFile) {
|
if(m_fdPackFile) {
|
||||||
|
fprintf(stderr, "KRDataBlock::unlock - \"%s\" (%i)\n", m_fileOwnerDataBlock->m_fileName.c_str(), m_lockCount);
|
||||||
|
|
||||||
munmap(m_mmapData, m_data_size);
|
munmap(m_mmapData, m_data_size);
|
||||||
m_data = NULL;
|
m_data = NULL;
|
||||||
m_mmapData = NULL;
|
m_mmapData = NULL;
|
||||||
|
|||||||
@@ -97,6 +97,7 @@ private:
|
|||||||
|
|
||||||
// For memory mapped objects:
|
// For memory mapped objects:
|
||||||
int m_fdPackFile;
|
int m_fdPackFile;
|
||||||
|
std::string m_fileName;
|
||||||
KRDataBlock *m_fileOwnerDataBlock;
|
KRDataBlock *m_fileOwnerDataBlock;
|
||||||
void *m_mmapData;
|
void *m_mmapData;
|
||||||
|
|
||||||
@@ -111,6 +112,7 @@ private:
|
|||||||
|
|
||||||
// Assert if not locked
|
// Assert if not locked
|
||||||
void assertLocked();
|
void assertLocked();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -425,7 +425,7 @@ void kraken::set_debug_text(const std::string &print_text)
|
|||||||
[self getAmbientIntensity],
|
[self getAmbientIntensity],
|
||||||
[self getSunTemperature],
|
[self getSunTemperature],
|
||||||
[self getSunIntensity],
|
[self getSunIntensity],
|
||||||
_settings.dof_quality,
|
static_cast<float>(_settings.dof_quality),
|
||||||
_settings.dof_depth,
|
_settings.dof_depth,
|
||||||
_settings.dof_falloff,
|
_settings.dof_falloff,
|
||||||
_settings.bEnableFlash ? 1.0f : 0.0f,
|
_settings.bEnableFlash ? 1.0f : 0.0f,
|
||||||
@@ -445,26 +445,26 @@ void kraken::set_debug_text(const std::string &print_text)
|
|||||||
_settings.bEnableDeferredLighting ? 1.0f : 0.0f,
|
_settings.bEnableDeferredLighting ? 1.0f : 0.0f,
|
||||||
_settings.getPerspectiveNearZ(),
|
_settings.getPerspectiveNearZ(),
|
||||||
_settings.getPerspectiveFarZ(),
|
_settings.getPerspectiveFarZ(),
|
||||||
_settings.volumetric_environment_enable,
|
static_cast<float>(_settings.volumetric_environment_enable),
|
||||||
5 - _settings.volumetric_environment_downsample,
|
static_cast<float>(5 - _settings.volumetric_environment_downsample),
|
||||||
_settings.volumetric_environment_max_distance,
|
_settings.volumetric_environment_max_distance,
|
||||||
_settings.volumetric_environment_quality,
|
_settings.volumetric_environment_quality,
|
||||||
_settings.volumetric_environment_intensity,
|
_settings.volumetric_environment_intensity,
|
||||||
_settings.fog_type,
|
static_cast<float>(_settings.fog_type),
|
||||||
_settings.fog_near,
|
_settings.fog_near,
|
||||||
_settings.fog_far,
|
_settings.fog_far,
|
||||||
_settings.fog_density,
|
_settings.fog_density,
|
||||||
_settings.fog_color.x,
|
_settings.fog_color.x,
|
||||||
_settings.fog_color.y,
|
_settings.fog_color.y,
|
||||||
_settings.fog_color.z,
|
_settings.fog_color.z,
|
||||||
_settings.dust_particle_enable,
|
static_cast<float>(_settings.dust_particle_enable),
|
||||||
_settings.dust_particle_intensity,
|
_settings.dust_particle_intensity,
|
||||||
_settings.getLODBias(),
|
_settings.getLODBias(),
|
||||||
_settings.getEnableRealtimeOcclusion(),
|
static_cast<float>(_settings.getEnableRealtimeOcclusion()),
|
||||||
_settings.debug_display,
|
_settings.debug_display,
|
||||||
_settings.siren_enable,
|
static_cast<float>(_settings.siren_enable),
|
||||||
_settings.siren_enable_reverb,
|
static_cast<float>(_settings.siren_enable_reverb),
|
||||||
_settings.siren_enable_hrtf,
|
static_cast<float>(_settings.siren_enable_hrtf),
|
||||||
_settings.siren_reverb_max_length,
|
_settings.siren_reverb_max_length,
|
||||||
_settings.max_anisotropy
|
_settings.max_anisotropy
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
|
|
||||||
#include "KRResource.h"
|
#include "KRResource.h"
|
||||||
#include "KRNode.h"
|
#include "KRNode.h"
|
||||||
#include "KRTexture.h"
|
|
||||||
|
|
||||||
class KRLODGroup : public KRNode {
|
class KRLODGroup : public KRNode {
|
||||||
public:
|
public:
|
||||||
|
|||||||
35
KREngine/kraken/KRLODSet.cpp
Normal file
35
KREngine/kraken/KRLODSet.cpp
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
//
|
||||||
|
// KRLODSet.cpp
|
||||||
|
// KREngine
|
||||||
|
//
|
||||||
|
// Created by Kearwood Gilbert on 2012-12-06.
|
||||||
|
// Copyright (c) 2012 Kearwood Software. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "KRLODSet.h"
|
||||||
|
#include "KRContext.h"
|
||||||
|
|
||||||
|
KRLODSet::KRLODSet(KRScene &scene, std::string name) : KRNode(scene, name)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
KRLODSet::~KRLODSet()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string KRLODSet::getElementName() {
|
||||||
|
return "lod_set";
|
||||||
|
}
|
||||||
|
|
||||||
|
tinyxml2::XMLElement *KRLODSet::saveXML( tinyxml2::XMLNode *parent)
|
||||||
|
{
|
||||||
|
tinyxml2::XMLElement *e = KRNode::saveXML(parent);
|
||||||
|
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
|
||||||
|
void KRLODSet::loadXML(tinyxml2::XMLElement *e)
|
||||||
|
{
|
||||||
|
KRNode::loadXML(e);
|
||||||
|
}
|
||||||
26
KREngine/kraken/KRLODSet.h
Normal file
26
KREngine/kraken/KRLODSet.h
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
//
|
||||||
|
// KRLODSet
|
||||||
|
// KREngine
|
||||||
|
//
|
||||||
|
// Created by Kearwood Gilbert on 2012-12-06.
|
||||||
|
// Copyright (c) 2012 Kearwood Software. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef KRLODSET_H
|
||||||
|
#define KRLODSET_H
|
||||||
|
|
||||||
|
#include "KRResource.h"
|
||||||
|
#include "KRNode.h"
|
||||||
|
|
||||||
|
class KRLODSet : public KRNode {
|
||||||
|
public:
|
||||||
|
KRLODSet(KRScene &scene, std::string name);
|
||||||
|
virtual ~KRLODSet();
|
||||||
|
virtual std::string getElementName();
|
||||||
|
virtual tinyxml2::XMLElement *saveXML( tinyxml2::XMLNode *parent);
|
||||||
|
virtual void loadXML(tinyxml2::XMLElement *e);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
KRLocator::KRLocator(KRScene &scene, std::string name) : KRNode(scene, name)
|
KRLocator::KRLocator(KRScene &scene, std::string name) : KRNode(scene, name)
|
||||||
{
|
{
|
||||||
setScaleCompensation(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
KRLocator::~KRLocator()
|
KRLocator::~KRLocator()
|
||||||
|
|||||||
@@ -404,11 +404,10 @@ bool KRScene::save(KRDataBlock &data) {
|
|||||||
|
|
||||||
KRScene *KRScene::Load(KRContext &context, const std::string &name, KRDataBlock *data)
|
KRScene *KRScene::Load(KRContext &context, const std::string &name, KRDataBlock *data)
|
||||||
{
|
{
|
||||||
data->append((void *)"\0", 1); // Ensure data is null terminated, to read as a string safely
|
std::string xml_string = data->getString();
|
||||||
|
delete data;
|
||||||
tinyxml2::XMLDocument doc;
|
tinyxml2::XMLDocument doc;
|
||||||
data->lock();
|
doc.Parse(xml_string.c_str());
|
||||||
doc.Parse((char *)data->getStart());
|
|
||||||
data->unlock();
|
|
||||||
KRScene *new_scene = new KRScene(context, name);
|
KRScene *new_scene = new KRScene(context, name);
|
||||||
|
|
||||||
tinyxml2::XMLElement *scene_element = doc.RootElement();
|
tinyxml2::XMLElement *scene_element = doc.RootElement();
|
||||||
@@ -420,7 +419,7 @@ KRScene *KRScene::Load(KRContext &context, const std::string &name, KRDataBlock
|
|||||||
new_scene->getRootNode()->addChild(n);
|
new_scene->getRootNode()->addChild(n);
|
||||||
}
|
}
|
||||||
|
|
||||||
delete data;
|
|
||||||
return new_scene;
|
return new_scene;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,11 +36,9 @@
|
|||||||
KRTexture2D::KRTexture2D(KRContext &context, KRDataBlock *data, std::string name) : KRTexture(context, name) {
|
KRTexture2D::KRTexture2D(KRContext &context, KRDataBlock *data, std::string name) : KRTexture(context, name) {
|
||||||
m_current_lod_max_dim = 0;
|
m_current_lod_max_dim = 0;
|
||||||
m_pData = data;
|
m_pData = data;
|
||||||
m_pData->lock();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
KRTexture2D::~KRTexture2D() {
|
KRTexture2D::~KRTexture2D() {
|
||||||
m_pData->unlock();
|
|
||||||
delete m_pData;
|
delete m_pData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ KRTexturePVR::KRTexturePVR(KRContext &context, KRDataBlock *data, std::string na
|
|||||||
m_iHeight = header->height;
|
m_iHeight = header->height;
|
||||||
m_bHasAlpha = header->bitmaskAlpha;
|
m_bHasAlpha = header->bitmaskAlpha;
|
||||||
|
|
||||||
uint8_t *bytes = ((uint8_t *)m_pData->getStart()) + sizeof(PVRTexHeader);
|
uint32_t dataStart = sizeof(PVRTexHeader);
|
||||||
uint32_t dataLength = header->dataLength, dataOffset = 0, dataSize = 0;
|
uint32_t dataLength = header->dataLength, dataOffset = 0, dataSize = 0;
|
||||||
uint32_t width = m_iWidth, height = m_iHeight, bpp = 4;
|
uint32_t width = m_iWidth, height = m_iHeight, bpp = 4;
|
||||||
uint32_t blockSize = 0, widthBlocks = 0, heightBlocks = 0;
|
uint32_t blockSize = 0, widthBlocks = 0, heightBlocks = 0;
|
||||||
@@ -116,7 +116,7 @@ KRTexturePVR::KRTexturePVR(KRContext &context, KRDataBlock *data, std::string na
|
|||||||
dataSize = widthBlocks * heightBlocks * ((blockSize * bpp) / 8);
|
dataSize = widthBlocks * heightBlocks * ((blockSize * bpp) / 8);
|
||||||
|
|
||||||
dataBlockStruct newBlock;
|
dataBlockStruct newBlock;
|
||||||
newBlock.start = bytes+dataOffset;
|
newBlock.start = dataStart + dataOffset;
|
||||||
newBlock.length = dataSize;
|
newBlock.length = dataSize;
|
||||||
|
|
||||||
m_blocks.push_back(newBlock);
|
m_blocks.push_back(newBlock);
|
||||||
@@ -245,16 +245,20 @@ bool KRTexturePVR::uploadTexture(GLenum target, int lod_max_dim, int ¤t_lo
|
|||||||
GLDEBUG(glCopyTextureLevelsAPPLE(m_iHandle, prev_handle, source_level, 1));
|
GLDEBUG(glCopyTextureLevelsAPPLE(m_iHandle, prev_handle, source_level, 1));
|
||||||
} else {
|
} else {
|
||||||
// glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data);
|
// glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data);
|
||||||
GLDEBUG(glCompressedTexSubImage2D(target, destination_level, 0, 0, width, height, m_internalFormat, block.length, block.start));
|
m_pData->lock();
|
||||||
|
GLDEBUG(glCompressedTexSubImage2D(target, destination_level, 0, 0, width, height, m_internalFormat, block.length, (char *)m_pData->getStart() + block.start));
|
||||||
|
m_pData->unlock();
|
||||||
// GLDEBUG(glCompressedTexImage2D(target, destination_level, m_internalFormat, width, height, 0, block.length, block.start));
|
// GLDEBUG(glCompressedTexImage2D(target, destination_level, m_internalFormat, width, height, 0, block.length, block.start));
|
||||||
memoryTransferred += block.length; // memoryTransferred does not include throughput of mipmap levels copied through glCopyTextureLevelsAPPLE
|
memoryTransferred += block.length; // memoryTransferred does not include throughput of mipmap levels copied through glCopyTextureLevelsAPPLE
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
m_pData->lock();
|
||||||
#if GL_EXT_texture_storage
|
#if GL_EXT_texture_storage
|
||||||
GLDEBUG(glCompressedTexSubImage2D(target, destination_level, 0, 0, width, height, m_internalFormat, block.length, block.start));
|
GLDEBUG(glCompressedTexSubImage2D(target, destination_level, 0, 0, width, height, m_internalFormat, block.length, (char *)m_pData->getStart() + block.start));
|
||||||
#else
|
#else
|
||||||
GLDEBUG(glCompressedTexImage2D(target, destination_level, m_internalFormat, width, height, 0, block.length, block.start));
|
GLDEBUG(glCompressedTexImage2D(target, destination_level, m_internalFormat, width, height, 0, block.length, (char *)m_pData->getStart() + block.start));
|
||||||
#endif
|
#endif
|
||||||
|
m_pData->unlock();
|
||||||
memoryTransferred += block.length; // memoryTransferred does not include throughput of mipmap levels copied through glCopyTextureLevelsAPPLE
|
memoryTransferred += block.length; // memoryTransferred does not include throughput of mipmap levels copied through glCopyTextureLevelsAPPLE
|
||||||
#endif
|
#endif
|
||||||
memoryRequired += block.length;
|
memoryRequired += block.length;
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ protected:
|
|||||||
bool m_bHasAlpha;
|
bool m_bHasAlpha;
|
||||||
|
|
||||||
struct dataBlockStruct {
|
struct dataBlockStruct {
|
||||||
void *start;
|
uint32_t start;
|
||||||
uint32_t length;
|
uint32_t length;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -43,10 +43,12 @@ KRTextureTGA::~KRTextureTGA()
|
|||||||
|
|
||||||
bool KRTextureTGA::uploadTexture(GLenum target, int lod_max_dim, int ¤t_lod_max_dim, long &textureMemUsed, int prev_lod_max_dim, GLuint prev_handle)
|
bool KRTextureTGA::uploadTexture(GLenum target, int lod_max_dim, int ¤t_lod_max_dim, long &textureMemUsed, int prev_lod_max_dim, GLuint prev_handle)
|
||||||
{
|
{
|
||||||
|
m_pData->lock();
|
||||||
TGA_HEADER *pHeader = (TGA_HEADER *)m_pData->getStart();
|
TGA_HEADER *pHeader = (TGA_HEADER *)m_pData->getStart();
|
||||||
unsigned char *pData = (unsigned char *)pHeader + (long)pHeader->idlength + (long)pHeader->colourmaplength * (long)pHeader->colourmaptype + sizeof(TGA_HEADER);
|
unsigned char *pData = (unsigned char *)pHeader + (long)pHeader->idlength + (long)pHeader->colourmaplength * (long)pHeader->colourmaptype + sizeof(TGA_HEADER);
|
||||||
|
|
||||||
if(pHeader->colourmaptype != 0) {
|
if(pHeader->colourmaptype != 0) {
|
||||||
|
m_pData->unlock();
|
||||||
return false; // Mapped colors not supported
|
return false; // Mapped colors not supported
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,6 +80,7 @@ bool KRTextureTGA::uploadTexture(GLenum target, int lod_max_dim, int ¤t_lo
|
|||||||
free(converted_image);
|
free(converted_image);
|
||||||
err = glGetError();
|
err = glGetError();
|
||||||
if (err != GL_NO_ERROR) {
|
if (err != GL_NO_ERROR) {
|
||||||
|
m_pData->unlock();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
int memAllocated = pHeader->width * pHeader->height * 4;
|
int memAllocated = pHeader->width * pHeader->height * 4;
|
||||||
@@ -92,6 +95,7 @@ bool KRTextureTGA::uploadTexture(GLenum target, int lod_max_dim, int ¤t_lo
|
|||||||
glTexImage2D(target, 0, GL_RGBA, pHeader->width, pHeader->height, 0, GL_BGRA, GL_UNSIGNED_BYTE, (GLvoid *)pData);
|
glTexImage2D(target, 0, GL_RGBA, pHeader->width, pHeader->height, 0, GL_BGRA, GL_UNSIGNED_BYTE, (GLvoid *)pData);
|
||||||
err = glGetError();
|
err = glGetError();
|
||||||
if (err != GL_NO_ERROR) {
|
if (err != GL_NO_ERROR) {
|
||||||
|
m_pData->unlock();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
int memAllocated = pHeader->width * pHeader->height * 4;
|
int memAllocated = pHeader->width * pHeader->height * 4;
|
||||||
@@ -102,13 +106,16 @@ bool KRTextureTGA::uploadTexture(GLenum target, int lod_max_dim, int ¤t_lo
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
m_pData->unlock();
|
||||||
return false; // 16-bit images not yet supported
|
return false; // 16-bit images not yet supported
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
m_pData->unlock();
|
||||||
return false; // Image type not yet supported
|
return false; // Image type not yet supported
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_pData->unlock();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user