2013-04-13 51 views
1

我使用的代码创建一个帧缓冲中的WebGL:WebGL的帧缓冲区是空白

this.buffer = ctx.createFramebuffer(); 
ctx.bindFramebuffer(ctx.FRAMEBUFFER, this.buffer); 

this.depthTexture = this.createTexture(ctx, ctx.DEPTH_COMPONENT, 
    ctx.DEPTH_COMPONENT, ctx.UNSIGNED_SHORT);  
ctx.framebufferTexture2D(ctx.FRAMEBUFFER, ctx.DEPTH_ATTACHMENT, 
    ctx.TEXTURE_2D, this.depthTexture, 0); 


this.colourTexture = this.createTexture(ctx, ctx.RGBA, ctx.RGBA, ctx.FLOAT);   
ctx.framebufferTexture2D(ctx.FRAMEBUFFER, ctx.COLOR_ATTACHMENT0, 
    ctx.TEXTURE_2D, this.colourTexture, 0); 

抽奖,它使用

this.ctx.useProgram(this.forwardShader.program); 
this.ctx.bindFramebuffer(this.ctx.FRAMEBUFFER, this.framebuffer.buffer); 
this.ctx.viewport(0, 0, this.framebuffer.size, this.framebuffer.size); 
this.ctx.clear(this.ctx.COLOR_BUFFER_BIT | this.ctx.DEPTH_BUFFER_BIT); 

mat4.identity(this.viewMatrix); 
mat4.identity(this.modelMatrix); 

this.camera.transform(this.viewMatrix); 

mat4.translate(this.modelMatrix, this.modelMatrix, [0, 0, -2]); 

this.mStack.pushMatrix(this.modelMatrix); 

mat4.translate(this.modelMatrix, this.modelMatrix, [0, -1, 0]); 
mat4.rotateX(this.modelMatrix, this.modelMatrix, -Math.PI/2.0); 

this.setShaderUniforms(); 
this.plane.draw(this.forwardShader); 

this.mStack.popMatrix(this.modelMatrix); 

this.setShaderUniforms(); 
this.cube.draw(this.forwardShader); 

this.ctx.bindFramebuffer(this.ctx.FRAMEBUFFER, null); 

然后渲染使用

this.ctx.useProgram(this.renderTextureShader.program); 
this.ctx.viewport(0, 0, this.viewportWidth, this.viewportHeight);  
this.ctx.clear(this.ctx.COLOR_BUFFER_BIT | this.ctx.DEPTH_BUFFER_BIT); 

this.renderTexture.draw(this.framebuffer.colourTexture, this.renderTextureShader); 

结果它完美的工作,但是当我改变它来渲染深度纹理时,我得到一个白色的屏幕。我已经检查了相关的扩展名被启用和(储存数组把它们显然,如果他们得到gc'ed它可能会导致错误。在什么即时做错将是巨大的

的完整代码可以在我找到的任何反馈bitbucket

+0

深度线性化可以帮助https://stackoverflow.com/a/44357374/3012928 –

回答

2

它可能是你的深度数据范围内的问题,请尝试:

this.depthTexture = this.createTexture(ctx, ctx.DEPTH_COMPONENT, ctx.DEPTH_COMPONENT, ctx.FLOAT);

+0

这样做会导致错误“INVALID_OPERATION:texImage2D:DEPTH_COMPONENT格式的无效类型”。我怀疑例如,虽然启用了深度纹理和浮点纹理的扩展,但两者不能合并 –