to improve create program, that are RenderPass and Framebuffer
This commit is contained in:
@@ -42,17 +42,11 @@ CreateProject(13.DrawTile DrawTile.cpp)
|
||||
|
||||
CreateProject(14.DrawText DrawText.cpp)
|
||||
|
||||
IF(SUPPORT_QT_VULKAN)
|
||||
include(QtCommon)
|
||||
CreateQtProject(14.VulkanQT VulkanQtApp.cpp
|
||||
QtVulkanWindow.cpp
|
||||
QtVulkanWindow.h
|
||||
QtVulkanMainWindow.h
|
||||
QtVulkanMainWindow.cpp)
|
||||
ENDIF(SUPPORT_QT_VULKAN)
|
||||
CreateProject(15.OffscreenRender OffscreenRender.cpp)
|
||||
|
||||
|
||||
#CreateProject(12.PBRBasic PBRBasic.cpp)
|
||||
#CreateProject(12.Deferred Deferred.cpp)
|
||||
#CreateProject(13.DeferredModel DeferredModel.cpp)
|
||||
CreateProject(16.DeferredModel DeferredModel.cpp)
|
||||
#CreateProject(14.AutoMaterial auto_material.cpp)
|
||||
|
||||
|
@@ -4,8 +4,8 @@
|
||||
#include"VulkanAppFramework.h"
|
||||
#include<hgl/filesystem/FileSystem.h>
|
||||
#include<hgl/graph/InlineGeometry.h>
|
||||
#include<hgl/graph/SceneDB.h>
|
||||
#include<hgl/graph/RenderableInstance.h>
|
||||
#include<hgl/graph/vulkan/VKDatabase.h>
|
||||
#include<hgl/graph/vulkan/VKRenderableInstance.h>
|
||||
#include<hgl/graph/RenderList.h>
|
||||
#include<hgl/graph/vulkan/VKTexture.h>
|
||||
#include<hgl/graph/vulkan/VKImageView.h>
|
||||
@@ -70,7 +70,7 @@ private:
|
||||
struct
|
||||
{
|
||||
List<VkAttachmentDescription> desc_list;
|
||||
List<VkAttachmentReference> color_ref_list;
|
||||
VkAttachmentReference *color_ref_list;
|
||||
VkAttachmentReference depth_ref;
|
||||
}attachment;
|
||||
|
||||
@@ -187,23 +187,21 @@ private:
|
||||
gbuffer.image_view_list.Add(gbuffer.texture_list[i]->GetImageView());
|
||||
}
|
||||
|
||||
device->CreateColorAttachmentReference(gbuffer.attachment.color_ref_list,0,3);
|
||||
device->CreateDepthAttachmentReference(&gbuffer.attachment.depth_ref,3);
|
||||
gbuffer.attachment.color_ref_list=new VkAttachmentReference[3];
|
||||
|
||||
if(!device->CreateAttachment( gbuffer.attachment.desc_list,
|
||||
gbuffer.gbuffer_format_list,
|
||||
gbuffer.depth->GetFormat()))
|
||||
vulkan::CreateColorAttachmentReference(gbuffer.attachment.color_ref_list,3);
|
||||
vulkan::CreateDepthAttachmentReference(&gbuffer.attachment.depth_ref);
|
||||
|
||||
if(!vulkan::CreateAttachment( gbuffer.attachment.desc_list,
|
||||
gbuffer.gbuffer_format_list,
|
||||
gbuffer.depth->GetFormat()))
|
||||
return(false);
|
||||
|
||||
VkSubpassDescription desc;
|
||||
|
||||
device->CreateSubpassDescription(desc,
|
||||
gbuffer.attachment.color_ref_list,
|
||||
&gbuffer.attachment.depth_ref);
|
||||
vulkan::SubpassDescription desc(gbuffer.attachment.color_ref_list,3,&gbuffer.attachment.depth_ref);
|
||||
|
||||
gbuffer.subpass.desc.Add(desc);
|
||||
|
||||
device->CreateSubpassDependency(gbuffer.subpass.dependency,2); //为啥要2个还不清楚
|
||||
vulkan::CreateSubpassDependency(gbuffer.subpass.dependency,2); //为啥要2个还不清楚
|
||||
|
||||
gbuffer.renderpass=device->CreateRenderPass(gbuffer.attachment.desc_list,
|
||||
gbuffer.subpass.desc,
|
||||
@@ -214,7 +212,7 @@ private:
|
||||
if(!gbuffer.renderpass)
|
||||
return(false);
|
||||
|
||||
gbuffer.framebuffer=vulkan::CreateFramebuffer(device,gbuffer.renderpass,gbuffer.image_view_list,gbuffer.depth->GetImageView());
|
||||
gbuffer.framebuffer=vulkan::CreateFramebuffer(device->GetDevice(),gbuffer.renderpass,gbuffer.image_view_list,gbuffer.depth->GetImageView());
|
||||
|
||||
if(!gbuffer.framebuffer)
|
||||
return(false);
|
||||
@@ -226,15 +224,12 @@ private:
|
||||
|
||||
bool InitSubpass(SubpassParam *sp,const OSString &vs,const OSString &fs)
|
||||
{
|
||||
sp->material=shader_manage->CreateMaterial(vs,fs);
|
||||
sp->material=db->CreateMaterial(vs,fs);
|
||||
|
||||
if(!sp->material)
|
||||
return(false);
|
||||
|
||||
sp->material_instance=sp->material->CreateInstance();
|
||||
|
||||
db->Add(sp->material);
|
||||
db->Add(sp->material_instance);
|
||||
sp->material_instance=db->CreateMaterialInstance(sp->material);
|
||||
return(true);
|
||||
}
|
||||
|
||||
|
48
example/Vulkan/OffscreenRender.cpp
Normal file
48
example/Vulkan/OffscreenRender.cpp
Normal file
@@ -0,0 +1,48 @@
|
||||
#include<hgl/graph/vulkan/VKRenderTarget.h>
|
||||
#include"VulkanAppFramework.h"
|
||||
|
||||
using namespace hgl;
|
||||
using namespace hgl::graph;
|
||||
|
||||
constexpr uint OFFSCREEN_SIZE =512;
|
||||
constexpr uint SCREEN_WIDTH =1024;
|
||||
constexpr uint SCREEN_HEIGHT =(SCREEN_WIDTH/16)*9;
|
||||
|
||||
class OffscreenRender:public VulkanApplicationFramework
|
||||
{
|
||||
vulkan::RenderTarget *os_rt;
|
||||
|
||||
public:
|
||||
|
||||
~OffscreenRender()
|
||||
{
|
||||
}
|
||||
|
||||
bool InitOffscreenRT()
|
||||
{
|
||||
os_rt=vulkan::CreateColorFramebuffer(
|
||||
}
|
||||
|
||||
bool Init()
|
||||
{
|
||||
if(!VulkanApplicationFramework::Init(SCREEN_WIDTH,SCREEN_HEIGHT))
|
||||
return(false);
|
||||
|
||||
if(!InitOffscreenRT())
|
||||
return(false);
|
||||
|
||||
return(true);
|
||||
}
|
||||
};//class OffscreenRender:public VulkanApplicationFramework
|
||||
|
||||
int main(int,char **)
|
||||
{
|
||||
OffscreenRender app;
|
||||
|
||||
if(!app.Init())
|
||||
return(-1);
|
||||
|
||||
while(app.Run());
|
||||
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user