A Beautiful and Modern 3D Display for RGB Data
OpenGLSomethingFrameDisplayerEVO is a graphical API for displaying RGB data in a Minecraft-like world. Currently, only chunk mode is available, but additional display modes will be added in the future.
๐ฎ RGBA support coming soon!
- โ Linux (fully supported)
- โ macOS (fully supported)
- โณ Windows (coming soon)
- OpenGL (scene rendering)
- GLFW (window creation)
git clone https://github.com/IdkWhatToWriteHereOhManItWasAlreadyUsed/OpenGLSomethingFrameDisplayerEVO.gitAdd to your CMakeLists.txt:
# Add subdirectory
add_subdirectory(OpenGLSomethingFrameDisplayerEVO)
# Link the library
target_link_libraries(your_project_name
PRIVATE
OpenGLSomethingFrameDisplayerEVO
)
# Copy resources
copy_opengl_resources(${PROJECT_NAME})mkdir build && cd build
cmake ..
make -j$(nproc)#include "OpenGLSomethingFrameDisplayerEVO.h"// Create a global instance (important for multi-threading)
OpenGLSomethingFrameDisplayerEVO::OpenGLSomethingFrameDisplayerEVO displayer;
// Set video size BEFORE initialization
displayer.SetVideoSize(480, 360);
// Initialize the engine (window size: 1280x720)
displayer.InitialiseGame(1280, 720);
// Start the engine
displayer.Start();
// Display a frame from another thread
std::vector<uint8_t> frame_data(width * height * 3); // RGB data
displayer.DisplayFrame(frame_data.data());// Specify number of threads for the engine
// Consider your application's total thread usage
displayer.SetThreadCount(4);// Thread A: Set video size
displayer.SetVideoSize(640, 480);
// Initialisation Thread : Wait for video size to be set
displayer.WaitForSetVideoSize();
// Thread B: Wait for engine initialization
displayer.WaitForGameInit();// IMPORTANT: On macOS, initialization and running must
// occur in the main thread of the process
int main() {
// Initialization and start MUST be here
displayer.InitialiseGame(800, 600);
displayer.Start();
return 0;
}- Take control: Hover over window and press
Left Ctrl - Movement:
WASD - Camera rotation: Mouse movement
- Exit:
Esc(with cursor captured) or window close button
- Unlock mouse (
Left Ctrl) - Use ImGui panel for real-time scene adjustments
- Modify lighting, textures, and other parameters
- โ Video resizing not supported (and probably never will be)
- ๐ Recommended video size: up to 480ร360
- ๐ง Not thread-safe:
DisplayFramecan be called from any thread, but not concurrently
- Use small video resolutions (up to 480ร360)
- Optimally distribute threads between your app and the engine
- Increase engine thread count for higher resolutions
Full-featured video player using FFmpeg and OpenGL: GitHub Repository
build/
โโโ your_app
โโโ res/
โ โโโ shaders/
โ โโโ textures/
โ โโโ blocks/
This project is licensed under the MIT License. See LICENSE for details.
Enjoy! ๐
For questions or suggestions, please create an issue in the project repository.