Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

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

License

NotificationsYou must be signed in to change notification settings

yuki-koyama/bigger

Repository files navigation

macOSUbuntuGitHub license

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

This library, namedbigger, is a prototype-oriented middleware library for 3D interactive applications. Based on a library namedbigg, which stands forbgfx +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., eitherstd::shared_ptr<T> orstd::unique_ptr<T>)

Usage

Minimal Example

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

#include<bigger/app.hpp>classMinimalAppfinal : public bigger::App{public:MinimalApp() {}voidinitialize(int argc,char** argv)override {}voidupdateApp()override {}voidreleaseSharedResources()override {}};intmain(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 callingimgui 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, inbigger by default, just inserting the following one-line code intoupdate() 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 tothis issue). A possible quick fix is to use OpenGL.

License

MIT License

Contribution

Issue reports & pull requests are highly welcomed.

About

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

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp