* shader: split CM rgba/rgbx into discard ones make it branchless if we have no discards. * shader: ensure we dont stall on vbo uv buffer if we render a new texture before the previous was done gpu wise its going to stall until done, call glBufferData to orphan the data. this allows the driver to return a new memory block immediately if the GPU is still reading from the previous one * protocols: ensure we reset GL_PACK_ALIGNMENT reset GL_PACK_ALIGNMENT back to the default initial value of 4 * shader: use unsigned short in VAO loose a tiny bit of precision but gain massive bandwidth reductions. use GL_UNSIGNED_SHORT and set it as normalized. clamp and round the UV for uint16_t in customUv. * shader: interleave vertex buffers use std::array for fullverts, use a single interleaved buffer for position and uv, should in theory improve cache locality. and also remove the need to have two buffers around. * shader: revert precision drop we need the float precision because we might have 1.01 or similiar floats entering CM shader maths, and rounding/clamping those means the maths turns out wrong. so revert back to float, sadly higher bandwidth usage. * update doColorManagement api * convert primaries to XYZ on cpu * remove unused primaries uniform --------- Co-authored-by: UjinT34 <ujint34@mail.ru>
33 lines
755 B
GLSL
33 lines
755 B
GLSL
#version 300 es
|
|
#extension GL_ARB_shading_language_include : enable
|
|
|
|
precision highp float;
|
|
in vec2 v_texcoord;
|
|
uniform sampler2D tex;
|
|
|
|
uniform int sourceTF; // eTransferFunction
|
|
uniform int targetTF; // eTransferFunction
|
|
uniform mat3 targetPrimariesXYZ;
|
|
|
|
uniform float alpha;
|
|
uniform bool applyTint;
|
|
uniform vec3 tint;
|
|
|
|
#include "rounding.glsl"
|
|
#include "CM.glsl"
|
|
|
|
layout(location = 0) out vec4 fragColor;
|
|
void main() {
|
|
vec4 pixColor = texture(tex, v_texcoord);
|
|
|
|
// this shader shouldn't be used when skipCM == 1
|
|
pixColor = doColorManagement(pixColor, sourceTF, targetTF, targetPrimariesXYZ);
|
|
|
|
if (applyTint)
|
|
pixColor.rgb *= tint;
|
|
|
|
if (radius > 0.0)
|
|
pixColor = rounding(pixColor);
|
|
|
|
fragColor = pixColor * alpha;
|
|
}
|