All Projects → yuki-koyama → bigger

yuki-koyama / bigger

Licence: MIT License
bigg (bgfx + imgui + glfw + glm) + utils

Programming Languages

C++
36643 projects - #6 most used programming language
CMake
9771 projects
SuperCollider
123 projects
scala
5932 projects
shell
77523 projects

Projects that are alternatives of or similar to bigger

Bimpy
imgui for python
Stars: ✭ 144 (+42.57%)
Mutual labels:  glfw, imgui
Vxr
General purpose engine written in C++ with emphasis on materials rendering (PBR, clear coat, anisotropy, iridescence)
Stars: ✭ 181 (+79.21%)
Mutual labels:  glfw, imgui
VulkanRenderer
Personal repo for learning the vulkan graphics api
Stars: ✭ 42 (-58.42%)
Mutual labels:  imgui, glm
Nimgl
NimGL is a Nim library that offers bindings for popular libraries used in computer graphics
Stars: ✭ 218 (+115.84%)
Mutual labels:  glfw, imgui
RCCpp-DearImGui-GLFW-example
Add Runtime Compiled C++ to the Dear ImGui example using the GLFW and OpenGL backend - with power saving
Stars: ✭ 61 (-39.6%)
Mutual labels:  glfw, imgui
ruby-imgui
Yet another ImGui wrapper for Ruby
Stars: ✭ 42 (-58.42%)
Mutual labels:  glfw, imgui
Webgui
An example demo of IMGUI (Immediate Mode GUI) on the web. Using only WebGL, GLFW and ImGui. Suitable for being compiled to web assembly (WASM).
Stars: ✭ 180 (+78.22%)
Mutual labels:  glfw, imgui
rapp
Cross-platform entry point library
Stars: ✭ 57 (-43.56%)
Mutual labels:  bgfx, imgui
glfw-skeleton
💀 A skeleton OpenGL C++ app bootstrapped with glfw, glad, and glm.
Stars: ✭ 24 (-76.24%)
Mutual labels:  glfw, glm
imgui-java
JNI based binding for Dear ImGui
Stars: ✭ 270 (+167.33%)
Mutual labels:  glfw, imgui
bgfx-python
Python 3.7+ wrapper for the BGFX library. 🐍
Stars: ✭ 99 (-1.98%)
Mutual labels:  bgfx, imgui
CFX-BYPASS
Bypass it, you won't be Banned when playing cheats 2022
Stars: ✭ 18 (-82.18%)
Mutual labels:  imgui
toxic-decorators
Library of Javascript decorators
Stars: ✭ 26 (-74.26%)
Mutual labels:  utils
GLFWDotNet
.NET bindings for GLFW.
Stars: ✭ 47 (-53.47%)
Mutual labels:  glfw
DearPyGui-Obj
An object-oriented wrapper around DearPyGui
Stars: ✭ 32 (-68.32%)
Mutual labels:  imgui
glfw-d
D translation of GLFW, a multi-platform library for OpenGL, OpenGL ES, Vulkan, window and input
Stars: ✭ 14 (-86.14%)
Mutual labels:  glfw
Omega2D
Two-dimensional flow solver with GUI using vortex particle and boundary element methods
Stars: ✭ 17 (-83.17%)
Mutual labels:  imgui
demos
OpenGL and Vulkan graphics experiments and samples
Stars: ✭ 34 (-66.34%)
Mutual labels:  imgui
Apos.Gui
UI library for MonoGame.
Stars: ✭ 77 (-23.76%)
Mutual labels:  imgui
core
🔥 Antares Core Implemenation. Most important project layer, this is the heart for your app. ACL, notifiter, console, geoip, areas, utils and many more...
Stars: ✭ 24 (-76.24%)
Mutual labels:  utils

bigger

macOS Ubuntu GitHub license

bigg (bgfx + imgui + glfw + glm) + utils

This library, named bigger, is a prototype-oriented middleware library for 3D interactive applications. Based on a library named bigg, which stands for bgfx + imgui + glfw + glm, this library adds some higher-level utilities (such as renderable primitive classes) to make the prototyping of lightweight and cross-platform apps even easier.

Languages

  • C++17
  • GLSL 1.30

Dependencies

Main Classes

  • App (needs to be overridden)
  • Camera
  • Primitives
    • Cube primitive
    • Dynamic mesh primitive
    • Mesh primitive
    • Plane primitive
    • Sphere primitive
  • Materials
    • Blinn-Phong material
    • MatCap material

App Event Cycle

  • bigger::App::runApp()
    • bigg::Application::run()
      • glfw initialization
      • bgfx initialization
      • imgui initialization
      • Reset
      • bigger::App::initialize() (needs to be overridden)
      • Main loop
        • glfw event polling
        • imgui event polling
        • bigger::App::update()
          • bigger::App::updateApp() (needs to be overridden)
          • Update scene objects (bigger::SceneObject::update())
          • Render scene objects (bigger::SceneObject::draw())
        • imgui render
        • bgfx submit
      • bigger::App::shutdown()
        • Release scene objects
        • bigger::App::releaseSharedResources() (needs to be overridden)
      • imgui shutdown
      • bgfx shutdown
      • glfw shutdown

App Design

  • Always two directional lights
    • Other types of lights or more than two directional lights are not supported
  • Intensive use of smart pointers
    • Primitives and materials need to be dynamically instantiated and managed by smart pointers (i.e., either std::shared_ptr<T> or std::unique_ptr<T>)

Usage

Minimal Example

This is a minimal example of using bigger::App. This app just shows a blank window and do nothing.

#include <bigger/app.hpp>

class MinimalApp final : public bigger::App
{
public:

    MinimalApp() {}

    void initialize(int argc, char** argv) override {}
    void updateApp() override {}
    void releaseSharedResources() override {}
};

int main(int argc, char** argv)
{
    MinimalApp app;
    return app.runApp(argc, argv);
}

Override App Class

The following three methods need to be overridden by the new app class:

  • bigger::App::initialize(): Initializing the app and instantiating necessary objects living through the app life.
  • bigger::App::updateApp(): Writing frame-wise update rules and calling imgui draw calls.
  • bigger::App::releaseSharedResources(): Releasing shared resources maintained by the app class (such as vertex buffers).

(TODO)

Additional Notes: Screen Capture

bgfx provides screen capture functionalities, which of course can be directly called (see the official documentation and examples). For easier use, in bigger by default, just inserting the following one-line code into update() can capture the screen:

bgfx::requestScreenShot(BGFX_INVALID_HANDLE, "/path/to/output");

Note: On macOS, using the Metal backend somehow fails to capture the screen (not sure why; probably related to this issue). A possible quick fix is to use OpenGL.

License

MIT License

Contribution

Issue reports & pull requests are highly welcomed.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].