This file is indexed.

/usr/include/osgEarthUtil/RTTPicker is in libosgearth-dev 2.9.0+dfsg-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/* -*-c++-*- */
/* osgEarth - Dynamic map generation toolkit for OpenSceneGraph
 * Copyright 2016 Pelican Mapping
 * http://osgearth.org
 *
 * osgEarth is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program 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
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>
 */

#ifndef OSGEARTH_UTIL_RTT_PICKER_H
#define OSGEARTH_UTIL_RTT_PICKER_H 1

#include <osgEarthUtil/Common>
#include <osgEarth/Picker>
#include <osgEarth/VirtualProgram>
#include <osg/Group>
#include <osg/Image>
#include <osg/Texture2D>
#include <queue>
#include <list>

namespace osgEarth { namespace Util
{
    /**
     * Picks objects using an RTT camera and Vertex Attributes.
     *
     * Note. The Picker will change the View Slave configuration in OSG,
     * so you should call Viewer::stopThreading() before adding or
     * removing a picker, and Viewer::startThreading when you're done.
     */
    class OSGEARTHUTIL_EXPORT RTTPicker : public osgEarth::Picker
    {
    public:
        /**
         * Creates a new RTT-based object picker.
         * @param cameraSize Size of the RTT picking viewpoint.
         */
        RTTPicker(int cameraSize =256);

        /**
         * Number of pixels on each side of the clicked pixel to check for hits.
         */
        void setBuffer(int value) { _buffer = value; }
        int getBuffer() const { return _buffer; }
        
        /**
         * Sets a default callback to use when installing the Picker as an EventHandler
         * or when calling pick() with no callback.
         */
        void setDefaultCallback(Callback* value) { _defaultCallback = value; }

        /**
         * Convenience function that invokes "pick" with no callback, which will cause
         * this picker to use the default callback installed with setDefaultCallback.
         */
        bool pick(osg::View* view, float mouseX, float mouseY);


    public: // osgEarth::Picker

        /**
         * Starts a pick operation. When the operation completes, invokes the callback
         * with the results. You can use this method if you want to use the picker directly
         * WITHOUT installing it as an EventHandler. If you use it as an EventHandler, you
         * do NOT need to call this method directly; the Picker will call it upon handling
         * a pick event (i.e., when Callback::accept returns true).
         *
         * Returns true if the pick was successfully queued; false if not.
         */
        virtual bool pick(osg::View* view, float mouseX, float mouseY, Callback* callback);


    public: // osgGA::GUIEventHandler

        virtual bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa);


    public: // simulate osg::Group

        virtual bool addChild(osg::Node* child);
        virtual bool insertChild(unsigned i, osg::Node* child);
        virtual bool removeChild(osg::Node* child);
        virtual bool replaceChild(osg::Node* oldChild, osg::Node* newChild);

    public: // simulate osg::Camera cull mask methods

        /** Specifies the cull mask for the RTT camera */
        void setCullMask(osg::Node::NodeMask nm);
        osg::Node::NodeMask getCullMask() const { return _cullMask; }


    public: // for debugging

        /** For debugging only - creates (if nec.) and returns a texture that captures
            the RTT image so you can display it. */
        osg::Texture2D* getOrCreateTexture(osg::View* View);

    protected:

        /** dtor */
        virtual ~RTTPicker();

        // builds the shaders for rendering to the pick camera. 
        VirtualProgram* createRTTProgram();
        
        int                    _rttSize;     // size of the RTT image (pixels per side)
        int                    _buffer;      // buffer around pick point to check (pixels)
        osg::Node::NodeMask    _cullMask;    // cull mask applied to the camera
        osg::ref_ptr<Callback> _defaultCallback;

        // Associates a view and a pick camera for that view.
        struct PickContext
        {
            osg::observer_ptr<osg::View> _view;
            osg::ref_ptr<osg::Camera>    _pickCamera;
            osg::ref_ptr<osg::Image>     _image;
            osg::ref_ptr<osg::Texture2D> _tex;
            int _numPicks;
        };
        // use a container that does not invalidate iters on insertion, since we hold
        // pointers to PickContext objects in the _picks member
        typedef std::list<PickContext> PickContexts;
        PickContexts _pickContexts;
        
        // Creates a new pick context on demand.
        PickContext& getOrCreatePickContext(osg::View* view);
        
        // A single pick operation (within a pick context).
        struct Pick
        {
            float                  _u, _v;
            osg::ref_ptr<Callback> _callback;
            unsigned               _frame;
            PickContext*           _context;
        };
        std::vector<Pick> _picks;

        // Runs the queue of picks given a frame number.
        void runPicks(unsigned frameNumber);

        // Checks to see if a pick succeeded and fires appropriate callback.
        bool checkForPickResult(Pick& pick, unsigned frameNumber);

        // container for common RTT pick camera children (see addChild et al.)
        osg::ref_ptr<osg::Group> _group;
    };

} } // namespace osgEarth::Util

#endif // OSGEARTH_UTIL_RTT_PICKER_H