├── .gitattributes ├── .gitignore ├── .gthub-media ├── nuro-example-1.jpg └── nuro_banner.jpg ├── CMakeLists.txt ├── CMakePresets.json ├── LICENSE ├── README.md ├── nuro-core ├── CMakeLists.txt ├── audio │ ├── audio_buffer.cpp │ ├── audio_buffer.h │ ├── audio_clip.cpp │ ├── audio_clip.h │ ├── audio_context.cpp │ ├── audio_context.h │ ├── audio_data.cpp │ ├── audio_data.h │ ├── audio_device.cpp │ ├── audio_device.h │ ├── audio_info.h │ ├── audio_listener.cpp │ ├── audio_listener.h │ ├── audio_samples.h │ ├── audio_source.cpp │ └── audio_source.h ├── backend │ └── api.h ├── context │ ├── application_context.cpp │ └── application_context.h ├── diagnostics │ ├── diagnostics.cpp │ ├── diagnostics.h │ ├── profiler.cpp │ └── profiler.h ├── ecs │ ├── components.h │ ├── ecs.cpp │ ├── ecs.h │ ├── ecs_collection.h │ ├── ecs_reflection.cpp │ ├── ecs_reflection.h │ └── entity_container.h ├── engine.h ├── input │ ├── cursor.cpp │ ├── cursor.h │ ├── input.cpp │ └── input.h ├── memory │ ├── resource.h │ ├── resource_manager.cpp │ ├── resource_manager.h │ └── resource_pipe.h ├── misc │ └── stb_image.cpp ├── physics │ ├── core │ │ ├── physics_bridge.cpp │ │ ├── physics_bridge.h │ │ ├── physics_context.cpp │ │ └── physics_context.h │ ├── physics.h │ ├── rigidbody │ │ ├── rigidbody.cpp │ │ ├── rigidbody.h │ │ └── rigidbody_enums.h │ └── utils │ │ ├── px_translator.cpp │ │ └── px_translator.h ├── rendering │ ├── culling │ │ ├── bounding_volume.cpp │ │ └── bounding_volume.h │ ├── gizmos │ │ ├── gizmo_color.h │ │ ├── gizmos.h │ │ ├── imgizmo.cpp │ │ └── imgizmo.h │ ├── icons │ │ ├── icon_pool.cpp │ │ └── icon_pool.h │ ├── material │ │ ├── imaterial.h │ │ ├── lit │ │ │ ├── lit_material.cpp │ │ │ └── lit_material.h │ │ └── unlit │ │ │ ├── unlit_material.cpp │ │ │ └── unlit_material.h │ ├── model │ │ ├── mesh.cpp │ │ ├── mesh.h │ │ ├── model.cpp │ │ └── model.h │ ├── passes │ │ ├── forward_pass.cpp │ │ ├── forward_pass.h │ │ ├── pre_pass.cpp │ │ ├── pre_pass.h │ │ ├── ssao_pass.cpp │ │ └── ssao_pass.h │ ├── postprocessing │ │ ├── bloom_pass.cpp │ │ ├── bloom_pass.h │ │ ├── motion_blur_pass.cpp │ │ ├── motion_blur_pass.h │ │ ├── post_processing.h │ │ ├── post_processing_pipeline.cpp │ │ └── post_processing_pipeline.h │ ├── primitives │ │ ├── global_quad.cpp │ │ ├── global_quad.h │ │ ├── shapes.cpp │ │ └── shapes.h │ ├── shader │ │ ├── shader.cpp │ │ ├── shader.h │ │ ├── shader_pool.cpp │ │ └── shader_pool.h │ ├── shadows │ │ ├── shadow_disk.cpp │ │ ├── shadow_disk.h │ │ ├── shadow_map.cpp │ │ └── shadow_map.h │ ├── skybox │ │ ├── cubemap.cpp │ │ ├── cubemap.h │ │ ├── skybox.cpp │ │ └── skybox.h │ ├── texture │ │ ├── texture.cpp │ │ └── texture.h │ ├── transformation │ │ ├── transformation.cpp │ │ └── transformation.h │ └── velocitybuffer │ │ ├── velocity_buffer.cpp │ │ └── velocity_buffer.h ├── scene │ ├── scene.cpp │ ├── scene.h │ ├── scene_manager.cpp │ └── scene_manager.h ├── shaders │ ├── gizmo │ │ ├── gizmo_fill │ │ │ ├── .frag │ │ │ └── .vert │ │ └── gizmo_icon │ │ │ ├── .frag │ │ │ └── .vert │ ├── legacy │ │ └── lit_legacy │ │ │ ├── .frag │ │ │ └── .vert │ ├── materials │ │ ├── lit │ │ │ ├── .frag │ │ │ └── .vert │ │ ├── mat_unavailable │ │ │ ├── .frag │ │ │ └── .vert │ │ ├── skybox │ │ │ ├── .frag │ │ │ └── .vert │ │ └── unlit │ │ │ ├── .frag │ │ │ └── .vert │ ├── passes │ │ ├── pre_pass │ │ │ ├── .frag │ │ │ └── .vert │ │ └── shadow_pass │ │ │ ├── .frag │ │ │ └── .vert │ ├── postprocessing │ │ ├── bloom_downsampling │ │ │ ├── .frag │ │ │ └── .vert │ │ ├── bloom_prefilter │ │ │ ├── .frag │ │ │ └── .vert │ │ ├── bloom_upsampling │ │ │ ├── .frag │ │ │ └── .vert │ │ ├── debug_pass │ │ │ ├── .frag │ │ │ └── .vert │ │ ├── final_pass │ │ │ ├── .frag │ │ │ └── .vert │ │ ├── motion_blur_pass │ │ │ ├── .frag │ │ │ └── .vert │ │ ├── ssao_blur │ │ │ ├── .frag │ │ │ └── .vert │ │ ├── ssao_pass │ │ │ ├── .frag │ │ │ └── .vert │ │ ├── velocity_pass │ │ │ ├── .frag │ │ │ └── .vert │ │ └── velocity_postfilter │ │ │ ├── .frag │ │ │ └── .vert │ └── startup │ │ ├── startup_background │ │ ├── .frag │ │ └── .vert │ │ └── startup_model │ │ ├── .frag │ │ └── .vert ├── time │ ├── time.cpp │ └── time.h ├── transform │ ├── transform.cpp │ ├── transform.h │ ├── transform_pass.cpp │ └── transform_pass.h ├── utils │ ├── callback.h │ ├── concurrent_queue.h │ ├── console.cpp │ ├── console.h │ ├── event.h │ ├── format.cpp │ ├── format.h │ ├── fsutil.cpp │ ├── fsutil.h │ ├── guid.cpp │ ├── guid.h │ ├── string_helper.cpp │ └── string_helper.h └── viewport │ ├── viewport.cpp │ └── viewport.h ├── nuro-editor ├── CMakeLists.txt ├── assetsys │ ├── asset_meta.cpp │ ├── asset_meta.h │ ├── editor_asset.h │ ├── fallback_asset.cpp │ ├── fallback_asset.h │ ├── font_asset.cpp │ ├── font_asset.h │ ├── texture_asset.cpp │ └── texture_asset.h ├── gizmos │ ├── component_gizmos.cpp │ ├── component_gizmos.h │ └── editor_gizmo_color.h ├── imgui │ ├── ImGuizmo.cpp │ ├── ImGuizmo.h │ ├── README.md │ ├── imconfig.h │ ├── imgui.cpp │ ├── imgui.h │ ├── imgui_demo.cpp │ ├── imgui_draw.cpp │ ├── imgui_impl_glfw.cpp │ ├── imgui_impl_glfw.h │ ├── imgui_impl_opengl3.cpp │ ├── imgui_impl_opengl3.h │ ├── imgui_impl_opengl3_loader.h │ ├── imgui_internal.h │ ├── imgui_tables.cpp │ ├── imgui_widgets.cpp │ ├── implot.cpp │ ├── implot.h │ ├── implot_demo.cpp │ ├── implot_internal.h │ ├── implot_items.cpp │ ├── imstb_rectpack.h │ ├── imstb_textedit.h │ ├── imstb_truetype.h │ ├── textselect.cpp │ └── textselect.hpp ├── main.cpp ├── pipelines │ ├── game_view_pipeline.cpp │ ├── game_view_pipeline.h │ ├── preview_pipeline.cpp │ ├── preview_pipeline.h │ ├── scene_view_forward_pass.cpp │ ├── scene_view_forward_pass.h │ ├── scene_view_pipeline.cpp │ └── scene_view_pipeline.h ├── project │ ├── project_assets.cpp │ ├── project_assets.h │ ├── project_manager.cpp │ ├── project_manager.h │ ├── project_observer.cpp │ └── project_observer.h ├── reflection │ ├── asset_registry.cpp │ ├── asset_registry.h │ ├── component_registry.cpp │ └── component_registry.h ├── runtime │ ├── runtime.cpp │ └── runtime.h ├── testing │ ├── game_logic.cpp │ └── game_logic.h ├── ui │ ├── collection │ │ └── IconsFontAwesome6.h │ ├── components │ │ ├── im_components.cpp │ │ ├── im_components.h │ │ ├── inspectable_components.cpp │ │ ├── inspectable_components.h │ │ ├── toggle_bar.cpp │ │ └── toggle_bar.h │ ├── context_menu │ │ ├── context_menu.cpp │ │ └── context_menu.h │ ├── dynamic_drawing │ │ ├── draw_alignments.h │ │ ├── dynamic_content.cpp │ │ ├── dynamic_content.h │ │ ├── dynamic_text.cpp │ │ └── dynamic_text.h │ ├── editor_ui.cpp │ ├── editor_ui.h │ ├── footer │ │ ├── footer.cpp │ │ └── footer.h │ ├── inspectables │ │ ├── asset_inspectable.cpp │ │ ├── asset_inspectable.h │ │ ├── entity_inspectable.cpp │ │ ├── entity_inspectable.h │ │ ├── inspectable.h │ │ ├── welcome_inspectable.cpp │ │ └── welcome_inspectable.h │ ├── search │ │ ├── search_popup.cpp │ │ └── search_popup.h │ ├── title_bar │ │ ├── title_bar.cpp │ │ └── title_bar.h │ ├── utils │ │ ├── ui_utils.cpp │ │ └── ui_utils.h │ └── windows │ │ ├── asset_browser_window.cpp │ │ ├── asset_browser_window.h │ │ ├── audio_setup_window.cpp │ │ ├── audio_setup_window.h │ │ ├── console_window.cpp │ │ ├── console_window.h │ │ ├── diagnostics_window.cpp │ │ ├── diagnostics_window.h │ │ ├── editor_window.h │ │ ├── game_window.cpp │ │ ├── game_window.h │ │ ├── insight_panel_window.cpp │ │ ├── insight_panel_window.h │ │ ├── post_processing_window.cpp │ │ ├── post_processing_window.h │ │ ├── registry_window.cpp │ │ ├── registry_window.h │ │ ├── resource_viewer_window.cpp │ │ ├── resource_viewer_window.h │ │ ├── viewport_window.cpp │ │ └── viewport_window.h └── utfcpp │ ├── README.md │ ├── utf8.h │ └── utf8 │ ├── checked.h │ ├── core.h │ ├── cpp11.h │ ├── cpp17.h │ ├── cpp20.h │ └── unchecked.h ├── resources ├── editor-examples │ └── empty-project │ │ ├── .project │ │ └── assets │ │ └── .gitkeep ├── fonts │ ├── Icons │ │ ├── LICENSE.txt │ │ └── fa-solid-900-free.ttf │ └── Inter │ │ ├── Inter_18pt-ExtraLight.ttf │ │ ├── Inter_18pt-Light.ttf │ │ ├── Inter_18pt-Regular.ttf │ │ ├── Inter_18pt-SemiBold.ttf │ │ ├── Inter_18pt-Thin.ttf │ │ └── LICENSE.txt ├── icons │ ├── assets │ │ ├── file.png │ │ ├── folder.png │ │ ├── font.png │ │ ├── material.png │ │ ├── script.png │ │ └── texture.png │ ├── components │ │ ├── audio_listener.png │ │ ├── audio_source.png │ │ ├── box_collider.png │ │ ├── camera.png │ │ ├── directional_light.png │ │ ├── mesh_collider.png │ │ ├── mesh_renderer.png │ │ ├── point_light.png │ │ ├── rigidbody.png │ │ ├── sphere_collider.png │ │ ├── spotlight.png │ │ ├── transform.png │ │ └── velocity_blur.png │ ├── fallback │ │ ├── fallback_icon.png │ │ └── fallback_texture.png │ ├── misc │ │ └── listener_active.png │ ├── post-processing │ │ ├── ambient_occlusion.png │ │ ├── bloom.png │ │ ├── chromatic_aberration.png │ │ ├── color.png │ │ ├── motion_blur.png │ │ └── vignette.png │ ├── scene │ │ ├── audio_source_gizmo.png │ │ ├── camera_gizmo.png │ │ ├── directional_light_gizmo.png │ │ ├── point_light_gizmo.png │ │ └── spotlight_gizmo.png │ └── shared │ │ ├── failed.png │ │ └── logo.png ├── layouts │ └── imgui.ini └── primitives │ ├── cube.fbx │ ├── plane.fbx │ ├── sphere.fbx │ └── sphere_lowpoly.fbx ├── vcpkg-configuration.json └── vcpkg.json /.gitattributes: -------------------------------------------------------------------------------- 1 | # C++ source and header files 2 | *.cpp text 3 | *.h text 4 | *.hpp text 5 | # Object files, compiled binaries, and static libraries 6 | *.o binary 7 | *.obj binary 8 | *.a binary 9 | *.lib binary 10 | *.dll binary 11 | # CMake and build system files 12 | CMakeLists.txt text 13 | *.cmake text 14 | Makefile text 15 | # Asset files (handled as binary) 16 | *.ttf binary 17 | *.otf binary 18 | *.png binary 19 | *.jpg binary 20 | *.jpeg binary 21 | *.gif binary 22 | *.bmp binary 23 | *.tga binary 24 | *.dds binary 25 | *.hdr binary 26 | *.psd binary 27 | *.raw binary 28 | *.fbx binary 29 | *.obj binary 30 | *.dae binary 31 | *.3ds binary 32 | *.blend binary 33 | # Ignore temporary and IDE specific files 34 | .vscode/* binary 35 | .idea/* binary 36 | *.user binary 37 | *.swp binary 38 | # Miscellaneous 39 | *.log text 40 | *.md text 41 | resources/**/*.png filter=lfs diff=lfs merge=lfs -text 42 | resources/**/*.fbx filter=lfs diff=lfs merge=lfs -text 43 | resources/**/*.jpg filter=lfs diff=lfs merge=lfs -text 44 | resources/**/*.ttf filter=lfs diff=lfs merge=lfs -text 45 | resources/**/*.otf filter=lfs diff=lfs merge=lfs -text 46 | -------------------------------------------------------------------------------- /.gthub-media/nuro-example-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jonkwl/nuro/60039f25f36d71950eeb53e230cc72495f037d9d/.gthub-media/nuro-example-1.jpg -------------------------------------------------------------------------------- /.gthub-media/nuro_banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jonkwl/nuro/60039f25f36d71950eeb53e230cc72495f037d9d/.gthub-media/nuro_banner.jpg -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.10) 2 | 3 | project(nuro CXX) 4 | 5 | set(CMAKE_CXX_STANDARD 20) 6 | 7 | # core 8 | find_package(assimp CONFIG REQUIRED) 9 | find_package(EnTT CONFIG REQUIRED) 10 | find_package(glad CONFIG REQUIRED) 11 | find_package(glfw3 CONFIG REQUIRED) 12 | find_package(glm CONFIG REQUIRED) 13 | find_package(Stb REQUIRED) 14 | find_package(nlohmann_json CONFIG REQUIRED) 15 | find_package(unofficial-omniverse-physx-sdk CONFIG REQUIRED) 16 | find_package(FFMPEG REQUIRED) 17 | find_package(OpenAL CONFIG REQUIRED) 18 | find_package(reflectcpp CONFIG REQUIRED) 19 | 20 | # editor 21 | find_package(efsw CONFIG REQUIRED) 22 | 23 | add_subdirectory(nuro-core) 24 | add_subdirectory(nuro-editor) -------------------------------------------------------------------------------- /CMakePresets.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 2, 3 | "configurePresets": [ 4 | { 5 | "name": "windows-default", 6 | "generator": "Visual Studio 17 2022", 7 | "binaryDir": "${sourceDir}/build", 8 | "cacheVariables": { 9 | "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" 10 | } 11 | } 12 | ], 13 | "buildPresets": [ 14 | { 15 | "name": "windows-default", 16 | "configurePreset": "windows-default" 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /nuro-core/audio/audio_buffer.cpp: -------------------------------------------------------------------------------- 1 | #include "audio_buffer.h" 2 | 3 | #include 4 | 5 | #include 6 | 7 | AudioBuffer::AudioBuffer() : _id(0), 8 | _loaded(false) 9 | { 10 | } 11 | 12 | AudioBuffer::~AudioBuffer() 13 | { 14 | destroy(); 15 | } 16 | 17 | bool AudioBuffer::create(AudioSamples& samples) 18 | { 19 | ALuint bufferId; 20 | alGenBuffers(1, &bufferId); 21 | if (alGetError() != AL_NO_ERROR) { 22 | Console::out::warning("Audio Buffer", "Couldn't create audio buffer"); 23 | return false; 24 | } 25 | 26 | alBufferData(bufferId, samples.getAlFormat(), samples.getSamples(), samples.getSize(), samples.getSampleRate()); 27 | if (alGetError() != AL_NO_ERROR) { 28 | Console::out::warning("Audio Buffer", "Couldn't load audio data into buffer"); 29 | return false; 30 | } 31 | 32 | _id = static_cast(bufferId); 33 | _loaded = true; 34 | 35 | return true; 36 | } 37 | 38 | void AudioBuffer::destroy() 39 | { 40 | if (_id) alDeleteBuffers(1, &_id); 41 | _id = 0; 42 | _loaded = false; 43 | } 44 | 45 | uint32_t AudioBuffer::id() const 46 | { 47 | return _id; 48 | } 49 | 50 | bool AudioBuffer::loaded() const 51 | { 52 | return _loaded; 53 | } 54 | -------------------------------------------------------------------------------- /nuro-core/audio/audio_buffer.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | #include