Skip to content
Snippets Groups Projects
Commit e5a8b8d4 authored by Philip Trettner's avatar Philip Trettner
Browse files

added push constant type to pipeline

parent a49578ee
Branches
No related tags found
No related merge requests found
......@@ -41,8 +41,8 @@ struct SubPassBuilder
attachments.emplace_back(attachment_action::read, type_of<T>, attachment.name);
}
template <class VertexT, class FragmentT>
PrimitivePipelineBuilder<VertexT, FragmentT> buildPipeline(SharedVertexShader<VertexT> const& vs,
template <class ConstantT = void, class VertexT, class FragmentT>
PrimitivePipelineBuilder<VertexT, FragmentT, ConstantT> buildPipeline(SharedVertexShader<VertexT> const& vs,
SharedFragmentShader<FragmentT> const& fs,
topology topo = topology::triangles)
{
......
......@@ -8,7 +8,7 @@
namespace tg
{
template <class VertexT, class FragmentT>
template <class VertexT, class FragmentT, class ConstantT = void>
struct PrimitivePipelineBuilder
{
PrimitivePipelineBuilder(SharedVertexShader<VertexT> const& vs, SharedFragmentShader<FragmentT> const& fs, topology topology = topology::triangles)
......
......@@ -24,6 +24,16 @@
klass type; \
template <class T1, class T2> \
using Shared##type = std::shared_ptr<type<T1, T2>> // force ;
#define TG_SHARED_T3(klass, type, T1, T2, T3) \
template <class T1, class T2, class T3> \
klass type; \
template <class T1, class T2, class T3> \
using Shared##type = std::shared_ptr<type<T1, T2, T3>> // force ;
#define TG_SHARED_T3D1(klass, type, T1, T2, T3, D3) \
template <class T1, class T2, class T3 = D3> \
klass type; \
template <class T1, class T2, class T3 = D3> \
using Shared##type = std::shared_ptr<type<T1, T2, T3>> // force ;
// delete certain ctors/operators for our RAII usage
#define TG_RAII_TYPE(T) \
......
......@@ -19,7 +19,7 @@ public:
CommandBuffer() = default;
public:
template <class VertexT, class FragmentT>
template <class VertexT, class FragmentT, class ConstantT>
struct PrimitivePipelineRecorder
{
TG_RAII_TYPE(PrimitivePipelineRecorder);
......@@ -37,12 +37,12 @@ public:
// TODO
}
template <class PushConstants>
template <class PushConstants = ConstantT, class = std::enable_if_t<!std::is_same_v<ConstantT, void>>>
void draw(PushConstants const& constants, SharedBuffer<VertexT> const& vertexBuffer)
{
draw(constants, vertexBuffer->view());
}
template <class PushConstants>
template <class PushConstants = ConstantT, class = std::enable_if_t<!std::is_same_v<ConstantT, void>>>
void draw(PushConstants const& constants, SharedBufferView<VertexT> const& vertexBuffer)
{
// TODO
......@@ -52,8 +52,8 @@ public:
{
TG_RAII_TYPE(RenderPassRecorder);
template <class VertexT, class FragmentT>
PrimitivePipelineRecorder<VertexT, FragmentT> recordPipeline(SharedPrimitivePipeline<VertexT, FragmentT> const& pipeline)
template <class VertexT, class FragmentT, class ConstantT>
PrimitivePipelineRecorder<VertexT, FragmentT, ConstantT> recordPipeline(SharedPrimitivePipeline<VertexT, FragmentT, ConstantT> const& pipeline)
{
return {};
}
......
......@@ -59,8 +59,8 @@ public:
SharedRenderPass createRenderPass(RenderPassBuilder const& builder);
SharedRenderPass createRenderPass(SubPassBuilder const& builder);
template <class VertexT, class FragmentT>
SharedPrimitivePipeline<VertexT, FragmentT> createPrimitivePipeline(PrimitivePipelineBuilder<VertexT, FragmentT> const& builder);
template <class VertexT, class FragmentT, class ConstantT>
SharedPrimitivePipeline<VertexT, FragmentT, ConstantT> createPrimitivePipeline(PrimitivePipelineBuilder<VertexT, FragmentT, ConstantT> const& builder);
// commands
public:
......@@ -86,10 +86,12 @@ private:
bool mIsDebug;
};
template <class VertexT, class FragmentT>
SharedPrimitivePipeline<VertexT, FragmentT> Device::createPrimitivePipeline(PrimitivePipelineBuilder<VertexT, FragmentT> const& builder)
// ========= IMPLEMENTATION ==========
template <class VertexT, class FragmentT, class ConstantT>
SharedPrimitivePipeline<VertexT, FragmentT, ConstantT> Device::createPrimitivePipeline(PrimitivePipelineBuilder<VertexT, FragmentT, ConstantT> const& builder)
{
// TODO
return std::make_shared<PrimitivePipeline<VertexT, FragmentT>>();
return std::make_shared<PrimitivePipeline<VertexT, FragmentT, ConstantT>>();
}
} // namespace tg
#pragma once
#include <tg/common/macros.hh>
#include <tg/typed-graphics-lean.hh>
#include <tg/data/vertex_format.hh>
......@@ -29,13 +29,15 @@ namespace tg
* TODO:
* * for now, viewport and scissor is always dynamic
*/
template <class VertexT, class FragmentT>
template <class VertexT, class FragmentT, class ConstantT>
class PrimitivePipeline
{
TG_REFERENCE_TYPE(PrimitivePipeline);
public:
using vertex_t = VertexT;
using fragment_t = FragmentT;
using constant_t = ConstantT;
PrimitivePipeline() = default;
};
......
......@@ -16,7 +16,7 @@ TG_SHARED(class, Window);
TG_SHARED(class, CommandBuffer);
TG_SHARED(class, RenderPass);
TG_SHARED_T2(class, PrimitivePipeline, VertexT, FragmentT);
TG_SHARED_T3D1(class, PrimitivePipeline, VertexT, FragmentT, ConstantT, void);
TG_SHARED_T1(class, Framebuffer, FragmentT);
TG_SHARED_T1(class, Buffer, DataT);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment