[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