This file is indexed.

/usr/include/globjects/AbstractUniform.h is in libglobjects-dev 1.1.0-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#pragma once

#include <string>
#include <set>
#include <vector>
#include <array>
#include <unordered_map>

#include <glm/fwd.hpp>

#include <globjects/base/Referenced.h>

#include <globjects/globjects_api.h>

#include <globjects/LocationIdentity.h>


namespace globjects
{


class TextureHandle;
class Program;
template<typename T> class Uniform;

/** \brief Abstract base class for templated Uniforms.
 *
 * Unifies the specialized Uniforms in order to be able to store them in a list or a vector.
 *
 * \see Uniform
 * \see Program
 */
class GLOBJECTS_API AbstractUniform : public Referenced
{
	friend class Program; ///< Programs (de)register themselves.

public:
    enum BindlessImplementation
    {
        SeparateShaderObjectsARB
    ,   Legacy
    };

    static void hintBindlessImplementation(const BindlessImplementation impl);

public:
    AbstractUniform(gl::GLint location);
	AbstractUniform(const std::string & name);

	const std::string & name() const;
    gl::GLint location() const;

    const LocationIdentity & identity() const;

    /** Simplifies the often required casting of AbstractUniforms.
     *
     * @return a specialized Uniform of the requested type, returns a nullptr on a type mismatch
     *
     * \code{.cpp}
     * abstractUniform->as<float>()->setValue(3.142f);
     * \endcode
	*/
	template<typename T> Uniform<T> * as();
    template<typename T> const Uniform<T> * as() const;

protected:
    virtual ~AbstractUniform();

	void registerProgram(Program * program);
	void deregisterProgram(Program * program);

	/** Iterates over all programs attached to and calls update.
		Should be called on every value change (i.e., in Uniform).
	*/
	void changed();

	/** Sets the uniform's value on the program.
	*/
    void update(const Program * program, bool invalidateLocation) const;

	/** This function requires knowledge of the unifom's value.
	*/
    virtual void updateAt(const Program * program, gl::GLint location) const = 0;

    gl::GLint locationFor(const Program * program) const;

protected:
    void setValue(const Program * program, gl::GLint location, const float & value) const;
    void setValue(const Program * program, gl::GLint location, const int & value) const;
    void setValue(const Program * program, gl::GLint location, const unsigned int & value) const;
    void setValue(const Program * program, gl::GLint location, const bool & value) const;

    void setValue(const Program * program, gl::GLint location, const glm::vec2 & value) const;
    void setValue(const Program * program, gl::GLint location, const glm::vec3 & value) const;
    void setValue(const Program * program, gl::GLint location, const glm::vec4 & value) const;

    void setValue(const Program * program, gl::GLint location, const glm::ivec2 & value) const;
    void setValue(const Program * program, gl::GLint location, const glm::ivec3 & value) const;
    void setValue(const Program * program, gl::GLint location, const glm::ivec4 & value) const;

    void setValue(const Program * program, gl::GLint location, const glm::uvec2 & value) const;
    void setValue(const Program * program, gl::GLint location, const glm::uvec3 & value) const;
    void setValue(const Program * program, gl::GLint location, const glm::uvec4 & value) const;

    void setValue(const Program * program, gl::GLint location, const glm::mat2 & value) const;
    void setValue(const Program * program, gl::GLint location, const glm::mat3 & value) const;
    void setValue(const Program * program, gl::GLint location, const glm::mat4 & value) const;

    void setValue(const Program * program, gl::GLint location, const glm::mat2x3 & value) const;
    void setValue(const Program * program, gl::GLint location, const glm::mat3x2 & value) const;
    void setValue(const Program * program, gl::GLint location, const glm::mat2x4 & value) const;
    void setValue(const Program * program, gl::GLint location, const glm::mat4x2 & value) const;
    void setValue(const Program * program, gl::GLint location, const glm::mat3x4 & value) const;
    void setValue(const Program * program, gl::GLint location, const glm::mat4x3 & value) const;

    void setValue(const Program * program, gl::GLint location, const gl::GLuint64 & value) const;
    void setValue(const Program * program, gl::GLint location, const TextureHandle & value) const;

    void setValue(const Program * program, gl::GLint location, const std::vector<float> & value) const;
    void setValue(const Program * program, gl::GLint location, const std::vector<int> & value) const;
    void setValue(const Program * program, gl::GLint location, const std::vector<unsigned int> & value) const;
    void setValue(const Program * program, gl::GLint location, const std::vector<bool> & value) const;

    void setValue(const Program * program, gl::GLint location, const std::vector<glm::vec2> & value) const;
    void setValue(const Program * program, gl::GLint location, const std::vector<glm::vec3> & value) const;
    void setValue(const Program * program, gl::GLint location, const std::vector<glm::vec4> & value) const;

    void setValue(const Program * program, gl::GLint location, const std::vector<glm::ivec2> & value) const;
    void setValue(const Program * program, gl::GLint location, const std::vector<glm::ivec3> & value) const;
    void setValue(const Program * program, gl::GLint location, const std::vector<glm::ivec4> & value) const;

    void setValue(const Program * program, gl::GLint location, const std::vector<glm::uvec2> & value) const;
    void setValue(const Program * program, gl::GLint location, const std::vector<glm::uvec3> & value) const;
    void setValue(const Program * program, gl::GLint location, const std::vector<glm::uvec4> & value) const;

    void setValue(const Program * program, gl::GLint location, const std::vector<glm::mat2> & value) const;
    void setValue(const Program * program, gl::GLint location, const std::vector<glm::mat3> & value) const;
    void setValue(const Program * program, gl::GLint location, const std::vector<glm::mat4> & value) const;

    void setValue(const Program * program, gl::GLint location, const std::vector<glm::mat2x3> & value) const;
    void setValue(const Program * program, gl::GLint location, const std::vector<glm::mat3x2> & value) const;
    void setValue(const Program * program, gl::GLint location, const std::vector<glm::mat2x4> & value) const;
    void setValue(const Program * program, gl::GLint location, const std::vector<glm::mat4x2> & value) const;
    void setValue(const Program * program, gl::GLint location, const std::vector<glm::mat3x4> & value) const;
    void setValue(const Program * program, gl::GLint location, const std::vector<glm::mat4x3> & value) const;

    void setValue(const Program * program, gl::GLint location, const std::vector<gl::GLuint64> & value) const;
    void setValue(const Program * program, gl::GLint location, const std::vector<TextureHandle> & value) const;

    template <typename T, std::size_t Count>
    void setValue(const Program * program, gl::GLint location, const std::array<T, Count> & value) const;

protected:
    LocationIdentity m_identity;
    std::set<Program *> m_programs;
    mutable std::unordered_map<const Program *, gl::GLint> m_locations;
};


} // namespace globjects


#include <globjects/AbstractUniform.inl>