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

#include <Urho3D/Graphics/View.h>

Inheritance diagram for Urho3D::View:
[legend]
Collaboration diagram for Urho3D::View:
[legend]

Public Member Functions

 View (Context *context)
 Construct.
 
virtual ~View () override
 Destruct.
 
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 viewport camera.
 
CameraGetCullCamera () const
 Return culling camera. Normally same as the viewport 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 IntRectGetViewRect () const
 Return view rectangle.
 
const IntVector2GetViewSize () const
 Return view dimensions.
 
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.
 
OcclusionBufferGetOcclusionBuffer () const
 Return the last used software occlusion buffer.
 
unsigned GetNumActiveOccluders () const
 Return number of occluders that were actually rendered. Occluders may be rejected if running out of triangles or if behind other occluders.
 
ViewGetSourceView () const
 Return the source view that was already prepared. Used when viewports specify the same culling camera.
 
void SetGlobalShaderParameters ()
 Set global (per-frame) shader parameters. Called by Batch and internally by View.
 
void SetCameraShaderParameters (Camera *camera)
 Set camera-specific shader parameters. Called by Batch and internally by View.
 
void SetCommandShaderParameters (const RenderPathCommand &command)
 Set command's shader parameters if any. Called 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.
 
void DrawFullscreenQuad (bool setIdentityProjection=false)
 Draw a fullscreen quad. Shaders and renderstates must have been set beforehand. Quad will be drawn to the middle of depth range, similarly to deferred directional lights.
 
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.
 
- Public Member Functions inherited from Urho3D::Object
 Object (Context *context)
 Construct.
 
virtual ~Object () override
 Destruct. Clean up self from event sender & receiver structures.
 
virtual StringHash GetType () const =0
 Return type hash.
 
virtual const StringGetTypeName () const =0
 Return type name.
 
virtual const TypeInfoGetTypeInfo () const =0
 Return type info.
 
virtual void OnEvent (Object *sender, StringHash eventType, VariantMap &eventData)
 Handle event.
 
bool IsInstanceOf (StringHash type) const
 Check current instance is type of specified type.
 
bool IsInstanceOf (const TypeInfo *typeInfo) const
 Check current instance is type of specified type.
 
template<typename T >
bool IsInstanceOf () const
 Check current instance is type of specified class.
 
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 SubscribeToEvent (StringHash eventType, const std::function< void(StringHash, VariantMap &)> &function, void *userData=nullptr)
 Subscribe to an event that can be sent by any sender.
 
void SubscribeToEvent (Object *sender, StringHash eventType, const std::function< void(StringHash, VariantMap &)> &function, void *userData=nullptr)
 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.
 
VariantMapGetEventDataMap () const
 Return a preallocated map for event data. Used for optimization to avoid constant re-allocation of event data maps.
 
template<typename... Args>
void SendEvent (StringHash eventType, Args...args)
 Send event with variadic parameter pairs to all subscribers. The parameter pairs is a list of paramID and paramValue separated by comma, one pair after another.
 
ContextGetContext () const
 Return execution context.
 
const VariantGetGlobalVar (StringHash key) const
 Return global variable based on key.
 
const VariantMapGetGlobalVars () const
 Return all global variables.
 
void SetGlobalVar (StringHash key, const Variant &value)
 Set global variable with the respective key and value.
 
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

 URHO3D_OBJECT (View, Object)
 
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 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 SetQueueShaderDefines (BatchQueue &queue, const RenderPathCommand &command)
 Set shader defines for a batch queue if used.
 
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. More...
 
void SetupLightVolumeBatch (Batch &batch)
 Set up a light volume rendering batch.
 
bool NeedRenderShadowMap (const LightBatchQueue &queue)
 Check whether a light queue needs shadow rendering.
 
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.
 
void SendViewEvent (StringHash eventType)
 Send a view update or render related event through the Renderer subsystem. The parameters are the same for all of them.
 
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.
 
Scenescene_
 Scene to use.
 
Octreeoctree_
 Octree to use.
 
Cameracamera_
 Viewport (rendering) camera.
 
CameracullCamera_
 Culling camera. Usually same as the viewport camera.
 
WeakPtr< ViewsourceView_
 Shared source view. Null if this view is using its own culling.
 
ZonecameraZone_
 Zone the camera is inside, or default zone if not assigned.
 
ZonefarClipZone_
 Zone at far clip plane.
 
OcclusionBufferocclusionBuffer_
 Occlusion buffer for the main camera.
 
RenderSurfacerenderTarget_
 Destination color rendertarget.
 
RenderSurfacesubstituteRenderTarget_
 Substitute rendertarget for deferred rendering. Allocated if necessary.
 
TextureviewportTextures_ [MAX_VIEWPORT_TEXTURES]
 Texture(s) for sampling the viewport contents. Allocated if necessary.
 
RenderSurfacecurrentRenderTarget_
 Color rendertarget active for the current renderpath command.
 
RenderSurfacelastCustomDepthSurface_
 Last used custom depth render surface.
 
TexturecurrentViewportTexture_
 Texture containing the latest viewport texture.
 
TexturedepthOnlyDummyTexture_
 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 aspectRatio_
 View aspect ratio.
 
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 geometriesUpdated_
 Geometries updated flag.
 
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.
 
RenderPathrenderPath_
 Renderpath.
 
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_
 Lights.
 
unsigned activeOccluders_
 Number of active occluders.
 
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.
 
PODVector< ScenePassInfoscenePasses_
 Info for scene render passes defined by the renderpath.
 
Vector< LightBatchQueuelightQueues_
 Per-pixel light queues.
 
HashMap< unsigned long long,
LightBatchQueue
vertexLightQueues_
 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.
 
const RenderPathCommandforwardLightsCommand_
 Pointer to the forwardlights command if any.
 
const RenderPathCommandpassCommand_
 Pointer to the current commmand if it contains shader parameters to be set for a render pass.
 
bool usedResolve_
 Flag for scene being resolved from the backbuffer.
 

Friends

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

Additional Inherited Members

- Static Public Member Functions inherited from Urho3D::Object
static const TypeInfoGetTypeInfoStatic ()
 Return type info static.
 
- Protected Attributes inherited from Urho3D::Object
Contextcontext_
 Execution context.
 

Detailed Description

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

Member Function Documentation

void Urho3D::View::PrepareInstancingBuffer ( )
private

Prepare instancing buffer by filling it with all instance transforms.

Todo:
If rendering the same view several times back-to-back, would not need to refill the buffer

Here is the call graph for this function:

Here is the caller graph for this function:


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