OSviewer/Rendering System

From OpenSimulator

(Difference between revisions)
Jump to: navigation, search
 
(One intermediate revision by one user not shown)
Line 1: Line 1:
== Rendering System of OpenSimulator Viewer v1 ==
+
{{ViewerQuicklinks}}
  
The OpenSimulator Viewer uses OpenGL to interface with the graphics hardware. (Should this be replaced or should it remain the same?)
 
  
Rendering in the viewer starts in llviewerdisplay.cpp in the display() method.
+
== Rendering System of OpenSimulator Viewer v1 ==
 
+
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
+
The OSviewer uses Unreal Engine to render its awesomness
 
[[Category:OSviewer]]
 
[[Category:OSviewer]]

Latest revision as of 17:06, 9 December 2018



[edit] Rendering System of OpenSimulator Viewer v1

The OSviewer uses Unreal Engine to render its awesomness

Personal tools
General
About This Wiki