I have found out why alphablending and readpixels did not work.  When the 
renderbuffer was created, the fields for width, height, and bits for rgba 
components were never filled out in the "struct gl_renderbuffer Base" component.

I have tested this on demos that use GL_BLEND, GL_COLOR_LOGIC_OP and 
glCopyPixles.  All of these work and did not work before!

I also fixed a bug in glfbdev that caused a segmentation fault in some cases.
I think I also need to make furthur changes to the driver to allow for
dynamic resizing and glutGameMode.

I need to clean up my glut implementation so it compiles with -ansi (oops!)
I also want to add a lot of improvements to it and fix the configurations
so that it is built instead of glut/glx.

I have found bugs in miniglx, and I am working on dri drivers as well.

Would it be possible for me to get cvs access so I can more easily submit
my changes?

Thanks,
Sean D'Epagnier
--- Mesacvs/src/mesa/drivers/fbdev/glfbdev.c    2006-06-19 21:35:17.000000000 
-0600
+++ Mesa/src/mesa/drivers/fbdev/glfbdev.c       2006-08-01 02:08:46.000000000 
-0600
@@ -501,11 +501,13 @@
 
 
 static struct GLFBDevRenderbufferRec *
-new_glfbdev_renderbuffer(void *bufferStart, int pixelFormat)
+new_glfbdev_renderbuffer(void *bufferStart, const GLFBDevVisualPtr visual)
 {
    struct GLFBDevRenderbufferRec *rb = CALLOC_STRUCT(GLFBDevRenderbufferRec);
    if (rb) {
       GLuint name = 0;
+      int pixelFormat = visual->pixelFormat;
+
       _mesa_init_renderbuffer(&rb->Base, name);
 
       rb->Base.Delete = delete_renderbuffer;
@@ -566,6 +568,20 @@
       }
       rb->Base.DataType = GL_UNSIGNED_BYTE;
       rb->Base.Data = bufferStart;
+
+      rb->rowStride = visual->var.xres_virtual * visual->var.bits_per_pixel / 
8;
+      rb->bottom = (GLubyte *) bufferStart
+         + (visual->var.yres_virtual - 1) * rb->rowStride;
+
+      rb->Base.Width = visual->var.xres;
+      rb->Base.Height = visual->var.yres;
+
+      rb->Base.RedBits = visual->var.red.length;
+      rb->Base.GreenBits = visual->var.green.length;
+      rb->Base.BlueBits = visual->var.blue.length;
+      rb->Base.AlphaBits = visual->var.transp.length;
+
+      rb->Base.InternalFormat = pixelFormat;
    }
    return rb;
 }
@@ -603,12 +619,12 @@
    /* basic framebuffer setup */
    _mesa_initialize_framebuffer(&buf->glframebuffer, &visual->glvisual);
    /* add front renderbuffer */
-   frontrb = new_glfbdev_renderbuffer(frontBuffer, visual->pixelFormat);
+   frontrb = new_glfbdev_renderbuffer(frontBuffer, visual);
    _mesa_add_renderbuffer(&buf->glframebuffer, BUFFER_FRONT_LEFT,
                           &frontrb->Base);
    /* add back renderbuffer */
    if (visual->glvisual.doubleBufferMode) {
-      backrb = new_glfbdev_renderbuffer(backBuffer, visual->pixelFormat);
+      backrb = new_glfbdev_renderbuffer(backBuffer, visual);
       _mesa_add_renderbuffer(&buf->glframebuffer, BUFFER_BACK_LEFT,
                              &backrb->Base);
    }
@@ -628,9 +644,6 @@
    buf->visual = visual;  /* ptr assignment */
    buf->size = size;
    buf->bytesPerPixel = visual->var.bits_per_pixel / 8;
-   frontrb->rowStride = visual->var.xres_virtual * buf->bytesPerPixel;
-   frontrb->bottom = (GLubyte *) frontrb->Base.Data
-      + (visual->var.yres_virtual - 1) * frontrb->rowStride;
 
    if (visual->glvisual.doubleBufferMode) {
       if (!backBuffer) {
@@ -643,14 +656,12 @@
          }
          backrb->mallocedBuffer = GL_TRUE;
       }
-      backrb->rowStride = frontrb->rowStride;
-      backrb->bottom = (GLubyte *) backrb->Base.Data
-         + (visual->var.yres_virtual - 1) * backrb->rowStride;
    }
+   /* this causes segfault:
    else {
       backrb->bottom = NULL;
       backrb->rowStride = 0;
-   }
+      }*/
 
    return buf;
 }
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Reply via email to