Difference between revisions of "Floorplan Object Exchange"

From LinuxMCE
Jump to: navigation, search
(New page: Category: Programmer's Guide = Notes on how Orbiter exchanges the color of objects in the floorplan=)
 
Line 1: Line 1:
 
[[Category: Programmer's Guide]]
 
[[Category: Programmer's Guide]]
 
= Notes on how Orbiter exchanges the color of objects in the floorplan=
 
= Notes on how Orbiter exchanges the color of objects in the floorplan=
 +
 +
File: src/Orbiter/Orbiter.cpp
 +
Function: Orbiter::RenderFloorplan
 +
 +
DCE::CMD_Get_Current_Floorplan is used to retrieve the Floorplan data: Color, Status, OSD, PK_DesignObj_Toolbar
 +
 +
Color is stored as "int" (which happens to be 32 bit on 32 bit platforms)
 +
 +
If Color is non-zero, OrbiterRenderer::ReplaceColorInRectangle is called to replace the magenta pixers with the new color. Somehow, sometimes the red and blue channels in RGB are flipped, resulting in wrong colors on the floorplan. This method is overridden in OrbiterRenderer_OpenGL and OrbiterRenderer_SDL.
 +
 +
In OrbiterRenderer_SDL, there are ifdefs to change behavior on the Nokia N8xx, which uses 16 bits of color, not 32.
 +
 +
The values for rshift, gshift, bshift are defined in src/SDL_Helpers/SDL_Defs.h based on what SDL claims the byte order is.

Revision as of 21:22, 22 February 2010

Notes on how Orbiter exchanges the color of objects in the floorplan

File: src/Orbiter/Orbiter.cpp Function: Orbiter::RenderFloorplan

DCE::CMD_Get_Current_Floorplan is used to retrieve the Floorplan data: Color, Status, OSD, PK_DesignObj_Toolbar

Color is stored as "int" (which happens to be 32 bit on 32 bit platforms)

If Color is non-zero, OrbiterRenderer::ReplaceColorInRectangle is called to replace the magenta pixers with the new color. Somehow, sometimes the red and blue channels in RGB are flipped, resulting in wrong colors on the floorplan. This method is overridden in OrbiterRenderer_OpenGL and OrbiterRenderer_SDL.

In OrbiterRenderer_SDL, there are ifdefs to change behavior on the Nokia N8xx, which uses 16 bits of color, not 32.

The values for rshift, gshift, bshift are defined in src/SDL_Helpers/SDL_Defs.h based on what SDL claims the byte order is.