summaryrefslogtreecommitdiff
path: root/initgfx.cc
diff options
context:
space:
mode:
Diffstat (limited to 'initgfx.cc')
-rw-r--r--initgfx.cc53
1 files changed, 47 insertions, 6 deletions
diff --git a/initgfx.cc b/initgfx.cc
index a6df6dd..01bd016 100644
--- a/initgfx.cc
+++ b/initgfx.cc
@@ -1,10 +1,51 @@
# include <luma/main.hh>
-# include <stdint.h>
-# include <stdio.h>
-# if defined(LUMA__USE_X)
+# include <cstdint>
+# include <string>
+# include <vulkan/vulkan.h>
# include <wayland-client.h>
-# else
# include <xcb/xcb.h>
-# endif
-void luma::initgfx(uint32_t * retval) {
+void luma::initgfx() {
+ luma::dat.gfxisinit = true;
+ if constexpr(luma::usex == 0x1) {
+ luma::dbgmsg("Creating X connection... ");
+ luma::dat.xconn = xcb_connect(nullptr,nullptr);
+ luma::dat.xscrn = xcb_setup_roots_iterator(xcb_get_setup(luma::dat.xconn)).data;
+ luma::dat.xwin = xcb_generate_id(luma::dat.xconn);
+ luma::dbgmsg("O.K.\n");
+ }
+ else {
+ luma::dbgmsg("Creating Wayland connection... ");
+ luma::dat.wldisp = wl_display_connect(nullptr);
+ if(luma::dat.wldisp == nullptr) {
+ luma::dbgmsg("Error\n");
+ }
+ else {
+ luma::dbgmsg("O.K.\n");
+ }
+ }
+ luma::dat.vkappinf.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
+ luma::dat.vkappinf.pApplicationName = "Luma Standard Library";
+ luma::dat.vkappinf.pEngineName = "Luma Standard Library";
+ luma::dat.vkinstcrtinf.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
+ luma::dat.vkinstcrtinf.pApplicationInfo = &luma::dat.vkappinf;
+ luma::dat.vkinstcrtinf.enabledLayerCount = 0x0;
+ luma::dbgmsg("Creating Vulkan instance... ");
+ luma::dat.vkreslt = vkCreateInstance(&luma::dat.vkinstcrtinf,nullptr,&luma::dat.vkinst);
+ if((luma::dat.vkreslt != VK_SUCCESS)) {
+ luma::dbgmsg("Error\n");
+ }
+ else {
+ luma::dbgmsg("O.K.\n");
+ }
+ std::uint32_t extcount = 0x0;
+ luma::dat.vkexts = std::vector<VkExtensionProperties>(extcount);
+ ::vkEnumerateInstanceExtensionProperties(nullptr,&extcount,luma::dat.vkexts.data());
+ luma::dbgmsg(std::basic_string<char> {std::to_string(extcount) + " Vulkan extensions supported.\n"s}.c_str());
+ luma::dbgmsg("The following Vulkan extensions are supported:\n");
+ for(auto const & ext : luma::dat.vkexts) {
+ luma::dbgmsg(ext.extensionName);
+ }
+ std::uint32_t devcount = 0x0;
+ ::vkEnumeratePhysicalDevices(luma::dat.vkinst,&devcount,luma::dat.vkphysdevs.data());
+ luma::dbgmsg(std::basic_string<char> {std::to_string(devcount) + " Vulkan-compatible device(s) found.\n"s}.c_str());
}