Проблемы с framebuffer'ами и текстурами в webgl2

Я хотел закрепить текстуру с форматом RGBA32F к framebuffer, для "моих рэй трейсингов". Но во время вызова gl.drawArrays() получаю такое предупреждение: GL_INVALID_FRAMEBUFFER_OPERATION: Draw framebuffer is incomplete. Вот что я делаю во время инициализации:

function createTargetTexture(texture) {
    var targetTexture = gl.createTexture()
    gl.activeTexture(texture)
    gl.bindTexture(gl.TEXTURE_2D, targetTexture)
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)
    return targetTexture
}

var fb = gl.createFramebuffer()
var fb2 = gl.createFramebuffer()
var targetTexture = createTargetTexture(gl.TEXTURE0)
var targetTexture2 = createTargetTexture(gl.TEXTURE1)

И во время отрисовки:

if (currentBuffer) {
    gl.activeTexture(gl.TEXTURE0)
    gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA32F, gl.canvas.width, gl.canvas.height, 0, gl.RGBA, gl.FLOAT, null)
    gl.bindFramebuffer(gl.FRAMEBUFFER, fb)
    gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, targetTexture, 0)
}
else {
    gl.activeTexture(gl.TEXTURE1)
    gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA32F, gl.canvas.width, gl.canvas.height, 0, gl.RGBA, gl.FLOAT, null)
    gl.bindFramebuffer(gl.FRAMEBUFFER, fb2)
    gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, targetTexture2, 0)
}

gl.uniform1i(mainProgram.backbuff, currentBuffer)
// ...

gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4)

gl.useProgram(denoiseProgram)
gl.bindFramebuffer(gl.FRAMEBUFFER, null)
// ...
gl.uniform1i(denoiseProgram.tex, 1 - currentBuffer)
// ...

gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4)

Когда я добавляю gl.RGBA32F и gl.FLOAT вместо gl.RGBA и gl.UNSIGNED_BYTE появляются проблемы


Ответы (0 шт):