glClearColor возвращает отрицательные значения? (Переполнение?) - PullRequest
1 голос
/ 09 мая 2020

Я использую GLES2 и EGL с PyOpenGL, и я звоню glClearColor(0.0, 0.0, 0.0, 1.0). После glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) я считываю очищенные значения цвета в буфер и заметил, что альфа-значение установлено на -1 вместо 255 [(2 ^ 8-1) * 1]. В чем может быть причина этого переполнения?

Система: NanoPi M1 Plus с графическим процессором Mali400.

Код:

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 Ответ

1 голос
/ 19 мая 2020

Вы указали 1.0 в качестве значения альфа-канала для glClearColor. Когда вы прочитаете пиксели как GL_UNSIGNED_BYTE, вы получите 255 для этого канала. Но 255 как байт без знака имеет тот же битовый образец, что и -1 как байт со знаком. Возможно, GLcharArray интерпретирует байты как подписанные, и вам следует использовать GLubyteArray.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...