У меня есть пиксельный шейдер:
varying vec2 f_texcoord;
uniform vec4 mycolor_mult;
uniform sampler2D mytexture;
void main(void) {
gl_FragColor = (texture2D(mytexture, f_texcoord) * mycolor_mult);
};
и соответствующий код С++:
GLint m_attr = glGetUniformLocation(m_program, "mycolor_mult");
// ...
unsigned int myColor = ...; // 0xAARRGGBB format
float a = (myColor >> 24) / 255.f;
float r = ((myColor >> 16) & 0xFF) / 255.f;
float g = ((myColor >> 8) & 0xFF) / 255.f;
float b = (myColor & 0xFF) / 255.f;
glUniform4f(m_attr, r, g, b, a);
Я сохраняю цвет спрайта как unsigned int
и должен преобразовать его в 4 числа с плавающей запятой, чтобы передать их шейдеру.
Можно ли его оптимизировать? Я имею в виду, могу ли я передать не числа с плавающей запятой, а беззнаковые символы в качестве компонентов шейдера и избежать операций «деления на 255»? Что мне нужно изменить в шейдере и в коде C++, чтобы это сделать?