0xc0de
> Вообще для таких целей нужно использовать glTexStorage
Понял :) спасибо!
А Depth-значение в шейдере читать как один float?
Daniil Petrov
> Depth-значение в шейдере читать как один float
да
0xc0de
А вообще-то float 4 байта, а не 3 :) или тут прокатит?
Daniil Petrov
> Я правильно понял, что Stencil нечитаем
Читаем, но где-то с версии 4,3.
Dimich
да, я это и имел ввиду
Daniil Petrov
> А вообще-то float 4 байта, а не 3 :) или тут прокатит?
При чтении текстур компоненты автоматически преобразуются во флоат. И при рендеринге - наоборот из флоата в таргет-формат буфера.
А после рендеринга и копирования буфера в текстуру со сведением сэмплов, буфер глубины не очищается?
А то ничего понять не могу, почему-то чёрный экран выводится, хотя другая текстура через данный сэмплер пролазит и обрабатывается нормально.
Ничего не пойму, хоть убейте, что я делаю не так?
Вот я создаю текстуру буфера глубины:
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-тестом, другая текстура через этот сэмплер выводится нормально, в чём может быть проблема???
жаль нету DXDEBUG он бы сразу рассказал откуда руки растут
ты, точно знаешь как работают ms текстуры ?
Daniil Petrov
> в чём может быть проблема
1. В шейдере sampler2DMS ?
2. Значения глубины точно 0 или близкое к 0? Если попробовать сделать outputColor = vec4(vec3(depth*1000.0), 1.0); ?
innuendo
> ты, точно знаешь как работают ms текстуры ?
Какие-какие текстуры? :)
- Я Веня из Алупки.
- Из какой, из какой?
0xc0de
> 1. В шейдере sampler2DMS ?
Ета што такоя? Я такоя вставил в шейдер, он вообще стал не работающим :))) во всех примерах используется стандартный uniform sampler2D
> 2. Значения глубины точно 0 или близкое к 0? Если попробовать сделать outputColor = vec4(vec3(depth*1000.0), 1.0); ?
Нет, нет, нет и ещё раз нет :)
точно, Веня из Алупки :)
Daniil Petrov
> Какие-какие текстуры?
ms - multi samples
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);
Тема в архиве.