fixed a bug that MaterialParameters didn't support dynamic UBO/SSBO.

This commit is contained in:
2021-09-15 19:17:56 +08:00
parent d82534b168
commit 72351af025
14 changed files with 175 additions and 123 deletions

View File

@@ -37,7 +37,7 @@ constexpr uint16 index_data[INDEX_COUNT]=
0,3,2
};
class TestApp:public VulkanApplicationFramework
class TestApp:public CameraAppFramework
{
private:
@@ -65,30 +65,26 @@ private:
IndexBuffer * index_buffer =nullptr;
SceneNode render_root;
RenderList render_list;
RenderList *render_list =nullptr;
public:
~TestApp()
{
SAFE_CLEAR(index_buffer);
SAFE_CLEAR(tex_coord_buffer);
SAFE_CLEAR(vertex_buffer);
SAFE_CLEAR(sampler_nearest);
SAFE_CLEAR(sampler_linear);
SAFE_CLEAR(render_list);
}
private:
bool InitVBO()
{
vertex_buffer =device->CreateVAB(VF_VEC2,VERTEX_COUNT,vertex_data);
vertex_buffer =db->CreateVAB(VF_VEC2,VERTEX_COUNT,vertex_data);
if(!vertex_buffer)return(false);
tex_coord_buffer=device->CreateVAB(VF_VEC2,VERTEX_COUNT,tex_coord_data);
tex_coord_buffer=db->CreateVAB(VF_VEC2,VERTEX_COUNT,tex_coord_data);
if(!tex_coord_buffer)return(false);
index_buffer =device->CreateIBO16(INDEX_COUNT,index_data);
index_buffer =db->CreateIBO16(INDEX_COUNT,index_data);
if(!index_buffer)return(false);
return(true);
@@ -103,6 +99,8 @@ private:
render_obj->Set(VAN::TexCoord,tex_coord_buffer);
render_obj->Set(index_buffer);
render_list=new RenderList(device);
return(true);
}
@@ -126,7 +124,7 @@ private:
sampler_create_info.borderColor = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK;
sampler_create_info.unnormalizedCoordinates = false;
return device->CreateSampler(&sampler_create_info);
return db->CreateSampler(&sampler_create_info);
}
bool InitTexture()
@@ -151,8 +149,8 @@ private:
pipeline_data=GetPipelineData(InlinePipeline::Solid2D);
if(!pipeline_data)return(false);
if(!InitMaterial(&mp_normal,OS_TEXT("res/material/Texture2DPC")))return(false);
if(!InitMaterial(&mp_hq, OS_TEXT("res/material/Texture2DHQPC")))return(false);
if(!InitMaterial(&mp_normal,OS_TEXT("res/material/Texture2D")))return(false);
if(!InitMaterial(&mp_hq, OS_TEXT("res/material/Texture2DHQ")))return(false);
return(true);
}
@@ -162,6 +160,17 @@ private:
mir->material_instance=db->CreateMaterialInstance(mp->material);
if(!mir->material_instance)return(false);
{
MaterialParameters *mp_global=mir->material_instance->GetMP(DescriptorSetType::Global);
if(!mp_global)
return(false);
if(!mp_global->BindUBO("g_camera",GetCameraInfoBuffer()))return(false);
mp_global->Update();
}
{
MaterialParameters *mp_texture=mir->material_instance->GetMP(DescriptorSetType::Value);
@@ -195,9 +204,6 @@ private:
Add(&mir_nearest_hq,translate(-1, 0,0));
Add(&mir_linear_hq, translate( 0, 0,0));
render_root.RefreshMatrix();
render_list.Expend(&render_root);
BuildCommandBuffer(&render_list);
return(true);
}
@@ -205,7 +211,7 @@ public:
bool Init()
{
if(!VulkanApplicationFramework::Init(SCREEN_SIZE,SCREEN_SIZE))
if(!CameraAppFramework::Init(SCREEN_SIZE,SCREEN_SIZE))
return(false);
if(!InitVBO())
@@ -236,7 +242,15 @@ public:
void Resize(int w,int h) override
{
BuildCommandBuffer(&render_list);
VulkanApplicationFramework::BuildCommandBuffer(render_list);
}
void BuildCommandBuffer(uint32_t index) override
{
render_root.RefreshMatrix();
render_list->Expend(camera->info,&render_root);
VulkanApplicationFramework::BuildCommandBuffer(index,render_list);
}
};//class TestApp:public VulkanApplicationFramework