Проблемы с 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 появляются проблемы