Буферы рендеринга WebGL, получающие искаженные значения пикселей из шейдера

Я рендеринг сцены полигонов для нескольких целей рендеринга, чтобы я мог выполнять эффекты постобработки. Однако значения, которые я устанавливаю в фрагментном шейдере, похоже, не отражаются точно в пиксельном шейдере.

Прямо сейчас конвейер выглядит так:

  • Рендеринг основных полигонов (используя простой шейдер, ниже) в промежуточный буфер
  • Визуализируйте буфер в виде квадрата размером с экран.

Я использую WebGL Inspector (http://benvanik.github.com/WebGL-Inspector/) для просмотра промежуточных буферов (созданных с использованием gl.createFrameBuffer()).

У меня есть очень простой фрагментный шейдер при рисовании полигонов, что-то вроде этого:

gl_FragColor = vec4(1, 0, 0, 0.5);

И это перед моим розыгрышем:

gl.disable(gl.BLEND);

Я ожидал бы, что это создаст пиксель в буфере со значением точно (255,0,0,128), но на самом деле, он создает пиксель со значением (255,0,0,64) - вдвое меньше альфа как и ожидалось.

Программа довольно большая и запутанная, поэтому я дополню пост конкретными деталями, если ответ не сразу очевиден.

Спасибо!

1 ответ

У вас есть PremultiplyAlpha, установленный в true? Возиться с этим - первое, что пришло в голову: странные альфа-значения.

Другие вопросы по тегам