#3d #game-engine #engine #gamedev

BearishSun b8d2d25e1d Properly unregister various core rendering managers when they are destroyed 10 år sedan
BansheeCore 4bfb7023eb Clear states in RenderStateManager before shutdown as states try to access that manager when they're destructed 10 år sedan
BansheeD3D11RenderAPI 1583b110f5 Render state caching is now only performed on core objects in order to avoid the issue with deserializing a cached object 10 år sedan
BansheeD3D9RenderAPI 71598ef68e Add "transparent" flag to shaders 10 år sedan
BansheeEditor b8d2d25e1d Properly unregister various core rendering managers when they are destroyed 10 år sedan
BansheeEditorExec 3187a5f447 Hook up light updates in renderer core 10 år sedan
BansheeEngine 48f91880bc Properly update GUI button states when one of the states has no texture 10 år sedan
BansheeFBXImporter 2c35a0c825 Removed all the unused allocators 10 år sedan
BansheeFontImporter 2c35a0c825 Removed all the unused allocators 10 år sedan
BansheeFreeImgImporter 2c35a0c825 Removed all the unused allocators 10 år sedan
BansheeGLRenderAPI 71598ef68e Add "transparent" flag to shaders 10 år sedan
BansheeMono c369197bb8 Fixed an issue where event connections weren being properly released in some cases 10 år sedan
BansheeOISInput 2c35a0c825 Removed all the unused allocators 10 år sedan
BansheeSL e1eaa8bfe2 Modified managed assembly loading so it's possible to reload it on project reload 10 år sedan
BansheeUtility 8c7b5abb5a Fixing issues when attempting to serialize and deserialize null objects 10 år sedan
ExampleProject 508b74a040 Moved GUIManager rendering to a specialized core thread GUIManagerCore 10 år sedan
License 24bfe213ef Added serialization for SceneObject transform 10 år sedan
MBansheeEditor 1116d5ba54 Modal windows are no longer persistent in order to solve issues with assembly refresh 10 år sedan
MBansheeEngine 9d54de245b Fixed a memory corruption issue in GUIManager that happened when a widget was deleted 10 år sedan
RenderBeast 508b74a040 Moved GUIManager rendering to a specialized core thread GUIManagerCore 10 år sedan
SBansheeEditor 1116d5ba54 Modal windows are no longer persistent in order to solve issues with assembly refresh 10 år sedan
SBansheeEngine 4bfb7023eb Clear states in RenderStateManager before shutdown as states try to access that manager when they're destructed 10 år sedan
.gitignore cbacc12172 Removed a bunch of obsolete files, or files that shouldn't be versioned 11 år sedan
BansheeEngine.sln e1eaa8bfe2 Modified managed assembly loading so it's possible to reload it on project reload 10 år sedan
Dependencies.txt d715c4b2ad Fixed an issue with folder monitor where 64bit pointers were being truncated 10 år sedan
Mono-3.2.3-IntegrationGuide.txt ed1d293920 Fix for an issue causing a nullref when releasing a managed instance 11 år sedan
Mono-3.4.0-IntegrationGuide.txt ed1d293920 Fix for an issue causing a nullref when releasing a managed instance 11 år sedan
Mono-3.8.0-IntegrationGuide.txt 24f99ac96e Various fixes in order to get handles operational 11 år sedan
NVTTCompilationGuide.txt bfc32ed4b4 Tiny doc updates 11 år sedan
README.md 71bf18cd5c Updated readme 10 år sedan
TODO.txt b7bbc57aa1 Fixed a crash where GUIManagerCore was attempting to render a destroyed transient mesh 10 år sedan
TODOExperimentation.txt 508b74a040 Moved GUIManager rendering to a specialized core thread GUIManagerCore 10 år sedan

README.md

BansheeEngine

A free & modern multi-platform game development toolkit. It aims to provide simple yet powerful environment for creating games and other graphical applications. A wide range of features are available, ranging from a math and utility library, to DirectX 11 and OpenGL render systems all the way to asset processing, fully featured editor and C# scripting.

Banshee aims to become a standard in game development by providing rock solid implementations of known and widely used techniques while also being flexible enough to implement constantly changing cutting edge techniques. Built from ground up to be a modern library using modern design principles - everything is modular, layered and decoupled as much as possible, making it easier to modify, replace or add functionality. Platform specific functionality is kept at a minimum making porting as easy as possible. Additionally every non-trivial method, class and field is documented.

On top of the powerful and flexible C++ core lies a fully featured editor and a C# scripting system. C# scripting makes your development easier by giving you access to the entire .NET library, along with fast iterations times while being safe and easy to write. Editor is fully extensible with the help of C# scripting so you may customize it for exact needs of your project.

Download/Install

To get Banshee to run you will need to check out the source code either from GitHub or download the source code package below. Additionally you will need dependencies only available for download below. Dependencies should be extracted in the same folder as the root folder of the project (they share folder structure so it should be easy to see what goes where).

To compile Banshee you will need Visual Studio 2013 (Express version will work, but earlier Visual Studio versions will not). Other Windows compilers might work but have not been tested. Support for more platforms and compilers will become available with time.

Download dependencies

Download source + dependencies

To compile DirectX render systems you will also need a separately installed DirectX SDK. Check "Dependencies.txt" for all information regarding used dependencies.

