Difference between revisions of "Viewer Architecture"
Jump to navigation
Jump to search
Able Whitman (talk | contribs) (→Major Systems: reorder, add mute list) |
|||
Line 19: | Line 19: | ||
== Major Systems == | == Major Systems == | ||
* [[ | * [[Asset System]] - transport for animations, sounds, notecards, scripts, etc. | ||
* [[Avatar Appearance]] - appearance is constructed from a mesh, parameters to deform the mesh, and textures to describe clothing | |||
* [[Avatar Profiles]] | |||
* [[Culling]] - octree and occlusion based culling to speed rendering | |||
* [[Error Logging System]] - command and control of debugging output | |||
* [[Groups]] | |||
* [[Image System]] - prioritizes and decodes JPEG2000 images into OpenGL textures | * [[Image System]] - prioritizes and decodes JPEG2000 images into OpenGL textures | ||
** [[Texture cache]] - used for reading and writing texture data to the local disk cache | ** [[Texture cache]] - used for reading and writing texture data to the local disk cache | ||
* [[ | * [[Inventory]] - server-side storage of assets for each user | ||
* [[L$ System]] | |||
* [[Message System]] - reliable and unreliable transport over UDP | |||
* [[Movie System]] - QuickTime-based video on object surfaces | |||
* [[Muting Objects and Agents]] - How the viewer manages the muted object list | |||
* [[Rendering System]] - from viewer object to drawable to face to vertices to graphics card | * [[Rendering System]] - from viewer object to drawable to face to vertices to graphics card | ||
* [[ | * [[Selection Manager]] - holds extended information for selected objects and allows editing | ||
* [[Sound System]] - cross platform audio based on FMOD | |||
* [[Tools]] - anything that takes effect when you click your mouse on the world view. | |||
* [[UI Widgets]] - cross platform buttons, scroll bars, etc. | * [[UI Widgets]] - cross platform buttons, scroll bars, etc. | ||
* [[UI Floaters]] - dialogs and windows built from XML files | * [[UI Floaters]] - dialogs and windows built from XML files | ||
* [[VFS]] - cached data is held in two "virtual file systems" in large files on the client | * [[VFS]] - cached data is held in two "virtual file systems" in large files on the client | ||
* [[ | * [[Viewer Object System]] - objects in scene for rendering and editing | ||
* [[Web Browser]] - the integration of the viewer with the web. | * [[Web Browser]] - the integration of the viewer with the web. | ||
== Threads == | == Threads == |
Revision as of 12:23, 13 June 2007
The Second Life client (also known as the "viewer") is a complex piece of software. It can be visualized as a streaming media client like RealPlayer, a game engine like Quake 3, or a web browser.
First you'll need to learn some terminology like "agent", "sim", and "region" in the glossary.
Learn by Example
- Adding a menu item
- Adding a dialog
- How movement works
- How the camera works
- How login works
- Hegemons Login Analysis
- How keyboard processing works
- How scripts work
- The lifetime of a session
- How preferences work
Major Systems
- Asset System - transport for animations, sounds, notecards, scripts, etc.
- Avatar Appearance - appearance is constructed from a mesh, parameters to deform the mesh, and textures to describe clothing
- Avatar Profiles
- Culling - octree and occlusion based culling to speed rendering
- Error Logging System - command and control of debugging output
- Groups
- Image System - prioritizes and decodes JPEG2000 images into OpenGL textures
- Texture cache - used for reading and writing texture data to the local disk cache
- Inventory - server-side storage of assets for each user
- L$ System
- Message System - reliable and unreliable transport over UDP
- Movie System - QuickTime-based video on object surfaces
- Muting Objects and Agents - How the viewer manages the muted object list
- Rendering System - from viewer object to drawable to face to vertices to graphics card
- Selection Manager - holds extended information for selected objects and allows editing
- Sound System - cross platform audio based on FMOD
- Tools - anything that takes effect when you click your mouse on the world view.
- UI Widgets - cross platform buttons, scroll bars, etc.
- UI Floaters - dialogs and windows built from XML files
- VFS - cached data is held in two "virtual file systems" in large files on the client
- Viewer Object System - objects in scene for rendering and editing
- Web Browser - the integration of the viewer with the web.
Threads
The viewer is a single process with a few threads:
- Main thread -- The input/output main program function (including rendering).
- VFS thread -- Thread responsible for reading/writing to the local virtual file system.
- LFS thread -- Thread responsible for some reading/writing to the local native file system.
- Used by the Threaded_Image_Pipeline project
- Image thread -- Thread responsible for requesting and decoding image data
- Used by the Threaded_Image_Pipeline project
- Error Thread -- Thread responsible for catching exceptions, calling the (currently unused?) error handler, and retiring
- Worker Threads -- Threads designed to do cpu intensive background tasks
- These threads may be paused during rendering so as not to reduce performance (design in-progress)
Program Flow
- Initialize - newview/viewer.cpp :: main()
- Loop - newview/viewer.cpp :: main_loop()
- Gathers keyboard and mouse input
- Pumps the TCP i/o
- idle()
- Render the frame
- let filesystem and worker threads process
- Shutdown
One way to see what goes on in the main loop is to bring up the debug menus (Ctrl-Alt-D) then Client->Consoles->Fast Timers (or Ctrl-Shift-9) and expand the entries in the caption.
Sources of Input
- The Message System.
- Assets through the Asset System, transmitted using the Transfer Manager, and extracted from the VFS.
- Files through Xfer Manager.
- Files copied out of a VFS into local file store and read through c/c++/ll file API.
- XMLRPC calls such as login and Buying Land and Currency.
- HTTP GET/POST to the Backbone. This is not yet in use.
- Streaming music and videos.
- Quicktime.
- FMOD.
- The web browser.
User Guides
- Viewer coordinate frames.
- Known Client_parameters
- Known Client Parameters on LSLwiki.net
- Known defines
- Godmode - what Lindens can do