This file is indexed.

/usr/include/SurgSim/Graphics/Camera.h is in libopensurgsim-dev 0.7.0-5.

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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
// This file is a part of the OpenSurgSim project.
// Copyright 2013, SimQuest Solutions Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef SURGSIM_GRAPHICS_CAMERA_H
#define SURGSIM_GRAPHICS_CAMERA_H

#include "SurgSim/Graphics/Representation.h"

#include "SurgSim/Math/Matrix.h"
#include "SurgSim/Math/Vector.h"

#include <array>

namespace SurgSim
{

namespace Graphics
{

class Group;
class Texture;
class RenderTarget;

/// Base graphics camera class, which defines the basic interface for all graphics cameras.
///
/// A Graphics::Camera provides the viewpoint to visualize the Graphics::Group assigned to it.
///
/// To disable a camera: setLocalActive(false). To re-enable, setLocalActive(true).
/// A disabled (invisible) camera does not produce an image.
///
/// Graphics::Camera is used with Graphics::View to provide the visualization of the virtual scene to the user.
/// Cameras refer to a group that contain all the elements that they render, they may also parts of other group that
/// determine whether they are rendered.
/// It should provide the following Uniforms:
/// \code
/// uniform mat4 viewMatrix;
/// uniform mat4 inverseViewMatrix;
/// \endcode
class Camera : public virtual Representation
{
public:

	enum RenderOrder
	{
		RENDER_ORDER_PRE_RENDER = 0,
		RENDER_ORDER_IN_ORDER,
		RENDER_ORDER_POST_RENDER,
		RENDER_ORDER_COUNT
	};

	/// Constructor
	/// \param	name	Name of the camera
	explicit Camera(const std::string& name);

	/// Set the group reference that this camera wants to use as the group for rendering. Objects that, reference
	/// the same group will be rendered by this camera. The manager will do the actual creation of the group.
	/// \param name Name of the group to be used for rendering
	void setRenderGroupReference(const std::string& name);

	/// Set the collections of group references that this camera wants to use for rendering.
	/// \param names Vector of names of the groups used for rendering
	void setRenderGroupReferences(const std::vector<std::string>& names);

	/// Gets the collection of names of render groups used for rendering
	/// \return Vector of names of the groups used for rendering
	std::vector<std::string> getRenderGroupReferences() const;

	/// Adds a single group reference to the collection of group references for rendering
	/// \param name Name of the group to be used for rendering
	void addRenderGroupReference(const std::string& name);

	/// Sets the group of representations that will be seen by this camera.
	/// Only the representations in this group will be rendered when this camera's view is rendered.
	/// \note The camera can not be part of the group that it is rendering
	/// \param	group	Group of representations
	/// \return	True if it succeeded, false if it failed
	virtual bool setRenderGroup(std::shared_ptr<Group> group);

	/// Sets the representation groups that will be seen by this camera.
	/// \param groups Vector of groups of representations
	/// \return True if it succeeded, false if it failed
	virtual bool setRenderGroups(const std::vector<std::shared_ptr<Group>>& groups);

	/// Add a group of representations that will seen by this camera.
	/// \param group Group of representations
	virtual bool addRenderGroup(std::shared_ptr<Group> group);

	/// Gets all groups of representations that will be seen by this camera.
	/// Only the representations in this group will be rendered when this camera's view is rendered.
	/// \return	Vector of groups of representations
	std::vector<std::shared_ptr<Group>> getRenderGroups() const;

	/// Gets the view matrix of the camera
	/// \return	View matrix
	virtual SurgSim::Math::Matrix44d getViewMatrix() const = 0;

	/// Gets the inverse view matrix of the camera
	/// \return	Inverse view matrix
	virtual SurgSim::Math::Matrix44d getInverseViewMatrix() const = 0;

	/// Sets the projection matrix of the camera
	/// \param	matrix	Projection matrix
	virtual void setProjectionMatrix(const SurgSim::Math::Matrix44d& matrix) = 0;

	/// Sets the viewport size for this camera
	/// \param x,y location of the viewport in screen space
	/// \param width, height size of the viewport in screen space
	virtual void setViewport(int x, int y, int width, int height) = 0;