Features (currently available)

  • Editor

    • Asset management
    • Simple drag and drop import
    • Automatic reimport of externally modified assets
    • Asset modifications immediately reflected in-game
    • Version control friendly format
    • Powerful object inspector
    • Automatic GUI for script objects
    • Exposes properties for artists/designers
    • Customizable per-type
    • Level creation
    • Simple drag and drop interface
    • Traditional set of tools
    • Custom 2D and 3D tool support
    • Prefab system
    • Pre-built templates for level design
    • Easy to create and maintain complex levels
    • Hierarchical prefabs and instance specialization
    • Play in editor
    • Compile in editor
    • Immediately test changes
    • Pause and frame-step
    • Analyze and modify scene while playing
    • Fully extensible for game-specific needs
    • Easy to extend using scripting
    • Comprehensive extension scripting API
    • Extend almost anything
      • Editor windows
      • Object inspectors
      • 2D/3D tools
      • Automate common tasks
    • Game publishing
    • One click build process
    • Automatically detect required resources
    • Automatically package and output an executable
    • Customizable frontend
    • Dockable layout and floating windows
    • Custom skin & localization support
  • Core

    • Design
    • Built using C++11 and modern design principles
    • Clean layered design
    • Fully documented
    • Modular & plugin based
    • Multiplatform ready
    • Renderer
    • DX9, DX11 and OpenGL 4.3 render systems
    • Multi-threaded rendering
    • Flexible material system
      • Easy to control and set up
      • BansheeFX language for material definitions
      • Shader parsing for HLSL9, HLSL11 and GLSL
    • Asset pipeline
    • Easy to use
    • Asynchronous resource loading
    • Extensible importer system
    • Available importer plugins for:
      • FXB, OBJ, DAE meshes
      • PNG, PSD, BMP, JPG, ... images
      • OTF, TTF fonts
      • HLSL9, HLSL11, GLSL shaders
    • Powerful GUI system
    • Unicode text rendering and input
    • Easy to use layout based system
    • Many common GUI controls
    • Fully skinnable
    • Automatic batching
    • Support for texture atlases
    • Localization
    • Scripting
    • C# via Mono
    • Separate high level engine API
    • Integrated runtime for maximum performance
    • Full access to .NET framework
    • Integration with Visual Studio
    • Automatic serialization
      • Custom components
      • Custom resources
      • No additional code
      • Handles complex types and references
    • Other
    • CPU & GPU profiler
    • Virtual input
    • Advanced RTTI system
    • Automatic object serialization/deserialization
    • Debug drawing
    • Utility library
      • Math, file system, events, thread pool, task scheduler, logging, memory allocators and more

Features (upcoming)

  • DirectX 12/Vulkan support
  • High quality renderer
  • Physics system integration
  • Audio system integration
  • Video system integration
  • Networking system integration
  • Animation
  • GUI animation
  • Mac & Linux support

Development state

Project is currently in active development. Current version is considered a preview version. Bugs are to be expected and new features will be added as development progresses.

Jump in

Easiest way to get started with Banshee is to check out the ExampleProject included with the source code. However to give you a taste here are a few code snippets.

Starting a minimal application

  RENDER_WINDOW_DESC renderWindowDesc;
  renderWindowDesc.videoMode = VideoMode(1280, 720);
  renderWindowDesc.title = "My App";
  renderWindowDesc.fullscreen = false;
	
  Application::startUp(renderWindowDesc, RenderSystemPlugin::DX11);
  Application::instance().runMainLoop();
  Application::shutDown();

Importing resources

  HMesh dragonModel = Importer::instance().import<Mesh>("Dragon.fbx");
  HTexture dragonTexture = Importer::instance().import<Texture>("Dragon.psd");

Adding and positioning a camera

  HSceneObject sceneCameraSO = SceneObject::create("SceneCamera");
  HCamera sceneCamera = sceneCameraSO->addComponent<Camera>(window);

  sceneCameraSO->setPosition(Vector3(40.0f, 30.0f, 230.0f));
  sceneCameraSO->lookAt(Vector3(0, 0, 0));

Adding an object for rendering

  HSceneObject dragonSO = SceneObject::create("Dragon");
  
  HRenderable renderable = dragonSO->addComponent<Renderable>();
  renderable->setMesh(dragonModel);
  renderable->setMaterial(dragonMaterial);

Adding GUI

  HSceneObject guiSO = SceneObject::create("GUI");
  HCamera guiCamera = guiSO->addComponent<Camera>(window);
  
  HGUIWidget gui = guiSO->addComponent<GUIWidget>(guiCamera->getViewport().get());
  GUIArea* guiArea = GUIArea::createStretchedXY(*gui, 0, 0, 0, 0);
  guiArea->getLayout().addElement(GUIButton::create(HString(L"Click me!")));
  guiArea->getLayout().addElement(GUIButton::create(HString(L"Click me too!")));

License

Banshee is offered completely free for personal or commercial use. Only requirement is that you include Banshee Logo in your application when using any part of Banshee. Read BansheeLicense.rtf included with the project for more details.

Author

Banshee is developed by Marko Pintera. I built the entire project from in my free time out of personal interest in game engine development, never having had the chance to do it professionally. As time went by it evolved into something more and it's now hard to believe how far the project has progressed since I started. With time (especially if community joins in) I hope we can build something that can rival true AAA projects.

I'd love to hear input from other developers, especially if it's positive! Contact me at [email protected] (antispam: flip gmail/com).