[haiku-commits] haiku: hrev43944 - src/add-ons/opengl/swrast

  • From: kallisti5@xxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 3 Apr 2012 19:17:11 +0200 (CEST)

hrev43944 adds 2 changesets to branch 'master'
old head: c6799d8ae170044c80d5bd9284cf43d42f7ef394
new head: 608826f5785ede6ae7e01301c0b9896561a6dc31

----------------------------------------------------------------------------

98c974a: swrast: Add allocated renderbuffer option
  
  * Double buffering no longer crashes, however
    it still doesn't function.

608826f: swrast: Remove fNewWidth/fNewHeight

                          [ Alexander von Gluck IV <kallisti5@xxxxxxxxxxx> ]

----------------------------------------------------------------------------

2 files changed, 67 insertions(+), 18 deletions(-)
src/add-ons/opengl/swrast/MesaSoftwareRenderer.cpp |   77 +++++++++++++---
src/add-ons/opengl/swrast/MesaSoftwareRenderer.h   |    8 +-

############################################################################

Commit:      98c974a2c4a783063438a3d461ad6be35ac0f95d
URL:         http://cgit.haiku-os.org/haiku/commit/?id=98c974a
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Tue Apr  3 16:24:51 2012 UTC

swrast: Add allocated renderbuffer option

* Double buffering no longer crashes, however
  it still doesn't function.

----------------------------------------------------------------------------

diff --git a/src/add-ons/opengl/swrast/MesaSoftwareRenderer.cpp 
b/src/add-ons/opengl/swrast/MesaSoftwareRenderer.cpp
index 935876b..9fad2ee 100644
--- a/src/add-ons/opengl/swrast/MesaSoftwareRenderer.cpp
+++ b/src/add-ons/opengl/swrast/MesaSoftwareRenderer.cpp
@@ -516,12 +516,48 @@ MesaSoftwareRenderer::_RenderBufferStorage(gl_context* 
ctx,
        render->Height = height;
 
        struct swrast_renderbuffer *swRenderBuffer = 
swrast_renderbuffer(render);
+
        swRenderBuffer->RowStride = width * 
_mesa_get_format_bytes(render->Format);
 
        return GL_TRUE;
 }
 
 
+GLboolean
+MesaSoftwareRenderer::_RenderBufferStorageMalloc(gl_context* ctx,
+       struct gl_renderbuffer* render, GLenum internalFormat,
+       GLuint width, GLuint height)
+{
+       CALLED();
+
+       render->Width = width;
+       render->Height = height;
+
+       struct swrast_renderbuffer *swRenderBuffer = 
swrast_renderbuffer(render);
+
+       if (swRenderBuffer != NULL) {
+               free(swRenderBuffer->Buffer);
+               swRenderBuffer->RowStride
+                       = width * _mesa_get_format_bytes(render->Format);
+
+               uint32 size = swRenderBuffer->RowStride * height;
+               TRACE("%s: Allocate %" B_PRIu32 " bytes for RenderBuffer\n",
+                       __func__, size);
+               swRenderBuffer->Buffer = (GLubyte*)malloc(size);
+               if (!swRenderBuffer->Buffer) {
+                       ERROR("%s: Memory allocation failure!\n", __func__);
+                       return GL_FALSE;
+               }
+       } else {
+               ERROR("%s: Couldn't obtain software renderbuffer!\n",
+                       __func__);
+               return GL_FALSE;
+       }
+
+       return GL_TRUE;
+}
+
+
 void
 MesaSoftwareRenderer::_Flush(gl_context* ctx)
 {
@@ -553,7 +589,11 @@ MesaSoftwareRenderer::_NewRenderBuffer(bool front)
        swRenderBuffer->Base.ClassID = HAIKU_SWRAST_RENDERBUFFER_CLASS;
        swRenderBuffer->Base.RefCount = 1;
        swRenderBuffer->Base.Delete = _RenderBufferDelete;
-       swRenderBuffer->Base.AllocStorage = _RenderBufferStorage;
+
+       if (!front)
+               swRenderBuffer->Base.AllocStorage = _RenderBufferStorageMalloc;
+       else
+               swRenderBuffer->Base.AllocStorage = _RenderBufferStorage;
 
        if (_SetupRenderBuffer(&swRenderBuffer->Base, fColorSpace) != B_OK) {
                free(swRenderBuffer);
@@ -633,6 +673,12 @@ void
 MesaSoftwareRenderer::_RenderBufferDelete(struct gl_renderbuffer* rb)
 {
        CALLED();
+       if (rb != NULL) {
+               struct swrast_renderbuffer *swRenderBuffer
+                       = swrast_renderbuffer(rb);
+               if (swRenderBuffer != NULL)
+                       free(swRenderBuffer->Buffer);
+       }
        free(rb);
 }
 
diff --git a/src/add-ons/opengl/swrast/MesaSoftwareRenderer.h 
b/src/add-ons/opengl/swrast/MesaSoftwareRenderer.h
index 3617ad1..3086f53 100644
--- a/src/add-ons/opengl/swrast/MesaSoftwareRenderer.h
+++ b/src/add-ons/opengl/swrast/MesaSoftwareRenderer.h
@@ -60,6 +60,10 @@ private:
                                                                struct 
gl_renderbuffer* render,
                                                                GLenum 
internalFormat,
                                                                GLuint width, 
GLuint height);
+       static  GLboolean               _RenderBufferStorageMalloc(gl_context* 
ctx,
+                                                               struct 
gl_renderbuffer* render,
+                                                               GLenum 
internalFormat,
+                                                               GLuint width, 
GLuint height);
        static  void                    _RenderBufferMap(gl_context *ctx,
                                                                struct 
gl_renderbuffer *rb,
                                                                GLuint x, 
GLuint y, GLuint w, GLuint h,

############################################################################

Revision:    hrev43944
Commit:      608826f5785ede6ae7e01301c0b9896561a6dc31
URL:         http://cgit.haiku-os.org/haiku/commit/?id=608826f
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Tue Apr  3 17:15:38 2012 UTC

swrast: Remove fNewWidth/fNewHeight

----------------------------------------------------------------------------

diff --git a/src/add-ons/opengl/swrast/MesaSoftwareRenderer.cpp 
b/src/add-ons/opengl/swrast/MesaSoftwareRenderer.cpp
index 9fad2ee..e15f44d 100644
--- a/src/add-ons/opengl/swrast/MesaSoftwareRenderer.cpp
+++ b/src/add-ons/opengl/swrast/MesaSoftwareRenderer.cpp
@@ -179,8 +179,8 @@ MesaSoftwareRenderer::MesaSoftwareRenderer(BGLView* view, 
ulong options,
                fVisual->haveAccumBuffer, alphaFlag, GL_FALSE);
 
        BRect bounds = view->Bounds();
-       fWidth = fNewWidth = (GLint)bounds.Width();
-       fHeight = fNewHeight = (GLint)bounds.Height();
+       fWidth = (GLint)bounds.Width();
+       fHeight = (GLint)bounds.Height();
 
        // some stupid applications (Quake2) don't even think about calling 
LockGL()
        // before using glGetString and its glGet*() friends...
@@ -221,11 +221,14 @@ MesaSoftwareRenderer::LockGL()
 
        color_space colorSpace = BScreen(GLView()->Window()).ColorSpace();
 
+       GLuint width = fWidth;
+       GLuint height = fHeight;
+
        BAutolock lock(fInfoLocker);
        if (fDirectModeEnabled && fInfo != NULL) {
-               fNewWidth = fInfo->window_bounds.right
+               width = fInfo->window_bounds.right
                        - fInfo->window_bounds.left + 1;
-               fNewHeight = fInfo->window_bounds.bottom
+               height = fInfo->window_bounds.bottom
                        - fInfo->window_bounds.top + 1;
        }
 
@@ -236,7 +239,7 @@ MesaSoftwareRenderer::LockGL()
                        _SetupRenderBuffer(&fBackRenderBuffer->Base, 
fColorSpace);
        }
 
-       _CheckResize();
+       _CheckResize(width, height);
 }
 
 
