update examples.
This commit is contained in:
parent
a0a9c9b127
commit
e76234a01a
@ -8,17 +8,14 @@
|
|||||||
#include<hgl/filesystem/FileSystem.h>
|
#include<hgl/filesystem/FileSystem.h>
|
||||||
#include<hgl/graph/InlineGeometry.h>
|
#include<hgl/graph/InlineGeometry.h>
|
||||||
#include<hgl/graph/vulkan/VKDatabase.h>
|
#include<hgl/graph/vulkan/VKDatabase.h>
|
||||||
#include<hgl/graph/RenderableInstance.h>
|
#include<hgl/graph/vulkan/VKRenderableInstance.h>
|
||||||
#include<hgl/graph/RenderList.h>
|
#include<hgl/graph/RenderList.h>
|
||||||
|
|
||||||
using namespace hgl;
|
using namespace hgl;
|
||||||
using namespace hgl::graph;
|
using namespace hgl::graph;
|
||||||
|
|
||||||
bool SaveToFile(const OSString &filename,VK_NAMESPACE::PipelineCreater *pc);
|
constexpr uint32_t SCREEN_WIDTH=256;
|
||||||
bool LoadFromFile(const OSString &filename,VK_NAMESPACE::PipelineCreater *pc);
|
constexpr uint32_t SCREEN_HEIGHT=256;
|
||||||
|
|
||||||
constexpr uint32_t SCREEN_WIDTH=128;
|
|
||||||
constexpr uint32_t SCREEN_HEIGHT=128;
|
|
||||||
|
|
||||||
static Vector4f color(1,1,0,1);
|
static Vector4f color(1,1,0,1);
|
||||||
|
|
||||||
@ -47,16 +44,17 @@ private:
|
|||||||
|
|
||||||
bool InitMaterial()
|
bool InitMaterial()
|
||||||
{
|
{
|
||||||
material=shader_manage->CreateMaterial(OS_TEXT("res/shader/OnlyPosition.vert"),
|
material=db->CreateMaterial(OS_TEXT("res/material/PureColor2D"));
|
||||||
OS_TEXT("res/shader/FlatColor.frag"));
|
|
||||||
if(!material)
|
|
||||||
return(false);
|
|
||||||
|
|
||||||
material_instance=material->CreateInstance();
|
if(!material)return(false);
|
||||||
|
|
||||||
db->Add(material);
|
material_instance=db->CreateMaterialInstance(material);
|
||||||
db->Add(material_instance);
|
|
||||||
return(true);
|
if(!material_instance)return(false);
|
||||||
|
|
||||||
|
pipeline=CreatePipeline(material,OS_TEXT("res/pipeline/solid2d"),Prim::Fan);
|
||||||
|
|
||||||
|
return pipeline;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreateRenderObject()
|
void CreateRenderObject()
|
||||||
@ -96,7 +94,7 @@ private:
|
|||||||
|
|
||||||
vulkan::Buffer *CreateUBO(const AnsiString &name,const VkDeviceSize size,void *data)
|
vulkan::Buffer *CreateUBO(const AnsiString &name,const VkDeviceSize size,void *data)
|
||||||
{
|
{
|
||||||
vulkan::Buffer *ubo=device->CreateUBO(size,data);
|
vulkan::Buffer *ubo=db->CreateUBO(size,data);
|
||||||
|
|
||||||
if(!ubo)
|
if(!ubo)
|
||||||
return(nullptr);
|
return(nullptr);
|
||||||
@ -128,25 +126,11 @@ private:
|
|||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool InitPipeline()
|
|
||||||
{
|
|
||||||
AutoDelete<vulkan::PipelineCreater>
|
|
||||||
pipeline_creater=new vulkan::PipelineCreater(device,material,sc_render_target);
|
|
||||||
pipeline_creater->CloseCullFace();
|
|
||||||
pipeline_creater->Set(Prim::Fan);
|
|
||||||
|
|
||||||
pipeline=pipeline_creater->Create();
|
|
||||||
if(!pipeline)return(false);
|
|
||||||
|
|
||||||
db->Add(pipeline);
|
|
||||||
return(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool InitScene()
|
bool InitScene()
|
||||||
{
|
{
|
||||||
render_root.Add(db->CreateRenderableInstance(pipeline,material_instance,ro_rectangle));
|
render_root.Add(db->CreateRenderableInstance(ro_rectangle, material_instance,pipeline));
|
||||||
render_root.Add(db->CreateRenderableInstance(pipeline,material_instance,ro_round_rectangle));
|
render_root.Add(db->CreateRenderableInstance(ro_round_rectangle,material_instance,pipeline));
|
||||||
render_root.Add(db->CreateRenderableInstance(pipeline,material_instance,ro_circle));
|
render_root.Add(db->CreateRenderableInstance(ro_circle, material_instance,pipeline));
|
||||||
|
|
||||||
render_root.ExpendToList(&render_list);
|
render_root.ExpendToList(&render_list);
|
||||||
BuildCommandBuffer(&render_list);
|
BuildCommandBuffer(&render_list);
|
||||||
@ -168,9 +152,6 @@ public:
|
|||||||
if(!InitUBO())
|
if(!InitUBO())
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
if(!InitPipeline())
|
|
||||||
return(false);
|
|
||||||
|
|
||||||
if(!InitScene())
|
if(!InitScene())
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
|
@ -4,7 +4,6 @@
|
|||||||
#include<hgl/filesystem/FileSystem.h>
|
#include<hgl/filesystem/FileSystem.h>
|
||||||
#include<hgl/graph/InlineGeometry.h>
|
#include<hgl/graph/InlineGeometry.h>
|
||||||
#include<hgl/graph/vulkan/VKDatabase.h>
|
#include<hgl/graph/vulkan/VKDatabase.h>
|
||||||
#include<hgl/graph/RenderableInstance.h>
|
|
||||||
#include<hgl/graph/RenderList.h>
|
#include<hgl/graph/RenderList.h>
|
||||||
|
|
||||||
using namespace hgl;
|
using namespace hgl;
|
||||||
@ -36,22 +35,17 @@ private:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
bool InitMaterial(MDP *mdp,const OSString &vs,const OSString &fs)
|
|
||||||
|
bool InitMDP(MDP *mdp,const Prim primitive,const OSString &mtl_name)
|
||||||
{
|
{
|
||||||
mdp->material=shader_manage->CreateMaterial(vs,fs);
|
mdp->material=db->CreateMaterial(mtl_name);
|
||||||
|
if(!mdp->material)return(false);
|
||||||
|
|
||||||
if(!mdp->material)
|
mdp->material_instance=db->CreateMaterialInstance(mdp->material);
|
||||||
return(false);
|
if(!mdp->material_instance)return(false);
|
||||||
|
|
||||||
mdp->material_instance=mdp->material->CreateInstance();
|
mdp->pipeline=CreatePipeline(mdp->material_instance,OS_TEXT("res/pipeline/solid2d"),primitive);
|
||||||
|
|
||||||
db->Add(mdp->material);
|
|
||||||
db->Add(mdp->material_instance);
|
|
||||||
return(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool InitUBO(MDP *mdp)
|
|
||||||
{
|
|
||||||
if(!mdp->material_instance->BindUBO("world",GetCameraMatrixBuffer()))
|
if(!mdp->material_instance->BindUBO("world",GetCameraMatrixBuffer()))
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
@ -59,43 +53,26 @@ private:
|
|||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool InitPipeline(MDP *mdp,const Prim primitive)
|
void Add(vulkan::Renderable *r,MDP &mdp)
|
||||||
{
|
{
|
||||||
AutoDelete<vulkan::PipelineCreater>
|
auto ri=db->CreateRenderableInstance(r,mdp.material_instance,mdp.pipeline);
|
||||||
pipeline_creater=new vulkan::PipelineCreater(device,mdp->material,sc_render_target);
|
|
||||||
pipeline_creater->CloseCullFace();
|
|
||||||
pipeline_creater->Set(primitive);
|
|
||||||
|
|
||||||
mdp->pipeline=pipeline_creater->Create();
|
render_root.Add(ri);
|
||||||
|
|
||||||
if(!mdp->pipeline)
|
|
||||||
return(false);
|
|
||||||
|
|
||||||
db->Add(mdp->pipeline);
|
|
||||||
return(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool InitMDP(MDP *mdp,const Prim primitive,const OSString &vs,const OSString &fs)
|
void Add(vulkan::Renderable *r,MDP &mdp,const Matrix4f &mat)
|
||||||
{
|
{
|
||||||
if(!InitMaterial(mdp,vs,fs))
|
auto ri=db->CreateRenderableInstance(r,mdp.material_instance,mdp.pipeline);
|
||||||
return(false);
|
|
||||||
|
|
||||||
if(!InitUBO(mdp))
|
render_root.Add(ri,mat);
|
||||||
return(false);
|
|
||||||
|
|
||||||
if(!InitPipeline(mdp,primitive))
|
|
||||||
return(false);
|
|
||||||
|
|
||||||
return(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool InitScene()
|
bool InitScene()
|
||||||
{
|
{
|
||||||
render_root.Add(db->CreateRenderableInstance(m2d.pipeline,m2d.material_instance,ro_round_rectangle));
|
Add(ro_round_rectangle,m2d);
|
||||||
|
Add(ro_plane_grid[0],m3d);
|
||||||
render_root.Add(db->CreateRenderableInstance(m3d.pipeline,m3d.material_instance,ro_plane_grid[0]));
|
Add(ro_plane_grid[1],m3d,rotate(HGL_RAD_90,0,1,0));
|
||||||
render_root.Add(db->CreateRenderableInstance(m3d.pipeline,m3d.material_instance,ro_plane_grid[1]),rotate(HGL_RAD_90,0,1,0));
|
Add(ro_plane_grid[2],m3d,rotate(HGL_RAD_90,1,0,0));
|
||||||
render_root.Add(db->CreateRenderableInstance(m3d.pipeline,m3d.material_instance,ro_plane_grid[2]),rotate(HGL_RAD_90,1,0,0));
|
|
||||||
|
|
||||||
render_root.RefreshMatrix();
|
render_root.RefreshMatrix();
|
||||||
render_root.ExpendToList(&render_list);
|
render_root.ExpendToList(&render_list);
|
||||||
@ -152,12 +129,10 @@ public:
|
|||||||
if(!CameraAppFramework::Init(SCREEN_WIDTH,SCREEN_HEIGHT))
|
if(!CameraAppFramework::Init(SCREEN_WIDTH,SCREEN_HEIGHT))
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
if(!InitMDP(&m3d,Prim::Lines,OS_TEXT("res/shader/PositionColor3D.vert"),
|
if(!InitMDP(&m3d,Prim::Lines,OS_TEXT("res/material/VertexColor3D")))
|
||||||
OS_TEXT("res/shader/VertexColor.frag")))
|
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
if(!InitMDP(&m2d,Prim::Fan, OS_TEXT("res/shader/OnlyPosition.vert"),
|
if(!InitMDP(&m2d,Prim::Fan, OS_TEXT("res/material/PureColor2D")))
|
||||||
OS_TEXT("res/shader/FlatColor.frag")))
|
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -23,8 +23,13 @@ private:
|
|||||||
SceneNode render_root;
|
SceneNode render_root;
|
||||||
RenderList render_list;
|
RenderList render_list;
|
||||||
|
|
||||||
|
struct MDP
|
||||||
|
{
|
||||||
vulkan::Material * material =nullptr;
|
vulkan::Material * material =nullptr;
|
||||||
vulkan::MaterialInstance * material_instance =nullptr;
|
vulkan::MaterialInstance * material_instance =nullptr;
|
||||||
|
vulkan::Pipeline * pipeline =nullptr;
|
||||||
|
}m3d,m2d;
|
||||||
|
|
||||||
vulkan::Buffer * ubo_color =nullptr;
|
vulkan::Buffer * ubo_color =nullptr;
|
||||||
|
|
||||||
vulkan::Renderable *ro_plane_grid,
|
vulkan::Renderable *ro_plane_grid,
|
||||||
@ -40,17 +45,20 @@ private:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
bool InitMaterial()
|
bool InitMDP(MDP *mdp,const Prim primitive,const OSString &mtl_name)
|
||||||
{
|
{
|
||||||
material=shader_manage->CreateMaterial(OS_TEXT("res/shader/OnlyPosition3D.vert"),
|
mdp->material=db->CreateMaterial(mtl_name);
|
||||||
OS_TEXT("res/shader/FlatColor.frag"));
|
if(!mdp->material)return(false);
|
||||||
if(!material)
|
|
||||||
|
mdp->material_instance=db->CreateMaterialInstance(mdp->material);
|
||||||
|
if(!mdp->material_instance)return(false);
|
||||||
|
|
||||||
|
mdp->pipeline=CreatePipeline(mdp->material_instance,OS_TEXT("res/pipeline/solid2d"),primitive);
|
||||||
|
|
||||||
|
if(!mdp->material_instance->BindUBO("world",GetCameraMatrixBuffer()))
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
material_instance=material->CreateInstance();
|
mdp->material_instance->Update();
|
||||||
|
|
||||||
db->Add(material);
|
|
||||||
db->Add(material_instance);
|
|
||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -169,6 +177,20 @@ private:
|
|||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Add(vulkan::Renderable *r,MDP &mdp)
|
||||||
|
{
|
||||||
|
auto ri=db->CreateRenderableInstance(r,mdp.material_instance,mdp.pipeline);
|
||||||
|
|
||||||
|
render_root.Add(ri);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Add(vulkan::Renderable *r,MDP &mdp,const Matrix4f &mat)
|
||||||
|
{
|
||||||
|
auto ri=db->CreateRenderableInstance(r,mdp.material_instance,mdp.pipeline);
|
||||||
|
|
||||||
|
render_root.Add(ri,mat);
|
||||||
|
}
|
||||||
|
|
||||||
bool InitScene()
|
bool InitScene()
|
||||||
{
|
{
|
||||||
render_root.Add(db->CreateRenderableInstance(pipeline_line,material_instance,ro_plane_grid));
|
render_root.Add(db->CreateRenderableInstance(pipeline_line,material_instance,ro_plane_grid));
|
||||||
@ -192,7 +214,10 @@ public:
|
|||||||
if(!CameraAppFramework::Init(SCREEN_WIDTH,SCREEN_HEIGHT))
|
if(!CameraAppFramework::Init(SCREEN_WIDTH,SCREEN_HEIGHT))
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
if(!InitMaterial())
|
if(!InitMDP(&m3d,Prim::Lines,OS_TEXT("res/material/VertexColor3D")))
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
if(!InitMDP(&m2d,Prim::Fan, OS_TEXT("res/material/PureColor2D")))
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
CreateRenderObject();
|
CreateRenderObject();
|
||||||
|
2
res
2
res
@ -1 +1 @@
|
|||||||
Subproject commit 8bcb5c9e782fbe37c735ac7757a08a568a3f9eee
|
Subproject commit 720c695a76e17d9babc78bafc17790c28f6d8ae1
|
Loading…
x
Reference in New Issue
Block a user