1 /* -*-c++-*- 2 * 3 * Copyright (C) 2008 Stuart Buchanan 4 * 5 * This program is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU General Public License as 7 * published by the Free Software Foundation; either version 2 of the 8 * License, or (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, but 11 * WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 18 * MA 02110-1301, USA. 19 * 20 */ 21 22 #ifndef SHADER_GEOMETRY_HXX 23 #define SHADER_GEOMETRY_HXX 1 24 25 #include <vector> 26 27 #include <osg/Array> 28 #include <osg/BoundingBox> 29 #include <osg/CopyOp> 30 #include <osg/Drawable> 31 #include <osg/Geometry> 32 #include <osg/RenderInfo> 33 #include <osg/Vec3> 34 #include <osg/Vec4> 35 #include <osg/Version> 36 37 namespace simgear 38 { 39 40 class ShaderGeometry : public osg::Drawable 41 { 42 public: ShaderGeometry()43 ShaderGeometry() : 44 varieties(1) 45 { 46 setSupportsDisplayList(false); 47 } 48 ShaderGeometry(int v)49 ShaderGeometry(int v) : 50 varieties(v) 51 { 52 setSupportsDisplayList(false); 53 } 54 55 /** Copy constructor using CopyOp to manage deep vs shallow copy.*/ ShaderGeometry(const ShaderGeometry & ShaderGeometry,const osg::CopyOp & copyop=osg::CopyOp::SHALLOW_COPY)56 ShaderGeometry(const ShaderGeometry& ShaderGeometry,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY): 57 osg::Drawable(ShaderGeometry,copyop) {} 58 59 META_Object(flightgear, ShaderGeometry); 60 61 virtual void drawImplementation(osg::RenderInfo& renderInfo) const; 62 63 virtual osg::BoundingBox 64 #if OSG_VERSION_LESS_THAN(3,3,2) 65 computeBound() 66 #else 67 computeBoundingBox() 68 #endif 69 const; 70 setGeometry(osg::Geometry * geometry)71 void setGeometry(osg::Geometry* geometry) 72 { 73 _geometry = geometry; 74 } 75 76 void addObject(const osg::Vec3& position, float scale, int texture_index); 77 78 osg::ref_ptr<osg::Geometry> _geometry; 79 80 int varieties; 81 osg::ref_ptr<osg::Vec4Array> _posScaleArray; 82 osg::ref_ptr<osg::FloatArray> _vertexAttribArray; 83 84 protected: 85 ~ShaderGeometry()86 virtual ~ShaderGeometry() {} 87 }; 88 89 } 90 #endif 91