Reputation: 11
I am trying to learn bgfx and I have a little project for fooling around a bit with some debugging/logging macros, so that I can just copy this code over to "real" projects:
#include <cstdio>
#include <bx/bx.h>
#include <bgfx/bgfx.h>
#include <bgfx/platform.h>
#include <GLFW/glfw3.h>
#ifdef DEBUG
#define BLACK_TEXT "\033[30m"
#define RED_TEXT "\033[31m"
#define GREEN_TEXT "\033[32m"
#define YELLOW_TEXT "\033[33m"
#define BLUE_TEXT "\033[34m"
#define MAGENTA_TEXT "\033[35m"
#define CYAN_TEXT "\033[36m"
#define WHITE_TEXT "\033[37m"
#define RESET_TEXT "\033[0m"
#define NEWLINE "\n"
#define VERBOSE
#endif
#ifdef VERBOSE
#define LOG_INFO(...) printf(GREEN_TEXT "INFO: " RESET_TEXT __VA_ARGS__ NEWLINE);
#define LOG_WARN(...) printf(YELLOW_TEXT "WARN: " RESET_TEXT __VA_ARGS__ NEWLINE);
#define LOG_ERROR(...) printf(RED_TEXT "ERROR: " RESET_TEXT __VA_ARGS__ NEWLINE);
#else
#define LOG_INFO(...);
#define LOG_WARN(...);
#define LOG_ERROR(...);
#endif
#if BX_PLATFORM_LINUX
#if defined(__has_include) && __has_include(<wayland-client.h>)
#define GLFW_EXPOSE_NATIVE_WAYLAND
#else
#define GLFW_EXPOSE_NATIVE_X11
#endif
#elif BX_PLATFORM_WINDOWS
#define GLFW_EXPOSE_NATIVE_WIN32
#elif BX_PLATFORM_OSX
#define GLFW_EXPOSE_NATIVE_COCOA
#endif
#include <iostream>
#include <GLFW/glfw3native.h>
//#define FULLSCREEN
#define WNDW_WIDTH 1600
#define WNDW_HEIGHT 900
int main(void)
{
glfwInit();
#ifdef FULLSCREEN
int* count = new int;
GLFWmonitor** monitors = glfwGetMonitors(count);
GLFWmonitor* default_monitor = monitors[0];
#else
GLFWmonitor* default_monitor = NULL;
#endif
GLFWwindow* window = glfwCreateWindow(WNDW_WIDTH, WNDW_HEIGHT, "Hello, bgfx!", default_monitor, NULL);
if (!window)
{
glfwTerminate();
LOG_ERROR("Failed to create GLFW window")
return -1;
}
bgfx::PlatformData pd;
pd.context = glfwGetCurrentContext();
#if defined(GLFW_EXPOSE_NATIVE_WAYLAND)
LOG_INFO("Starting Wayland-Environment")
pd.nwh = glfwGetWaylandWindow(window);
pd.ndt = glfwGetWaylandDisplay();
#elif defined(GLFW_EXPOSE_NATIVE_X11)
LOG_INFO("Starting X11-Environment")
pd.nwh = (void*)(uintptr_t)glfwGetX11Window(window);
pd.ndt = glfwGetX11Display();
#elif defined(GLFW_EXPOSE_NATIVE_WIN32)
LOG_INFO("Starting Win32-Environment")
pd.nwh = glfwGetWin32Window(window);
pd.ndt = nullptr;
#elif defined(GLFW_EXPOSE_NATIVE_COCOA)
LOG_INFO("Starting Cocoa-Environment")
pd.nwh = glfwGetCocoaWindow(window);
pd.ndt = nullptr;
#endif
if (!pd.nwh)
{
glfwDestroyWindow(window);
glfwTerminate();
LOG_ERROR("Failed to get native window handle")
return -1;
}
LOG_INFO("Initialized GLFW window")
bgfx::Init bgfxInit;
bgfxInit.type = bgfx::RendererType::Vulkan; // Automatically choose a renderer.
bgfxInit.resolution.width = WNDW_WIDTH;
bgfxInit.resolution.height = WNDW_HEIGHT;
bgfxInit.resolution.reset = BGFX_RESET_VSYNC;
bgfxInit.platformData = pd;
bgfx::init(bgfxInit);
LOG_INFO("BGFX initialized")
bgfx::setViewClear(0, BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH, 0x443355FF, 1.0f, 0);
bgfx::setViewRect(0, 0, 0, WNDW_WIDTH, WNDW_HEIGHT);
unsigned int counter = 0;
while (!glfwWindowShouldClose(window))
{
bgfx::touch(0);
bgfx::frame();
counter++;
glfwPollEvents();
}
LOG_INFO("Exiting main loop, Shutting Down...")
bgfx::shutdown();
glfwDestroyWindow(window);
glfwTerminate();
#ifdef FULLSCREEN
delete count;
#endif
return 0;
}
The issue I am currently facing is, as implied by the title, that calling bgfx::init(bgfxInit)
(found in the lower third of the code) results in a SIGSEGV. Sadly guides for bgfx are largely deprecated and the documentation is, as expected, not really useful to someone who has very little experience with similar libraries.
In case this helps, here is the console output when executing the debug build:
/home/entropy/CLionProjects/BGFX_Testing/cmake-build-debug/BGFX_Testing
INFO: Starting Wayland-Environment
INFO: Initialized GLFW window
../../../src/bgfx.cpp (3559): BGFX Init...
../../../src/bgfx.cpp (3566): BGFX Version 1.128.8775 (commit: a476c5b9a42d3779af59a0099d4d222fa8898d36)
../../../src/bgfx.cpp (1736): BGFX Reset back-buffer swap chain:
../../../src/bgfx.cpp (1737): BGFX 1600x900, format: RGBA8, numBackBuffers: 2, maxFrameLatency: 0
../../../src/bgfx.cpp (1747): BGFX [ ] MSAAx1
../../../src/bgfx.cpp (1748): BGFX [ ] Fullscreen
../../../src/bgfx.cpp (1749): BGFX [x] V-sync
../../../src/bgfx.cpp (1750): BGFX [ ] Max Anisotropy
../../../src/bgfx.cpp (1751): BGFX [ ] Capture
../../../src/bgfx.cpp (1752): BGFX [ ] Flush After Render
../../../src/bgfx.cpp (1753): BGFX [ ] Flip After Render
../../../src/bgfx.cpp (1754): BGFX [ ] sRGB Back Buffer
../../../src/bgfx.cpp (1755): BGFX [ ] Transparent Back Buffer
../../../src/bgfx.cpp (1756): BGFX [ ] HDR10
../../../src/bgfx.cpp (1757): BGFX [ ] Hi-DPI
../../../src/bgfx.cpp (1758): BGFX [ ] Depth Clamp
../../../src/bgfx.cpp (1759): BGFX [ ] Suspend
../../../src/bgfx.cpp (1939): BGFX Creating rendering thread.
../../../src/bgfx.cpp (1948): BGFX Running in multi-threaded mode
../../../src/bgfx_p.h (3162): BGFX render thread start
../../../../bx/src/os.cpp(176): BX WARN dlopen failed: "librenderdoc.so: cannot open shared object file: No such file or directory".
../../../src/bgfx.cpp (419): BGFX Graphics debugger is not present.
../../../src/renderer_vk.cpp (1195): BGFX Shared library functions:
../../../src/renderer_vk.cpp (1202): BGFX 0x51ab3340 vkCreateInstance
../../../src/renderer_vk.cpp (1202): BGFX 0x51aaf870 vkGetInstanceProcAddr
../../../src/renderer_vk.cpp (1202): BGFX 0x51aaf5c0 vkGetDeviceProcAddr
../../../src/renderer_vk.cpp (1202): BGFX 0x51ab2a40 vkEnumerateInstanceExtensionProperties
../../../src/renderer_vk.cpp (1202): BGFX 0x51ab2e30 vkEnumerateInstanceLayerProperties
../../../src/renderer_vk.cpp (1202): BGFX 0x51ab2650 vkEnumerateInstanceVersion
../../../src/renderer_vk.cpp (734): BGFX Global extensions (24):
../../../src/renderer_vk.cpp (747): BGFX v1 VK_KHR_device_group_creation
../../../src/renderer_vk.cpp (747): BGFX v23 VK_KHR_display
../../../src/renderer_vk.cpp (747): BGFX v1 VK_KHR_external_fence_capabilities
../../../src/renderer_vk.cpp (747): BGFX v1 VK_KHR_external_memory_capabilities
../../../src/renderer_vk.cpp (747): BGFX v1 VK_KHR_external_semaphore_capabilities
../../../src/renderer_vk.cpp (747): BGFX v1 VK_KHR_get_display_properties2
../../../src/renderer_vk.cpp (747): BGFX v2 VK_KHR_get_physical_device_properties2 (supported)
../../../src/renderer_vk.cpp (747): BGFX v1 VK_KHR_get_surface_capabilities2
../../../src/renderer_vk.cpp (747): BGFX v25 VK_KHR_surface
../../../src/renderer_vk.cpp (747): BGFX v1 VK_KHR_surface_protected_capabilities
../../../src/renderer_vk.cpp (747): BGFX v6 VK_KHR_wayland_surface
../../../src/renderer_vk.cpp (747): BGFX v6 VK_KHR_xcb_surface
../../../src/renderer_vk.cpp (747): BGFX v6 VK_KHR_xlib_surface
../../../src/renderer_vk.cpp (747): BGFX v1 VK_EXT_acquire_drm_display
../../../src/renderer_vk.cpp (747): BGFX v1 VK_EXT_acquire_xlib_display
../../../src/renderer_vk.cpp (747): BGFX v10 VK_EXT_debug_report (supported)
../../../src/renderer_vk.cpp (747): BGFX v2 VK_EXT_debug_utils (supported)
../../../src/renderer_vk.cpp (747): BGFX v1 VK_EXT_direct_mode_display
../../../src/renderer_vk.cpp (747): BGFX v1 VK_EXT_display_surface_counter
../../../src/renderer_vk.cpp (747): BGFX v1 VK_EXT_headless_surface
../../../src/renderer_vk.cpp (747): BGFX v1 VK_EXT_surface_maintenance1
../../../src/renderer_vk.cpp (747): BGFX v4 VK_EXT_swapchain_colorspace
../../../src/renderer_vk.cpp (747): BGFX v1 VK_KHR_portability_enumeration
../../../src/renderer_vk.cpp (747): BGFX v1 VK_LUNARG_direct_driver_loading
../../../src/renderer_vk.cpp (773): BGFX Layer extensions (7):
../../../src/renderer_vk.cpp (785): BGFX VK_LAYER_VALVE_steam_overlay_32 (s: 0x004030cf, i: 0x00000001), Steam Overlay Layer
../../../src/renderer_vk.cpp (785): BGFX VK_LAYER_VALVE_steam_overlay_64 (s: 0x004030cf, i: 0x00000001), Steam Overlay Layer
../../../src/renderer_vk.cpp (785): BGFX VK_LAYER_VALVE_steam_fossilize_32 (s: 0x004030cf, i: 0x00000001), Steam Pipeline Caching Layer
../../../src/renderer_vk.cpp (785): BGFX VK_LAYER_VALVE_steam_fossilize_64 (s: 0x004030cf, i: 0x00000001), Steam Pipeline Caching Layer
../../../src/renderer_vk.cpp (785): BGFX VK_LAYER_MANGOHUD_overlay_x86_64 (s: 0x00403000, i: 0x00000001), Vulkan Hud Overlay
../../../src/renderer_vk.cpp (785): BGFX VK_LAYER_MANGOAPP_overlay (s: 0x00403000, i: 0x00000001), Mangoapp Layer
../../../src/renderer_vk.cpp (785): BGFX VK_LAYER_FROG_gamescope_wsi_x86_64 (s: 0x004030dd, i: 0x00000001), Gamescope WSI (XWayland Bypass) Layer (x86_64)
../../../src/renderer_vk.cpp (1236): BGFX Enabled instance layers:
../../../src/renderer_vk.cpp (1277): BGFX Enabled instance extensions:
../../../src/renderer_vk.cpp (1281): BGFX VK_KHR_surface
../../../src/renderer_vk.cpp (1281): BGFX VK_KHR_xcb_surface
../../../src/renderer_vk.cpp (1281): BGFX VK_EXT_debug_report
../../../src/renderer_vk.cpp (1281): BGFX VK_EXT_debug_utils
../../../src/renderer_vk.cpp (1281): BGFX VK_KHR_get_physical_device_properties2
../../../src/renderer_vk.cpp (1354): BGFX Instance API version: 1.3.279
../../../src/renderer_vk.cpp (1359): BGFX Instance variant: 0
../../../src/renderer_vk.cpp (1364): BGFX Instance functions:
../../../src/renderer_vk.cpp (1370): BGFX 0x51ab2140 vkDestroyInstance
../../../src/renderer_vk.cpp (1370): BGFX 0x51ab5e00 vkEnumeratePhysicalDevices
../../../src/renderer_vk.cpp (1370): BGFX 0x51aaf340 vkEnumerateDeviceExtensionProperties
../../../src/renderer_vk.cpp (1370): BGFX 0x51aaf3e0 vkEnumerateDeviceLayerProperties
../../../src/renderer_vk.cpp (1370): BGFX 0x51aabf60 vkGetPhysicalDeviceProperties
../../../src/renderer_vk.cpp (1370): BGFX 0x51aabea0 vkGetPhysicalDeviceFormatProperties
../../../src/renderer_vk.cpp (1370): BGFX 0x51aabe40 vkGetPhysicalDeviceFeatures
../../../src/renderer_vk.cpp (1370): BGFX 0x51aabf00 vkGetPhysicalDeviceImageFormatProperties
../../../src/renderer_vk.cpp (1370): BGFX 0x51aac020 vkGetPhysicalDeviceMemoryProperties
../../../src/renderer_vk.cpp (1370): BGFX 0x51aabfc0 vkGetPhysicalDeviceQueueFamilyProperties
../../../src/renderer_vk.cpp (1370): BGFX 0x51aaf520 vkCreateDevice
../../../src/renderer_vk.cpp (1370): BGFX 0x51aaf7e0 vkDestroyDevice
../../../src/renderer_vk.cpp (1370): BGFX 0x51ab8250 vkGetPhysicalDeviceSurfaceCapabilitiesKHR
../../../src/renderer_vk.cpp (1370): BGFX 0x51ab82b0 vkGetPhysicalDeviceSurfaceFormatsKHR
../../../src/renderer_vk.cpp (1370): BGFX 0x51ab8310 vkGetPhysicalDeviceSurfacePresentModesKHR
../../../src/renderer_vk.cpp (1370): BGFX 0x51ab81f0 vkGetPhysicalDeviceSurfaceSupportKHR
../../../src/renderer_vk.cpp (1370): BGFX 0x51ab8c70 vkDestroySurfaceKHR
../../../src/renderer_vk.cpp (1370): BGFX 0x51aaed20 vkGetPhysicalDeviceFeatures2KHR
../../../src/renderer_vk.cpp (1370): BGFX 0x51aaefa0 vkGetPhysicalDeviceMemoryProperties2KHR
../../../src/renderer_vk.cpp (1370): BGFX 0x51a84350 vkCreateDebugReportCallbackEXT
../../../src/renderer_vk.cpp (1370): BGFX 0x51a84420 vkDestroyDebugReportCallbackEXT
../../../src/renderer_vk.cpp (1370): BGFX 0x0 vkCreateXlibSurfaceKHR
../../../src/renderer_vk.cpp (1370): BGFX 0x0 vkGetPhysicalDeviceXlibPresentationSupportKHR
../../../src/renderer_vk.cpp (1370): BGFX 0x51ab8e10 vkCreateXcbSurfaceKHR
../../../src/renderer_vk.cpp (1370): BGFX 0x51ab8550 vkGetPhysicalDeviceXcbPresentationSupportKHR
../../../src/renderer_vk.cpp (1401): BGFX ---
../../../src/renderer_vk.cpp (1438): BGFX Physical device 0:
../../../src/renderer_vk.cpp (1439): BGFX Name: AMD Radeon RX 6700 XT (RADV NAVI22)
../../../src/renderer_vk.cpp (1440): BGFX API version: 1.3.278
../../../src/renderer_vk.cpp (1445): BGFX API variant: 0
../../../src/renderer_vk.cpp (1446): BGFX Driver version: 6001003
../../../src/renderer_vk.cpp (1447): BGFX VendorId: 1002
../../../src/renderer_vk.cpp (1448): BGFX DeviceId: 73df
../../../src/renderer_vk.cpp (1449): BGFX Type: 2
../../../src/renderer_vk.cpp (1487): BGFX Memory type count: 11
../../../src/renderer_vk.cpp (1490): BGFX 0: flags 0x00000001, index 0
../../../src/renderer_vk.cpp (1490): BGFX 1: flags 0x00000001, index 0
../../../src/renderer_vk.cpp (1490): BGFX 2: flags 0x00000006, index 1
../../../src/renderer_vk.cpp (1490): BGFX 3: flags 0x00000007, index 2
../../../src/renderer_vk.cpp (1490): BGFX 4: flags 0x00000007, index 2
../../../src/renderer_vk.cpp (1490): BGFX 5: flags 0x0000000e, index 1
../../../src/renderer_vk.cpp (1490): BGFX 6: flags 0x0000000e, index 1
../../../src/renderer_vk.cpp (1490): BGFX 7: flags 0x000000c1, index 0
../../../src/renderer_vk.cpp (1490): BGFX 8: flags 0x000000c6, index 1
../../../src/renderer_vk.cpp (1490): BGFX 9: flags 0x000000c7, index 2
../../../src/renderer_vk.cpp (1490): BGFX 10: flags 0x000000ce, index 1
../../../src/renderer_vk.cpp (1497): BGFX Memory heap count: 3
../../../src/renderer_vk.cpp (1502): BGFX 0: flags 0x00000001, size 11.75 GiB
../../../src/renderer_vk.cpp (1502): BGFX 1: flags 0x00000000, size 15.63 GiB
../../../src/renderer_vk.cpp (1502): BGFX 2: flags 0x00000001, size 256.00 MiB
../../../src/renderer_vk.cpp (734): BGFX Global extensions (189):
../../../src/renderer_vk.cpp (747): BGFX v1 VK_KHR_8bit_storage
(Lines omitted)
../../../src/renderer_vk.cpp (747): BGFX v1 VK_VALVE_mutable_descriptor_type
../../../src/renderer_vk.cpp (1529): BGFX Using physical device 0: AMD Radeon RX 6700 XT (RADV NAVI22)
../../../src/renderer_vk.cpp (1728): BGFX ---
../../../src/renderer_vk.cpp (1748): BGFX Queue family property 0:
../../../src/renderer_vk.cpp (1749): BGFX Queue flags: 0x00000007
../../../src/renderer_vk.cpp (1750): BGFX Queue count: 1
../../../src/renderer_vk.cpp (1751): BGFX TS valid bits: 0x00000040
../../../src/renderer_vk.cpp (1752): BGFX Min image: 1 x 1 x 1
../../../src/renderer_vk.cpp (1748): BGFX Queue family property 1:
../../../src/renderer_vk.cpp (1749): BGFX Queue flags: 0x00000006
../../../src/renderer_vk.cpp (1750): BGFX Queue count: 4
../../../src/renderer_vk.cpp (1751): BGFX TS valid bits: 0x00000040
../../../src/renderer_vk.cpp (1752): BGFX Min image: 1 x 1 x 1
../../../src/renderer_vk.cpp (1748): BGFX Queue family property 2:
../../../src/renderer_vk.cpp (1749): BGFX Queue flags: 0x00000008
../../../src/renderer_vk.cpp (1750): BGFX Queue count: 1
../../../src/renderer_vk.cpp (1751): BGFX TS valid bits: 0x00000040
../../../src/renderer_vk.cpp (1752): BGFX Min image: 1 x 1 x 1
../../../src/renderer_vk.cpp (1780): BGFX Enabled device layers:
../../../src/renderer_vk.cpp (1826): BGFX Enabled device extensions:
../../../src/renderer_vk.cpp (1830): BGFX VK_KHR_maintenance1
(Lines omitted)
../../../src/renderer_vk.cpp (1830): BGFX VK_KHR_draw_indirect_count
../../../src/renderer_vk.cpp (1870): BGFX Device functions:
../../../src/renderer_vk.cpp (1875): BGFX 0x51aac080 vkGetDeviceQueue
(Lines omitted)
../../../src/renderer_vk.cpp (1875): BGFX 0x1d50b250 vkCmdDrawIndexedIndirectCountKHR
Process finished with exit code 139 (interrupted by signal 11:SIGSEGV)
Note: Some Lines of the console log have been removed because of high character count, marked with (Lines omitted). If needed, I can add them in a "Solution" since they don't fit in the question itself
Upvotes: 0
Views: 103