Files
UwUGL/shaders/hgradientshader.cpp
T

35 lines
914 B
C++

#pragma once
#include <stdint.h>
#include "../datatypes.cpp"
#include "../helpers.cpp"
#include "../buffer.cpp"
#include "shader.cpp"
namespace UwU {
class HGradientShader{
public:
HGradientShader(uint16_t x0, Color color0, uint16_t x1, Color color1) {
this->shaderType = HGRADIENTSHADER;
this->x0 = x0;
this->shaderColor0 = color0;
this->scale = 0xffffffff / (1 + (uint32_t)x1 - (uint32_t)x0);
this->shaderColor1 = color1;
}
ShaderType shaderType;
uint16_t x0;
Color shaderColor0;
uint32_t scale;
Color shaderColor1;
Color hGradient(uint16_t u, uint16_t v) {
(void)v;
uint32_t t = (((uint32_t)u - (uint32_t)x0) * scale) / 0x01000000;
// if (v == 42) {
// printf("(%u, %u)\n", u, t);
// }
return Helpers::lerpColor(shaderColor0, shaderColor1, (uint8_t)t);
}
};
}