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 09: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