00001 #ifndef __RenderPass__ 00002 #define __RenderPass__ 00003 00004 #include <osg/GLExtensions> 00005 #include <osg/Texture2D> 00006 #include <osg/Group> 00007 #include <osg/Geode> 00008 #include <osg/Geometry> 00009 #include <osg/Camera> 00010 #include <osg/StateSet> 00011 #include <osg/FrameBufferObject> 00012 #include <vector> 00013 #include "OsgCanvas.h" 00014 #include "SceneObject.h" 00015 #include "SceneManager.h" 00016 #include "SharedResource.h" 00017 #include "ShaderFactory.h" 00018 00019 00020 using namespace std; 00021 00022 00028 class ForwardPass : public SharedResource { 00029 public: 00030 struct SceneCameraViewMatrixCallback : public osg::Camera::DrawCallback { 00031 osg::Camera* masterCamera; 00032 osg::Camera* slaveCamera; 00033 00034 void operator () (osg::RenderInfo& renderInfo) const { 00035 slaveCamera->setViewMatrix(masterCamera->getViewMatrix()); 00036 slaveCamera->setProjectionMatrix(masterCamera->getProjectionMatrix()); 00037 } 00038 }; 00039 00040 SceneCameraViewMatrixCallback callback; 00041 00042 00043 ForwardPass(OSGCanvas* canvas, wxGraphicsWindow* graphicsWindow); 00044 00045 osg::Texture2D* getOutputBuffer(); 00046 00047 void setSceneData(osg::Node* scene); 00048 00049 void createShader(const char* fileName); 00050 void addUniform(osg::Uniform* uniform); 00051 00052 void adjustSize(); 00053 00054 osg::Camera* getCamera(); 00055 00056 protected: 00057 osg::ref_ptr<osg::Texture2D> _outputBuffer; 00058 osg::ref_ptr<osg::Texture2D> _depthBuffer; 00059 00060 osg::ref_ptr<osg::Camera> _camera; 00061 00062 OSGCanvas* _canvas; 00063 wxGraphicsWindow* _graphicsWindow; 00064 }; 00065 00066 00067 00081 class PostEffectPass : public SharedResource { 00082 public: 00083 PostEffectPass(OSGCanvas* canvas, wxGraphicsWindow* graphicsWindow); 00084 00085 void setInputBuffer(int index, osg::Texture2D* buffer); 00086 00087 void createShader(const char* fileName); 00088 void addUniform(osg::Uniform* uniform); 00089 00090 void adjustSize(); 00091 00092 osg::Camera* getCamera(); 00093 00094 protected: 00095 osg::ref_ptr<osg::Geode> _quad; 00096 osg::ref_ptr<osg::Camera> _camera; 00097 00098 OSGCanvas* _canvas; 00099 wxGraphicsWindow* _graphicsWindow; 00100 }; 00101 00102 #endif