2017-03-07 21 views
0

我想調試我的gbuffer framebuffer。我設法輕鬆地對RGB組件進行blit處理,但我想將alpha重新映射爲紅色或rgb以實現灰度,這樣我就可以調試alpha組件,而無需混合。有沒有辦法做到這一點?提前致謝!OPENGL:我怎樣才能移動alpha到紅色通道使用blit

+0

有沒有理由不能只讀阿爾法? –

+0

@Nicol我的問題是關於將alpha移動到不同的頻道。如果你有RGB的值,那麼使用alpha通道也會使它變得無法辨認。 –

回答

1

如果您只是想按原樣顯示單個顏色通道,那麼glColorMask應該足夠了。

如果您只想顯示紅色通道,你可以這樣做:

glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_FALSE); 

如果你想切換2個顏色通道或應用灰階效果,然後運行它都通過着色器可能是最容易方法:

uniform sampler2D frame; 

in vec2 uv; 

out vec4 fragColor; 

void main() 
{ 
    vec4 color = texture(frame, uv); 

    // Grayscale 
    color.rgb = vec3((color.r + color.g + color.b) * 0.33); 

    // Switch red and alpha channels 
    color.ra = color.ar; 

    fragColor = color; 
} 

所以instread塊傳輸的幀緩衝區的,你畫一個全屏四與幀緩衝作爲約束質感。

+0

謝謝,Vallentin!雖然沒有其他方法可以互換頻道嗎?如果可能,我想盡量減少開銷,我覺得使用命令會更好。 –

+0

@KarimAbdelHamid據我所知,沒有。 blitting可以更快,但也比繪製全屏四元組慢。所以通常你會做得更好。底線是,如果它成爲和實際的性能問題,但總是基準。 – Vallentin

+0

決定去四路線。謝謝! –