[MainComponent
	|activeComponent : RenderableComponent
    |setWindow(window_type window)
    run()
    virtual Initialize()
    virtual Update(float dt)
    virtual FixedUpdate()
    virtual Render()
    virtual Compose()]
[<abstract>RenderableComponent
	|Content : wiResourceManager
    onStart : function<void()>
    onStop : function<void()>
    |virtual Initialize()
    virtual Load()
    virtual Unload()
    virtual Start()
    virtual Stop()
    virtual FixedUpdate()
    virtual Update(float dt)
    virtual Render()
    virtual Compose()]
[Renderable2DComponent
	|...]
[Renderable3DComponent
	|[Collection of functions to get/set/enable postprocess parameters]]
[ForwardRenderableComponent]
[TiledForwardRenderableComponent]
[DeferredRenderableComponent]
[LoadingScreenComponent
	|addLoadingFunction(function<void()>)
    addLoadingComponent(RenderableComponent)
    onFinished(function<void()>)
    getPercentageComplete()
    isActive()]
    
[wiGUI]
[<abstract>wiWidget]
[wiLabel]
[wiButton]
[wiCheckBox]
[wiSlider]
[wiWindow]
[wiColorPicker]

[<abstract>GraphicsDevice
	|GetScreenWidth() : int
    GetScreenHeight() : int
    GetVSyncEnabled() : bool
    SetVSyncEnabled(bool)
    SetResolution(int width, int height)
    ResolutionChanged() : bool
    GetFrameCount() : int
    |[Collection of graphics API-agnostic rendering commands]]
[GraphicsDevice_DX11]
[GraphicsResources
	|[Texture]
    [GPUBuffer]
    [Shader]
    [GPUQuery]
    [Etc...]]
[GraphicsDescriptors
	|[TextureDesc]
    [GPUBufferDesc]
    [ViewPort]
    [Etc...]]

[Transform
	| ...]
[Mesh
	| ...]
[MeshSubset
	| ...]
[Object
	| ...]
[Material
	| ...]
[Armature
	| ...]
[Action
	|...]
[AnimationLayer
	|...]
[Light
	| ...]
[Camera
	| ...]
[Scene
	|models : vector<Model>
    worldInfo : WorldInfo
    environmentProbes : list<EnvironmentProbes]
[EnvironmentProbe
	| ...]
[WorldInfo
	|horizon : float4
    zenith : float4
    ambient : float4
    fogSEH : float4
    water : plane4]
[Wind
	|direction : vector3
    randomness : float
    waveSize : float]
[Decal
	| ...]
[wiSPTree
	|GetVisible(params)
    Sort(params)]
[<instance>wiRenderer
	|static scene : Scene
    static cam : Camera
    ...
    |static FixedUpdate()
    static UpdatePerFrameData(float dt)
    static UpdateRenderData(GRAPHICSTHREAD)
    static OcclusionCulling_Render(GRAPHICSTHREAD)
    static OcclusionCulling_Read(GRAPHICSTHREAD)
    static ReloadShaders(string path)
    static DrawWorld(params, GRAPHICSTHREAD)
    static DrawWorldTransparent(params, GRAPHICSTHREAD)
    static DrawForShadowMap(GRAPHICSTHREAD)
    ...
    static ResolveMSAADepthBuffer(params)
    static GenerateMipChain(params)
    ...
    static Pick(params)
    static LoadModel(params)
    ...]
[wiImage
	|Draw(wiImageEffects, GRAPHICSTHREAD)]
[wiFont
	|Draw(wiFontProps, GRAPHICSTHREAD, scissorRect)]

[<abstract>wiSound
	|Load(string fileName)
    Play(int delay = 0) : HRESULT
    Stop()]
[wiSoundEffect
	|static SetVolume(float)
    static GetVolume() : float]
[wiMusic
	|static SetVolume(float)
    static GetVolume() : float]

[<instance>wiInputManager
	|addXInput(wiXInput)
    addDirectInput(wiDirectInput)
    addRawInput(wiRawInput)
    down(params) : bool
    press(params) : bool
    hold(params) : bool
    getpointer() : float4
    setPointer(float4)
    hidepointer(bool)
    getTouches() : vector<Touch>]
[wiDirectInput]
[wiXInput]
[wiRawInput]

[<instance>wiResourceManager
	|static GetGlobal() : wiResourceManager
    static GetShaderManager() : wiResourceManager
    get(params) : Resource
    add(params)
    del(params)
    CleanUp()]

