xlib: derive xmesa_renderbuffer from swrast_renderbuffer
This commit is contained in:
@@ -309,7 +309,7 @@ create_xmesa_buffer(XMesaDrawable d, BufferType type,
|
|||||||
b->frontxrb->drawable = d;
|
b->frontxrb->drawable = d;
|
||||||
b->frontxrb->pixmap = (XMesaPixmap) d;
|
b->frontxrb->pixmap = (XMesaPixmap) d;
|
||||||
_mesa_add_renderbuffer(&b->mesa_buffer, BUFFER_FRONT_LEFT,
|
_mesa_add_renderbuffer(&b->mesa_buffer, BUFFER_FRONT_LEFT,
|
||||||
&b->frontxrb->Base);
|
&b->frontxrb->Base.Base);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Back renderbuffer
|
* Back renderbuffer
|
||||||
@@ -326,7 +326,7 @@ create_xmesa_buffer(XMesaDrawable d, BufferType type,
|
|||||||
b->db_mode = vis->ximage_flag ? BACK_XIMAGE : BACK_PIXMAP;
|
b->db_mode = vis->ximage_flag ? BACK_XIMAGE : BACK_PIXMAP;
|
||||||
|
|
||||||
_mesa_add_renderbuffer(&b->mesa_buffer, BUFFER_BACK_LEFT,
|
_mesa_add_renderbuffer(&b->mesa_buffer, BUFFER_BACK_LEFT,
|
||||||
&b->backxrb->Base);
|
&b->backxrb->Base.Base);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1469,7 +1469,9 @@ GLboolean XMesaGetDepthBuffer( XMesaBuffer b, GLint *width, GLint *height,
|
|||||||
{
|
{
|
||||||
struct gl_renderbuffer *rb
|
struct gl_renderbuffer *rb
|
||||||
= b->mesa_buffer.Attachment[BUFFER_DEPTH].Renderbuffer;
|
= b->mesa_buffer.Attachment[BUFFER_DEPTH].Renderbuffer;
|
||||||
if (!rb || !rb->Buffer) {
|
struct xmesa_renderbuffer *xrb = xmesa_renderbuffer(rb);
|
||||||
|
|
||||||
|
if (!xrb || !xrb->Base.Buffer) {
|
||||||
*width = 0;
|
*width = 0;
|
||||||
*height = 0;
|
*height = 0;
|
||||||
*bytesPerValue = 0;
|
*bytesPerValue = 0;
|
||||||
@@ -1481,7 +1483,7 @@ GLboolean XMesaGetDepthBuffer( XMesaBuffer b, GLint *width, GLint *height,
|
|||||||
*height = b->mesa_buffer.Height;
|
*height = b->mesa_buffer.Height;
|
||||||
*bytesPerValue = b->mesa_buffer.Visual.depthBits <= 16
|
*bytesPerValue = b->mesa_buffer.Visual.depthBits <= 16
|
||||||
? sizeof(GLushort) : sizeof(GLuint);
|
? sizeof(GLushort) : sizeof(GLuint);
|
||||||
*buffer = (void *) rb->Buffer;
|
*buffer = (void *) xrb->Base.Buffer;
|
||||||
return GL_TRUE;
|
return GL_TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -326,37 +326,37 @@ xmesa_new_renderbuffer(struct gl_context *ctx, GLuint name,
|
|||||||
struct xmesa_renderbuffer *xrb = CALLOC_STRUCT(xmesa_renderbuffer);
|
struct xmesa_renderbuffer *xrb = CALLOC_STRUCT(xmesa_renderbuffer);
|
||||||
if (xrb) {
|
if (xrb) {
|
||||||
GLuint name = 0;
|
GLuint name = 0;
|
||||||
_mesa_init_renderbuffer(&xrb->Base, name);
|
_mesa_init_renderbuffer(&xrb->Base.Base, name);
|
||||||
|
|
||||||
xrb->Base.Delete = xmesa_delete_renderbuffer;
|
xrb->Base.Base.Delete = xmesa_delete_renderbuffer;
|
||||||
if (backBuffer)
|
if (backBuffer)
|
||||||
xrb->Base.AllocStorage = xmesa_alloc_back_storage;
|
xrb->Base.Base.AllocStorage = xmesa_alloc_back_storage;
|
||||||
else
|
else
|
||||||
xrb->Base.AllocStorage = xmesa_alloc_front_storage;
|
xrb->Base.Base.AllocStorage = xmesa_alloc_front_storage;
|
||||||
|
|
||||||
xrb->Base.InternalFormat = GL_RGBA;
|
xrb->Base.Base.InternalFormat = GL_RGBA;
|
||||||
xrb->Base._BaseFormat = GL_RGBA;
|
xrb->Base.Base._BaseFormat = GL_RGBA;
|
||||||
xrb->Base.ClassID = XMESA_RENDERBUFFER;
|
xrb->Base.Base.ClassID = XMESA_RENDERBUFFER;
|
||||||
|
|
||||||
switch (xmvis->undithered_pf) {
|
switch (xmvis->undithered_pf) {
|
||||||
case PF_8R8G8B:
|
case PF_8R8G8B:
|
||||||
/* This will really only happen for pixmaps. We'll access the
|
/* This will really only happen for pixmaps. We'll access the
|
||||||
* pixmap via a temporary XImage which will be 32bpp.
|
* pixmap via a temporary XImage which will be 32bpp.
|
||||||
*/
|
*/
|
||||||
xrb->Base.Format = MESA_FORMAT_XRGB8888;
|
xrb->Base.Base.Format = MESA_FORMAT_XRGB8888;
|
||||||
break;
|
break;
|
||||||
case PF_8A8R8G8B:
|
case PF_8A8R8G8B:
|
||||||
xrb->Base.Format = MESA_FORMAT_ARGB8888;
|
xrb->Base.Base.Format = MESA_FORMAT_ARGB8888;
|
||||||
break;
|
break;
|
||||||
case PF_8A8B8G8R:
|
case PF_8A8B8G8R:
|
||||||
xrb->Base.Format = MESA_FORMAT_RGBA8888_REV;
|
xrb->Base.Base.Format = MESA_FORMAT_RGBA8888_REV;
|
||||||
break;
|
break;
|
||||||
case PF_5R6G5B:
|
case PF_5R6G5B:
|
||||||
xrb->Base.Format = MESA_FORMAT_RGB565;
|
xrb->Base.Base.Format = MESA_FORMAT_RGB565;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
_mesa_warning(ctx, "Bad pixel format in xmesa_new_renderbuffer");
|
_mesa_warning(ctx, "Bad pixel format in xmesa_new_renderbuffer");
|
||||||
xrb->Base.Format = MESA_FORMAT_ARGB8888;
|
xrb->Base.Base.Format = MESA_FORMAT_ARGB8888;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -426,7 +426,7 @@ xmesa_MapRenderbuffer(struct gl_context *ctx,
|
|||||||
{
|
{
|
||||||
struct xmesa_renderbuffer *xrb = xmesa_renderbuffer(rb);
|
struct xmesa_renderbuffer *xrb = xmesa_renderbuffer(rb);
|
||||||
|
|
||||||
if (xrb->Base.ClassID == XMESA_RENDERBUFFER) {
|
if (xrb->Base.Base.ClassID == XMESA_RENDERBUFFER) {
|
||||||
XImage *ximage = xrb->ximage;
|
XImage *ximage = xrb->ximage;
|
||||||
|
|
||||||
assert(!xrb->map_mode); /* only a single mapping allowed */
|
assert(!xrb->map_mode); /* only a single mapping allowed */
|
||||||
@@ -488,7 +488,7 @@ xmesa_UnmapRenderbuffer(struct gl_context *ctx, struct gl_renderbuffer *rb)
|
|||||||
{
|
{
|
||||||
struct xmesa_renderbuffer *xrb = xmesa_renderbuffer(rb);
|
struct xmesa_renderbuffer *xrb = xmesa_renderbuffer(rb);
|
||||||
|
|
||||||
if (xrb->Base.ClassID == XMESA_RENDERBUFFER) {
|
if (xrb->Base.Base.ClassID == XMESA_RENDERBUFFER) {
|
||||||
XImage *ximage = xrb->ximage;
|
XImage *ximage = xrb->ximage;
|
||||||
|
|
||||||
if (!ximage) {
|
if (!ximage) {
|
||||||
|
@@ -138,7 +138,7 @@ clear_pixmap(struct gl_context *ctx, struct xmesa_renderbuffer *xrb,
|
|||||||
assert(xmbuf->cleargc);
|
assert(xmbuf->cleargc);
|
||||||
|
|
||||||
XMesaFillRectangle( xmesa->display, xrb->pixmap, xmbuf->cleargc,
|
XMesaFillRectangle( xmesa->display, xrb->pixmap, xmbuf->cleargc,
|
||||||
x, xrb->Base.Height - y - height,
|
x, xrb->Base.Base.Height - y - height,
|
||||||
width, height );
|
width, height );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -215,9 +215,9 @@ clear_32bit_ximage(struct gl_context *ctx, struct xmesa_renderbuffer *xrb,
|
|||||||
| ((pixel << 24) & 0xff000000);
|
| ((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 */
|
/* 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;
|
GLuint *ptr4 = (GLuint *) xrb->ximage->data;
|
||||||
if (pixel == 0) {
|
if (pixel == 0) {
|
||||||
/* common case */
|
/* common case */
|
||||||
@@ -332,7 +332,7 @@ can_do_DrawPixels_8R8G8B(struct gl_context *ctx, GLenum format, GLenum type)
|
|||||||
struct xmesa_renderbuffer *xrb = xmesa_renderbuffer(rb);
|
struct xmesa_renderbuffer *xrb = xmesa_renderbuffer(rb);
|
||||||
if (xrb &&
|
if (xrb &&
|
||||||
xrb->pixmap && /* drawing to pixmap or window */
|
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;
|
return GL_TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -465,7 +465,7 @@ can_do_DrawPixels_5R6G5B(struct gl_context *ctx, GLenum format, GLenum type)
|
|||||||
struct xmesa_renderbuffer *xrb = xmesa_renderbuffer(rb);
|
struct xmesa_renderbuffer *xrb = xmesa_renderbuffer(rb);
|
||||||
if (xrb &&
|
if (xrb &&
|
||||||
xrb->pixmap && /* drawing to pixmap or window */
|
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;
|
return GL_TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -29,6 +29,7 @@
|
|||||||
|
|
||||||
#include "xmesa.h"
|
#include "xmesa.h"
|
||||||
#include "main/mtypes.h"
|
#include "main/mtypes.h"
|
||||||
|
#include "swrast/s_context.h"
|
||||||
|
|
||||||
|
|
||||||
extern _glthread_Mutex _xmesa_lock;
|
extern _glthread_Mutex _xmesa_lock;
|
||||||
@@ -151,7 +152,7 @@ typedef enum {
|
|||||||
*/
|
*/
|
||||||
struct xmesa_renderbuffer
|
struct xmesa_renderbuffer
|
||||||
{
|
{
|
||||||
struct gl_renderbuffer Base; /* Base class */
|
struct swrast_renderbuffer Base; /* Base class */
|
||||||
|
|
||||||
XMesaBuffer Parent; /**< The XMesaBuffer this renderbuffer belongs to */
|
XMesaBuffer Parent; /**< The XMesaBuffer this renderbuffer belongs to */
|
||||||
XMesaDrawable drawable; /* Usually the X window ID */
|
XMesaDrawable drawable; /* Usually the X window ID */
|
||||||
|
Reference in New Issue
Block a user