This commit is contained in:
ouczbs 2024-10-26 17:54:54 +08:00
parent 90c6998e44
commit 658a016602
10 changed files with 40 additions and 45 deletions

View File

@ -9,33 +9,33 @@ namespace api {
template<typename T> template<typename T>
concept Vertexs = requires {std::is_base_of_v<Vertex, T>; }; concept Vertexs = requires {std::is_base_of_v<Vertex, T>; };
struct PosVertex : public Vertex { struct PosVertex : public Vertex {
UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE }) //UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE })
UPROPERTY_vk({}, uint32_t{ VK_FORMAT_R32G32B32_SFLOAT }) UPROPERTY_vk({}, uint32_t{ VK_FORMAT_R32G32B32_SFLOAT })
Vector3 Position = {}; Vector3 Position = {};
}; };
struct TexVertex : public Vertex { struct TexVertex : public Vertex {
UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE }) //UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE })
UPROPERTY_vk({}, uint32_t{ VK_FORMAT_R32G32B32_SFLOAT }) UPROPERTY_vk({}, uint32_t{ VK_FORMAT_R32G32B32_SFLOAT })
Vector3 Position = {}; Vector3 Position = {};
UPROPERTY_gl({}, glVertexMeta{ 2, GL_FLOAT, GL_FALSE }) //UPROPERTY_gl({}, glVertexMeta{ 2, GL_FLOAT, GL_FALSE })
UPROPERTY_vk() UPROPERTY_vk()
Vector2 TexCoords = {}; Vector2 TexCoords = {};
UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE }) //UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE })
UPROPERTY_vk() UPROPERTY_vk()
Vector3 Normal = {}; Vector3 Normal = {};
}; };
struct BoneVertex : public Vertex struct BoneVertex : public Vertex
{ {
UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE }) //UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE })
UPROPERTY_vk({}, uint32_t{ VK_FORMAT_R32G32B32_SFLOAT }) UPROPERTY_vk({}, uint32_t{ VK_FORMAT_R32G32B32_SFLOAT })
Vector3 Position = {}; Vector3 Position = {};
UPROPERTY_gl({}, glVertexMeta{ 2, GL_FLOAT, GL_FALSE }) //UPROPERTY_gl({}, glVertexMeta{ 2, GL_FLOAT, GL_FALSE })
UPROPERTY_vk() UPROPERTY_vk()
Vector2 TexCoords = {}; Vector2 TexCoords = {};
UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE }) //UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE })
UPROPERTY_vk() UPROPERTY_vk()
Vector3 Normal = {}; Vector3 Normal = {};
UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE }) //UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE })
UPROPERTY_vk() UPROPERTY_vk()
Vector3 Tangent = {}; Vector3 Tangent = {};
// 骨骼蒙皮数据 // 骨骼蒙皮数据

View File