	/// collect the viewport values
	/// \param x,y,width,height [out] non-nullptr parameters to write the viewport parameters
	virtual void getViewport(int* x, int* y, int* width, int* height) const  = 0;

	/// Sets the width and height of the viewport
	/// \param dimensions size of the viewport in screen space
	virtual void setViewportSize(std::array<double, 2> dimensions) = 0;

	/// Gets the dimensions of the viewport
	virtual std::array<double, 2> getViewportSize() const = 0;

	/// Set the projection matrix with the appropriate  perspective projection parameters
	/// \param fovy Field of view along the y-axis
	/// \param aspect Aspect ration between y and x axis in the viewport
	/// \param near, far near and far clipping planes
	virtual void setPerspectiveProjection(double fovy, double aspect, double near, double far) = 0;

	/// Set the projection matrix with the appropriate orthogonal projection parameters
	/// \param left, right left and right bounds of the view volume
	/// \param bottom, top bottom and top bounds of the view volume
	/// \param near, far near and far bounds of the view volume
	virtual void setOrthogonalProjection(
		double left, double right,
		double bottom, double top,
		double near, double far) = 0;

	/// Gets the projection matrix of the camera
	/// \return	Projection matrix
	virtual const SurgSim::Math::Matrix44d& getProjectionMatrix() const = 0;

	/// Gets the inverse projection matrix of the camera
	/// \return	Inverse Projection matrix
	virtual SurgSim::Math::Matrix44d getInverseProjectionMatrix() const = 0;

	/// Sets RenderTarget for the current camera, enables the camera to render to off-screen textures.
	/// \param	renderTarget	The render target.
	virtual bool setRenderTarget(std::shared_ptr<RenderTarget> renderTarget) = 0;

	/// Gets RenderTarget that is currently being used by the camera.
	/// \return	The RenderTarget.
	virtual std::shared_ptr<RenderTarget> getRenderTarget() const = 0;

	/// Determine when this camera will render. The main camera will render at (RENDER_ORDER_IN_ORDER,0)
	/// In general all preprocessing should be done in RENDER_ORDER_PRE_ORDER, HUD Displaying usually
	/// at RENDER_ORDER_POST_ORDER
	/// \param order The phase of rendering.
	/// \param value The index within the phase, the order between two cameras of the same phase and index is not
	/// 			 determined.
	virtual void setRenderOrder(RenderOrder order, int value) = 0;

	bool addGroupReference(const std::string& name) override;

	/// Sets a value for the ambient lighting term, this can add light to the scene when there is no lighting
	/// \param color value for the light that should get added to the scene
	virtual void setAmbientColor(const SurgSim::Math::Vector4d& color) = 0;

	/// \return the ambient light that gets added to the scene
	virtual SurgSim::Math::Vector4d getAmbientColor() = 0;

	/// Marks the camera as a main view camera, this means that view dependent passes should follow this camera with
	/// their appropriate calculations, for this purpose when isMainCamera() is true, the camera provides a uniform
	/// struct with it's transforms. This function will most likely be called by the view.
	/// \code
	/// struct MainCamera {
	///     mat4 viewMatrix;
	///     mat4 inverseViewMatrix;
	///     mat4 projectionMatrix;
	///     mat4 mainProjectionMatrix;
	/// };
	/// uniform MainCamera mainCamera;
	/// \endcode
	virtual void setMainCamera(bool val) = 0;

	/// \return whether this is used as a main camera
	virtual bool isMainCamera() = 0;

private:

	void setPerspectiveProjection(const std::array<double, 4>& val);

	void setOrthogonalProjection(const std::array<double, 6>& val);

	void setViewport(std::array<int, 4> val);

	std::array<int, 4> getViewport() const;


	bool doInitialize() override;

	/// Group of representations that this camera sees
	/// Only the representations in this group will be rendered when this camera's view is rendered.
	std::vector<std::shared_ptr<Group>> m_renderGroups;

	/// The names of the groups that the camera wants to use for rendering, the graphics manager will actually assign
	/// this group
	std::vector<std::string> m_renderGroupReferences;
};

};  // namespace Graphics

};  // namespace SurgSim

#endif  // SURGSIM_GRAPHICS_CAMERA_H