SceneDB add CreateMaterialInstance,CreateRenderable,CreateTextRenderable functions.
This commit is contained in:
parent
90314c4b97
commit
38a365306d
@ -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);
|
||||
|
||||
|
@ -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()
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;}
|
||||
|
@ -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)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user