fixed OffscreenRender sample.

This commit is contained in:
hyzboy 2021-09-27 14:49:31 +08:00
parent dda6f3c473
commit 1cf6d48d02
3 changed files with 46 additions and 24 deletions

@ -1 +1 @@
Subproject commit dfcc07773caec8b971039cf64ea6650ce868bfe6 Subproject commit 93761c0a4bcd44eda312ff00122a67d9dfa0e011

View File

@ -5,7 +5,7 @@
using namespace hgl; using namespace hgl;
using namespace hgl::graph; using namespace hgl::graph;
constexpr uint OFFSCREEN_SIZE =16; constexpr uint OFFSCREEN_SIZE =256;
constexpr uint SCREEN_WIDTH =1024; constexpr uint SCREEN_WIDTH =1024;
constexpr uint SCREEN_HEIGHT =(SCREEN_WIDTH/16)*9; constexpr uint SCREEN_HEIGHT =(SCREEN_WIDTH/16)*9;
@ -15,14 +15,14 @@ class TestApp:public CameraAppFramework
{ {
Camera cam; Camera cam;
MaterialParameters * material_instance =nullptr; MaterialInstance * material_instance =nullptr;
GPUBuffer * ubo_camera_info =nullptr; GPUBuffer * ubo_camera_info =nullptr;
}; };
struct:public RenderObject struct:public RenderObject
{ {
RenderTarget * render_taget =nullptr; RenderTarget * render_taget =nullptr;
RenderCmdBuffer * command_buffer =nullptr; RenderCmdBuffer * command_buffer =nullptr;
Pipeline * pipeline =nullptr; Pipeline * pipeline =nullptr;
RenderableInstance *renderable_instance =nullptr; RenderableInstance *renderable_instance =nullptr;
@ -48,14 +48,15 @@ class TestApp:public CameraAppFramework
RenderableInstance *renderable_instance =nullptr; RenderableInstance *renderable_instance =nullptr;
SceneNode scene_root; SceneNode scene_root;
RenderList render_list; RenderList *render_list =nullptr;
}cube; }cube;
public: public:
~TestApp() ~TestApp()
{ {
delete os.render_taget; SAFE_CLEAR(cube.render_list);
SAFE_CLEAR(os.render_taget);
} }
bool InitUBO(RenderObject *ro,const VkExtent2D &extent) bool InitUBO(RenderObject *ro,const VkExtent2D &extent)
@ -70,8 +71,17 @@ public:
if(!ro->ubo_camera_info) if(!ro->ubo_camera_info)
return(false); return(false);
ro->material_instance->BindUBO("camera",ro->ubo_camera_info); {
ro->material_instance->Update(); MaterialParameters *mp_global=ro->material_instance->GetMP(DescriptorSetType::Global);
if(!mp_global)
return(false);
if(!mp_global->BindUBO("g_camera",ro->ubo_camera_info))return(false);
mp_global->Update();
}
return(true); return(true);
} }
@ -88,7 +98,7 @@ public:
os.material_instance=db->CreateMaterialInstance(OS_TEXT("res/material/VertexColor2D")); os.material_instance=db->CreateMaterialInstance(OS_TEXT("res/material/VertexColor2D"));
if(!os.material_instance)return(false); if(!os.material_instance)return(false);
os.pipeline=os.render_taget->CreatePipeline(os.material_instance,InlinePipeline::Solid2D,Prim::Fan); os.pipeline=os.render_taget->GetRenderPass()->CreatePipeline(os.material_instance,InlinePipeline::Solid2D,Prim::Fan);
if(!os.pipeline)return(false); if(!os.pipeline)return(false);
if(!InitUBO(&os,os.render_taget->GetExtent())) if(!InitUBO(&os,os.render_taget->GetExtent()))
@ -97,12 +107,12 @@ public:
{ {
CircleCreateInfo cci; CircleCreateInfo cci;
cci.center.Set(OFFSCREEN_SIZE*0.5,OFFSCREEN_SIZE*0.5); cci.center=Vector2f(OFFSCREEN_SIZE*0.5,OFFSCREEN_SIZE*0.5);
cci.radius.Set(OFFSCREEN_SIZE*0.45,OFFSCREEN_SIZE*0.45); cci.radius=Vector2f(OFFSCREEN_SIZE*0.45,OFFSCREEN_SIZE*0.45);
cci.field_count=32; cci.field_count=32;
cci.has_color=true; cci.has_color=true;
cci.center_color.Set(1,1,1,1); cci.center_color=Vector4f(1,1,1,1);
cci.border_color.Set(1,1,1,0); cci.border_color=Vector4f(1,1,1,0);
Renderable *render_obj=CreateRenderableCircle(db,os.material_instance->GetMaterial(),&cci); Renderable *render_obj=CreateRenderableCircle(db,os.material_instance->GetMaterial(),&cci);
if(!render_obj)return(false); if(!render_obj)return(false);
@ -121,18 +131,27 @@ public:
bool InitCube() bool InitCube()
{ {
cube.render_list=new RenderList(device);
cube.material_instance=db->CreateMaterialInstance(OS_TEXT("res/material/TextureMask3D")); cube.material_instance=db->CreateMaterialInstance(OS_TEXT("res/material/TextureMask3D"));
if(!cube.material_instance)return(false); if(!cube.material_instance)return(false);
cube.pipeline=CreatePipeline(cube.material_instance,InlinePipeline::Solid3D); cube.pipeline=CreatePipeline(cube.material_instance,InlinePipeline::Solid3D,Prim::Triangles);
if(!cube.pipeline)return(false); if(!cube.pipeline)return(false);
cube.sampler=db->CreateSampler(); cube.sampler=db->CreateSampler();
if(!cube.sampler)return(false); if(!cube.sampler)return(false);
{
MaterialParameters *mp_texture=cube.material_instance->GetMP(DescriptorSetType::Value);
if(!mp_texture)
return(false);
if(!mp_texture->BindSampler("tex",os.render_taget->GetColorTexture(),cube.sampler))return(false);
cube.material_instance->BindSampler("tex",os.render_taget->GetColorTexture(),cube.sampler); mp_texture->Update();
cube.material_instance->BindUBO("camera",GetCameraInfoBuffer()); }
cube.material_instance->Update();
{ {
CubeCreateInfo cci; CubeCreateInfo cci;
@ -142,13 +161,13 @@ public:
cube.renderable_instance=db->CreateRenderableInstance(render_obj,cube.material_instance,cube.pipeline); cube.renderable_instance=db->CreateRenderableInstance(render_obj,cube.material_instance,cube.pipeline);
cube.scene_root.Add(cube.renderable_instance); cube.scene_root.CreateSubNode(cube.renderable_instance);
} }
camera->pos=Vector4f(5,5,5,1.0);
cube.scene_root.RefreshMatrix(); cube.scene_root.RefreshMatrix();
cube.scene_root.ExpendToList(&cube.render_list); cube.render_list->Expend(GetCameraInfo(),&cube.scene_root);
camera->pos.Set(5,5,5,1.0);
return(true); return(true);
} }
@ -171,7 +190,10 @@ public:
void BuildCommandBuffer(uint32 index) void BuildCommandBuffer(uint32 index)
{ {
VulkanApplicationFramework::BuildCommandBuffer(index,&cube.render_list); cube.scene_root.RefreshMatrix();
cube.render_list->Expend(GetCameraInfo(),&cube.scene_root);
VulkanApplicationFramework::BuildCommandBuffer(index,cube.render_list);
} }
};//class TestApp:public CameraAppFramework };//class TestApp:public CameraAppFramework

2
res

@ -1 +1 @@
Subproject commit 583927299e8c123418552ff126b7bb3f7c634dcd Subproject commit 1ce9f858669c9004f1a170bf996a9d36ccca1cb8