Merge branch 'wip'

This commit is contained in:
2024-09-12 22:17:37 +02:00
24 changed files with 346 additions and 244 deletions

View File

@@ -8,6 +8,7 @@
#include "Base/ICloseable.hpp"
#include "Base/Utils.hpp"
#include "Base/Render/RenderResource.hpp"
#include "VertexInputDescription.hpp"
#include "ShaderProgramType.hpp"
#include "DescriptorInputDescription.hpp"
@@ -81,7 +82,7 @@ namespace OpenVulkano::Scene
class Shader final : public ICloseable
class Shader final : public RenderResourceHolder<Shader>, public ICloseable
{
public:
std::vector<ShaderProgram> shaderPrograms{};
@@ -90,7 +91,6 @@ namespace OpenVulkano::Scene
std::vector<PushConstantRange> pushConstantRanges;
Topology topology = Topology::TRIANGLE_LIST;
CullMode cullMode = CullMode::BACK;
ICloseable* renderShader = nullptr;
CompareOp depthCompareOp = CompareOp::LESS;
bool alphaBlend = false; // TODO allow fine control over blending
bool depthTest = true;
@@ -98,7 +98,7 @@ namespace OpenVulkano::Scene
bool dynamicViewport = true; // If disabled the swapchains fullscreen viewport will always be used, regardless of framebuffer or viewport
Shader() = default;
~Shader() override { if (renderShader) Shader::Close(); }
~Shader() override { Shader::Close(); }
Shader& AddShaderProgram(const ShaderProgram& shaderProgram)
{
@@ -165,14 +165,14 @@ namespace OpenVulkano::Scene
void Close() override
{
renderShader->Close();
renderShader = nullptr;
if (HasRenderResource())
GetRenderResource().Release();
}
private:
void CheckShaderInitState() const
{
if (renderShader) throw std::runtime_error("Shader already initialized!");
if (HasRenderResource()) throw std::runtime_error("Shader already initialized!");
}
};
}