[<abstract>wiNetwork]
[wiClient
	| ...]
[wiServer
	| ...]

[<abstract>wiPHYSICS
	|virtual Update(float dt)
    virtual MarkForRead()
    virtual UnMarkForRead()
    virtual MarkForWrite()
    virtual UnMarkForWrite()
    virtual ClearWorld()
    virtual CleanUp()
    virtual addWind(vector3 wind)
    virtual addBox(params)
    virtual addSphere(params)
    virtual addCapsule(params)
    virtual addConvexHull(params)
    virtual addTriangleMesh(params)
    virtual addSoftBodyTriangleMesh(params)
    virtual connectVerticesToSoftBody(params)
    virtual connectSoftBodyToVertices(params)
    virtual transformBody(params)
    virtual getObject(int index) : PhysicsTransform
    virtual registerObject(Object)]
[wiBULLET]




[MainComponent]+->1[RenderableComponent]

[RenderableComponent]<:--[Renderable2DComponent]
[Renderable2DComponent]<:-[LoadingScreenComponent]
[Renderable2DComponent]<:-[Renderable3DComponent]
[Renderable3DComponent]<:-[ForwardRenderableComponent]
[Renderable3DComponent]<:-[TiledForwardRenderableComponent]
[Renderable3DComponent]<:-[DeferredRenderableComponent]

[wiGUI]-->[wiInputManager]
[wiGUI]<--[wiWidget]
[wiGUI]+->0..*[wiWidget]
[Renderable2DComponent]+->1[wiGUI]
[wiWidget]<:-[wiLabel]
[wiWidget]<:-[wiButton]
[wiWidget]<:-[wiCheckBox]
[wiWidget]<:-[wiSlider]
[wiWidget]<:-[wiComboBox]
[wiWidget]<:-[wiWindow]
[wiWindow]<:-[wiColorPicker]
[wiWidget]-:>[Transform]

[GraphicsDevice]<--[wiRenderer]
[GraphicsDevice]<--[wiImage]
[GraphicsDevice]<--[wiFont]
[GraphicsResources] friend - [GraphicsDevice]
[GraphicsResources]-->[GraphicsDescriptors]
[GraphicsDevice]<--[wiResourceManager]
[GraphicsDevice]<:--[GraphicsDevice_DX11]
[Scene]+->0..*[Model]
[Scene]+->1[WorldInfo]
[Scene]+->1[Wind]
[Scene]+->0..*[EnvironmentProbe]
[Model]+->0..*[Mesh]
[Model]+->0..*[Object]
[Model]+->0..*[Material]
[Model]+->0..*[Armature]
[Armature]+->0..*[Bone]
[Armature]+->0..*[Action]
[Armature]+->0..*[AnimationLayer]
[Model]+->0..*[Light]
[Model]+->0..*[Camera]
[Model]+->0..*[EnvironmentProbe]
[Model]+->0..*[Decal]
[Model]-:>[Transform]
[Object]-:>[Transform]
[Armature]-:>[Transform]
[Bone]-:>[Transform]
[Decal]-:>[Transform]
[Camera]-:>[Transform]
[EnvironmentProbe]-:>[Transform]
[Light]-:>[Transform]
[Object]+->0..1[Mesh]
[Mesh]+->0..*[MeshSubset]
[MeshSubset]+->1[Material]
[Mesh]+->0..1[Armature]

[wiRenderer]+->0..*[Scene]
[wiRenderer]+->1[wiSPTree]
[wiRenderer]+->1[GraphicsDevice]
[wiRenderer]+->1[wiPHYSICS]
[wiImage]<--[MainComponent]
[wiImage]<--[Renderable2DComponent]
[wiFont]<--[MainComponent]
[wiFont]<--[Renderable2DComponent]
[wiRenderer]<--[Renderable3DComponent]

[wiSound]<--[wiResourceManager]
[wiSound]<:--[wiSoundEffect]
[wiSound]<:--[wiMusic]

[wiInputManager]<-[wiDirectInput]
[wiInputManager]<-[wiXInput]
[wiInputManager]<-[wiRawInput]

[wiNetwork]<:--[wiServer]
[wiNetwork]<:--[wiClient]

[wiPHYSICS]<:--[wiBULLET]
[wiPHYSICS]<:--[wiHAVOK (PRIVATE)]
