Added basic AssetManager class skeleton. This will be the governing class for the loading of files and ensuring data remains the same between clients via checksum comparisons.
parent
0ceb4b828d
commit
e1d908ae3e
|
@ -14,6 +14,8 @@
|
|||
20517DCE1A9D44DB00DE49E9 /* Core.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 20517DCC1A9D44DB00DE49E9 /* Core.cpp */; };
|
||||
205182A81A9DD62C00DE49E9 /* cube.obj in Resources */ = {isa = PBXBuildFile; fileRef = 205182A71A9DD62C00DE49E9 /* cube.obj */; };
|
||||
205182C01A9DD63E00DE49E9 /* cube.obj in Copy Models */ = {isa = PBXBuildFile; fileRef = 205182A71A9DD62C00DE49E9 /* cube.obj */; };
|
||||
205183C71A9F324700DE49E9 /* AssetManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 205183C51A9F324600DE49E9 /* AssetManager.cpp */; };
|
||||
205183CC1A9F330000DE49E9 /* Asset.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 205183CA1A9F330000DE49E9 /* Asset.cpp */; };
|
||||
2056AE3C1A8A421500833760 /* Mat4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2056AE361A8A421500833760 /* Mat4.cpp */; };
|
||||
2056AE3D1A8A421500833760 /* RenderObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2056AE381A8A421500833760 /* RenderObject.cpp */; };
|
||||
2056AE3E1A8A421500833760 /* Vec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2056AE3A1A8A421500833760 /* Vec.cpp */; };
|
||||
|
@ -79,6 +81,10 @@
|
|||
20517DCC1A9D44DB00DE49E9 /* Core.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Core.cpp; path = ../../src/Core.cpp; sourceTree = SOURCE_ROOT; };
|
||||
20517DCD1A9D44DB00DE49E9 /* Core.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Core.hpp; path = ../../src/Core.hpp; sourceTree = SOURCE_ROOT; };
|
||||
205182A71A9DD62C00DE49E9 /* cube.obj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = cube.obj; path = models/cube.obj; sourceTree = "<group>"; };
|
||||
205183C51A9F324600DE49E9 /* AssetManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AssetManager.cpp; path = ../../src/AssetManager.cpp; sourceTree = SOURCE_ROOT; };
|
||||
205183C61A9F324600DE49E9 /* AssetManager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = AssetManager.hpp; path = ../../src/AssetManager.hpp; sourceTree = SOURCE_ROOT; };
|
||||
205183CA1A9F330000DE49E9 /* Asset.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Asset.cpp; path = ../../src/Asset.cpp; sourceTree = SOURCE_ROOT; };
|
||||
205183CB1A9F330000DE49E9 /* Asset.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Asset.hpp; path = ../../src/Asset.hpp; sourceTree = SOURCE_ROOT; };
|
||||
2056AE361A8A421500833760 /* Mat4.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Mat4.cpp; path = ../../src/Mat4.cpp; sourceTree = SOURCE_ROOT; };
|
||||
2056AE371A8A421500833760 /* Mat4.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Mat4.hpp; path = ../../src/Mat4.hpp; sourceTree = SOURCE_ROOT; };
|
||||
2056AE381A8A421500833760 /* RenderObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RenderObject.cpp; path = ../../src/RenderObject.cpp; sourceTree = SOURCE_ROOT; };
|
||||
|
@ -129,6 +135,10 @@
|
|||
080E96DDFE201D6D7F000001 /* Classes */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
205183CA1A9F330000DE49E9 /* Asset.cpp */,
|
||||
205183CB1A9F330000DE49E9 /* Asset.hpp */,
|
||||
205183C51A9F324600DE49E9 /* AssetManager.cpp */,
|
||||
205183C61A9F324600DE49E9 /* AssetManager.hpp */,
|
||||
20517DCC1A9D44DB00DE49E9 /* Core.cpp */,
|
||||
20517DCD1A9D44DB00DE49E9 /* Core.hpp */,
|
||||
2057239F1A9B3F04001400FA /* Quat.cpp */,
|
||||
|
@ -358,6 +368,8 @@
|
|||
20517D531A9BFB1B00DE49E9 /* fio.cpp in Sources */,
|
||||
20517D601A9C083B00DE49E9 /* checksum.cpp in Sources */,
|
||||
20517DCE1A9D44DB00DE49E9 /* Core.cpp in Sources */,
|
||||
205183C71A9F324700DE49E9 /* AssetManager.cpp in Sources */,
|
||||
205183CC1A9F330000DE49E9 /* Asset.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
/* ===============================================================
|
||||
Asset
|
||||
================================================================ */
|
||||
#include "Asset.hpp"
|
||||
Asset::Asset() {
|
||||
flags = 0;
|
||||
data = NULL;
|
||||
data_length = 0;
|
||||
}
|
||||
Asset::~Asset() {
|
||||
if (flags & IS_LOADED) {
|
||||
free(data);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
/* ================================================================
|
||||
Asset
|
||||
----------------
|
||||
Our basic Asset class. This class exists as a container for data, but does not directly load any data itself. It is responsible for holding data assigned by the Asset Manager and for clearing data upon destruction.
|
||||
================================================================ */
|
||||
#include <string>
|
||||
|
||||
class Asset {
|
||||
friend class AssetManager;
|
||||
public:
|
||||
Asset();
|
||||
~Asset();
|
||||
enum FLAGS {
|
||||
IS_LOADED = (1 << 1) // indicates data is populated
|
||||
};
|
||||
protected:
|
||||
unsigned int flags; // Our asset state flags
|
||||
std::string uuid; // Our UUID
|
||||
std::string filename; // Our filename, relative to the assets directory
|
||||
std::string data_checksum; // Our full data checksum
|
||||
char *data; // Our data, NULL if IS_LOADED is not set
|
||||
size_t data_length; // Our data's length, in bytes
|
||||
};
|
|
@ -0,0 +1,29 @@
|
|||
/* ===============================================================
|
||||
AssetManager
|
||||
================================================================ */
|
||||
#include "AssetManager.hpp"
|
||||
#include "Log.hpp"
|
||||
#include "fio.hpp"
|
||||
#include "checksum.hpp"
|
||||
|
||||
AssetManager::AssetManager() {
|
||||
|
||||
}
|
||||
AssetManager::~AssetManager() {
|
||||
|
||||
}
|
||||
/* ======== Asset Loading ======== */
|
||||
Asset* AssetManager::loadFile(const char *filename) {
|
||||
LOG(LOG_INFO) << FUNC_NAME << " " << filename << ": " << std::hex << crc32(1337, filename, strlen(filename));
|
||||
// read in the file and get its checksum
|
||||
char *buffer = NULL;
|
||||
size_t len = asset_fileToMem(filename, &buffer);
|
||||
if (len == 0) {
|
||||
LOG(LOG_ERROR) << FUNC_NAME << " read length was 0, could not load file " << filename;
|
||||
return NULL;
|
||||
}
|
||||
LOG(LOG_INFO) << FUNC_NAME << " " << filename << "'s CRC32 is " << std::hex << crc32(1337, buffer, len);
|
||||
LOG(LOG_INFO) << filename << ": " << std::hex << crc32(1337, filename, strlen(filename)) << " " << std::hex << crc32(1337, buffer, len) << " " << std::hex << crc32(1337, buffer, len/2) << " " << std::hex << crc32(1337, buffer+(len/2), len/2);
|
||||
free(buffer);
|
||||
return NULL;
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
/* ================================================================
|
||||
Asset Manager
|
||||
----------------
|
||||
This class is responsible for the loading of all files considered as assets.
|
||||
|
||||
An Asset is an object that holds some amount of unique data that is normally read from a file in one of the asset directories. Each Asset has a file checksum, a special UUID, the pathname of the file it references, and the data for said file.
|
||||
|
||||
The AssetManager holds a special Files Cache. This cache is a basic list of unloaded Asset files, containing all but their data. It is constructed from all files in the assets directories and is updated when a new file has been added to the cache.
|
||||
|
||||
Files may be added to the Cache through the following manners:
|
||||
1. Adding to an assets folder and updating the cache
|
||||
2. Loading a specific file with addFile
|
||||
* This will add the file to the preferred user assets folder
|
||||
3. Calling addData(const char *filename, const char *bytes, size_t len)
|
||||
* This will create the given filename in the preferred user assets folder and write bytes up to len to the file.
|
||||
|
||||
Beyond the File Cache, there is the Live Cache. This cache is the current list of loaded Assets. These Live Caches are generally loaded from and saved to a Campaign.
|
||||
|
||||
================================================================ */
|
||||
#include "Asset.hpp"
|
||||
#include "fio.hpp"
|
||||
#include <vector>
|
||||
|
||||
class AssetManager {
|
||||
public:
|
||||
AssetManager();
|
||||
~AssetManager();
|
||||
// loads given file as an asset
|
||||
Asset* loadFile(const char *filename);
|
||||
// attempts to find asset with the given UUID in the asset cache
|
||||
// Asset* loadAsset(const char *uuid);
|
||||
// saves the loaded assets in the asset cache
|
||||
// saves all Assets in assets to the given cache file
|
||||
// int saveCache(const char *cachefile);
|
||||
//
|
||||
// int loadCache(const char *cachefile)
|
||||
private:
|
||||
std::vector<Asset> cache; // Cache of all files known
|
||||
// Table<Asset> live_cache; // cache of loaded assets
|
||||
};
|
|
@ -16,6 +16,8 @@ Core::Core() {
|
|||
v_window = NULL;
|
||||
v_context = 0;
|
||||
v_fbo = 0;
|
||||
scene = NULL;
|
||||
asset_manager = NULL;
|
||||
}
|
||||
Core::~Core() {
|
||||
|
||||
|
@ -75,6 +77,8 @@ int Core::initSystem() {
|
|||
// FIXME: temporary location for adding cameras/etc. for testing
|
||||
// Create our basic RenderScene
|
||||
scene = new RenderScene();
|
||||
// TEMP: this should be assigned elsewhere.
|
||||
asset_manager = new AssetManager();
|
||||
// TEMP: our framebuffer rendering program
|
||||
Program *program = new Program();
|
||||
// FIXME: check for GLSL version and automagically load the appropriate shader file
|
||||
|
@ -149,6 +153,8 @@ int Core::initSystem() {
|
|||
RenderSet *sert = new RenderSet();
|
||||
sert->setProgram(program_model);
|
||||
|
||||
asset_manager->loadFile("data/models/cube.obj");
|
||||
|
||||
RenderObject *objerct = new RenderObject();
|
||||
Mesh *mersh = new Mesh("data/models/cube.obj");
|
||||
mersh->buildMesh();
|
||||
|
@ -298,3 +304,6 @@ void Core::doRender() {
|
|||
SDL_Window* Core::getWindow() {
|
||||
return v_window;
|
||||
}
|
||||
AssetManager* Core::getAssetManager() {
|
||||
return asset_manager;
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ Core is somewhat like a service locator, but with larger engine capabilities - i
|
|||
#define CORE_HPP
|
||||
#include "common.hpp"
|
||||
#include "RenderScene.hpp"
|
||||
#include "AssetManager.hpp"
|
||||
class Core {
|
||||
public:
|
||||
Core();
|
||||
|
@ -19,6 +20,7 @@ class Core {
|
|||
//
|
||||
SDL_Window* getWindow();
|
||||
RenderScene *getScene();
|
||||
AssetManager *getAssetManager();
|
||||
// Audio* getAudio();
|
||||
// Net* getNet();
|
||||
unsigned int flags; // Core state flags
|
||||
|
@ -30,6 +32,7 @@ class Core {
|
|||
int v_height; // height of our display
|
||||
int v_flags; // video flags
|
||||
RenderScene *scene; // our current render scene
|
||||
AssetManager *asset_manager;
|
||||
// Audio *audio_service;
|
||||
// Net *net_service;
|
||||
};
|
||||
|
|
|
@ -37,8 +37,8 @@ class Log {
|
|||
};
|
||||
|
||||
#ifndef MAX_LOG_LEVEL
|
||||
#define MAX_LOG_LEVEL LOG_ERROR
|
||||
#define MAX_LOG_LEVEL LOG_DEBUG
|
||||
#endif
|
||||
#define LOG(level) if (level > MAX_LOG_LEVEL) ; else Log().Get(level)
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -9,27 +9,26 @@ checksum.cpp/checksum.hpp provide functionality for checking and generating chec
|
|||
uint32_t crc32(uint32_t crc, const char *buf, size_t len) {
|
||||
static uint32_t table[256];
|
||||
static int table_gen = 0;
|
||||
uint32_t rem;
|
||||
uint32_t word;
|
||||
uint8_t octet;
|
||||
int i, j;
|
||||
const char *p, *q;
|
||||
|
||||
// Generate our table if not yet generated
|
||||
if (table_gen == 0) {
|
||||
for (i = 0; i < 256; i++) {
|
||||
rem = i;
|
||||
word = i;
|
||||
for (j = 0; j < 8; j++) {
|
||||
if (rem & 1) {
|
||||
rem >>= 1;
|
||||
rem ^= 0xedb88320;
|
||||
if (word & 1) {
|
||||
word = (word >> 1) ^ 0xedb88320;
|
||||
} else {
|
||||
rem >>= 1;
|
||||
word >>= 1;
|
||||
}
|
||||
}
|
||||
table[i] = rem;
|
||||
table[i] = word;
|
||||
}
|
||||
table_gen = 1;
|
||||
}
|
||||
|
||||
// Generate our CRC32!
|
||||
crc = ~crc;
|
||||
q = buf + len;
|
||||
for (p = buf; p < q; p++) {
|
||||
|
|
Loading…
Reference in New Issue