44class VENOM_COMMON_API ShaderPipelineImpl :
public PluginObjectImpl,
public GraphicsPluginObject,
public GraphicsCachedResourceHolder
48 virtual ~ShaderPipelineImpl() =
default;
60 const ShaderVertexFormat format;
61 const uint32_t binding;
62 const uint32_t location;
63 const uint32_t offset;
72 void AddVertexBufferToLayout(
const ShaderVertexFormat format,
const uint32_t binding,
const uint32_t location,
const uint32_t offset);
90 void SetMultiSamplingCount(
const int samples);
91 inline vc::Error SetLineWidth(
const float width) { _SetLineWidth(width);
return _ReloadShaderAfterSettings(); }
92 inline vc::Error SetDepthTest(
const bool enable) { _SetDepthTest(enable);
return _ReloadShaderAfterSettings(); }
93 inline vc::Error SetDepthWrite(
const bool enable) { _SetDepthWrite(enable);
return _ReloadShaderAfterSettings(); }
94 inline vc::Error OpenAndReloadShader()
96 if (_OpenShaders() != vc::Error::Success)
return vc::Error::Failure;
97 return _ReloadShader();
100 inline void SetRenderingPipelineType(
const RenderingPipelineType type) { _renderingPipelineType = type; }
101 inline void SetRenderingPipelineShaderType(
const RenderingPipelineShaderType type) { _renderingPipelineShaderType = type; }
102 inline void SetRenderingPipelineIndex(
const uint32_t index) { _renderingPipelineIndex = index; }
104 inline RenderingPipelineType GetRenderingPipelineType()
const {
return _renderingPipelineType; }
105 inline RenderingPipelineShaderType GetRenderingPipelineShaderType()
const {
return _renderingPipelineShaderType; }
108 virtual void _SetMultiSamplingCount(
const int samples) = 0;
109 virtual void _SetLineWidth(
const float width) = 0;
110 virtual void _SetDepthTest(
const bool enable) = 0;
111 virtual void _SetDepthWrite(
const bool enable) = 0;
112 virtual vc::Error _LoadShader(
const vc::String & path) = 0;
113 virtual void _AddVertexBufferToLayout(
const uint32_t vertexSize,
const uint32_t binding,
const uint32_t location,
const uint32_t offset,
const ShaderVertexFormat format) = 0;
115 virtual vc::Error _OpenShaders() = 0;
116 virtual vc::Error _ReloadShader() = 0;
117 inline vc::Error _ReloadShaderAfterSettings() {
118 if (_loaded)
return _ReloadShader();
119 return vc::Error::Success;
122 RenderingPipelineType _renderingPipelineType;
123 RenderingPipelineShaderType _renderingPipelineShaderType;
124 uint32_t _renderingPipelineIndex;
128 bool __customSamples;
131class VENOM_COMMON_API ShaderPipeline :
public PluginObjectImplWrapper
135 ShaderPipeline(
const char * path);
138 static vc::Error RecompileAllShaders();
139 static vc::Error ReloadAllShaders();
140 inline vc::Error OpenAndReloadShader() {
return _impl->As<
ShaderPipelineImpl>()->OpenAndReloadShader(); }
141 inline void SetRenderingPipelineIndex(
const uint32_t index) { _impl->As<
ShaderPipelineImpl>()->SetRenderingPipelineIndex(index); }
142 inline void SetRenderingPipelineType(
const RenderingPipelineType type) { _impl->As<
ShaderPipelineImpl>()->SetRenderingPipelineType(type); }
143 inline void SetRenderingPipelineShaderType(
const RenderingPipelineShaderType type) { _impl->As<
ShaderPipelineImpl>()->SetRenderingPipelineShaderType(type); }
144 inline vc::Error LoadShaderFromFile(
const char * path) {
return _impl->As<
ShaderPipelineImpl>()->LoadShaderFromFile(path); }
145 inline void AddVertexBufferToLayout(
const ShaderVertexFormat format,
const uint32_t binding,
const uint32_t location,
const uint32_t offset) { _impl->As<
ShaderPipelineImpl>()->AddVertexBufferToLayout(format, binding, location, offset); }
147 inline void AddVertexBufferToLayout(
const vc::Vector<ShaderPipelineImpl::VertexBufferLayout> & layouts) { _impl->As<
ShaderPipelineImpl>()->AddVertexBufferToLayout(layouts); }
148 inline void SetLineWidth(
const float width) { _impl->As<
ShaderPipelineImpl>()->SetLineWidth(width); }
149 inline void SetDepthTest(
const bool enable) { _impl->As<
ShaderPipelineImpl>()->SetDepthTest(enable); }
150 inline void SetDepthWrite(
const bool enable) { _impl->As<
ShaderPipelineImpl>()->SetDepthWrite(enable); }
152 inline void SetCustomMultiSamplingCount(
const int samples) { _impl->As<
ShaderPipelineImpl>()->SetCustomMultiSamplingCount(samples); }
void AddVertexBufferToLayout(const ShaderVertexFormat format, const uint32_t binding, const uint32_t location, const uint32_t offset)
Add a vertex buffer to the layout.
Definition ShaderPipeline.cc:60