aboutsummaryrefslogtreecommitdiffstats
path: root/src/native
diff options
context:
space:
mode:
authorKenneth Russel <[email protected]>2004-04-29 21:50:38 +0000
committerKenneth Russel <[email protected]>2004-04-29 21:50:38 +0000
commitbe5d9ba85bad4cf845778d1bdcc4361d864a4604 (patch)
treebc0d0083211eff4c12a745eb48ec7efc8d31020f /src/native
parent595577662881914de98204d0ef43e329e365d021 (diff)
Fixed Issue 79: PBuffers on macintosh fail to glCopyTexSubImage2D
git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/svn-server-sync/jogl/trunk@128 232f8b59-042b-4e1e-8c03-345bb8c30851
Diffstat (limited to 'src/native')
-rw-r--r--src/native/jogl/MacOSXWindowSystemInterface.m107
1 files changed, 15 insertions, 92 deletions
diff --git a/src/native/jogl/MacOSXWindowSystemInterface.m b/src/native/jogl/MacOSXWindowSystemInterface.m
index 7d2f317c9..0f7c5aa7e 100644
--- a/src/native/jogl/MacOSXWindowSystemInterface.m
+++ b/src/native/jogl/MacOSXWindowSystemInterface.m
@@ -155,54 +155,18 @@ void updateContextUnregister(void* context, void* view, void* updater)
[contextUpdater release];
}
-#ifndef USE_GL_TEXTURE_RECTANGLE_EXT
-static int getNextPowerOf2(int number)
+void* createPBuffer(int renderTarget, int width, int height)
{
- if (((number-1) & number) == 0)
- {
- //ex: 8 -> 0b1000; 8-1=7 -> 0b0111; 0b1000&0b0111 == 0
- return number;
- }
- int power = 0;
- while (number > 0)
- {
- number = number>>1;
- power++;
- }
- return (1<<power);
-}
-#endif
+ // fprintf(stderr, "createPBuffer renderTarget=%d width=%d height=%d\n", renderTarget, width, height);
-void* createPBuffer(void* context, int width, int height)
-{
-///fprintf(stderr, "createPBuffer context=%p width=%d height=%d\n", context, width, height);
-#ifdef AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER)
- NSOpenGLContext *nsContext = (NSOpenGLContext*)context;
-
-#ifdef USE_GL_TEXTURE_RECTANGLE_EXT
- unsigned long taget = GL_TEXTURE_RECTANGLE_EXT;
-#else
- unsigned long taget = GL_TEXTURE_2D; // texture size must be a multiple of power of 2
-
- width = getNextPowerOf2(width);
- height = getNextPowerOf2(height);
-#endif
-
- NSOpenGLPixelBuffer* pBuffer = [[NSOpenGLPixelBuffer alloc] initWithTextureTarget:taget textureInternalFormat:GL_RGBA textureMaxMipMapLevel:0 pixelsWide:width pixelsHigh:height];
-
- [nsContext setPixelBuffer:pBuffer cubeMapFace:0 mipMapLevel:0 currentVirtualScreen:0];
- [nsContext update];
-
- return pBuffer;
-#else
- return NULL;
-#endif
+ NSOpenGLPixelBuffer* pBuffer = [[NSOpenGLPixelBuffer alloc] initWithTextureTarget:renderTarget textureInternalFormat:GL_RGBA textureMaxMipMapLevel:0 pixelsWide:width pixelsHigh:height];
+
+ return pBuffer;
}
Bool destroyPBuffer(void* context, void* buffer)
{
//fprintf(stderr, "destroyPBuffer context=%p, buffer=%p\n", context, buffer);
-#ifdef AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER)
NSOpenGLContext *nsContext = (NSOpenGLContext*)context;
NSOpenGLPixelBuffer *pBuffer = (NSOpenGLPixelBuffer*)buffer;
@@ -213,61 +177,20 @@ Bool destroyPBuffer(void* context, void* buffer)
[pBuffer release];
return true;
-#else
- return false;
-#endif
}
-int bindPBuffer(void* context, void* buffer)
-{
-//fprintf(stderr, "bindPBuffer context=%p, buffer=%p\n", context, buffer);
-#ifdef AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER)
- NSOpenGLContext *nsContext = (NSOpenGLContext*)context;
- NSOpenGLPixelBuffer *pBuffer = (NSOpenGLPixelBuffer*)buffer;
-
- glPushMatrix();
- glPushAttrib(GL_CURRENT_BIT|GL_ENABLE_BIT|GL_TEXTURE_BIT|GL_TRANSFORM_BIT);
-
- GLuint pBufferTextureName;
- glGenTextures(1, &pBufferTextureName);
-
- glBindTexture([pBuffer textureTarget], pBufferTextureName);
-
- glTexParameteri([pBuffer textureTarget], GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri([pBuffer textureTarget], GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-
- [nsContext setTextureImageToPixelBuffer:pBuffer colorBuffer:GL_FRONT_LEFT];
-
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
- glEnable([pBuffer textureTarget]);
-
-#ifdef USE_GL_TEXTURE_RECTANGLE_EXT
- //GLint matrixMode;
- //glGetIntegerv(GL_MATRIX_MODE, &matrixMode);
- glMatrixMode(GL_TEXTURE);
- glLoadIdentity();
- glScalef([pBuffer pixelsWide], [pBuffer pixelsHigh], 1.0f); // GL_TEXTURE_RECTANGLE_EXT wants texture coordinates in texture image space (not 0 to 1)
- //glMatrixMode(matrixMode);
-#endif
-
- return pBufferTextureName;
-#else
- return 0;
-#endif
+void setContextPBuffer(void* context, void* buffer) {
+ NSOpenGLContext *nsContext = (NSOpenGLContext*)context;
+ NSOpenGLPixelBuffer *pBuffer = (NSOpenGLPixelBuffer*)buffer;
+
+ [nsContext setPixelBuffer: pBuffer cubeMapFace: 0 mipMapLevel: 0 currentVirtualScreen: [nsContext currentVirtualScreen]];
}
-void unbindPBuffer(void* context, void* buffer, int texture)
-{
-//fprintf(stderr, "unbindPBuffer context=%p, buffer=%p\n", context, buffer);
-#ifdef AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER)
- NSOpenGLPixelBuffer *pBuffer = (NSOpenGLPixelBuffer*)buffer;
- GLuint pBufferTextureName = (GLuint)texture;
-
- glDeleteTextures(1, &pBufferTextureName);
-
- glPopAttrib();
- glPopMatrix();
-#endif
+void setContextTextureImageToPBuffer(void* context, void* buffer, int colorBuffer) {
+ NSOpenGLContext *nsContext = (NSOpenGLContext*)context;
+ NSOpenGLPixelBuffer *pBuffer = (NSOpenGLPixelBuffer*)buffer;
+
+ [nsContext setTextureImageToPixelBuffer: pBuffer colorBuffer: (unsigned long) colorBuffer];
}
#include <mach-o/dyld.h>