Буферы рендеринга 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? Возиться с этим - первое, что пришло в голову: странные альфа-значения.