#pragma once

// 引入抽象基类
#include "../CompleteShader.h"
#include "../ShaderProgram.h"
#include <glm/glm.hpp>

/**
 * @brief 默认着色器实现 (Shader2D)
 * 继承自 CompleteShader，用于 2D 渲染的默认着色器。
 */
class Shader2D final : public CompleteShader {
public:
    Shader2D();
    virtual ~Shader2D() = default;
    const Shader& getVertexShader() const override;
    const Shader& getFragmentShader() const override;
    std::string getShaderName() const override {
        return "Vivid2d Shader";
    }
    bool isDefaultShader() const override {
        return true;
    }
    void setDefaultUniforms(ShaderProgram* program) const override;
private:
    // 内部着色器类 (定义在 .cpp 文件中，这里只需前向声明)
    class VertexShaders;
    class FragmentShaders;

    // 静态成员存储着色器实例，确保单例和引用安全
    static const VertexShaders s_vertexShader;
    static const FragmentShaders s_fragmentShader;
};