diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2021-01-30 20:36:42 +0000 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2021-02-04 19:29:49 +0000 |
commit | bde4a9f40bb4af39270a124d5ef9571a83305d0a (patch) | |
tree | 536719df20d8f18d4c40e893c2f93b4fa45fb2d5 /gfx/models | |
parent | Add some tests over collection (diff) | |
download | ilt-bde4a9f40bb4af39270a124d5ef9571a83305d0a.tar.bz2 ilt-bde4a9f40bb4af39270a124d5ef9571a83305d0a.tar.xz ilt-bde4a9f40bb4af39270a124d5ef9571a83305d0a.zip |
Restructure to allow a resource path and testing
Diffstat (limited to 'gfx/models')
-rw-r--r-- | gfx/models/obj_loader.cpp | 7 | ||||
-rw-r--r-- | gfx/models/obj_loader.h | 3 | ||||
-rw-r--r-- | gfx/models/texture.cpp | 15 | ||||
-rw-r--r-- | gfx/models/texture.h | 4 |
4 files changed, 13 insertions, 16 deletions
diff --git a/gfx/models/obj_loader.cpp b/gfx/models/obj_loader.cpp index 7611a2c..75ab251 100644 --- a/gfx/models/obj_loader.cpp +++ b/gfx/models/obj_loader.cpp @@ -3,6 +3,7 @@ #include <fstream> #include <map> #include <memory> +#include <resource.h> #include <stdexcept> #include <utility> @@ -12,12 +13,12 @@ static inline unsigned int ParseOBJIndexValue(const std::string & token, unsigne static inline float ParseOBJFloatValue(const std::string & token, unsigned int start, unsigned int end); static inline std::vector<std::string> SplitString(const std::string & s, char delim); -OBJModel::OBJModel(const std::string & fileName) +OBJModel::OBJModel(const std::filesystem::path & fileName) { hasUVs = false; hasNormals = false; std::ifstream file; - file.open(fileName.c_str()); + file.open(Resource::mapPath(fileName).c_str()); std::string line; if (file.is_open()) { @@ -55,7 +56,7 @@ OBJModel::OBJModel(const std::string & fileName) } } else { - throw std::runtime_error {"Unable to load mesh: " + fileName}; + throw std::runtime_error {"Unable to load mesh: " + fileName.string()}; } } diff --git a/gfx/models/obj_loader.h b/gfx/models/obj_loader.h index 0523a95..2fe3d35 100644 --- a/gfx/models/obj_loader.h +++ b/gfx/models/obj_loader.h @@ -1,6 +1,7 @@ #ifndef OBJ_LOADER_H_INCLUDED #define OBJ_LOADER_H_INCLUDED +#include <filesystem> #include <glm/glm.hpp> #include <string> #include <vector> @@ -36,7 +37,7 @@ public: bool hasUVs; bool hasNormals; - explicit OBJModel(const std::string & fileName); + explicit OBJModel(const std::filesystem::path & fileName); IndexedModel ToIndexedModel(); diff --git a/gfx/models/texture.cpp b/gfx/models/texture.cpp index bc80a1c..342f890 100644 --- a/gfx/models/texture.cpp +++ b/gfx/models/texture.cpp @@ -1,18 +1,14 @@ #include "texture.h"
#include "stb_image.h"
#include <cache.h>
-#include <stdexcept>
+#include <gfx/image.h>
+#include <resource.h>
Cache<Texture> Texture::cachedTexture;
-Texture::Texture(const std::string & fileName) : m_texture {}
+Texture::Texture(const std::filesystem::path & fileName) : m_texture {}
{
- int width, height, numComponents;
- unsigned char * data = stbi_load((fileName).c_str(), &width, &height, &numComponents, STBI_rgb_alpha);
-
- if (!data) {
- throw std::runtime_error {"Unable to load texture: " + fileName};
- }
+ const Image tex {Resource::mapPath(fileName).c_str(), STBI_rgb_alpha};
glGenTextures(1, &m_texture);
glBindTexture(GL_TEXTURE_2D, m_texture);
@@ -22,8 +18,7 @@ Texture::Texture(const std::string & fileName) : m_texture {} glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
- stbi_image_free(data);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.width, tex.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, tex.data.data());
}
Texture::~Texture()
diff --git a/gfx/models/texture.h b/gfx/models/texture.h index 30ba953..8bbba85 100644 --- a/gfx/models/texture.h +++ b/gfx/models/texture.h @@ -2,14 +2,14 @@ #define TEXTURE_H
#include <GL/glew.h>
+#include <filesystem>
#include <special_members.hpp>
-#include <string>
template<typename Obj> class Cache;
class Texture {
public:
- explicit Texture(const std::string & fileName);
+ explicit Texture(const std::filesystem::path & fileName);
virtual ~Texture();
|