SceneDB add CreateMaterialInstance,CreateRenderable,CreateTextRenderable functions.
This commit is contained in:
parent
90314c4b97
commit
38a365306d
@ -55,16 +55,6 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
bool InitTileFont()
|
|
||||||
{
|
|
||||||
Font chs_fnt(OS_TEXT("微软雅黑"),0,CHAR_BITMAP_SIZE);
|
|
||||||
|
|
||||||
font_source=AcquireFontSource(chs_fnt);
|
|
||||||
|
|
||||||
tile_font=device->CreateTileFont(font_source);
|
|
||||||
return(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool InitMaterial()
|
bool InitMaterial()
|
||||||
{
|
{
|
||||||
material=shader_manage->CreateMaterial( OS_TEXT("res/shader/DrawRect2D.vert"),
|
material=shader_manage->CreateMaterial( OS_TEXT("res/shader/DrawRect2D.vert"),
|
||||||
@ -124,7 +114,17 @@ private:
|
|||||||
return pipeline;
|
return pipeline;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool InitTextRenderable()
|
bool InitTileFont()
|
||||||
|
{
|
||||||
|
Font chs_fnt(OS_TEXT("微软雅黑"),0,CHAR_BITMAP_SIZE);
|
||||||
|
|
||||||
|
font_source=AcquireFontSource(chs_fnt);
|
||||||
|
|
||||||
|
tile_font=device->CreateTileFont(font_source);
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool InitTextLayoutEngine()
|
||||||
{
|
{
|
||||||
CharLayoutAttr cla;
|
CharLayoutAttr cla;
|
||||||
TextLayoutAttributes tla;
|
TextLayoutAttributes tla;
|
||||||
@ -135,10 +135,6 @@ private:
|
|||||||
tla.char_layout_attr=&cla;
|
tla.char_layout_attr=&cla;
|
||||||
tla.line_gap=0.2f;
|
tla.line_gap=0.2f;
|
||||||
|
|
||||||
text_render_obj=new TextRenderable(device,material);
|
|
||||||
|
|
||||||
db->Add(text_render_obj);
|
|
||||||
|
|
||||||
tl_engine.Set(tile_font->GetFontSource());
|
tl_engine.Set(tile_font->GetFontSource());
|
||||||
tl_engine.Set(&tla);
|
tl_engine.Set(&tla);
|
||||||
tl_engine.SetTextDirection(0);
|
tl_engine.SetTextDirection(0);
|
||||||
@ -146,12 +142,17 @@ private:
|
|||||||
tl_engine.SetMaxWidth(0);
|
tl_engine.SetMaxWidth(0);
|
||||||
tl_engine.SetMaxHeight(0);
|
tl_engine.SetMaxHeight(0);
|
||||||
|
|
||||||
if(!tl_engine.Init())
|
return tl_engine.Init();
|
||||||
return(false);
|
}
|
||||||
|
|
||||||
|
bool InitTextRenderable()
|
||||||
|
{
|
||||||
UTF16String str;
|
UTF16String str;
|
||||||
|
|
||||||
LoadStringFromTextFile(str,OS_TEXT("res/text/DaoDeBible.txt"));
|
LoadStringFromTextFile(str,OS_TEXT("res/text/DaoDeBible.txt"));
|
||||||
|
|
||||||
|
text_render_obj=db->CreateTextRenderable(material);
|
||||||
|
|
||||||
return(tl_engine.SimpleLayout(text_render_obj,tile_font,str)>0);
|
return(tl_engine.SimpleLayout(text_render_obj,tile_font,str)>0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -162,9 +163,6 @@ public:
|
|||||||
if(!VulkanApplicationFramework::Init(SCREEN_WIDTH,SCREEN_HEIGHT))
|
if(!VulkanApplicationFramework::Init(SCREEN_WIDTH,SCREEN_HEIGHT))
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
if(!InitTileFont())
|
|
||||||
return(false);
|
|
||||||
|
|
||||||
if(!InitUBO())
|
if(!InitUBO())
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
@ -174,6 +172,12 @@ public:
|
|||||||
if(!InitPipeline())
|
if(!InitPipeline())
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
|
if(!InitTileFont())
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
if(!InitTextLayoutEngine())
|
||||||
|
return(false);
|
||||||
|
|
||||||
if(!InitTextRenderable())
|
if(!InitTextRenderable())
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
|
@ -190,15 +190,13 @@ private:
|
|||||||
{
|
{
|
||||||
const int tile_count=tile_list.GetCount();
|
const int tile_count=tile_list.GetCount();
|
||||||
|
|
||||||
render_obj=material->CreateRenderable(tile_count);
|
render_obj=db->CreateRenderable(material,tile_count);
|
||||||
|
|
||||||
vertex_buffer =db->CreateVAB(VAF_VEC4,tile_count,vertex_data);
|
vertex_buffer =db->CreateVAB(VAF_VEC4,tile_count,vertex_data);
|
||||||
tex_coord_buffer=db->CreateVAB(VAF_VEC4,tile_count,tex_coord_data);
|
tex_coord_buffer=db->CreateVAB(VAF_VEC4,tile_count,tex_coord_data);
|
||||||
|
|
||||||
render_obj->Set("Vertex",vertex_buffer);
|
render_obj->Set("Vertex",vertex_buffer);
|
||||||
render_obj->Set("TexCoord",tex_coord_buffer);
|
render_obj->Set("TexCoord",tex_coord_buffer);
|
||||||
|
|
||||||
db->Add(render_obj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool InitPipeline()
|
bool InitPipeline()
|
||||||
|
@ -58,8 +58,8 @@ private:
|
|||||||
if(!material)
|
if(!material)
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
render_obj=material->CreateRenderable(VERTEX_COUNT);
|
render_obj=db->CreateRenderable(material,VERTEX_COUNT);
|
||||||
material_instance=material->CreateInstance();
|
material_instance=db->CreateMaterialInstance(material);
|
||||||
|
|
||||||
texture=vulkan::CreateTextureFromFile(device,OS_TEXT("res/image/lena.Tex2D"));
|
texture=vulkan::CreateTextureFromFile(device,OS_TEXT("res/image/lena.Tex2D"));
|
||||||
|
|
||||||
@ -70,9 +70,7 @@ private:
|
|||||||
material_instance->Update();
|
material_instance->Update();
|
||||||
|
|
||||||
db->Add(material);
|
db->Add(material);
|
||||||
db->Add(material_instance);
|
|
||||||
db->Add(texture);
|
db->Add(texture);
|
||||||
db->Add(render_obj);
|
|
||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
#include<hgl/graph/vulkan/VKMaterialInstance.h>
|
#include<hgl/graph/vulkan/VKMaterialInstance.h>
|
||||||
#include<hgl/graph/VertexAttribData.h>
|
#include<hgl/graph/VertexAttribData.h>
|
||||||
#include<hgl/graph/RenderableInstance.h>
|
#include<hgl/graph/RenderableInstance.h>
|
||||||
|
#include<hgl/graph/font/TextRenderable.h>
|
||||||
#include<hgl/type/ResManage.h>
|
#include<hgl/type/ResManage.h>
|
||||||
namespace hgl
|
namespace hgl
|
||||||
{
|
{
|
||||||
@ -86,7 +87,11 @@ namespace hgl
|
|||||||
vulkan::IndexBuffer *CreateIBO16(uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateIBO(VK_INDEX_TYPE_UINT16,count,nullptr,sharing_mode);}
|
vulkan::IndexBuffer *CreateIBO16(uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateIBO(VK_INDEX_TYPE_UINT16,count,nullptr,sharing_mode);}
|
||||||
vulkan::IndexBuffer *CreateIBO32(uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateIBO(VK_INDEX_TYPE_UINT32,count,nullptr,sharing_mode);}
|
vulkan::IndexBuffer *CreateIBO32(uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateIBO(VK_INDEX_TYPE_UINT32,count,nullptr,sharing_mode);}
|
||||||
|
|
||||||
RenderableInstance * CreateRenderableInstance(vulkan::Pipeline *p,vulkan::MaterialInstance *mi,vulkan::Renderable *r);
|
vulkan::MaterialInstance *CreateMaterialInstance(vulkan::Material *);
|
||||||
|
vulkan::Renderable *CreateRenderable(vulkan::Material *,const uint32_t vertex_count=0);
|
||||||
|
TextRenderable * CreateTextRenderable(vulkan::Material *);
|
||||||
|
|
||||||
|
RenderableInstance *CreateRenderableInstance(vulkan::Pipeline *p,vulkan::MaterialInstance *mi,vulkan::Renderable *r);
|
||||||
|
|
||||||
vulkan::Sampler *CreateSampler(VkSamplerCreateInfo *sci=nullptr);
|
vulkan::Sampler *CreateSampler(VkSamplerCreateInfo *sci=nullptr);
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ protected:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
Renderable(const VertexShaderModule *,const uint32_t dc);
|
Renderable(const VertexShaderModule *,const uint32_t dc=0);
|
||||||
virtual ~Renderable();
|
virtual ~Renderable();
|
||||||
|
|
||||||
const uint GetRefCount()const{return ref_count;}
|
const uint GetRefCount()const{return ref_count;}
|
||||||
|
@ -50,6 +50,42 @@ namespace hgl
|
|||||||
rm_buffers.Add(buf);
|
rm_buffers.Add(buf);
|
||||||
return(buf);
|
return(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vulkan::MaterialInstance *SceneDB::CreateMaterialInstance(vulkan::Material *mtl)
|
||||||
|
{
|
||||||
|
if(!mtl)return(nullptr);
|
||||||
|
|
||||||
|
vulkan::MaterialInstance *mi=mtl->CreateInstance();
|
||||||
|
|
||||||
|
if(mi)
|
||||||
|
Add(mi);
|
||||||
|
|
||||||
|
return mi;
|
||||||
|
}
|
||||||
|
|
||||||
|
vulkan::Renderable *SceneDB::CreateRenderable(vulkan::Material *mtl,const uint32_t vertex_count)
|
||||||
|
{
|
||||||
|
if(!mtl)return(nullptr);
|
||||||
|
|
||||||
|
vulkan::Renderable *ro=mtl->CreateRenderable(vertex_count);
|
||||||
|
|
||||||
|
if(ro)
|
||||||
|
Add(ro);
|
||||||
|
|
||||||
|
return ro;
|
||||||
|
}
|
||||||
|
|
||||||
|
TextRenderable *SceneDB::CreateTextRenderable(vulkan::Material *mtl)
|
||||||
|
{
|
||||||
|
if(!mtl)return(nullptr);
|
||||||
|
|
||||||
|
TextRenderable *tr=new TextRenderable(device,mtl);
|
||||||
|
|
||||||
|
if(tr)
|
||||||
|
Add(tr);
|
||||||
|
|
||||||
|
return tr;
|
||||||
|
}
|
||||||
|
|
||||||
RenderableInstance *SceneDB::CreateRenderableInstance(vulkan::Pipeline *p,vulkan::MaterialInstance *mi,vulkan::Renderable *r)
|
RenderableInstance *SceneDB::CreateRenderableInstance(vulkan::Pipeline *p,vulkan::MaterialInstance *mi,vulkan::Renderable *r)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user