@@ -396,25 +399,23 @@ void
 MesaSoftwareRenderer::FrameResized(float width, float height)
 {
        BAutolock lock(fInfoLocker);
-       fNewWidth = (GLuint)width;
-       fNewHeight = (GLuint)height;
-       _CheckResize();
+       _CheckResize((GLuint)width, (GLuint)height);
 }
 
 
 void
-MesaSoftwareRenderer::_CheckResize()
+MesaSoftwareRenderer::_CheckResize(GLuint newWidth, GLuint newHeight)
 {
        CALLED();
 
-       if (fBitmap && fNewWidth == fWidth
-               && fNewHeight == fHeight) {
+       if (fBitmap && newWidth == fWidth
+               && newHeight == fHeight) {
                return;
        }
 
-       fHeight = fNewHeight;
-       fWidth = fNewWidth;
-       _mesa_resize_framebuffer(fContext, fFrameBuffer, fWidth, fHeight);
+       _mesa_resize_framebuffer(fContext, fFrameBuffer, newWidth, newHeight);
+       fHeight = newHeight;
+       fWidth = newWidth;
 
        _AllocateBitmap();
 }
diff --git a/src/add-ons/opengl/swrast/MesaSoftwareRenderer.h 
b/src/add-ons/opengl/swrast/MesaSoftwareRenderer.h
index 3086f53..efefad0 100644
--- a/src/add-ons/opengl/swrast/MesaSoftwareRenderer.h
+++ b/src/add-ons/opengl/swrast/MesaSoftwareRenderer.h
@@ -46,7 +46,7 @@ public:
 private:
        static  void                    _Error(gl_context* ctx);
        static  const GLubyte*  _GetString(gl_context* ctx, GLenum name);
-                       void                    _CheckResize();
+                       void                    _CheckResize(GLuint newWidth, 
GLuint newHeight);
        static  void                    _UpdateState(gl_context* ctx, GLuint 
newState);
        static  void                    _Flush(gl_context *ctx);
 
@@ -88,8 +88,6 @@ private:
 
                        GLuint                  fWidth;
                        GLuint                  fHeight;
-                       GLuint                  fNewWidth;
-                       GLuint                  fNewHeight;
                        color_space             fColorSpace;
 
                        void*                   fRowAddr[SWRAST_MAX_HEIGHT];


Other related posts:

  • » [haiku-commits] haiku: hrev43944 - src/add-ons/opengl/swrast - kallisti5