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

OpenGL :: Рендер глубины в текстуру (3 стр)

Страницы: 1 2 3 4 5 6 Следующая »
#30
9:28, 21 дек. 2017

0xc0de
> Вообще для таких целей нужно использовать glTexStorage

Понял :) спасибо!
А Depth-значение в шейдере читать как один float?


#31
11:34, 21 дек. 2017

Daniil Petrov
> Depth-значение в шейдере читать как один float

да

#32
12:05, 21 дек. 2017

0xc0de
А вообще-то float 4 байта, а не 3 :) или тут прокатит?

#33
12:18, 21 дек. 2017

Daniil Petrov
> Я правильно понял, что Stencil нечитаем
Читаем, но где-то с версии 4,3.

#34
12:21, 21 дек. 2017

https://stackoverflow.com/questions/27535727/opengl-create-a-dept… e-for-reading

#35
13:39, 21 дек. 2017

Dimich
да, я это и имел ввиду

#36
13:41, 21 дек. 2017

Daniil Petrov
> А вообще-то float 4 байта, а не 3 :) или тут прокатит?

При чтении текстур компоненты автоматически преобразуются во флоат. И при рендеринге - наоборот из флоата в таргет-формат буфера.

#37
14:40, 21 дек. 2017

А после рендеринга и копирования буфера в текстуру со сведением сэмплов, буфер глубины не очищается?
А то ничего понять не могу, почему-то чёрный экран выводится, хотя другая текстура через данный сэмплер пролазит и обрабатывается нормально.

#38
8:49, 22 дек. 2017

Ничего не пойму, хоть убейте, что я делаю не так?
Вот я создаю текстуру буфера глубины:

glGenTextures(1, &textureDepthStencilBuffer);
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, textureDepthStencilBuffer);
glTexStorage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, GameData.Antialiasing, GL_DEPTH24_STENCIL8, screenWidth, screenHeight, GL_TRUE);
glGenSamplers(1, &depthStencilSampler);
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, NULL);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D_MULTISAMPLE, textureDepthStencilBuffer, NULL);
Вот я её назначаю нужному сэмплеру:
spPrograms[4].SetUniform("zBuffer", 1);
glActiveTexture(GL_TEXTURE0 + 1);
glBindTexture(GL_TEXTURE_2D, textureDepthStencilBuffer);
glBindSampler(1, depthStencilSampler);
Вот принимаю в шейдере:
float depth = texture2D (zBuffer, texCoord).r;
outputColor = vec4(vec3(depth), 1.0);
Но выходит чёрный экран!!!
Картинка рисуется нормально с адекватным Z-тестом, другая текстура через этот сэмплер выводится нормально, в чём может быть проблема???

#39
9:27, 22 дек. 2017

жаль нету DXDEBUG он бы сразу рассказал откуда руки растут

ты, точно знаешь как работают ms текстуры ?

#40
9:41, 22 дек. 2017

Daniil Petrov
> в чём может быть проблема

1. В шейдере sampler2DMS ?
2. Значения глубины точно 0 или близкое к 0? Если попробовать сделать outputColor = vec4(vec3(depth*1000.0), 1.0); ?

#41
9:42, 22 дек. 2017

innuendo
> ты, точно знаешь как работают ms текстуры ?
Какие-какие текстуры? :)

- Я Веня из Алупки.
- Из какой, из какой?
#42
9:51, 22 дек. 2017

0xc0de
> 1. В шейдере sampler2DMS ?
Ета што такоя? Я такоя вставил в шейдер, он вообще стал не работающим :))) во всех примерах используется стандартный uniform sampler2D
> 2. Значения глубины точно 0 или близкое к 0? Если попробовать сделать outputColor = vec4(vec3(depth*1000.0), 1.0); ?
Нет, нет, нет и ещё раз нет :)

#43
9:57, 22 дек. 2017
точно, Веня из Алупки :)

Daniil Petrov
> Какие-какие текстуры?

ms - multi samples

#44
10:01, 22 дек. 2017

innuendo
Да и с обычной текстурой при отключении msaa та же самая байда :)

glBindTexture(GL_TEXTURE_2D, textureDepthStencilBuffer);
glTexStorage2D(GL_TEXTURE_2D, 1, GL_DEPTH24_STENCIL8, screenWidth, screenHeight);
glGenSamplers(1, &depthStencilSampler);
glBindTexture(GL_TEXTURE_2D, NULL);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, textureDepthStencilBuffer, NULL);
Страницы: 1 2 3 4 5 6 Следующая »
ПрограммированиеФорумГрафика

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