Hi Pete,

The osg::State object has a series of haveApplied methods to telling
it that external code has changed OpenGL state.  The OSG does lazy
state updating so needs to know the current state of OpenGL otherwise
it won't fix things it should otherwise do.

Your enabling of client state might work right now, but its not generally safe.

Paul Martz has had some experience with grafting the OSG into an app
which changed OpenGL state outwith the OSG so perhaps he can shed some
light on what might be the best way to tackle this state issue.

Robert.

On 6/14/07, Peter O <[EMAIL PROTECTED]> wrote:
Hi Guys,

I managed to find a way to take snapshots of the openGL state ( gDEBugger )
and it seems that QT calls
glEnableClientState(GL_VERTEX_ARRAY)  and
glDisableClientState(GL_VERTEX_ARRAY) during the drawLine
command. However, OSG requires the vertex array to be enabled. Adding the
line glEnableClientState(GL_VERTEX_ARRAY) to the paintEvent
method before calling any OSG commands seems to fix the problem ( at least
in this case ).

.....
    // Do our OSG stuff...
    glEnableClientState( GL_VERTEX_ARRAY );

    resizeGL( width(), height() );
    updateCamera();

    m_scene->update();
    m_scene->cull();
    m_scene->draw();
.....

Is there a nice way to get OSG to reset the OpenGL state to what it expects?

Cheers,

Pete.


