Interfaces
The interfaces are the way the framework, the managers, and the
systems communicate with each other. The framework and the
managers reside within the engine, and therefore the framework has
direct access to the managers. The systems, however, reside outside
of the engine and have different functionality from one another,
making it necessary to have a common method for accessing them.
Also, the systems do not have direct access to the managers, so the
systems also need a method for accessing the managers. Systems do
not require access to the full functionality of the managers, as certain
items should only be accessible to the framework.
The interfaces provide a set functionality that needs to be implemented
in order to have a common method of access. This makes it
unnecessary for the framework to know the details about a specific
system as it can communicate to it through a known set of calls.
Subject and Observer
The subject and observer interfaces register the observer with the
subject and pass the change notifications from the subject to the
observer. A default subject implementation is also provided because
the functionality to handle observer registration/de-registration is
common to all subjects.
Manager
The managers, even though they are singletons, are only directly
available to the framework; the different systems cannot access them.
In order to provide access, each manager would have an interface that
exposes a subset of its functionality. The interface would then be
passed to the system when it gets initialized and the systems would
then have access to a subset of the manager.
The interface defined is dependent upon the manager and therefore is
not a common interface but specific to that manager.
System
The systems need to implement interfaces in order for the framework
to get access to its components. Without system interfaces,
the framework would have to implement a specific implementation
of each new system that gets added to the engine.
A system has four components; in turn, a system must implement
four interfaces.
The scene and object interfaces also derive from the subject and
observer interfaces because these are the pieces of the system that
need to communicate not only with one another, but also with the
universal scene and objects to which they are attached.
Change
Change interfaces are special interfaces that are used for passing
data between the systems. Any systems that make these specific
modifications must also implement the interface. For example,
the geometry interface has methods for retrieving the position,
orientation, and scale for a certain item. Any systems that make
modifications to geometry would need to implement this interface
so that a different system would be able to access the geometry
changes without needing to know about the other system.
Systems
The systems provide the game functionality to the engine. Without
them, the engine would just spin endlessly without any tasks to
perform. To keep the engine from having to know about the different
system types, systems must implement the interfaces described in
the System section. This makes it simpler to add a new system to the
engine because the engine doesn't need to know about the details.
Types
The engine should have some predefined systems types for standard
game components. Examples: geometry, graphics, physics (rigid body
collision), audio, input, AI, and animation.
A custom type is also recommended for systems that implement
functionality outside the common functional blocks in a game. Any
systems that modify the custom type's specific data items will need
to know about the custom type's interface because the engine does
not provide this information.
System Components
A system has several components that need to be implemented:
system, scene, object, and task. These components are all used to
communicate with the different sections within the engine (Figure 9).
Figure 9. The relationship between the system components.
For a more detailed diagram of the systems' relationship, refer to
Appendix A.
System
The system component, or system, initializes the system resources
that will remain more or less constant throughout the engine's
execution. For example, the graphics system analyzes the passed-in
resource locations to determine where they are located for quicker
loading upon use of a resource. The screen resolution is another item
set by the graphics system.
The system is also the main entry point for the framework and
provides information about itself, such as its type, and methods for
scene creation and destruction.
Scene
The scene component, also known as a system scene, handles the
resources that are pertinent to the existing scene. The universal
scene uses this scene as an extension of its functionality to make
available the properties this system scene provides. An example of
this component is the physics scene creating a new world and setting
the gravity for the world upon scene initialization.
The scene provides methods for object creation and destruction. It
also owns the task component, which is used to operate on the scene.
|
Reminds me of Erlang.
Can you post some test results ?
Corei7 performance scaling will probably be decent (around 4x I bet) :p
But did you have the opportunity to tests on a xeon 7400 (6 cores) or on a dualxeon (12 cores) ?
Vincent