CreatePipeline functions support InlinePipeline

This commit is contained in:
hyzboy 2020-10-16 12:48:54 +08:00
parent b93925ce5a
commit ccf24106ab
8 changed files with 51 additions and 7 deletions

@ -1 +1 @@
Subproject commit 543cd58d70b60706c58b58ad9189249f27e1a63d
Subproject commit 6113fb00e0a3c8896de4018f554432679fc5fe43

View File

@ -4,6 +4,7 @@
#include"VulkanAppFramework.h"
#include<hgl/graph/vulkan/VKTexture.h>
#include<hgl/graph/vulkan/VKSampler.h>
#include<hgl/graph/vulkan/VKInlinePipeline.h>
#include<hgl/math/Math.h>
using namespace hgl;
@ -62,7 +63,7 @@ private:
material_instance=db->CreateMaterialInstance(OS_TEXT("res/material/Texture2D"));
if(!material_instance)return(false);
pipeline=CreatePipeline(material_instance,OS_TEXT("res/pipeline/solid2d"));
pipeline=CreatePipeline(material_instance,vulkan::InlinePipeline::Solid2D);
if(!pipeline)return(false);
texture=vulkan::CreateTextureFromFile(device,OS_TEXT("res/image/lena.Tex2D"));

View File

@ -269,6 +269,16 @@ public:
public: //pipeline
vulkan::Pipeline *CreatePipeline(vulkan::Material *mtl,const vulkan::InlinePipeline &ip,const Prim &prim=Prim::Triangles,const bool prim_restart=false)
{
return db->CreatePipeline(mtl,sc_render_target,ip,prim,prim_restart);
}
vulkan::Pipeline *CreatePipeline(vulkan::MaterialInstance *mi,const vulkan::InlinePipeline &ip,const Prim &prim=Prim::Triangles,const bool prim_restart=false)
{
return db->CreatePipeline(mi,sc_render_target,ip,prim,prim_restart);
}
vulkan::Pipeline *CreatePipeline(vulkan::Material *mtl,vulkan::PipelineData *pd,const Prim &prim=Prim::Triangles,const bool prim_restart=false)
{
return db->CreatePipeline(mtl,sc_render_target,pd,prim,prim_restart);

View File

@ -59,6 +59,7 @@ class Material;
class MaterialInstance;
class PipelineLayout;
struct PipelineData;
enum class InlinePipeline;
class Pipeline;
class DescriptorSets;
class VertexAttributeBinding;

View File

@ -97,11 +97,13 @@ public: //Material
Material * CreateMaterial(const OSString &);
MaterialInstance * CreateMaterialInstance(Material *);
MaterialInstance * CreateMaterialInstance(const OSString &);
Pipeline * CreatePipeline(Material *, RenderTarget *,PipelineData *, const Prim &prim=Prim::Triangles,const bool prim_restart=false);
Pipeline * CreatePipeline(MaterialInstance *, RenderTarget *,PipelineData *, const Prim &prim=Prim::Triangles,const bool prim_restart=false);
Pipeline * CreatePipeline(Material *, RenderTarget *,const OSString &,const Prim &prim=Prim::Triangles,const bool prim_restart=false);
Pipeline * CreatePipeline(MaterialInstance *, RenderTarget *,const OSString &,const Prim &prim=Prim::Triangles,const bool prim_restart=false);
Pipeline * CreatePipeline(Material *, RenderTarget *,const InlinePipeline &, const Prim &prim=Prim::Triangles,const bool prim_restart=false);
Pipeline * CreatePipeline(MaterialInstance *, RenderTarget *,const InlinePipeline &, const Prim &prim=Prim::Triangles,const bool prim_restart=false);
Pipeline * CreatePipeline(Material *, RenderTarget *, PipelineData *, const Prim &prim=Prim::Triangles,const bool prim_restart=false);
Pipeline * CreatePipeline(MaterialInstance *, RenderTarget *, PipelineData *, const Prim &prim=Prim::Triangles,const bool prim_restart=false);
Pipeline * CreatePipeline(Material *, RenderTarget *,const OSString &, const Prim &prim=Prim::Triangles,const bool prim_restart=false);
Pipeline * CreatePipeline(MaterialInstance *, RenderTarget *,const OSString &, const Prim &prim=Prim::Triangles,const bool prim_restart=false);
Renderable * CreateRenderable(const uint32_t vertex_count=0);
TextRenderable * CreateTextRenderable(Material *);

View File

@ -3,6 +3,7 @@
#include<hgl/graph/vulkan/VK.h>
#include<hgl/graph/vulkan/VKPipelineData.h>
#include<hgl/graph/vulkan/VKInlinePipeline.h>
#include<hgl/io/DataOutputStream.h>
VK_NAMESPACE_BEGIN
class Pipeline

View File

@ -1,6 +1,7 @@
#include<hgl/graph/vulkan/VKDatabase.h>
#include<hgl/graph/vulkan/VKDevice.h>
#include<hgl/graph/vulkan/VKRenderableInstance.h>
#include<hgl/graph/vulkan/VKInlinePipeline.h>
VK_NAMESPACE_BEGIN
VAB *Database::CreateVAB(VkFormat format,uint32_t count,const void *data,SharingMode sharing_mode)
@ -70,6 +71,25 @@ MaterialInstance *Database::CreateMaterialInstance(const OSString &mtl_filename)
return CreateMaterialInstance(mtl);
}
Pipeline *Database::CreatePipeline(Material *mtl,RenderTarget *rt,const InlinePipeline &ip,const Prim &prim,const bool prim_restart)
{
PipelineData *pd=GetPipelineData(ip);
pd->Set(prim,prim_restart);
Pipeline *p=device->CreatePipeline(pd,mtl,rt);
if(p)
Add(p);
return(p);
}
Pipeline *Database::CreatePipeline(MaterialInstance *mi,RenderTarget *rt,const InlinePipeline &ip,const Prim &prim,const bool prim_restart)
{
return CreatePipeline(mi->GetMaterial(),rt,ip,prim,prim_restart);
}
Pipeline *Database::CreatePipeline(Material *mtl,RenderTarget *rt,PipelineData *pd,const Prim &prim,const bool prim_restart)
{
pd->Set(prim,prim_restart);

View File

@ -40,6 +40,15 @@ Pipeline *CreatePipeline(VkDevice device,VkPipelineCache pipeline_cache,Pipeline
return(new Pipeline(device,graphicsPipeline,data));
}
Pipeline *Device::CreatePipeline(const InlinePipeline &ip,const Material *mtl,const RenderTarget *rt)
{
PipelineData *pd=GetPipelineData(ip);
if(!pd)return(nullptr);
return VK_NAMESPACE::CreatePipeline(attr->device,attr->pipeline_cache,pd,mtl,rt);
}
Pipeline *Device::CreatePipeline(PipelineData *pd,const Material *mtl,const RenderTarget *rt)
{
return VK_NAMESPACE::CreatePipeline(attr->device,attr->pipeline_cache,pd,mtl,rt);