One of the main goals of this project is the implementation of functionally known from current-generation graphics-cards in software. Vertex- and pixel shaders enable developers to create effects that weren't possible in the past due to the limitations of the so-called fixed-function. Muli3D follows the same concept and provides support for shaders. Vertex-shaders perform geometry operations while pixel-shaders take care of color and depth of pixels that are written to the screen.
Besides the flexibility of shaders Muli3D also implements concept of 3D APIs Microsoft Direct3D and OpenGL. The drawing process is based on vertex buffers and index buffers, which store the necessary information for triangle rasterization. Vertex formats describe the layout of the data that is passed to vertex shaders. Muli3D also supports different types of textures, which can be sampled in both vertex and pixel shaders enabling the developer to perform displacment-mapping, an important feature for future applications. A base for displacement mapping is also realized through different kinds of subdivision-modes in Muli3D, which allows easy subdivision of triangles during the drawing process.
Muli3D implements a good part of the feature set of current hardware accelerators and includes several new ideas that aren't supported by graphics cards yet.
Ease of use
Muli3D's interfaces resemble those of Microsoft Direct3D's allowing developers with experience in that API an easy transition to Muli3D, e.g. for shader prototyping. Direct3D's support for the fixed-function pipeline hasn't been included in Muli3D though, resulting in a leaner library without reducing its functionality.
Muli3D should be considered a library for research and education: While assember code might accelerate certain parts of the rendering pipeline, it would definitely reduce code readability. Therefore Muli3D is based solely on C/C++ code to give everybody the chance to understand the inner structure of the library. Code documentation is another important aspect of this goal: check out Muli3D's source code or the online-reference for more information!
Performance is not as important as clear code in this project. Nevertheless code-optimization is still pursued from release to release to guarantee Muli3D's useability in research projects.