perpare it for VertexColor3D material.

This commit is contained in:
HuYingzhuo(hugo/hyzboy) 2023-09-27 20:31:46 +08:00
parent 253d113375
commit 6c7f9ea9d1
16 changed files with 191 additions and 14 deletions

@ -1 +1 @@
Subproject commit a11148b38dd39d25aa6a4493c0028c482c8a5d2b
Subproject commit 2c10960ec30766ccafb2612e81cb88a89307c633

View File

@ -7,7 +7,7 @@
set_property(TARGET ${name} PROPERTY VS_DPI_AWARE "PerMonitor")
ENDIF()
set_property(TARGET ${name} PROPERTY FOLDER "ULRE/Example/Vulkan/Basic")
set_property(TARGET ${name} PROPERTY FOLDER "ULRE/Example/Basic")
endmacro()
CreateProject(01_draw_triangle_in_NDC draw_triangle_in_NDC.cpp)

View File

@ -4,6 +4,8 @@ SET(VULKAN_APP_FRAMEWORK ${CMAKE_CURRENT_SOURCE_DIR}/common/VulkanAppFramework.h
add_subdirectory(Basic)
add_subdirectory(Texture)
add_subdirectory(Gizmo)
add_subdirectory(Vulkan)
add_subdirectory(2dVector)
add_subdirectory(GUI)

View File

@ -0,0 +1,13 @@
macro(CreateProject name)
add_executable(${name} ${ARGN} ${VULKAN_APP_FRAMEWORK})
target_link_libraries(${name} ${ULRE})
IF(MSVC)
set_target_properties(${name} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY ${ULRE_RUNTIME_PATH})
set_property(TARGET ${name} PROPERTY VS_DPI_AWARE "PerMonitor")
ENDIF()
set_property(TARGET ${name} PROPERTY FOLDER "ULRE/Example/Gizmo")
endmacro()
CreateProject(PlaneGrid3D PlaneGrid3D.cpp)

View File

@ -7,7 +7,7 @@
set_property(TARGET ${name} PROPERTY VS_DPI_AWARE "PerMonitor")
ENDIF()
set_property(TARGET ${name} PROPERTY FOLDER "ULRE/Example/Vulkan/Texture")
set_property(TARGET ${name} PROPERTY FOLDER "ULRE/Example/Texture")
endmacro()
CreateProject(05_texture_format texture_format_list.cpp)

View File

@ -8,8 +8,6 @@
STD_MTL_NAMESPACE_BEGIN
struct Material2DCreateConfig:public MaterialCreateConfig
{
Prim prim; ///<图元类型
CoordinateSystem2D coordinate_system; ///<使用的坐标系
bool local_to_world; ///<包含LocalToWorld矩阵
@ -18,10 +16,8 @@ struct Material2DCreateConfig:public MaterialCreateConfig
public:
Material2DCreateConfig(const GPUDeviceAttribute *da,const AnsiString &name,const Prim &p):MaterialCreateConfig(da,name)
Material2DCreateConfig(const GPUDeviceAttribute *da,const AnsiString &name,const Prim &p):MaterialCreateConfig(da,name,p)
{
prim=p;
rt_output.color=1; //输出一个颜色
rt_output.depth=false; //不输出深度
rt_output.stencil=false; //不输出stencil
@ -37,11 +33,6 @@ public:
}
};//struct Material2DCreateConfig:public MaterialCreateConfig
namespace SamplerName
{
constexpr const char Color[]="TextureColor";
}
MaterialCreateInfo *CreateVertexColor2D(const Material2DCreateConfig *);
MaterialCreateInfo *CreatePureColor2D(const Material2DCreateConfig *);
MaterialCreateInfo *CreatePureTexture2D(const Material2DCreateConfig *);

View File

@ -0,0 +1,33 @@
#pragma once
#include<hgl/graph/mtl/MaterialConfig.h>
#include<hgl/graph/CoordinateSystem.h>
#include<hgl/graph/VertexAttrib.h>
STD_MTL_NAMESPACE_BEGIN
struct Material3DCreateConfig:public MaterialCreateConfig
{
bool local_to_world; ///<包含LocalToWorld矩阵
VAT position_format; ///<position格式
public:
Material3DCreateConfig(const GPUDeviceAttribute *da,const AnsiString &name,const Prim &p):MaterialCreateConfig(da,name,p)
{
rt_output.color=1; //输出一个颜色
rt_output.depth=true; //不输出深度
rt_output.stencil=false; //不输出stencil
local_to_world=false;
position_format=VAT_VEC3;
}
};//struct Material3DCreateConfig:public MaterialCreateConfig
//MaterialCreateInfo *CreateVertexColor2D(const Material2DCreateConfig *);
//MaterialCreateInfo *CreatePureColor2D(const Material2DCreateConfig *);
//MaterialCreateInfo *CreatePureTexture2D(const Material2DCreateConfig *);
//MaterialCreateInfo *CreateRectTexture2D(Material2DCreateConfig *);
//MaterialCreateInfo *CreateRectTexture2DArray(Material2DCreateConfig *);
STD_MTL_NAMESPACE_END

View File

@ -22,15 +22,19 @@ struct MaterialCreateConfig
uint32 shader_stage_flag_bit; ///<需要的shader
Prim prim; ///<图元类型
public:
MaterialCreateConfig(const GPUDeviceAttribute *da,const AnsiString &name)
MaterialCreateConfig(const GPUDeviceAttribute *da,const AnsiString &name,const Prim &p)
{
dev_attr=da;
mtl_name=name;
shader_stage_flag_bit=VK_SHADER_STAGE_VERTEX_BIT|VK_SHADER_STAGE_FRAGMENT_BIT;
prim=p;
}
};//struct MaterialCreateConfig
STD_MTL_NAMESPACE_END

