2022-12-20 23:51:04 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "gfx.hpp"
|
|
|
|
|
2023-01-08 15:22:44 +00:00
|
|
|
namespace engine {
|
|
|
|
class GFXDevice;
|
|
|
|
}
|
2022-12-20 23:51:04 +00:00
|
|
|
|
|
|
|
namespace engine::resources {
|
|
|
|
|
|
|
|
class Shader {
|
|
|
|
|
|
|
|
public:
|
2023-01-02 17:24:20 +00:00
|
|
|
|
|
|
|
// defines what vertex inputs are defined, position is always vec3
|
|
|
|
struct VertexParams {
|
2023-01-20 16:30:35 +00:00
|
|
|
bool hasNormal; // vec3
|
|
|
|
bool hasTangent; // vec3
|
|
|
|
bool hasColor; // vec3
|
|
|
|
bool hasUV0; // vec2
|
2023-01-02 17:24:20 +00:00
|
|
|
};
|
|
|
|
|
2023-01-08 15:22:44 +00:00
|
|
|
Shader(GFXDevice* gfx, const char* vertPath, const char* fragPath, const VertexParams& vertexParams, bool alphaBlending, bool cullBackFace);
|
|
|
|
~Shader();
|
2022-12-20 23:51:04 +00:00
|
|
|
Shader(const Shader&) = delete;
|
|
|
|
Shader& operator=(const Shader&) = delete;
|
|
|
|
|
2023-01-08 15:22:44 +00:00
|
|
|
const gfx::Pipeline* getPipeline();
|
2022-12-20 23:51:04 +00:00
|
|
|
|
2023-03-13 01:19:32 +00:00
|
|
|
const gfx::DescriptorSet* getSetZero() { return m_setZero; }
|
|
|
|
|
2022-12-20 23:51:04 +00:00
|
|
|
private:
|
|
|
|
GFXDevice* const m_gfx;
|
2023-03-13 01:19:32 +00:00
|
|
|
const gfx::DescriptorSetLayout* m_setZeroLayout;
|
|
|
|
const gfx::DescriptorSet* m_setZero;
|
|
|
|
const gfx::Buffer* m_setZeroBuffer;
|
2022-12-20 23:51:04 +00:00
|
|
|
const gfx::Pipeline* m_pipeline;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|