This commit is contained in:
2016-03-02 18:06:20 +01:00
parent edf481b4d7
commit ffa9d7e607
14 changed files with 306 additions and 19 deletions
+1
View File
@@ -19,6 +19,7 @@ class Resource
protected:
Resource() { }
virtual ~Resource() { }
public:
//Should be thrown in a Resource's constructor if it cannot complete because another resource is still loading.
+71
View File
@@ -0,0 +1,71 @@
#ifndef DDS_h__
#define DDS_h__
#include <cstdint>
#include "../Common.h"
#include "../Core/ResourceManager.h"
#include "Image.h"
// DXT5
class DDS : public Image, public Resource
{
public:
DDS(std::string path);
~DDS();
void FlipY(unsigned char* data, std::size_t rowBytes, std::size_t totalSize, std::size_t numBlocksWide);
private:
static const uint32_t MagicNumber = 0x20534444; // "DDS "
struct Header_t
{
uint32_t Size;
uint32_t Flags;
uint32_t Height;
uint32_t Width;
uint32_t PitchOrLinearSize;
uint32_t Depth;
uint32_t MipMapCount;
uint32_t RESERVED1[11];
struct PixelFormat_t
{
uint32_t Size;
uint32_t Flags;
uint32_t FourCC;
uint32_t RGBBitCount;
uint32_t RBitMask;
uint32_t GBitMask;
uint32_t BBitMask;
uint32_t ABitMask;
} PixelFormat;
uint32_t Caps;
uint32_t Caps2;
uint32_t Caps3;
uint32_t Caps4;
uint32_t RESERVED2;
} m_Header;
struct Block_t
{
struct Alpha_t
{
uint8_t Colors[2];
uint8_t Data[6];
} Alpha;
struct Data_t
{
uint16_t Colors[2];
uint8_t Data[4];
} Data;
};
std::size_t m_NumBlocksWide;
std::size_t m_NumBlocksHigh;
std::size_t m_RowBytes;
void flipBlock(Block_t* block);
};
#endif
+5
View File
@@ -3,6 +3,8 @@
struct Image
{
virtual ~Image() { }
enum class ImageFormat
{
Unknown,
@@ -13,7 +15,10 @@ struct Image
unsigned int Width = 0;
unsigned int Height = 0;
ImageFormat Format = ImageFormat::Unknown;
unsigned int MipMapLevels = 0;
bool Compressed = false;
unsigned char* Data = nullptr;
std::size_t ByteSize = 0;
};
#endif
+2 -1
View File
@@ -1,9 +1,11 @@
#ifndef Texture_h__
#define Texture_h__
#include <boost/filesystem.hpp>
#include "../OpenGL.h"
#include "BaseTexture.h"
#include "PNG.h"
#include "DDS.h"
class Texture : public BaseTexture
{
@@ -18,7 +20,6 @@ public:
void Bind(GLenum textureUnit = GL_TEXTURE0);
GLuint m_Texture = 0;
unsigned char* Data = nullptr;
};