ULRE/inc/hgl/graph/TextureData.h
2018-12-08 19:03:35 +08:00

185 lines
5.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef HGL_GRAPH_TEXTURE_DATA_INCLUDE
#define HGL_GRAPH_TEXTURE_DATA_INCLUDE
#include<hgl/graph/TextureFormat.h>
namespace hgl
{
namespace graph
{
/**
* 纹理数据
*/
struct TextureData
{
const TextureFormat * source_format; ///<源始纹理格式
uint video_format; ///<显存格式
bool gen_mipmaps; ///<是否产生mipmaps
void * bitmap; ///<位图数据
uint bitmap_bytes; ///<位图数据字节数
public:
TextureData()=default;
virtual ~TextureData()=default;
uint GetVideoFormat()const
{
return(video_format?video_format:source_format->video_format);
}
uint GetPixelFormat()const
{
return(source_format?source_format->pixel_format:0);
}
bool SetData(size_t this_size,TSF fmt)
{
if(!TextureSourceFormatCheck(fmt))
{
hgl_zero(this,this_size);
return(false);
}
gen_mipmaps=false;
bitmap = nullptr;
bitmap_bytes = 0;
source_format = TextureFormatInfoList + fmt; //原始数据格式
video_format = source_format->video_format; //显存格式
return(true);
}
bool SetData(size_t this_size,void *data,uint size,TSF sf,uint vf)
{
if(data&&!TextureSourceFormatCheck(sf))
{
hgl_zero(this,this_size);
return(false);
}
gen_mipmaps = false;
bitmap = data;
bitmap_bytes = size;
source_format = TextureFormatInfoList + sf; //原始数据格式
video_format = vf ? vf : source_format->video_format; //显存格式
return(true);
}
};//struct TextureData
struct Texture1DData:public TextureData
{
uint length;
public:
Texture1DData()
{
hgl_zero(this, sizeof(Texture1DData));
}
Texture1DData(uint l, TSF fmt)
{
if(!SetData(sizeof(Texture1DData),fmt))return;
length = l;
}
Texture1DData(uint l, void *data, uint size, TSF sf, uint vf)
{
if(!SetData(sizeof(Texture1DData),data,size,sf,vf))return;
length=l;
}
};//struct Texture1DData:public TextureData
struct Texture2DData:public TextureData
{
uint width, height;
public:
Texture2DData()
{
hgl_zero(this, sizeof(Texture2DData));
}
Texture2DData(uint w, uint h, TSF fmt)
{
if(!SetData(sizeof(Texture2DData),fmt))return;
width = w;
height = h;
}
Texture2DData(uint w,uint h,void *data,uint size,TSF sf,uint vf)
{
if(!SetData(sizeof(Texture2DData),data,size,sf,vf))return;
width=w;
height=h;
}
};//struct Texture2DData:public TextureData
using TextureCubeMapData=Texture2DData; //cube map与2d参数一样只是数据长6倍
struct Texture1DArrayData:public TextureData
{
uint length, count;
public:
Texture1DArrayData()
{
hgl_zero(this,sizeof(Texture1DArrayData));
}
Texture1DArrayData(uint l, uint c, TSF fmt)
{
if(!SetData(sizeof(Texture1DArrayData),fmt))return;
length=l;
count=c;
}
Texture1DArrayData(uint l,uint c,void *data,uint size,TSF sf,uint vf)
{
if(!SetData(sizeof(Texture1DArrayData),data,size,sf,vf))return;
length=l;
count=c;
}
};//struct Texture1DArrayData:public TextureData
struct Texture2DArrayData:public TextureData
{
uint width, height, count;
public:
Texture2DArrayData()
{
hgl_zero(this, sizeof(Texture2DArrayData));
}
};//struct Texture2DArrayData:public TextureData
struct Texture3DData:public TextureData
{
uint width, height, depth;
public:
Texture3DData()
{
hgl_zero(this, sizeof(Texture3DData));
}
};//struct Texture3DData:public TextureData
}//namespace graph
}//namespace hgl
#endif//HGL_GRAPH_TEXTURE_DATA_INCLUDE