效果图:
GLSL代码与算法注释:
#define SORT_SIZE 8
float sort[SORT_SIZE];
float medians[SORT_SIZE];
// [0., 1.] -> [0, 255]
float quant(float x)
{
x = clamp(x, 0., 1.);
return floor(x * 255.);
}
float pack(vec3 c)
{
float lum = (c.x + c.y + c.z) * (1. / 3.);
return lum;
}
vec3 unpack(float x)
{
return vec3(x);
}
#define SWAP(a,b) { float t = sort[a]; sort[a] = sort[b]; sort[b] = t; }
void bubble_sort(int num)// 简单的冒泡排序
{
// 把最小值移到最左边
for(int j = 0; j < num; ++j)