[prev in list] [next in list] [prev in thread] [next in thread] 

List:       helix-video-cvs
Subject:    [Video-cvs] sitelib/platform/mac CocoaSiteUtilities.h, 1.1.2.1,
From:       bobclark () helixcommunity ! org
Date:       2008-10-07 0:01:57
Message-ID: 200810070007.m9707vnB004687 () mailer ! progressive-comp ! com
[Download RAW message or body]

Update of /cvsroot/video/sitelib/platform/mac
In directory cvs01.internal.helixcommunity.org:/tmp/cvs-serv17198/platform/mac

Modified Files:
      Tag: hxclient_1_5_0_cayenne
	CocoaSiteUtilities.h CocoaSiteUtilities.mm macroot.cpp 
Log Message:
updates for RGB root site using opengl

Index: macroot.cpp
===================================================================
RCS file: /cvsroot/video/sitelib/platform/mac/macroot.cpp,v
retrieving revision 1.12.6.3
retrieving revision 1.12.6.4
diff -u -d -r1.12.6.3 -r1.12.6.4
--- macroot.cpp	29 Sep 2008 18:09:01 -0000	1.12.6.3
+++ macroot.cpp	7 Oct 2008 00:01:48 -0000	1.12.6.4
@@ -124,6 +124,7 @@
  , m_bInBlueBox(FALSE)
  , m_bAllowedToITBInBlueBox(TRUE)
  , m_ulLastFlushPortBufferTicks(0)
+ , m_pRGBSurfaceToken(NULL)
 {
     m_pVisRgnRects = new CHXSimpleList();
     
@@ -391,6 +392,12 @@
 	m_allocatedCompositionSize = m_compositionSize;
 	m_nCompositionPitch = (**m_RootGWorldPixMap[kThirtyTwoBitDepth]).rowBytes & 0x3fff;
 
+        if (HXWindowIsNSOpenGLView(m_pSite->m_pWindow))
+        {
+            m_nCompositionPitch = (r.right-r.left) * 4;
+            m_pRGBSurfaceToken = \
CocoaSiteOpenGLConstructRGB(GetNSOpenGLViewFromHXWindow(m_pSite->m_pWindow), \
m_pCompositionSurface, m_nCompositionPitch, r.right-r.left, r.bottom-r.top); +        \
} +        
 	m_boundsRect.left = r.left;
 	m_boundsRect.top = r.top;
 	m_boundsRect.right = r.right;
@@ -432,7 +439,7 @@
         
         if (HXWindowIsNSOpenGLView(m_pSite->m_pWindow))
         {
-            CocoaSiteOpenGLMinimalBlit((float)dst.left, (float)dst.top, \
(float)(dst.right-dst.left), (float)(dst.bottom-dst.top)); +            \
CocoaSiteOpenGLRGBBlit(m_pRGBSurfaceToken);  }
         
         GrafPtr windowPort = GetGrafPortFromHXWindow(m_pSite->m_pWindow);
@@ -1117,6 +1124,11 @@
 void
 CMacRootSurface::_PreFlightBlt(HXxRect& dst)
 {
+    if (HXWindowIsNSOpenGLView(m_pSite->m_pWindow))
+    {
+        return;
+    }
+    
     if (!m_bItsOKToDoAnInterruptBlit) return;
     
     m_pCompositionSurface = nil;

Index: CocoaSiteUtilities.mm
===================================================================
RCS file: /cvsroot/video/sitelib/platform/mac/Attic/CocoaSiteUtilities.mm,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -d -r1.1.2.1 -r1.1.2.2
--- CocoaSiteUtilities.mm	29 Sep 2008 18:09:01 -0000	1.1.2.1
+++ CocoaSiteUtilities.mm	7 Oct 2008 00:01:48 -0000	1.1.2.2
@@ -209,8 +209,97 @@
     }
 }
 
