[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]