Show
Ignore:
Timestamp:
11/21/14 21:16:16 (2 days ago)
Author:
robert
Message:

From Alberto Luaces,"the current code uses the preprocessor for generating the plugin path in
a way that when CMAKE_INSTALL_PREFIX contains something along the lines
of

/usr/x86_64-linux-gnu/

it gets substituted as

/usr/x86_64-1-gnu/

that is, the string is preprocessed again, thereby making changes to
anything that matches any defined symbol, as "linux" in this example
(https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=763816).

Quoting that path directly in CMake scripts solves that problem.
"

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/examples/osgkeystone/osgkeystone.cpp

    r13374 r13376  
    3636    Keystone(): 
    3737        keystoneEditingEnabled(false), 
     38        gridColour(1.0f,1.0f,1.0f,1.0f), 
    3839        bottom_left(-1.0,-1.0), 
    3940        bottom_right(1.0,-1.0), 
     
    5354        if (&rhs==this) return *this; 
    5455        keystoneEditingEnabled = rhs.keystoneEditingEnabled; 
     56        gridColour = rhs.gridColour; 
    5557        bottom_left = rhs.bottom_left; 
    5658        bottom_right = rhs.bottom_right; 
     
    6264    bool        keystoneEditingEnabled; 
    6365 
     66    osg::Vec4   gridColour; 
     67 
    6468    osg::Vec2d  bottom_left; 
    6569    osg::Vec2d  bottom_right; 
     
    98102    ~KeystoneHandler() {} 
    99103 
    100     bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& aa); 
     104    bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa, osg::Object* obj, osg::NodeVisitor* nv); 
    101105 
    102106    void setKeystoneEditingEnabled(bool enabled) { if (_currentControlPoints.valid()) _currentControlPoints->keystoneEditingEnabled = enabled; } 
     
    229233} 
    230234 
    231 bool KeystoneHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa) 
    232 { 
     235bool KeystoneHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa, osg::Object* obj, osg::NodeVisitor* nv) 
     236{ 
     237    osg::Camera* camera = dynamic_cast<osg::Camera*>(obj); 
     238    osg::Viewport* viewport = camera ?  camera->getViewport() : 0; 
     239 
     240    if (!viewport) return false; 
     241 
     242    bool haveCameraMatch = false; 
     243    float x = ea.getXnormalized(); 
     244    float y = ea.getYnormalized(); 
     245    for(unsigned int i=0; i<ea.getNumPointerData(); ++i) 
     246    { 
     247        const osgGA::PointerData* pd = ea.getPointerData(i); 
     248        if (pd->object==obj) 
     249        { 
     250            haveCameraMatch = true; 
     251            x = pd->getXnormalized(); 
     252            y = pd->getYnormalized(); 
     253            break; 
     254        } 
     255    } 
     256 
     257 
     258    if (!haveCameraMatch) return false; 
     259 
    233260    switch(ea.getEventType()) 
    234261    { 
     
    242269                    _selectedRegion = computeRegion(ea); 
    243270                    (*_startControlPoints) = (*_currentControlPoints); 
    244                     _startPosition.set(ea.getXnormalized(),ea.getYnormalized()); 
     271                    _startPosition.set(x,y); 
    245272                } 
    246273                else 
     
    258285                { 
    259286                    (*_currentControlPoints) = (*_startControlPoints); 
    260                     osg::Vec2d currentPosition(ea.getXnormalized(), ea.getYnormalized()); 
     287                    osg::Vec2d currentPosition(x, y); 
    261288                    osg::Vec2d delta(currentPosition-_startPosition); 
    262289                    osg::Vec2d scale = incrementScale(ea); 
     
    307334                else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_7 || ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_Home) 
    308335                { 
    309                     _currentControlPoints->top_left.set(ea.getXnormalized(), ea.getYnormalized()); 
     336                    _currentControlPoints->top_left.set(x, y); 
    310337                } 
    311338                else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_9 || ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_Page_Up) 
    312339                { 
    313                     _currentControlPoints->top_right.set(ea.getXnormalized(), ea.getYnormalized()); 
     340                    _currentControlPoints->top_right.set(x, y); 
    314341                } 
    315342                else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_3 || ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_Page_Down) 
    316343                { 
    317                     _currentControlPoints->bottom_right.set(ea.getXnormalized(), ea.getYnormalized()); 
     344                    _currentControlPoints->bottom_right.set(x, y); 
    318345                } 
    319346                else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_1 || ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_End) 
    320347                { 
    321                     _currentControlPoints->bottom_left.set(ea.getXnormalized(), ea.getYnormalized()); 
     348                    _currentControlPoints->bottom_left.set(x, y); 
    322349                } 
    323350            } 
     
    472499 
    473500    osg::ref_ptr<osg::Vec4Array> colours = new osg::Vec4Array; 
    474     colours->push_back(osg::Vec4(1.0f,1.0f,1.0f,1.0f)); 
     501    colours->push_back(keystone->gridColour); 
    475502    geometry->setColorArray(colours.get()); 
    476503    geometry->setColorBinding(osg::Geometry::BIND_OVERALL); 
     
    580607osg::Camera* assignKeystoneRenderToTextureCamera(osgViewer::View* view, osg::GraphicsContext* gc, int width, int height, osg::Texture* texture) 
    581608{ 
    582     osg::Camera::RenderTargetImplementation renderTargetImplementation = osg::Camera::FRAME_BUFFER_OBJECT; 
    583     GLenum buffer = GL_FRONT; 
    584  
    585609    osg::ref_ptr<osg::Camera> camera = new osg::Camera; 
    586610    camera->setName("Render to texture camera"); 
    587611    camera->setGraphicsContext(gc); 
    588612    camera->setViewport(new osg::Viewport(0,0,width, height)); 
    589     camera->setDrawBuffer(buffer); 
    590     camera->setReadBuffer(buffer); 
     613    camera->setDrawBuffer(GL_FRONT); 
     614    camera->setReadBuffer(GL_FRONT); 
    591615    camera->setAllowEventFocus(false); 
    592     // tell the camera to use OpenGL frame buffer object where supported. 
    593     camera->setRenderTargetImplementation(renderTargetImplementation); 
     616    camera->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT); 
    594617 
    595618    // attach the texture and use it as the color buffer. 
     
    629652    camera->setReadBuffer(buffer); 
    630653    camera->setReferenceFrame(osg::Camera::ABSOLUTE_RF); 
    631     camera->setAllowEventFocus(false); 
    632654    camera->setInheritanceMask(camera->getInheritanceMask() & ~osg::CullSettings::CLEAR_COLOR & ~osg::CullSettings::COMPUTE_NEAR_FAR_MODE); 
    633655    //camera->setComputeNearFarMode(osg::CullSettings::DO_NOT_COMPUTE_NEAR_FAR); 
     
    822844 
    823845    ds->setUseSceneViewForStereoHint(false); 
     846 
     847 
     848    osg::ref_ptr<Keystone> keystone = new Keystone; 
    824849 
    825850    
     
    911936        { 
    912937            // left Camera red 
    913             { 
    914                 osg::ref_ptr<osg::Camera> camera = assignStereoCamera(view, ds, gc, 0, 0, traits->width, traits->height, traits->doubleBuffer ? GL_BACK : GL_FRONT, -1.0); 
    915                 camera->setClearMask(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 
    916                 camera->getOrCreateStateSet()->setAttribute(new osg::ColorMask(true, false, false, true)); 
    917                 camera->setRenderOrder(osg::Camera::NESTED_RENDER, 0); 
    918             } 
     938            osg::ref_ptr<osg::Camera> left_camera = assignStereoCamera(view, ds, gc, 0, 0, traits->width, traits->height, traits->doubleBuffer ? GL_BACK : GL_FRONT, -1.0); 
     939            left_camera->setClearMask(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 
     940            left_camera->getOrCreateStateSet()->setAttribute(new osg::ColorMask(true, false, false, true)); 
     941            left_camera->setRenderOrder(osg::Camera::NESTED_RENDER, 0); 
    919942 
    920943            // right Camera cyan 
    921             { 
    922                 osg::ref_ptr<osg::Camera> camera = assignStereoCamera(view, ds, gc, 0, 0, traits->width, traits->height, traits->doubleBuffer ? GL_BACK : GL_FRONT, 1.0); 
    923                 camera->setClearMask(GL_DEPTH_BUFFER_BIT); 
    924                 camera->getOrCreateStateSet()->setAttribute(new osg::ColorMask(false, true, true, true)); 
    925                 camera->setRenderOrder(osg::Camera::NESTED_RENDER, 1); 
    926             } 
    927  
    928             // for keystone: 
    929             // left camera to render to texture using red colour mask 
    930             // right camera to render to same texture using cyan colour mask 
    931             // keystone camera to render to whole screen without colour masks 
    932             // one keystone and editing for the one window 
     944            osg::ref_ptr<osg::Camera> right_camera = assignStereoCamera(view, ds, gc, 0, 0, traits->width, traits->height, traits->doubleBuffer ? GL_BACK : GL_FRONT, 1.0); 
     945            right_camera->setClearMask(GL_DEPTH_BUFFER_BIT); 
     946            right_camera->getOrCreateStateSet()->setAttribute(new osg::ColorMask(false, true, true, true)); 
     947            right_camera->setRenderOrder(osg::Camera::NESTED_RENDER, 1); 
     948 
     949            if (keystone.valid()) 
     950            { 
     951                // for keystone: 
     952                // left camera to render to texture using red colour mask 
     953                // right camera to render to same texture using cyan colour mask 
     954                // keystone camera to render to whole screen without colour masks 
     955                // one keystone and editing for the one window 
     956 
     957                // create distortion texture 
     958                osg::ref_ptr<osg::Texture> texture = createKestoneDistortionTexture(traits->width, traits->height); 
     959 
     960                // convert to RTT Camera 
     961                left_camera->setDrawBuffer(GL_FRONT); 
     962                left_camera->setReadBuffer(GL_FRONT); 
     963                left_camera->setAllowEventFocus(false); 
     964                left_camera->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT); 
     965 
     966                // attach the texture and use it as the color buffer. 
     967                left_camera->attach(osg::Camera::COLOR_BUFFER, texture.get()); 
     968 
     969 
     970                // convert to RTT Camera 
     971                right_camera->setDrawBuffer(GL_FRONT); 
     972                right_camera->setReadBuffer(GL_FRONT); 
     973                right_camera->setAllowEventFocus(false); 
     974                right_camera->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT); 
     975 
     976                // attach the texture and use it as the color buffer. 
     977                right_camera->attach(osg::Camera::COLOR_BUFFER, texture.get()); 
     978 
     979 
     980                // create Keystone distortion camera 
     981                osg::ref_ptr<osg::Camera> camera = assignKeystoneDistortionCamera(view, ds, gc.get(), 
     982                                                                                0, 0, traits->width, traits->height, 
     983                                                                                traits->doubleBuffer ? GL_BACK : GL_FRONT, 
     984                                                                                texture, keystone.get()); 
     985 
     986                camera->setRenderOrder(osg::Camera::NESTED_RENDER, 2); 
     987                 
     988                // attach Keystone editing event handler. 
     989                camera->addEventCallback(new KeystoneHandler(keystone.get())); 
     990            } 
    933991 
    934992            break; 
     
    937995        { 
    938996            // left viewport Camera 
    939             assignStereoCamera(view, ds, gc, 
     997            osg::ref_ptr<osg::Camera> left_camera = assignStereoCamera(view, ds, gc, 
    940998                               0, 0, traits->width/2, traits->height, traits->doubleBuffer ? GL_BACK : GL_FRONT, 
    941999                               (ds->getSplitStereoHorizontalEyeMapping()==osg::DisplaySettings::LEFT_EYE_LEFT_VIEWPORT) ? -1.0 : 1.0); 
    9421000 
    9431001            // right viewport Camera 
    944             assignStereoCamera(view, ds, gc, 
     1002            osg::ref_ptr<osg::Camera> right_camera = assignStereoCamera(view, ds, gc, 
    9451003                               traits->width/2,0, traits->width/2, traits->height, traits->doubleBuffer ? GL_BACK : GL_FRONT, 
    9461004                               (ds->getSplitStereoHorizontalEyeMapping()==osg::DisplaySettings::LEFT_EYE_RIGHT_VIEWPORT) ? -1.0 : 1.0); 
    9471005 
    948             // for keystone: 
    949             // left camera to render to left texture using whole viewport of left texture 
    950             // right camera to render to right texture using whole viewport of right texture 
    951             // left keystone camera to render to left viewport/window 
    952             // right keystone camera to render to right viewport/window 
    953             // two keystone, one for each of the left and right viewports/windows 
    954  
     1006            if (keystone.valid()) 
     1007            { 
     1008                // for keystone: 
     1009                // left camera to render to left texture using whole viewport of left texture 
     1010                // right camera to render to right texture using whole viewport of right texture 
     1011                // left keystone camera to render to left viewport/window 
     1012                // right keystone camera to render to right viewport/window 
     1013                // two keystone, one for each of the left and right viewports/windows 
     1014 
     1015                // create distortion texture 
     1016                osg::ref_ptr<osg::Texture> left_texture = createKestoneDistortionTexture(traits->width/2, traits->height); 
     1017 
     1018                // convert to RTT Camera 
     1019                left_camera->setViewport(0, 0, traits->width/2, traits->height); 
     1020                left_camera->setDrawBuffer(GL_FRONT); 
     1021                left_camera->setReadBuffer(GL_FRONT); 
     1022                left_camera->setAllowEventFocus(true); 
     1023                left_camera->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT); 
     1024 
     1025                // attach the texture and use it as the color buffer. 
     1026                left_camera->attach(osg::Camera::COLOR_BUFFER, left_texture.get()); 
     1027 
     1028 
     1029                // create distortion texture 
     1030                osg::ref_ptr<osg::Texture> right_texture = createKestoneDistortionTexture(traits->width/2, traits->height); 
     1031 
     1032                // convert to RTT Camera 
     1033                right_camera->setViewport(0, 0, traits->width/2, traits->height); 
     1034                right_camera->setDrawBuffer(GL_FRONT); 
     1035                right_camera->setReadBuffer(GL_FRONT); 
     1036                right_camera->setAllowEventFocus(true); 
     1037                right_camera->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT); 
     1038 
     1039                // attach the texture and use it as the color buffer. 
     1040                right_camera->attach(osg::Camera::COLOR_BUFFER, right_texture.get()); 
     1041                 
     1042 
     1043                // create Keystone left distortion camera 
     1044                keystone->gridColour.set(1.0f,0.0f,0.0,1.0); 
     1045                osg::ref_ptr<osg::Camera> left_keystone_camera = assignKeystoneDistortionCamera(view, ds, gc.get(), 
     1046                                                                                0, 0, traits->width/2, traits->height, 
     1047                                                                                traits->doubleBuffer ? GL_BACK : GL_FRONT, 
     1048                                                                                left_texture, keystone.get()); 
     1049 
     1050                left_keystone_camera->setRenderOrder(osg::Camera::NESTED_RENDER, 2); 
     1051 
     1052                // attach Keystone editing event handler. 
     1053                left_keystone_camera->addEventCallback(new KeystoneHandler(keystone.get())); 
     1054 
     1055 
     1056                osg::ref_ptr<Keystone> right_keystone = new Keystone; 
     1057                right_keystone->gridColour.set(0.0f,1.0f,0.0,1.0); 
     1058                 
     1059                // create Keystone right distortion camera 
     1060                osg::ref_ptr<osg::Camera> right_keystone_camera = assignKeystoneDistortionCamera(view, ds, gc.get(), 
     1061                                                                                traits->width/2, 0, traits->width/2, traits->height, 
     1062                                                                                traits->doubleBuffer ? GL_BACK : GL_FRONT, 
     1063                                                                                right_texture, right_keystone.get()); 
     1064 
     1065                right_keystone_camera->setRenderOrder(osg::Camera::NESTED_RENDER, 3); 
     1066 
     1067                // attach Keystone editing event handler. 
     1068                right_keystone_camera->addEventCallback(new KeystoneHandler(right_keystone.get())); 
     1069 
     1070                view->getCamera()->setAllowEventFocus(false); 
     1071                 
     1072            } 
     1073             
    9551074            break; 
    9561075        }