On 6/12/07, Peter O < [EMAIL PROTECTED]> wrote:
> Hi Can,
>
> I'm glad I'm not the only one struggling with this ;)
>
> One of our longer term options is to re-implement some of our visuals in
OSG. However, unfortunately we have too many to do that in the short term.
>
> I think you must be right about the state change. I couldn't find any way
of dumping the whole OpenGL state but I did try outputting the model, view,
projection, and window matrices which all seem to be O.K.
>
> Cheers,
>
> Pete.
>
>
>
> On 6/12/07, Can Özmen < [EMAIL PROTECTED]> wrote:
> > Hi Peter,
> >
> > I was struggling with the same thing last week, but I gave up after a
> > few days. I ended up writing a class derived from QObject that
> > contains a osg::Camera node with orthographic projection to do the
> > drawing with OSG. Fortunately I have only a handful of widgets to
> > convert.
> >
> > BTW, is there a way to dump the OpenGL state after calling QPainter's
> > drawing methods? The .begin() and .end() by themselves don't seem to
> > cause any problems but maybe some state change is happening?
> >
> > Regards,
> > Can.
> >
> >
> > On 6/12/07, Peter O < [EMAIL PROTECTED]> wrote:
> > > No problem Robert. Thanks for having a look.
> > >
> > > Anyone else got any ideas?
> > >
> > > Cheers,
> > >
> > > Pete.
> > >
> > > On 6/12/07, Robert Osfield < [EMAIL PROTECTED]> wrote:
> > > > I'm afraid you're off the map w.r.t my experience with QT.
> > > >
> > > > On 6/12/07, Peter O < [EMAIL PROTECTED] > wrote:
> > > > > Hi Robert,
> > > > >
> > > > > Normally you would use paintGL. However, the QT overpainting
example
> > > says
> > > > > that to get overpainting to work you need to implement the
paintEvent
> > > method
> > > > > instead (which normally calls paintGL). The osg rendering code is
in
> > > that
> > > > > method sandwitched between the QPainter stuff.
> > > > >
> > > > > From the example doc:
> > > > >
> > > > > "In this example, we implement paintEvent() rather than paintGL()
to
> > > render
> > > > > our scene. When drawing on a QGLWidget, the paint engine used by
> > > QPainter
> > > > > performs certain operations that change the states of the OpenGL
> > > > > implementation's matrix and property stacks. Therefore, it is
necessary
> > > to
> > > > > construct a QPainter for use on the widget before making any
OpenGL
> > > calls."
> > > > >
> > > > >
http://doc.trolltech.com/4.3/opengl-overpainting.html
> > > > >
> > > > > Thanks again for helping.
> > > > >
> > > > > Cheers,
> > > > >
> > > > >
> > > > > Pete.
> > > > >
> > > > > On 6/12/07, Robert Osfield < [EMAIL PROTECTED] > wrote:
> > > > > > Why do you comment out the paintGL?  This is what should be
redrawing.
> > > >
> > > > > >
> > > > > > On 6/12/07, Peter O < [EMAIL PROTECTED]> wrote:
> > > > > > > Hi Robert,
> > > > > > >
> > > > > > > Sorry, I didn't want to just fire a lot of code at you but I
guess
> > > it
> > > > > would
> > > > > > > actually be quite helpful to see the whole thing ;) I've
attached
> > > the
> > > > > main
> > > > > > > viewer code at the end of this email.
> > > > > > >
> > > > > > >  At the moment, when mouse moves cause the camera to change
the
> > > update()
> > > > > > > method is called, triggering a paintEvent. Additionally, if
the
> > > window
> > > > > is
> > > > > > > resized a paintEvent will be triggered by QT.
> > > > > > >
> > > > > > > Cheers,
> > > > > > >
> > > > > > > Pete.
> > > > > > >
> > > > > > > P.S. I think you met one of my work collegues (Paul
Fotheringham) at
> > > the
> > > > > > > last Highland Gathering :)
> > > > > > >
> > > > > > > main.cpp
> > > > > > >
> > > > > > > int main( int argc, char **argv )
> > > > > > > {
> > > > > > >     QApplication a( argc, argv );
> > > > > > >
> > > > > > >     Viewer viewer( 0 );
> > > > > > >     viewer.setMaximumSize ( 500, 500 );
> > > > > > >     viewer.show();
> > > > > > >
> > > > > > >     for ( int i = 1; i < argc; ++i )
> > > > > > >     {
> > > > > > >        viewer.loadMesh( argv[ i ] );
> > > > > > >     }
> > > > > > >
> > > > > > >     return a.exec();
> > > > > > > }
> > > > > > >
> > > > > > > Viewer.h
> > > > > > >
> > > > > > > class Viewer : public QGLWidget
> > > > > > > {
> > > > > > >     Q_OBJECT
> > > > > > >
> > > > > > > public:
> > > > > > >     Viewer( QWidget* parent );
> > > > > > >
> > > > > > >     void loadMesh( const QString& );
> > > > > > >
> > > > > > >           osgUtil::SceneView* sceneView()       { return
> > > m_scene.get();
> > > > > }
> > > > > > >     const osgUtil::SceneView* sceneView() const { return
> > > m_scene.get();
> > > > > }
> > > > > > >
> > > > > > > protected:
> > > > > > >     virtual void initializeGL();
> > > > > > >     virtual void resizeGL( int, int );
> > > > > > >     //virtual void paintGL();
> > > > > > >
> > > > > > >     virtual void paintEvent            ( QPaintEvent * );
> > > > > > >     virtual void keyPressEvent         ( QKeyEvent   * );
> > > > > > >     virtual void mousePressEvent       ( QMouseEvent * );
> > > > > > >     virtual void mouseReleaseEvent     ( QMouseEvent * );
> > > > > > >     virtual void mouseDoubleClickEvent ( QMouseEvent * );
> > > > > > >     virtual void mouseMoveEvent        ( QMouseEvent * );
> > > > > > >
> > > > > > > private:
> > > > > > >     void updateCamera();
> > > > > > >     void zoom  (         int dy );
> > > > > > >     void rotate( int dx, int dy );
> > > > > > >     void pan   ( int dx, int dy );
> > > > > > >
> > > > > > >     // Data
> > > > > > >
> > > > > > >     // Mouse
> > > > > > >     QPoint  m_prevMouse;
> > > > > > >
> > > > > > >     // Camera
> > > > > > >     osg::Quat  m_cameraR;
> > > > > > >     osg::Vec3  m_orbitCentre;
> > > > > > >     float      m_dolly;
> > > > > > >
> > > > > > >     // OSG scene
> > > > > > >     osg::ref_ptr< osgUtil::SceneView > m_scene;
> > > > > > > };
> > > > > > >
> > > > > > > Viewer.cpp
> > > > > > >
> > > > > > > QGLFormat getPixelFormat()
> > > > > > > {
> > > > > > >     QGLFormat fmt;
> > > > > > >     fmt.setStencil(true);
> > > > > > >     return fmt;
> > > > > > > }
> > > > > > >
> > > > > > > Viewer::Viewer( QWidget* parent )
> > > > > > >     : QGLWidget( getPixelFormat(), parent )
> > > > > > >     , m_dolly( 0.2 )
> > > > > > > {
> > > > > > >     setFocusPolicy( Qt::StrongFocus );
> > > > > > >     setAttribute( Qt::WA_NoSystemBackground );
> > > > > > > }
> > > > > > >
> > > > > > > void Viewer::loadMesh( const QString& fileName )
> > > > > > > {
> > > > > > >     qDebug() << "Attempting to load: " << fileName;
> > > > > > >
> > > > > > >     osg::Node*const mesh = osgDB::readNodeFile(
> > > fileName.toStdString()
> > > > > );
> > > > > > >     if ( !mesh )
> > > > > > >     {
> > > > > > >         qWarning( "Mesh not loaded!" );
> > > > > > >     }
> > > > > > >
> > > > > > >
m_scene->getSceneData()->asGroup()->addChild(
> > > mesh
> > > > > );
> > > > > > > }
> > > > > > >
> > > > > > > void Viewer::initializeGL()
> > > > > > > {
> > > > > > >     m_scene = new osgUtil::SceneView;
> > > > > > >
> > > > > > >     m_scene->setDefaults();
> > > > > > >     m_scene->setClearColor( osg::Vec4( 247.0 / 255.0, 150.0 /
255.0,
> > > > > 150.0 /
> > > > > > > 255.0, 1.0) );
> > > > > > >     m_scene->getState()->setContextID(
> > > > > > > osg::GraphicsContext::createNewContextID() );
> > > > > > >
> > > > > > >     m_scene->setNearFarRatio( 0.02f );
> > > > > > >
> > > > > > >     m_scene->setSceneData( new osg::Group );
> > > > > > >
> > > > > > >     updateCamera();
> > > > > > > }
> > > > > > >
> > > > > > > void Viewer::resizeGL( int w, int h)
> > > > > > > {
> > > > > > >     qDebug() << "ResizeGL: " << w << " " << h;
> > > > > > >
> > > > > > >     m_scene->setViewport( 0, 0, w, h );
> > > > > > >
> > > > > > >     const float VFOV = 30.f;
> > > > > > >     const float ASPECT_RATIO = static_cast< float >( w ) /
> > > > > > >                                static_cast<
float
> > > >( h
> > > > > );
> > > > > > >     const float Z_N = 0.002f;
> > > > > > >     const float Z_F = 1.000f;
> > > > > > >
> > > > > > >     osg::Matrix projection;
> > > > > > >     projection.makePerspective( VFOV, ASPECT_RATIO, Z_N, Z_F
);
> > > > > > >
> > > > > > >     m_scene->setProjectionMatrix( projection );
> > > > > > > }
> > > > > > >
> > > > > > >
> > > > > > > void Viewer::paintEvent( QPaintEvent * )
> > > > > > > {
> > > > > > >     qDebug() << "PaintEvent";
> > > > > > >
> > > > > > >     QPainter painter;
> > > > > > >     painter.begin(this);
> > > > > > >     painter.setRenderHint(QPainter::Antialiasing);
> > > > > > >     painter.setBrush( Qt::red );
> > > > > > >
> > > > > > >     // Preserve the current GL state.
> > > > > > >     glPushAttrib( GL_ALL_ATTRIB_BITS );
> > > > > > >     glMatrixMode(GL_PROJECTION);
> > > > > > >     glPushMatrix();
> > > > > > >     glMatrixMode(GL_TEXTURE);
> > > > > > >     glPushMatrix();
> > > > > > >     glMatrixMode(GL_MODELVIEW);
> > > > > > >     glPushMatrix();
> > > > > > >
> > > > > > >     // Do our OSG stuff...
> > > > > > >     resizeGL( width(), height() );
> > > > > > >     updateCamera();
> > > > > > >
> > > > > > >     m_scene->update();
> > > > > > >     m_scene->cull();
> > > > > > >     m_scene->draw();
> > > > > > >
> > > > > > >     // Restore the old GL state.
> > > > > > >     glMatrixMode(GL_TEXTURE);
> > > > > > >     glPopMatrix();
> > > > > > >     glMatrixMode(GL_PROJECTION);
> > > > > > >     glPopMatrix();
> > > > > > >     glMatrixMode(GL_MODELVIEW);
> > > > > > >     glPopMatrix();
> > > > > > >     glPopAttrib();
> > > > > > >
> > > > > > >     // Comment out the following line to make everything work.
> > > > > > >     painter.drawLine( 0, 0, width(), height() );
> > > > > > >
> > > > > > >     painter.end();
> > > > > > >
> > > > > > > }
> > > > > > >
> > > > > > > void Viewer::keyPressEvent ( QKeyEvent * k )
> > > > > > > {
> > > > > > >     switch ( k->key() )
> > > > > > >     {
> > > > > > >         case Qt::Key_Q:
> > > > > > >             QApplication::exit();
> > > > > > >             break;
> > > > > > >      }
> > > > > > > }
> > > > > > >
> > > > > > > void Viewer::mousePressEvent( QMouseEvent * e )
> > > > > > > {
> > > > > > >     qDebug() << "mousePressEvent:";
> > > > > > >
> > > > > > >     m_prevMouse = e->pos();
> > > > > > >
> > > > > > >     e->accept();
> > > > > > > }
> > > > > > >
> > > > > > > void Viewer::mouseReleaseEvent( QMouseEvent * e )
> > > > > > > {
> > > > > > >     e->accept();
> > > > > > > }
> > > > > > >
> > > > > > > void Viewer::mouseDoubleClickEvent( QMouseEvent * e )
> > > > > > > {
> > > > > > >     e->ignore();
> > > > > > > }
> > > > > > >
> > > > > > > void Viewer::mouseMoveEvent( QMouseEvent * e )
> > > > > > > {
> > > > > > >     const int dx = e->x() - m_prevMouse.x();
> > > > > > >     const int dy = e->y() - m_prevMouse.y();
> > > > > > >
> > > > > > >     m_prevMouse = e->pos();
> > > > > > >
> > > > > > >     const bool panFlag    = ( e->buttons() & Qt::MidButton
);
> > > > > > >     const bool rotateFlag = ( e->buttons() & Qt::LeftButton
);
> > > > > > >     const bool zoomFlag   = ( e->buttons() & Qt::RightButton
);
> > > > > > >
> > > > > > >
> > > > > > >     if ( zoomFlag )
> > > > > > >     {
> > > > > > >         zoom( dy );
> > > > > > >     }
> > > > > > >     else if ( rotateFlag )
> > > > > > >     {
> > > > > > >         rotate( dx, dy );
> > > > > > >     }
> > > > > > >     else if ( panFlag )
> > > > > > >     {
> > > > > > >         pan( dx, dy );
> > > > > > >     }
> > > > > > >
> > > > > > >     updateCamera();
> > > > > > >     update();
> > > > > > >
> > > > > > >     e->accept();
> > > > > > > }
> > > > > > >
> > > > > > > void Viewer::updateCamera()
> > > > > > > {
> > > > > > >     qDebug() << "Update Camera";
> > > > > > >
> > > > > > >     osg::Matrix vm = osg::Matrix::translate( -m_orbitCentre );
> > > > > > >     vm *= osg::Matrix::rotate( m_cameraR.conj() );
> > > > > > >     vm.setTrans( vm.getTrans () + osg::Vec3( 0., 0., -m_dolly
) );
> > > > > > >
> > > > > > >     m_scene->setViewMatrix( vm );
> > > > > > > }
> > > > > > >
> > > > > > > void Viewer::rotate( int dx, int dy )
> > > > > > > {
> > > > > > >     const double ROTATE_FACTOR = 0.002 * osg::PI;
> > > > > > >
> > > > > > >     const float   cameraYawChange = -dx * ROTATE_FACTOR;
> > > > > > >     const float cameraPitchChange = -dy * ROTATE_FACTOR;
> > > > > > >
> > > > > > >     m_cameraR  = osg::Quat( cameraPitchChange, osg::Vec3( 1.,
0., 0.
> > > ) )
> > > > > *
> > > > > > > m_cameraR;
> > > > > > >     m_cameraR *= osg::Quat( cameraYawChange  , osg::Vec3( 0.,
1., 0.
> > > )
> > > > > );
> > > > > > > }
> > > > > > >
> > > > > > > void Viewer::zoom( int dy )
> > > > > > > {
> > > > > > >     const float MIN_DOLLY   = 5.e-2f;
> > > > > > >     const float MAX_DOLLY   = 2.e+0f;
> > > > > > >     const float ZOOM_SCALE = 0.002;
> > > > > > >
> > > > > > >     if ( m_dolly <= MIN_DOLLY && dy < 0 )
> > > > > > >     {
> > > > > > >         const double PAN_FORWARD_FACTOR = ZOOM_SCALE *
MIN_DOLLY;
> > > > > > >
> > > > > > >         const osg::Vec3 cameraZInWorld = m_cameraR *
osg::Vec3( 0.,
> > > 0.,
> > > > > 1.
> > > > > > > );
> > > > > > >
> > > > > > >         m_orbitCentre += cameraZInWorld * ( dy *
PAN_FORWARD_FACTOR
> > > );
> > > > > > >
> > > > > > >         m_dolly = MIN_DOLLY;
> > > > > > >     }
> > > > > > >     else if ( m_dolly >= MAX_DOLLY && dy > 0 )
> > > > > > >     {
> > > > > > >         m_dolly = MAX_DOLLY;
> > > > > > >     }
> > > > > > >     else
> > > > > > >     {
> > > > > > >         const float deltaDolly = dy * ZOOM_SCALE * m_dolly;
> > > > > > >
> > > > > > >         m_dolly += deltaDolly;
> > > > > > >
> > > > > > >         if ( m_dolly > MAX_DOLLY )
> > > > > > >              m_dolly  = MAX_DOLLY;
> > > > > > >         else if ( m_dolly < MIN_DOLLY )
> > > > > > >             m_dolly = MIN_DOLLY;
> > > > > > >     }
> > > > > > > }
> > > > > > >
> > > > > > > void Viewer::pan( int dx, int dy )
> > > > > > > {
> > > > > > >     const float PAN_FACTOR = 0.002;
> > > > > > >
> > > > > > >      const osg::Vec3 cameraXInWorld = m_cameraR * osg::Vec3(
1., 0.,
> > > 0.
> > > > > );
> > > > > > >     const osg::Vec3 cameraYInWorld = m_cameraR * osg::Vec3(
0., 1.,
> > > 0.
> > > > > );
> > > > > > >
> > > > > > >     double deltaPanX = double(  dx ) * PAN_FACTOR * m_dolly;
> > > > > > >      m_orbitCentre -= cameraXInWorld * deltaPanX;
> > > > > > >
> > > > > > >     double deltaPanY = double( -dy ) * PAN_FACTOR * m_dolly;
> > > > > > >     m_orbitCentre -= cameraYInWorld * deltaPanY;
> > > > > > >
> > > > > > > }
> > > > > > >
> > > > > > > On 6/12/07, Robert Osfield < [EMAIL PROTECTED] > wrote:
> > > > > > > > Hi Peter,
> > > > > > > >
> > > > > > > > How do you call the OSG to rendering i.e. your paintGL()
method ?
> > > I
> > > > > > > > can only see set up code in you snippets.
> > > > > > > >
> > > > > > > > On 6/12/07, Peter O <[EMAIL PROTECTED] > wrote:
> > > > > > > > > Hi Robert,
> > > > > > > > >
> > > > > > > > > Thanks for the reply.
> > > > > > > > >
> > > > > > > > > Basically, we have a big QT based application with 2D
visuals
> > > which
> > > > > > > appear
> > > > > > > > > in normal QT widgets and 3D visuals which we draw using
OSG
> > > inside
> > > > > > > > > QGLWidgets. However, ultimately we would like to be able
to draw
> > > the
> > > > > 2D
> > > > > > > > > visuals directly over the 3D scene.
> > > > > > > > >
> > > > > > > > > We are using QT 4.3.0 and OSG 1.2.
> > > > > > > > >
> > > > > > > > > My update camera method just sets the view matrix based on
some
> > > > > current
> > > > > > > > > dolly and rotation parameters.
> > > > > > > > >
> > > > > > > > > void Viewer::updateCamera()
> > > > > > > > > {
> > > > > > > > >     qDebug() << "Update Camera";
> > > > > > > > >
> > > > > > > > >     osg::Matrix vm = osg::Matrix::translate( -orbitCentre
);
> > > > > > > > >     vm *= osg::Matrix::rotate( cameraR.conj() );
> > > > > > > > >     vm.setTrans( vm.getTrans() + osg::Vec3( 0., 0., -dolly
) );
> > > > > > > > >
> > > > > > > > >     m_scene->setViewMatrix( vm );
> > > > > > > > > }
> > > > > > > > >
> > > > > > > > > The resizeGL method updates the viewport and projection
matrix.
> > > > > > > > >
> > > > > > > > > void Viewer::resizeGL( int w, int h)
> > > > > > > > > {
> > > > > > > > >     qDebug() << "ResizeGL: " << w << " " << h;
> > > > > > > > >
> > > > > > > > >     m_scene->setViewport( 0, 0, w, h );
> > > > > > > > >
> > > > > > > > >     const float VFOV = 30.f;
> > > > > > > > >     const float ASPECT_RATIO = static_cast< float >( w ) /
> > > > > > > > >
static_cast<
> > > float
> > > > > >( h
> > > > > > > );
> > > > > > > > >      const float Z_N = 0.002f;
> > > > > > > > >     const float Z_F = 1.000f;
> > > > > > > > >
> > > > > > > > >     osg::Matrix projection;
> > > > > > > > >     projection.makePerspective( VFOV, ASPECT_RATIO, Z_N,
Z_F );
> > > > > > > > >
> > > > > > > > >     m_scene->setProjectionMatrix( projection );
> > > > > > > > > }
> > > > > > > > >
> > > > > > > > > The m_scene variable in the paint event method is a
> > > > > osgUtil::SceneView
> > > > > > > which
> > > > > > > > > is set up in the initializeGL method.
> > > > > > > > >
> > > > > > > > > void Viewer::initializeGL()
> > > > > > > > > {
> > > > > > > > >     m_scene = new osgUtil::SceneView;
> > > > > > > > >
> > > > > > > > >     m_scene->setDefaults();
> > > > > > > > >     m_scene->setClearColor( osg::Vec4( 247.0 / 255.0,
150.0 /
> > > 255.0,
> > > > > > > 150.0 /
> > > > > > > > > 255.0, 1.0) );
> > > > > > > > >     m_scene->getState()->setContextID(
> > > > > > > > >
osg::GraphicsContext::createNewContextID() );
> > > > > > > > >
> > > > > > > > >     m_scene->setNearFarRatio( 0.02f );
> > > > > > > > >
> > > > > > > > >     m_scene->setSceneData( new osg::Group );
> > > > > > > > >
> > > > > > > > >     updateCamera();
> > > > > > > > > }
> > > > > > > > >
> > > > > > > > > If the drawLine command is commented out of the paintEvent
> > > > > everything
> > > > > > > works
> > > > > > > > > otherwise as I said the 3D mesh only appears to be drawn
on the
> > > > > first
> > > > > > > paint
> > > > > > > > > event after it is loaded then on the next paint event it
> > > disappears.
> > > > > > > > >
> > > > > > > > > The mesh is added to the scene view using:
> > > > > > > > >
> > > > > > > > >
m_scene->getSceneData()->asGroup()->addChild(
> > > mesh
> > > > > );
> > > > > > > > >
> > > > > > > > > Thanks for any help / suggestions,
> > > > > > > > >
> > > > > > > > > Pete.
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > On 6/12/07, Robert Osfield < [EMAIL PROTECTED]>
wrote:
> > > > > > > > > > Hi Peter,
> > > > > > > > > >
> > > > > > > > > > What be hidden inside the updateCamera() call???
> > > > > > > > > >
> > > > > > > > > > Why use overpainting?  What effect are you after?
> > > > > > > > > >
> > > > > > > > > > Robert.
> > > > > > > > > >
> > > > > > > > > > On 6/11/07, Peter O < [EMAIL PROTECTED] >
wrote:
> > > > > > > > > > > Hi,
> > > > > > > > > > >
> > > > > > > > > > > I'm trying to adapt the QT overpainting example (
drawing 2D
> > > > > > > primitives
> > > > > > > > > and
> > > > > > > > > > > text over a 3D scene ) to use osg instead of raw
openGL.
> > > > > However,
> > > > > > > the
> > > > > > > > > mesh
> > > > > > > > > > > I'm drawing only appears for the first paintEvent and
then
> > > > > > > disappears
> > > > > > > > > from
> > > > > > > > > > > the view. If I comment out any qpainter draw commands
the
> > > mesh
> > > > > is
> > > > > > > > > correctly
> > > > > > > > > > > redrawn and can be rotated etc.
> > > > > > > > > > >
> > > > > > > > > > > Has anyone managed to get overpainting to work with
osg?
> > > > > > > > > > >
> > > > > > > > > > > Here is my paintEvent method in case anyone can spot
any
> > > obvious
> > > > > > > errors:
> > > > > > > > > > >
> > > > > > > > > > > void Viewer::paintEvent( QPaintEvent * )
> > > > > > > > > > > {
> > > > > > > > > > >     qDebug() << "PaintEvent";
> > > > > > > > > > >
> > > > > > > > > > >     QPainter painter;
> > > > > > > > > > >     painter.begin(this);
> > > > > > > > > > >     painter.setRenderHint (QPainter::Antialiasing);
> > > > > > > > > > >     painter.setBrush( Qt::red );
> > > > > > > > > > >
> > > > > > > > > > >     // Preserve the current GL state.
> > > > > > > > > > >     glPushAttrib( GL_ALL_ATTRIB_BITS );
> > > > > > > > > > >     glMatrixMode(GL_PROJECTION);
> > > > > > > > > > >     glPushMatrix();
> > > > > > > > > > >     glMatrixMode(GL_TEXTURE);
> > > > > > > > > > >     glPushMatrix();
> > > > > > > > > > >     glMatrixMode(GL_MODELVIEW);
> > > > > > > > > > >     glPushMatrix();
> > > > > > > > > > >
> > > > > > > > > > >     // Do our OSG stuff...
> > > > > > > > > > >     /resizeGL( width(), height() );
> > > > > > > > > > >     updateCamera();
> > > > > > > > > > >
> > > > > > > > > > >     m_scene->update();
> > > > > > > > > > >     m_scene->cull();
> > > > > > > > > > >     m_scene->draw();
> > > > > > > > > > >
> > > > > > > > > > >     // Restore the old GL state.
> > > > > > > > > > >     glMatrixMode(GL_TEXTURE);
> > > > > > > > > > >     glPopMatrix();
> > > > > > > > > > >     glMatrixMode(GL_PROJECTION);
> > > > > > > > > > >     glPopMatrix();
> > > > > > > > > > >     glMatrixMode(GL_MODELVIEW);
> > > > > > > > > > >     glPopMatrix();
> > > > > > > > > > >     glPopAttrib();
> > > > > > > > > > >
> > > > > > > > > > >     painter.drawLine ( 0, 0, width(), height() );
> > > > > > > > > > >
> > > > > > > > > > >     painter.end();
> > > > > > > > > > >
> > > > > > > > > > > }
> > > > > > > > > > >
> > > > > > > > > > > Thanks in advance for any tips or help.
> > > > > > > > > > >
> > > > > > > > > > > Pete.
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > _______________________________________________
> > > > > > > > > > > osg-users mailing list
> > > > > > > > > > > osg-users@openscenegraph.net
> > > > > > > > > > >
> > > > > > >
> > > http://openscenegraph.net/mailman/listinfo/osg-users
> > > > > > > > > > > http://www.openscenegraph.org/
> > > > > > > > > > >
> > > > > > > > > >
> > > _______________________________________________
> > > > > > > > > > osg-users mailing list
> > > > > > > > > > osg-users@openscenegraph.net
> > > > > > > > > >
> > > > >
http://openscenegraph.net/mailman/listinfo/osg-users
> > > > > > > > > > http://www.openscenegraph.org/
> > > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > >
> > >
> > > _______________________________________________
> > > osg-users mailing list
> > > osg-users@openscenegraph.net
> > > http://openscenegraph.net/mailman/listinfo/osg-users
> > > http://www.openscenegraph.org/
> > >
> >
> >
> > --
> > Can Ozmen
> > ________________________
> > Computer Graphics Lab.
> > Sabanci University, Turkey
> >
> > phone: +(90) 216 483 9000 ext 2321
> > http://graphics.sabanciuniv.edu
> > http://students.sabanciuniv.edu/~canozmen
> > _______________________________________________
> > osg-users mailing list
> > osg-users@openscenegraph.net
> > http://openscenegraph.net/mailman/listinfo/osg-users
> > http://www.openscenegraph.org/
> >
>
>


_______________________________________________
osg-users mailing list
osg-users@openscenegraph.net
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/

_______________________________________________
osg-users mailing list
osg-users@openscenegraph.net
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/

Reply via email to