CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
RenderResourceRef.hpp
Go to the documentation of this file.
1//
2// CeresEngine - A game development framework
3//
4// Created by Rogiel Sulzbach.
5// Copyright (c) 2018-2022 Rogiel Sulzbach. All rights reserved.
6//
7
8#pragma once
9
10#include "Forward.hpp"
11
12namespace CeresEngine {
13
14 template<> class TRenderResourceRef<> {
15 private:
18
19 public:
20 explicit TRenderResourceRef(RenderTask* task, const StringView name) : TRenderResourceRef(*task, name) {}
21 explicit TRenderResourceRef(RenderTask& task, const StringView name) : mTask(task), mName(name) {}
22
23 public:
24 [[nodiscard]] RenderTask& getRenderTask() const { return mTask; }
25
26 [[nodiscard]] virtual bool isInput() const = 0;
27 [[nodiscard]] virtual bool isOutput() const = 0;
28 };
29
30 template<typename T> class TRenderResourceRef : public TRenderResourceRef<> {
31 private:
32 T* mResource = nullptr;
33
34 public:
35 using TRenderResourceRef<>::TRenderResourceRef;
36
37 public:
38 [[nodiscard]] T& get() const { return *mResource; }
39 [[nodiscard]] bool valid() const { return mResource != nullptr; }
40
41 [[nodiscard]] explicit operator bool() const { return valid(); }
42
43 [[nodiscard]] T& operator*() const { return get(); }
44 [[nodiscard]] T* operator->() const { return &get(); }
45 [[nodiscard]] operator T&() const { return get(); }
46 [[nodiscard]] operator T*() const { return &get(); }
47 };
48
52 template<typename T> class RenderGraphInput final : public TRenderResourceRef<T> {
53 private:
56
57 public:
58 using TRenderResourceRef<T>::TRenderResourceRef;
59
60 public:
61 RenderGraphInput& operator=(const RenderGraphOutput<T>& output) { return *this; }
62
63 public:
65 [[nodiscard]] bool isInput() const final { return true; }
66
68 [[nodiscard]] bool isOutput() const final { return false; }
69 };
70
73
76
80 template<typename T> class RenderGraphOutput final : public TRenderResourceRef<T> {
81 public:
82 using TRenderResourceRef<T>::TRenderResourceRef;
83
84 public:
86 [[nodiscard]] bool isInput() const final { return false; }
87
89 [[nodiscard]] bool isOutput() const final { return true; }
90 };
91
94
97
98} // namespace CeresEngine
A special type of render resource ref that is used to reference inputs of a render task.
Definition RenderResourceRef.hpp:52
bool isOutput() const final
Definition RenderResourceRef.hpp:68
bool isInput() const final
Definition RenderResourceRef.hpp:65
RenderGraphOutput< T > * mConnectedOutput
If an this input is connected to an output, defines which output.
Definition RenderResourceRef.hpp:55
RenderGraphInput & operator=(const RenderGraphOutput< T > &output)
Definition RenderResourceRef.hpp:61
A special type of render resource ref that is used to reference outputs of a render task.
Definition RenderResourceRef.hpp:80
bool isInput() const final
Definition RenderResourceRef.hpp:86
bool isOutput() const final
Definition RenderResourceRef.hpp:89
Definition RenderTask.hpp:164
virtual bool isInput() const =0
virtual bool isOutput() const =0
StringView mName
Definition RenderResourceRef.hpp:17
RenderTask & mTask
Definition RenderResourceRef.hpp:16
TRenderResourceRef(RenderTask &task, const StringView name)
Definition RenderResourceRef.hpp:21
RenderTask & getRenderTask() const
Definition RenderResourceRef.hpp:24
TRenderResourceRef(RenderTask *task, const StringView name)
Definition RenderResourceRef.hpp:20
Definition RenderResourceRef.hpp:30
T & get() const
Definition RenderResourceRef.hpp:38
bool valid() const
Definition RenderResourceRef.hpp:39
T * operator->() const
Definition RenderResourceRef.hpp:44
T & operator*() const
Definition RenderResourceRef.hpp:43
T * mResource
Definition RenderResourceRef.hpp:32
Definition Application.hpp:19
TOutput< ImageRenderResource > ImageOutput
An output slot that represents an image.
Definition RenderGraphSlot.hpp:329
TInput< ImageRenderResource > ImageInput
An input slot that represents an image.
Definition RenderGraphSlot.hpp:323
TInput< BufferRenderResource > BufferInput
An input slot that represents a buffer.
Definition RenderGraphSlot.hpp:326
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25
TOutput< BufferRenderResource > BufferOutput
An output slot that represents a buffer.
Definition RenderGraphSlot.hpp:332