Files
face_sdk/vulkan/AppBase.h
2025-10-20 18:44:36 +08:00

86 lines
2.5 KiB
C++

#ifndef VULKAN_UTILS_H
#define VULKAN_UTILS_H
//#define VK_CHECK(x) \
// do \
// { \
// VkResult ret = x; \
// if (ret != VK_SUCCESS) \
// { \
// assert(false); \
// } \
// } while (0)
//#include <volk.h>
#ifdef _WIN32
#define logOut std::cout
#define GLFW_INCLUDE_VULKAN
#include <GLFW/glfw3.h>
#else
#include "../app/src/main/cpp/AndroidOut.h"
#define logOut aout
#define VK_USE_PLATFORM_ANDROID_KHR
#include <vulkan/vulkan.h>
#include <vulkan/vulkan_android.h>
#include <android/native_window.h>
#endif
#include <fstream>
#include <iostream>
#include <stdexcept>
#include <cstdlib>
#include <vector>
#include <optional>
#include <set>
#include <thread>
#include <mutex>
#include <chrono>
#include <ctime>
void VK_CHECK(VkResult ret);
struct QueueFamilyIndices {
std::optional<uint32_t> graphicsFamily;
std::optional<uint32_t> presentFamily;
bool isComplete() {
return graphicsFamily.has_value() && presentFamily.has_value();
}
};
class AppBase
{
public:
std::vector<char> readFile(const std::string& enginePath);
std::vector<unsigned char> readFileEx(const std::string& enginePath);
//std::string getPath(const std::string path);
VkShaderModule createShaderModule(VkDevice& device, const std::vector<char>& code);
const std::vector<const char*> validationLayers = {"VK_LAYER_KHRONOS_validation"};
protected:
long long getCurrentTimeMillis() {
auto now = std::chrono::system_clock::now();
auto duration = now.time_since_epoch();
return std::chrono::duration_cast<std::chrono::milliseconds>(duration).count();
}
VkInstance instance;
void createInstance();
bool checkValidationLayerSupport();
void setupDebugMessenger();
bool checkSwapChainSupport(VkPhysicalDevice device, VkSurfaceKHR& surface);
bool checkDeviceExtensionSupport(VkPhysicalDevice device);
QueueFamilyIndices findQueueFamilies(VkPhysicalDevice device, VkSurfaceKHR& surface);
bool isDeviceSuitable(VkPhysicalDevice device, VkSurfaceKHR& surface);
void pickPhysicalDevice(VkPhysicalDevice& physicalDevice, VkSurfaceKHR& surface);
#ifdef _WIN32
GLFWwindow *window;
#endif
bool enableValidationLayers = true;
VkDebugUtilsMessengerEXT debugMessenger;
};
#endif // VULKAN_UTILS_H