Difference between revisions of "Viewer Architecture"

From Second Life Wiki
Jump to navigation Jump to search
Line 56: Line 56:
** Files through [[Xfer Manager]].
** Files through [[Xfer Manager]].
* Files copied out of a [[VFS]] into local file store and read through c/c++/ll file API.
* Files copied out of a [[VFS]] into local file store and read through c/c++/ll file API.
* XMLRPC calls such as [[Authentication Flow|login]] and [[Bying Land and Currency]].
* XMLRPC calls such as [[Authentication Flow|login]] and [[Buying Land and Currency]].
* HTTP GET/POST to the [[Backbone]]. This is not yet in use.
* HTTP GET/POST to the [[Backbone]]. This is not yet in use.
* Streaming music and videos.
* Streaming music and videos.

Revision as of 16:17, 10 November 2006

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

  • Message System - reliable and unreliable transport over UDP
  • Image System - prioritizes and decodes JPEG2000 images into OpenGL textures
  • Viewer Object System - objects in scene for rendering and editing
  • Rendering System - from viewer object to drawable to face to vertices to graphics card
  • Culling - octree and occlusion based culling to speed rendering
  • UI Widgets - cross platform buttons, scroll bars, etc.
  • UI Floaters - dialogs and windows built from XML files
  • Asset System - transport for animations, sounds, notecards, scripts, etc.
  • Inventory - server-side storage of assets for each user
  • Sound System - cross platform audio based on FMOD
  • Movie System - QuickTime-based video on object surfaces
  • VFS - cached data is held in two "virtual file systems" in large files on the client
  • Selection Manager - holds extended information for selected objects and allows editing
  • Avatar Appearance - appearance is constructed from a mesh, parameters to deform the mesh, and textures to describe clothing
  • Web Browser - the integration of the viewer with the web.
  • Avatar Profiles
  • Groups
  • Money

Threads

The viewer is a single process with a few threads:

  • Main thread -- The input/output main program function.
  • VFS thread -- Thread responsible for reading/writing to the virtual file system.
  • LFS thread -- Thread responsible for some reading/writing to the local file system. Not sure if this is actually used anywhere.
  • Image thread -- Currently unused.

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
    • Render the frame
    • idle()
      • everything else
  3. Shutdown

Sources of Input