View File

@ -0,0 +1,15 @@
#pragma once
namespace hgl
{
namespace graph
{
namespace mtl
{
namespace SamplerName
{
constexpr const char Color[] = "TextureColor";
}//namespace SamplerName
}//namespace mtl
}//namespace graph
}//namespace hgl

View File

@ -1,6 +1,7 @@
#include"Std2DMaterial.h"
#include<hgl/shadergen/MaterialCreateInfo.h>
#include<hgl/graph/mtl/2d/Material2DCreateConfig.h>
#include<hgl/graph/mtl/SamplerName.h>
STD_MTL_NAMESPACE_BEGIN
namespace

View File

@ -2,6 +2,7 @@
#include<hgl/shadergen/MaterialCreateInfo.h>
#include<hgl/graph/mtl/2d/Material2DCreateConfig.h>
#include<hgl/graph/mtl/UBOCommon.h>
#include<hgl/graph/mtl/SamplerName.h>
STD_MTL_NAMESPACE_BEGIN
namespace

View File

@ -3,6 +3,7 @@
#include<hgl/graph/mtl/2d/Material2DCreateConfig.h>
#include"common/MFRectPrimitive.h"
#include<hgl/graph/mtl/UBOCommon.h>
#include<hgl/graph/mtl/SamplerName.h>
STD_MTL_NAMESPACE_BEGIN
namespace

View File

@ -0,0 +1,59 @@
#include"Std3DMaterial.h"
#include<hgl/shadergen/MaterialCreateInfo.h>
#include<hgl/graph/mtl/3d/Material3DCreateConfig.h>
#include<hgl/graph/mtl/UBOCommon.h>
#include"common/MFGetPosition.h"
#include"common/MFRectPrimitive.h"
STD_MTL_NAMESPACE_BEGIN
Std3DMaterial::Std3DMaterial(const Material3DCreateConfig *c)
{
mci=new MaterialCreateInfo(c);
cfg=c;
}
bool Std3DMaterial::CustomVertexShader(ShaderCreateInfoVertex *vsc)
{
vsc->AddInput(cfg->position_format,VAN::Position);
if(cfg->local_to_world)
{
mci->SetLocalToWorld(VK_SHADER_STAGE_ALL_GRAPHICS);
vsc->AddAssign();
}
mci->AddUBO(VK_SHADER_STAGE_VERTEX_BIT,
DescriptorSetType::Global,
SBS_ViewportInfo);
return(true);
}
MaterialCreateInfo *Std3DMaterial::Create()
{
if(!BeginCustomShader())
return(nullptr);
if(mci->hasVertex())
if(!CustomVertexShader(mci->GetVS()))
return(nullptr);
if(mci->hasGeometry())
if(!CustomGeometryShader(mci->GetGS()))
return(nullptr);
if(mci->hasFragment())
if(!CustomFragmentShader(mci->GetFS()))
return(nullptr);
if(!EndCustomShader())
return(false);
if(!mci->CreateShader())
return(nullptr);
return(mci);
}
STD_MTL_NAMESPACE_END

