Internal structure for 3D rendering work. Created for each backbuffer and texture viewport, but not for shadow cameras. More...

#include <View.h>

Inheritance diagram for Urho3D::View:
Collaboration diagram for Urho3D::View:

Public Member Functions

 View (Context *context)
virtual ~View ()
bool Define (RenderSurface *renderTarget, Viewport *viewport)
 Define with rendertarget and viewport. Return true if successful.
void Update (const FrameInfo &frame)
 Update and cull objects and construct rendering batches.
void Render ()
 Render batches.
GraphicsGetGraphics () const
 Return graphics subsystem.
RendererGetRenderer () const
 Return renderer subsystem.
SceneGetScene () const
 Return scene.
OctreeGetOctree () const
 Return octree.
CameraGetCamera () const
 Return camera.
const FrameInfoGetFrameInfo () const
 Return information of the frame being rendered.
RenderSurfaceGetRenderTarget () const
 Return the rendertarget. 0 if using the backbuffer.
bool GetDrawDebug () const
 Return whether should draw debug geometry.
const PODVector< Drawable * > & GetGeometries () const
 Return geometry objects.
const PODVector< Drawable * > & GetOccluders () const
 Return occluder objects.
const PODVector< Light * > & GetLights () const
 Return lights.
const Vector< LightBatchQueue > & GetLightQueues () const
 Return light batch queues.
void SetGlobalShaderParameters ()
 Set global (per-frame) shader parameters. Called by Batch and internally by View.
void SetCameraShaderParameters (Camera *camera, bool setProjectionMatrix)
 Set camera-specific shader parameters. Called by Batch and internally by View.
void SetGBufferShaderParameters (const IntVector2 &texSize, const IntRect &viewRect)
 Set G-buffer offset and inverse size shader parameters. Called by Batch and internally by View.
- Public Member Functions inherited from Urho3D::Object
 Object (Context *context)
virtual ~Object ()
 Destruct. Clean up self from event sender & receiver structures.
virtual Urho3D::StringHash GetType () const =0
 Return type hash.
virtual Urho3D::StringHash GetBaseType () const =0
 Return base class type hash.
virtual const Urho3D::StringGetTypeName () const =0
 Return type name.
virtual void OnEvent (Object *sender, StringHash eventType, VariantMap &eventData)
 Handle event.
void SubscribeToEvent (StringHash eventType, EventHandler *handler)
 Subscribe to an event that can be sent by any sender.
void SubscribeToEvent (Object *sender, StringHash eventType, EventHandler *handler)
 Subscribe to a specific sender's event.
void UnsubscribeFromEvent (StringHash eventType)
 Unsubscribe from an event.
void UnsubscribeFromEvent (Object *sender, StringHash eventType)
 Unsubscribe from a specific sender's event.
void UnsubscribeFromEvents (Object *sender)
 Unsubscribe from a specific sender's events.
void UnsubscribeFromAllEvents ()
 Unsubscribe from all events.
void UnsubscribeFromAllEventsExcept (const PODVector< StringHash > &exceptions, bool onlyUserData)
 Unsubscribe from all events except those listed, and optionally only those with userdata (script registered events.)
void SendEvent (StringHash eventType)
 Send event to all subscribers.
void SendEvent (StringHash eventType, VariantMap &eventData)
 Send event with parameters to all subscribers. More...
VariantMapGetEventDataMap () const
 Return a preallocated map for event data. Used for optimization to avoid constant re-allocation of event data maps.
ContextGetContext () const
 Return execution context.
ObjectGetSubsystem (StringHash type) const
 Return subsystem by type.
ObjectGetEventSender () const
 Return active event sender. Null outside event handling.
EventHandlerGetEventHandler () const
 Return active event handler. Null outside event handling.
bool HasSubscribedToEvent (StringHash eventType) const
 Return whether has subscribed to an event without specific sender.
bool HasSubscribedToEvent (Object *sender, StringHash eventType) const
 Return whether has subscribed to a specific sender's event.
bool HasEventHandlers () const
 Return whether has subscribed to any event.
template<class T >
T * GetSubsystem () const
 Template version of returning a subsystem.
const StringGetCategory () const
 Return object category. Categories are (optionally) registered along with the object factory. Return an empty string if the object category is not registered.
- Public Member Functions inherited from Urho3D::RefCounted
 RefCounted ()
 Construct. Allocate the reference count structure and set an initial self weak reference.
virtual ~RefCounted ()
 Destruct. Mark as expired and also delete the reference count structure if no outside weak references exist.
void AddRef ()
 Increment reference count. Can also be called outside of a SharedPtr for traditional reference counting.
void ReleaseRef ()
 Decrement reference count and delete self if no more references. Can also be called outside of a SharedPtr for traditional reference counting.
int Refs () const
 Return reference count.
int WeakRefs () const
 Return weak reference count.
RefCountRefCountPtr ()
 Return pointer to the reference count structure.

