OSviewer/Rendering System

From OpenSimulator

(Difference between revisions)
Jump to: navigation, search
(Replaced content with "== Rendering System of OpenSimulator Viewer v1 == The OSviewer uses Unreal Engine to render its awesomness Category:OSviewer")
Line 1: Line 1:
 
== Rendering System of OpenSimulator Viewer v1 ==
 
== Rendering System of OpenSimulator Viewer v1 ==
  
−
The OpenSimulator Viewer uses OpenGL to interface with the graphics hardware. (Should this be replaced or should it remain the same?)
+
The OSviewer uses Unreal Engine to render its awesomness
−
 
+
−
Rendering in the viewer starts in llviewerdisplay.cpp in the display() method.
+
−
 
+
−
Rendering follows this flow of events:
+
−
 
+
−
* check window state and client state
+
−
 
+
−
Don't render if window is minimized.
+
−
 
+
−
Don't render if client is in startup state.
+
−
 
+
−
If client is in teleport mode only draw a static screen and progress bar.
+
−
 
+
−
If client requested a logout don't draw anything else.
+
−
 
+
−
'''prepare for next frame:'''
+
−
 
+
−
* update camera
+
−
 
+
−
* clear buffer, for drawing of dynamic textures
+
−
 
+
−
* setup rendering
+
−
 
+
−
* reset lights to OS defaults
+
−
 
+
−
'''update window and dynamic textures:'''
+
−
 
+
−
* update (draw) dynamic(/render-to-texture) textures
+
−
 
+
−
for each dynamic texture:
+
−
 
+
−
-> save camera and viewport and clear the depthbuffer if required
+
−
 
+
−
-> render to framebuffer
+
−
 
+
−
-> use glCopyTexSubImage2D to copy results to texture
+
−
 
+
−
-> restore camera and viewport
+
−
 
+
−
* if any dynamic textures were updated clear color and depth buffer
+
−
 
+
−
* set viewport up (with offsets and window dimensions)
+
−
 
+
−
'''update scene:'''
+
−
 
+
−
* set camera up
+
−
 
+
−
display_camera_update() creates projection matrix and clip distance
+
−
 
+
−
* update HUD
+
−
 
+
−
* update geometry
+
−
 
+
−
* cull geometry
+
−
 
+
−
* clear/flush last frame
+
−
 
+
−
* update images (?)
+
−
 
+
−
* state sorting
+
−
 
+
−
* rebuild draw pools
+
−
 
+
−
Seems just to remove dead pools from the list of pools.
+
−
 
+
−
* update sky
+
−
 
+
−
Redraws skytexture and cubic environment map.
+
−
 
+
−
'''draw geometry'''
+
−
 
+
−
* if render scene to texture (if vertex shaders supported) bind frame buffer to FBO
+
−
 
+
−
* render pipeline
+
−
 
+
−
unbind vertex buffers (?)
+
−
 
+
−
set safe default state values (matrices and stuff)
+
−
 
+
−
set fog and lights
+
−
 
+
−
render drawpools
+
−
 
+
−
Drawpools represent either a set of polygons (LLFacePool) or a renderpass (LLRenderPass). There are different types of either kind.
+
−
 
+
−
''Facepools'' are grouped in Terrain, Ground, Tree, Avatar, Water, Sky and WLSky. There maybe multiple facepools of each type (one per spatial partition?).
+
−
 
+
−
''Renderpasses'' can be Simple, Alpha, Glow, Invisible or Bump passes. There is one instance of each renderpass draw pool.
+
−
 
+
−
for each drawpool:
+
−
 
+
−
- set up vertex buffer and texture
+
−
 
+
−
- render faces to vertex buffer
+
−
 
+
−
- render vertex buffer to frame buffer (?)
+
−
 
+
−
Source is from http://wiki.secondlife.com/wiki/Rendering_System
+
 
[[Category:OSviewer]]
 
[[Category:OSviewer]]

Revision as of 10:11, 8 December 2018

Rendering System of OpenSimulator Viewer v1

The OSviewer uses Unreal Engine to render its awesomness

Personal tools
General
About This Wiki