Build fixes for GLES1, GLES2 and GL3

This commit is contained in:
Robert Osfield 2010-10-08 17:13:59 +00:00
parent 9984281553
commit 078b21fa1e
6 changed files with 100 additions and 11 deletions

View File

@ -40,7 +40,6 @@ IF(DYNAMIC_OPENSCENEGRAPH)
ADD_SUBDIRECTORY(osgfadetext)
ADD_SUBDIRECTORY(osgfont)
ADD_SUBDIRECTORY(osgforest)
ADD_SUBDIRECTORY(osgfpdepth)
ADD_SUBDIRECTORY(osgfxbrowser)
ADD_SUBDIRECTORY(osgoutline)
ADD_SUBDIRECTORY(osggameoflife)
@ -151,6 +150,10 @@ IF(DYNAMIC_OPENSCENEGRAPH)
ADD_SUBDIRECTORY(osgmemorytest)
ENDIF()
IF(NOT OSG_GL3_AVAILABLE)
ADD_SUBDIRECTORY(osgfpdepth)
ENDIF()
IF(NOT OSG_GLES1_AVAILABLE AND NOT OSG_GLES2_AVAILABLE AND NOT OSG_GL3_AVAILABLE)
ADD_SUBDIRECTORY(osgscreencapture)
ADD_SUBDIRECTORY(osgmotionblur)

View File

