|
|
| 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]] |