Войти
ПрограммированиеФорумГрафика

Не читается Depth-компонента (GL_DEPTH_ATTACHMENT), всегда выдаёт 1.0 (решено, мешал неправильный GL_TEXTURE_COMPARE_MODE)

#0
0:16, 24 авг. 2019

Понять не могу.

Вроде когда-то давно всё работало.

Сейчас при помощи

texture2D(u_sampler_depth, v_uv).r
всегда читается 1.0. Пробовал на двух разных FBO, из обоих читается 1.0. При этом тест глубины во время работы с этими FBO работает, то есть компонента есть и используется.

Любая другая текстура читается.

Depth-компонента в FBO создаётся самым обычным образом:

glGenTextures(1, &depth_texture_id);
glBindTexture(GL_TEXTURE_2D, depth_texture_id);
glTexImage2D( GL_TEXTURE_2D,  0, GL_DEPTH_COMPONENT32, fboWidth, fboHeight, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
glBindTexture(GL_TEXTURE_2D, 0);

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depth_texture_id, 0);

Случайной очистки перед чтением нет.

Я даже не знаю, куда копать.

#1
(Правка: 0:23) 0:22, 24 авг. 2019

В любой непонятной ситуации используй GPU debugger (https://renderdoc.org)

#2
0:28, 24 авг. 2019

learnopengl_book.pdf
35.3 Rendering shadows

#3
0:50, 24 авг. 2019

я знаю в чём проблема

#4
1:10, 24 авг. 2019

Division
> В любой непонятной ситуации используй GPU debugger (https://renderdoc.org)
О, спасибо. Тула выглядит отличной, но

Only OpenGL 3.2+ contexts are supported

Попробую переинициализировать контекст до поддерживаемой версии, правда у меня шейдеры старые (#version 120).

lookid
> learnopengl_book.pdf
> 35.3 Rendering shadows
Оно начинается словами

float depthValue = texture (depthMap, TexCoords ). r;
а у меня это выдаёт единицу.

innuendo
> я знаю в чём проблема
Я нисколько не возражаю, если расскажешь, в чём именно.

#5
1:14, 24 авг. 2019

romanshuvalov
> О, спасибо. Тула выглядит отличной, но
Тогда возьми CodeXL. Там заодно можно брекпоинты наставить на OpenGL ошибки:
codexl | Не читается Depth-компонента (GL_DEPTH_ATTACHMENT), всегда выдаёт 1.0 (решено, мешал неправильный GL_TEXTURE_COMPARE_MODE)

#6
1:27, 24 авг. 2019

MrShoor
> CodeXL
CodeXL и чё-то там ещё когда-то у меня не завелось, а RenderDoc успешно завёлся, когда сделал контекст 3.2.

Depth-текстура поймана, она содержит нормальные данные (ожидаемо, очень нелинейные, с 0.95 до 0.98), но в шейдере я все равно не могу нормально поймать значения. Копаюсь дальше.

#7
(Правка: 2:00) 1:50, 24 авг. 2019

> но в шейдере я все равно не могу нормально поймать значения
В рендердоке можно задебажить фрагментный шейдер. https://renderdoc.org/docs/how/how_debug_shader.html
А ещё, зачем тебе GL_TEXTURE_COMPARE_MODE?

#8
(Правка: 2:03) 2:02, 24 авг. 2019

В диапазоне (0..1) основные данные находятся около значения 0.95, чтобы их увидеть, сделал вот такой градиент:

gl_FragColor.r = 50.0 * (texture2D(u_sampler_depth, v_uv).r - 0.95 - 0.05*v_uv.x ) ;

И он не работает! В текстуре u_sampler_depth всё в порядке, но прочитать её нельзя.

Градиент чистый, хотя между полностью черным и красным должны виднеться куски данных, как на черно-белом образце из дебаггера.

Т.е. дебаггер показывает, что с входной текстурой всё в порядке, а шейдер не умеет её читать и на выходе даёт неправильную картинку.

Depth Bug | Не читается Depth-компонента (GL_DEPTH_ATTACHMENT), всегда выдаёт 1.0 (решено, мешал неправильный GL_TEXTURE_COMPARE_MODE)

#9
2:05, 24 авг. 2019

Division
> А ещё, зачем тебе GL_TEXTURE_COMPARE_MODE?
Я даже не знаю, что это такое. Наверное, осталось от каких-то старых тестов. Удалил и... всё заработало. Что это было?

#10
2:07, 24 авг. 2019

romanshuvalov
> Что это было?
https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glTexParameter.xml

#11
2:09, 24 авг. 2019

> Что это было?
Я это первым делом прочитал, но там речь только про аргумент для формулы depth-теста, приведённый или неприведённый (как я понял).

#12
(Правка: 8:28) 8:26, 24 авг. 2019

romanshuvalov
> Я нисколько не возражаю, если расскажешь, в чём именно.

проблема в кривых руках ... по себе знаю :)


romanshuvalov
> Что это было?

ты делаешь выборку из семплера с compare func без ref value

ПрограммированиеФорумГрафика