2021-06-03 18:44:52 +05:30
## blah
A small 2D C++ Game Framework, using few dependencies and simple code to mainain easy building and portability.
** ☆ This will likely see breaking changes! Use at your own risk! ☆**
#### building
2022-01-09 19:20:13 -08:00
- Requires C++17 and CMake 3.14+
2022-01-09 18:40:30 -08:00
- A single *Platform* implementation must be enabled:
- [SDL2 ](https://github.com/NoelFB/blah/blob/master/src/internal/platform_sdl2.cpp ) can be enabled in CMake with `BLAH_PLATFORM_SDL2` (default)
- [WIN32 ](https://github.com/NoelFB/blah/blob/master/src/internal/platform_win32.cpp ) (UNFINISHED) can be enabled in CMake with `BLAH_PLATFORM_WIN32`
- Additional platforms can be added by implementing the [Platform Backend ](https://github.com/NoelFB/blah/blob/master/src/internal/platform.h )
2022-02-09 18:49:47 -08:00
- At least one *Renderer* implementation must be enabled:
- [OpenGL ](https://github.com/NoelFB/blah/blob/master/src/internal/renderer_gl.cpp ) can be enabled in CMake with `BLAH_RENDERER_OPENGL`
- [D3D11 ](https://github.com/NoelFB/blah/blob/master/src/internal/renderer_d3d11.cpp ) can be enabled in CMake with `BLAH_RENDERER_D3D11`
- Additional renderers can be added by implementing the [Renderer Backend ](https://github.com/NoelFB/blah/blob/master/src/internal/renderer.h )
2021-06-03 18:44:52 +05:30
#### notes
- There's no Shader abstraction, so the [Sprite Batcher ](https://github.com/NoelFB/blah/blob/master/src/graphics/batch.cpp ) has hard-coded GLSL/HLSL. This will need to change.
- Only floatN/mat3x2/mat4x4 uniforms are supported.
- There's no Audio API or backend implementation yet.
- No threaded rendering so it will explode if you try that.
#### a sample application
```cpp
#include <blah.h>
using namespace Blah ;
Batch batch ;
int main ()
{
Config config ;
config . name = "blah app" ;
2022-02-09 18:49:47 -08:00
config . on_render = []()
{
App :: backbuffer () -> clear ( Color :: black );
auto center = App :: get_backbuffer_size () / 2 ;
auto rotation = Time :: seconds * Calc :: TAU ;
auto transform = Mat3x2f :: create_transform ( center , Vec2f :: zero , Vec2f :: one , rotation );
batch . push_matrix ( transform );
batch . rect ( Rectf ( - 32 , - 32 , 64 , 64 ), Color :: red );
batch . pop_matrix ();
batch . render ();
batch . clear ();
};
2021-06-03 18:44:52 +05:30
App :: run ( & config );
return 0 ;
}
```