This commit is contained in:
ouczbs 2024-08-25 22:41:25 +08:00
parent 1e81945b20
commit 25664db985
14 changed files with 71 additions and 10 deletions

View File

@ -1,6 +1,7 @@
#pragma once #pragma once
#include "resource_system.h" #include "resource_system.h"
namespace api { namespace api {
using refl::type_info;
class Asset : public Resource<Asset> { class Asset : public Resource<Asset> {
public: public:
using Base = Resource<Asset>; using Base = Resource<Asset>;

View File

@ -31,7 +31,7 @@ namespace gen {
*(T*)(ptr) = yyjson_get_str(val); *(T*)(ptr) = yyjson_get_str(val);
} }
else { else {
static_assert(false, "unknown json read type"); //static_assert(false, "unknown json read type");
} }
return true; return true;
} }
@ -52,7 +52,7 @@ namespace gen {
return yyjson_mut_str(doc, ((T*)ptr)->data()); return yyjson_mut_str(doc, ((T*)ptr)->data());
} }
else { else {
static_assert(false, "unknown json write type"); //static_assert(false, "unknown json write type");
} }
} }
}; };

View File

@ -1,5 +1,4 @@
#pragma once #pragma once
#include "asset/asset.h"
#include "shader.h" #include "shader.h"
namespace api { namespace api {
class Material : public Asset { class Material : public Asset {

View File

@ -7,11 +7,13 @@ namespace api {
class Mesh : public Asset { class Mesh : public Asset {
protected: protected:
RscHandle<Material> mMaterial; RscHandle<Material> mMaterial;
parray<Vertex> mVertices; parray<Vertex> mVertices;
vector<uint32_t> mIndices; vector<uint32_t> mIndices;
public: public:
Mesh(); Mesh();
void BeginLoad(); template<Vertexs T>
Mesh(vector<T>& vertices, vector<uint32_t>& indices);
void BeginLoad() {};
public: public:
Guid GetShaderGuid() { Guid GetShaderGuid() {
@ -30,4 +32,9 @@ namespace api {
return mIndices; return mIndices;
} }
}; };
template<Vertexs T>
inline Mesh::Mesh(vector<T>& vertices, vector<uint32_t>& indices)
: Asset(type_info<Mesh>()), mVertices(vertices), mIndices(indices)
{
}
}; };

View File

@ -1,5 +1,5 @@
#pragma once #pragma once
#include "asset/res/resource_handle.h" #include "asset/asset.h"
namespace api { namespace api {
class ShaderProgram : public Resource<ShaderProgram> {}; class ShaderProgram : public Resource<ShaderProgram> {};
class Shader : public Asset { class Shader : public Asset {

View File

@ -5,8 +5,9 @@
// 顶点最多关联4个骨骼 // 顶点最多关联4个骨骼
#define MAX_NUM_BONES_PER_VERTEX 4 #define MAX_NUM_BONES_PER_VERTEX 4
namespace api { namespace api {
using refl::type_info;
struct Vertex {}; struct Vertex {};
template<typename 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 })

View File

@ -20,5 +20,10 @@ namespace api {
public: public:
virtual void Init() = 0; virtual void Init() = 0;
virtual void Shutdown() = 0; virtual void Shutdown() = 0;
virtual void SetStaticMesh(Mesh& mesh) = 0;
virtual void DrawStaticMesh(Mesh& mesh) = 0;
virtual void LoadShader(Shader& shader) = 0;
}; };
} }

View File

@ -0,0 +1,4 @@
#include "render/asset/framebuffer.h"
namespace api {
}

View File

@ -0,0 +1,9 @@
#include "render/asset/material.h"
namespace api {
Material::Material() : Asset(type_info<Material>())
{
}
Material::~Material()
{
}
}

View File

@ -0,0 +1,12 @@
#include "render/asset/shader.h"
namespace api {
Shader::Shader() : Asset(type_info<Shader>())
{
}
Shader::~Shader()
{
}
void Shader::BeginLoad()
{
}
}

View File

@ -1,4 +1,4 @@
#include "refl/refl.h" #include "refl/pch.h"
namespace refl { namespace refl {
template<typename T> template<typename T>
class parray { class parray {
@ -20,7 +20,7 @@ namespace refl {
} }
else { else {
for (int i = 0; i < m_count; i++) { for (int i = 0; i < m_count; i++) {
new(ptr + i) Vertex(vec[i]); new(ptr + i) C(vec[i]);
} }
} }
} }
@ -32,7 +32,7 @@ namespace refl {
~parray() { ~parray() {
if (!m_count || !m_cls) if (!m_count || !m_cls)
return; return;
auto dest = m_cls->vtable.Destruct; auto dest = m_cls->vtable.Destruct();
if (dest) { if (dest) {
for (int i = 0; i < m_count; i++) { for (int i = 0; i < m_count; i++) {
dest((char*)m_ptr + (i * m_cls->size)); dest((char*)m_ptr + (i * m_cls->size));

View File

@ -5,6 +5,8 @@
namespace vkn { namespace vkn {
class Backend; class Backend;
class VulkanWindow; class VulkanWindow;
using api::Mesh;
using api::Shader;
class VULKAN_API VulkanAPI : public api::RenderAPI { class VULKAN_API VulkanAPI : public api::RenderAPI {
private: private:
VulkanWindow& window; VulkanWindow& window;
@ -14,5 +16,10 @@ namespace vkn {
void Init() override; void Init() override;
void Shutdown() override; void Shutdown() override;
void SetStaticMesh(Mesh& mesh)override;
void DrawStaticMesh(Mesh& mesh)override;
void LoadShader(Shader& shader)override;
}; };
} }

View File

@ -5,6 +5,9 @@
#include "vkn/wrapper/instance_create.h" #include "vkn/wrapper/instance_create.h"
#include "vkn/wrapper/queue.h" #include "vkn/wrapper/queue.h"
namespace vkn { namespace vkn {
CommandWorker* Backend::TransferWorker;
CommandWorker* Backend::RenderWorker;
CommandWorker* Backend::PresentWorker;
Backend::Backend(string_view appName) : mWorkerMap(GlobalPool()) Backend::Backend(string_view appName) : mWorkerMap(GlobalPool())
{ {
InstanceCreator instanceCreator{}; InstanceCreator instanceCreator{};

View File

@ -1,5 +1,6 @@
#include "vkn/vulkan_api.h" #include "vkn/vulkan_api.h"
#include "vkn/vulkan_window.h" #include "vkn/vulkan_window.h"
#include "render/asset/mesh.h"
namespace vkn { namespace vkn {
VulkanAPI::VulkanAPI() : window(*VulkanWindow::Ptr()), backend(VulkanEngineName) VulkanAPI::VulkanAPI() : window(*VulkanWindow::Ptr()), backend(VulkanEngineName)
{ {
@ -13,4 +14,16 @@ namespace vkn {
{ {
} }
void VulkanAPI::SetStaticMesh(Mesh& mesh)
{
auto Indices = mesh.GetIndices();
auto Vertices = mesh.GetVertices();
}
void VulkanAPI::DrawStaticMesh(Mesh& mesh)
{
}
void VulkanAPI::LoadShader(Shader& shader)
{
}
} }