.. index:: pair: class; EE::Graphics::ShaderProgram .. _doxid-class_e_e_1_1_graphics_1_1_shader_program: class EE::Graphics::ShaderProgram ================================= .. toctree:: :hidden: Overview ~~~~~~~~ The :ref:`Shader ` Program Class. :ref:`More...` .. ref-code-block:: cpp :class: doxyrest-overview-code-block #include class ShaderProgram { public: // typedefs typedef std::function :target:`ShaderProgramReloadCb`; // construction virtual :target:`~ShaderProgram`(); // methods static ShaderProgram* :ref:`New`(const std::string& Name = ""); static ShaderProgram* :ref:`New`(const std::vector<:ref:`Shader`*>& Shaders, const std::string& Name = ""); static ShaderProgram* :ref:`New`(const std::string& VertexShaderFile, const std::string& FragmentShaderFile, const std::string& Name = ""); static ShaderProgram* :ref:`New`(const char* VertexShaderData, const :ref:`Uint32`& VertexShaderDataSize, const char* FragmentShaderData, const :ref:`Uint32`& FragmentShaderDataSize, const std::string& Name = ""); static ShaderProgram* :ref:`New`(:ref:`Pack`* Pack, const std::string& VertexShaderPath, const std::string& FragmentShaderPath, const std::string& Name = ""); static ShaderProgram* :ref:`New`(const char** VertexShaderData, const :ref:`Uint32`& NumLinesVS, const char** FragmentShaderData, const :ref:`Uint32`& NumLinesFS, const std::string& Name = ""); void :ref:`addShader`(:ref:`Shader`* Shader); void :ref:`addShaders`(const std::vector<:ref:`Shader`*>& Shaders); virtual bool :target:`link`(); bool :ref:`isValid`() const; std::string :ref:`getLinkLog`() const; virtual void :ref:`bind`() const; virtual void :ref:`unbind`() const; :ref:`Int32` :ref:`getUniformLocation`(const std::string& Name); :ref:`Int32` :ref:`getAttributeLocation`(const std::string& Name); void :ref:`invalidateLocations`(); bool :ref:`setUniform`(const std::string& Name, float Value); bool :ref:`setUniform`(const std::string& Name, :ref:`Vector2ff` Value); bool :ref:`setUniform`(const std::string& Name, :ref:`Vector3ff` Value); bool :ref:`setUniform`(const std::string& Name, float x, float y, float z, float w); bool :ref:`setUniform`(const std::string& Name, :ref:`Int32` Value); bool :ref:`setUniform`(const :ref:`Int32`& Location, :ref:`Int32` Value); bool :ref:`setUniform`(const :ref:`Int32`& Location, float Value); bool :ref:`setUniform`(const :ref:`Int32`& Location, :ref:`Vector2ff` Value); bool :ref:`setUniform`(const :ref:`Int32`& Location, :ref:`Vector3ff` Value); bool :ref:`setUniform`(const :ref:`Int32`& Location, float x, float y, float z, float w); bool :ref:`setUniformMatrix`(const std::string Name, const float* Value); bool :ref:`setUniformMatrix`(const :ref:`Int32`& Location, const float* Value); const :ref:`Uint32`& :ref:`getHandler`() const; const :ref:`String::HashType`& :ref:`getId`() const; void :ref:`reload`(); const std::string& :ref:`getName`() const; void :ref:`setName`(const std::string& Name); void :ref:`setReloadCb`(:ref:`ShaderProgramReloadCb` Cb); void :ref:`enableVertexAttribArray`(const std::string& Name); void :ref:`enableVertexAttribArray`(const :ref:`Int32`& Location); void :ref:`disableVertexAttribArray`(const std::string& Name); void :ref:`disableVertexAttribArray`(const :ref:`Int32`& Location); }; .. _details-class_e_e_1_1_graphics_1_1_shader_program: Detailed Documentation ~~~~~~~~~~~~~~~~~~~~~~ The :ref:`Shader ` Program Class. Program is a GPU-executed program that is ready to be used for manipulating geometry and colors. \* :ref:`ShaderProgram ` can encapsulate vertex and fragment shaders or just one of them. If only either vertex or fragment shader is used, then traditional fixed-function pipeline is used for the other stage. Methods ------- .. index:: pair: function; New .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1a39151c9f8d55deab4828eca48a3f9a7f: .. ref-code-block:: cpp :class: doxyrest-title-code-block static ShaderProgram* New(const std::string& Name = "") Creates an empty shader program .. index:: pair: function; New .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1a9881490748f217510d71ea1f3c5c46de: .. ref-code-block:: cpp :class: doxyrest-title-code-block static ShaderProgram* New(const std::vector<:ref:`Shader`*>& Shaders, const std::string& Name = "") Creates a program shader with a vector of shaders and link them. .. index:: pair: function; New .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1aedebcf27dc2ade7c6425546ecb882905: .. ref-code-block:: cpp :class: doxyrest-title-code-block static ShaderProgram* New(const std::string& VertexShaderFile, const std::string& FragmentShaderFile, const std::string& Name = "") Creates a :ref:`VertexShader ` from file and a Fragment :ref:`Shader ` from file, and link them. .. index:: pair: function; New .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1a58a0805b9ad926d1994d192616bfd18a: .. ref-code-block:: cpp :class: doxyrest-title-code-block static ShaderProgram* New(const char* VertexShaderData, const :ref:`Uint32`& VertexShaderDataSize, const char* FragmentShaderData, const :ref:`Uint32`& FragmentShaderDataSize, const std::string& Name = "") Creates a :ref:`VertexShader ` from memory and a Fragment :ref:`Shader ` from memory, and link them. .. index:: pair: function; New .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1a6e5424c95a26a2e1d89cb028dc533bbd: .. ref-code-block:: cpp :class: doxyrest-title-code-block static ShaderProgram* New(:ref:`Pack`* Pack, const std::string& VertexShaderPath, const std::string& FragmentShaderPath, const std::string& Name = "") Creates the vertex shader and fragment shader from two files inside a pack .. index:: pair: function; New .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1a8288ae78deb6f73008281940d6a0b905: .. ref-code-block:: cpp :class: doxyrest-title-code-block static ShaderProgram* New(const char** VertexShaderData, const :ref:`Uint32`& NumLinesVS, const char** FragmentShaderData, const :ref:`Uint32`& NumLinesFS, const std::string& Name = "") Creates the vertex and fragment shader from an array of strings .. index:: pair: function; addShader .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1a6d6b9aca2b880a6fbf87666963d6c403: .. ref-code-block:: cpp :class: doxyrest-title-code-block void addShader(:ref:`Shader`* Shader) Add a new shader .. index:: pair: function; addShaders .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1aa6b6a0c0a2009dc391b83dd2beaeb357: .. ref-code-block:: cpp :class: doxyrest-title-code-block void addShaders(const std::vector<:ref:`Shader`*>& Shaders) Add a vector of shaders .. index:: pair: function; isValid .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1a9e1968cd91efc68af2e09e7fc163cc24: .. ref-code-block:: cpp :class: doxyrest-title-code-block bool isValid() const .. rubric:: Returns: If the shader program is valid .. index:: pair: function; getLinkLog .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1ac739ad18b4403d790f3aad16dc1cd430: .. ref-code-block:: cpp :class: doxyrest-title-code-block std::string getLinkLog() const .. rubric:: Returns: THe link log .. index:: pair: function; bind .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1ac60302dd343d5a938779e37f3ee6c8be: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual void bind() const Binds the shader program so that it will be used for anything that is rendered .. index:: pair: function; unbind .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1af0584a631e559d93da99476efc4eeafb: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual void unbind() const Unbind the program. Anything rendered after Unbind() call will be rendered using the fixed-function pipeline .. index:: pair: function; getUniformLocation .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1adc3ab3055bb9d54d1dc6ccd280d394b6: .. ref-code-block:: cpp :class: doxyrest-title-code-block :ref:`Int32` getUniformLocation(const std::string& Name) .. rubric:: Returns: The location of the location name .. index:: pair: function; getAttributeLocation .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1a56d46fa3e9587f1c854fe677cf5029da: .. ref-code-block:: cpp :class: doxyrest-title-code-block :ref:`Int32` getAttributeLocation(const std::string& Name) .. rubric:: Returns: The location of the attribute name .. index:: pair: function; invalidateLocations .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1aa4c5001ab632872a3df5cfd77e24f01c: .. ref-code-block:: cpp :class: doxyrest-title-code-block void invalidateLocations() Clear the locations .. index:: pair: function; setUniform .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1aa55d7da3ef8e5c95b9c40733bcf1edbf: .. ref-code-block:: cpp :class: doxyrest-title-code-block bool setUniform(const std::string& Name, float Value) Sets the uniform with the given name to the given value and returns true. If there is no uniform with such name then false is returned. Note that the program has to be bound before this method can be used. .. index:: pair: function; setUniform .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1ad46d531c8250349ed1f4d81548eac360: .. ref-code-block:: cpp :class: doxyrest-title-code-block bool setUniform(const std::string& Name, :ref:`Vector2ff` Value) This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. .. index:: pair: function; setUniform .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1a6a51c168111982674e01db2fd49c3c35: .. ref-code-block:: cpp :class: doxyrest-title-code-block bool setUniform(const std::string& Name, :ref:`Vector3ff` Value) This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. .. index:: pair: function; setUniform .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1ae595d53ee6964b38452d8377d28070e3: .. ref-code-block:: cpp :class: doxyrest-title-code-block bool setUniform(const std::string& Name, float x, float y, float z, float w) This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. .. index:: pair: function; setUniform .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1ab93c9076febfa00a29aeb63c358316d5: .. ref-code-block:: cpp :class: doxyrest-title-code-block bool setUniform(const std::string& Name, :ref:`Int32` Value) This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. .. index:: pair: function; setUniform .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1a75c86cf126de93529732bfede117382c: .. ref-code-block:: cpp :class: doxyrest-title-code-block bool setUniform(const :ref:`Int32`& Location, :ref:`Int32` Value) This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. .. index:: pair: function; setUniform .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1a086fa450737570b4e75bcac9cf1a99d8: .. ref-code-block:: cpp :class: doxyrest-title-code-block bool setUniform(const :ref:`Int32`& Location, float Value) This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. .. index:: pair: function; setUniform .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1a1d30295abff71363679b468982d804fc: .. ref-code-block:: cpp :class: doxyrest-title-code-block bool setUniform(const :ref:`Int32`& Location, :ref:`Vector2ff` Value) This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. .. index:: pair: function; setUniform .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1ab646cbd35a5abf6e6f99ced8d389ea01: .. ref-code-block:: cpp :class: doxyrest-title-code-block bool setUniform(const :ref:`Int32`& Location, :ref:`Vector3ff` Value) This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. .. index:: pair: function; setUniform .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1aca9b91b5624ba8f568387149be27c54f: .. ref-code-block:: cpp :class: doxyrest-title-code-block bool setUniform(const :ref:`Int32`& Location, float x, float y, float z, float w) This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. .. index:: pair: function; setUniformMatrix .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1ad9d4c1a97358b81513f65b3123b256f8: .. ref-code-block:: cpp :class: doxyrest-title-code-block bool setUniformMatrix(const std::string Name, const float* Value) Sets an uniform matrix from its name. .. index:: pair: function; setUniformMatrix .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1a7ea77e75eb60807e93ee4672c1a81e0d: .. ref-code-block:: cpp :class: doxyrest-title-code-block bool setUniformMatrix(const :ref:`Int32`& Location, const float* Value) Sets an uniform matrix from its location. .. index:: pair: function; getHandler .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1a3cae8b158ecb9e8254494f4fed3beb62: .. ref-code-block:: cpp :class: doxyrest-title-code-block const :ref:`Uint32`& getHandler() const .. rubric:: Returns: The id of the program (the handle) .. index:: pair: function; getId .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1a0615e277ab56dc85c5cdf9dbc1a6c114: .. ref-code-block:: cpp :class: doxyrest-title-code-block const :ref:`String::HashType`& getId() const .. rubric:: Returns: The Id of the program ( hash of the program name ) .. index:: pair: function; reload .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1a2fc529f928886124c2966e16809a512c: .. ref-code-block:: cpp :class: doxyrest-title-code-block void reload() Reloads the shaders .. index:: pair: function; getName .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1a8dc135159a4a39881a77eba1115f49b2: .. ref-code-block:: cpp :class: doxyrest-title-code-block const std::string& getName() const .. rubric:: Returns: Name of the shader program .. index:: pair: function; setName .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1aeeb6a4a9b3ef05e1f75106f5724c8c65: .. ref-code-block:: cpp :class: doxyrest-title-code-block void setName(const std::string& Name) Set the name of the shader program .. index:: pair: function; setReloadCb .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1a626255fb293842348675f91a876f7fd7: .. ref-code-block:: cpp :class: doxyrest-title-code-block void setReloadCb(:ref:`ShaderProgramReloadCb` Cb) Set a reload callback ( needed to reset shader states ). .. index:: pair: function; enableVertexAttribArray .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1a744f42060ba9ac1b5f25d401510e9bbf: .. ref-code-block:: cpp :class: doxyrest-title-code-block void enableVertexAttribArray(const std::string& Name) Enable a vertex attribute array .. index:: pair: function; enableVertexAttribArray .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1abcad21b5cd4e65a44828aeaaacf235e2: .. ref-code-block:: cpp :class: doxyrest-title-code-block void enableVertexAttribArray(const :ref:`Int32`& Location) Enable a vertex attribute array .. index:: pair: function; disableVertexAttribArray .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1a09b43e32d89aaeaefabebd512999a00e: .. ref-code-block:: cpp :class: doxyrest-title-code-block void disableVertexAttribArray(const std::string& Name) Disable a vertex attribute array .. index:: pair: function; disableVertexAttribArray .. _doxid-class_e_e_1_1_graphics_1_1_shader_program_1abd1cbfa63f87fafb3c06a81afb650373: .. ref-code-block:: cpp :class: doxyrest-title-code-block void disableVertexAttribArray(const :ref:`Int32`& Location) Disable a vertex attribute array