diff --git a/include/osg/Callback b/include/osg/Callback index 54f1630ff..c23c6a443 100644 --- a/include/osg/Callback +++ b/include/osg/Callback @@ -25,7 +25,7 @@ namespace osg { // forward declare class CallbackObject; class NodeCallback; -class StateAtteributeCallback; +class StateAttributeCallback; class UniformCallback; class DrawableUpdateCallback; class DrawableEventCallback; diff --git a/include/osg/ShaderComposer b/include/osg/ShaderComposer index c8f88d4c6..9325ab85c 100644 --- a/include/osg/ShaderComposer +++ b/include/osg/ShaderComposer @@ -25,6 +25,7 @@ class State; typedef std::vector ShaderComponents; +/// deprecated class OSG_EXPORT ShaderComposer : public osg::Object { public: diff --git a/include/osg/State b/include/osg/State index ac82ab8e0..9487ad981 100644 --- a/include/osg/State +++ b/include/osg/State @@ -159,19 +159,19 @@ class OSG_EXPORT State : public Referenced _extensionMap[id] = ptr; } - /* Set whether shader composition is enabled.*/ + /* deprecated.*/ void setShaderCompositionEnabled(bool flag) { _shaderCompositionEnabled = flag; } - /* Get whether shader composition is enabled.*/ + /* deprecated.*/ bool getShaderCompositionEnabled() const { return _shaderCompositionEnabled; } - /** Set the ShaderComposor object that implements shader composition.*/ + /** deprecated.*/ void setShaderComposer(ShaderComposer* sc) { _shaderComposer = sc; } - /** Get the ShaderComposor object.*/ + /** deprecated.*/ ShaderComposer* getShaderComposer() { return _shaderComposer.get(); } - /** Get the const ShaderComposor object.*/ + /** deprecated.*/ const ShaderComposer* getShaderComposer() const { return _shaderComposer.get(); } /** Get the unform list in which to inject any uniforms that StateAttribute::apply(State&) methods provide.*/ @@ -326,6 +326,14 @@ class OSG_EXPORT State : public Referenced /** Apply any shader composed state.*/ void applyShaderComposition(); + + void glDrawBuffer(GLenum buffer); + GLenum getDrawBuffer() const { return _drawBuffer; } + + void glReadBuffer(GLenum buffer); + GLenum getReadBuffer() const { return _readBuffer; } + + /** Set whether a particular OpenGL mode is valid in the current graphics context. * Use to disable OpenGL modes that are not supported by current graphics drivers/context.*/ inline void setModeValidity(StateAttribute::GLMode mode,bool valid) @@ -1139,6 +1147,9 @@ class OSG_EXPORT State : public Referenced ref_ptr _frameStamp; + GLenum _drawBuffer; + GLenum _readBuffer; + ref_ptr _identity; ref_ptr _initialViewMatrix; ref_ptr _projection; diff --git a/src/osg/State.cpp b/src/osg/State.cpp index 354b189dc..ed98b7d63 100644 --- a/src/osg/State.cpp +++ b/src/osg/State.cpp @@ -68,6 +68,9 @@ State::State(): _shaderComposer = new ShaderComposer; _currentShaderCompositionProgram = 0L; + _drawBuffer = GL_NONE; + _readBuffer = GL_NONE; + _identity = new osg::RefMatrix(); // default RefMatrix constructs to identity. _initialViewMatrix = _identity; _projection = _identity; @@ -584,6 +587,28 @@ void State::reset() } +void State::glDrawBuffer(GLenum buffer) +{ + if (_drawBuffer!=buffer) + { + #if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE) && !defined(OSG_GLES3_AVAILABLE) + glDrawBuffer(buffer); + #endif + _drawBuffer=buffer; + } +} + +void State::glReadBuffer(GLenum buffer) +{ + if (_readBuffer!=buffer) + { + #if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE) && !defined(OSG_GLES3_AVAILABLE) + glReadBuffer(buffer); + #endif + _readBuffer=buffer; + } +} + void State::setInitialViewMatrix(const osg::RefMatrix* matrix) { if (matrix) _initialViewMatrix = matrix; diff --git a/src/osgPlugins/gdal/ReaderWriterGDAL.cpp b/src/osgPlugins/gdal/ReaderWriterGDAL.cpp index 1d41c903d..206476491 100644 --- a/src/osgPlugins/gdal/ReaderWriterGDAL.cpp +++ b/src/osgPlugins/gdal/ReaderWriterGDAL.cpp @@ -256,7 +256,7 @@ class ReaderWriterGDAL : public osgDB::ReaderWriter int internalFormat = GL_LUMINANCE; unsigned int pixelFormat = GL_LUMINANCE; unsigned int dataType = 0; - unsigned int numBytesPerPixel = 0; + unsigned int numBytesPerComponent = 0; GDALDataType targetGDALType = GDT_Byte; @@ -327,14 +327,14 @@ class ReaderWriterGDAL : public osgDB::ReaderWriter targetGDALType = band->GetRasterDataType(); switch(band->GetRasterDataType()) { - case(GDT_Byte): dataType = GL_UNSIGNED_BYTE; numBytesPerPixel = 1; break; - case(GDT_UInt16): dataType = GL_UNSIGNED_SHORT; numBytesPerPixel = 2; break; - case(GDT_Int16): dataType = GL_SHORT; numBytesPerPixel = 2; break; - case(GDT_UInt32): dataType = GL_UNSIGNED_INT; numBytesPerPixel = 4; break; - case(GDT_Int32): dataType = GL_INT; numBytesPerPixel = 4; break; - case(GDT_Float32): dataType = GL_FLOAT; numBytesPerPixel = 4; break; - case(GDT_Float64): dataType = GL_DOUBLE; numBytesPerPixel = 8; break; // not handled - default: dataType = 0; numBytesPerPixel = 0; break; // not handled + case(GDT_Byte): dataType = GL_UNSIGNED_BYTE; numBytesPerComponent = 1; break; + case(GDT_UInt16): dataType = GL_UNSIGNED_SHORT; numBytesPerComponent = 2; break; + case(GDT_Int16): dataType = GL_SHORT; numBytesPerComponent = 2; break; + case(GDT_UInt32): dataType = GL_UNSIGNED_INT; numBytesPerComponent = 4; break; + case(GDT_Int32): dataType = GL_INT; numBytesPerComponent = 4; break; + case(GDT_Float32): dataType = GL_FLOAT; numBytesPerComponent = 4; break; + case(GDT_Float64): dataType = GL_DOUBLE; numBytesPerComponent = 8; break; // not handled + default: dataType = 0; numBytesPerComponent = 0; break; // not handled } } } @@ -348,7 +348,7 @@ class ReaderWriterGDAL : public osgDB::ReaderWriter if (dataType==0) { dataType = GL_UNSIGNED_BYTE; - numBytesPerPixel = 1; + numBytesPerComponent = 1; targetGDALType = GDT_Byte; } @@ -360,7 +360,7 @@ class ReaderWriterGDAL : public osgDB::ReaderWriter { // RGBA - int pixelSpace=4*numBytesPerPixel; + int pixelSpace=4*numBytesPerComponent; int lineSpace=destWidth * pixelSpace; imageData = new unsigned char[destWidth * destHeight * pixelSpace]; @@ -370,16 +370,16 @@ class ReaderWriterGDAL : public osgDB::ReaderWriter OSG_INFO << "reading RGBA"<RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+0),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace); - bandGreen->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+1),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace); - bandBlue->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+2),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace); - bandAlpha->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+3),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace); + bandGreen->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+1*numBytesPerComponent),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace); + bandBlue->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+2*numBytesPerComponent),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace); + bandAlpha->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+3*numBytesPerComponent),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace); } else { // RGB - int pixelSpace=3*numBytesPerPixel; + int pixelSpace=3*numBytesPerComponent; int lineSpace=destWidth * pixelSpace; imageData = new unsigned char[destWidth * destHeight * pixelSpace]; @@ -389,8 +389,8 @@ class ReaderWriterGDAL : public osgDB::ReaderWriter OSG_INFO << "reading RGB"<RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+0),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace); - bandGreen->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+1),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace); - bandBlue->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+2),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace); + bandGreen->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+1*numBytesPerComponent),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace); + bandBlue->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+2*numBytesPerComponent),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace); } } @@ -399,7 +399,7 @@ class ReaderWriterGDAL : public osgDB::ReaderWriter if (bandAlpha) { // Luminance alpha - int pixelSpace=2*numBytesPerPixel; + int pixelSpace=2*numBytesPerComponent; int lineSpace=destWidth * pixelSpace; imageData = new unsigned char[destWidth * destHeight * pixelSpace]; @@ -409,12 +409,12 @@ class ReaderWriterGDAL : public osgDB::ReaderWriter OSG_INFO << "reading grey + alpha"<RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+0),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace); - bandAlpha->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+1),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace); + bandAlpha->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+1*numBytesPerComponent),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace); } else { // Luminance map - int pixelSpace=1*numBytesPerPixel; + int pixelSpace=1*numBytesPerComponent; int lineSpace=destWidth * pixelSpace; imageData = new unsigned char[destWidth * destHeight * pixelSpace]; @@ -429,7 +429,7 @@ class ReaderWriterGDAL : public osgDB::ReaderWriter else if (bandAlpha) { // alpha map - int pixelSpace=1*numBytesPerPixel; + int pixelSpace=1*numBytesPerComponent; int lineSpace=destWidth * pixelSpace; imageData = new unsigned char[destWidth * destHeight * pixelSpace]; @@ -444,7 +444,7 @@ class ReaderWriterGDAL : public osgDB::ReaderWriter else if (bandPalette) { // Paletted map - int pixelSpace=1*numBytesPerPixel; + int pixelSpace=1*numBytesPerComponent; int lineSpace=destWidth * pixelSpace; unsigned char *rawImageData; @@ -454,7 +454,7 @@ class ReaderWriterGDAL : public osgDB::ReaderWriter internalFormat = GL_RGBA; OSG_INFO << "reading palette"<RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(rawImageData),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace);