glClearColor返回负值吗? (溢出?)

问题描述 投票:0回答:1

我在PyOpenGL中使用GLES2和EGL,并且正在调用glClearColor(0.0, 0.0, 0.0, 1.0)。在glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)之后,我将清除的颜色值读入缓冲区,并注意到alpha值被设置为-1,而不是255 [(2 ^ 8-1)* 1]。溢出的原因可能是什么?

系统:带有Mali400 GPU的NanoPi M1 Plus。

代码:

glClearColor(0.0, 0.0, 0.0, 1.0)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
eglSwapBuffers(display, surface)
buffer = arrays.GLcharArray.asArray(np.empty(1000 * 2 * 4, np.ubyte))
print("\nBuffer before : ", buffer[:20])
glReadPixels(0, 0, 1000, 2, GL_RGBA, GL_UNSIGNED_BYTE, buffer)
print("Buffer after: ", buffer[0:20])

输出:

Buffer before :  [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
Buffer after:  [ 0  0  0 -1  0  0  0 -1  0  0  0 -1  0  0  0 -1  0  0  0 -1]

编辑:

所有渠道均会出现此问题:glClearColor(1.0,1.0,1.0,1.0)给了我[[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]]的缓冲区

我在PyOpenGL中使用GLES2和EGL,并且我在调用glClearColor(0.0,0.0,0.0,1.0)。在glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)之后,我将清除的颜色值读入缓冲区...

python opengl-es arm opengl-es-2.0 pyopengl
1个回答
0
投票

您将1.0作为alpha通道值提供给glClearColor。当您将像素读回为GL_UNSIGNED_BYTE时,该通道将获得255。但是255作为无符号字节与-1作为有符号字节具有相同的位模式。也许GLcharArray将字节解释为带符号,您应该使用GLubyteArray。

© www.soinside.com 2019 - 2024. All rights reserved.