@ -9,6 +9,7 @@ namespace api {
static RscHandle<Shader> shader; static RscHandle<Shader> shader;
if (!shader) { if (!shader) {
shader = ResourceSystem::Ptr()->LoadEmplaceResource<Shader>(); shader = ResourceSystem::Ptr()->LoadEmplaceResource<Shader>();
shader->Name("api::PosVertex");
auto vert = ResourceSystem::Ptr()->Load<ShaderProgram>("/engine/assets/shader/simple.frag"); auto vert = ResourceSystem::Ptr()->Load<ShaderProgram>("/engine/assets/shader/simple.frag");
auto frag = ResourceSystem::Ptr()->Load<ShaderProgram>("/engine/assets/shader/simple.frag"); auto frag = ResourceSystem::Ptr()->Load<ShaderProgram>("/engine/assets/shader/simple.frag");
shader->SetVertHandle(vert); shader->SetVertHandle(vert);

View File

@ -6,15 +6,11 @@ namespace refl {
struct TStr { struct TStr {
std::array<char, N> value; std::array<char, N> value;
constexpr TStr() {}; constexpr TStr() {};
constexpr TStr(const char(&data)[N]) { constexpr TStr(const char(&data)[N]) : value{} {
for (size_t i = 0; i < N; ++i) { std::copy(data, data + N, value.begin());
value[i] = data[i];
}
} }
constexpr TStr(std::string_view data) { constexpr TStr(std::string_view data) : value{} {
for (size_t i = 0; i < N; ++i) { std::copy(data.begin(), data.end(), value.begin());
value[i] = data[i];
}
} }
constexpr std::string_view View()const { constexpr std::string_view View()const {
return std::string_view(value.data(), N - 1); return std::string_view(value.data(), N - 1);

View File

@ -22,12 +22,10 @@ namespace refl {
} }
template<size_t N, size_t M> template<size_t N, size_t M>
constexpr auto concat(const TStr<N>& lhs, const TStr<M>& rhs) { constexpr auto concat(const TStr<N>& lhs, const TStr<M>& rhs) {
constexpr size_t L = N + M - 1; TStr<N + M - 1> result;
char result[L] = {}; std::copy(lhs.value.begin(), lhs.value.end() - 1, result.value.begin());
for (size_t i = 0; i < L; ++i) { std::copy(rhs.value.begin(), rhs.value.end(), result.value.begin() + N - 1);
result[i] = i < N - 1 ? lhs.value[i] : rhs.value[i - N + 1]; return result;
}
return TStr<L>{result};
} }
constexpr int _num_digits(int num) { constexpr int _num_digits(int num) {

View File

@ -53,6 +53,16 @@ namespace vkn {
uint32_t height; uint32_t height;
uint32_t layers; uint32_t layers;
}; };
struct VulkanPipeline
{
Name name; // For debug
VkPipeline pipeline = VK_NULL_HANDLE;
VkDescriptorSet descriptorSet = VK_NULL_HANDLE;
VkPipelineLayout pipelineLayout = VK_NULL_HANDLE;
VkDescriptorSetLayout descriptorSetLayout = VK_NULL_HANDLE;
VkDescriptorSetLayout sceneDescriptorSetLayout = VK_NULL_HANDLE; // For ray tracing
bool inUse = false;
};
} }
namespace std { namespace std {
template<> template<>

View File

@ -24,6 +24,7 @@ namespace vkn {
VulkanWindow& window; VulkanWindow& window;
Backend backend; Backend backend;
table<Guid, MeshVAO> MeshTable; table<Guid, MeshVAO> MeshTable;
table<Guid, VulkanPipeline> PipelineTable;
table<RenderPassKey, VkRenderPass> RenderPassCache; table<RenderPassKey, VkRenderPass> RenderPassCache;
table<FramebufferKey, VkFramebuffer> FramebufferCache; table<FramebufferKey, VkFramebuffer> FramebufferCache;
public: public:

View File

@ -4,13 +4,14 @@
#include "render/tool/glsl_to_spirv.h" #include "render/tool/glsl_to_spirv.h"
#include "render/asset/vertex.h" #include "render/asset/vertex.h"
#include "os/file_handle.h" #include "os/file_handle.h"
#include ".render/vkmeta_vertex_gen.inl"
using namespace api; using namespace api;
namespace vkn { namespace vkn {
void VulkanGlslLoader::Init() void VulkanGlslLoader::Init()
{ {
//REGISTER_META_TABLE(PosVertex); refl::meta_info<PosVertex>();
//REGISTER_META_TABLE(TexVertex); refl::meta_info<TexVertex>();
//REGISTER_META_TABLE(BoneVertex); refl::meta_info<BoneVertex>();
ResourceSystem::Ptr()->RegisterLoader<VulkanGlslLoader>(".geom"); ResourceSystem::Ptr()->RegisterLoader<VulkanGlslLoader>(".geom");
ResourceSystem::Ptr()->RegisterLoader<VulkanGlslLoader>(".frag"); ResourceSystem::Ptr()->RegisterLoader<VulkanGlslLoader>(".frag");
ResourceSystem::Ptr()->RegisterLoader<VulkanGlslLoader>(".vert"); ResourceSystem::Ptr()->RegisterLoader<VulkanGlslLoader>(".vert");

View File

@ -94,6 +94,8 @@ namespace vkn {
shaderStageInfo.pName = "main"; shaderStageInfo.pName = "main";
shaderStages.push_back(shaderStageInfo); shaderStages.push_back(shaderStageInfo);
} }
RenderPassKey config{};
VkRenderPass renderpass;
auto it = refl::find_info(shader.Name()); auto it = refl::find_info(shader.Name());
auto meta = it->GetMeta("vkMeta"); auto meta = it->GetMeta("vkMeta");
// 设置顶点输入格式 // 设置顶点输入格式
@ -220,7 +222,7 @@ namespace vkn {
pipelineInfo.pColorBlendState = &colorBlending; pipelineInfo.pColorBlendState = &colorBlending;
pipelineInfo.pDepthStencilState = nullptr; //&depthStencilInfo; pipelineInfo.pDepthStencilState = nullptr; //&depthStencilInfo;
pipelineInfo.layout = pipelineLayout; pipelineInfo.layout = pipelineLayout;
pipelineInfo.renderPass = PassList[RENDER_FORWARD_RENDERING]->Ptr(); pipelineInfo.renderPass = renderpass;
pipelineInfo.subpass = 0; pipelineInfo.subpass = 0;
pipelineInfo.basePipelineHandle = VK_NULL_HANDLE; pipelineInfo.basePipelineHandle = VK_NULL_HANDLE;
pipelineInfo.basePipelineIndex = -1; pipelineInfo.basePipelineIndex = -1;
@ -238,7 +240,8 @@ namespace vkn {
vulkan_pipeline.inUse = true; vulkan_pipeline.inUse = true;
vulkan_pipeline.pipelineLayout = pipelineLayout; vulkan_pipeline.pipelineLayout = pipelineLayout;
vulkan_pipeline.descriptorSetLayout = descriptorSetLayout; vulkan_pipeline.descriptorSetLayout = descriptorSetLayout;
vulkan_pipeline.descriptorSet = backend.GetPool().Allocate(descriptorSetLayout);*/ vulkan_pipeline.descriptorSet = backend.GetPool().Allocate(descriptorSetLayout);
*/
} }
ImagePtr VulkanAPI::CreateTexture(TextureDesc desc) ImagePtr VulkanAPI::CreateTexture(TextureDesc desc)
{ {

View File

@ -135,5 +135,4 @@ namespace vkn {
.maxFrameInFlightCount = 2 .maxFrameInFlightCount = 2
}; };
} }
} }
#include ".render/vertex_gen.inl"

View File

@ -8,21 +8,7 @@ using namespace api;
using namespace std; using namespace std;
using namespace refl; using namespace refl;
int main() { int main() {
using TestContainer = vector<Name>; auto aguid = meta_name<api::Guid>();
TestContainer t1, t2; auto bguid = aguid.View();
t1.push_back("hello");
t1.push_back("world");
//t1[1] = "hello";
//t1[2] = "world";
auto text = JsonSerialize(t1);
auto res = JsonDeserialize<TestContainer>(text);
if (res) {
t2 = *res;
}
auto cls = meta_info<api::Guid>();
Any args[3] = { Any{ (int)2 }, Any{ (float)3 }, Any{false} };
Any obj = cls->New(FramePool(), span<Any>{args});
auto ptr = &api::Guid::Multy;
std::cout << "hello world" << std::endl; std::cout << "hello world" << std::endl;
} }