diff options
-rw-r--r-- | src/mesa/main/framebuffer.c | 5 | ||||
-rw-r--r-- | src/mesa/main/renderbuffer.c | 11 |
2 files changed, 13 insertions, 3 deletions
diff --git a/src/mesa/main/framebuffer.c b/src/mesa/main/framebuffer.c index cdfd0f9c7c8..f6322bf4d1c 100644 --- a/src/mesa/main/framebuffer.c +++ b/src/mesa/main/framebuffer.c @@ -319,6 +319,11 @@ _mesa_update_draw_buffer_bounds(GLcontext *ctx) * change depending on the renderbuffer bindings. This function updates * the given framebuffer's Visual from the current renderbuffer bindings. * This is only intended for user-created framebuffers. + * + * Also note: ctx->DrawBuffer->Visual.depthBits might not equal + * ctx->DrawBuffer->Attachment[BUFFER_DEPTH].Renderbuffer.DepthBits. + * The former one is used to convert floating point depth values into + * integer Z values. */ void _mesa_update_framebuffer_visual(struct gl_framebuffer *fb) diff --git a/src/mesa/main/renderbuffer.c b/src/mesa/main/renderbuffer.c index cc1b4fe3763..7abfc7034a2 100644 --- a/src/mesa/main/renderbuffer.c +++ b/src/mesa/main/renderbuffer.c @@ -1045,7 +1045,7 @@ soft_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb, rb->PutMonoRow = put_mono_row_ushort; rb->PutValues = put_values_ushort; rb->PutMonoValues = put_mono_values_ushort; - /*rb->DepthBits not set here */ + rb->DepthBits = 8 * sizeof(GLushort); pixelSize = sizeof(GLushort); break; case GL_DEPTH_COMPONENT24: @@ -1060,7 +1060,10 @@ soft_renderbuffer_storage(GLcontext *ctx, struct gl_renderbuffer *rb, rb->PutMonoRow = put_mono_row_uint; rb->PutValues = put_values_uint; rb->PutMonoValues = put_mono_values_uint; - /* rb->DepthBits not set here */ + if (internalFormat == GL_DEPTH_COMPONENT24) + rb->DepthBits = 24; + else + rb->DepthBits = 32; pixelSize = sizeof(GLuint); break; case GL_COLOR_INDEX8_EXT: @@ -1711,10 +1714,12 @@ _mesa_add_depth_renderbuffer(GLcontext *ctx, struct gl_framebuffer *fb, if (depthBits <= 16) { rb->InternalFormat = GL_DEPTH_COMPONENT16; } + else if (depthBits <= 24) { + rb->InternalFormat = GL_DEPTH_COMPONENT24; + } else { rb->InternalFormat = GL_DEPTH_COMPONENT32; } - rb->DepthBits = depthBits; rb->AllocStorage = soft_renderbuffer_storage; _mesa_add_renderbuffer(fb, BUFFER_DEPTH, rb); |