2013-02-21 92 views
3

有可能從Android設備上的片段着色器返回16位值? 我做這種轉換將16位值 「X」,以4444: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); 
} 

,並要回16位的 「X」,從4444:

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

爲什麼不使用32位通道,而不是16位?