fixed a bug that MaterialParameters didn't support dynamic UBO/SSBO.
This commit is contained in:
@@ -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
|
||||
|
||||
|
Reference in New Issue
Block a user