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
#include "resource_system.h"
namespace api {
using refl::type_info;
class Asset : public Resource<Asset> {
public:
using Base = Resource<Asset>;

View File

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

View File

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

View File

@ -7,11 +7,13 @@ namespace api {
class Mesh : public Asset {
protected:
RscHandle<Material> mMaterial;
parray<Vertex> mVertices;
parray<Vertex> mVertices;
vector<uint32_t> mIndices;
public:
Mesh();
void BeginLoad();
template<Vertexs T>
Mesh(vector<T>& vertices, vector<uint32_t>& indices);
void BeginLoad() {};
public:
Guid GetShaderGuid() {
@ -30,4 +32,9 @@ namespace api {
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
#include "asset/res/resource_handle.h"
#include "asset/asset.h"
namespace api {
class ShaderProgram : public Resource<ShaderProgram> {};
class Shader : public Asset {

View File

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

View File

@ -20,5 +20,10 @@ namespace api {
public:
virtual void Init() = 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 {
template<typename T>
class parray {
@ -20,7 +20,7 @@ namespace refl {
}
else {
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() {
if (!m_count || !m_cls)
return;
auto dest = m_cls->vtable.Destruct;
auto dest = m_cls->vtable.Destruct();
if (dest) {
for (int i = 0; i < m_count; i++) {
dest((char*)m_ptr + (i * m_cls->size));

View File

@ -5,6 +5,8 @@
namespace vkn {
class Backend;
class VulkanWindow;
using api::Mesh;
using api::Shader;
class VULKAN_API VulkanAPI : public api::RenderAPI {
private:
VulkanWindow& window;
@ -14,5 +16,10 @@ namespace vkn {
void Init() 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/queue.h"
namespace vkn {
CommandWorker* Backend::TransferWorker;
CommandWorker* Backend::RenderWorker;
CommandWorker* Backend::PresentWorker;
Backend::Backend(string_view appName) : mWorkerMap(GlobalPool())
{
InstanceCreator instanceCreator{};

View File

@ -1,5 +1,6 @@
#include "vkn/vulkan_api.h"
#include "vkn/vulkan_window.h"
#include "render/asset/mesh.h"
namespace vkn {
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)
{
}
}