В OpenGL Я могу прочитать значения z-буфера, используя glReadPixels
, например:
glReadPixels(scrx, scry, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth);
Если я сделаю то же самое в OpenGL ES3.2 Я получаю GL_INVALID_OPERATION
ошибку.
Проверяя спецификацию, я вижу, что OpenGL позволяет GL_DEPTH_COMPONENT
, но OpenGLES3 не .
В качестве обходного пути я скопировал глубину фрагмента в альфа-значение в цветовом буфере, используя этот GLSL:
#version 320 es
...
outCol = vec4(psCol.rgb, gl_FragCoord.z);
После выполнения glReadPixels () в GL_RGBA
части кадрового буфераЯ использую rgba[3]/255.0
в качестве значения глубины.
Хотя это работает, 8-битная точность значения альфа недостаточна для моей цели выбора того, что находится под курсором мыши.
Есть ли способ получить значения Z из кадрового буфера в OpenGL ES3?