私のCPUにuboオブジェクトの配列を作成して、そのような呼び出しでGPUにアップロードします。 (例では、私は2つだけのオブジェクトを持っていると言うことができます)。uboの配列を作成し、それぞれのシェーダに一度に表示する
std::vector<UniformBufferObject> ubo(m_allObject.size());
int index = 0;
for (RenderableObject* rendObj : m_allObject)
{
ubo[index].proj = m_camera->getProjection();
ubo[index].view = m_camera->getView();
ubo[index].model = rendObj->getTransform().getModel();
ubo[index].proj[1][1] *= -1;
index++;
}
int size = sizeof(UniformBufferObject) *m_allObject.size();
void* data;
m_instance->getLogicalDevice().mapMemory(ykEngine::Buffer::m_uniformBuffer.m_bufferMemory, 0, size , vk::MemoryMapFlags(), &data);
memcpy(data, ubo.data(), size);
m_instance->getLogicalDevice().unmapMemory(ykEngine::Buffer::m_uniformBuffer.m_bufferMemory);
私は2つのuboのサイズのバッファを1つ作成しました。 (それはサイズ1のuboで動作するため、作成作業ができます)。
vk::DeviceSize bufferSize = sizeof(UniformBufferObject) * 2;
createBuffer(logicalDevice, bufferSize, vk::BufferUsageFlagBits::eUniformBuffer, vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent, m_uniformBuffer.m_buffer, m_uniformBuffer.m_bufferMemory);
と私は記述子セットの作成にオフセット置くより:
vk::DescriptorBufferInfo bufferInfo;
bufferInfo.buffer = uniformBuffer;
bufferInfo.offset = offsetForUBO;
bufferInfo.range = sizeof(UniformBufferObject);
オフセットオブジェクトのインデックス* UniformBufferObjectのサイズです。
すべてのオブジェクトしているが自分のdescriptorsetLayoutですが、私は記述子セットを更新しようとすると、samepipline
私はエラーを取得:
私はそれを指定する任意のaligment列挙型を見つけるcouldntの情報。
誰かがそれを行う方法を知っていれば、それは大いに役立つでしょう。
ありがとうございました。
どのように私はこの人格を得ることができますか?通常のメソッドとそのリンクエラーと私が使用しようとすると:auto func =(PFN_vkGetPhysicalDeviceProperties2KHR)vkGetDeviceProcAddr(* this、 "vkGetPhysicalDeviceProperties2KHR");その仕事も –
@OriYampolsky:実装がその拡張機能をサポートしていない可能性があります。コア関数の名前は 'vkGetPhysicalDeviceProperties'です。 –
@OriYampolsky 2KHR版にはインスタンス拡張子「VK_KHR_get_physical_device_properties2」が必要です –