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:
kearwood
2013-01-02 22:00:29 +00:00
parent 7a6f5e34ac
commit 4b8302b794
7 changed files with 239 additions and 1 deletions

View File

@@ -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;
};

View File

@@ -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;
@@ -76,6 +77,11 @@ KRContext::~KRContext() {
delete m_pAnimationCurveManager;
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) {
@@ -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;
}

View File

@@ -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;

View 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;
}

View 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) */

View 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];
}

View 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) */