update
This commit is contained in:
parent
90c6998e44
commit
658a016602
@ -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 = {};
|
||||||
// 骨骼蒙皮数据
|
// 骨骼蒙皮数据
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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<>
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
@ -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");
|
||||||
|
|||||||
@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -135,5 +135,4 @@ namespace vkn {
|
|||||||
.maxFrameInFlightCount = 2
|
.maxFrameInFlightCount = 2
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#include ".render/vertex_gen.inl"
|
|
||||||
@ -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;
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user