114 lines
3.1 KiB
C++
114 lines
3.1 KiB
C++
#pragma once
|
|
|
|
#include "../defines.hpp"
|
|
#include <array>
|
|
#include <variant>
|
|
|
|
enum eShaderUniform : uint8_t {
|
|
SHADER_PROJ = 0,
|
|
SHADER_COLOR,
|
|
SHADER_ALPHA_MATTE,
|
|
SHADER_TEX_TYPE,
|
|
SHADER_SKIP_CM,
|
|
SHADER_SOURCE_TF,
|
|
SHADER_TARGET_TF,
|
|
SHADER_SRC_TF_RANGE,
|
|
SHADER_DST_TF_RANGE,
|
|
SHADER_TARGET_PRIMARIES,
|
|
SHADER_MAX_LUMINANCE,
|
|
SHADER_DST_MAX_LUMINANCE,
|
|
SHADER_DST_REF_LUMINANCE,
|
|
SHADER_SDR_SATURATION,
|
|
SHADER_SDR_BRIGHTNESS,
|
|
SHADER_CONVERT_MATRIX,
|
|
SHADER_TEX,
|
|
SHADER_ALPHA,
|
|
SHADER_POS_ATTRIB,
|
|
SHADER_TEX_ATTRIB,
|
|
SHADER_MATTE_TEX_ATTRIB,
|
|
SHADER_DISCARD_OPAQUE,
|
|
SHADER_DISCARD_ALPHA,
|
|
SHADER_DISCARD_ALPHA_VALUE,
|
|
SHADER_SHADER_VAO,
|
|
SHADER_SHADER_VBO_POS,
|
|
SHADER_SHADER_VBO_UV,
|
|
SHADER_TOP_LEFT,
|
|
SHADER_BOTTOM_RIGHT,
|
|
SHADER_FULL_SIZE,
|
|
SHADER_FULL_SIZE_UNTRANSFORMED,
|
|
SHADER_RADIUS,
|
|
SHADER_RADIUS_OUTER,
|
|
SHADER_ROUNDING_POWER,
|
|
SHADER_THICK,
|
|
SHADER_HALFPIXEL,
|
|
SHADER_RANGE,
|
|
SHADER_SHADOW_POWER,
|
|
SHADER_USE_ALPHA_MATTE,
|
|
SHADER_APPLY_TINT,
|
|
SHADER_TINT,
|
|
SHADER_GRADIENT,
|
|
SHADER_GRADIENT_LENGTH,
|
|
SHADER_ANGLE,
|
|
SHADER_GRADIENT2,
|
|
SHADER_GRADIENT2_LENGTH,
|
|
SHADER_ANGLE2,
|
|
SHADER_GRADIENT_LERP,
|
|
SHADER_TIME,
|
|
SHADER_DISTORT,
|
|
SHADER_WL_OUTPUT,
|
|
SHADER_CONTRAST,
|
|
SHADER_PASSES,
|
|
SHADER_VIBRANCY,
|
|
SHADER_VIBRANCY_DARKNESS,
|
|
SHADER_BRIGHTNESS,
|
|
SHADER_NOISE,
|
|
SHADER_POINTER,
|
|
|
|
SHADER_LAST,
|
|
};
|
|
|
|
struct SShader {
|
|
SShader();
|
|
~SShader();
|
|
|
|
GLuint program = 0;
|
|
|
|
std::array<GLint, SHADER_LAST> uniformLocations;
|
|
|
|
float initialTime = 0;
|
|
|
|
struct SUniformMatrix3Data {
|
|
GLsizei count = 0;
|
|
GLboolean transpose = false;
|
|
std::array<GLfloat, 9> value = {};
|
|
};
|
|
|
|
struct SUniformMatrix4Data {
|
|
GLsizei count = 0;
|
|
GLboolean transpose = false;
|
|
std::array<GLfloat, 8> value = {};
|
|
};
|
|
|
|
struct SUniform4Data {
|
|
GLsizei count = 0;
|
|
std::vector<float> value;
|
|
};
|
|
|
|
//
|
|
std::array<std::variant<std::monostate, GLint, GLfloat, std::array<GLfloat, 2>, std::array<GLfloat, 3>, std::array<GLfloat, 4>, SUniformMatrix3Data, SUniformMatrix4Data,
|
|
SUniform4Data>,
|
|
SHADER_LAST>
|
|
uniformStatus;
|
|
//
|
|
|
|
void createVao();
|
|
void setUniformInt(eShaderUniform location, GLint v0);
|
|
void setUniformFloat(eShaderUniform location, GLfloat v0);
|
|
void setUniformFloat2(eShaderUniform location, GLfloat v0, GLfloat v1);
|
|
void setUniformFloat3(eShaderUniform location, GLfloat v0, GLfloat v1, GLfloat v2);
|
|
void setUniformFloat4(eShaderUniform location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
|
|
void setUniformMatrix3fv(eShaderUniform location, GLsizei count, GLboolean transpose, std::array<GLfloat, 9> value);
|
|
void setUniformMatrix4x2fv(eShaderUniform location, GLsizei count, GLboolean transpose, std::array<GLfloat, 8> value);
|
|
void setUniform4fv(eShaderUniform location, GLsizei count, std::vector<float> value);
|
|
void destroy();
|
|
};
|