Private Member Functions

 OBJECT (View)
void GetDrawables ()
 Query the octree for drawable objects.
void GetBatches ()
 Construct batches from the drawable objects.
void ProcessLights ()
 Get lit geometries and shadowcasters for visible lights.
void GetLightBatches ()
 Get batches from lit geometries and shadowcasters.
void GetBaseBatches ()
 Get unlit batches.
void UpdateGeometries ()
 Update geometries and sort batches.
void GetLitBatches (Drawable *drawable, LightBatchQueue &lightQueue, BatchQueue *alphaQueue)
 Get pixel lit batches for a certain light and drawable.
void ExecuteRenderPathCommands ()
 Execute render commands.
void SetRenderTargets (RenderPathCommand &command)
 Set rendertargets for current render command.
bool SetTextures (RenderPathCommand &command)
 Set textures for current render command. Return whether depth write is allowed (depth-stencil not bound as a texture.)
void RenderQuad (RenderPathCommand &command)
 Perform a quad rendering command.
bool IsNecessary (const RenderPathCommand &command)
 Check if a command is enabled and has content to render. To be called only after render update has completed for the frame.
bool CheckViewportRead (const RenderPathCommand &command)
 Check if a command reads the destination render target.
bool CheckViewportWrite (const RenderPathCommand &command)
 Check if a command writes into the destination render target.
bool CheckPingpong (unsigned index)
 Check whether a command should use pingponging instead of resolve from destination render target to viewport texture.
void AllocateScreenBuffers ()
 Allocate needed screen buffers.
void BlitFramebuffer (Texture *source, RenderSurface *destination, bool depthWrite)
 Blit the viewport from one surface to another.
void DrawFullscreenQuad (bool nearQuad)
 Draw a fullscreen quad. Shaders and renderstates must have been set beforehand.
void UpdateOccluders (PODVector< Drawable * > &occluders, Camera *camera)
 Query for occluders as seen from a camera.
void DrawOccluders (OcclusionBuffer *buffer, const PODVector< Drawable * > &occluders)
 Draw occluders to occlusion buffer.
void ProcessLight (LightQueryResult &query, unsigned threadIndex)
 Query for lit geometries and shadow casters for a light.
void ProcessShadowCasters (LightQueryResult &query, const PODVector< Drawable * > &drawables, unsigned splitIndex)
 Process shadow casters' visibilities and build their combined view- or projection-space bounding box.
void SetupShadowCameras (LightQueryResult &query)
 Set up initial shadow camera view(s).
void SetupDirLightShadowCamera (Camera *shadowCamera, Light *light, float nearSplit, float farSplit)
 Set up a directional light shadow camera.
void FinalizeShadowCamera (Camera *shadowCamera, Light *light, const IntRect &shadowViewport, const BoundingBox &shadowCasterBox)
 Finalize shadow camera view after shadow casters and the shadow map are known.
void QuantizeDirLightShadowCamera (Camera *shadowCamera, Light *light, const IntRect &shadowViewport, const BoundingBox &viewBox)
 Quantize a directional light shadow camera view to eliminate swimming.
bool IsShadowCasterVisible (Drawable *drawable, BoundingBox lightViewBox, Camera *shadowCamera, const Matrix3x4 &lightView, const Frustum &lightViewFrustum, const BoundingBox &lightViewFrustumBox)
 Check visibility of one shadow caster.
IntRect GetShadowMapViewport (Light *light, unsigned splitIndex, Texture2D *shadowMap)
 Return the viewport for a shadow map split.
void FindZone (Drawable *drawable)
 Find and set a new zone for a drawable when it has moved.
TechniqueGetTechnique (Drawable *drawable, Material *material)
 Return material technique, considering the drawable's LOD distance.
void CheckMaterialForAuxView (Material *material)
 Check if material should render an auxiliary view (if it has a camera attached.)
void AddBatchToQueue (BatchQueue &queue, Batch &batch, Technique *tech, bool allowInstancing=true, bool allowShadows=true)
 Choose shaders for a batch and add it to queue.
void PrepareInstancingBuffer ()
 Prepare instancing buffer by filling it with all instance transforms.
void SetupLightVolumeBatch (Batch &batch)
 Set up a light volume rendering batch.
void RenderShadowMap (const LightBatchQueue &queue)
 Render a shadow map.
RenderSurfaceGetDepthStencil (RenderSurface *renderTarget)
 Return the proper depth-stencil surface to use for a rendertarget.
RenderSurfaceGetRenderSurfaceFromTexture (Texture *texture, CubeMapFace face=FACE_POSITIVE_X)
 Helper function to get the render surface from a texture. 2D textures will always return the first face only.
TextureFindNamedTexture (const String &name, bool isRenderTarget, bool isVolumeMap=false)
 Get a named texture from the rendertarget list or from the resource cache, to be either used as a rendertarget or texture binding.
