定义Material/MaterialInstance

This commit is contained in:
HuYingzhuo 2019-04-25 10:09:56 +08:00
parent 5e9bb09621
commit ffcf03dfd3
6 changed files with 78 additions and 3 deletions

View File

@ -25,6 +25,7 @@ SET(VULKAN_TEST_SOURCE_FILES main.cpp
VKSemaphore.cpp
VKFramebuffer.cpp
VKFence.cpp
VKMaterial.cpp
)
SET(VULKAN_TEST_HEADER_FILES VK.h
@ -47,6 +48,7 @@ SET(VULKAN_TEST_HEADER_FILES VK.h
VKPipeline.h
VKFramebuffer.h
VKFence.h
VKMaterial.h
Window.h)
SET(SHADER_FILES shader_compile.bat

View File

@ -8,9 +8,10 @@
#include"VKFramebuffer.h"
#include"VKFence.h"
#include"VKSemaphore.h"
#include"VKMaterial.h"
#include"VKDescriptorSets.h"
VK_NAMESPACE_BEGIN
namespace
{
bool CreateVulkanBuffer(VulkanBuffer &vb,const DeviceAttribute *rsa,VkBufferUsageFlags buf_usage,VkDeviceSize size,VkSharingMode sharing_mode)
@ -315,4 +316,11 @@ bool Device::QueuePresent()
return(vkQueuePresentKHR(attr->present_queue, &present)==VK_SUCCESS);
}
Material *Device::CreateMaterial(Shader *shader)
{
DescriptorSetLayoutCreater *dslc=new DescriptorSetLayoutCreater(this);
return(new Material(shader,dslc));
}
VK_NAMESPACE_END

View File

@ -15,6 +15,8 @@ class CommandBuffer;
class RenderPass;
class Fence;
class Semaphore;
class Material;
class Shader;
#define MAX_FRAMES_IN_FLIGHT 2
@ -81,6 +83,8 @@ public:
#undef CREATE_BUFFER_OBJECT
Material * CreateMaterial(Shader *);
CommandBuffer * CreateCommandBuffer();
RenderPass * CreateRenderPass(VkFormat color_format,VkFormat depth_format);
Fence * CreateFence();

View File

@ -0,0 +1,12 @@
#include"VKMaterial.h"
VK_NAMESPACE_BEGIN
Material::~Material()
{
delete dsl_creater;
delete shader;
}
MaterialInstance *Material::CreateInstance()
{
}
VK_NAMESPACE_END

View File

@ -0,0 +1,49 @@
#ifndef HGL_GRAPH_VULKAN_MATERIAL_INCLUDE
#define HGL_GRAPH_VULKAN_MATERIAL_INCLUDE
#include"VK.h"
VK_NAMESPACE_BEGIN
class Shader;
class DescriptorSetLayoutCreater;
class MaterialInstance;
/**
* <br>
* shaderDescriptorSetLayoutCreater
*/
class Material
{
Shader *shader;
DescriptorSetLayoutCreater *dsl_creater;
public:
Material(Shader *s,DescriptorSetLayoutCreater *dslc)
{
shader=s;
dsl_creater=dslc;
}
~Material();
MaterialInstance *CreateInstance();
};//class Material
/**
* <br>
* Material的情况下UBO/TEXTURE等pipeline
*/
class MaterialInstance
{
Material *mat;
public:
MaterialInstance(Material *m)
{
mat=m;
}
~MaterialInstance();
};//class MaterialInstance
VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_MATERIAL_INCLUDE

View File

@ -81,7 +81,7 @@ vulkan::Shader *LoadShader(VkDevice device)
return(nullptr);
}
vulkan::Buffer *CreateUBO(vulkan::Device *dev,vulkan::Shader *shader)
vulkan::Buffer *CreateUBO(vulkan::Device *dev)
{
{
const VkExtent2D extent=dev->GetExtent();
@ -194,7 +194,7 @@ int main(int,char **)
if(!shader)
return -3;
vulkan::Buffer *ubo=CreateUBO(device,shader);
vulkan::Buffer *ubo=CreateUBO(device);
vulkan::VertexInput *vi=CreateVertexBuffer(device);