Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Ковыряю этот ваш OpenGL. [вопрос в посте #55]

Ковыряю этот ваш OpenGL. [вопрос в посте #55]

Страницы: 1 2 3 4 5 6 7 Следующая »
SyntheticПостоялецwww5 авг. 201619:16#0
создал текстурку для RT, хочу в нее глубину писать
glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, width, height, 0, GL_RED, GL_UNSIGNED_BYTE, 0);
присобачил так
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, exp_texture, 0);
GLenum DrawBuffers[] = {GL_COLOR_ATTACHMENT0};
glDrawBuffers(1, DrawBuffers);

в пуксель-шойдере в нее записал:

layout(location = 0) out vec4 fragmentdepth;
void main() 
{
    const float esm_factor = 0.5;
    float color = exp(esm_factor * vPosition.z);
    fragmentdepth = vec4(vec3(color), 1);
}

и оно работает, что странно.
Но так как мне по идее и нафиг не надо этот ваш vec4(), потому что желаю юзать одноканальную  GL_RED, пробую делать так

layout(location = 0) out float fragmentdepth;
void main() 
{
    const float esm_factor = 0.5;
    float color = exp(esm_factor * vPosition.z);
    fragmentdepth = color;
}

и на выходе кукиш с маслом пустая текстура.
Зачем оно так себя ведет?

Правка: 5 авг. 2016 19:24

ronnikoПостоялецwww5 авг. 201619:23#1
Брось каку :)
ronnikoПостоялецwww5 авг. 201619:24#2
Сначало пройди тест Люшера !
http://www.gamedev.ru/flame/forum/?id=217052

Правка: 5 авг. 2016 19:24

MrShoorУчастникwww5 авг. 201619:46#3
Synthetic
> Зачем оно так себя ведет?
Блендинг?
programinaПостоялецwww5 авг. 201619:52#4
unsigned CreateDepthTexture(unsigned width, unsigned height)
{
  unsigned depth_map;
  glGenTextures(1, &depth_map);
  glBindTexture(GL_TEXTURE_2D, depth_map);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, width, height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0);
  glBindTexture(GL_TEXTURE_2D, 0);
  return depth_map;
}

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

Правка: 5 авг. 2016 19:53

SyntheticПостоялецwww5 авг. 201619:53#5
MrShoor
> Блендинг?
Выключен.

Если подытожить, то мне надо в тектуру вида

glTexImage2D(GL_TEXTURE_2D, 0, GL_R32F, width, height, 0, GL_RED, GL_FLOAT, 0);
писать таким вот образом
layout(location = 0) out float fragmentdepth;
void main() 
{
    const float esm_factor = 0.5;
    float color = exp(esm_factor * vPosition.z);
    fragmentdepth = color;
}
но оно так не работает, зато работает почему-то так
layout(location = 0) out vec4 fragmentdepth;
void main() 
{
    const float esm_factor = 0.5;
    float color = exp(esm_factor * vPosition.z);
    fragmentdepth = vec4(vec3(color), 1);
}
что то нужно где-то еще включить/выключить?

Правка: 5 авг. 2016 19:55

SyntheticПостоялецwww5 авг. 201619:54#6
programina
благодарю, но RT глубины работает ок и без пиксельного шейдера.
мне нужен именно тот изврат, что я описал:)

Правка: 5 авг. 2016 19:54

programinaПостоялецwww5 авг. 201619:56#7
Synthetic
> fragmentdepth = color;
Ты хочешь рисовать флоат?
SyntheticПостоялецwww5 авг. 201619:58#8
programina
> Ты хочешь рисовать флоат?
как вариант?
а что, есть vec1() ? :)))

Правка: 5 авг. 2016 19:59

MrShoorУчастникwww5 авг. 201620:00#9
Synthetic
> что то нужно где-то еще включить/выключить?
Что в логах комиляции/линковки шейдеров? Какой #version используешь?
Через CodeXL проверял на ошибки?
Можно еще попробовать glColorMask выставить.
SyntheticПостоялецwww5 авг. 201620:01#10
Справедливости ради надо сказать что vec3 и vec2 тоже не работает.
Только с vec4 всё ок.
SyntheticПостоялецwww5 авг. 201620:02#11
MrShoor
> Какой #version используешь?
#version 330

MrShoor
> Через CodeXL проверял на ошибки?
неа, дело было на маках, надеюсь придут отцы и носом ткнут без CodeXL:)

MrShoor
> Можно еще попробовать glColorMask выставить.
это как так?

programinaПостоялецwww5 авг. 201620:13#12
Сделай просто:
color = vec4(float,float,float,1); 

и рассматривай свою глубину.

SyntheticПостоялецwww5 авг. 201620:17#13
programina
> Сделай просто и рассматривай свою глубину.
Ну вопрос то не о том, как костыли приклеить,
а почему не работает вариант с
layout(location = 0) out float fragmentdepth;

programinaПостоялецwww5 авг. 201620:17#14
В цветовом буфере нет никаких флоатов, там только векторы, поэтому выводить нужно вектор, если хочешь что-то увидеть.
Страницы: 1 2 3 4 5 6 7 Следующая »

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

2001—2018 © GameDev.ru — Разработка игр