Установка чертежа довольно востребована, но фактические призывы, необходимые для розыгрыша, довольно просты. Из tri.c
(который рисует 2D треугольник):
// ...
vkCmdBeginRenderPass(demo->draw_cmd, &rp_begin, VK_SUBPASS_CONTENTS_INLINE);
vkCmdBindPipeline(demo->draw_cmd, VK_PIPELINE_BIND_POINT_GRAPHICS,
demo->pipeline);
vkCmdBindDescriptorSets(demo->draw_cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, demo->pipeline_layout,
0, 1, & demo->desc_set, 0, NULL);
VkViewport viewport = {};
viewport.height = (float) demo->height;
viewport.width = (float) demo->width;
viewport.minDepth = (float) 0.0f;
viewport.maxDepth = (float) 1.0f;
vkCmdSetViewport(demo->draw_cmd, 0, 1, &viewport);
VkRect2D scissor = {};
scissor.extent.width = demo->width;
scissor.extent.height = demo->height;
scissor.offset.x = 0;
scissor.offset.y = 0;
vkCmdSetScissor(demo->draw_cmd, 0, 1, &scissor);
VkDeviceSize offsets[1] = {0};
vkCmdBindVertexBuffers(demo->draw_cmd, VERTEX_BUFFER_BIND_ID, 1, &demo->vertices.buf, offsets);
vkCmdDraw(demo->draw_cmd, 3, 1, 0, 0);
vkCmdEndRenderPass(demo->draw_cmd);
// ...
Этот фрагмент кода предполагает, что вы уже получили VkPipeline
(которые включают в себя шейдеры и т.д.), VkBuffer
(для буфера вершин), а VkCommandBuffer
в соответствующих государств. Это vkCmdDraw
, который фактически выдает команду для рисования, как только выполняется VkCommandBuffer
.
Переполнение стека не является учебным сайтом. Ответ на этот вопрос потребует объяснения: шейдеров и компиляции шейдеров, объектов состояния конвейера, конвейеров, распределения памяти, синхронизации памяти, загрузки памяти, буферов, используемых для ввода вершин, и, возможно, наборов дескрипторов и/или констант push. Это слишком много для SO. Существует множество примеров кода примера; Vulkan SDK поставляется с некоторыми. –
@NicolBolas Хотя я понимаю беспокойство, похоже, нет хороших примеров. Все доступные примеры включают много ненужных рывков (т. Е. Привязывающих текстур, цветов и т. Д.). Минимального образца или даже шагов для рисования примитивных фигур было бы достаточно, чтобы помочь. – tambre
Я не изучил всю совокупность доступных в Вулкане примеров. Но мой первый хит Google для «Vulkan single triangle example» появился [это] (https://github.com/SaschaWillems/Vulkan), который кажется совершенно исправным. Если вы не можете обойти тот факт, что в этом примере есть данные о цвете, то я подозреваю, что вы ищете что-то для копирования и вставки в свой код, а не из того, что вы действительно можете узнать. –