Welcome to mirror list, hosted at ThFree Co, Russian Federation.

GLShader.hpp « GUI « slic3r « src - github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: c92ea274aab7e87a52c6c0d38e0f4c80859eaf7f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#ifndef slic3r_GLShader_hpp_
#define slic3r_GLShader_hpp_

#include <array>
#include <string>
#include <string_view>

#include "libslic3r/Point.hpp"

namespace Slic3r {

class GLShaderProgram
{
public:
    enum class EShaderType
    {
        Vertex,
        Fragment,
        Geometry,
        TessEvaluation,
        TessControl,
        Compute,
        Count
    };

    typedef std::array<std::string, static_cast<size_t>(EShaderType::Count)> ShaderFilenames;
    typedef std::array<std::string, static_cast<size_t>(EShaderType::Count)> ShaderSources;

private:
    std::string m_name;
    unsigned int m_id{ 0 };

public:
    ~GLShaderProgram();

    bool init_from_files(const std::string& name, const ShaderFilenames& filenames, const std::initializer_list<std::string_view> &defines = {});
    bool init_from_texts(const std::string& name, const ShaderSources& sources);

    const std::string& get_name() const { return m_name; }
    unsigned int get_id() const { return m_id; }

    void start_using() const;
    void stop_using() const;

    bool set_uniform(const char* name, int value) const;
    bool set_uniform(const char* name, bool value) const;
    bool set_uniform(const char* name, float value) const;
    bool set_uniform(const char* name, double value) const;
    bool set_uniform(const char* name, const std::array<int, 2>& value) const;
    bool set_uniform(const char* name, const std::array<int, 3>& value) const;
    bool set_uniform(const char* name, const std::array<int, 4>& value) const;
    bool set_uniform(const char* name, const std::array<float, 2>& value) const;
    bool set_uniform(const char* name, const std::array<float, 3>& value) const;
    bool set_uniform(const char* name, const std::array<float, 4>& value) const;
    bool set_uniform(const char* name, const float* value, size_t size) const;
    bool set_uniform(const char* name, const Transform3f& value) const;
    bool set_uniform(const char* name, const Transform3d& value) const;
    bool set_uniform(const char* name, const Matrix3f& value) const;
    bool set_uniform(const char* name, const Vec3f& value) const;
    bool set_uniform(const char* name, const Vec3d& value) const;

    // returns -1 if not found
    int get_attrib_location(const char* name) const;
    // returns -1 if not found
    int get_uniform_location(const char* name) const;
};

} // namespace Slic3r

#endif /* slic3r_GLShader_hpp_ */