SceneDB add CreateMaterialInstance,CreateRenderable,CreateTextRenderable functions.

This commit is contained in:
hyzboy 2020-08-08 22:54:09 +08:00
parent 90314c4b97
commit 38a365306d
6 changed files with 71 additions and 30 deletions

View File

@ -55,16 +55,6 @@ public:
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()
{
material=shader_manage->CreateMaterial( OS_TEXT("res/shader/DrawRect2D.vert"),
@ -124,7 +114,17 @@ private:
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;
TextLayoutAttributes tla;
@ -135,10 +135,6 @@ private:
tla.char_layout_attr=&cla;
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(&tla);
tl_engine.SetTextDirection(0);
@ -146,12 +142,17 @@ private:
tl_engine.SetMaxWidth(0);
tl_engine.SetMaxHeight(0);
if(!tl_engine.Init())
return(false);
return tl_engine.Init();
}
bool InitTextRenderable()
{
UTF16String str;
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);
}
@ -162,9 +163,6 @@ public:
if(!VulkanApplicationFramework::Init(SCREEN_WIDTH,SCREEN_HEIGHT))
return(false);
if(!InitTileFont())
return(false);
if(!InitUBO())
return(false);
@ -174,6 +172,12 @@ public:
if(!InitPipeline())
return(false);
if(!InitTileFont())
return(false);
if(!InitTextLayoutEngine())
return(false);
if(!InitTextRenderable())
return(false);

View File

@ -190,15 +190,13 @@ private:
{
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);
tex_coord_buffer=db->CreateVAB(VAF_VEC4,tile_count,tex_coord_data);
render_obj->Set("Vertex",vertex_buffer);
render_obj->Set("TexCoord",tex_coord_buffer);
db->Add(render_obj);
}
bool InitPipeline()

View File

@ -58,8 +58,8 @@ private:
if(!material)
return(false);
render_obj=material->CreateRenderable(VERTEX_COUNT);
material_instance=material->CreateInstance();
render_obj=db->CreateRenderable(material,VERTEX_COUNT);
material_instance=db->CreateMaterialInstance(material);
texture=vulkan::CreateTextureFromFile(device,OS_TEXT("res/image/lena.Tex2D"));
@ -70,9 +70,7 @@ private:
material_instance->Update();
db->Add(material);
db->Add(material_instance);
db->Add(texture);
db->Add(render_obj);
return(true);
}

View File

@ -11,6 +11,7 @@
#include<hgl/graph/vulkan/VKMaterialInstance.h>
#include<hgl/graph/VertexAttribData.h>
#include<hgl/graph/RenderableInstance.h>
#include<hgl/graph/font/TextRenderable.h>
#include<hgl/type/ResManage.h>
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 *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);

View File

@ -41,7 +41,7 @@ protected:
public:
Renderable(const VertexShaderModule *,const uint32_t dc);
Renderable(const VertexShaderModule *,const uint32_t dc=0);
virtual ~Renderable();
const uint GetRefCount()const{return ref_count;}

View File

@ -50,6 +50,42 @@ namespace hgl
rm_buffers.Add(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)
{