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

gl_FragDepth не работает

#0
13:03, 24 авг 2012

Столкнулся с очередной проблемой по поводу глубины. Задача - имея текстуру с глубинами нарисовать квадрат, который передаст эти глубины.
Вот код:

//Биндинг фреймбуффера

  glDisable(GL_DEPTH_TEST);
  glDepthMask(GL_TRUE);

//биндинг шейдера, юниформов, текстур, рендеринг.

Внутри шейдера пишу в gl_FragDepth. Но глубина остается той же!

Сразу после отрисовки пишу:

glClearDepth(0.1);
glClear(GL_DEPTH_BUFFER_BIT);

и текстура с глубиной действительно сбрасывается на 0.1!

Убираю очистку, делаю в шейдере принудительно gl_FragDepth = 0.1; (на случай вдруг в текстуре исходной бред, или биндинг не прошел) но все равно глубина не меняется!
Как задать глубину фрагмента? Я думал что нужно положить в gl_FragDepth значение от 0 до 1?

#1
13:07, 24 авг 2012

ultrablox
> Убираю очистку, делаю в шейдере принудительно gl_FragDepth = 0.1;

сделай очистку 1.0 и в шейдере принудительно gl_FragDepth = 0.5 :)

#2
13:12, 24 авг 2012

я так понимаю намек на внезапно сработающую glDepthFunc? :)
Проверил, не работает. Даже принудительно выставил в GL_ALWAYS, даже depth_test включал 0 все равно не пишет:(

#3
13:20, 24 авг 2012

ultrablox

пичалька :)

неужеле ati ?

#4
13:22, 24 авг 2012

нет, nvidia gtx 560, правда дрова поставил бету с opengl 4.3

#5
14:23, 24 авг 2012

дурацкая идея, но может glDrawBuffer(GL_COLOR_ATTACHMENT0); надо заменить на что-то еще?

#6
14:25, 24 авг 2012

ultrablox
> дурацкая идея, но может glDrawBuffer(GL_COLOR_ATTACHMENT0); надо заменить на
> что-то еще?

это тут при чём ? проверь запись в глубину из шейдера без всяких там fbo

#7
9:40, 26 авг 2012

При выключенном тесте глубины (glDisable(GL_DEPTH_TEST)) запись в буфер глубины не производится.

#8
16:03, 29 авг 2012

при depthmask(0) не производится
а при glDisable(GL_DEPTH_TEST отключается сравнение ИМХО

уббедись что к FBO приаттачена дептх текстура

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

Тема в архиве.