ZoneGetZone (Drawable *drawable)
 Return the drawable's zone, or camera zone if it has override mode enabled.
unsigned GetLightMask (Drawable *drawable)
 Return the drawable's light mask, considering also its zone.
unsigned GetShadowMask (Drawable *drawable)
 Return the drawable's shadow mask, considering also its zone.
unsigned long long GetVertexLightQueueHash (const PODVector< Light * > &vertexLights)
 Return hash code for a vertex light queue.

Private Attributes

WeakPtr< Graphicsgraphics_
 Graphics subsystem.
WeakPtr< Rendererrenderer_
 Renderer subsystem.
 Scene to use.
 Octree to use.
 Camera to use.
 Camera's scene node.
 Zone the camera is inside, or default zone if not assigned.
 Zone at far clip plane.
 Occlusion buffer for the main camera.
 Destination color rendertarget.
 Substitute rendertarget for deferred rendering. Allocated if necessary.
TextureviewportTextures_ [MAX_VIEWPORT_TEXTURES]
 Texture(s) for sampling the viewport contents. Allocated if necessary.
 Color rendertarget active for the current renderpath command.
 Texture containing the latest viewport texture.
 Dummy texture for D3D9 depth only rendering.
IntRect viewRect_
 Viewport rectangle.
IntVector2 viewSize_
 Viewport size.
IntVector2 rtSize_
 Destination rendertarget size.
FrameInfo frame_
 Information of the frame being rendered.
float minZ_
 Minimum Z value of the visible scene.
float maxZ_
 Maximum Z value of the visible scene.
int materialQuality_
 Material quality level.
int maxOccluderTriangles_
 Maximum number of occluder triangles.
int minInstances_
 Minimum number of instances required in a batch group to render as instanced.
int highestZonePriority_
 Highest zone priority currently visible.
bool cameraZoneOverride_
 Camera zone's override flag.
bool drawShadows_
 Draw shadows flag.
bool deferred_
 Deferred flag. Inferred from the existence of a light volume command in the renderpath.
bool deferredAmbient_
 Deferred ambient pass flag. This means that the destination rendertarget is being written to at the same time as albedo/normal/depth buffers, and needs to be RGBA on OpenGL.
bool useLitBase_
 Forward light base pass optimization flag. If in use, combine the base pass and first light for all opaque objects.
bool hasScenePasses_
 Has scene passes flag. If no scene passes, view can be defined without a valid scene or camera to only perform quad rendering.
bool noStencil_
 Whether is using a custom readable depth texture without a stencil channel.
bool drawDebug_
 Draw debug geometry flag. Copied from the viewport.
Vector< PODVector< Drawable * > > tempDrawables_
 Per-thread octree query results.
Vector< PerThreadSceneResultsceneResults_
 Per-thread geometries, lights and Z range collection results.
PODVector< Zone * > zones_
 Visible zones.
PODVector< Drawable * > geometries_
 Visible geometry objects.
PODVector< Drawable * > nonThreadedGeometries_
 Geometry objects that will be updated in the main thread.
PODVector< Drawable * > threadedGeometries_
 Geometry objects that will be updated in worker threads.
PODVector< Drawable * > occluders_
 Occluder objects.
PODVector< Light * > lights_
HashSet< Drawable * > maxLightsDrawables_
 Drawables that limit their maximum light count.
HashMap< StringHash, Texture * > renderTargets_
 Rendertargets defined by the renderpath.
Vector< LightQueryResultlightQueryResults_
 Intermediate light processing results.
Vector< ScenePassInfoscenePasses_
 Info for scene render passes defined by the renderpath.
Vector< LightBatchQueuelightQueues_
 Per-pixel light queues.
HashMap< unsigned long long,
 Per-vertex light queues.
HashMap< unsigned, BatchQueuebatchQueues_
 Batch queues by pass index.
unsigned gBufferPassIndex_
 Index of the GBuffer pass.
unsigned basePassIndex_
 Index of the opaque forward base pass.
unsigned alphaPassIndex_
 Index of the alpha pass.
unsigned lightPassIndex_
 Index of the forward light pass.
unsigned litBasePassIndex_
 Index of the litbase pass.
unsigned litAlphaPassIndex_
 Index of the litalpha pass.
const RenderPathCommandlightVolumeCommand_
 Pointer to the light volume command if any.


void CheckVisibilityWork (const WorkItem *item, unsigned threadIndex)
void ProcessLightWork (const WorkItem *item, unsigned threadIndex)

Additional Inherited Members

- Protected Attributes inherited from Urho3D::Object
 Execution context.

Detailed Description

Internal structure for 3D rendering work. Created for each backbuffer and texture viewport, but not for shadow cameras.

The documentation for this class was generated from the following files:
  • /home/travis/build/urho3d/Urho3D/Source/Urho3D/Graphics/View.h
  • /home/travis/build/urho3d/Urho3D/Source/Urho3D/Graphics/View.cpp