Если я правильно помню, вы должны использовать прикрепление цвет 0 для первый буфер, цвето приложение 1 для второго, вложение цвета 2 для 3-го и т.д ..
В других случаях это нормально
gl.drawBuffers([
gl.COLOR_ATTACHMENT0, // color attachment 0 to draw buffer 0
gl.COLOR_ATTACHMENT1, // color attachment 1 to draw buffer 1
gl.COLOR_ATTACHMENT2, // color attachment 2 to draw buffer 2
]);
Т его также хорошо
gl.drawBuffers([
gl.COLOR_ATTACHMENT0, // color attachment 0 to draw buffer 0
gl.NONE, // NONE to draw buffer 1
gl.COLOR_ATTACHMENT2, // color attachment 2 to draw buffer 2
]);
Это не так!
gl.drawBuffers([
gl.COLOR_ATTACHMENT0, // color attachment 0 to draw buffer 0
gl.COLOR_ATTACHMENT2, // color attachment 2 to draw buffer 1 ERROR!
gl.COLOR_ATTACHMENT1, // color attachment 1 to draw buffer 2 ERROR!
]);
Так что в вашем случае.
gl.drawBuffers([
gl.COLOR_ATTACHMENT3, // color attachment 3 to draw buffer 0 ERROR!
]);
Всегда должен соответствовать 0 до 0, 1 до 1, 2 до 2, и т.д.
Если это действительно то, что вы делаете, вы должны сделать 3 объектов фреймбуфера. Один с первыми тремя буферами, один с 4-м буфером и один со всеми 4 буферами. Тогда вы бы сделали что-то вроде
gl.bindFramebuffer(gl.FRAMEBUFFER, threeAttachmentFB);
gl.drawBuffers([gl.COLOR_ATTACHMENT0, gl.COLOR_ATTACHMENT1, gl.COLOR_ATTACHMENT2]);
.. draw stuff ..
gl.bindFramebuffer(gl.FRAMEBUFFER, oneAttachmentFB);
gl.drawBuffers([gl.COLOR_ATTACHMENT0]);
.. draw stuff ..
gl.bindFramebuffer(gl.FRAMEBUFFER, fourAttachmentFB);
gl.drawBuffers([gl.COLOR_ATTACHMENT0, gl.COLOR_ATTACHMENT1,
gl.COLOR_ATTACHMENT2, gl.COLOR_ATTACHMENT3]);
.. draw stuff ..
В редакции этому не гарантируется работа различных комбо.Пока неясно, что ограничения в WebGL2, но в WebGL1 только эти комбинации гарантированно работают
одно вложение цвета (с или без глубины depth_stencil)
COLOR_ATTACHMENT0_WEBGL = RGBA/UNSIGNED_BYTE
два цвета вложений (с или без глубины depth_stencil)
COLOR_ATTACHMENT0_WEBGL = RGBA/UNSIGNED_BYTE
COLOR_ATTACHMENT1_WEBGL = RGBA/UNSIGNED_BYTE
три цветовых вложений (с или без глубины или depth_stencil)
COLOR_ATTACHMENT0_WEBGL = RGBA/UNSIGNED_BYTE
COLOR_ATTACHMENT1_WEBGL = RGBA/UNSIGNED_BYTE
COLOR_ATTACHMENT2_WEBGL = RGBA/UNSIGNED_BYTE
четыре цвета вложения (с или без глубины или depth_stencil)
COLOR_ATTACHMENT0_WEBGL = RGBA/UNSIGNED_BYTE
COLOR_ATTACHMENT1_WEBGL = RGBA/UNSIGNED_BYTE
COLOR_ATTACHMENT2_WEBGL = RGBA/UNSIGNED_BYTE
COLOR_ATTACHMENT3_WEBGL = RGBA/UNSIGNED_BYTE
Все другие комбинации могут или не могут работать в зависимости от GPU/Driver/Browser/OS
получило это, thx много :) – Skyfeiyun