Difference between revisions of "Viewer Architecture"
Jump to navigation
Jump to search
James Linden (talk | contribs) |
|||
Line 1: | Line 1: | ||
{{OSWikiLearnBox}} | {{OSWikiLearnBox}} | ||
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 [[Second Life Terminology]], like "agent", "sim", and "region". | ||
* | |||
** | If you like to learn by example, you can learn about: | ||
** | * [[Adding a menu item]] | ||
** viewer object | * [[Adding a dialog]] | ||
** | * [[How movement works]] | ||
** | * [[How the camera works]] | ||
* | * [[How login works]] | ||
* | * [[How keyboard processing works]] | ||
* | * [[How scripts work]] | ||
* | |||
** | If you prefer a more hierarchical approach, the viewer is built from: | ||
** | * [[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 | |||
* [[Avatar Profiles]] | |||
* [[Groups]] | |||
* [[Money]] | |||
== Threads == | == Threads == |
Revision as of 16:52, 30 October 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 Second Life Terminology, like "agent", "sim", and "region".
If you like to learn by example, you can learn about:
- Adding a menu item
- Adding a dialog
- How movement works
- How the camera works
- How login works
- How keyboard processing works
- How scripts work
If you prefer a more hierarchical approach, the viewer is built from:
- 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
- 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.
Program Flow
- Initialize
- Loop
- Gathers input
- Pumps the TCP i/o
- Render the frame
- Shutdown