60 lines
2.5 KiB
C++
60 lines
2.5 KiB
C++
#pragma once
|
|
|
|
#include <Core/Container/Vector.h>
|
|
#include <Core/Math/Matrix.h>
|
|
#include <Graphics/GraphicsConfig.h>
|
|
#include <Graphics/Lighting.h>
|
|
#include <Graphics/PushConstants.h>
|
|
#include <Graphics/VertexData.h>
|
|
#include <Graphics/Mesh.h>
|
|
#include <Juliet.h>
|
|
|
|
namespace Juliet
|
|
{
|
|
struct GraphicsTransferBuffer;
|
|
struct RenderPass;
|
|
struct CommandList;
|
|
struct GraphicsBuffer;
|
|
struct Window;
|
|
struct GraphicsPipeline;
|
|
struct GraphicsDevice;
|
|
using LightID = index_t;
|
|
|
|
constexpr size_t kGeometryPage = Megabytes(64);
|
|
constexpr size_t kIndexPage = Megabytes(32);
|
|
constexpr size_t kDefaultMeshNumber = 500;
|
|
constexpr size_t kDefaultVertexCount = 2'000'000; // Fit less than one geometry page
|
|
constexpr size_t kDefaultIndexCount = 16'000'000; // Fit less than one index page
|
|
constexpr size_t kDefaultLightCount = 1024;
|
|
|
|
JULIET_API void InitializeMeshRenderer(NonNullPtr<Arena> assetArena, NonNullPtr<Arena> instanceArena);
|
|
[[nodiscard]] JULIET_API bool InitializeMeshRendererGraphics(NonNullPtr<GraphicsDevice> device, NonNullPtr<Window> window);
|
|
JULIET_API void ShutdownMeshRendererGraphics();
|
|
JULIET_API void ShutdownMeshRenderer();
|
|
JULIET_API void LoadMeshesOnGPU(NonNullPtr<CommandList> cmdList);
|
|
JULIET_API void RenderMeshes(NonNullPtr<CommandList> cmdList, NonNullPtr<RenderPass> pass, const Matrix& viewProjection);
|
|
|
|
// Lights
|
|
[[nodiscard]] JULIET_API LightID AddPointLight(const PointLight& light);
|
|
JULIET_API void SetPointLightPosition(LightID id, const Vector3& position);
|
|
JULIET_API void SetPointLightColor(LightID id, const Vector3& color);
|
|
JULIET_API void SetPointLightRadius(LightID id, float radius);
|
|
JULIET_API void SetPointLightIntensity(LightID id, float intensity);
|
|
JULIET_API void ClearPointLights();
|
|
|
|
// Assets & Instances
|
|
[[nodiscard]] JULIET_API MeshAssetID GetOrCreateMeshAsset(String name);
|
|
[[nodiscard]] JULIET_API MeshInstanceID CreateMeshInstance(MeshAssetID meshAsset, MaterialAssetID materialAsset, const Matrix& transform);
|
|
JULIET_API void SetMeshInstanceTransform(MeshInstanceID id, const Matrix& transform);
|
|
|
|
// Primitives
|
|
JULIET_API MeshAssetID GetCubePrimitiveMeshAssetID();
|
|
JULIET_API MeshAssetID GetQuadPrimitiveMeshAssetID();
|
|
JULIET_API MeshAssetID GetSpherePrimitiveMeshAssetID();
|
|
|
|
#if ALLOW_SHADER_HOT_RELOAD
|
|
JULIET_API void ReloadMeshRendererShaders();
|
|
#endif
|
|
|
|
} // namespace Juliet
|