-void CocoaSiteOpenGLMinimalBlit(float left, float top, float width, float height)
+struct CocoaSiteOpenGLRGBInformation {
+    void* pRgbBuffer;
+    NSOpenGLView* pOpenGLView;
+    size_t rowBytes;
+    int width;
+    int height;
+    GLuint textureID;
+};
+
+void CocoaSiteOpenGLDestroyRGB(void* pRGBSurfaceToken)
 {
-    NSLog(@"macroot minimal blit to %f,%f size %f,%f", left,top,width,height);
+    CocoaSiteOpenGLRGBInformation* pInfo = \
(CocoaSiteOpenGLRGBInformation*)pRGBSurfaceToken; +    if (pInfo)
+    {
+        glDeleteTextures(1, &pInfo->textureID);
+    }
+    delete pInfo;
+}
+
+void* CocoaSiteOpenGLConstructRGB(void* pOpenGLView, void* pBuffer, int pitch, int \
width, int height) +{
+    CocoaSiteOpenGLRGBInformation* pInfo = new CocoaSiteOpenGLRGBInformation;
+
+    pInfo->pRgbBuffer = pBuffer;
+    pInfo->pOpenGLView = (NSOpenGLView*)pOpenGLView;
+    pInfo->rowBytes = pitch;
+    pInfo->width = width;
+    pInfo->height = height;
+    pInfo->textureID = 0;
+    
+    NSRect bounds = [pInfo->pOpenGLView bounds];
+    [[pInfo->pOpenGLView openGLContext] makeCurrentContext];
+    [[pInfo->pOpenGLView openGLContext] update];
+    
+    glGenTextures(1, &pInfo->textureID);
+    
+    glDisable(GL_TEXTURE_2D);
+    glEnable(GL_TEXTURE_RECTANGLE_EXT);
+    glBindTexture(GL_TEXTURE_RECTANGLE_EXT, pInfo->textureID);
+    
+    glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+    glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+    glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+    glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+    glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
+    
+    glTexImage2D(GL_TEXTURE_RECTANGLE_EXT, 0, GL_RGBA8, width, height, 0, GL_RGBA, \
GL_UNSIGNED_INT_8_8_8_8_REV, pBuffer); +    glTexSubImage2D(GL_TEXTURE_RECTANGLE_EXT, \
0, 0, 0, width, height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, pBuffer); +    
+    NSRect rect = [pInfo->pOpenGLView bounds];
+    glViewport(0, 0, (int) bounds.size.width, (int) bounds.size.height);
+
+    glMatrixMode(GL_PROJECTION);
+    glLoadIdentity();
+
+    glMatrixMode(GL_MODELVIEW);
+    glLoadIdentity(); 
+    
+    [[pInfo->pOpenGLView openGLContext] flushBuffer];
+    
+    return (void*)pInfo;
+}
+
+void CocoaSiteOpenGLRGBBlit(void* pRGBSurfaceToken)
+{
+    CocoaSiteOpenGLRGBInformation* pInfo = \
(CocoaSiteOpenGLRGBInformation*)pRGBSurfaceToken; +    if (pInfo)
+    {
+        NSRect bounds = [pInfo->pOpenGLView bounds];
+        [[pInfo->pOpenGLView openGLContext] makeCurrentContext];
+        [[pInfo->pOpenGLView openGLContext] update];
+        
+        glBindTexture(GL_TEXTURE_RECTANGLE_EXT, pInfo->textureID);
+        glTexSubImage2D(GL_TEXTURE_RECTANGLE_EXT, 0, 0, 0, pInfo->width, \
pInfo->height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, pInfo->pRgbBuffer); +
+        glBegin(GL_QUADS);
+                glTexCoord2f(0.0f, 0.0f);
+                glVertex2f(-1.0f, 1.0f);
+                
+                glTexCoord2f(0.0f, (float)pInfo->height);
+                glVertex2f(-1.0f, -1.0f);
+                
+                glTexCoord2f((float)pInfo->width, (float)pInfo->height);
+                glVertex2f(1.0f, -1.0f);
+                
+                glTexCoord2f((float)pInfo->width, 0.0f);
+                glVertex2f(1.0f, 1.0f);
+        glEnd();
+        
+        glFlush();
+        
+    }
 }
 

Index: CocoaSiteUtilities.h
===================================================================
RCS file: /cvsroot/video/sitelib/platform/mac/Attic/CocoaSiteUtilities.h,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -d -r1.1.2.1 -r1.1.2.2
--- CocoaSiteUtilities.h	29 Sep 2008 18:09:01 -0000	1.1.2.1
+++ CocoaSiteUtilities.h	7 Oct 2008 00:01:48 -0000	1.1.2.2
@@ -58,4 +58,7 @@
 void CocoaSiteOpenGLDestroyOverlay(void* pOverlayToken);
 bool CocoaSiteOpenGLHasAnythingChanged(void* pOverlayToken, int width, int height);
 void CocoaSiteOpenGLGetSurfaceBufferAndPitch(void* pOverlayToken, unsigned char** \
                ppOutYuvBuffer, long int* pnOutBufferPitch);
-void CocoaSiteOpenGLMinimalBlit(float left, float top, float width, float height);
+
+void* CocoaSiteOpenGLConstructRGB(void* pOpenGLView, void* pBuffer, int pitch, int \
width, int height); +void CocoaSiteOpenGLDestroyRGB(void* pRGBSurfaceToken);
+void CocoaSiteOpenGLRGBBlit(void* pRGBSurfaceToken);


_______________________________________________
Video-cvs mailing list
Video-cvs@helixcommunity.org
http://lists.helixcommunity.org/mailman/listinfo/video-cvs


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic