From 9d92ebb8daebe8189cb337a94c234da054364b73 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Tue, 21 Jan 2020 10:48:25 +0800 Subject: [PATCH] update 2 examples --- example/Vulkan/DeferredModel.cpp | 34 +++++++++++++------------- example/Vulkan/InlineGeometryScene.cpp | 11 +++++++++ res/shader/Atomsphere.vert | 14 ++++++++--- res/shader/gbuffer_composition.frag | 16 +++++++++--- res/shader/gbuffer_opaque.vert | 10 +++++++- 5 files changed, 60 insertions(+), 25 deletions(-) diff --git a/example/Vulkan/DeferredModel.cpp b/example/Vulkan/DeferredModel.cpp index e1ef78e6..f900b431 100644 --- a/example/Vulkan/DeferredModel.cpp +++ b/example/Vulkan/DeferredModel.cpp @@ -226,10 +226,10 @@ private: if(!sp->material) return(false); - sp->desc_sets=sp->material->CreateDescriptorSets(); + sp->material_instance=sp->material->CreateInstance(); db->Add(sp->material); - db->Add(sp->desc_sets); + db->Add(sp->material_instance); return(true); } @@ -312,16 +312,16 @@ private: sampler=device->CreateSampler(&sampler_create_info); - InitCameraUBO(sp_gbuffer.desc_sets,sp_gbuffer.material->GetUBO("world")); + InitCameraUBO(sp_gbuffer.material_instance,"world"); - sp_gbuffer.desc_sets->BindSampler(sp_gbuffer.material->GetSampler("TextureColor" ),texture.color, sampler); - sp_gbuffer.desc_sets->BindSampler(sp_gbuffer.material->GetSampler("TextureNormal" ),texture.normal, sampler); - sp_gbuffer.desc_sets->Update(); + sp_gbuffer.material_instance->BindSampler("TextureColor" ,texture.color, sampler); + sp_gbuffer.material_instance->BindSampler("TextureNormal" ,texture.normal, sampler); + sp_gbuffer.material_instance->Update(); - sp_composition.desc_sets->BindSampler(sp_composition.material->GetSampler("GB_Position" ),gbuffer.position, sampler); - sp_composition.desc_sets->BindSampler(sp_composition.material->GetSampler("GB_Normal" ),gbuffer.normal, sampler); - sp_composition.desc_sets->BindSampler(sp_composition.material->GetSampler("GB_Color" ),gbuffer.color, sampler); - sp_composition.desc_sets->Update(); + sp_composition.material_instance->BindSampler("GB_Position" ,gbuffer.position, sampler); + sp_composition.material_instance->BindSampler("GB_Normal" ,gbuffer.normal, sampler); + sp_composition.material_instance->BindSampler("GB_Color" ,gbuffer.color, sampler); + sp_composition.material_instance->Update(); return(true); } @@ -387,12 +387,12 @@ private: bool InitScene(SubpassParam *sp) { CreateRenderObject(sp->material); - render_root.Add(db->CreateRenderableInstance(sp->pipeline_fan,sp->desc_sets,ro_plane),scale(100,100,1)); - render_root.Add(db->CreateRenderableInstance(sp->pipeline_triangles,sp->desc_sets,ro_torus ),translate(0,0,0)); - render_root.Add(db->CreateRenderableInstance(sp->pipeline_triangles,sp->desc_sets,ro_sphere ),scale(20,20,20)); - render_root.Add(db->CreateRenderableInstance(sp->pipeline_triangles,sp->desc_sets,ro_cube ),translate(-30, 0,10)*scale(10,10,10)); - render_root.Add(db->CreateRenderableInstance(sp->pipeline_triangles,sp->desc_sets,ro_cylinder ),translate( 30, 30,10)*scale(1,1,2)); - render_root.Add(db->CreateRenderableInstance(sp->pipeline_triangles,sp->desc_sets,ro_cone ),translate( 0,-30, 0)*scale(1,1,2)); + render_root.Add(db->CreateRenderableInstance(sp->pipeline_fan, sp->material_instance,ro_plane ),scale(100,100,1)); + render_root.Add(db->CreateRenderableInstance(sp->pipeline_triangles,sp->material_instance,ro_torus ),translate(0,0,0)); + render_root.Add(db->CreateRenderableInstance(sp->pipeline_triangles,sp->material_instance,ro_sphere ),scale(20,20,20)); + render_root.Add(db->CreateRenderableInstance(sp->pipeline_triangles,sp->material_instance,ro_cube ),translate(-30, 0,10)*scale(10,10,10)); + render_root.Add(db->CreateRenderableInstance(sp->pipeline_triangles,sp->material_instance,ro_cylinder ),translate( 30, 30,10)*scale(1,1,2)); + render_root.Add(db->CreateRenderableInstance(sp->pipeline_triangles,sp->material_instance,ro_cone ),translate( 0,-30, 0)*scale(1,1,2)); render_root.RefreshMatrix(); render_root.ExpendToList(&render_list); @@ -460,7 +460,7 @@ public: { VulkanApplicationFramework::BuildCommandBuffer( index, sp_composition.pipeline_triangles, - sp_composition.desc_sets, + sp_composition.material_instance, ro_gbc_plane); } };//class TestApp:public CameraAppFramework diff --git a/example/Vulkan/InlineGeometryScene.cpp b/example/Vulkan/InlineGeometryScene.cpp index e837fe8a..c09e412d 100644 --- a/example/Vulkan/InlineGeometryScene.cpp +++ b/example/Vulkan/InlineGeometryScene.cpp @@ -16,6 +16,8 @@ constexpr uint32_t SCREEN_HEIGHT=128; class TestApp:public CameraAppFramework { + Color4f color; + private: SceneNode render_root; @@ -23,6 +25,7 @@ private: vulkan::Material * material =nullptr; vulkan::MaterialInstance * material_instance =nullptr; + vulkan::Buffer * ubo_color =nullptr; vulkan::Renderable *ro_plane_grid, *ro_cube, @@ -127,6 +130,14 @@ private: bool InitUBO() { + color.Set(1,1,1,1); + + ubo_color=device->CreateUBO(sizeof(Vector4f),&color); + + db->Add(ubo_color); + + material_instance->BindUBO("color_material",ubo_color); + if(!InitCameraUBO(material_instance,"world")) return(false); diff --git a/res/shader/Atomsphere.vert b/res/shader/Atomsphere.vert index 6a310bf2..7d80f6bc 100644 --- a/res/shader/Atomsphere.vert +++ b/res/shader/Atomsphere.vert @@ -2,13 +2,21 @@ layout(location = 0) in vec3 Vertex; -layout(binding = 0) uniform WorldMatrix +layout(binding=0) uniform WorldMatrix // hgl/math/Math.h { - mat4 two_dim; + mat4 ortho; + mat4 projection; + mat4 inverse_projection; + mat4 modelview; + mat4 inverse_modelview; + mat4 mvp; - mat3 normal; + mat4 inverse_mvp; + + vec4 view_pos; + vec2 resolution; } world; layout(push_constant) uniform Consts { diff --git a/res/shader/gbuffer_composition.frag b/res/shader/gbuffer_composition.frag index 85454b6e..9563b5ec 100644 --- a/res/shader/gbuffer_composition.frag +++ b/res/shader/gbuffer_composition.frag @@ -1,12 +1,20 @@ #version 450 core -layout(binding = 0) uniform WorldMatrix +layout(binding=0) uniform WorldMatrix // hgl/math/Math.h { mat4 ortho; + mat4 projection; + mat4 inverse_projection; + mat4 modelview; + mat4 inverse_modelview; + mat4 mvp; + mat4 inverse_mvp; + vec4 view_pos; + vec2 resolution; } world; layout(push_constant) uniform Consts { @@ -27,10 +35,10 @@ void main() vec3 pos =texture(GB_Position, FragmentPosition).xyz; vec3 normal =texture(GB_Normal, FragmentPosition).xyz; vec3 color =texture(GB_Color, FragmentPosition).xyz; - + vec3 sun_light_direction=vec3(1,1,1); - + float sun_light_intensity=max(dot(normal,sun_light_direction),0.0); - + FragColor=vec4(color*sun_light_intensity,1.0); } diff --git a/res/shader/gbuffer_opaque.vert b/res/shader/gbuffer_opaque.vert index 5401541c..6f25106c 100644 --- a/res/shader/gbuffer_opaque.vert +++ b/res/shader/gbuffer_opaque.vert @@ -5,13 +5,21 @@ layout(location = 1) in vec2 TexCoord; layout(location = 2) in vec3 Normal; layout(location = 3) in vec3 Tangent; -layout(binding = 0) uniform WorldMatrix +layout(binding=0) uniform WorldMatrix // hgl/math/Math.h { mat4 ortho; + mat4 projection; + mat4 inverse_projection; + mat4 modelview; + mat4 inverse_modelview; + mat4 mvp; + mat4 inverse_mvp; + vec4 view_pos; + vec2 resolution; } world; layout(push_constant) uniform Consts {