Got a bit further
This commit is contained in:
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"name": "TerrainMaterial",
|
||||||
|
"params": {
|
||||||
|
},
|
||||||
|
"code": [
|
||||||
|
{
|
||||||
|
"exp": "BRDF",
|
||||||
|
"profile": "BlinnPhong",
|
||||||
|
"values": {
|
||||||
|
"baseColor": "float3(0, 1, 0)",
|
||||||
|
"normal": "float3(0, 0, 1)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -17,7 +17,7 @@ MaterialLoader::MaterialLoader(Gfx::PGraphics graphics)
|
|||||||
{
|
{
|
||||||
OMaterialAsset placeholderAsset = new MaterialAsset();
|
OMaterialAsset placeholderAsset = new MaterialAsset();
|
||||||
import(MaterialImportArgs{
|
import(MaterialImportArgs{
|
||||||
.filePath = std::filesystem::absolute("./shaders/Placeholder.asset"),
|
.filePath = std::filesystem::absolute("./shaders/Placeholder.json"),
|
||||||
.importPath = "",
|
.importPath = "",
|
||||||
}, placeholderAsset);
|
}, placeholderAsset);
|
||||||
AssetRegistry::get().assetRoot->materials[""] = std::move(placeholderAsset);
|
AssetRegistry::get().assetRoot->materials[""] = std::move(placeholderAsset);
|
||||||
|
|||||||
@@ -257,6 +257,7 @@ void MeshLoader::loadGlobalMeshes(const aiScene* scene, const Array<PMaterialAss
|
|||||||
globalMeshes[meshIndex]->id = id;
|
globalMeshes[meshIndex]->id = id;
|
||||||
globalMeshes[meshIndex]->referencedMaterial = materials[mesh->mMaterialIndex]->getMaterial()->instantiate();
|
globalMeshes[meshIndex]->referencedMaterial = materials[mesh->mMaterialIndex]->getMaterial()->instantiate();
|
||||||
globalMeshes[meshIndex]->meshlets = std::move(meshlets);
|
globalMeshes[meshIndex]->meshlets = std::move(meshlets);
|
||||||
|
globalMeshes[meshIndex]->vertexCount = mesh->mNumVertices;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
#include "Asset/MaterialLoader.h"
|
#include "Asset/MaterialLoader.h"
|
||||||
#include "Asset/FontLoader.h"
|
#include "Asset/FontLoader.h"
|
||||||
#include "Asset/AssetImporter.h"
|
#include "Asset/AssetImporter.h"
|
||||||
|
#include "Graphics/StaticMeshVertexData.h"
|
||||||
|
|
||||||
using namespace Seele;
|
using namespace Seele;
|
||||||
using namespace Seele::Editor;
|
using namespace Seele::Editor;
|
||||||
@@ -29,6 +30,8 @@ int main()
|
|||||||
|
|
||||||
GraphicsInitializer initializer;
|
GraphicsInitializer initializer;
|
||||||
graphics->init(initializer);
|
graphics->init(initializer);
|
||||||
|
StaticMeshVertexData* vd = StaticMeshVertexData::getInstance();
|
||||||
|
vd->init(graphics);
|
||||||
PWindowManager windowManager = new WindowManager();
|
PWindowManager windowManager = new WindowManager();
|
||||||
AssetRegistry::init(std::string("C:/Users/Dynamitos/TrackClear/Assets"), graphics);
|
AssetRegistry::init(std::string("C:/Users/Dynamitos/TrackClear/Assets"), graphics);
|
||||||
AssetImporter::init(graphics, AssetRegistry::getInstance());
|
AssetImporter::init(graphics, AssetRegistry::getInstance());
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ struct GraphicsInitializer
|
|||||||
, engineName("SeeleEngine")
|
, engineName("SeeleEngine")
|
||||||
, windowLayoutFile(nullptr)
|
, windowLayoutFile(nullptr)
|
||||||
, layers{"VK_LAYER_KHRONOS_validation"}
|
, layers{"VK_LAYER_KHRONOS_validation"}
|
||||||
, instanceExtensions{"VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME"}
|
, instanceExtensions{}
|
||||||
, deviceExtensions{"VK_KHR_swapchain"}
|
, deviceExtensions{"VK_KHR_swapchain"}
|
||||||
, windowHandle(nullptr)
|
, windowHandle(nullptr)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ StaticMeshVertexData* StaticMeshVertexData::getInstance()
|
|||||||
void StaticMeshVertexData::loadPositions(MeshId id, const Array<Vector>& data)
|
void StaticMeshVertexData::loadPositions(MeshId id, const Array<Vector>& data)
|
||||||
{
|
{
|
||||||
uint64 offset = meshOffsets[id];
|
uint64 offset = meshOffsets[id];
|
||||||
assert(offset + data.size() < head);
|
assert(offset + data.size() <= head);
|
||||||
std::memcpy(positionData.data() + offset, data.data(), data.size() * sizeof(Vector));
|
std::memcpy(positionData.data() + offset, data.data(), data.size() * sizeof(Vector));
|
||||||
dirty = true;
|
dirty = true;
|
||||||
}
|
}
|
||||||
@@ -32,7 +32,7 @@ void StaticMeshVertexData::loadPositions(MeshId id, const Array<Vector>& data)
|
|||||||
void StaticMeshVertexData::loadTexCoords(MeshId id, const Array<Vector2>& data)
|
void StaticMeshVertexData::loadTexCoords(MeshId id, const Array<Vector2>& data)
|
||||||
{
|
{
|
||||||
uint64 offset = meshOffsets[id];
|
uint64 offset = meshOffsets[id];
|
||||||
assert(offset + data.size() < head);
|
assert(offset + data.size() <= head);
|
||||||
std::memcpy(texCoordsData.data() + offset, data.data(), data.size() * sizeof(Vector2));
|
std::memcpy(texCoordsData.data() + offset, data.data(), data.size() * sizeof(Vector2));
|
||||||
dirty = true;
|
dirty = true;
|
||||||
}
|
}
|
||||||
@@ -40,7 +40,7 @@ void StaticMeshVertexData::loadTexCoords(MeshId id, const Array<Vector2>& data)
|
|||||||
void StaticMeshVertexData::loadNormals(MeshId id, const Array<Vector>& data)
|
void StaticMeshVertexData::loadNormals(MeshId id, const Array<Vector>& data)
|
||||||
{
|
{
|
||||||
uint64 offset = meshOffsets[id];
|
uint64 offset = meshOffsets[id];
|
||||||
assert(offset + data.size() < head);
|
assert(offset + data.size() <= head);
|
||||||
std::memcpy(normalData.data() + offset, data.data(), data.size() * sizeof(Vector));
|
std::memcpy(normalData.data() + offset, data.data(), data.size() * sizeof(Vector));
|
||||||
dirty = true;
|
dirty = true;
|
||||||
}
|
}
|
||||||
@@ -48,7 +48,7 @@ void StaticMeshVertexData::loadNormals(MeshId id, const Array<Vector>& data)
|
|||||||
void StaticMeshVertexData::loadTangents(MeshId id, const Array<Vector>& data)
|
void StaticMeshVertexData::loadTangents(MeshId id, const Array<Vector>& data)
|
||||||
{
|
{
|
||||||
uint64 offset = meshOffsets[id];
|
uint64 offset = meshOffsets[id];
|
||||||
assert(offset + data.size() < head);
|
assert(offset + data.size() <= head);
|
||||||
std::memcpy(tangentData.data() + offset, data.data(), data.size() * sizeof(Vector));
|
std::memcpy(tangentData.data() + offset, data.data(), data.size() * sizeof(Vector));
|
||||||
dirty = true;
|
dirty = true;
|
||||||
}
|
}
|
||||||
@@ -56,7 +56,7 @@ void StaticMeshVertexData::loadTangents(MeshId id, const Array<Vector>& data)
|
|||||||
void StaticMeshVertexData::loadBiTangents(MeshId id, const Array<Vector>& data)
|
void StaticMeshVertexData::loadBiTangents(MeshId id, const Array<Vector>& data)
|
||||||
{
|
{
|
||||||
uint64 offset = meshOffsets[id];
|
uint64 offset = meshOffsets[id];
|
||||||
assert(offset + data.size() < head);
|
assert(offset + data.size() <= head);
|
||||||
std::memcpy(biTangentData.data() + offset, data.data(), data.size() * sizeof(Vector));
|
std::memcpy(biTangentData.data() + offset, data.data(), data.size() * sizeof(Vector));
|
||||||
dirty = true;
|
dirty = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -392,7 +392,7 @@ void* ShaderBuffer::lock(bool writeOnly)
|
|||||||
{
|
{
|
||||||
return dedicatedStagingBuffer->getMappedPointer();
|
return dedicatedStagingBuffer->getMappedPointer();
|
||||||
}
|
}
|
||||||
return ShaderBuffer::lock(writeOnly);
|
return Vulkan::Buffer::lock(writeOnly);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShaderBuffer::unlock()
|
void ShaderBuffer::unlock()
|
||||||
|
|||||||
@@ -445,7 +445,7 @@ void Graphics::pickPhysicalDevice()
|
|||||||
{
|
{
|
||||||
uint32 currentRating = 0;
|
uint32 currentRating = 0;
|
||||||
vkGetPhysicalDeviceProperties(dev, &props);
|
vkGetPhysicalDeviceProperties(dev, &props);
|
||||||
vkGetPhysicalDeviceFeatures2(dev, &features);
|
vkGetPhysicalDeviceFeatures(dev, &features);
|
||||||
if (props.deviceType == VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU)
|
if (props.deviceType == VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU)
|
||||||
{
|
{
|
||||||
std::cout << "found dedicated gpu " << props.deviceName << std::endl;
|
std::cout << "found dedicated gpu " << props.deviceName << std::endl;
|
||||||
@@ -465,7 +465,7 @@ void Graphics::pickPhysicalDevice()
|
|||||||
}
|
}
|
||||||
physicalDevice = bestDevice;
|
physicalDevice = bestDevice;
|
||||||
vkGetPhysicalDeviceProperties(physicalDevice, &props);
|
vkGetPhysicalDeviceProperties(physicalDevice, &props);
|
||||||
vkGetPhysicalDeviceFeatures2(physicalDevice, &features);
|
vkGetPhysicalDeviceFeatures(physicalDevice, &features);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Graphics::createDevice(GraphicsInitializer initializer)
|
void Graphics::createDevice(GraphicsInitializer initializer)
|
||||||
@@ -565,7 +565,7 @@ void Graphics::createDevice(GraphicsInitializer initializer)
|
|||||||
VkDeviceCreateInfo deviceInfo = init::DeviceCreateInfo(
|
VkDeviceCreateInfo deviceInfo = init::DeviceCreateInfo(
|
||||||
queueInfos.data(),
|
queueInfos.data(),
|
||||||
(uint32)queueInfos.size(),
|
(uint32)queueInfos.size(),
|
||||||
&features);
|
nullptr);
|
||||||
|
|
||||||
VkPhysicalDeviceDescriptorIndexingFeatures descriptorIndexing = {
|
VkPhysicalDeviceDescriptorIndexingFeatures descriptorIndexing = {
|
||||||
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES,
|
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES,
|
||||||
@@ -594,8 +594,6 @@ void Graphics::createDevice(GraphicsInitializer initializer)
|
|||||||
{
|
{
|
||||||
descriptorIndexing.pNext = &enabledMeshShaderFeatures;
|
descriptorIndexing.pNext = &enabledMeshShaderFeatures;
|
||||||
initializer.deviceExtensions.add("VK_EXT_mesh_shader");
|
initializer.deviceExtensions.add("VK_EXT_mesh_shader");
|
||||||
initializer.deviceExtensions.add("VK_KHR_SPIRV_1_4_EXTENSION_NAME");
|
|
||||||
initializer.deviceExtensions.add("VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME");
|
|
||||||
}
|
}
|
||||||
deviceInfo.enabledExtensionCount = (uint32)initializer.deviceExtensions.size();
|
deviceInfo.enabledExtensionCount = (uint32)initializer.deviceExtensions.size();
|
||||||
deviceInfo.ppEnabledExtensionNames = initializer.deviceExtensions.data();
|
deviceInfo.ppEnabledExtensionNames = initializer.deviceExtensions.data();
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ protected:
|
|||||||
thread_local static OCommandBufferManager transferCommands;
|
thread_local static OCommandBufferManager transferCommands;
|
||||||
thread_local static OCommandBufferManager dedicatedTransferCommands;
|
thread_local static OCommandBufferManager dedicatedTransferCommands;
|
||||||
VkPhysicalDeviceProperties props;
|
VkPhysicalDeviceProperties props;
|
||||||
VkPhysicalDeviceFeatures2 features;
|
VkPhysicalDeviceFeatures features;
|
||||||
VkDebugReportCallbackEXT callback;
|
VkDebugReportCallbackEXT callback;
|
||||||
std::mutex viewportLock;
|
std::mutex viewportLock;
|
||||||
Array<PViewport> viewports;
|
Array<PViewport> viewports;
|
||||||
|
|||||||
@@ -51,11 +51,6 @@ VkDeviceCreateInfo DeviceCreateInfo(
|
|||||||
uint32_t queueCount,
|
uint32_t queueCount,
|
||||||
VkPhysicalDeviceFeatures *features);
|
VkPhysicalDeviceFeatures *features);
|
||||||
|
|
||||||
VkDeviceCreateInfo DeviceCreateInfo(
|
|
||||||
VkDeviceQueueCreateInfo* queueInfos,
|
|
||||||
uint32_t queueCount,
|
|
||||||
VkPhysicalDeviceFeatures2* features);
|
|
||||||
|
|
||||||
VkSwapchainCreateInfoKHR SwapchainCreateInfo(
|
VkSwapchainCreateInfoKHR SwapchainCreateInfo(
|
||||||
VkSurfaceKHR surface,
|
VkSurfaceKHR surface,
|
||||||
uint32_t minImageCount,
|
uint32_t minImageCount,
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ MaterialInstance::MaterialInstance(uint64 id,
|
|||||||
parameters.reserve(params.size());
|
parameters.reserve(params.size());
|
||||||
for (int i = 0; i < params.size(); ++i)
|
for (int i = 0; i < params.size(); ++i)
|
||||||
{
|
{
|
||||||
Serialization::save(buffer, params[i]);
|
Serialization::save(buffer, expressions[params[i]]);
|
||||||
buffer.rewind();
|
buffer.rewind();
|
||||||
OShaderParameter param;
|
OShaderParameter param;
|
||||||
Serialization::load(buffer, param);
|
Serialization::load(buffer, param);
|
||||||
|
|||||||
Reference in New Issue
Block a user