2013-02-21 2 views
3

안드로이드 장치의 조각 셰이더에서 16 비트 값을 반환 할 수 있습니까? 내가 16 비트 변환이 변환을했습니다 4444에 가치를 "X"OpenGL es 2.0 및 16 비트 채널

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 비트 색상을 한 채널 (예 : 빨간색 또는 알파)로 전달할 수 있습니까?

답변

0

두 가지 기능이 Shader에 있습니까? 그렇다면 네온을 사용하여 CPU로 더 잘 계산 한 다음 GLSL에 반환 값을 제공하십시오

왜 16 비트 대신 32 비트 채널을 사용합니까?