A high speed C++17 Vulkan game engine

Overview

Acid

Trello Doxygen Build Status

Acid is an open-source, cross-platform game engine written in modern C++17 and structured to be fast, simple, and extremely modular.

Vulkan is the sole graphics API, Vulkan can be accessed in apps with the provided Acid rendering pipeline. Metal is supported through MoltenVK; eventually, DirectX will be supported in a similar way.

This project is being worked on part-time by a single developer, this is under heavy development, expect bugs, API changes, and plenty of missing features.

Features

  • Multiplatform (Windows, Linux, MacOS, 32bit and 64bit)
  • Multithreaded command buffers and thread safety
  • On the fly GLSL to SPIR-V compilation and reflection
  • Deferred physically based rendering (PBR)
  • Networking (HTTP, FTP, UDP, TCP)
  • Object serialization (JSON, XML)
  • Resource management using serialization
  • Event delegate callbacks with scoped functions
  • Bullet physics
  • Entity component system
  • Particle effect systems
  • File multi-path searching, and packaging
  • UI constraints system, and MSDF font rendering
  • Audio systems (flac, mp3, ogg, opus, wave)
  • Shadow mapping
  • Post effects pipeline (lensflare, glow, blur, SSAO, ...)
  • Model file loading (obj, glTF 2.0)
  • Animations loading (Collada)
  • Image file loading (png, jpeg, dng, tiff, OpenEXR, bmp, dds, ppm, tga)

Dependencies

Code Snippets

// Imports a 2D texture using nearest filtering.
auto guiBlack = Image2d::Create("Guis/Black.png", VK_FILTER_NEAREST);

// Imports a 3D cubemap (face names defined in Cubemap.cpp).
auto skyboxSnowy = ImageCube::Create("Objects/SkyboxSnowy", ".png");

// Imports a OBJ model.
auto dragon = ObjModel::Create("Objects/Testing/ModelDragon.obj");

// Creates a sphere model with 20 latitude and longitude bands with a radius of 1.
auto sphere = SphereModel::Create(20, 20, 1.0f);

// Plays a 3D sound (sound buffer resource internally managed), at half volume.
Sound jump("Sounds/Jump.ogg", Audio::Type::Effect, false, true, 0.5f);

// Loads a entity from a prefab file.
auto playerObject = GetStructure()->CreateEntity("Objects/Player/Player.json");
playerObject->AddComponent<Transform>();

// Creates a entity in code.
auto sphere = GetStructure()->CreateEntity();
sphere->AddComponent<Transform>(Vector3f(6.7f, 6.7f, -8.0f), Vector3f(0.0f, Maths::Radians(180.0f), 0.0f), Vector3f(3.0f));
sphere->AddComponent<Mesh>(SphereModel::Create(20, 20, 1.0f), // This will used the sphere buffers created earlier.
	std::make_unique<MaterialDefault>(Colour::White, Image2d::Create("Objects/Testing/Albedo.png"), 0.0f, 0.5f,
		Image2d::Create("Objects/Testing/Material.png"), Image2d::Create("Objects/Testing/Normal.png")));
sphere->AddComponent<Rigidbody>(std::make_unique<ColliderSphere>(), 2.0f); // Will be created weighing 2 units.

// Vector maths.
Vector2f a(3.0f, -7.2f);
Vector2f b(-1.74f, 15.4f);
Vector2f c = a * b;
// Distance between the two points.
float distance = a.Distance(b);
// Right shift of the x and y bits by 1.
Vector2i rightShift = Vector2i(5, 9) >> 1;

// Split a string by spaces.
std::string stringSource = "Hello world!";
std::vector<std::string> stringSplit = String::Split(stringSource, ' ');

// Will run a lambda on window resize, and when this object is deleted the lamdba is removed.
Window::Get()->OnSize() += [](Vector2ui size) {
	Log::Out("Hello world: ", size, '\n');
};

// A value container that calls a delegate on value assignments.
DelegateValue<Vector3f> da;
da += [](Vector3f value) {
	Log::Out("New value: ", value, '\n');
};
da = {10.0f, -4.11f, 99.991f};

// Time addition.
Time dateTime = 4h + 2min + 11s + 9ms + 1us + 4ns;

// Calls the function once after 150 milliseconds.
Timers::Get()->Once(150ms, []() {
	Log::Out("Timer Once After\n");
});
// Calls the function every 4 seconds. 
Timers::Get()->Every(4s, []() {
	Log::Out("Timer Every Tick\n");
});
// Calls the funcion every 7 seconds 3 times.
Timers::Get()->Repeat(7s, 3, []() {
	static uint32_t i = 0;
	Log::Out("Timer Repeat Tick #", i, '\n');
	i++;
});

Screenshots

Acid

Acid

Acid

Acid

Acid

Compiling

All platforms depend on CMake, 3.11.0 or higher, to generate IDE/make files.

CMake options (default ON):

  • BUILD_TESTS
  • ACID_INSTALL_EXAMPLES
  • ACID_INSTALL_RESOURCES

If you installed Acid using only system libs, then find_package(Acid) will work from CMake. Versioning is also supported.
When using find_package(Acid) the imported target Acid::Acid will be created.
The ACID_RESOURCES_DIR variable will also be available, which will point to the on-disk location of Acid/Resources (if installed).

Python 3, Vulkan SDK, OpenAL, and OpenAL SDK are required to develop Acid.

Make sure you have environment variables VULKAN_SDK and OPENALDIR set to the paths you have Vulkan and OpenAL installed into.

Ensure you are using a compiler with full C++17 support, on Windows it is recommended that you use MSVC or MinGW w64.

