diff --git a/CMakeLists.txt b/CMakeLists.txt index 00835be..220b54b 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,12 +15,11 @@ set(GUI text.cpp) set(UTILS util.cpp) set(MATH quaternion.cpp vector.cpp matrix.cpp ray.cpp) set(RENDER lineRenderer.cpp particleEmitter.cpp camera.cpp light.cpp material.cpp mesh.cpp model.cpp node.cpp quad.cpp box.cpp root.cpp shader.cpp texture.cpp) -set(MODEL modelReader.cpp assimpModelReader.cpp vbModelReader.cpp) set(ANIM animationController.cpp animationChannel.cpp animation.cpp animatable.h keyframeChannel.cpp driver.cpp) set(ARMATURE skeleton.cpp bone.cpp ikSolver.cpp) -set(ASSET_READERS abstractAssetReader.cpp imageReader.cpp fontReader.cpp) +set(ASSET_READERS abstractAssetReader.cpp imageReader.cpp fontReader.cpp modelReader.cpp assimpModelReader.cpp vbModelReader.cpp) set(ASSET_MANAGER assetManager.cpp textAsset.h imageAsset.h modelAsset.h fontAsset.h) -set(LIB_SRC ${RENDER} ${MATH} ${MODEL} ${UTILS} ${GUI} ${ARMATURE} ${ASSET_MANAGER} ${ASSET_READERS} ${ANIM}) +set(LIB_SRC ${RENDER} ${MATH} ${UTILS} ${GUI} ${ARMATURE} ${ASSET_MANAGER} ${ASSET_READERS} ${ANIM}) include_directories(external/glm) include_directories(external/glm/glm) diff --git a/assetManager.cpp b/assetManager.cpp index b22323f..7408dcb 100644 --- a/assetManager.cpp +++ b/assetManager.cpp @@ -1,6 +1,8 @@ #include "assetManager.h" #include "abstractAssetReader.h" #include "util.h" +#include "imageReader.h" +#include "fontReader.h" #include @@ -16,10 +18,22 @@ namespace vb01{ return assetManager; } - void AssetManager::load(AbstractAssetReader *assetReader, string path){ + void AssetManager::load(string path){ if(getAsset(path)) return; + string format = path.substr(path.find_last_of(".") + 1, string::npos); + AbstractAssetReader *assetReader = nullptr; + vector imageFormats = vector{"png", "jpeg", "jpg"}; + + if(find(imageFormats.begin(), imageFormats.end(), format) != imageFormats.end()) + assetReader = ImageReader::getSingleton(); + + vector fontFormats = vector{"ttf"}; + + if(find(fontFormats.begin(), fontFormats.end(), format) != fontFormats.end()) + assetReader = FontReader::getSingleton(); + assets.push_back(assetReader->readAsset(path)); } diff --git a/assetManager.h b/assetManager.h index a7f3a0b..0717dce 100644 --- a/assetManager.h +++ b/assetManager.h @@ -11,10 +11,11 @@ namespace vb01{ class AssetManager{ public: static AssetManager* getSingleton(); - void load(AbstractAssetReader*, std::string); + void load(std::string); Asset* getAsset(std::string); private: AssetManager(){} + std::vector assets; }; } diff --git a/driverSample.cpp b/driverSample.cpp index e5fbb6f..37d721d 100644 --- a/driverSample.cpp +++ b/driverSample.cpp @@ -5,6 +5,7 @@ #include "keyframeChannel.h" #include "animationController.h" #include "animationChannel.h" +#include "assetManager.h" using namespace std; using namespace vb01; @@ -19,6 +20,12 @@ int main(){ TEX_PATH + "front.jpg", TEX_PATH + "back.jpg" }; + AssetManager::getSingleton()->load(skyboxTextures[0]); + AssetManager::getSingleton()->load(skyboxTextures[1]); + AssetManager::getSingleton()->load(skyboxTextures[2]); + AssetManager::getSingleton()->load(skyboxTextures[3]); + AssetManager::getSingleton()->load(skyboxTextures[4]); + AssetManager::getSingleton()->load(skyboxTextures[5]); /* * Gets Root object to start the sample, diff --git a/skeletalAnimationSample.cpp b/skeletalAnimationSample.cpp index 42a9f3e..ee45516 100644 --- a/skeletalAnimationSample.cpp +++ b/skeletalAnimationSample.cpp @@ -5,6 +5,9 @@ #include "skeleton.h" #include "animationController.h" #include "animationChannel.h" +#include "assetManager.h" +#include "imageReader.h" + #include #include FT_FREETYPE_H @@ -22,6 +25,12 @@ int main(){ TEX_PATH + "front.jpg", TEX_PATH + "back.jpg" }; + AssetManager::getSingleton()->load(skyboxTextures[0]); + AssetManager::getSingleton()->load(skyboxTextures[1]); + AssetManager::getSingleton()->load(skyboxTextures[2]); + AssetManager::getSingleton()->load(skyboxTextures[3]); + AssetManager::getSingleton()->load(skyboxTextures[4]); + AssetManager::getSingleton()->load(skyboxTextures[5]); /* * Gets Root object to start the sample, diff --git a/textSample.cpp b/textSample.cpp index a212e84..82e0e94 100644 --- a/textSample.cpp +++ b/textSample.cpp @@ -58,13 +58,13 @@ int main(){ textMat->addBoolUniform("texturingEnabled", true); string frames[]{TEX_PATH + "bricks.jpg", TEX_PATH + "defaultTexture.jpg"}; - AssetManager::getSingleton()->load(ImageReader::getSingleton(), frames[0]); - AssetManager::getSingleton()->load(ImageReader::getSingleton(), frames[1]); + AssetManager::getSingleton()->load(frames[0]); + AssetManager::getSingleton()->load(frames[1]); Texture *texture = new Texture(frames, 2, false); textMat->addTexUniform("textures[0]", texture, true); for(int i = 0; i < numTexts; i++){ - AssetManager::getSingleton()->load(FontReader::getSingleton(), FONT_PATH + fonts[i]); + AssetManager::getSingleton()->load(FONT_PATH + fonts[i]); Text *text = new Text(FONT_PATH + fonts[i], texts[i], 0, 60000); text->setLeftToRight(leftToRight[i]);