Я создал небольшую программу с lwjgl, которая отображает цветной треугольник, используя Vulkan, сначала я отправлял все необходимые данные в мои шейдеры через буфер одной вершины (цвет + позиция).Зная, что лучше всего использовать только один буфер вершин, я все же хотел попробовать отправить позиции и цвета через 2 разных буфера вершин
Чтобы добавить свой второй буфер вершин, я создал его таким жеСоздав первое, я добавил привязку и присвоил ей второй атрибут следующим образом:
VkVertexInputBindingDescription.Buffer bindingDescriptor = VkVertexInputAttributeDescription.calloc(2)
.binding(0)
.stride(2 * 4)
.inputRate(VK_VERTEX_INPUT_RATE_VERTEX);
//I added this
bindingDescriptor.binding(1)
.stride(3 * 4)
.inputRate(VK_VERTEX_INPUT_RATE_VERTEX);
VkVertexInputAttributeDescription.Buffer attributeDescription = VkVertexInputAttributeDescription.calloc(2)
.get(0)
.binding(0)
.location(0)
.format(VK_FORMAT_R32G32_SFLOAT)
.offset(0);
attributeDescription.get(1)
//changed the binding from 0 to 1
.binding(1)
.location(1)
.format(VK_FORMAT_R32G32B32_SFLOAT)
.offset(0);
, затем в определении прохода рендеринга я добавил свой второй буфер вершин в представленный буфер.на vkCmdBindVertexBuffers
вот так:
LongBuffer offsets = memAllocLong(2);
offsets.put(0, 0L);
//added this
offsets.put(1, 0L);
LongBuffer pBuffers = memAllocLong(2);
pBuffers.put(0, verticesBuf);
//added this
pBuffers.put(1, colorBuf);
vkCmdBindVertexBuffers(renderCommandBuffers[i], 0, pBuffers, offsets);
Проблема в том, что когда я добавляю свой второй буфер вершин, больше ничего не отображается, остается только цвет фона. Я что-то пропустил?Есть ли что-то особенное, чтобы использовать несколько буферов вершин?