* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "main/bufferobj.h"
#include "main/context.h"
#include "main/colormac.h"
+#include "main/fbobject.h"
#include "main/macros.h"
+#include "main/mipmap.h"
#include "main/image.h"
#include "main/imports.h"
#include "main/mtypes.h"
}
-static void
-clear_color( struct gl_context *ctx,
- const union gl_color_union color )
-{
- if (ctx->DrawBuffer->Name == 0) {
- const XMesaContext xmesa = XMESA_CONTEXT(ctx);
- XMesaBuffer xmbuf = XMESA_BUFFER(ctx->DrawBuffer);
-
- _mesa_unclamped_float_rgba_to_ubyte(xmesa->clearcolor, color.f);
- xmesa->clearpixel = xmesa_color_to_pixel( ctx,
- xmesa->clearcolor[0],
- xmesa->clearcolor[1],
- xmesa->clearcolor[2],
- xmesa->clearcolor[3],
- xmesa->xm_visual->undithered_pf );
- _glthread_LOCK_MUTEX(_xmesa_lock);
- XMesaSetForeground( xmesa->display, xmbuf->cleargc,
- xmesa->clearpixel );
- _glthread_UNLOCK_MUTEX(_xmesa_lock);
- }
-}
-
-
-
/* Implements glColorMask() */
static void
color_mask(struct gl_context *ctx,
const int xclass = xmesa->xm_visual->visualType;
(void) amask;
- if (ctx->DrawBuffer->Name != 0)
+ if (_mesa_is_user_fbo(ctx->DrawBuffer))
return;
xmbuf = XMESA_BUFFER(ctx->DrawBuffer);
assert(xmbuf->cleargc);
XMesaFillRectangle( xmesa->display, xrb->pixmap, xmbuf->cleargc,
- x, xrb->Base.Height - y - height,
+ x, xrb->Base.Base.Height - y - height,
width, height );
}
| ((pixel << 24) & 0xff000000);
}
- if (width == xrb->Base.Width && height == xrb->Base.Height) {
+ if (width == xrb->Base.Base.Width && height == xrb->Base.Base.Height) {
/* clearing whole buffer */
- const GLuint n = xrb->Base.Width * xrb->Base.Height;
+ const GLuint n = xrb->Base.Base.Width * xrb->Base.Base.Height;
GLuint *ptr4 = (GLuint *) xrb->ximage->data;
if (pixel == 0) {
/* common case */
static void
clear_buffers(struct gl_context *ctx, GLbitfield buffers)
{
- if (ctx->DrawBuffer->Name == 0) {
+ if (_mesa_is_winsys_fbo(ctx->DrawBuffer)) {
/* this is a window system framebuffer */
const GLuint *colorMask = (GLuint *) &ctx->Color.ColorMask[0];
+ const XMesaContext xmesa = XMESA_CONTEXT(ctx);
XMesaBuffer b = XMESA_BUFFER(ctx->DrawBuffer);
const GLint x = ctx->DrawBuffer->_Xmin;
const GLint y = ctx->DrawBuffer->_Ymin;
const GLint width = ctx->DrawBuffer->_Xmax - x;
const GLint height = ctx->DrawBuffer->_Ymax - y;
+ _mesa_unclamped_float_rgba_to_ubyte(xmesa->clearcolor,
+ ctx->Color.ClearColor.f);
+ xmesa->clearpixel = xmesa_color_to_pixel(ctx,
+ xmesa->clearcolor[0],
+ xmesa->clearcolor[1],
+ xmesa->clearcolor[2],
+ xmesa->clearcolor[3],
+ xmesa->xm_visual->undithered_pf);
+ XMesaSetForeground(xmesa->display, b->cleargc, xmesa->clearpixel);
+
/* we can't handle color or index masking */
if (*colorMask == 0xffffffff && ctx->Color.IndexMask == 0xffffffff) {
if (buffers & BUFFER_BIT_FRONT_LEFT) {
if (format == GL_BGRA &&
type == GL_UNSIGNED_BYTE &&
ctx->DrawBuffer &&
- ctx->DrawBuffer->Name == 0 &&
+ _mesa_is_winsys_fbo(ctx->DrawBuffer) &&
ctx->Pixel.ZoomX == 1.0 && /* no zooming */
ctx->Pixel.ZoomY == 1.0 &&
ctx->_ImageTransferState == 0 /* no color tables, scale/bias, etc */) {
struct xmesa_renderbuffer *xrb = xmesa_renderbuffer(rb);
if (xrb &&
xrb->pixmap && /* drawing to pixmap or window */
- _mesa_get_format_bits(xrb->Base.Format, GL_ALPHA_BITS) == 0) {
+ _mesa_get_format_bits(xrb->Base.Base.Format, GL_ALPHA_BITS) == 0) {
return GL_TRUE;
}
}
type == GL_UNSIGNED_SHORT_5_6_5 &&
!ctx->Color.DitherFlag && /* no dithering */
ctx->DrawBuffer &&
- ctx->DrawBuffer->Name == 0 &&
+ _mesa_is_winsys_fbo(ctx->DrawBuffer) &&
ctx->Pixel.ZoomX == 1.0 && /* no zooming */
ctx->Pixel.ZoomY == 1.0 &&
ctx->_ImageTransferState == 0 /* no color tables, scale/bias, etc */) {
struct xmesa_renderbuffer *xrb = xmesa_renderbuffer(rb);
if (xrb &&
xrb->pixmap && /* drawing to pixmap or window */
- _mesa_get_format_bits(xrb->Base.Format, GL_ALPHA_BITS) == 0) {
+ _mesa_get_format_bits(xrb->Base.Base.Format, GL_ALPHA_BITS) == 0) {
return GL_TRUE;
}
}
_vbo_InvalidateState( ctx, new_state );
_swsetup_InvalidateState( ctx, new_state );
- if (ctx->DrawBuffer->Name != 0)
+ if (_mesa_is_user_fbo(ctx->DrawBuffer))
return;
/*
front_xrb = xmbuf->frontxrb;
if (front_xrb) {
- xmesa_set_renderbuffer_funcs(front_xrb, xmesa->pixelformat,
- xmesa->xm_visual->BitsPerPixel);
front_xrb->clearFunc = clear_pixmap;
}
back_xrb = xmbuf->backxrb;
if (back_xrb) {
- xmesa_set_renderbuffer_funcs(back_xrb, xmesa->pixelformat,
- xmesa->xm_visual->BitsPerPixel);
if (xmbuf->backxrb->pixmap) {
back_xrb->clearFunc = clear_pixmap;
}
}
-
-/**
- * In SW, we don't really compress GL_COMPRESSED_RGB[A] textures!
- */
-static gl_format
-choose_tex_format( struct gl_context *ctx, GLint internalFormat,
- GLenum format, GLenum type )
-{
- switch (internalFormat) {
- case GL_COMPRESSED_RGB_ARB:
- return MESA_FORMAT_RGB888;
- case GL_COMPRESSED_RGBA_ARB:
- return MESA_FORMAT_RGBA8888;
- default:
- return _mesa_choose_tex_format(ctx, internalFormat, format, type);
- }
-}
-
-
/**
* Called by glViewport.
* This is a good time for us to poll the current X window size and adjust
/**
* Return the difference between the two given times in microseconds.
*/
-#ifdef __VMS
-#define suseconds_t unsigned int
-#endif
static GLuint64EXT
time_diff(const struct timeval *t0, const struct timeval *t1)
{
driver->GetBufferSize = NULL; /* OBSOLETE */
driver->Flush = finish_or_flush;
driver->Finish = finish_or_flush;
- driver->ClearColor = clear_color;
driver->ColorMask = color_mask;
driver->Enable = enable;
driver->Viewport = xmesa_viewport;
driver->MapRenderbuffer = xmesa_MapRenderbuffer;
driver->UnmapRenderbuffer = xmesa_UnmapRenderbuffer;
-#if ENABLE_EXT_texure_compression_s3tc
- driver->ChooseTextureFormat = choose_tex_format;
-#else
- (void) choose_tex_format;
-#endif
+ driver->GenerateMipmap = _mesa_generate_mipmap;
#if ENABLE_EXT_timer_query
driver->NewQueryObject = xmesa_new_query_object;