Fixes for Java build.

This commit is contained in:
Robert Osfield 2003-08-18 09:24:17 +00:00
parent 07f120fb1c
commit 8c65920c1f
5 changed files with 14 additions and 206 deletions

View File

@ -481,7 +481,7 @@ class SG_EXPORT Texture : public osg::StateAttribute
mutable TextureObjectBuffer _textureObjectBuffer; mutable TextureObjectBuffer _textureObjectBuffer;
class TextureObjectManager : public osg::Referenced class SG_EXPORT TextureObjectManager : public osg::Referenced
{ {
public: public:

View File

@ -151,6 +151,8 @@ namespace osgParticle
/// Update the particles. Don't call this directly, use a <CODE>ParticleSystemUpdater</CODE> instead. /// Update the particles. Don't call this directly, use a <CODE>ParticleSystemUpdater</CODE> instead.
virtual void update(double dt); virtual void update(double dt);
virtual void drawImplementation(osg::State &state) const;
protected: protected:
virtual ~ParticleSystem(); virtual ~ParticleSystem();
@ -158,7 +160,6 @@ namespace osgParticle
ParticleSystem &operator=(const ParticleSystem &) { return *this; } ParticleSystem &operator=(const ParticleSystem &) { return *this; }
inline virtual bool computeBound() const; inline virtual bool computeBound() const;
virtual void drawImplementation(osg::State &state) const;
inline void update_bounds(const osg::Vec3 &p, float r); inline void update_bounds(const osg::Vec3 &p, float r);
void single_pass_render(osg::State &state, const osg::Matrix &modelview) const; void single_pass_render(osg::State &state, const osg::Matrix &modelview) const;

View File

@ -1,69 +0,0 @@
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2003 Robert Osfield
*
* This library is open source and may be redistributed and/or modified under
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
* (at your option) any later version. The full license is in LICENSE file
* included with this distribution, and on the openscenegraph.org website.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* OpenSceneGraph Public License for more details.
*/
// PickIntersectVisitor == Pick visitor - used for screen based picking
// based on osgUtil::IntersectVisitor BUT
// traversing into Projection Nodes using the modified projections.
// also supplies high level intersector for 'what is under a pixel in a sceneview'
// GWM Feb 2003.
#ifndef OSGUTIL_PICKINTERSECTVISITOR
#define OSGUTIL_PICKINTERSECTVISITOR 1
#include <osgUtil/IntersectVisitor>
#include <osgUtil/SceneView>
namespace osgUtil {
// PickIntersectVisitor simplifies picking - routines take x,y mouse pixel & detect hits
class OSGUTIL_EXPORT PickIntersectVisitor : public IntersectVisitor
{
public:
PickIntersectVisitor()
{
setNodeMaskOverride(0xffffffff); // need to make the visitor override the nodemask to visit invisible actions
}
~PickIntersectVisitor() { }
HitList& getHits(osgUtil::SceneView *, int x, int y);
HitList& PickIntersectVisitor::getIntersections(osg::Node *scene, osg::Vec3 nr, osg::Vec3 fr);
private:
osg::ref_ptr<osg::LineSegment> _lineSegment;
friend class osgUtil::IntersectVisitor;
};
// PickVisitor traverses whole scene and checks below all Projection nodes
class OSGUTIL_EXPORT PickVisitor : public osg::NodeVisitor
{
public:
PickVisitor()
{
xp=yp=0;
setNodeMaskOverride(0xffffffff); // need to make the visitor override the nodemask to visit invisible actions
setTraversalMode(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN);
}
~PickVisitor() { }
virtual void apply(osg::Projection& pr);
osgUtil::IntersectVisitor::HitList& getHits(osg::Node *nd, const osg::Matrix &projm, const float x, const float y);
osgUtil::IntersectVisitor::HitList& getHits(osgUtil::SceneView *, double x, double y);
osgUtil::IntersectVisitor::HitList & getHits(osg::Node *nd, const osg::Vec3 near_point, const osg::Vec3 far_point);
osgUtil::IntersectVisitor::HitList& getHits(void);
inline void setxy(float xpt, float ypt) { xp=xpt; yp=ypt; }
inline bool hits() { return _PIVsegHitList.size()>0;}
private:
PickIntersectVisitor _piv;
float xp, yp; // start point in viewport fraction coordiantes
osgUtil::IntersectVisitor::HitList _PIVsegHitList;
};
}// namespace osgUtil
#endif // match OSGUTIL_PICKINTERSECTVISITOR

View File

@ -74,6 +74,8 @@ class Statistics : public osg::Drawable::PrimitiveFunctor
void setType(statsType t) {stattype=t;} void setType(statsType t) {stattype=t;}
virtual void setVertexArray(unsigned int count,const osg::Vec3*) { _vertexCount += count; } virtual void setVertexArray(unsigned int count,const osg::Vec3*) { _vertexCount += count; }
virtual void setVertexArray(unsigned int count,const osg::Vec2*) { _vertexCount += count; }
virtual void setVertexArray(unsigned int count,const osg::Vec4*) { _vertexCount += count; }
virtual void drawArrays(GLenum mode,GLint,GLsizei count) virtual void drawArrays(GLenum mode,GLint,GLsizei count)
{ {
@ -111,18 +113,20 @@ class Statistics : public osg::Drawable::PrimitiveFunctor
++prim.first; ++prim.first;
_number_of_vertexes = 0; _number_of_vertexes = 0;
} }
virtual void vertex(const osg::Vec3&)
inline void vertex()
{ {
PrimitivePair& prim = _primitiveCount[_currentPrimtiveFunctorMode]; PrimitivePair& prim = _primitiveCount[_currentPrimtiveFunctorMode];
++prim.second; ++prim.second;
_number_of_vertexes++; _number_of_vertexes++;
} }
virtual void vertex(float,float,float) virtual void vertex(float,float,float) { vertex(); }
{ virtual void vertex(const osg::Vec3&) { vertex(); }
PrimitivePair& prim = _primitiveCount[_currentPrimtiveFunctorMode]; virtual void vertex(const osg::Vec2& vert) { vertex(); }
++prim.second; virtual void vertex(const osg::Vec4& vert) { vertex(); }
_number_of_vertexes++; virtual void vertex(float x,float y) { vertex(); }
} virtual void vertex(float x,float y,float z,float w) { vertex(); }
virtual void end() virtual void end()
{ {
_primitives_count[_currentPrimtiveFunctorMode] += _primitives_count[_currentPrimtiveFunctorMode] +=

View File

@ -1,128 +0,0 @@
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2003 Robert Osfield
*
* This library is open source and may be redistributed and/or modified under
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
* (at your option) any later version. The full license is in LICENSE file
* included with this distribution, and on the openscenegraph.org website.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* OpenSceneGraph Public License for more details.
*/
#include <osgUtil/PickVisitor>
#include <osgUtil/SceneView>
#include <osg/Projection>
using namespace osg;
using namespace osgUtil;
osgUtil::IntersectVisitor::HitList & PickIntersectVisitor::getHits(osgUtil::SceneView *scv, int x, int y)
{ // High level get intersection with sceneview using a ray from x,y on the screen
int x0,y0,width,height;
scv->getViewport(x0, y0, width, height);
// setxy(-1+2*(float)(x-x0)/(float)width, 1-2*(float)(y-y0)/(float)height);
// sets xp,yp as pixels scaled to a mapping of (-1,1, -1,1); needed for Projection from x,y pixels
osg::Vec3 near_point,far_point;
// get ends of line segment perpendicular to screen:
if (!scv->projectWindowXYIntoObject(x,height-y,near_point,far_point))
{
osg::notify(osg::NOTICE) << "PickIntersect failed to calculate intersection ray."<< std::endl;
return getHitList(NULL); // empty;
}
return getIntersections(scv->getSceneData(),near_point,far_point);
}
osgUtil::IntersectVisitor::HitList & PickIntersectVisitor::getIntersections(osg::Node *scene,
osg::Vec3 near_point,osg::Vec3 far_point)
{
// option for non-sceneView users: you need to get the screen perp line and call getIntersections
// if you are using Projection nodes you should also call setxy to define the xp,yp positions for use with
// the ray transformed by Projection
_lineSegment = new osg::LineSegment;
_lineSegment->set(near_point,far_point); // make a line segment
addLineSegment(_lineSegment.get());
scene->accept(*this);
return getHitList(_lineSegment.get());
}
// pickvisitor - top level; test main scenegraph than traverse to lower Projections
osgUtil::IntersectVisitor::HitList & PickVisitor::getHits(osg::Node *nd, const osg::Vec3 near_point, const osg::Vec3 far_point)
{
// High level get intersection with sceneview using a ray from x,y on the screen
// sets xp,yp as pixels scaled to a mapping of (-1,1, -1,1); needed for Projection from x,y pixels
// first get the standard hits in un-projected nodes
_PIVsegHitList=_piv.getIntersections(nd,near_point,far_point); // fill hitlist
// then get hits in projection nodes
traverse(*(nd)); // check for projection nodes
return _PIVsegHitList;
}
osgUtil::IntersectVisitor::HitList & PickVisitor::getHits(osgUtil::SceneView *scv, const double x, const double y)
{
// High level get intersection with sceneview using a ray from x,y on the screen
int x0,y0,width,height;
scv->getViewport(x0, y0, width, height);
setxy(-1+2*(float)(x-x0)/(float)width, 1-2*(float)(y-y0)/(float)height);
// sets xp,yp as pixels scaled to a mapping of (-1,1, -1,1); needed for Projection from x,y pixels
osg::Vec3 near_point,far_point;
// get ends of line segment perpendicular to screen:
if (!scv->projectWindowXYIntoObject(x,height-y,near_point,far_point))
{
osg::notify(osg::NOTICE) << "PickIntersect failed to calculate intersection ray."<< std::endl;
return _piv.getHitList(NULL); // empty;
}
osg::Node *nd=scv->getSceneData();
getHits(nd, near_point,far_point);
return _PIVsegHitList;
}
osgUtil::IntersectVisitor::HitList & PickVisitor::getHits(void)
{
// High level return current intersections
return _PIVsegHitList;
}
osgUtil::IntersectVisitor::HitList& PickVisitor::getHits(osg::Node *scene,
const osg::Matrix &projm, const float x, const float y)
{
// utility for non=sceneview viewers
// x,y are values returned by
osg::Matrix inverseMVPW;
inverseMVPW.invert(projm);
// float ix=0.5f+0.5f*x, iy=0.5f+0.5f*y; // for this purpose, range from 0-1
osg::Vec3 near_point = osg::Vec3(x,y,1.0f)*inverseMVPW;
osg::Vec3 far_point = osg::Vec3(x,y,-1.0f)*inverseMVPW;
setxy(x,y);
getHits(scene,near_point,far_point);
return _PIVsegHitList;
}
void PickVisitor::apply(osg::Projection& pr)
{ // stack the intersect rays, transform to new projection, traverse
// Assumes that the Projection is an absolute projection
osg::Matrix mt;
mt.invert(pr.getMatrix());
osg::Vec3 npt=osg::Vec3(xp,yp,1.0f) * mt, farpt=osg::Vec3(xp,yp,-1.0f) * mt;
// traversing the nodes children, using the projection direction
for (unsigned int i=0; i<pr.getNumChildren(); i++)
{
osg::Node *nodech=pr.getChild(i);
osgUtil::IntersectVisitor::HitList &hli=_piv.getIntersections(nodech,npt, farpt);
for(osgUtil::IntersectVisitor::HitList::iterator hitr=hli.begin();
hitr!=hli.end();
++hitr)
{ // add the projection hits to the scene hits.
// This is why _lineSegment is retained as a member of PickIntersectVisitor
_PIVsegHitList.push_back(*hitr);
}
traverse(*nodech);
}
}