Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
71 lines
2.6 KiB
C++
71 lines
2.6 KiB
C++
#pragma once
|
|
|
|
#include <mln/gfx/index_buffer.hpp>
|
|
#include <mln/gfx/vertex_buffer.hpp>
|
|
|
|
#include <mln/gfx/upload_pass.hpp>
|
|
#include <mln/gfx/renderbuffer.hpp>
|
|
|
|
namespace mln {
|
|
namespace gfx {
|
|
class CommandEncoder;
|
|
class Renderable;
|
|
} // namespace gfx
|
|
|
|
namespace webgpu {
|
|
|
|
class CommandEncoder;
|
|
|
|
class RenderbufferResource : public gfx::RenderbufferResource {
|
|
public:
|
|
RenderbufferResource() = default;
|
|
};
|
|
|
|
class UploadPass final : public gfx::UploadPass {
|
|
public:
|
|
UploadPass(gfx::Renderable& renderable, CommandEncoder& commandEncoder, const char* name);
|
|
~UploadPass() override;
|
|
|
|
private:
|
|
void pushDebugGroup(const char* name) override;
|
|
void popDebugGroup() override;
|
|
|
|
public:
|
|
gfx::Context& getContext() override;
|
|
const gfx::Context& getContext() const override;
|
|
|
|
std::unique_ptr<gfx::VertexBufferResource> createVertexBufferResource(const void* data,
|
|
std::size_t size,
|
|
gfx::BufferUsageType,
|
|
bool persistent) override;
|
|
void updateVertexBufferResource(gfx::VertexBufferResource&, const void* data, std::size_t size) override;
|
|
|
|
std::unique_ptr<gfx::IndexBufferResource> createIndexBufferResource(const void* data,
|
|
std::size_t size,
|
|
gfx::BufferUsageType,
|
|
bool persistent) override;
|
|
void updateIndexBufferResource(gfx::IndexBufferResource&, const void* data, std::size_t size) override;
|
|
|
|
gfx::AttributeBindingArray buildAttributeBindings(
|
|
const std::size_t vertexCount,
|
|
const gfx::AttributeDataType vertexType,
|
|
const std::size_t vertexAttributeIndex,
|
|
const std::vector<std::uint8_t>& vertexData,
|
|
const gfx::VertexAttributeArray& defaults,
|
|
const gfx::VertexAttributeArray& overrides,
|
|
gfx::BufferUsageType,
|
|
const std::optional<std::chrono::duration<double>> lastUpdate,
|
|
/*out*/ std::vector<std::unique_ptr<gfx::VertexBufferResource>>& outBuffers) override;
|
|
|
|
const gfx::UniqueVertexBufferResource& getBuffer(const gfx::VertexVectorBasePtr&,
|
|
gfx::BufferUsageType,
|
|
bool forceUpdate);
|
|
|
|
private:
|
|
CommandEncoder& commandEncoder;
|
|
std::vector<gfx::DebugGroup<gfx::UploadPass>> debugGroups;
|
|
};
|
|
|
|
} // namespace webgpu
|
|
} // namespace mln
|