Difference between revisions of "Viewer Architecture"

From Second Life Wiki
Jump to navigation Jump to search
(→‎Major Systems: reorder, add mute list)
Line 35: Line 35:
* [[Selection Manager]] - holds extended information for selected objects and allows editing
* [[Selection Manager]] - holds extended information for selected objects and allows editing
* [[Sound System]] - cross platform audio based on FMOD
* [[Sound System]] - cross platform audio based on FMOD
* [[Tools]] - anything that takes effect when you click your mouse on the world view.
* [[Tools]] - anything that takes effect when you right-click 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

Revision as of 22:22, 8 August 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

Major Systems

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.
  • Image thread -- Thread responsible for requesting and decoding image data
  • 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

  1. Initialize - newview/viewer.cpp :: main()
  2. 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
  3. 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

User Guides