update TileData
This commit is contained in:
@@ -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
|
||||
|
Reference in New Issue
Block a user