In the Quickstart guide you have learnt that you can
quickly get models onto the screen using the submit method.
While this works just fine, it is not the recommended approach, as it does not
allow you to utilize the BBMOD library to its maximum potential. For this you
should use the method
What render does is that it only puts render commands into separate render queues (one for each used material), which can be then traversed and executed multiple times, using a different shader, different configuration, different render target (like off-screen surface) etc.
render takes exactly the same arguments as
submit, so it is easy to
switch from one to another. Additionally, since
render does not draw the model
right away (and so it does not immediately apply materials), you do not have to
(and you should not) call bbmod_material_reset
before and after
/// @desc Draw event matrix_set(matrix_world, matrix_build(x, y, z, 0, 0, 0, 1, 1, 1)); bbmod_material_reset(); model.submit(); bbmod_material_reset();
/// @desc Draw event matrix_set(matrix_world, matrix_build(x, y, z, 0, 0, 0, 1, 1, 1)); model.render();
The thing that handles traversal and execution of render commands is called a renderer.
As stated above, when you switch to using method
render, you need to create
a renderer (defined in Rendering/Renderer submodule),
which then picks up the created render commands and executes them. We recommend
you to create a renderer in a special controller object like
OGameController, based on your likings.
/// @desc Create event renderer = new BBMOD_Renderer(); /// @desc Step event renderer.update(delta_time); /// @desc Draw event // If you are using a camera, do not forget to apply it here, otherwise the // models will not be rendered from its perspective! OPlayer.camera.apply(); // This is what actually executes the render commands: renderer.render(); /// @desc Clean Up event renderer.destroy();
Please note that the controller object should execute its draw event after all
render commands are created! To ensure this, you can for example place it into
a special layer with the lowest
At this point, your game should look exactly the same as when you used
Now, when you have got your game running using a renderer, you can configure the renderer further to for example change the resolution scale (render the game at a smaller resolution than the window to increase FPS), enable rendering of dynamic shadows or enable various post-processing effects. There should be a dedicated section for each one of these, but to give you an example:
/// @desc Create event renderer = new BBMOD_Renderer(); // Enable control over the application surface renderer.UseAppSurface = true; // Enable post-processing effects (requires UseAppSurface) renderer.EnablePostProcessing = true; // Configure strength of chromatic aberration post-processing effect renderer.ChromaticAberration = 2.0; // Configure strength of vignette post-processing effect renderer.Vignette = 1.5; // Enable fast approximate anti-aliasing (requires Rendering/FXAA submodule) renderer.Antialiasing = BBMOD_EAntialiasing.FXAA; /// @desc Post-Draw event // When UseAppSurface is enabled, you need to call this to draw the application // surface on screen! renderer.present();
For the full list of renderer's properties, please refer to its documentation.
Copyright © 2022, BlueBurn. Built on November 16, 2022 using GMDoc.