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

Проблемы с gl_FragDepth (решено) (2 стр)

Страницы: 1 2 3 Следующая »
#15
15:31, 27 сен 2018

Grobozavr
> как очистка фона может повлиять на то, что рендерится ПОВЕРХ него?

Ну, например, ты чистишь буфер глубины 0.0 (допустим!), а пытаешься записать в него значение 0.5. А функция стоит GL_LESS. Результат сравнения 0.5 < 0.0 ни фига не GL_TRUE, так что значение в буфер не упадёт.

Andrey
> вот именно для GLSL 1.x встроенные, GLSL 3.x core/GLSL 3.x ES и выше они не
> нужны, в случае автора они объявлены повторно, очень странно что компилится

А что такого? Ошибки вроде нет. В спецификации GLSL 1.30.10 можно явно объявлять встроенные переменные. Правда и вся ответственность за их заполнение также ложится на программиста.

Grobozavr
> поскольку SDF. У меня вся глубина - результат работы фрагмента.

Так SDF и без gl_FragDepth создать можно.

#16
15:56, 27 сен 2018

Роман Шувалов
А смысл? У меня уже есть текстура под это. з-буфер.

#17
16:02, 27 сен 2018

PA3UJIb
> Ну, например, ты чистишь буфер глубины 0.0 (допустим!), а пытаешься записать в него значение 0.5. А функция стоит GL_LESS. Результат сравнения 0.5 < 0.0 ни фига не GL_TRUE, так что значение в буфер не упадёт.
Блин. Может картинками понятнее.
Это если туда не писать
z2 | Проблемы с gl_FragDepth (решено)
Это - если писать что угодно
z1 | Проблемы с gl_FragDepth (решено)

>Так SDF и без gl_FragDepth создать можно.
Можно. Но у меня это не первый и не последний этап, так что глубина нужна.

#18
19:17, 27 сен 2018

Grobozavr
> А смысл? У меня уже есть текстура под это. з-буфер.
Смысл в том, что ручная запись в z-buffer может сильно снижать производительность.

#19
0:03, 28 сен 2018

Роман Шувалов
> Смысл в том, что ручная запись в z-buffer может сильно снижать
> производительность.
Не в случае с SDF на десктопах.

Grobozavr
Проверяй, что:
включен GL_DEPTH_TEST
запись в буфер включена через glDepthMask(GL_TRUE)
что glDepthFunc GL_GREATER или GL_GEQUAL

#20
8:24, 28 сен 2018

>glDepthFunc GL_GREATER
Зачем???

Тест включён, всё нормально работает если не писать глубину (т.е. если её считает сам ГЛ)

#21
9:24, 28 сен 2018

Короче.
Напиши:
gl_FragDepth = 0.5;

И выведи на экран. Должен быть просто серый, из нульпоста 1.0 просто не должен вообще пройти вообще никак.

Grobozavr
> Зачем???
Чтобы быть уверенным что у тебя тест глубины проходит для ближних значений.

#22
10:29, 28 сен 2018

>Короче.
>Напиши:
>gl_FragDepth = 0.5;

>И выведи на экран. Должен быть просто серый, из нульпоста 1.0 просто не должен вообще пройти вообще никак.

Как бы с этого я начал

>если писать в gl_FragDepth в шейдере - на выходе получаю строго 0, не зависимо от того, что пишу.

Писал все возможные варианты от -100 до +100 (ну мало ли...)
Результат ВООБЩЕ НИКАК не зависит от значения.

#23
10:49, 28 сен 2018

А как вы SDF в реалтайме считаете 0_о

#24
10:57, 28 сен 2018

Grobozavr
> -100 до +100
Что? Ты glDepthRange  юзал? Так его нет в версиях до 2.0


Grobozavr
> Результат ВООБЩЕ НИКАК не зависит от значения.
Ты понимаешь что такого быть не может?
У тебя выше спрашивали. Шейдер точно скомпилился? Тебе писали про переопределение, ты ноль эмоций.
То что твой код работал на других машинах - чудо, не иначе.

Сделай так:

#version 130
in vec4 fragmentColor;

void main( void )
{
  gl_FragColor = fragmentColor;
  gl_FragDepth = gl_FragCoord.z; //Эта строчка пишет ровно то, что записал бы OpenGL без нее. 
}


Если у тебя опять что-то будет не так то у тебя не здесь проблема, а где-то еще.

#25
11:08, 28 сен 2018

g-cont
А что не так?

vindast
Без паники! Когда кончились нормальные идеи я отбалды уже значения ставил. Никаких переопределений там нет (даже не в курсе про такую возможность)

>Эта строчка пишет ровно то, что записал бы OpenGL без нее.

...когда нормальные идеи кончились, а эта идея вполне нормальная.
При ЛЮБОЙ записи пишется 0. У меня кроме подозрений в кривизне дров идей больше не осталось.
Конкретно этот на других не работал (не было возможности проверить), работали подобные вещи в других шейдерах. Собственно изначально это была просто копия другого шейдера из которого выкинул лишнее. Сейчас не на чем больше попробовать :(

#26
11:09, 28 сен 2018

А какая видеокарта? Какая инициализированная версия OpenGL?

#27
11:13, 28 сен 2018

карта - хз. Встроенный интел.
Версия 2.1

#28
11:24, 28 сен 2018

vindast
> #version 130
> in vec4 fragmentColor;
>
> void main( void )
> {
> gl_FragColor = fragmentColor;
> gl_FragDepth = gl_FragCoord.z; //Эта строчка пишет ровно то, что записал бы
> OpenGL без нее.
> }

Просто вставь этот код и скинь что вышло.
Тогда можно будет точно сказать что драйвер виноват или интел как всегда.

#29
11:35, 28 сен 2018

Grobozavr
> карта - хз. Встроенный интел.
Что ж ты с этого не начал. Выясняй, какой именно интел, по названию процессора.

> Версия 2.1
Чего-чего? о_О
У тебя же #version 130, оно только для OpenGL 3.0. Исправляй на #version 120.

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумГрафика

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