10 #ifndef hifi_render_Args_h
11 #define hifi_render_Args_h
16 #include <unordered_set>
18 #include <GLMHelpers.h>
19 #include <ViewFrustum.h>
20 #include <StencilMaskMode.h>
21 #include <UUIDHasher.h>
23 #include <gpu/Forward.h>
44 int _materialSwitches = 0;
45 int _trianglesRendered = 0;
51 Item& edit(Type type) {
66 enum RenderMode { DEFAULT_RENDER_MODE, SHADOW_RENDER_MODE, MIRROR_RENDER_MODE, SECONDARY_CAMERA_RENDER_MODE };
67 enum DisplayMode { MONO, STEREO_MONITOR, STEREO_HMD };
68 enum RenderMethod { DEFERRED, FORWARD };
70 RENDER_DEBUG_NONE = 0,
71 RENDER_DEBUG_HULLS = 1
76 Args(
const gpu::ContextPointer& context,
77 float sizeScale = 1.0f,
78 int boundaryLevelAdjust = 0,
79 float lodFarAngleHalfTan = 0.1f,
80 float lodNearAngleHalfTan = 0.01f,
82 float lodFarDist = 200.0f,
83 float lodNearDist = 4.0f,
84 RenderMode renderMode = DEFAULT_RENDER_MODE,
85 DisplayMode displayMode = MONO,
86 RenderMethod renderMethod = DEFERRED,
87 DebugFlags debugFlags = RENDER_DEBUG_NONE,
88 gpu::Batch* batch =
nullptr) :
90 _sizeScale(sizeScale),
91 _boundaryLevelAdjust(boundaryLevelAdjust),
92 _lodFarAngleHalfTan(lodFarAngleHalfTan),
93 _lodFarAngleHalfTanSq(lodFarAngleHalfTan * lodFarAngleHalfTan),
94 _lodNearAngleHalfTan(lodNearAngleHalfTan),
95 _lodNearAngleHalfTanSq(lodNearAngleHalfTan * lodNearAngleHalfTan),
96 _lodFarDist(lodFarDist),
97 _lodNearDist(lodNearDist),
98 _lodFarDistSq(lodFarDist * lodFarDist),
99 _lodNearDistSq(lodNearDist * lodNearDist),
100 _renderMode(renderMode),
101 _displayMode(displayMode),
102 _renderMethod(renderMethod),
103 _debugFlags(debugFlags),
107 bool hasViewFrustum()
const {
return _viewFrustums.size() > 0; }
108 void setViewFrustum(
const ViewFrustum& viewFrustum) {
109 while (_viewFrustums.size() > 0) {
112 _viewFrustums.push(viewFrustum);
114 const ViewFrustum& getViewFrustum()
const { assert(_viewFrustums.size() > 0);
return _viewFrustums.top(); }
115 void pushViewFrustum(
const ViewFrustum& viewFrustum) { _viewFrustums.push(viewFrustum); }
116 void popViewFrustum() { _viewFrustums.pop(); }
118 bool isStereo()
const {
return _displayMode != MONO; }
120 std::shared_ptr<gpu::Context> _context;
121 std::shared_ptr<gpu::Framebuffer> _blitFramebuffer;
122 std::shared_ptr<render::ShapePipeline> _shapePipeline;
123 std::stack<ViewFrustum> _viewFrustums;
124 glm::ivec4 _viewport { 0.0f, 0.0f, 1.0f, 1.0f };
125 glm::vec3 _boomOffset { 0.0f, 0.0f, 1.0f };
127 float _sizeScale { 1.0f };
128 int _boundaryLevelAdjust { 0 };
129 float _lodFarAngleHalfTan{ 0.1f };
130 float _lodFarAngleHalfTanSq{ _lodFarAngleHalfTan * _lodFarAngleHalfTan };
131 float _lodNearAngleHalfTan{ 0.01f };
132 float _lodNearAngleHalfTanSq{ _lodNearAngleHalfTan * _lodNearAngleHalfTan };
133 float _lodFarDist { 200.0f };
134 float _lodNearDist { 4.0f };
135 float _lodFarDistSq { _lodFarDist * _lodFarDist };
136 float _lodNearDistSq { _lodNearDist * _lodNearDist };
138 RenderMode _renderMode { DEFAULT_RENDER_MODE };
139 DisplayMode _displayMode { MONO };
140 RenderMethod _renderMethod { DEFERRED };
141 DebugFlags _debugFlags { RENDER_DEBUG_NONE };
142 gpu::Batch* _batch =
nullptr;
144 uint32_t _globalShapeKey { 0 };
145 uint32_t _itemShapeKey { 0 };
146 bool _enableTexturing {
true };
147 bool _enableBlendshape {
true };
148 bool _enableSkinning {
true };
150 bool _enableFade {
false };
152 RenderDetails _details;
153 render::ScenePointer _scene;
154 int8_t _cameraMode { -1 };
156 std::function<void(gpu::Batch&,
const gpu::TexturePointer&)> _hudOperator {
nullptr };
157 gpu::TexturePointer _hudTexture {
nullptr };
159 bool _takingSnapshot {
false };
160 StencilMaskMode _stencilMaskMode { StencilMaskMode::NONE };
161 std::function<void(gpu::Batch&)> _stencilMaskOperator;
166 using RenderArgs = render::Args;