定义Material/MaterialInstance
This commit is contained in:
parent
5e9bb09621
commit
ffcf03dfd3
@ -25,6 +25,7 @@ SET(VULKAN_TEST_SOURCE_FILES main.cpp
|
|||||||
VKSemaphore.cpp
|
VKSemaphore.cpp
|
||||||
VKFramebuffer.cpp
|
VKFramebuffer.cpp
|
||||||
VKFence.cpp
|
VKFence.cpp
|
||||||
|
VKMaterial.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
SET(VULKAN_TEST_HEADER_FILES VK.h
|
SET(VULKAN_TEST_HEADER_FILES VK.h
|
||||||
@ -47,6 +48,7 @@ SET(VULKAN_TEST_HEADER_FILES VK.h
|
|||||||
VKPipeline.h
|
VKPipeline.h
|
||||||
VKFramebuffer.h
|
VKFramebuffer.h
|
||||||
VKFence.h
|
VKFence.h
|
||||||
|
VKMaterial.h
|
||||||
Window.h)
|
Window.h)
|
||||||
|
|
||||||
SET(SHADER_FILES shader_compile.bat
|
SET(SHADER_FILES shader_compile.bat
|
||||||
|
@ -8,9 +8,10 @@
|
|||||||
#include"VKFramebuffer.h"
|
#include"VKFramebuffer.h"
|
||||||
#include"VKFence.h"
|
#include"VKFence.h"
|
||||||
#include"VKSemaphore.h"
|
#include"VKSemaphore.h"
|
||||||
|
#include"VKMaterial.h"
|
||||||
|
#include"VKDescriptorSets.h"
|
||||||
|
|
||||||
VK_NAMESPACE_BEGIN
|
VK_NAMESPACE_BEGIN
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
bool CreateVulkanBuffer(VulkanBuffer &vb,const DeviceAttribute *rsa,VkBufferUsageFlags buf_usage,VkDeviceSize size,VkSharingMode sharing_mode)
|
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);
|
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
|
VK_NAMESPACE_END
|
||||||
|
@ -15,6 +15,8 @@ class CommandBuffer;
|
|||||||
class RenderPass;
|
class RenderPass;
|
||||||
class Fence;
|
class Fence;
|
||||||
class Semaphore;
|
class Semaphore;
|
||||||
|
class Material;
|
||||||
|
class Shader;
|
||||||
|
|
||||||
#define MAX_FRAMES_IN_FLIGHT 2
|
#define MAX_FRAMES_IN_FLIGHT 2
|
||||||
|
|
||||||
@ -81,6 +83,8 @@ public:
|
|||||||
|
|
||||||
#undef CREATE_BUFFER_OBJECT
|
#undef CREATE_BUFFER_OBJECT
|
||||||
|
|
||||||
|
Material * CreateMaterial(Shader *);
|
||||||
|
|
||||||
CommandBuffer * CreateCommandBuffer();
|
CommandBuffer * CreateCommandBuffer();
|
||||||
RenderPass * CreateRenderPass(VkFormat color_format,VkFormat depth_format);
|
RenderPass * CreateRenderPass(VkFormat color_format,VkFormat depth_format);
|
||||||
Fence * CreateFence();
|
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);
|
return(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
vulkan::Buffer *CreateUBO(vulkan::Device *dev,vulkan::Shader *shader)
|
vulkan::Buffer *CreateUBO(vulkan::Device *dev)
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
const VkExtent2D extent=dev->GetExtent();
|
const VkExtent2D extent=dev->GetExtent();
|
||||||
@ -194,7 +194,7 @@ int main(int,char **)
|
|||||||
if(!shader)
|
if(!shader)
|
||||||
return -3;
|
return -3;
|
||||||
|
|
||||||
vulkan::Buffer *ubo=CreateUBO(device,shader);
|
vulkan::Buffer *ubo=CreateUBO(device);
|
||||||
|
|
||||||
vulkan::VertexInput *vi=CreateVertexBuffer(device);
|
vulkan::VertexInput *vi=CreateVertexBuffer(device);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user