1
0
mirror of https://github.com/rwengine/openrw.git synced 2024-10-05 08:37:20 +02:00
openrw/rwlib/source/gl/TextureData.hpp

46 lines
946 B
C++
Raw Normal View History

#pragma once
#include <gl/gl_core_3_3.h>
#include <glm/glm.hpp>
#include <map>
#include <memory>
/**
* Stores a handle and metadata about a loaded texture.
*/
2016-09-09 22:13:21 +02:00
class TextureData {
public:
2016-09-09 22:13:21 +02:00
TextureData(GLuint name, const glm::ivec2& dims, bool alpha)
: texName(name), size(dims), hasAlpha(alpha) {
}
rwlib: Delete textures on close Should fix these memory leaks: ==22737== 513,622,016 bytes in 6,650 blocks are definitely lost in loss record 3,126 of 3,126 ==22737== at 0x14F996E4: ??? (in /usr/lib64/dri/i965_dri.so) ==22737== by 0x14FE717A: ??? (in /usr/lib64/dri/i965_dri.so) ==22737== by 0x14FE622E: ??? (in /usr/lib64/dri/i965_dri.so) ==22737== by 0x14CDED2A: ??? (in /usr/lib64/dri/i965_dri.so) ==22737== by 0x14CDF85F: ??? (in /usr/lib64/dri/i965_dri.so) ==22737== by 0x91602C: createTexture(RW::BSTextureNative&, RW::BinaryStreamSection&) (LoaderTXD.cpp:79) ==22737== by 0x91649E: TextureLoader::loadFromMemory(std::shared_ptr<FileContentsInfo>, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::shared_ptr<TextureData>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<TextureData> > > >&) (LoaderTXD.cpp:183) ==22737== by 0x7BBCE0: GameData::loadTextureArchive(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (GameData.cpp:372) ==22737== by 0x7BBABA: GameData::loadTXD(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (GameData.cpp:358) ==22737== by 0x7BCA80: GameData::loadModel(unsigned short) (GameData.cpp:466) ==22737== by 0x7DF7BC: GameWorld::createInstance(unsigned short, glm::tvec3<float, (glm::precision)0> const&, glm::tquat<float, (glm::precision)0> const&) (GameWorld.cpp:144) ==22737== by 0x7DF44C: GameWorld::placeItems(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (GameWorld.cpp:120)
2017-09-13 01:14:21 +02:00
~TextureData() {
glDeleteTextures(1, &texName);
}
2016-09-09 22:13:21 +02:00
GLuint getName() const {
return texName;
}
const glm::ivec2& getSize() const {
return size;
}
bool isTransparent() const {
return hasAlpha;
}
typedef std::shared_ptr<TextureData> Handle;
static Handle create(GLuint name, const glm::ivec2& size,
bool transparent) {
return Handle(new TextureData(name, size, transparent));
}
private:
2016-09-09 22:13:21 +02:00
GLuint texName;
glm::ivec2 size;
bool hasAlpha;
};
using TextureArchive = std::map<std::string, TextureData::Handle>;