我在从 Android 上的 OpenGL 纹理读取 alpha 通道时遇到问题。我glReadPixels
这样称呼:
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
作为一个测试,我做了一个片段着色器,看起来像这样:
gl_FragColor = vec4(0.5, 0.5, 0.5, 0.5);
对于每个像素,我返回 { 64, 64, 64, -1 }。
我已经尝试了各种方法来弄清楚为什么 alpha 的返回方式与 RGB 值不同,包括在每次渲染之前:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
//Tried various blend functions
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
但无论我做什么,它都会返回-1。
这是Android限制还是我错过了什么?
请注意,如果有任何区别,我将使用屏幕外 FBO。
编辑:如果我这样做:
int[] bits= new int[4];
glGetIntegerv(GL_RED_BITS, bits, 0);
glGetIntegerv(GL_GREEN_BITS, bits, 1);
glGetIntegerv(GL_BLUE_BITS, bits, 2);
glGetIntegerv(GL_ALPHA_BITS, bits, 3);
我回来了 { 8, 8, 8, 0 }。