If using Visual Studio it must be 2015 or later. Use the Visual Studio installer and select both "Desktop development with C++" and "Windows SDK" if they are not already installed. Then on Visual Studio Acid can be opened as a CMake workspace folder.

On Linux Acid requires xorg-dev, libopenal1, and libvulkan1 to be installed. Read about how to setup Vulkan on Linux so a Vulkan SDK is found.

Setup on MacOS is similar to the setup on Linux, a compiler that supports C++17 is required, such as XCode 10.0.

Contributing

You can contribute to Acid in any way you want, we are always looking for help. You can learn about Acids code style from the GUIDELINES.md.

Comments
  • ucrtbase dll crashing on certain tests

    ucrtbase dll crashing on certain tests

    Running TestPhysics provides me with this error before code even begins executing:

    Unhandled exception at 0x00007FFD4D8EE91E (ucrtbase.dll) in TestPhysics.exe: Fatal program exit requested

    The console provides some more insight, with errors such as:

    Type mismatch on descriptor slot 0.0 (expectedVK_DESCRIPTOR_TYPE_STORAGE_IMAGE) but descriptor of type VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER THREADING ERROR : object of type VkQueue is simultaneously used in thread 0x2214 and thread 0x3ed0

    My step-by-step build so far can be found Here under the Compiling category.

    opened by LukePrzyb 17
  • Have Seg Fault in TestGuis and TestPhysics

    Have Seg Fault in TestGuis and TestPhysics

    Hello team,

    First of all, I'm looking for c++ 3D Engine with Vulkan backend and I find your project really interesting. I would like to compare performance and code abstraction between Banshee3D and your project to choose which engine I would use for my development.

    So I already compile and try some samples with Banshee3D framework but I cannot launch your tests.

    Platform: Linux Debian 9 Compilation command: mkdir build && cd build && cmake .. && make -j4 I also linked your resources in your Build/bin directory. And when I run ./TestGuis or ./TestPhysics just get Seg Fault and nothing else.

    I don't have any log so it's hard to find why. So should I do other steps?

    Regards.

    opened by Hideman85 11
  • AMD graphics card not supported?

    AMD graphics card not supported?

    I wanted to try out Acid in my project. But when i'm trying to run one of demo projects I got error: Expression: false && "Vulkan runtime error, failed to find a suitable gpu!"

    I debugged code and find out the VK_KHR_push_descriptor vulkan extension is not supported on AMD GPU. I found threadon AMD forum. There is suggestion to use VK_KHR_descriptor_update_template instead.

    System specs:

    • System: Windows 10 Pro 1809 x64
    • CPU: AMD Ryzen 7 2700X
    • RAM: 32GB
    • GPU: AMD Radeon RX 570 Series
    opened by Sauler 10
  • No examples would work

    No examples would work

    Describe the bug No examples would work. Just a grey screen and double free when closing the window.

    To Reproduce

    1. Compile and build (-DCMAKE_BUILD_TYPE=Debug -DACID_INSTALL_RESOURCES=ON)
    2. Run something like ./bin/TestFont

    Expected behaviour The example should start

    Screenshots

    Version: 0.14.2
    Git: 1cd00093 on master
    Compiled on: Linux-5.13.8-1-default from: Unix Makefiles with: /usr/bin/c++
    
    [ALSOFT] (EE) Failed to set real-time priority for thread: Operation not permitted (1)
    [ALSOFT] (EE) Failed to set real-time priority for thread: Operation not permitted (1)
    Audio Device: OpenAL Soft
    Selected Audio Device: "OpenAL Soft"
    Instance Layers: 
    
    Vulkan validation layer not found: "VK_LAYER_KHRONOS_validation"
    Validation layers requested, but not available!
    Discrete Physical Device: 26591 "AMD" "AMD RADV POLARIS10 (ACO)"
    API Version: 1.2.168
    Extensions: VK_KHR_8bit_storage, VK_KHR_16bit_storage, VK_KHR_bind_memory2, VK_KHR_buffer_device_address, VK_KHR_copy_commands2, VK_KHR_create_renderpass2, VK_KHR_dedicated_allocation, VK_KHR_deferred_host_operations, VK_KHR_depth_stencil_resolve, VK_KHR_descriptor_update_template, VK_KHR_device_group, VK_KHR_draw_indirect_count, VK_KHR_driver_properties, VK_KHR_external_fence, VK_KHR_external_fence_fd, VK_KHR_external_memory, VK_KHR_external_memory_fd, VK_KHR_external_semaphore, VK_KHR_external_semaphore_fd, VK_KHR_get_memory_requirements2, VK_KHR_image_format_list, VK_KHR_imageless_framebuffer, VK_KHR_incremental_present, VK_KHR_maintenance1, VK_KHR_maintenance2, VK_KHR_maintenance3, VK_KHR_multiview, VK_KHR_pipeline_executable_properties, VK_KHR_push_descriptor, VK_KHR_relaxed_block_layout, VK_KHR_sampler_mirror_clamp_to_edge, VK_KHR_sampler_ycbcr_conversion, VK_KHR_separate_depth_stencil_layouts, VK_KHR_shader_atomic_int64, VK_KHR_shader_clock, VK_KHR_shader_draw_parameters, VK_KHR_shader_float16_int8, VK_KHR_shader_float_controls, VK_KHR_shader_non_semantic_info, VK_KHR_shader_subgroup_extended_types, VK_KHR_shader_terminate_invocation, VK_KHR_spirv_1_4, VK_KHR_storage_buffer_storage_class, VK_KHR_swapchain, VK_KHR_swapchain_mutable_format, VK_KHR_timeline_semaphore, VK_KHR_uniform_buffer_standard_layout, VK_KHR_variable_pointers, VK_KHR_vulkan_memory_model, VK_KHR_workgroup_memory_explicit_layout, VK_KHR_zero_initialize_workgroup_memory, VK_EXT_4444_formats, VK_EXT_buffer_device_address, VK_EXT_calibrated_timestamps, VK_EXT_conditional_rendering, VK_EXT_custom_border_color, VK_EXT_depth_clip_enable, VK_EXT_depth_range_unrestricted, VK_EXT_descriptor_indexing, VK_EXT_discard_rectangles, VK_EXT_display_control, VK_EXT_extended_dynamic_state, VK_EXT_external_memory_dma_buf, VK_EXT_external_memory_host, VK_EXT_global_priority, VK_EXT_host_query_reset, VK_EXT_image_robustness, VK_EXT_index_type_uint8, VK_EXT_inline_uniform_block, VK_EXT_line_rasterization, VK_EXT_memory_budget, VK_EXT_memory_priority, VK_EXT_pci_bus_info, VK_EXT_pipeline_creation_cache_control, VK_EXT_pipeline_creation_feedback, VK_EXT_private_data, VK_EXT_queue_family_foreign, VK_EXT_robustness2, VK_EXT_sample_locations, VK_EXT_sampler_filter_minmax, VK_EXT_scalar_block_layout, VK_EXT_shader_atomic_float, VK_EXT_shader_demote_to_helper_invocation, VK_EXT_shader_image_atomic_int64, VK_EXT_shader_stencil_export, VK_EXT_shader_subgroup_ballot, VK_EXT_shader_subgroup_vote, VK_EXT_shader_viewport_index_layer, VK_EXT_subgroup_size_control, VK_EXT_texel_buffer_alignment, VK_EXT_transform_feedback, VK_EXT_vertex_attribute_divisor, VK_EXT_ycbcr_image_arrays, VK_AMD_buffer_marker, VK_AMD_device_coherent_memory, VK_AMD_draw_indirect_count, VK_AMD_gcn_shader, VK_AMD_memory_overallocation_behavior, VK_AMD_mixed_attachment_samples, VK_AMD_rasterization_order, VK_AMD_shader_ballot, VK_AMD_shader_core_properties, VK_AMD_shader_core_properties2, VK_AMD_shader_explicit_vertex_parameter, VK_AMD_shader_fragment_mask, VK_AMD_shader_image_load_store_lod, VK_AMD_shader_info, VK_AMD_shader_trinary_minmax, VK_AMD_texture_gather_bias_lod, VK_GOOGLE_decorate_string, VK_GOOGLE_hlsl_functionality1, VK_GOOGLE_user_type, VK_NV_compute_shader_derivatives, VK_VALVE_mutable_descriptor_type, 
    
    Selected Physical Device: 26591 "AMD RADV POLARIS10 (ACO)"
    Working Directory: "/mnt/ghdd/Programme/OSS/Acid/build"
    Failed to mount path Resources/Engine, not found
    File "InputSchemes/DefaultFont.json" loaded in 0.317ms
    File "InputSchemes/DefaultFont.json" saved in 0.111ms
    Font Type "Fonts/ProximaNova-Regular.ttf" loaded 98 glyphs in 248.142ms
    Render Stage created in 0.548ms
    Pipeline Graphics "Shaders/Guis/Gui.frag" loaded in 298.069ms
    Pipeline Graphics "Shaders/Fonts/Font.frag" loaded in 12.516ms
    

    Whereas with all Tutorial executables except 7 (which actually starts but then freezes as in no control possible) I get:

    Version: 0.14.2
    Git: 1cd00093 on master
    Compiled on: Linux-5.13.8-1-default from: Unix Makefiles with: /usr/bin/c++
    
    [ALSOFT] (EE) Failed to set real-time priority for thread: Operation not permitted (1)
    [ALSOFT] (EE) Failed to set real-time priority for thread: Operation not permitted (1)
    Audio Device: OpenAL Soft
    Selected Audio Device: "OpenAL Soft"
    fish: Job 1, './bin/Tutorial6' terminated by signal SIGSEGV (Address boundary erro
    

    Hardware:

    • Device: AMD RX 580
    • OS: OpenSuse Tumbleweed

    Additional context I am not doing an in-soure build. The build folder is inside the source root tho:

    mkdir build
    cd build
    cmake .. # options and stuff
    make -j$(nproc)
    
    opened by niansa 8
  • Could not find registered component:

    Could not find registered component: "skyboxCycle"

    When starting ./Editor,

    [Host] Updating plugin [Guest] Operation load: 1 [Game] Constructor Working Directory: "/media/wjl/0B8803760B880376/github/2/Acid/build/bin" Failed to mount path Resources/Engine, not found Could not find registered component: "skyboxCycle"

    The screen is black, and nothing exists. Is missing sth?

    System: ubuntu18.04 driver: Nvidia 435 Vulkan 1.121

    opened by engineer1109 7
  • ubuntu 19.10: build successful, but no runnable application

    ubuntu 19.10: build successful, but no runnable application

    Describe the bug The build of Acid has been successful (inside Acid/build folder). Unfortunately I can't get any application to run.

    To Reproduce Just try to run any application/test inside Acid/build/bin folder.

    Expected behaviour Applications and tests work.

    Screenshots

    Hardware:

    • Device: Nvidia GeForce GTX 970
    • OS: Ubuntu 19.10

    Additional context All applications print these information:

    Version: 0.13.3
    Git: ee705bb9 on master
    Compiled on: Linux-4.19.0-5-amd64Audio Device: OpenAL Soft
    Selected Audio Device: 'OpenAL Soft'
    Instance Layers: VK_LAYER_KHRONOS_validation, VK_LAYER_LUNARG_core_validation, VK_LAYER_LUNARG_object_tracker, VK_LAYER_GOOGLE_unique_objects, VK_LAYER_LUNARG_parameter_validation, VK_LAYER_LUNARG_standard_validation, VK_LAYER_GOOGLE_threading, VK_LAYER_LUNARG_assistant_layer, VK_LAYER_LUNARG_demo_layer, VK_LAYER_LUNARG_starter_layer, VK_LAYER_LUNARG_vktrace, VK_LAYER_LUNARG_api_dump, VK_LAYER_LUNARG_monitor, VK_LAYER_LUNARG_screenshot, VK_LAYER_LUNARG_device_simulation, VK_LAYER_LUNARG_cmake, 
    
    Discrete Physical Device: 5058 'Nvidia' 'GeForce GTX 970'
    API Version: 1.1.95
    Extensions: VK_KHR_8bit_storage, VK_KHR_16bit_storage, VK_KHR_bind_memory2, VK_KHR_create_renderpass2, VK_KHR_dedicated_allocation, VK_KHR_depth_stencil_resolve, VK_KHR_descriptor_update_template, VK_KHR_device_group, VK_KHR_draw_indirect_count, VK_KHR_driver_properties, VK_KHR_external_fence, VK_KHR_external_fence_fd, VK_KHR_external_memory, VK_KHR_external_memory_fd, VK_KHR_external_semaphore, VK_KHR_external_semaphore_fd, VK_KHR_get_memory_requirements2, VK_KHR_image_format_list, VK_KHR_maintenance1, VK_KHR_maintenance2, VK_KHR_maintenance3, VK_KHR_multiview, VK_KHR_push_descriptor, VK_KHR_relaxed_block_layout, VK_KHR_sampler_mirror_clamp_to_edge, VK_KHR_sampler_ycbcr_conversion, VK_KHR_shader_atomic_int64, VK_KHR_shader_draw_parameters, VK_KHR_shader_float16_int8, VK_KHR_shader_float_controls, VK_KHR_storage_buffer_storage_class, VK_KHR_swapchain, VK_KHR_swapchain_mutable_format, VK_KHR_variable_pointers, VK_KHR_vulkan_memory_model, VK_EXT_blend_operation_advanced, VK_EXT_conditional_rendering, VK_EXT_conservative_rasterization, VK_EXT_depth_range_unrestricted, VK_EXT_descriptor_indexing, VK_EXT_discard_rectangles, VK_EXT_display_control, VK_EXT_global_priority, VK_EXT_inline_uniform_block, VK_EXT_post_depth_coverage, VK_EXT_sample_locations, VK_EXT_sampler_filter_minmax, VK_EXT_scalar_block_layout, VK_EXT_shader_subgroup_ballot, VK_EXT_shader_subgroup_vote, VK_EXT_shader_viewport_index_layer, VK_EXT_transform_feedback, VK_EXT_vertex_attribute_divisor, VK_NV_dedicated_allocation, VK_NV_device_diagnostic_checkpoints, VK_NV_fill_rectangle, VK_NV_fragment_coverage_to_color, VK_NV_framebuffer_mixed_samples, VK_NV_geometry_shader_passthrough, VK_NV_sample_mask_override_coverage, VK_NV_shader_subgroup_partitioned, VK_NV_viewport_array2, VK_NV_viewport_swizzle, VK_NVX_device_generated_commands, VK_NVX_multiview_per_view_attributes,
    
    Selected Physical Device: 5058 'GeForce GTX 970'
    

    Running bin/Editor issues this additional error message:

    File System error while adding a path or zip(Resources/Engine): not found
    terminate called after throwing an instance of 'std::length_error'
      what():  basic_string::_M_create
    Aborted
    

    While running any of the tests bin/Test* issues this additional error message:

    Selected Physical Device: 5058 'GeForce GTX 970'
    terminate called after throwing an instance of 'std::length_error'
      what():  basic_string::_M_create
    Aborted
    

    Can you help? Thanks

    opened by consultit 7
  • Packaging on Linux is rough

    Packaging on Linux is rough

    I was attempting to package this before I tried it out, but a few things cropped up that were causing issues.

    1. No option/alternative way to use system libraries. Note that literally all used libraries (except Glslang) can be found using find_package(), although FindVulkan requires minimum Cmake v3.7
    2. These lines cause install to prefix all header install locations with junk. Example: /usr/include/Acid/home/sum01/dev/Acid/Sources/Acid.hpp when it should be /usr/include/Acid/Acid.hpp

    Some Cmake notes:

    • I recommend include(GNUInstallDirs) for sensible, user-overridable installation default locations instead of all of this
    • All references to LIB_TYPE in the Cmake files can be removed, even from add_library(). This is because add_library() already changes to STATIC/SHARED based on what BUILD_SHARED_LIBS is set to.
    • BUILD_TESTING is a more common/standard name for a Cmake testing flag (it's defined in CTest)
    • I'm pretty sure all of this will only work for single-configuration systems, such as Make & Ninja. MSVC (and others?) use multi-configuration, which ignores CMAKE_BUILD_TYPE. Note you can check for #ifdef NDEBUG as Cmake defines it automatically on release builds, at least when I've tested it.
    • You can do project versioning in the project() call, which automatically sets all the various ACID_XXX_VERSION and ACID_VERSION vars. Example: project(Acid VERSION 0.10.0 LANGUAGES C CXX) (specifying the used languages is also nice).
    • Having ACID_INSTALL as an option is pointless. If someone doesn't want to install they can just not use the --target install flag when calling cmake.
    • The threads library from FindThreads is never actually linked against your lib. Either link against ${CMAKE_THREAD_LIBS_INIT} or require minimum Cmake v3.1 and link against the target Threads::Threads
    • Using file globbing makes Cmake re-run everything every time, as it can't track changes. While annoying, it is recommended to put each file name in the CMakeLists.txt. I recommend using target_sources with the proper private/public settings for headers & sources.

    Hopefully I'm not coming off as annoying, just trying to be helpful.

    opened by sum01 7
  • Crash in TestGuis and TestPhysics on Windows

    Crash in TestGuis and TestPhysics on Windows

    OS: Windows 7 x64

    Crashing line: https://github.com/Equilibrium-Games/Acid/blob/d5e79d0c58d8a36e8a861d63a567fcaaabf48f05/Sources/Display/Display.cpp#L852

    Console log:

    -- Avalable Layers For: 'Instance' --
    VK_LAYER_LUNARG_api_dump, VK_LAYER_LUNARG_assistant_layer, VK_LAYER_LUNARG_core_
    validation, VK_LAYER_LUNARG_device_simulation, VK_LAYER_LUNARG_monitor, VK_LAYER
    _LUNARG_object_tracker, VK_LAYER_LUNARG_parameter_validation, VK_LAYER_LUNARG_sc
    reenshot, VK_LAYER_LUNARG_standard_validation, VK_LAYER_GOOGLE_threading, VK_LAY
    ER_GOOGLE_unique_objects, VK_LAYER_LUNARG_vktrace, VK_LAYER_AMD_switchable_graph
    ics, VK_LAYER_RENDERDOC_Capture, VK_LAYER_VALVE_steam_overlay,
    -- Done --
    -- Physical Device: '' --
    ID: 7
    Type: Integrated
    Vendor: Intel
    Supports Version: 1.0.31
    Header Version: 82
    -- Done --
    Selected Physical Device: '', 7
     [ VUID-VkDeviceQueueCreateInfo-queueCount-00382 ] Object: 0x2e236b0 (Type = 2)
    | vkCreateDevice: pCreateInfo->pQueueCreateInfos[0].queueCount (=2) is not less
    than or equal to available queue count for this pCreateInfo->pQueueCreateInfos[0
    ].queueFamilyIndex} (=0) obtained previously from vkGetPhysicalDeviceQueueFamily
    Propertiesor vkGetPhysicalDeviceQueueFamilyProperties2[KHR] (i.e. is not less th
    an or equal to 1). The spec valid usage text states 'queueCount must be less tha
    n or equal to the queueCount member of the VkQueueFamilyProperties structure, as
     returned by vkGetPhysicalDeviceQueueFamilyProperties in the pQueueFamilyPropert
    ies[queueFamilyIndex]' (https://www.khronos.org/registry/vulkan/specs/1.0/html/v
    kspec.html#VUID-VkDeviceQueueCreateInfo-queueCount-00382)
    
    opened by Karmel0x 7
  • Build error on Ubuntu22.04

    Build error on Ubuntu22.04

    Env: Ubuntu 22.04, cmake version: 3.22 build step:

    1. sudo apt-get install -y build-essential pkg-config g++-10 xorg-dev libglu1-mesa-dev libopenal-dev libvulkan-dev
    2. mkdir build
    3. cd build
    4. cmake ..
    5. make -j16

    Error msg:

    In file included from /home/xxx/repo/Acid/Sources/Engine/App.hpp:3, from /home/xxx/repo/Acid/Sources/Engine/Engine.hpp:10, from /home/xxx/repo/Acid/Sources/Files/Files.hpp:3, from /home/xxx/repo/Acid/Sources/Bitmaps/Bitmap.cpp:7: /home/xxx/repo/Acid/Sources/../External/rocket/rocket.hpp:2086:30: error: no match for ‘operator!=’ (operand types are ‘const std::thread::id’ and ‘std::thread::id’) 2086 | && thread_id != std::this_thread::get_id(); | ~~~~~~~~~ ^~ ~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | const std::thread::id std::thread::id /home/xxx/repo/Acid/Sources/../External/rocket/rocket.hpp:1085:17: note: candidate: ‘template<class T, class U> bool rocket::operator!=(const rocket::intrusive_ptr&, const rocket::intrusive_ptr&)’ 1085 | inline bool operator != (intrusive_ptr const& a, i

    Cmake info:

    -- The CXX compiler identification is GNU 11.2.0 -- The C compiler identification is GNU 11.2.0 -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: /usr/bin/cc - skipped -- Detecting C compile features -- Detecting C compile features - done -- Looking for pthread.h -- Looking for pthread.h - found -- Performing Test CMAKE_HAVE_LIBC_PTHREAD -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success -- Found Threads: TRUE
    Vulkan as target -- Found OpenALSoft: /usr/lib/x86_64-linux-gnu/libopenal.so
    -- Found OpenAL: /usr/lib/x86_64-linux-gnu/libopenal.so
    -- Including X11 support -- Found X11: /usr/include
    -- Looking for XOpenDisplay in /usr/lib/x86_64-linux-gnu/libX11.so;/usr/lib/x86_64-linux-gnu/libXext.so -- Looking for XOpenDisplay in /usr/lib/x86_64-linux-gnu/libX11.so;/usr/lib/x86_64-linux-gnu/libXext.so - found -- Looking for gethostbyname -- Looking for gethostbyname - found -- Looking for connect -- Looking for connect - found -- Looking for remove -- Looking for remove - found -- Looking for shmat -- Looking for shmat - found -- Looking for IceConnectionNumber in ICE -- Looking for IceConnectionNumber in ICE - found -- No build type selected, default to Debug -- Found PythonInterp: /usr/bin/python3 (found suitable version "3.10.4", minimum required is "3") CMake Deprecation Warning at External/bullet3/CMakeLists.txt:1 (cmake_minimum_required): Compatibility with CMake < 2.8.12 will be removed from a future version of CMake.

    Update the VERSION argument value or use a ... suffix to tell CMake that the project does not need compatibility with older versions.

    CMake Warning (dev) at External/bullet3/CMakeLists.txt:7 (PROJECT): Policy CMP0048 is not set: project() command manages VERSION variables. Run "cmake --help-policy CMP0048" for policy details. Use the cmake_policy command to set the policy and suppress this warning.

    The following variable(s) would be set to empty:

    PROJECT_VERSION
    PROJECT_VERSION_MAJOR
    PROJECT_VERSION_MINOR
    PROJECT_VERSION_PATCH
    

    This warning is for project developers. Use -Wno-dev to suppress it.

    Linux CMake Warning (dev) at /usr/share/cmake-3.22/Modules/FindOpenGL.cmake:315 (message): Policy CMP0072 is not set: FindOpenGL prefers GLVND by default when available. Run "cmake --help-policy CMP0072" for policy details. Use the cmake_policy command to set the policy and suppress this warning.

    FindOpenGL found both a legacy GL library:

    OPENGL_gl_LIBRARY: /usr/lib/x86_64-linux-gnu/libGL.so
    

    and GLVND libraries for OpenGL and GLX:

    OPENGL_opengl_LIBRARY: /usr/lib/x86_64-linux-gnu/libOpenGL.so
    OPENGL_glx_LIBRARY: /usr/lib/x86_64-linux-gnu/libGLX.so
    

    OpenGL_GL_PREFERENCE has not been set to "GLVND" or "LEGACY", so for compatibility with CMake 3.10 and below the legacy GL library will be used. Call Stack (most recent call first): External/bullet3/CMakeLists.txt:312 (FIND_PACKAGE) This warning is for project developers. Use -Wno-dev to suppress it.

    -- Found OpenGL: /usr/lib/x86_64-linux-gnu/libOpenGL.so
    OPENGL FOUND /usr/lib/x86_64-linux-gnu/libGL.so/usr/lib/x86_64-linux-gnu/libGLU.so CMake Warning (dev) at External/physfs/CMakeLists.txt:14 (project): Policy CMP0048 is not set: project() command manages VERSION variables. Run "cmake --help-policy CMP0048" for policy details. Use the cmake_policy command to set the policy and suppress this warning.

    The following variable(s) would be set to empty:

    PROJECT_VERSION
    PROJECT_VERSION_MAJOR
    PROJECT_VERSION_MINOR
    PROJECT_VERSION_PATCH
    

    This warning is for project developers. Use -Wno-dev to suppress it.

    -- PhysicsFS will build with the following options: -- ZIP support: enabled -- 7zip support: enabled -- GRP support: enabled -- WAD support: enabled -- HOG support: enabled -- MVL support: enabled -- QPAK support: enabled -- SLB support: enabled -- VDF support: enabled -- ISO9660 support: enabled -- Build static library: disabled -- Build shared library: enabled -- Build stdio test program: disabled -- Build Doxygen documentation: disabled -- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY -- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY - Failed -- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY -- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY - Failed -- Performing Test COMPILER_HAS_DEPRECATED_ATTR -- Performing Test COMPILER_HAS_DEPRECATED_ATTR - Success -- Found Python: /usr/bin/python3.10 (found version "3.10.4") found components: Interpreter -- Configuring done -- Generating done

    Could anyone fix it? Thanks in advance!

    opened by xwang186 6
  • Ubuntu Freetype2 Includes

    Ubuntu Freetype2 Includes

    I have only encounted this problem on Debian and Ubuntu (not encountered on Arch), but when looking for system Freetype2 installs the includes cannot be found on these systems https://github.com/Equilibrium-Games/Acid/blob/9c64328e222ddceb0c98d59f58b13887f8ff0fcb/CMakeLists.txt#L70

    /home/travis/build/Equilibrium-Games/Acid/Sources/Fonts/FontType.cpp:5:10: fatal error: ft2build.h: No such file or directory
     #include <ft2build.h>
    
    opened by mattparks 6
  • Segfaults in some tests

    Segfaults in some tests

    Mildy modified TestGUI's Main.cpp to point to the assets folder (instead of Resources/Engine) I copied into my test project.

    Running it (with gdb) results in:

    Reading symbols from acid_test...done.
    (gdb) run
    Starting program: acid_test 
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/usr/lib/libthread_db.so.1".
    [New Thread 0x7fffee487700 (LWP 4638)]
    Selected Physical Device: 'AMD RADV RAVEN (LLVM 7.0.0)', 5597
    [New Thread 0x7fffed88f700 (LWP 4639)]
    [Detaching after fork from child process 4640]
    [Thread 0x7fffed88f700 (LWP 4639) exited]
    [New Thread 0x7fffed88f700 (LWP 4641)]
    [New Thread 0x7fffed88f700 (LWP 4642)]
    [Thread 0x7fffed88f700 (LWP 4641) exited]
    [New Thread 0x7fffe7ddf700 (LWP 4643)]
    [New Thread 0x7fffe73b7700 (LWP 4644)]
    
    Thread 1 "acid_test" received signal SIGSEGV, Segmentation fault.
    0x00007ffff7ef41c4 in acid::ShaderProgram::LoadUniform(glslang::TProgram const&, unsigned int const&, int const&) () from /usr/lib/libAcid.so
    (gdb) n
    Single stepping until exit from function _ZN4acid13ShaderProgram11LoadUniformERKN7glslang8TProgramERKjRKi,
    which has no line number information.
    [Thread 0x7fffe73b7700 (LWP 4644) exited]
    [Thread 0x7fffe7ddf700 (LWP 4643) exited]
    [Thread 0x7fffed88f700 (LWP 4642) exited]
    [Thread 0x7ffff4f1f740 (LWP 4634) exited]
    
    Program terminated with signal SIGSEGV, Segmentation fault.
    The program no longer exists.
    (gdb) quit
    

    I think it has something to do with resource loading, although I'm not sure what specifically just yet. I'm assuming anyways, as "Maths" and "Network" tests pass, while the rest segfault.

    Test results (unmodified from source), for example:

        Start 1: GUI
    1/6 Test #1: GUI ..............................***Exception: SegFault  0.65 sec
        Start 2: Maths
    2/6 Test #2: Maths ............................   Passed    0.02 sec
        Start 3: Network
    3/6 Test #3: Network ..........................   Passed    0.02 sec
        Start 4: PBR
    4/6 Test #4: PBR ..............................***Exception: SegFault  0.67 sec
        Start 5: Physics
    5/6 Test #5: Physics ..........................***Exception: SegFault  0.68 sec
        Start 6: Voxel
    6/6 Test #6: Voxel ............................***Exception: SegFault  0.64 sec
    

    Seems this is very similar to #12


    Also, how would you feel about installing the Resources folder when Cmake installs everything? Since it's used a bit throughout the code, I feel it might make sense to distribute.

    bug 
    opened by sum01 6
  • Editor crashes upon start

    Editor crashes upon start

    Describe the bug Attempt to run Debug build after compilation completion of libraries editor gets crashed

    To Reproduce As soon as debug build has triggered, Editor gets crashed caused by access violation

    Expected behaviour Editor should be up and running without a problem

    Screenshots image

    Hardware:

    • Device: AMD Ryzen 7 2700X / Geforce 1050Ti
    • OS: Windows 10

    Additional context

    • Version: 0.14.3
    • Git: 2ff8adee3 on master
    • IDE: Visual Studio 2019 / 2022 Community
    opened by keviny1981 1
  • Cannot build on macOS

    Cannot build on macOS

    Describe the bug Unable to build on macOs 12.5.1

    To Reproduce At the step:

    xcodebuild -quiet -target Acid -configuration Release
    

    Expected behaviour compiles correctly

    Screenshots

    Hardware:

    • Device: intel core i9
    • OS: macOs 12.5.1

    Additional context I get the error

    Acid/Sources/Audio/Wave/WaveSoundBuffer.cpp:4:10: fatal error:
          'OpenAL/al.h' file not found
    #include <OpenAL/al.h>
             ^~~~~~~~~~~~~
    /Users/antoineqian/c++/Acid/Sources/Audio/Wave/WaveSoundBuffer.cpp:4:10: note:
          did not find header 'al.h' in framework 'OpenAL' (loaded from '/Library/Frameworks')
    

    I have installed openal-soft correctly

    image
    opened by antoineqian 0
  • I want to make a game with my business but need to know about the GUI

    I want to make a game with my business but need to know about the GUI

    Describe the bug The GUI examples don't run as expected, so far only 1 example that comes with Acid works without needing modifications (TestPhysics), the rest of them crash on sight. I liked this engine a lot and wanted to use in my game with my team, but I don't where to start in the UI examples to fix them, so far i made the wubdiw creation be called in MainApp(), so now it doesn't crash anymore on sight. But for some reason in the TestFont for example, the screen only gets the button color and fills it and there is nothing more besides a grey screen, which from what i tested, seems to be triggered by the Pannable.cpp code where it adds the child "settings". But even when i remove this, the screen just turns white and still nothing more appears, not a single text. If someone could only at least give a heads up to where is the issue (i.g outdated syntax for GUI)...

    TLDR; Screen in TestFont turns grey and nothing more appears.

    To Reproduce In MainApp.cpp of the project TestFont, Write Windows::Get()->AddWindow(); below the line App("Test Font", {1, 0, 0}) { and move the lines where it says Windows::Get()->GetWindow(0)->SetTitle("Test Font"); and Windows::Get()->GetWindow(0)->SetIcons({...}); to below this.

    Expected behaviour A working example where it shows texts and other GUI elements

    Screenshots

    245595c8-96b4-46a7-b0f3-01352f0bf4af (1)

    Hardware:

    • OS: Windows 11

    Additional context No significant context

    opened by Wall3rHM2 0
  • Wayland support

    Wayland support

    Is your feature request related to a problem? Please describe. Currently, I'm seeing in the Readme, that xorg-dev is required to develop on Linux. I can't find any mention of Wayland. I think Wayland is the Goto in the Linux World. Probably not perfect for now, but definitely the Target. As I saw this engine is based on Vulkan instead of OpenGL. I think Wayland is to Xorg what Vulkan is to OpenGL.

    Describe the solution you'd like I don't know for now.

    Describe alternatives you've considered Currently, it should work as it is thought Xwayland. But it's not optimal.

    opened by flowHater 0
  • Website Down ? Current status ?

    Website Down ? Current status ?

    Describe the bug image

    To Reproduce Click the link in the description. Website

    Expected behaviour Should be available

    Additional context What's the current status of this project ? Is it abandoned ?

    opened by flowHater 0
  • How do I install this???

    How do I install this???

    Yo guys So I came along this game engine because it was open source and it used c++ and vulkan, which interested me. The problem is that I cant get it to install lol I tried compiling it using cmake from the cmake folder, and then using the makefile to make the program. it compiled for some time and it didnt have any errors, and then I tried sudo make install. No errors, puts for example the editor into /usr/local/bin. But it doesnt appear in application launcher, and trying to run the file manually gives an error saying: ./Editor: error while loading shared libraries: libAcid.so: cannot open shared object file: No such file or directory Can someone help me? Also PLEASE have it prepackaged. And a little hint, what about a discord community so that noobs like me could ask for help there? lol anyways, have a good day yall.

    EDIT: its complaining about a missing file in the bin folder: [[email protected] bin]$ ./Editor [ALSOFT] (EE) Failed to set real-time priority for thread: Operation not permitted (1) [ALSOFT] (EE) Failed to set real-time priority for thread: Operation not permitted (1) terminate called after throwing an instance of 'std::filesystem::__cxx11::filesystem_error' what(): filesystem error: cannot get file time: No such file or directory [/home/bigsmarty/Acid/CMake/bin/libEditorTest.so] Aborted (core dumped) [[email protected] bin]$

    opened by Big-Smarty 1
Owner
Equilibrium Games
Equilibrium Games
High Performance 3D Game Engine, with a high emphasis on Rendering

Electro High Performance 3D Game Engine, with a high emphasis on Rendering MainFeatures Rendering PBR Renderer (Cook–Torrance GGX) IBL (Image Based Li

Surge 45 Dec 19, 2022
Intrinsic is a Vulkan based cross-platform game and rendering engine

Intrinsic is a Vulkan based cross-platform game and rendering engine

Benjamin Wrensch 1k Dec 29, 2022
A Vulkan game engine with a focus on data oriented design

The Fling Engine aims to be a cross platform Vulkan game engine that will experiment with the following: Low-level engine systems such as render API a

Fling Engine 316 Jan 7, 2023
CLUSEK-RT is a complex game engine written in C++ and the successor of the CLUSEK game engine

CLUSEK-RT is a complex game engine written in C++ and the successor of the CLUSEK game engine. This engine has been designed with a cross-platform design in mind. Thanks to Vulkan API it delivers a next-gen experience with ray tracing to both Linux and Windows platforms

Jakub Biliński 48 Dec 29, 2022
Ground Engine is an easy to use Game Engine for 3D Game Development written in C++

Ground Engine is an easy to use Game Engine Framework for 3D Game Development written in C++. It's currently under development and its creation will b

 PardCode 61 Dec 14, 2022
How to use Live Update to improve the load speed of HTML5 game.

ResZip: use Live Update to improve load speed of HTML5 game In short, HTML5 games should load as fast as possible! Why -> https://vimeo.com/350139974

Indiesoft LLC 20 Dec 10, 2022
High perfomance 3D & 2D Game Engine

Electro High perfomance 3D & 2D Game Engine MainFeatures Rendering PBR Renderer (Cook–Torrance GGX) IBL (Image Based Lightning) Cascaded Shadow maps M

Electro 45 Dec 19, 2022
Godot Engine – Multi-platform 2D and 3D game engine

Godot Engine 2D and 3D cross-platform game engine Godot Engine is a feature-packed, cross-platform game engine to create 2D and 3D games from a unifie

Godot Engine 56.7k Jan 9, 2023
Flax Engine – multi-platform 3D game engine

Flax Engine – multi-platform 3D game engine

Flax Engine 3.7k Jan 7, 2023
MAZE (My AmaZing Engine) - 🎮 Personal open-source cross-platform game engine

MAZE (My AmaZing Engine) is the self-written open-source cross-platform game engine in the active development stage. At the moment it is my main pet project, developed for the purpose of learning and preserving different game dev technologies.

Dmitriy Nosov 13 Dec 14, 2022
Rogy-Engine- - My 3D game engine source code.

Rogy-Engine Development My 3D game engine. (NOT THE FINAL VERSION- Windows only) Features: PBR shading and reflection probes with parallax correction.

AlaX 97 Dec 28, 2022
The Atomic Game Engine is a multi-platform 2D and 3D engine with a consistent API in C++, C#, JavaScript, and TypeScript

The Atomic Game Engine is a multi-platform 2D and 3D engine with a consistent API in C++, C#, JavaScript, and TypeScript

null 2.8k Dec 29, 2022
Hyperion Engine is a 3D game engine written in C++

Hyperion Engine About Hyperion Engine is a 3D game engine written in C++. We aim to make Hyperion be easy to understand and use, while still enabling

null 293 Jan 1, 2023
Minetest is an open source voxel game engine with easy modding and game creation

Minetest is an open source voxel game engine with easy modding and game creation

Minetest 8.3k Dec 29, 2022
Stealthy way to hijack the existing game process handle within the game launcher (currently supports Steam and Battle.net). Achieve external game process read/write with minimum footprint.

Launcher Abuser Stealthy way to hijack the existing game process handle within the game launcher (currently supports Steam and Battle.net). Achieve ex

Ricardo Nacif 80 Nov 25, 2022
Game Boy, Game Boy Color, and Game Boy Advanced Emulator

SkyEmu SkyEmu is low level cycle accurate GameBoy, GameBoy Color and Game Boy Advance emulator that I have been developing in my spare time. Its prima

Sky 321 Jan 4, 2023
A faster drop-in replacement for giflib. It uses more RAM, but you get more speed.

GIFLIB-Turbo What is it? A faster drop-in replacement for GIFLIB Why did you write it? Starting in the late 80's, I was fascinated with computer graph

Larry Bank 27 Jun 9, 2022
A Minecraft-clone written in C++/Vulkan

Minecraft A Minecraft-clone written in C++/Vulkan Current state It is currently very bare-bones. Planned features Textures Procedural generation Colli

null 4 Feb 27, 2022
Pure C Game Engine

Corange game engine Version 0.8.0 Written in Pure C, SDL and OpenGL. Running Corange is a library, but to take a quick look at some of the things it d

Daniel Holden 1.6k Dec 27, 2022