python - 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]
解决方案
您1.0
将 Alpha 通道值作为 glClearColor 提供。当您读回像素时,GL_UNSIGNED_BYTE
您将获得该通道的 255。但是作为无符号字节的 255 与作为有符号字节的 -1 具有相同的位模式。也许 GLcharArray 将字节解释为带符号的,您应该使用 GLubyteArray。
推荐阅读
- javascript - 如何使用 java 脚本查询选择器根据父元素选择子元素
- r - RenderTable Shiny 中数据表中的小数问题
- python - 如何在Python中按数组顺序随机获取数组
- r - R {targets} 包:如何使用字符串引用现有目标?
- python - 如何在 Dash Python 中使用本地字体(.otf 文件)
- python - 如何通过 python 与 ftdi f232rl 模块正确通信?
- sas - 如何在 sas 企业指南中开发配置文件?
- sql - 主查询列中的 SQL 查询子表
- php - 为什么 modal 不能与 PHP 一起用于 show 几句话
- c# - 如何使用 2D 数组 C# 将结果放入表中