diff options
author | Keith Whitwell <keith@tungstengraphics.com> | 2003-12-11 19:06:32 +0000 |
---|---|---|
committer | Keith Whitwell <keith@tungstengraphics.com> | 2003-12-11 19:06:32 +0000 |
commit | 7ed58285abede813fbf5fa0a2e29982043f1bbbe (patch) | |
tree | a1b7dc8b8464aae4ac8a445ac7fffe4b49d90843 | |
parent | 844cdaf461e3e181bcf1d4c0ba79ef5c4140cb4e (diff) |
add driClipRectToFramebuffer helper function
-rw-r--r-- | src/mesa/drivers/dri/common/utils.c | 33 | ||||
-rw-r--r-- | src/mesa/drivers/dri/common/utils.h | 4 |
2 files changed, 37 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/common/utils.c b/src/mesa/drivers/dri/common/utils.c index 0d21ceda56..4276854224 100644 --- a/src/mesa/drivers/dri/common/utils.c +++ b/src/mesa/drivers/dri/common/utils.c @@ -184,3 +184,36 @@ driCheckDriDdxDrmVersions(__DRIscreenPrivate *sPriv, return GL_TRUE; } + +GLboolean driClipRectToFramebuffer( const GLframebuffer *buffer, + GLint *x, GLint *y, + GLsizei *width, GLsizei *height ) +{ + /* left clipping */ + if (*x < buffer->_Xmin) { + *width -= (buffer->_Xmin - *x); + *x = buffer->_Xmin; + } + + /* right clipping */ + if (*x + *width > buffer->_Xmax) + *width -= (*x + *width - buffer->_Xmax - 1); + + if (*width <= 0) + return GL_FALSE; + + /* bottom clipping */ + if (*y < buffer->_Ymin) { + *height -= (buffer->_Ymin - *y); + *y = buffer->_Ymin; + } + + /* top clipping */ + if (*y + *height > buffer->_Ymax) + *height -= (*y + *height - buffer->_Ymax - 1); + + if (*height <= 0) + return GL_FALSE; + + return GL_TRUE; +} diff --git a/src/mesa/drivers/dri/common/utils.h b/src/mesa/drivers/dri/common/utils.h index d6506c5b88..401a1b882f 100644 --- a/src/mesa/drivers/dri/common/utils.h +++ b/src/mesa/drivers/dri/common/utils.h @@ -51,4 +51,8 @@ extern GLboolean driCheckDriDdxDrmVersions( __DRIscreenPrivate *sPriv, const char * driver_name, int dri_major, int dri_minor, int ddx_major, int ddx_minor, int drm_major, int drm_minor ); +extern GLboolean driClipRectToFramebuffer( const GLframebuffer *buffer, + GLint *x, GLint *y, + GLsizei *width, GLsizei *height ); + #endif /* DRI_DEBUG_H */ |