86 lines
2.7 KiB
C++
86 lines
2.7 KiB
C++
// Copyright (c) 2022 Dominic Masters
|
|
//
|
|
// This software is released under the MIT License.
|
|
// https://opensource.org/licenses/MIT
|
|
|
|
#pragma once
|
|
#include "display/shader/IShader.hpp"
|
|
#include "dawnopengl.hpp"
|
|
|
|
typedef GLuint shaderparameter_t;
|
|
|
|
namespace Dawn {
|
|
class Shader : public IShader<shaderparameter_t> {
|
|
private:
|
|
/** Pointer to an uploaded vertex shader program */
|
|
GLuint shaderVertex = -1;
|
|
|
|
/** Pointer to an uploaded fragment shader program */
|
|
GLuint shaderFrag = -1;
|
|
|
|
/** Pointer to an uploaded shader program linked */
|
|
GLuint shaderProgram = -1;
|
|
|
|
protected:
|
|
/**
|
|
* Compiles a GLSL/HLSL shader and stores it on the GPU, updates the
|
|
* underlying pointers for you.
|
|
*
|
|
* @param vertexShader The string source of the vertex shader.
|
|
* @param fragmentShader The string source of the fragment shader.
|
|
*/
|
|
void compileShader(
|
|
std::map<std::string, int32_t> attributeLocations,
|
|
std::string vertexShader,
|
|
std::string fragmentShader
|
|
);
|
|
|
|
/**
|
|
* Typically HLSL only, this method allows you to specify where vbo
|
|
* attributes are bound. Typically 0 for positions, 1 for coordinates,
|
|
* etc.
|
|
*
|
|
* @param name Attribute name in the HLSL shader.
|
|
* @param location Index pointing to which location it is to be bound to.
|
|
*/
|
|
void bindAttributeLocation(std::string name, int32_t location);
|
|
|
|
public:
|
|
/**
|
|
* Locate a shader parameter by its name.
|
|
*
|
|
* @param name Name of the parameter to get.
|
|
* @return The shader parameter.
|
|
*/
|
|
shaderparameter_t getParameterByName(std::string name);
|
|
|
|
/**
|
|
* Locate a shader buffer parameter set by its name.
|
|
*
|
|
* @param name Name of the buffer to get.
|
|
* @return The shader buffer.
|
|
*/
|
|
shaderbufferlocation_t getBufferLocationByName(std::string name);
|
|
|
|
virtual void compile() override = 0;
|
|
void bind() override;
|
|
void setParameterBuffer(
|
|
shaderbufferlocation_t location,
|
|
shaderbufferslot_t slot
|
|
);
|
|
void setMatrix(shaderparameter_t parameter, glm::mat4 matrix) override;
|
|
void setBoolean(shaderparameter_t parameter, bool_t value) override;
|
|
void setColor(shaderparameter_t parameter, struct Color color) override;
|
|
void setVector3(shaderparameter_t parameter, glm::vec3 vector) override;
|
|
void setTexture(
|
|
shaderparameter_t parameter,
|
|
textureslot_t texture
|
|
) override;
|
|
void setFloat(shaderparameter_t parameter, float_t value) override;
|
|
|
|
/**
|
|
* Destroys and deletes the shader from the GPU.
|
|
*/
|
|
virtual ~Shader();
|
|
};
|
|
} |