定义Material/MaterialInstance
This commit is contained in:
parent
5e9bb09621
commit
ffcf03dfd3
@ -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
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
|
12
example/Vulkan/VKMaterial.cpp
Normal file
12
example/Vulkan/VKMaterial.cpp
Normal file
@ -0,0 +1,12 @@
|
||||
#include"VKMaterial.h"
|
||||
VK_NAMESPACE_BEGIN
|
||||
Material::~Material()
|
||||
{
|
||||
delete dsl_creater;
|
||||
delete shader;
|
||||
}
|
||||
|
||||
MaterialInstance *Material::CreateInstance()
|
||||
{
|
||||
}
|
||||
VK_NAMESPACE_END
|
49
example/Vulkan/VKMaterial.h
Normal file
49
example/Vulkan/VKMaterial.h
Normal 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>
|
||||
* 用于管理shader,提供DescriptorSetLayoutCreater
|
||||
*/
|
||||
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
|
@ -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);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user