mirror of
https://github.com/devZoGok/vb01.git
synced 2026-08-26 19:43:30 +00:00
implemented image reader and asset manager
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
#ifndef ASSET_H
|
||||
#define ASSET_H
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace vb01{
|
||||
struct Asset{
|
||||
std::string path;
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,37 @@
|
||||
#include "assetManager.h"
|
||||
#include "imageReader.h"
|
||||
#include "util.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace vb01{
|
||||
AssetManager *assetManager = nullptr;
|
||||
|
||||
AssetManager* AssetManager::getSingleton(){
|
||||
if(!assetManager)
|
||||
assetManager = new AssetManager();
|
||||
|
||||
return assetManager;
|
||||
}
|
||||
|
||||
void AssetManager::load(string path){
|
||||
if(getAsset(path))
|
||||
return;
|
||||
|
||||
string format = path.substr(path.find_last_of(".") + 1, string::npos);
|
||||
vector<string> imageFormats = vector<string>{"png", "jpg", "jpeg"};
|
||||
|
||||
if(*find(imageFormats.begin(), imageFormats.end(), format) == format)
|
||||
assets.push_back(ImageReader::getSingleton()->readImage(path, true));
|
||||
}
|
||||
|
||||
Asset* AssetManager::getAsset(string path){
|
||||
for(Asset *a : assets)
|
||||
if(a->path == path)
|
||||
return a;
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
#ifndef ASSET_MANAGER_H
|
||||
#define ASSET_MANAGER_H
|
||||
|
||||
#include "asset.h"
|
||||
|
||||
#include <vector>
|
||||
|
||||
namespace vb01{
|
||||
class AssetManager{
|
||||
public:
|
||||
static AssetManager* getSingleton();
|
||||
void load(std::string);
|
||||
Asset* getAsset(std::string);
|
||||
private:
|
||||
AssetManager(){}
|
||||
std::vector<Asset*> assets;
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
#ifndef FONT_ASSET_H
|
||||
#define FONT_ASSET_H
|
||||
|
||||
#include "asset.h"
|
||||
|
||||
namespace vb01{
|
||||
struct FontAsset : public Asset{
|
||||
u32 **glyphImages;
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,17 @@
|
||||
#ifndef IMAGE_ASSET_H
|
||||
#define IMAGE_ASSET_H
|
||||
|
||||
#include "asset.h"
|
||||
|
||||
namespace vb01{
|
||||
struct ImageAsset : public Asset{
|
||||
ImageAsset(std::string path, u8 *image){
|
||||
this->path = path;
|
||||
this->image = image;
|
||||
}
|
||||
|
||||
u8 *image;
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,22 @@
|
||||
#include "imageReader.h"
|
||||
|
||||
#include "stb_image.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace vb01{
|
||||
ImageReader *imageReader = nullptr;
|
||||
|
||||
ImageReader* ImageReader::getSingleton(){
|
||||
if(!imageReader)
|
||||
imageReader = new ImageReader();
|
||||
|
||||
return imageReader;
|
||||
}
|
||||
|
||||
ImageAsset* ImageReader::readImage(string path, bool flip){
|
||||
stbi_set_flip_vertically_on_load(flip);
|
||||
u8 *data = stbi_load(path.c_str(), nullptr, nullptr, nullptr, 0);
|
||||
return new ImageAsset(path, data);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
#ifndef IMAGE_READER_H
|
||||
#define IMAGE_READER_H
|
||||
|
||||
#include "util.h"
|
||||
#include "imageAsset.h"
|
||||
|
||||
namespace vb01{
|
||||
class ImageReader{
|
||||
public:
|
||||
static ImageReader* getSingleton();
|
||||
ImageAsset* readImage(std::string, bool);
|
||||
private:
|
||||
ImageReader(){}
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,14 @@
|
||||
#ifndef MODEL_ASSET_H
|
||||
#define MODEL_ASSET_H
|
||||
|
||||
#include "asset.h"
|
||||
|
||||
namespace vb01{
|
||||
class Node;
|
||||
|
||||
struct ModelAsset : public Asset{
|
||||
Node *rootNode;
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
#ifndef TEXT_ASSET_H
|
||||
#define TEXT_ASSET_H
|
||||
|
||||
#include "asset.h"
|
||||
|
||||
namespace vb01{
|
||||
struct TextAsset : public Asset{
|
||||
std::string text;
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
+7
-20
@@ -5,6 +5,8 @@
|
||||
#include FT_FREETYPE_H
|
||||
|
||||
#include "texture.h"
|
||||
#include "assetManager.h"
|
||||
#include "imageAsset.h"
|
||||
|
||||
#include "glad.h"
|
||||
#include <glfw3.h>
|
||||
@@ -75,13 +77,10 @@ namespace vb01{
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
|
||||
stbi_set_flip_vertically_on_load(flip);
|
||||
u8 *image = ((ImageAsset*)AssetManager::getSingleton()->getAsset(paths[i]))->image;
|
||||
|
||||
data = stbi_load(paths[i].c_str(), &width, &height, &numChannels, 0);
|
||||
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, png ? GL_RGBA : GL_RGB, width, height, 0, png ? GL_RGBA : GL_RGB, GL_UNSIGNED_BYTE, data);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, png ? GL_RGBA : GL_RGB, width, height, 0, png ? GL_RGBA : GL_RGB, GL_UNSIGNED_BYTE, image);
|
||||
glGenerateMipmap(GL_TEXTURE_2D);
|
||||
stbi_image_free(data);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,30 +97,18 @@ namespace vb01{
|
||||
glGenTextures(1, &texture[0]);
|
||||
glBindTexture(GL_TEXTURE_CUBE_MAP, texture[0]);
|
||||
|
||||
if(flip)
|
||||
stbi_set_flip_vertically_on_load(flip);
|
||||
|
||||
for(int i = 0; i < 6; i++){
|
||||
if(!depth){
|
||||
if(fromFile){
|
||||
data = stbi_load(paths[i].c_str(), &width, &height, &numChannels, 0);
|
||||
|
||||
if(data){
|
||||
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB16F, width, width, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
|
||||
stbi_image_free(data);
|
||||
}
|
||||
else{
|
||||
cout << "Failed to read cubemap texture " << i << endl;
|
||||
exit(-1);
|
||||
}
|
||||
u8 *image = ((ImageAsset*)AssetManager::getSingleton()->getAsset(paths[i]))->image;
|
||||
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB16F, width, width, 0, GL_RGB, GL_UNSIGNED_BYTE, image);
|
||||
}
|
||||
else
|
||||
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB16F, width, width, 0, GL_RGB, GL_UNSIGNED_INT, NULL);
|
||||
}
|
||||
else{
|
||||
else
|
||||
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_DEPTH_COMPONENT, width, width, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
|
||||
@@ -32,9 +32,8 @@ namespace vb01{
|
||||
bool cubemap = false;
|
||||
u32 *texture = nullptr;
|
||||
s64 lastUpdateTime = 0;
|
||||
int width, height, numChannels, updateRate = 0, numFrames = 0, frameA = 0, frameB = 0, mipmapLevel = 1;
|
||||
int width, height, updateRate = 0, numFrames = 0, frameA = 0, frameB = 0, mipmapLevel = 1;
|
||||
float mixRatio;
|
||||
u8 *data;
|
||||
std::string *paths = nullptr;
|
||||
|
||||
void createCubemap(bool, bool, bool);
|
||||
|
||||
Reference in New Issue
Block a user