diff --git a/VisualStudio/osg/osg.dsp b/VisualStudio/osg/osg.dsp index 8ef0e8c39..4f4b9ca12 100755 --- a/VisualStudio/osg/osg.dsp +++ b/VisualStudio/osg/osg.dsp @@ -260,6 +260,10 @@ SOURCE=..\..\src\osg\GLExtensions.cpp # End Source File # Begin Source File +SOURCE=..\..\src\osg\GraphicsContext.cpp +# End Source File +# Begin Source File + SOURCE=..\..\src\osg\Group.cpp # End Source File # Begin Source File @@ -720,6 +724,10 @@ SOURCE=..\..\Include\Osg\Group # End Source File # Begin Source File +SOURCE=..\..\Include\Osg\GraphicsContext +# End Source File +# Begin Source File + SOURCE=..\..\src\osg\dxtctool.h # End Source File # Begin Source File diff --git a/VisualStudio/osgWrappers/osg/wrapper_osg.dsp b/VisualStudio/osgWrappers/osg/wrapper_osg.dsp index 8d044ccb3..0783e140d 100644 --- a/VisualStudio/osgWrappers/osg/wrapper_osg.dsp +++ b/VisualStudio/osgWrappers/osg/wrapper_osg.dsp @@ -263,6 +263,10 @@ SOURCE=..\..\..\src\osgWrappers\osg\Geode.cpp SOURCE=..\..\..\src\osgWrappers\osg\Geometry.cpp # End Source File +# Begin Source File +SOURCE=..\..\..\src\osgWrappers\osg\GraphicsContext.cpp +# End Source File + # Begin Source File SOURCE=..\..\..\src\osgWrappers\osg\Group.cpp # End Source File diff --git a/VisualStudio/osgWrappers/osgIntrospection/wrapper_osgIntrospection.dsp b/VisualStudio/osgWrappers/osgIntrospection/wrapper_osgIntrospection.dsp deleted file mode 100644 index c91747e75..000000000 --- a/VisualStudio/osgWrappers/osgIntrospection/wrapper_osgIntrospection.dsp +++ /dev/null @@ -1,173 +0,0 @@ -# Microsoft Developer Studio Project File - Name="osgWrapper osgIntrospection" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=osgWrapper osgIntrospection - Win32 Release -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "wrapper_osgIntrospection.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "wrapper_osgIntrospection.mak" CFG="osgWrapper osgIntrospection - Win32 Release" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "osgWrapper osgIntrospection - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "osgWrapper osgIntrospection - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "osgWrapper osgIntrospection - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "../../../lib" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -F90=df.exe -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GR /GX /O2 /I "../../../include" /I "../../../../OpenThreads/include" /I "../../../../Producer/include" /I "../../../../3rdParty/include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x809 /d "NDEBUG" -# ADD RSC /l 0x809 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# ADD LINK32 opengl32.lib OpenThreadsWin32.lib /nologo /dll /pdb:none /machine:I386 /nodefaultlib:"LIBC" /out:"../../../bin/osgwrapper_osgIntrospection.dll" /libpath:"../../../lib" /libpath:"../../../../OpenThreads/lib/win32" /libpath:"../../../../Producer/lib" /libpath:"../../../../3rdParty/lib" -# SUBTRACT LINK32 /nodefaultlib - -!ELSEIF "$(CFG)" == "osgWrapper osgIntrospection - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "../../../lib" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -F90=df.exe -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /Gm /vmg /GR /GX /Zi /Od /I "../../../include" /I "../../../../OpenThreads/include" /I "../../../../Producer/include" /I "../../../../3rdParty/include" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WIN32" /D "_DEBUG" /YX /FD /GZ /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x809 /d "_DEBUG" -# ADD RSC /l 0x809 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 opengl32.lib OpenThreadsWin32d.lib /nologo /dll /debug /machine:I386 /nodefaultlib:"LIBC" /out:"../../../bin/osgwrapper_osgIntrospectiond.dll" /pdbtype:sept /libpath:"../../../lib" /libpath:"../../../../OpenThreads/lib/win32" /libpath:"../../../../Producer/lib" /libpath:"../../../../3rdParty/lib" -# SUBTRACT LINK32 /pdb:none /nodefaultlib - -!ENDIF - -# Begin Target - -# Name "osgWrapper osgIntrospection - Win32 Release" -# Name "osgWrapper osgIntrospection - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" - -# Begin Source File -SOURCE=..\..\..\src\osgWrappers\osgIntrospection\Attributes.cpp -# End Source File - -# Begin Source File -SOURCE=..\..\..\src\osgWrappers\osgIntrospection\Comparator.cpp -# End Source File - -# Begin Source File -SOURCE=..\..\..\src\osgWrappers\osgIntrospection\ConstructorInfo.cpp -# End Source File - -# Begin Source File -SOURCE=..\..\..\src\osgWrappers\osgIntrospection\Converter.cpp -# End Source File - -# Begin Source File -SOURCE=..\..\..\src\osgWrappers\osgIntrospection\ConverterProxy.cpp -# End Source File - -# Begin Source File -SOURCE=..\..\..\src\osgWrappers\osgIntrospection\CustomAttribute.cpp -# End Source File - -# Begin Source File -SOURCE=..\..\..\src\osgWrappers\osgIntrospection\CustomAttributeProvider.cpp -# End Source File - -# Begin Source File -SOURCE=..\..\..\src\osgWrappers\osgIntrospection\Exceptions.cpp -# End Source File - -# Begin Source File -SOURCE=..\..\..\src\osgWrappers\osgIntrospection\MethodInfo.cpp -# End Source File - -# Begin Source File -SOURCE=..\..\..\src\osgWrappers\osgIntrospection\ParameterInfo.cpp -# End Source File - -# Begin Source File -SOURCE=..\..\..\src\osgWrappers\osgIntrospection\PropertyInfo.cpp -# End Source File - -# Begin Source File -SOURCE=..\..\..\src\osgWrappers\osgIntrospection\ReaderWriter.cpp -# End Source File - -# Begin Source File -SOURCE=..\..\..\src\osgWrappers\osgIntrospection\Reflection.cpp -# End Source File - -# Begin Source File -SOURCE=..\..\..\src\osgWrappers\osgIntrospection\Reflector.cpp -# End Source File - -# Begin Source File -SOURCE=..\..\..\src\osgWrappers\osgIntrospection\Type.cpp -# End Source File - -# Begin Source File -SOURCE=..\..\..\src\osgWrappers\osgIntrospection\Value.cpp -# End Source File - -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project - diff --git a/VisualStudio/osgWrappers/osgText/wrapper_osgText.dsp b/VisualStudio/osgWrappers/osgText/wrapper_osgText.dsp index 1e49a4cb2..1e565e8b9 100644 --- a/VisualStudio/osgWrappers/osgText/wrapper_osgText.dsp +++ b/VisualStudio/osgWrappers/osgText/wrapper_osgText.dsp @@ -111,14 +111,6 @@ SOURCE=..\..\..\src\osgWrappers\osgText\String.cpp SOURCE=..\..\..\src\osgWrappers\osgText\Text.cpp # End Source File -# Begin Source File -SOURCE=..\..\..\src\osgWrappers\osgText\Text.cpp -# End Source File - -# Begin Source File -SOURCE=..\..\..\src\osgWrappers\osgText\Text.cpp -# End Source File - # End Group # Begin Group "Header Files" diff --git a/examples/osgpbuffer/osgpbuffer.cpp b/examples/osgpbuffer/osgpbuffer.cpp index 03d46a10e..b1c4cf2ee 100644 --- a/examples/osgpbuffer/osgpbuffer.cpp +++ b/examples/osgpbuffer/osgpbuffer.cpp @@ -49,11 +49,27 @@ class PBufferTexture2D : public osg::Texture2D glTexImage2D( GL_TEXTURE_2D, 0, format, width, height, 0, format, GL_UNSIGNED_BYTE, 0 ); textureObject->setAllocated(true); + + std::cout<<"Created texture"<bind(); - _pbuffer->bindPBufferToTexture( Producer::RenderSurface::FrontBuffer ); + + static unsigned int frameNum = 0; + + if ((frameNum % 100)==0) + { + std::cout<<"binding texture"<bindPBufferToTexture( Producer::RenderSurface::FrontBuffer ); + } + else + { + std::cout<<"..."< #include -#include -#include +#include #include #include @@ -502,18 +501,15 @@ int main( int argc, char **argv ) { // create the hud. - osg::Projection* projection = new osg::Projection; - projection->setMatrix(osg::Matrix::ortho2D(0,1280,0,1024)); + osg::CameraNode* camera = new osg::CameraNode; + camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF); + camera->setProjectionMatrixAsOrtho2D(0,1280,0,1024); + camera->setViewMatrix(osg::Matrix::identity()); + camera->setClearMask(GL_DEPTH_BUFFER_BIT); + camera->addChild(createHUDText()); + camera->getOrCreateStateSet()->setMode(GL_LIGHTING,osg::StateAttribute::OFF); - osg::MatrixTransform* modelview_abs = new osg::MatrixTransform; - modelview_abs->setReferenceFrame(osg::Transform::ABSOLUTE_RF); - modelview_abs->setMatrix(osg::Matrix::identity()); - - modelview_abs->addChild(createHUDText()); - - projection->addChild(modelview_abs); - - group->addChild(projection); + group->addChild(camera); } group->addChild(create3DText(center,radius)); diff --git a/include/osg/CameraNode b/include/osg/CameraNode index b5be86014..304633cb5 100644 --- a/include/osg/CameraNode +++ b/include/osg/CameraNode @@ -20,6 +20,7 @@ #include #include #include +#include namespace osg { @@ -258,6 +259,16 @@ class OSG_EXPORT CameraNode : public Transform, public CullSettings const BufferAttachmentMap& getBufferAttachmentMap() const { return _bufferAttachmentMap; } + /** Set the GraphicsContext that provides the mechansim for managing the OpenGL graphics context associated with this camera.*/ + void setGraphicsContext(GraphicsContext* context) { _graphicsContext = context; } + + /** Get the GraphicsContext.*/ + GraphicsContext* getGraphicsContext() { return _graphicsContext.get(); } + + /** Get the const GraphicsContext.*/ + const GraphicsContext* getGraphicsContext() const { return _graphicsContext.get(); } + + /** Set the Rendering object that is used to implement rendering of the subgraph.*/ void setRenderingCache(osg::Object* rc) { _renderingCache = rc; } @@ -297,6 +308,7 @@ class OSG_EXPORT CameraNode : public Transform, public CullSettings RenderTargetImplementation _renderTargetImplementation; BufferAttachmentMap _bufferAttachmentMap; + ref_ptr _graphicsContext; ref_ptr _renderingCache; }; diff --git a/include/osg/State b/include/osg/State index 25f9c3b2b..cea3d6846 100644 --- a/include/osg/State +++ b/include/osg/State @@ -63,6 +63,10 @@ namespace osg { }\ } + +// forward decalr GraphicsContext +class GraphicsContext; + /** Encapsulates the current applied OpenGL modes, attributes and vertex arrays settings,. * implements lazy state updating and provides accessors for querrying the current state. . The venerable Red Book says that "OpenGL is a state machine", and this class @@ -83,6 +87,32 @@ class OSG_EXPORT State : public Referenced public : State(); + + + /** Set the graphics context associated with that owns this State object.*/ + void setGraphicsContext(GraphicsContext* context) { _graphicsContext = context; } + + /** Get the graphics context associated with that owns this State object.*/ + GraphicsContext* getGraphicsContext() { return _graphicsContext; } + + /** Get the const graphics context associated with that owns this State object.*/ + const GraphicsContext* getGraphicsContext() const { return _graphicsContext; } + + + /** Set the current OpenGL context uniqueID. + Note, it is the application developers responsibility to + set up unique ID for each OpenGL context. This value is + then used by osg::StateAttribute's and osg::Drawable's to + help manage OpenGL display list and texture binds appropriate + for each context, the contextID simply acts as an index in local + arrays that they maintain for the purpose. + Typical settings for contextID are 0,1,2,3... up to the maximum + number of graphics contexts you have set up. + By default contextID is 0.*/ + inline void setContextID(unsigned int contextID) { _contextID=contextID; } + + /** Get the current OpenGL context unique ID.*/ + inline unsigned int getContextID() const { return _contextID; } /** Push stateset onto state stack.*/ void pushStateSet(const StateSet* dstate); @@ -669,21 +699,6 @@ class OSG_EXPORT State : public Referenced inline GLint getUniformLocation( const std::string& name ) const { return _lastAppliedProgramObject ? _lastAppliedProgramObject->getUniformLocation(name) : -1; } inline GLint getAttribLocation( const std::string& name ) const { return _lastAppliedProgramObject ? _lastAppliedProgramObject->getAttribLocation(name) : -1; } - /** Set the current OpenGL context uniqueID. - Note, it is the application developers responsibility to - set up unique ID for each OpenGL context. This value is - then used by osg::StateAttribute's and osg::Drawable's to - help manage OpenGL display list and texture binds appropriate - for each context, the contextID simply acts as an index in local - arrays that they maintain for the purpose. - Typical settings for contextID are 0,1,2,3... up to the maximum - number of graphics contexts you have set up. - By default contextID is 0.*/ - inline void setContextID(unsigned int contextID) { _contextID=contextID; } - - /** Get the current OpenGL context unique ID.*/ - inline unsigned int getContextID() const { return _contextID; } - /** Set the frame stamp for the current frame.*/ inline void setFrameStamp(FrameStamp* fs) { _frameStamp = fs; } @@ -738,6 +753,7 @@ class OSG_EXPORT State : public Referenced virtual ~State(); + GraphicsContext* _graphicsContext; unsigned int _contextID; ref_ptr _frameStamp; diff --git a/src/osg/GNUmakefile b/src/osg/GNUmakefile index 98a84cc10..44cd1264b 100644 --- a/src/osg/GNUmakefile +++ b/src/osg/GNUmakefile @@ -44,6 +44,7 @@ CXXFILES =\ Geode.cpp\ Geometry.cpp\ GLExtensions.cpp\ + GraphicsContext.cpp\ Group.cpp\ Image.cpp\ ImageStream.cpp\ diff --git a/src/osg/State.cpp b/src/osg/State.cpp index bf6ea2f1e..525eeb825 100644 --- a/src/osg/State.cpp +++ b/src/osg/State.cpp @@ -21,6 +21,7 @@ using namespace osg; State::State() { + _graphicsContext = 0; _contextID = 0; _identity = new osg::RefMatrix(); // default RefMatrix constructs to identity. _initialViewMatrix = _identity; diff --git a/src/osgWrappers/osg/CameraNode.cpp b/src/osgWrappers/osg/CameraNode.cpp index 066558393..7350c446b 100644 --- a/src/osgWrappers/osg/CameraNode.cpp +++ b/src/osgWrappers/osg/CameraNode.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -125,6 +126,9 @@ BEGIN_OBJECT_REFLECTOR(osg::CameraNode) I_Method1(void, detach, IN, osg::CameraNode::BufferComponent, buffer); I_Method0(osg::CameraNode::BufferAttachmentMap &, getBufferAttachmentMap); I_Method0(const osg::CameraNode::BufferAttachmentMap &, getBufferAttachmentMap); + I_Method1(void, setGraphicsContext, IN, osg::GraphicsContext *, context); + I_Method0(osg::GraphicsContext *, getGraphicsContext); + I_Method0(const osg::GraphicsContext *, getGraphicsContext); I_Method1(void, setRenderingCache, IN, osg::Object *, rc); I_Method0(osg::Object *, getRenderingCache); I_Method0(const osg::Object *, getRenderingCache); @@ -136,6 +140,7 @@ BEGIN_OBJECT_REFLECTOR(osg::CameraNode) I_Property(osg::ColorMask *, ColorMask); I_IndexedProperty1(GLenum, DrawBuffer, unsigned int, pos); I_ReadOnlyProperty(osg::CameraNode::DrawBufferList &, DrawBufferList); + I_Property(osg::GraphicsContext *, GraphicsContext); I_ReadOnlyProperty(osg::Matrixd, InverseViewMatrix); I_Property(const osg::Matrixd &, ProjectionMatrix); I_Property(GLenum, ReadBuffer); diff --git a/src/osgWrappers/osg/GNUmakefile b/src/osgWrappers/osg/GNUmakefile index 05f4ecc79..4589693b8 100644 --- a/src/osgWrappers/osg/GNUmakefile +++ b/src/osgWrappers/osg/GNUmakefile @@ -44,6 +44,7 @@ CXXFILES =\ GL2Extensions.cpp\ Geode.cpp\ Geometry.cpp\ + GraphicsContext.cpp\ Group.cpp\ Image.cpp\ ImageStream.cpp\ diff --git a/src/osgWrappers/osg/State.cpp b/src/osgWrappers/osg/State.cpp index 8cd0dad6c..ed787fa0c 100644 --- a/src/osgWrappers/osg/State.cpp +++ b/src/osgWrappers/osg/State.cpp @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -36,6 +37,11 @@ END_REFLECTOR BEGIN_OBJECT_REFLECTOR(osg::State) I_BaseType(osg::Referenced); I_Constructor0(); + I_Method1(void, setGraphicsContext, IN, osg::GraphicsContext *, context); + I_Method0(osg::GraphicsContext *, getGraphicsContext); + I_Method0(const osg::GraphicsContext *, getGraphicsContext); + I_Method1(void, setContextID, IN, unsigned int, contextID); + I_Method0(unsigned int, getContextID); I_Method1(void, pushStateSet, IN, const osg::StateSet *, dstate); I_Method0(void, popStateSet); I_Method0(void, popAllStateSets); @@ -119,8 +125,6 @@ BEGIN_OBJECT_REFLECTOR(osg::State) I_Method0(const osg::Program::PerContextProgram *, getLastAppliedProgramObject); I_Method1(GLint, getUniformLocation, IN, const std::string &, name); I_Method1(GLint, getAttribLocation, IN, const std::string &, name); - I_Method1(void, setContextID, IN, unsigned int, contextID); - I_Method0(unsigned int, getContextID); I_Method1(void, setFrameStamp, IN, osg::FrameStamp *, fs); I_Method0(const osg::FrameStamp *, getFrameStamp); I_Method1(void, setDisplaySettings, IN, osg::DisplaySettings *, vs); @@ -144,6 +148,7 @@ BEGIN_OBJECT_REFLECTOR(osg::State) I_WriteOnlyProperty(const osg::StateAttribute *, GlobalDefaultAttribute); I_IndexedProperty1(bool, GlobalDefaultModeValue, osg::StateAttribute::GLMode, mode); I_IndexedProperty2(bool, GlobalDefaultTextureModeValue, unsigned int, unit, osg::StateAttribute::GLMode, mode); + I_Property(osg::GraphicsContext *, GraphicsContext); I_ReadOnlyProperty(const osg::Matrix &, InitialInverseViewMatrix); I_WriteOnlyProperty(const osg::RefMatrix *, InitialViewMatrix); I_Property(const osg::Program::PerContextProgram *, LastAppliedProgramObject);