View File

@ -0,0 +1,47 @@
#pragma once
#include<hgl/graph/mtl/StdMaterial.h>
namespace hgl
{
namespace graph
{
struct GPUDeviceAttribute;
class ShaderCreateInfoVertex;
class ShaderCreateInfoGeometry;
class ShaderCreateInfoFragment;
namespace mtl
{
class MaterialCreateInfo;
struct Material3DCreateConfig;
class Std3DMaterial
{
protected:
const Material3DCreateConfig *cfg;
MaterialCreateInfo *mci;
protected:
virtual bool BeginCustomShader(){return true;/*some work before creating shader*/};
virtual bool CustomVertexShader(ShaderCreateInfoVertex *);
virtual bool CustomGeometryShader(ShaderCreateInfoGeometry *){return false;}
virtual bool CustomFragmentShader(ShaderCreateInfoFragment *)=0;
virtual bool EndCustomShader(){return true;/*some work after creating shader*/};
public:
Std3DMaterial(const Material3DCreateConfig *);
virtual ~Std3DMaterial()=default;
virtual MaterialCreateInfo *Create();
};//class Std3DMaterial
}//namespace mtl
}//namespace graph
}//namespace hgl

View File

@ -37,6 +37,7 @@ SOURCE_GROUP("GLSL Compiler" FILES ${GLSL_COMPILER_SOURCE})
set(STD_MTL_HEADER_PATH ${ROOT_INCLUDE_PATH}/hgl/graph/mtl)
SET(SHADERGEN_COMMON_FILES ${STD_MTL_HEADER_PATH}/UBOCommon.h
${STD_MTL_HEADER_PATH}/SamplerName.h
common/MFCommon.h
common/MFGetPosition.h)
@ -56,6 +57,13 @@ SET(STD_MTL_2D_SOURCE_FILES ${STD_MTL_2D_HEADER_PATH}/Material2DCreateConfig.h
2d/M_RectTexture2DArray.cpp
)
SET(STD_MTL_3D_HEADER_PATH ${STD_MTL_HEADER_PATH}/3d)
SET(STD_MTL_3D_SOURCE_FILES ${STD_MTL_3D_HEADER_PATH}/Material3DCreateConfig.h
3d/Std3DMaterial.h
3d/Std3DMaterial.cpp
)
SET(STD_MTL_SOURCE ${STD_MTL_HEADER_PATH}/MaterialConfig.h
${STD_MTL_HEADER_PATH}/StdMaterial.h
${STD_MTL_HEADER_PATH}/ShaderBuffer.h
@ -63,6 +71,7 @@ SET(STD_MTL_SOURCE ${STD_MTL_HEADER_PATH}/MaterialConfig.h
SOURCE_GROUP("Standard Material" FILES ${STD_MTL_SOURCE})
SOURCE_GROUP("Standard Material\\2D" FILES ${STD_MTL_2D_SOURCE_FILES})
SOURCE_GROUP("Standard Material\\3D" FILES ${STD_MTL_3D_SOURCE_FILES})
add_cm_library(ULRE.ShaderGen "ULRE" ${DESC_INFO_HEADER_FILES}
${DESC_INFO_SOURCE_FILES}
@ -74,4 +83,5 @@ add_cm_library(ULRE.ShaderGen "ULRE" ${DESC_INFO_HEADER_FILES}
${SHADERGEN_COMMON_FILES}
${STD_MTL_SOURCE}
${STD_MTL_2D_SOURCE_FILES}
${STD_MTL_3D_SOURCE_FILES}
)