В WebGL можно ли использовать фрагментный шейдер для установки текстуры LUMINANCE? - PullRequest
0 голосов
/ 30 января 2019

Я использую WebGL для некоторой обработки изображений, и я хотел бы, чтобы мой фрагментный шейдер выводил на 1 или 2 канальную текстуру.Я могу прикрепить RGBA или RGB текстуру к кадровому буферу и вывести их успешно.Но если вместо этого я присоединяю текстуру LUMINANCE или LUMINANCE_ALPHA к кадровому буферу, состояние fb отображается как неполное и не работает.Надеюсь избежать ненужных лишних текстурных каналов, но не уверен, возможно ли это.Спасибо за любые предложения!

Если формат изменен на gl.RGBA ниже, то это работает:

gl.getExtension("OES_texture_float")
var tex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, tex);
var format = gl.LUMINANCE;
gl.texImage2D(gl.TEXTURE_2D, 0, format, 512, 512, 0, format, gl.FLOAT, null);
var fb = gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex, 0);
if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) != gl.FRAMEBUFFER_COMPLETE) {
  alert("framebuffer not complete");
}

1 Ответ

0 голосов
/ 30 января 2019

В WebGL1 гарантированно будут работать только 3 комбинации вложений кадрового буфера

Начиная с спецификации, раздел 6.8

Следующие комбинации вложений объектов кадрового буфера:когда все вложения завершены, ненулевые и имеют одинаковую ширину и высоту вложения кадрового буфера, это должно привести к завершению кадрового буфера:

  • COLOR_ATTACHMENT0 = RGBA / UNSIGNED_BYTE текстура
  • COLOR_ATTACHMENT0 = RGBA / UNSIGNED_BYTE текстура + DEPTH_ATTACHMENT = DEPTH_COMPONENT16 renderbuffer
  • COLOR_ATTACHMENT0 = RGBA / UNSIGNED_BYTE текстура + DEPTH_STENCIL_ATTACHMENT = DEPTH_STENCIL renderbuffer

Все остальные комбинации зависят от реализации.

(примечание: OpenGL ES 2.0, на котором основан WebGL1, не гарантирует каких-либо комбинаций для периода работы10)

В WebGL2 куча комбинаций формат / тип гарантированно будет работать , но LUMINANCE/FLOAT не является одним из них.

...