update
This commit is contained in:
parent
90c6998e44
commit
658a016602
@ -9,33 +9,33 @@ namespace api {
|
||||
template<typename T>
|
||||
concept Vertexs = requires {std::is_base_of_v<Vertex, T>; };
|
||||
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 })
|
||||
Vector3 Position = {};
|
||||
};
|
||||
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 })
|
||||
Vector3 Position = {};
|
||||
UPROPERTY_gl({}, glVertexMeta{ 2, GL_FLOAT, GL_FALSE })
|
||||
//UPROPERTY_gl({}, glVertexMeta{ 2, GL_FLOAT, GL_FALSE })
|
||||
UPROPERTY_vk()
|
||||
Vector2 TexCoords = {};
|
||||
UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE })
|
||||
//UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE })
|
||||
UPROPERTY_vk()
|
||||
Vector3 Normal = {};
|
||||
};
|
||||
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 })
|
||||
Vector3 Position = {};
|
||||
UPROPERTY_gl({}, glVertexMeta{ 2, GL_FLOAT, GL_FALSE })
|
||||
//UPROPERTY_gl({}, glVertexMeta{ 2, GL_FLOAT, GL_FALSE })
|
||||
UPROPERTY_vk()
|
||||
Vector2 TexCoords = {};
|
||||
UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE })
|
||||
//UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE })
|
||||
UPROPERTY_vk()
|
||||
Vector3 Normal = {};
|
||||
UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE })
|
||||
//UPROPERTY_gl({}, glVertexMeta{ 3, GL_FLOAT, GL_FALSE })
|
||||
UPROPERTY_vk()
|
||||
Vector3 Tangent = {};
|
||||
// 骨骼蒙皮数据
|
||||
|
||||
@ -9,6 +9,7 @@ namespace api {
|
||||
static RscHandle<Shader> shader;
|
||||
if (!shader) {
|
||||
shader = ResourceSystem::Ptr()->LoadEmplaceResource<Shader>();
|
||||
shader->Name("api::PosVertex");
|
||||
auto vert = ResourceSystem::Ptr()->Load<ShaderProgram>("/engine/assets/shader/simple.frag");
|
||||
auto frag = ResourceSystem::Ptr()->Load<ShaderProgram>("/engine/assets/shader/simple.frag");
|
||||
shader->SetVertHandle(vert);
|
||||
|
||||
@ -6,15 +6,11 @@ namespace refl {
|
||||
struct TStr {
|
||||
std::array<char, N> value;
|
||||
constexpr TStr() {};
|
||||
constexpr TStr(const char(&data)[N]) {
|
||||
for (size_t i = 0; i < N; ++i) {
|
||||
value[i] = data[i];
|
||||
}
|
||||
constexpr TStr(const char(&data)[N]) : value{} {
|
||||
std::copy(data, data + N, value.begin());
|
||||
}
|
||||
constexpr TStr(std::string_view data) {
|
||||
for (size_t i = 0; i < N; ++i) {
|
||||
value[i] = data[i];
|
||||
}
|
||||
constexpr TStr(std::string_view data) : value{} {
|
||||
std::copy(data.begin(), data.end(), value.begin());
|
||||
}
|
||||
constexpr std::string_view View()const {
|
||||
return std::string_view(value.data(), N - 1);
|
||||
|
||||
@ -22,12 +22,10 @@ namespace refl {
|
||||
}
|
||||
template<size_t N, size_t M>
|
||||
constexpr auto concat(const TStr<N>& lhs, const TStr<M>& rhs) {
|
||||
constexpr size_t L = N + M - 1;
|
||||
char result[L] = {};
|
||||
for (size_t i = 0; i < L; ++i) {
|
||||
result[i] = i < N - 1 ? lhs.value[i] : rhs.value[i - N + 1];
|
||||
}
|
||||
return TStr<L>{result};
|
||||
TStr<N + M - 1> result;
|
||||
std::copy(lhs.value.begin(), lhs.value.end() - 1, result.value.begin());
|
||||
std::copy(rhs.value.begin(), rhs.value.end(), result.value.begin() + N - 1);
|
||||
return result;
|
||||
}
|
||||
|
||||
constexpr int _num_digits(int num) {
|
||||
|
||||
@ -53,6 +53,16 @@ namespace vkn {
|
||||
uint32_t height;
|
||||
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 {
|
||||
template<>
|
||||
|
||||
@ -24,6 +24,7 @@ namespace vkn {
|
||||
VulkanWindow& window;
|
||||
Backend backend;
|
||||
table<Guid, MeshVAO> MeshTable;
|
||||
table<Guid, VulkanPipeline> PipelineTable;
|
||||
table<RenderPassKey, VkRenderPass> RenderPassCache;
|
||||
table<FramebufferKey, VkFramebuffer> FramebufferCache;
|
||||
public:
|
||||
|
||||
@ -4,13 +4,14 @@
|
||||
#include "render/tool/glsl_to_spirv.h"
|
||||
#include "render/asset/vertex.h"
|
||||
#include "os/file_handle.h"
|
||||
#include ".render/vkmeta_vertex_gen.inl"
|
||||
using namespace api;
|
||||
namespace vkn {
|
||||
void VulkanGlslLoader::Init()
|
||||
{
|
||||
//REGISTER_META_TABLE(PosVertex);
|
||||
//REGISTER_META_TABLE(TexVertex);
|
||||
//REGISTER_META_TABLE(BoneVertex);
|
||||
refl::meta_info<PosVertex>();
|
||||
refl::meta_info<TexVertex>();
|
||||
refl::meta_info<BoneVertex>();
|
||||
ResourceSystem::Ptr()->RegisterLoader<VulkanGlslLoader>(".geom");
|
||||
ResourceSystem::Ptr()->RegisterLoader<VulkanGlslLoader>(".frag");
|
||||
ResourceSystem::Ptr()->RegisterLoader<VulkanGlslLoader>(".vert");
|
||||
|
||||
@ -94,6 +94,8 @@ namespace vkn {
|
||||
shaderStageInfo.pName = "main";
|
||||
shaderStages.push_back(shaderStageInfo);
|
||||
}
|
||||
RenderPassKey config{};
|
||||
VkRenderPass renderpass;
|
||||
auto it = refl::find_info(shader.Name());
|
||||
auto meta = it->GetMeta("vkMeta");
|
||||
// 设置顶点输入格式
|
||||
@ -220,7 +222,7 @@ namespace vkn {
|
||||
pipelineInfo.pColorBlendState = &colorBlending;
|
||||
pipelineInfo.pDepthStencilState = nullptr; //&depthStencilInfo;
|
||||
pipelineInfo.layout = pipelineLayout;
|
||||
pipelineInfo.renderPass = PassList[RENDER_FORWARD_RENDERING]->Ptr();
|
||||
pipelineInfo.renderPass = renderpass;
|
||||
pipelineInfo.subpass = 0;
|
||||
pipelineInfo.basePipelineHandle = VK_NULL_HANDLE;
|
||||
pipelineInfo.basePipelineIndex = -1;
|
||||
@ -238,7 +240,8 @@ namespace vkn {
|
||||
vulkan_pipeline.inUse = true;
|
||||
vulkan_pipeline.pipelineLayout = pipelineLayout;
|
||||
vulkan_pipeline.descriptorSetLayout = descriptorSetLayout;
|
||||
vulkan_pipeline.descriptorSet = backend.GetPool().Allocate(descriptorSetLayout);*/
|
||||
vulkan_pipeline.descriptorSet = backend.GetPool().Allocate(descriptorSetLayout);
|
||||
*/
|
||||
}
|
||||
ImagePtr VulkanAPI::CreateTexture(TextureDesc desc)
|
||||
{
|
||||
|
||||
@ -136,4 +136,3 @@ namespace vkn {
|
||||
};
|
||||
}
|
||||
}
|
||||
#include ".render/vertex_gen.inl"
|
||||
@ -8,21 +8,7 @@ using namespace api;
|
||||
using namespace std;
|
||||
using namespace refl;
|
||||
int main() {
|
||||
using TestContainer = vector<Name>;
|
||||
TestContainer t1, t2;
|
||||
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;
|
||||
auto aguid = meta_name<api::Guid>();
|
||||
auto bguid = aguid.View();
|
||||
std::cout << "hello world" << std::endl;
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user