update TileData

This commit is contained in:
2020-07-24 20:25:30 +08:00
parent 22c30427b3
commit a89f150161
3 changed files with 40 additions and 52 deletions

View File

@@ -3,6 +3,7 @@
#include<hgl/graph/vulkan/VKTexture.h>
#include<hgl/type/Pool.h>
#include<hgl/type/RectScope.h>
VK_NAMESPACE_USING
@@ -10,6 +11,14 @@ namespace hgl
{
namespace graph
{
struct TileObject
{
int col,row; //当前tile在整个纹理中的tile位置
RectScope2d uv_pixel; //以象素为单位的tile位置和尺寸
RectScope2d uv_float; //以浮点为单位的tile位置和尺寸
};//struct TileObject
/**
* TileData是一种处理大量等同尺寸及格式贴图的管理机制程序会自动根据显卡最大贴图处理能力来创建尽可能符合需求的贴图。(注Tile的大小不必符合2次幂)
* Tile的增加或删除程序会自动排序尽可能小的减少I/O消耗。
@@ -18,25 +27,13 @@ namespace hgl
{
Device *device;
public:
struct Object
{
int col,row;
double left,top;
double fl,ft,fw,fh;
int width,height;
};//struct Object
protected:
vulkan::Buffer *tile_buffer; ///<Tile暂存缓冲区
Texture2D *tile_texture; ///<TileData所用的纹理对象
ObjectPool<TileData::Object> to_pool; ///<Tile对象池
ObjectPool<TileObject> to_pool; ///<Tile对象池
uint tile_width,tile_height; ///<Tile的宽和高
uint32_t tile_bytes; ///<一个tile字节数
@@ -45,8 +42,8 @@ namespace hgl
protected:
TileData::Object *FindSpace(); ///<寻找一个空位
bool WriteTile(TileData::Object *,const void *,const uint,const int,const int); ///<写入一个Tile数据
TileObject *FindSpace(); ///<寻找一个空位
bool WriteTile(TileObject *,const void *,const uint,const int,const int); ///<写入一个Tile数据
public:
@@ -63,11 +60,11 @@ namespace hgl
TileData(Device *,Texture2D *,const uint tw,const uint th);
virtual ~TileData();
TileData::Object *Add(const void *,const uint,const int=-1,const int=-1); ///<增加一个Tile
// TileData::Object *Add(Bitmap2D *,int=-1,int=-1); ///<增加一个Tile
TileObject *Add(const void *,const uint,const int=-1,const int=-1); ///<增加一个Tile
// TileObject *Add(Bitmap2D *,int=-1,int=-1); ///<增加一个Tile
bool Delete(TileData::Object *); ///<删除一个Tile
bool Change(TileData::Object *,const void *,const uint,const int=-1,const int=-1); ///<更改一个Tile的数据内容
bool Delete(TileObject *); ///<删除一个Tile
bool Change(TileObject *,const void *,const uint,const int=-1,const int=-1); ///<更改一个Tile的数据内容
void Clear(); ///<清除Tile数据
};//class TileData
}//namespace graph