3

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;
}

正常に動作しますが、非常に遅いです。1 つのチャネル (赤やアルファなど) で 16 ビットの色を渡す方法はありますか?

4

1 に答える 1

0

Shader には 2 つの関数があります。もしそうなら、ネオンでCPUでそれを計算してから、返された値をGLSLに与えるほうがよいでしょう

16ビットの代わりに32ビットチャネルを使用しないのはなぜですか?

于 2013-02-24T21:16:49.637 に答える