Git Product home page Git Product logo

bigger's Introduction

bigger

Build Status

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

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). A possible quick fix is to use OpenGL.

License

MIT License

Contribution

Issue reports & pull requests are highly welcomed.

bigger's People

Contributors

yuki-koyama avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.