diff options
Diffstat (limited to 'source/30-game/Texture.cpp')
-rw-r--r-- | source/30-game/Texture.cpp | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/source/30-game/Texture.cpp b/source/30-game/Texture.cpp index 6fa7c8a..e5c9705 100644 --- a/source/30-game/Texture.cpp +++ b/source/30-game/Texture.cpp @@ -14,7 +14,8 @@ Texture::~Texture() { glDeleteTextures(1, &mHandle); } -static GLenum MapTextureFilteringToGL(Tags::TexFilter option) { +namespace ProjectBrussel_UNITY_ID { +GLint MapTextureFilteringToGL(Tags::TexFilter option) { using namespace Tags; switch (option) { case TF_Linear: return GL_LINEAR; @@ -22,8 +23,11 @@ static GLenum MapTextureFilteringToGL(Tags::TexFilter option) { } return 0; } +} // namespace ProjectBrussel_UNITY_ID + +Texture::ErrorCode Texture::InitFromFile(const char* filePath, const TextureProperties& props) { + using namespace ProjectBrussel_UNITY_ID; -Texture::ErrorCode Texture::InitFromFile(const char* filePath) { if (IsValid()) { return EC_AlreadyInitialized; } @@ -40,21 +44,23 @@ Texture::ErrorCode Texture::InitFromFile(const char* filePath) { glGenTextures(1, &mHandle); glBindTexture(GL_TEXTURE_2D, mHandle); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, MapTextureFilteringToGL(props.minifyingFilter)); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, MapTextureFilteringToGL(props.magnifyingFilter)); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, result); - mInfo.size = { width, height }; + mProps.size = { width, height }; return EC_Success; } -Texture::ErrorCode Texture::InitFromImage(const Image& image) { +Texture::ErrorCode Texture::InitFromImage(const Image& image, const TextureProperties& props) { + using namespace ProjectBrussel_UNITY_ID; + if (IsValid()) { return EC_AlreadyInitialized; } - GLenum sourceFormat; + GLint sourceFormat; switch (image.GetChannels()) { case 1: sourceFormat = GL_RED; break; case 2: sourceFormat = GL_RG; break; @@ -69,11 +75,13 @@ Texture::ErrorCode Texture::InitFromImage(const Image& image) { glGenTextures(1, &mHandle); glBindTexture(GL_TEXTURE_2D, mHandle); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, MapTextureFilteringToGL(props.minifyingFilter)); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, MapTextureFilteringToGL(props.magnifyingFilter)); glTexImage2D(GL_TEXTURE_2D, 0, sourceFormat, size.x, size.y, 0, sourceFormat, GL_UNSIGNED_BYTE, dataPtr); - mInfo.size = size; + // Copy all [In] properties + mProps = props; + mProps.size = size; return EC_Success; } @@ -192,7 +200,7 @@ Texture::ErrorCode Texture::InitAtlas(const AtlasInput& in, AtlasOutput* out) { // 5. Generate atlas texture info mHandle = atlasTexture; - mInfo.size = { atlasWidth, atlasHeight }; + mProps.size = { atlasWidth, atlasHeight }; // 6. Generate output information if (out) { @@ -216,8 +224,8 @@ Texture::ErrorCode Texture::InitAtlas(const AtlasInput& in, AtlasOutput* out) { return EC_Success; } -const TextureInfo& Texture::GetInfo() const { - return mInfo; +const TextureProperties& Texture::GetInfo() const { + return mProps; } GLuint Texture::GetHandle() const { |