使用Vulkan封装一个2D小引擎

本文介绍了作者在毕业设计中实现的一个基于Vulkan的2D游戏引擎。引擎包括Vulkan初始化、渲染设置、精灵对象的创建与更新,以及对GLFW、FMOD和GUI模块的封装。通过调整精灵状态、创建Vulkan对象、更新顶点和统一缓冲区,实现了2D图形的移动、旋转和缩放。未来可扩展功能如Sprite节点树和碰撞检测。
摘要由CSDN通过智能技术生成

花了半个月填了下毕设开的坑『基于Vulkan的2D游戏引擎的设计与实现』,最终实现了一个简单的2D小引擎,算是体验了Vulkan的开发流程。

主循环非常常规,三段式:

void GameEngine::Run()
{
	while (!glfwWindowShouldClose(this->window))
	{
		glfwPollEvents();
		this->ProcessInput();
		this->UpdateLogic();
		this->DrawFrame();
	}

	glfwDestroyWindow(this->window);
	glfwTerminate();
}
用到了5个单例Manager,VulkanRenderer、InputManager、AudioManager、GUIManager和TimerManager。

Vulkan初始化过程如下:

void InitVulkan()
{
	createInstance();		// 创建VkApplication && VkInstance
	setUpDebugCallback();		// 设置Vulkan Debug回调信息
	createSurface();		// 创建窗口相关的VkSurface
	pickPhysicalDevice();		// 选择计算机物理显卡,创建VkPhysicsDevice
	createLogicalDevice();		// 创建逻辑设备VkDevice
	createSwapChain();		// 创建交换链SwapChain并获取Images
	createImageViews();		// 为每一个SwapChain Images创建ImageView
	createRenderPass();		// 创建RenderPass,配置颜色和深度的信息
	creatDescriptorSetLayout();	// 创建描述符信息,为Shader的属性提供信息
	createGriphicsPipeline();	// 创建渲染管线,一旦创建几乎不能动态更改
	createCommandPool();		// 创建命令池
	createDepthResources();		// 创建深度纹理,用于DepthTest
	createFragmentBuffer();		// 创建帧缓冲,Vulkan默认采用三重缓冲
	createTextureSampler();		// 创建可以重复使用的TextureSampler
	createIndexBuffer();		// 创建可以重复使用的IBO
	create
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值