This file is indexed.

/usr/share/openscenegraph/examples/osgoutline/osgoutline.cpp is in openscenegraph-examples 3.2.0~rc1-4.

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
// -*-c++-*-

/*
 * Draw an outline around a model.
 */

#include <osg/Group>
#include <osg/PositionAttitudeTransform>

#include <osgDB/ReadFile>
#include <osgViewer/Viewer>

#include <osgFX/Outline>


int main(int argc, char** argv)
{
    osg::ArgumentParser arguments(&argc,argv);
    arguments.getApplicationUsage()->setCommandLineUsage(arguments.getApplicationName()+" [options] <file>");
    arguments.getApplicationUsage()->addCommandLineOption("--testOcclusion","Test occlusion by other objects");
    arguments.getApplicationUsage()->addCommandLineOption("-h or --help","Display this information");

    bool testOcclusion = false;
    while (arguments.read("--testOcclusion")) { testOcclusion = true; }

    // load outlined object
    std::string modelFilename = arguments.argc() > 1 ? arguments[1] : "dumptruck.osgt";
    osg::ref_ptr<osg::Node> outlineModel = osgDB::readNodeFile(modelFilename);
    if (!outlineModel)
    {
        osg::notify(osg::FATAL) << "Unable to load model '" << modelFilename << "'\n";
        return -1;
    }

    // create scene
    osg::ref_ptr<osg::Group> root = new osg::Group;

    {
        // create outline effect
        osg::ref_ptr<osgFX::Outline> outline = new osgFX::Outline;
        root->addChild(outline.get());

        outline->setWidth(8);
        outline->setColor(osg::Vec4(1,1,0,1));
        outline->addChild(outlineModel.get());
    }

    if (testOcclusion)
    {
        // load occluder
        std::string occludedModelFilename = "cow.osgt";
        osg::ref_ptr<osg::Node> occludedModel = osgDB::readNodeFile(occludedModelFilename);
        if (!occludedModel)
        {
            osg::notify(osg::FATAL) << "Unable to load model '" << occludedModelFilename << "'\n";
            return -1;
        }

        // occluder offset
        const osg::BoundingSphere& bsphere = outlineModel->getBound();
        const osg::Vec3 occluderOffset = osg::Vec3(0,1,0) * bsphere.radius() * 1.2f;

        // occluder behind outlined model
        osg::ref_ptr<osg::PositionAttitudeTransform> modelTransform0 = new osg::PositionAttitudeTransform;
        modelTransform0->setPosition(bsphere.center() + occluderOffset);
        modelTransform0->addChild(occludedModel.get());
        root->addChild(modelTransform0.get());

        // occluder in front of outlined model
        osg::ref_ptr<osg::PositionAttitudeTransform> modelTransform1 = new osg::PositionAttitudeTransform;
        modelTransform1->setPosition(bsphere.center() - occluderOffset);
        modelTransform1->addChild(occludedModel.get());
        root->addChild(modelTransform1.get());
    }

    // must have stencil buffer...
    osg::DisplaySettings::instance()->setMinimumNumStencilBits(1);

    // construct the viewer
    osgViewer::Viewer viewer;
    viewer.setSceneData(root.get());

    // must clear stencil buffer...
    unsigned int clearMask = viewer.getCamera()->getClearMask();
    viewer.getCamera()->setClearMask(clearMask | GL_STENCIL_BUFFER_BIT);
    viewer.getCamera()->setClearStencil(0);

    return viewer.run();
}