У меня проблема с буфером глубины. Я хочу вставить в текстуру. Но, похоже, это не работает.
Итак, вот фрагмент кода, который я выполняю после рендеринга объектов:
glGenTextures(1, (GLuint*)&_depthTexture);
glBindTexture(GL_TEXTURE_2D, _depthTexture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
const pair<int, int> &img_size = getImageSize();
glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, img_size.first, img_size.second, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0);
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, img_size.first, img_size.second);
glClear( GL_DEPTH_BUFFER_BIT );
Дело в том, что (у меня OpenGL 3.2+) изображение для рендеринга имеет разный размер. В большинстве случаев это не будет 2 ^ i на 2 ^ j для размера. Итак, это проблема?
Кроме того, другая часть проблемы может быть во фрагментном шейдере после:
#version 140
uniform sampler2D depthTexture;
uniform ivec2 screenSize;
out vec4 outColor;
void main()
{
vec2 depthCoord = gl_FragCoord.xy / screenSize.xy;
float d = texture2D(depthTexture, depthCoord).x;
outColor = vec4(d, d, d, 1.0);
}
После этого, когда я визуализирую некоторые фигуры во второй раз, я хочу использовать предыдущую глубину (буфер глубины текстуры) для создания некоторых эффектов.
А если серьезно... кто-нибудь может показать мне кусок кода, где вы можете добавить буфер глубины в текстуру? Мне все равно, рендерится ли он в текстуру или текстура извлекается после рендеринга! Пока у меня есть текстура со значением глубины для второго прохода... вот что важно!