OpenGL es 2.0和16位通道

时间:2013-02-21 18:31:26

标签: android opengl-es-2.0 glsl

可以从Android设备上的片段着色器返回16位值吗? 我做了这个转换,将16位“x”值转换为4444:

vec4 convertToVec4(float x)
{
    int iX = int(65535.0 * x);
    int r = (iX / (0x1000));
    int g = (iX / (0x100)) - r*0x10;
    int b = (iX / (0x10)) - (r*0x100 + g*0x10);
    int a = (iX) - (r*0x1000 + g*0x100 + b*0x10);
    return vec4(float(r)/15.0, float(g)/15.0, float(b)/15.0, float(a)/15.0);
}

并从4444获得16位“x”:

float getFloat(vec4 v)
{
    vec4 col = v * 15.0;
    int sum = int(col.r*4096.0) + int(col.g*256.0) + int(col.b*16.0) + int(col.a);
    return float(sum) / 65535.0;
}

它工作正常,但速度很慢。有没有办法在一个通道中传递16位颜色(例如红色或alpha)?

1 个答案:

答案 0 :(得分:0)

Shader中有两个功能?如果是这样,你最好在cpu中使用neon计算,然后将返回值提供给GLSL

为什么不使用32位通道而不是16位?