dj120130 发表于 2023-7-8 02:36:38

[C/C++] VMP 3.8 核心 VMCODE


#include <iostream>
#include <cmath>
#include “vulkan/vulkan.h” #include “vk_test.h”
使用命名空间 std;



存储顶点属性和位置数据
的结构 顶点 {
float4 位置 [[属性(0)]]; // 位置数据 float2 TexCoord [[属性(1)]]; // 纹理坐标数据

};

存储单个三角形
的结构 三角形 { 顶点
顶点; // 单个三角形的顶点数据
};

int main() { /
/ Initialize Vulkan instance, device, and queue
Vulkan::VkApplicationInfo app_info; app_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; app_info.pNext = nullptr; app_info.applicationVersion = VK_MAKE_VERSION(1, 0, 0); app_info.pApplicationName = “Vulkan Vulkan Example”;



app_info.engineVersion = VK_MAKE_VERSION(1, 0, 0);

Vulkan::VkInstance inst = Vulkan::createInstance(&app_info);
Vulkan::VkDevice dev = inst.getDevice();
Vulkan::VkQueue = Vulkan::createQueue(dev, app_info.queueFamilyIndices.ranges.queueFamilyIndex);

创建一个顶点布局
Vulkan::VkPipelineLayout = Vulkan::createPipelineLayout(dev, app_info.pipelineLayouts.ranges.stageIndex);

创建一个顶点缓冲区并上传顶点数据
VkBuffer vertex_buffer = Vulkan::createBuffer(dev, app_info.maxFramebuffers, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,
&vertex_data.raw);
vkCmdPushConstants(queue, app_info.pipelineLayout, VK_SHADER_STAGE_VERTEX_BIT, sizeof(float) * 4,
&vertex_shader.raw);
vkCmdDraw(queue, 3, 1, 0, 0);

三角形三角形结构并上传顶点和索引数据
三角形三角形 = { {
{0.0f, 0.5f, 0.0f}, {0.0f, 1.0f, 0.0f}, {0.0f, 0.0f, 1.0f} }, { {1.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 0.0f}, {1.0f, 0.0f, 1.0f} }, { {0.0f, 0.0f, 1.0f}, {0.0f, 1.0f, 1.0f}, {0.0f, 0.0f,

1.0f} };
VkBuffer buffer = Vulkan::createBuffer(dev, app_info.maxFramebuffers, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,
&index_data.raw);
vkCmdPushConstants(queue, app_info.pipelineLayout, VK_SHADER_STAGE_VERTEX_BIT, sizeof(float) * 12,
&index_shader.raw);
vkCmdDrawIndexed(queue, 3, 1, 0, 0);

将交换链图像呈现给队列队列
.submit([&](){
while(!vkQueueSubmit(queue, 1, &submitInfo, VK_NULL_HANDLE) &&!VK_TIMEOUT);
});

等待队列完成执行
,而 (!vkQueueWaitIdle(queue)) { /
/ 在这里我们可以检查错误,再次显示交换链,交换缓冲区等。
}


清理 Vulkan::d estroyInstance(inst);
Vulkan::d estroyDevice(dev);
Vulkan::d estroyQueue(queue);
返回 0;
}
页: [1]
查看完整版本: [C/C++] VMP 3.8 核心 VMCODE