ES-DE/es-core/src/resources/TextureData.h

71 lines
1.7 KiB
C
Raw Normal View History

//
// TextureData.h
//
// Low-level texture data functions.
//
#pragma once
#ifndef ES_CORE_RESOURCES_TEXTURE_DATA_H
#define ES_CORE_RESOURCES_TEXTURE_DATA_H
2017-11-01 22:21:10 +00:00
#include <mutex>
#include <string>
class TextureResource;
class TextureData
{
public:
TextureData(bool tile);
~TextureData();
// These functions populate mDataRGBA but do not upload the texture to VRAM.
//!!!! Needs to be canonical path. Caller should check for duplicates before calling this.
void initFromPath(const std::string& path);
bool initSVGFromMemory(const unsigned char* fileData, size_t length);
bool initImageFromMemory(const unsigned char* fileData, size_t length);
bool initFromRGBA(const unsigned char* dataRGBA, size_t width, size_t height);
// Read the data into memory if necessary.
bool load();
bool isLoaded();
// Upload the texture to VRAM if necessary and bind.
// Returns true if bound ok or false if either not loaded.
bool uploadAndBind();
// Release the texture from VRAM.
void releaseVRAM();
// Release the texture from conventional RAM.
void releaseRAM();
// Get the amount of VRAM currenty used by this texture.
size_t getVRAMUsage();
size_t width();
size_t height();
float sourceWidth();
float sourceHeight();
void setSourceSize(float width, float height);
bool tiled() { return mTile; }
private:
std::mutex mMutex;
bool mTile;
std::string mPath;
unsigned int mTextureID;
unsigned char* mDataRGBA;
size_t mWidth;
size_t mHeight;
float mSourceWidth;
float mSourceHeight;
bool mScalable;
bool mReloadable;
};
#endif // ES_CORE_RESOURCES_TEXTURE_DATA_H