FCT
载入中...
搜索中...
未找到
VK_ContextCommon.h
浏览该文件的文档.
1//
2// Created by Administrator on 2025/3/1.
3//
4#include "../ThirdParty.h"
6#include "./VK_Context.h"
7#ifndef FCT_VK_CONTEXTCOMMON_H
8#define FCT_VK_CONTEXTCOMMON_H
9namespace FCT {
11 public:
16 void addLayer(const char* layer) {
17 m_layers.push_back(layer);
18 }
20 {
21 //auto vkGetInstanceProcAddr = m_loader.getProcAddress<PFN_vkGetInstanceProcAddr>("vkGetInstanceProcAddr");
22 //VULKAN_HPP_DEFAULT_DISPATCHER.init(vkGetInstanceProcAddr);
23 }
24 void init() {
26 VULKAN_HPP_DEFAULT_DISPATCHER.init();
27#ifdef FCT_DEBUG
28 m_layers.push_back("VK_LAYER_KHRONOS_validation");
29#endif
30 vk::ApplicationInfo appInfo;
31 appInfo.setPApplicationName("Vulkan Application")
32 .setApplicationVersion(VK_MAKE_VERSION(1, 0, 0))
33 .setPEngineName("FCT")
34 .setEngineVersion(VK_MAKE_VERSION(1, 0, 0))
35 .setApiVersion(VK_API_VERSION_1_2);
36 std::vector<vk::ExtensionProperties> availableExtensions = vk::enumerateInstanceExtensionProperties();
37
38 // 输出可用的扩展,用于调试
39 fout << "Available Vulkan extensions:" << std::endl;
40 for (const auto& extension : availableExtensions) {
41 fout << " " << extension.extensionName << std::endl;
42 }
43 std::vector<const char*> extensions = {
44#ifdef FCT_DEBUG
45 // VK_EXT_DEBUG_UTILS_EXTENSION_NAME,
46#endif
47#ifdef FCT_ANDROID
48 VK_KHR_ANDROID_SURFACE_EXTENSION_NAME,
49#endif
50#ifdef FCT_WIN32
51 VK_KHR_WIN32_SURFACE_EXTENSION_NAME,
52#endif
53 VK_KHR_SURFACE_EXTENSION_NAME,
54 //VK_KHR_SWAPCHAIN_EXTENSION_NAME
55 };
56 vk::InstanceCreateInfo createInfo;
57 createInfo.setPEnabledLayerNames(m_layers)
58 .setPApplicationInfo(&appInfo)
59 .setPEnabledExtensionNames(extensions);
60 m_instance = vk::createInstance(createInfo);
61 VULKAN_HPP_DEFAULT_DISPATCHER.init(m_instance);
62
63
64 m_physicalDevices = m_instance.enumeratePhysicalDevices();
65 for (auto it : m_physicalDevices){
66 fout << "Physical Device: " << it.getProperties().deviceName << std::endl;
67 for (auto& queueFamily : it.getQueueFamilyProperties()) {
68 fout << "Queue Family: " << queueFamily.queueCount << std::endl;
69 }
70 }
71
72
73 }
74
75 void term() {
76 m_instance.destroy();
77 }
79 return new VK_Context(this);
80 }
84 auto getInstance() {
85 return m_instance;
86 }
87 auto runtime()
88 {
89 return m_runtime;
90 }
91 private:
93 vk::Instance m_instance;
94 std::vector<const char*> m_layers;
95 std::vector<vk::PhysicalDevice> m_physicalDevices;
96 vk::detail::DynamicLoader m_loader;
98 };
99}
100#endif //FCT_VK_CONTEXTCOMMON_H
std::vector< vk::PhysicalDevice > m_physicalDevices
void addLayer(const char *layer)
VK_ContextCommon(Runtime *runtime)
vk::detail::DynamicLoader m_loader
std::vector< const char * > m_layers
std::ostream & fout