Implemented KRUnknown and KRUnknownManager to allow applications to use Kraken's resource management functionality for application-specific files.
--HG-- extra : convert_revision : svn%3A7752d6cf-9f14-4ad2-affc-04f1e67b81a5/trunk%40203
This commit is contained in:
@@ -21,6 +21,14 @@
|
||||
E414BAE51435558900A668C4 /* KRInstance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E414BAE41435558800A668C4 /* KRInstance.cpp */; };
|
||||
E414BAE7143557D200A668C4 /* KRScene.h in Headers */ = {isa = PBXBuildFile; fileRef = E414BAE6143557D200A668C4 /* KRScene.h */; };
|
||||
E414BAE91435585A00A668C4 /* KRScene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E414BAE81435585A00A668C4 /* KRScene.cpp */; };
|
||||
E414F9A61694D977000B3D58 /* KRUnknownManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E414F9A41694D977000B3D58 /* KRUnknownManager.cpp */; };
|
||||
E414F9A71694D977000B3D58 /* KRUnknownManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E414F9A41694D977000B3D58 /* KRUnknownManager.cpp */; };
|
||||
E414F9A81694D977000B3D58 /* KRUnknownManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E414F9A51694D977000B3D58 /* KRUnknownManager.h */; };
|
||||
E414F9A91694D977000B3D58 /* KRUnknownManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E414F9A51694D977000B3D58 /* KRUnknownManager.h */; };
|
||||
E414F9AC1694DA37000B3D58 /* KRUnknown.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E414F9AA1694DA37000B3D58 /* KRUnknown.cpp */; };
|
||||
E414F9AD1694DA37000B3D58 /* KRUnknown.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E414F9AA1694DA37000B3D58 /* KRUnknown.cpp */; };
|
||||
E414F9AE1694DA37000B3D58 /* KRUnknown.h in Headers */ = {isa = PBXBuildFile; fileRef = E414F9AB1694DA37000B3D58 /* KRUnknown.h */; };
|
||||
E414F9AF1694DA37000B3D58 /* KRUnknown.h in Headers */ = {isa = PBXBuildFile; fileRef = E414F9AB1694DA37000B3D58 /* KRUnknown.h */; };
|
||||
E416AA9916713749000F6786 /* KRAnimationCurveManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E416AA9816713749000F6786 /* KRAnimationCurveManager.h */; };
|
||||
E416AA9A16713749000F6786 /* KRAnimationCurveManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E416AA9816713749000F6786 /* KRAnimationCurveManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
E416AA9C1671375C000F6786 /* KRAnimationCurveManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E416AA9B1671375C000F6786 /* KRAnimationCurveManager.cpp */; };
|
||||
@@ -259,6 +267,10 @@
|
||||
E414BAE41435558800A668C4 /* KRInstance.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = KRInstance.cpp; path = Classes/KRInstance.cpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
|
||||
E414BAE6143557D200A668C4 /* KRScene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = KRScene.h; path = Classes/KRScene.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
|
||||
E414BAE81435585A00A668C4 /* KRScene.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = KRScene.cpp; path = Classes/KRScene.cpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
|
||||
E414F9A41694D977000B3D58 /* KRUnknownManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = KRUnknownManager.cpp; path = Classes/KRUnknownManager.cpp; sourceTree = "<group>"; };
|
||||
E414F9A51694D977000B3D58 /* KRUnknownManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KRUnknownManager.h; path = Classes/KRUnknownManager.h; sourceTree = "<group>"; };
|
||||
E414F9AA1694DA37000B3D58 /* KRUnknown.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = KRUnknown.cpp; path = Classes/KRUnknown.cpp; sourceTree = "<group>"; };
|
||||
E414F9AB1694DA37000B3D58 /* KRUnknown.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KRUnknown.h; path = Classes/KRUnknown.h; sourceTree = "<group>"; };
|
||||
E416AA9816713749000F6786 /* KRAnimationCurveManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KRAnimationCurveManager.h; path = Classes/KRAnimationCurveManager.h; sourceTree = "<group>"; };
|
||||
E416AA9B1671375C000F6786 /* KRAnimationCurveManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = KRAnimationCurveManager.cpp; path = Classes/KRAnimationCurveManager.cpp; sourceTree = "<group>"; };
|
||||
E41B841D16260C5600C7A771 /* sky_box.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; name = sky_box.fsh; path = Shaders/sky_box.fsh; sourceTree = "<group>"; };
|
||||
@@ -445,6 +457,17 @@
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
E414F9A21694D949000B3D58 /* UnknownManager */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E414F9A41694D977000B3D58 /* KRUnknownManager.cpp */,
|
||||
E414F9A51694D977000B3D58 /* KRUnknownManager.h */,
|
||||
E414F9AA1694DA37000B3D58 /* KRUnknown.cpp */,
|
||||
E414F9AB1694DA37000B3D58 /* KRUnknown.h */,
|
||||
);
|
||||
name = UnknownManager;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E416AA96167136FB000F6786 /* AnimationCurve */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -585,6 +608,7 @@
|
||||
E488399915F92BA300BD66D5 /* Managers */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E414F9A21694D949000B3D58 /* UnknownManager */,
|
||||
E416AA96167136FB000F6786 /* AnimationCurve */,
|
||||
E428C2EF166960ED00A16EDF /* Animation */,
|
||||
E48839AB15F930E200BD66D5 /* Bundle */,
|
||||
@@ -888,6 +912,8 @@
|
||||
E4C454B2167BC04C003586CD /* KRModelSphere.h in Headers */,
|
||||
E4C454B8167BD236003586CD /* KRHitInfo.h in Headers */,
|
||||
E44F38241683B23000399B5D /* KRRenderSettings.h in Headers */,
|
||||
E414F9A81694D977000B3D58 /* KRUnknownManager.h in Headers */,
|
||||
E414F9AE1694DA37000B3D58 /* KRUnknown.h in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -950,6 +976,8 @@
|
||||
E4C454AD167BB8EC003586CD /* KRModelCube.h in Headers */,
|
||||
E4C454B3167BC04C003586CD /* KRModelSphere.h in Headers */,
|
||||
E44F38251683B23000399B5D /* KRRenderSettings.h in Headers */,
|
||||
E414F9A91694D977000B3D58 /* KRUnknownManager.h in Headers */,
|
||||
E414F9AF1694DA37000B3D58 /* KRUnknown.h in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -1088,6 +1116,8 @@
|
||||
E4C454B5167BC05C003586CD /* KRModelSphere.cpp in Sources */,
|
||||
E4C454BB167BD248003586CD /* KRHitInfo.cpp in Sources */,
|
||||
E44F38281683B24800399B5D /* KRRenderSettings.cpp in Sources */,
|
||||
E414F9A61694D977000B3D58 /* KRUnknownManager.cpp in Sources */,
|
||||
E414F9AC1694DA37000B3D58 /* KRUnknown.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -1150,6 +1180,8 @@
|
||||
E4C454B6167BC05C003586CD /* KRModelSphere.cpp in Sources */,
|
||||
E4C454BC167BD248003586CD /* KRHitInfo.cpp in Sources */,
|
||||
E44F38291683B24800399B5D /* KRRenderSettings.cpp in Sources */,
|
||||
E414F9A71694D977000B3D58 /* KRUnknownManager.cpp in Sources */,
|
||||
E414F9AD1694DA37000B3D58 /* KRUnknown.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
||||
@@ -35,6 +35,7 @@ KRContext::KRContext() {
|
||||
m_pSceneManager = new KRSceneManager(*this);
|
||||
m_pAnimationManager = new KRAnimationManager(*this);
|
||||
m_pAnimationCurveManager = new KRAnimationCurveManager(*this);
|
||||
m_pUnknownManager = new KRUnknownManager(*this);
|
||||
m_bDetectedExtensions = false;
|
||||
m_current_frame = 0;
|
||||
m_absolute_time = 0.0f;
|
||||
@@ -77,6 +78,11 @@ KRContext::~KRContext() {
|
||||
m_pAnimationCurveManager = NULL;
|
||||
}
|
||||
|
||||
if(m_pUnknownManager) {
|
||||
delete m_pUnknownManager;
|
||||
m_pUnknownManager = NULL;
|
||||
}
|
||||
|
||||
// The bundles must be destroyed last, as the other objects may be using mmap'ed data from bundles
|
||||
if(m_pBundleManager) {
|
||||
delete m_pBundleManager;
|
||||
@@ -108,6 +114,9 @@ KRAnimationManager *KRContext::getAnimationManager() {
|
||||
KRAnimationCurveManager *KRContext::getAnimationCurveManager() {
|
||||
return m_pAnimationCurveManager;
|
||||
}
|
||||
KRUnknownManager *KRContext::getUnknownManager() {
|
||||
return m_pUnknownManager;
|
||||
}
|
||||
|
||||
void KRContext::loadResource(const std::string &file_name, KRDataBlock *data) {
|
||||
std::string name = KRResource::GetFileBase(file_name);
|
||||
@@ -136,7 +145,7 @@ void KRContext::loadResource(const std::string &file_name, KRDataBlock *data) {
|
||||
} else if(extension.compare("mtl") == 0) {
|
||||
m_pMaterialManager->load(name.c_str(), data);
|
||||
} else {
|
||||
fprintf(stderr, "KRContext::loadResource - Unknown resource file type: %s\n", file_name.c_str());
|
||||
m_pUnknownManager->load(name, extension, data);
|
||||
delete data;
|
||||
}
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#import "KRModelManager.h"
|
||||
#import "KRAnimationManager.h"
|
||||
#import "KRAnimationCurveManager.h"
|
||||
#import "KRUnknownManager.h"
|
||||
|
||||
class KRContext {
|
||||
public:
|
||||
@@ -47,6 +48,7 @@ public:
|
||||
KRModelManager *getModelManager();
|
||||
KRAnimationManager *getAnimationManager();
|
||||
KRAnimationCurveManager *getAnimationCurveManager();
|
||||
KRUnknownManager *getUnknownManager();
|
||||
|
||||
KRCamera *createCamera(int width, int height);
|
||||
|
||||
@@ -74,6 +76,7 @@ private:
|
||||
KRModelManager *m_pModelManager;
|
||||
KRAnimationManager *m_pAnimationManager;
|
||||
KRAnimationCurveManager *m_pAnimationCurveManager;
|
||||
KRUnknownManager *m_pUnknownManager;
|
||||
|
||||
void detectExtensions();
|
||||
bool m_bDetectedExtensions;
|
||||
|
||||
42
KREngine/KREngine/Classes/KRUnknown.cpp
Normal file
42
KREngine/KREngine/Classes/KRUnknown.cpp
Normal file
@@ -0,0 +1,42 @@
|
||||
//
|
||||
// KRUnknown.cpp
|
||||
// KREngine
|
||||
//
|
||||
// Created by Kearwood Gilbert on 2013-01-02.
|
||||
// Copyright (c) 2013 Kearwood Software. All rights reserved.
|
||||
//
|
||||
|
||||
#include "KRUnknown.h"
|
||||
|
||||
KRUnknown::KRUnknown(KRContext &context, std::string name, std::string extension) : KRResource(context, name)
|
||||
{
|
||||
m_pData = new KRDataBlock();
|
||||
m_extension = extension;
|
||||
}
|
||||
|
||||
KRUnknown::KRUnknown(KRContext &context, std::string name, std::string extension, KRDataBlock *data) : KRResource(context, name)
|
||||
{
|
||||
m_pData = data;
|
||||
m_extension = extension;
|
||||
}
|
||||
|
||||
KRUnknown::~KRUnknown()
|
||||
{
|
||||
delete m_pData;
|
||||
}
|
||||
|
||||
std::string KRUnknown::getExtension()
|
||||
{
|
||||
return m_extension;
|
||||
}
|
||||
|
||||
bool KRUnknown::save(KRDataBlock &data)
|
||||
{
|
||||
data.append(*m_pData);
|
||||
return true;
|
||||
}
|
||||
|
||||
KRDataBlock *KRUnknown::getData()
|
||||
{
|
||||
return m_pData;
|
||||
}
|
||||
37
KREngine/KREngine/Classes/KRUnknown.h
Normal file
37
KREngine/KREngine/Classes/KRUnknown.h
Normal file
@@ -0,0 +1,37 @@
|
||||
//
|
||||
// KRUnknown.h
|
||||
// KREngine
|
||||
//
|
||||
// Created by Kearwood Gilbert on 2013-01-02.
|
||||
// Copyright (c) 2013 Kearwood Software. All rights reserved.
|
||||
//
|
||||
|
||||
#ifndef KRUNKNOWN_H
|
||||
#define KRUNKNOWN_H
|
||||
|
||||
#import "KREngine-common.h"
|
||||
#import "KRContextObject.h"
|
||||
#import "KRDataBlock.h"
|
||||
#import "KRResource.h"
|
||||
#import <map>
|
||||
|
||||
class KRUnknown : public KRResource {
|
||||
|
||||
public:
|
||||
KRUnknown(KRContext &context, std::string name, std::string extension);
|
||||
KRUnknown(KRContext &context, std::string name, std::string extension, KRDataBlock *data);
|
||||
virtual ~KRUnknown();
|
||||
|
||||
virtual std::string getExtension();
|
||||
|
||||
virtual bool save(KRDataBlock &data);
|
||||
|
||||
KRDataBlock *getData();
|
||||
|
||||
private:
|
||||
|
||||
std::string m_extension;
|
||||
KRDataBlock *m_pData;
|
||||
};
|
||||
|
||||
#endif /* defined(KRUNKNOWN_H) */
|
||||
73
KREngine/KREngine/Classes/KRUnknownManager.cpp
Normal file
73
KREngine/KREngine/Classes/KRUnknownManager.cpp
Normal file
@@ -0,0 +1,73 @@
|
||||
//
|
||||
// FileManager.cpp
|
||||
// KREngine
|
||||
//
|
||||
// Created by Kearwood Gilbert on 2013-01-02.
|
||||
// Copyright (c) 2013 Kearwood Software. All rights reserved.
|
||||
//
|
||||
|
||||
#include "KRUnknownManager.h"
|
||||
|
||||
KRUnknownManager::KRUnknownManager(KRContext &context) : KRContextObject(context)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
KRUnknownManager::~KRUnknownManager()
|
||||
{
|
||||
for(map<std::string, map<std::string, KRUnknown *> >::iterator extension_itr = m_unknowns.begin(); extension_itr != m_unknowns.end(); extension_itr++) {
|
||||
for(map<std::string, KRUnknown *>::iterator name_itr=(*extension_itr).second.begin(); name_itr != (*extension_itr).second.end(); name_itr++) {
|
||||
delete (*name_itr).second;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void KRUnknownManager::add(KRUnknown *unknown)
|
||||
{
|
||||
std::string lower_name = unknown->getName();
|
||||
std::string lower_extension = unknown->getExtension();
|
||||
|
||||
std::transform(lower_name.begin(), lower_name.end(), lower_name.begin(), ::tolower);
|
||||
std::transform(lower_extension.begin(), lower_extension.end(), lower_extension.begin(), ::tolower);
|
||||
|
||||
map<std::string, map<std::string, KRUnknown *> >::iterator extension_itr = m_unknowns.find(lower_extension);
|
||||
if(extension_itr == m_unknowns.end()) {
|
||||
m_unknowns[lower_name] = map<std::string, KRUnknown *>();
|
||||
extension_itr = m_unknowns.find(lower_extension);
|
||||
}
|
||||
|
||||
map<std::string, KRUnknown *>::iterator name_itr = (*extension_itr).second.find(lower_name);
|
||||
if(name_itr != (*extension_itr).second.end()) {
|
||||
delete (*name_itr).second;
|
||||
(*name_itr).second = unknown;
|
||||
} else {
|
||||
(*extension_itr).second[lower_extension] = unknown;
|
||||
}
|
||||
}
|
||||
|
||||
KRUnknown *KRUnknownManager::load(const std::string &name, const std::string &extension, KRDataBlock *data)
|
||||
{
|
||||
KRUnknown *unknown = new KRUnknown(getContext(), name, extension, data);
|
||||
if(unknown) add(unknown);
|
||||
return unknown;
|
||||
}
|
||||
|
||||
KRUnknown *KRUnknownManager::get(const std::string &name, const std::string &extension)
|
||||
{
|
||||
std::string lower_name = name;
|
||||
std::string lower_extension = extension;
|
||||
|
||||
std::transform(lower_name.begin(), lower_name.end(), lower_name.begin(), ::tolower);
|
||||
std::transform(lower_extension.begin(), lower_extension.end(), lower_extension.begin(), ::tolower);
|
||||
|
||||
return m_unknowns[lower_extension][lower_name];
|
||||
}
|
||||
|
||||
|
||||
const map<std::string, KRUnknown *> &KRUnknownManager::get(const std::string &extension)
|
||||
{
|
||||
std::string lower_extension = extension;
|
||||
std::transform(lower_extension.begin(), lower_extension.end(), lower_extension.begin(), ::tolower);
|
||||
return m_unknowns[lower_extension];
|
||||
}
|
||||
|
||||
42
KREngine/KREngine/Classes/KRUnknownManager.h
Normal file
42
KREngine/KREngine/Classes/KRUnknownManager.h
Normal file
@@ -0,0 +1,42 @@
|
||||
//
|
||||
// FileManager.h
|
||||
// KREngine
|
||||
//
|
||||
// Created by Kearwood Gilbert on 2013-01-02.
|
||||
// Copyright (c) 2013 Kearwood Software. All rights reserved.
|
||||
//
|
||||
|
||||
#ifndef KRUNKNOWN_MANAGER_H
|
||||
#define KRUNKNOWN_MANAGER_H
|
||||
|
||||
#import "KREngine-common.h"
|
||||
|
||||
#include "KRUnknown.h"
|
||||
#include "KRContextObject.h"
|
||||
#include "KRDataBlock.h"
|
||||
|
||||
#include <map>
|
||||
#include <set>
|
||||
#include <string>
|
||||
|
||||
using std::map;
|
||||
using std::set;
|
||||
|
||||
class KRUnknownManager : public KRContextObject {
|
||||
public:
|
||||
KRUnknownManager(KRContext &context);
|
||||
virtual ~KRUnknownManager();
|
||||
|
||||
void add(KRUnknown *unknown);
|
||||
|
||||
KRUnknown *load(const std::string &name, const std::string &extension, KRDataBlock *data);
|
||||
KRUnknown *get(const std::string &name, const std::string &extension);
|
||||
|
||||
|
||||
const map<std::string, KRUnknown *> &get(const std::string &extension);
|
||||
|
||||
private:
|
||||
map<std::string, map<std::string, KRUnknown *> > m_unknowns;
|
||||
};
|
||||
|
||||
#endif /* defined(KRUNKNOWN_MANAGER_H) */
|
||||
Reference in New Issue
Block a user