首页 > 解决方案 > glClearColor 返回负值?(溢出?)

问题描述

我将 GLES2 和 EGL 与 PyOpenGL 一起使用,我正在调用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]

标签: pythonopengl-esarmopengl-es-2.0pyopengl

解决方案


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


推荐阅读