Vulkan 学习笔记:创建Window

为了使代码更加规范,且只在需要debug的时候添加validation layer,添加宏定义

BUILD_OPTIONS.h

#pragma once

#define BUILD_ENABLE_VULKAN_DEBUG 1
#define BUILD_ENABLE_VULKAN_RUNTIME_DEBUG 1

Render.cpp修改添加 #if define, 将debug函数包含进去

#include "Renderer.h"

Renderer::Renderer() {
   
	_SetupDebug();
	_InitInstance();
	_InitDebug();
	_InitDevice();
}

Renderer::~Renderer() {
   
	_DeInitDevice();
	_DeInitDebug();
	_DeInitInstance();
}

Window* Renderer::OpenWindow(uint32_t size_x, uint32_t size_y, std::string name)
{
   
	_window = new Window(size_x, size_y, name);
	return nullptr;
}

bool Renderer::Run()
{
   
	if (nullptr != _window) {
   
		return _window->Update();
	}
	return true;
}

void Renderer::_InitInstance()
{
   
	VkApplicationInfo application_info{
   };
	application_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
	application_info.apiVersion = VK_API_VERSION_1_3;//tells driver api version
	application_info.applicationVersion = VK_MAKE_VERSION(0, 1, 0);
	application_info.pApplicationName = "Vulkan_tutorial_1";

	VkInstanceCreateInfo instance_create_info{
   };
	instance_create_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
	instance_create_info.pApplicationInfo = &application_info;
	instance_create_info.enabledLayerCount = _instance_layers.size();
	instance_create_info.ppEnabledLayerNames = _instance_layers.data();
	instance_create_info.enabledExtensionCount = _instance_extensions.size();
	instance_create_info.ppEnabledExtensionNames = _instance_extensions.data();
	//instance_create_info.pNext = &debug_callback_create_info;// add loader message

	//std::cout << "Vulkan Instance create error check" << std::endl;
	ErrorCheck(vkCreateInstance(&instance_create_info, nullptr, &_Instance));
}

void Renderer::_DeInitInstance() {
   
	vkDestroyInstance(_Instance, nullptr);
	_Instance = nullptr;

}

void Renderer::_InitDevice()
{
   
	// give the logical device used to render
	{
   
		uint32_t gpu_count = 0;
		// return gpu_count
		vkEnumeratePhysicalDevices(_Instance, &gpu_count, nullptr);
		std::vector<VkPhysicalDevice> gpu_list(gpu_count);
		// return the number of handles actually written to pPhysicalDevices
		vkEnumeratePhysicalDevices(_Instance, &gpu_count, gpu_list.data());
		_gpu = gpu_list[0];
		// properties are returned
		vkGetPhysicalDeviceProperties(_gpu, &_gpu_properties);
	}
	{
   
		// get _graphics_family_index
		// similarly query properties of queues available on a physical device
		uint32_t family_count = 0;
		vkGetPhysicalDeviceQueueFamilyProperties(_gpu, &family_count, nullptr);
		std::vector<VkQueueFamilyProperties> family_property_list{
    family_count };
		vkGetPhysicalDeviceQueueFamilyProperties(_gpu, &family_count, family_property_list.data());

		bool found = false;
		for (uint32_t i = 0; i < family_count; ++i) {
   
			
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值