mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-08-13 15:39:08 +00:00
72 lines
2.5 KiB
C++
72 lines
2.5 KiB
C++
#ifndef CTEXTURE_H
|
|
#define CTEXTURE_H
|
|
|
|
#include "CResource.h"
|
|
#include "ETexelFormat.h"
|
|
#include <Common/BasicTypes.h>
|
|
#include <Common/FileIO.h>
|
|
#include <Common/Math/CVector2f.h>
|
|
|
|
#include <GL/glew.h>
|
|
|
|
class CTexture : public CResource
|
|
{
|
|
DECLARE_RESOURCE_TYPE(Texture)
|
|
friend class CTextureDecoder;
|
|
friend class CTextureEncoder;
|
|
|
|
ETexelFormat mTexelFormat{ETexelFormat::RGBA8}; // Format of decoded image data
|
|
ETexelFormat mSourceTexelFormat{ETexelFormat::RGBA8}; // Format of input TXTR file
|
|
uint16 mWidth = 0; // Image width
|
|
uint16 mHeight = 0; // Image height
|
|
uint32 mNumMipMaps = 0; // The number of mipmaps this texture has
|
|
uint32 mLinearSize = 0; // The size of the top level mipmap, in bytes
|
|
|
|
bool mEnableMultisampling = false; // Whether multisample should be enabled (if this texture is a render target).
|
|
bool mBufferExists = false; // Indicates whether image data buffer has valid data
|
|
uint8 *mpImgDataBuffer = nullptr; // Pointer to image data buffer
|
|
uint32 mImgDataSize = 0; // Size of image data buffer
|
|
|
|
bool mGLBufferExists = false; // Indicates whether GL buffer has valid data
|
|
GLuint mTextureID = 0; // ID for texture GL buffer
|
|
|
|
public:
|
|
explicit CTexture(CResourceEntry *pEntry = nullptr);
|
|
CTexture(uint32 Width, uint32 Height);
|
|
~CTexture();
|
|
|
|
bool BufferGL();
|
|
void Bind(uint32 GLTextureUnit);
|
|
void Resize(uint32 Width, uint32 Height);
|
|
float ReadTexelAlpha(const CVector2f& rkTexCoord);
|
|
bool WriteDDS(IOutputStream& rOut);
|
|
|
|
// Accessors
|
|
ETexelFormat TexelFormat() const { return mTexelFormat; }
|
|
ETexelFormat SourceTexelFormat() const { return mSourceTexelFormat; }
|
|
uint32 Width() const { return (uint32) mWidth; }
|
|
uint32 Height() const { return (uint32) mHeight; }
|
|
uint32 NumMipMaps() const { return mNumMipMaps; }
|
|
GLuint TextureID() const { return mTextureID; }
|
|
|
|
void SetMultisamplingEnabled(bool Enable)
|
|
{
|
|
if (mEnableMultisampling != Enable)
|
|
DeleteBuffers();
|
|
|
|
mEnableMultisampling = Enable;
|
|
}
|
|
|
|
// Static
|
|
static uint32 FormatBPP(ETexelFormat Format);
|
|
|
|
// Private
|
|
private:
|
|
void CalcLinearSize();
|
|
uint32 CalcTotalSize();
|
|
void CopyGLBuffer();
|
|
void DeleteBuffers();
|
|
};
|
|
|
|
#endif // CTEXTURE_H
|