remove temporary tokens, more error checks for blit function

This commit is contained in:
Brian Paul 2006-03-01 02:02:43 +00:00
parent 2c61fdafd6
commit 9974540c73
1 changed files with 39 additions and 12 deletions

View File

@ -34,17 +34,11 @@
#include "framebuffer.h"
#include "hash.h"
#include "renderbuffer.h"
#include "state.h"
#include "teximage.h"
#include "texstore.h"
/* XXX temporarily here */
#define GL_READ_FRAMEBUFFER_EXT 0x90
#define GL_DRAW_FRAMEBUFFER_EXT 0x9a
#define GL_DRAW_FRAMEBUFFER_BINDING_EXT GL_FRAMEBUFFER_BINDING_EXT
#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x9b
/**
* Notes:
*
@ -1527,6 +1521,14 @@ _mesa_BlitFramebufferEXT(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
ASSERT_OUTSIDE_BEGIN_END(ctx);
FLUSH_VERTICES(ctx, _NEW_BUFFERS);
if (ctx->NewState) {
_mesa_update_state(ctx);
}
if (!ctx->ReadBuffer) {
/* XXX */
}
/* check for complete framebuffers */
if (ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT ||
ctx->ReadBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) {
@ -1535,6 +1537,18 @@ _mesa_BlitFramebufferEXT(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
return;
}
if (filter != GL_NEAREST && filter != GL_LINEAR) {
_mesa_error(ctx, GL_INVALID_ENUM, "glBlitFramebufferEXT(filter)");
return;
}
if (mask & ~(GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT |
GL_STENCIL_BUFFER_BIT)) {
_mesa_error( ctx, GL_INVALID_VALUE, "glBlitFramebufferEXT(mask)");
return;
}
/* depth/stencil must be blitted with nearest filtering */
if ((mask & (GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT))
&& filter != GL_NEAREST) {
@ -1543,11 +1557,24 @@ _mesa_BlitFramebufferEXT(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
return;
}
if (mask & ~(GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT |
GL_STENCIL_BUFFER_BIT)) {
_mesa_error( ctx, GL_INVALID_VALUE, "glBlitFramebufferEXT(mask)");
return;
if (mask & GL_STENCIL_BUFFER_BIT) {
struct gl_renderbuffer *readRb = ctx->ReadBuffer->_StencilBuffer;
struct gl_renderbuffer *drawRb = ctx->DrawBuffer->_StencilBuffer;
if (readRb->StencilBits != drawRb->StencilBits) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"glBlitFramebufferEXT(stencil buffer size mismatch");
return;
}
}
if (mask & GL_DEPTH_BUFFER_BIT) {
struct gl_renderbuffer *readRb = ctx->ReadBuffer->_DepthBuffer;
struct gl_renderbuffer *drawRb = ctx->DrawBuffer->_DepthBuffer;
if (readRb->DepthBits != drawRb->DepthBits) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"glBlitFramebufferEXT(depth buffer size mismatch");
return;
}
}
if (!ctx->Extensions.EXT_framebuffer_blit) {