@ -14,10 +14,11 @@
#ifndef OSGVIEWER_GRAPHICSWINDOWQT
#define OSGVIEWER_GRAPHICSWINDOWQT
#include <osgViewer/GraphicsWindow>
#include <QtGui/QWidget>
#include <QtGui/QInputEvent>
#include <QtOpenGL/QGLWidget>
#include <osgViewer/GraphicsWindow>
class GraphWidget : public QGLWidget
{

View File

@ -29,13 +29,22 @@
*/
#include <osg/GLU>
#include <osg/FrameBufferObject>
// #include "gluos.h"
// define GL values not provided by some GL headers.
#ifndef GL_TABLE_TOO_LARGE
#define GL_TABLE_TOO_LARGE 0x8031
#endif
#ifndef GL_STACK_OVERFLOW
#define GL_STACK_OVERFLOW 0x0503
#endif
#ifndef GL_STACK_UNDERFLOW
#define GL_STACK_UNDERFLOW 0x0504
#endif
namespace osg
{
@ -116,9 +125,7 @@ static const struct token_string Errors[] = {
{ GL_STACK_UNDERFLOW, "stack underflow" },
{ GL_OUT_OF_MEMORY, "out of memory" },
{ GL_TABLE_TOO_LARGE, "table too large" },
#ifdef GL_EXT_framebuffer_object
{ GL_INVALID_FRAMEBUFFER_OPERATION_EXT, "invalid framebuffer operation" },
#endif
/* GLU */
{ GLU_INVALID_ENUM, "invalid enumerant" },
{ GLU_INVALID_VALUE, "invalid value" },

View File

@ -266,23 +266,29 @@ PixelStorageModes::PixelStorageModes()
void PixelStorageModes::retrieveStoreModes()
{
glGetIntegerv(GL_UNPACK_ALIGNMENT, &unpack_alignment);
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
glGetIntegerv(GL_UNPACK_ROW_LENGTH, &unpack_row_length);
glGetIntegerv(GL_UNPACK_SKIP_ROWS, &unpack_skip_rows);
glGetIntegerv(GL_UNPACK_SKIP_PIXELS, &unpack_skip_pixels);
glGetIntegerv(GL_UNPACK_LSB_FIRST, &unpack_lsb_first);
glGetIntegerv(GL_UNPACK_SWAP_BYTES, &unpack_swap_bytes);
#endif
glGetIntegerv(GL_PACK_ALIGNMENT, &pack_alignment);
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
glGetIntegerv(GL_PACK_ROW_LENGTH, &pack_row_length);
glGetIntegerv(GL_PACK_SKIP_ROWS, &pack_skip_rows);
glGetIntegerv(GL_PACK_SKIP_PIXELS, &pack_skip_pixels);
glGetIntegerv(GL_PACK_LSB_FIRST, &pack_lsb_first);
glGetIntegerv(GL_PACK_SWAP_BYTES, &pack_swap_bytes);
#endif
}
void PixelStorageModes::retrieveStoreModes3D()
{
glGetIntegerv(GL_UNPACK_ALIGNMENT, &unpack_alignment);
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
glGetIntegerv(GL_UNPACK_ROW_LENGTH, &unpack_row_length);
glGetIntegerv(GL_UNPACK_SKIP_ROWS, &unpack_skip_rows);
glGetIntegerv(GL_UNPACK_SKIP_PIXELS, &unpack_skip_pixels);
@ -290,8 +296,10 @@ void PixelStorageModes::retrieveStoreModes3D()
glGetIntegerv(GL_UNPACK_SWAP_BYTES, &unpack_swap_bytes);
glGetIntegerv(GL_UNPACK_SKIP_IMAGES, &unpack_skip_images);
glGetIntegerv(GL_UNPACK_IMAGE_HEIGHT, &unpack_image_height);
#endif
glGetIntegerv(GL_PACK_ALIGNMENT, &pack_alignment);
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
glGetIntegerv(GL_PACK_ROW_LENGTH, &pack_row_length);
glGetIntegerv(GL_PACK_SKIP_ROWS, &pack_skip_rows);
glGetIntegerv(GL_PACK_SKIP_PIXELS, &pack_skip_pixels);
@ -299,6 +307,7 @@ void PixelStorageModes::retrieveStoreModes3D()
glGetIntegerv(GL_PACK_SWAP_BYTES, &pack_swap_bytes);
glGetIntegerv(GL_PACK_SKIP_IMAGES, &pack_skip_images);
glGetIntegerv(GL_PACK_IMAGE_HEIGHT, &pack_image_height);
#endif
}
static int computeLog(GLuint value)
@ -3428,6 +3437,7 @@ static void closestFit(GLenum target, GLint width, GLint height,
GLint internalFormat, GLenum format, GLenum type,
GLint *newWidth, GLint *newHeight)
{
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
/* Use proxy textures if OpenGL version is >= 1.1 */
if ( (strtod((const char *)glGetString(GL_VERSION),NULL) >= 1.1)
) {
@ -3482,7 +3492,9 @@ static void closestFit(GLenum target, GLint width, GLint height,
* that we will never be aware of when this happens
* since it will silently branch out.
*/
goto noProxyTextures;
*newWidth= 0;
*newHeight= 0;
return;
}
widthPowerOf2= widthAtLevelOne;
heightPowerOf2= heightAtLevelOne;
@ -3496,11 +3508,11 @@ static void closestFit(GLenum target, GLint width, GLint height,
*newHeight= heightPowerOf2;
/*printf("Proxy Textures\n");*/
} /* if gluCheckExtension() */
else { /* no texture extension, so do this instead */
else
#endif // end of #if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
{ /* no texture extension, so do this instead */
GLint maxsize;
noProxyTextures:
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxsize);
/* clamp user's texture sizes to maximum sizes, if necessary */
*newWidth = nearestPower(width);
@ -3579,6 +3591,7 @@ int gluBuild1DMipmapLevelsCore(GLenum target, GLint internalFormat,
GLint userLevel, GLint baseLevel,GLint maxLevel,
const void *data)
{
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
GLint newwidth;
GLint level, levels;
GLushort *newImage;
@ -3610,6 +3623,7 @@ int gluBuild1DMipmapLevelsCore(GLenum target, GLint internalFormat,
data, newImage);
cmpts = elements_per_group(format,type);
glPixelStorei(GL_UNPACK_ALIGNMENT, 2);
glPixelStorei(GL_UNPACK_SKIP_ROWS, 0);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0);
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
@ -3655,6 +3669,7 @@ int gluBuild1DMipmapLevelsCore(GLenum target, GLint internalFormat,
if (newwidth > 1) newwidth /= 2;
}
glPixelStorei(GL_UNPACK_ALIGNMENT, psm.unpack_alignment);
glPixelStorei(GL_UNPACK_SKIP_ROWS, psm.unpack_skip_rows);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, psm.unpack_skip_pixels);
glPixelStorei(GL_UNPACK_ROW_LENGTH, psm.unpack_row_length);
@ -3665,6 +3680,10 @@ int gluBuild1DMipmapLevelsCore(GLenum target, GLint internalFormat,
free((GLbyte *) otherImage);
}
return 0;
#else
OSG_NOTICE<<"gluBuild1DMipmapLevelsCore() not implemented for GLES."<<std::endl;
return 0;
#endif
}
GLint GLAPIENTRY
@ -3766,6 +3785,7 @@ static int bitmapBuild2DMipmaps(GLenum target, GLint internalFormat,
cmpts = elements_per_group(format,type);
glPixelStorei(GL_UNPACK_ALIGNMENT, 2);
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
glPixelStorei(GL_UNPACK_SKIP_ROWS, 0);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0);
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
@ -3773,6 +3793,7 @@ static int bitmapBuild2DMipmaps(GLenum target, GLint internalFormat,
** If swap_bytes was set, swapping occurred in fill_image.
*/
glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE);
#endif
for (level = 0; level <= levels; level++) {
if (newImage_width == newwidth && newImage_height == newheight) { /* Use newImage for this level */
@ -3786,10 +3807,12 @@ static int bitmapBuild2DMipmaps(GLenum target, GLint internalFormat,
otherImage = (GLushort *) malloc(memreq);
if (otherImage == NULL) {
glPixelStorei(GL_UNPACK_ALIGNMENT, psm.unpack_alignment);
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
glPixelStorei(GL_UNPACK_SKIP_ROWS, psm.unpack_skip_rows);
glPixelStorei(GL_UNPACK_SKIP_PIXELS,psm.unpack_skip_pixels);
glPixelStorei(GL_UNPACK_ROW_LENGTH, psm.unpack_row_length);
glPixelStorei(GL_UNPACK_SWAP_BYTES, psm.unpack_swap_bytes);
#endif
free(newImage);
return GLU_OUT_OF_MEMORY;
}
@ -3811,10 +3834,13 @@ static int bitmapBuild2DMipmaps(GLenum target, GLint internalFormat,
if (newheight > 1) newheight /= 2;
}
glPixelStorei(GL_UNPACK_ALIGNMENT, psm.unpack_alignment);
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
glPixelStorei(GL_UNPACK_SKIP_ROWS, psm.unpack_skip_rows);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, psm.unpack_skip_pixels);
glPixelStorei(GL_UNPACK_ROW_LENGTH, psm.unpack_row_length);
glPixelStorei(GL_UNPACK_SWAP_BYTES, psm.unpack_swap_bytes);
#endif
free((GLbyte *) newImage);
if (otherImage) {
@ -3887,9 +3913,11 @@ static int gluBuild2DMipmapLevelsCore(GLenum target, GLint internalFormat,
usersImage = (const GLubyte *) data + psm.unpack_skip_rows * rowsize +
psm.unpack_skip_pixels * group_size;
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
glPixelStorei(GL_UNPACK_SKIP_ROWS, 0);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0);
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
#endif
level = userLevel;
@ -3897,18 +3925,25 @@ static int gluBuild2DMipmapLevelsCore(GLenum target, GLint internalFormat,
if (width == newwidth && height == newheight) {
/* Use usersImage for level userLevel */
if (baseLevel <= level && level <= maxLevel) {
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
glPixelStorei(GL_UNPACK_ROW_LENGTH, psm.unpack_row_length);
#endif
glTexImage2D(target, level, internalFormat, width,
height, 0, format, type,
usersImage);
}
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
#endif
if(levels == 0) { /* we're done. clean up and return */
glPixelStorei(GL_UNPACK_ALIGNMENT, psm.unpack_alignment);
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
glPixelStorei(GL_UNPACK_SKIP_ROWS, psm.unpack_skip_rows);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, psm.unpack_skip_pixels);
glPixelStorei(GL_UNPACK_ROW_LENGTH, psm.unpack_row_length);
glPixelStorei(GL_UNPACK_SWAP_BYTES, psm.unpack_swap_bytes);
#endif
return 0;
}
{
@ -3966,10 +4001,12 @@ static int gluBuild2DMipmapLevelsCore(GLenum target, GLint internalFormat,
}
if (dstImage == NULL) {
glPixelStorei(GL_UNPACK_ALIGNMENT, psm.unpack_alignment);
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
glPixelStorei(GL_UNPACK_SKIP_ROWS, psm.unpack_skip_rows);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, psm.unpack_skip_pixels);
glPixelStorei(GL_UNPACK_ROW_LENGTH, psm.unpack_row_length);
glPixelStorei(GL_UNPACK_SWAP_BYTES, psm.unpack_swap_bytes);
#endif
return GLU_OUT_OF_MEMORY;
}
else
@ -4131,10 +4168,12 @@ static int gluBuild2DMipmapLevelsCore(GLenum target, GLint internalFormat,
}
if (dstImage == NULL) {
glPixelStorei(GL_UNPACK_ALIGNMENT, psm.unpack_alignment);
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
glPixelStorei(GL_UNPACK_SKIP_ROWS, psm.unpack_skip_rows);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, psm.unpack_skip_pixels);
glPixelStorei(GL_UNPACK_ROW_LENGTH, psm.unpack_row_length);
glPixelStorei(GL_UNPACK_SWAP_BYTES, psm.unpack_swap_bytes);
#endif
free(srcImage);
return GLU_OUT_OF_MEMORY;
}
@ -4188,10 +4227,12 @@ static int gluBuild2DMipmapLevelsCore(GLenum target, GLint internalFormat,
if (dstImage == NULL) {
glPixelStorei(GL_UNPACK_ALIGNMENT, psm.unpack_alignment);
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
glPixelStorei(GL_UNPACK_SKIP_ROWS, psm.unpack_skip_rows);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, psm.unpack_skip_pixels);
glPixelStorei(GL_UNPACK_ROW_LENGTH, psm.unpack_row_length);
glPixelStorei(GL_UNPACK_SWAP_BYTES, psm.unpack_swap_bytes);
#endif
return GLU_OUT_OF_MEMORY;
}
@ -4374,10 +4415,12 @@ static int gluBuild2DMipmapLevelsCore(GLenum target, GLint internalFormat,
}
if (dstImage == NULL) {
glPixelStorei(GL_UNPACK_ALIGNMENT, psm.unpack_alignment);
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
glPixelStorei(GL_UNPACK_SKIP_ROWS, psm.unpack_skip_rows);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, psm.unpack_skip_pixels);
glPixelStorei(GL_UNPACK_ROW_LENGTH, psm.unpack_row_length);
glPixelStorei(GL_UNPACK_SWAP_BYTES, psm.unpack_swap_bytes);
#endif
free(srcImage);
return GLU_OUT_OF_MEMORY;
}
@ -4386,7 +4429,10 @@ static int gluBuild2DMipmapLevelsCore(GLenum target, GLint internalFormat,
level = userLevel;
}
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE);
#endif
if (baseLevel <= level && level <= maxLevel) {
glTexImage2D(target, level, internalFormat, newwidth, newheight, 0,
format, type, (void *)srcImage);
@ -4533,10 +4579,12 @@ static int gluBuild2DMipmapLevelsCore(GLenum target, GLint internalFormat,
if (newMipmapImage == NULL) {
/* out of memory so return */
glPixelStorei(GL_UNPACK_ALIGNMENT, psm.unpack_alignment);
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
glPixelStorei(GL_UNPACK_SKIP_ROWS, psm.unpack_skip_rows);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, psm.unpack_skip_pixels);
glPixelStorei(GL_UNPACK_ROW_LENGTH, psm.unpack_row_length);
glPixelStorei(GL_UNPACK_SWAP_BYTES, psm.unpack_swap_bytes);
#endif
return GLU_OUT_OF_MEMORY;
}
@ -4564,10 +4612,13 @@ static int gluBuild2DMipmapLevelsCore(GLenum target, GLint internalFormat,
}
} /* for level */
glPixelStorei(GL_UNPACK_ALIGNMENT, psm.unpack_alignment);
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
glPixelStorei(GL_UNPACK_SKIP_ROWS, psm.unpack_skip_rows);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, psm.unpack_skip_pixels);
glPixelStorei(GL_UNPACK_ROW_LENGTH, psm.unpack_row_length);
glPixelStorei(GL_UNPACK_SWAP_BYTES, psm.unpack_swap_bytes);
#endif
free(srcImage); /*if you get to here, a srcImage has always been malloc'ed*/
if (dstImage) { /* if it's non-rectangular and only 1 level */
@ -7379,6 +7430,7 @@ static void closestFit3D(GLTexImage3DProc gluTexImage3D,
GLint internalFormat, GLenum format, GLenum type,
GLint *newWidth, GLint *newHeight, GLint *newDepth)
{
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
GLint widthPowerOf2= nearestPower(width);
GLint heightPowerOf2= nearestPower(height);
GLint depthPowerOf2= nearestPower(depth);
@ -7427,6 +7479,12 @@ static void closestFit3D(GLTexImage3DProc gluTexImage3D,
*newHeight= heightPowerOf2;
*newDepth= depthPowerOf2;
/*printf("Proxy Textures\n");*/
#else
// GLES1 & GLES2
*newWidth= nearestPower(width);
*newHeight= nearestPower(height);
*newDepth= nearestPower(depth);
#endif
} /* closestFit3D() */
static void halveImagePackedPixelSlice(int components,
@ -7763,11 +7821,13 @@ static int gluBuild3DMipmapLevelsCore(GLTexImage3DProc gluTexImage3D,
/* 3dstuff */
psm.unpack_skip_images * imageSize;
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
glPixelStorei(GL_UNPACK_SKIP_ROWS, 0);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0);
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
glPixelStorei(GL_UNPACK_SKIP_IMAGES, 0);
glPixelStorei(GL_UNPACK_IMAGE_HEIGHT, 0);
#endif
level = userLevel;
@ -7780,12 +7840,14 @@ static int gluBuild3DMipmapLevelsCore(GLTexImage3DProc gluTexImage3D,
}
if(levels == 0) { /* we're done. clean up and return */
glPixelStorei(GL_UNPACK_ALIGNMENT, psm.unpack_alignment);
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
glPixelStorei(GL_UNPACK_SKIP_ROWS, psm.unpack_skip_rows);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, psm.unpack_skip_pixels);
glPixelStorei(GL_UNPACK_ROW_LENGTH, psm.unpack_row_length);
glPixelStorei(GL_UNPACK_SWAP_BYTES, psm.unpack_swap_bytes);
glPixelStorei(GL_UNPACK_SKIP_IMAGES, psm.unpack_skip_images);
glPixelStorei(GL_UNPACK_IMAGE_HEIGHT, psm.unpack_image_height);
#endif
return 0;
}
{
@ -7844,12 +7906,14 @@ static int gluBuild3DMipmapLevelsCore(GLTexImage3DProc gluTexImage3D,
}
if (dstImage == NULL) {
glPixelStorei(GL_UNPACK_ALIGNMENT, psm.unpack_alignment);
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
glPixelStorei(GL_UNPACK_SKIP_ROWS, psm.unpack_skip_rows);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, psm.unpack_skip_pixels);
glPixelStorei(GL_UNPACK_ROW_LENGTH, psm.unpack_row_length);
glPixelStorei(GL_UNPACK_SWAP_BYTES, psm.unpack_swap_bytes);
glPixelStorei(GL_UNPACK_SKIP_IMAGES, psm.unpack_skip_images);
glPixelStorei(GL_UNPACK_IMAGE_HEIGHT, psm.unpack_image_height);
#endif
return GLU_OUT_OF_MEMORY;
}
else
@ -8063,12 +8127,14 @@ static int gluBuild3DMipmapLevelsCore(GLTexImage3DProc gluTexImage3D,
}
if (dstImage == NULL) {
glPixelStorei(GL_UNPACK_ALIGNMENT, psm.unpack_alignment);
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
glPixelStorei(GL_UNPACK_SKIP_ROWS, psm.unpack_skip_rows);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, psm.unpack_skip_pixels);
glPixelStorei(GL_UNPACK_ROW_LENGTH, psm.unpack_row_length);
glPixelStorei(GL_UNPACK_SWAP_BYTES, psm.unpack_swap_bytes);
glPixelStorei(GL_UNPACK_SKIP_IMAGES, psm.unpack_skip_images);
glPixelStorei(GL_UNPACK_IMAGE_HEIGHT, psm.unpack_image_height);
#endif
free(srcImage);
return GLU_OUT_OF_MEMORY;
}
@ -8122,12 +8188,14 @@ static int gluBuild3DMipmapLevelsCore(GLTexImage3DProc gluTexImage3D,
if (dstImage == NULL) {
glPixelStorei(GL_UNPACK_ALIGNMENT, psm.unpack_alignment);
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
glPixelStorei(GL_UNPACK_SKIP_ROWS, psm.unpack_skip_rows);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, psm.unpack_skip_pixels);
glPixelStorei(GL_UNPACK_ROW_LENGTH, psm.unpack_row_length);
glPixelStorei(GL_UNPACK_SWAP_BYTES, psm.unpack_swap_bytes);
glPixelStorei(GL_UNPACK_SKIP_IMAGES, psm.unpack_skip_images);
glPixelStorei(GL_UNPACK_IMAGE_HEIGHT, psm.unpack_image_height);
#endif
return GLU_OUT_OF_MEMORY;
}
/*printf("Build3DMipmaps(): ScaleImage3D %d %d %d->%d %d %d\n",
@ -8198,12 +8266,14 @@ static int gluBuild3DMipmapLevelsCore(GLTexImage3DProc gluTexImage3D,
}
if (dstImage == NULL) {
glPixelStorei(GL_UNPACK_ALIGNMENT, psm.unpack_alignment);
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
glPixelStorei(GL_UNPACK_SKIP_ROWS, psm.unpack_skip_rows);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, psm.unpack_skip_pixels);
glPixelStorei(GL_UNPACK_ROW_LENGTH, psm.unpack_row_length);
glPixelStorei(GL_UNPACK_SWAP_BYTES, psm.unpack_swap_bytes);
glPixelStorei(GL_UNPACK_SKIP_IMAGES, psm.unpack_skip_images);
glPixelStorei(GL_UNPACK_IMAGE_HEIGHT, psm.unpack_image_height);
#endif
free(srcImage);
return GLU_OUT_OF_MEMORY;
}
@ -8212,7 +8282,10 @@ static int gluBuild3DMipmapLevelsCore(GLTexImage3DProc gluTexImage3D,
level = userLevel;
}
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE);
#endif
if (baseLevel <= level && level <= maxLevel) {
gluTexImage3D(target, level, internalFormat, newWidth, newHeight, newDepth,
0,format, type, (void *)srcImage);
@ -8395,12 +8468,15 @@ static int gluBuild3DMipmapLevelsCore(GLTexImage3DProc gluTexImage3D,
}
} /* for level */
glPixelStorei(GL_UNPACK_ALIGNMENT, psm.unpack_alignment);
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
glPixelStorei(GL_UNPACK_SKIP_ROWS, psm.unpack_skip_rows);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, psm.unpack_skip_pixels);
glPixelStorei(GL_UNPACK_ROW_LENGTH, psm.unpack_row_length);
glPixelStorei(GL_UNPACK_SWAP_BYTES, psm.unpack_swap_bytes);
glPixelStorei(GL_UNPACK_SKIP_IMAGES, psm.unpack_skip_images);
glPixelStorei(GL_UNPACK_IMAGE_HEIGHT, psm.unpack_image_height);
#endif
free(srcImage); /*if you get to here, a srcImage has always been malloc'ed*/
if (dstImage) { /* if it's non-rectangular and only 1 level */

View File

@ -1597,7 +1597,6 @@ void Text::renderOnlyForegroundText(osg::State& state, const osg::Vec4& colorMul
void Text::renderWithDelayedDepthWrites(osg::State& state, const osg::Vec4& colorMultiplier) const
{
glPushAttrib( _enableDepthWrites ? (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) : GL_DEPTH_BUFFER_BIT);
// Render to color buffer without writing to depth buffer.
glDepthMask(GL_FALSE);
drawTextWithBackdrop(state,colorMultiplier);
@ -1609,7 +1608,9 @@ void Text::renderWithDelayedDepthWrites(osg::State& state, const osg::Vec4& colo
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
drawTextWithBackdrop(state,colorMultiplier);
}
glPopAttrib();
state.haveAppliedAttribute(osg::StateAttribute::DEPTH);
state.haveAppliedAttribute(osg::StateAttribute::COLORMASK);
}
void Text::drawTextWithBackdrop(osg::State& state, const osg::Vec4& colorMultiplier) const

View File

@ -1,4 +1,5 @@
#include <osgSim/OverlayNode>
#include <osg/TexEnv>
#include <osgDB/ObjectWrapper>
#include <osgDB/InputStream>
#include <osgDB/OutputStream>