raii C++로 Vulkan 쓰기
vulkan_raii.hpp
가 있다.C++ 자물쇠
vk::UniqueHandle
에서도 분석기를 지원하지만 그것보다 사용하기 쉽다.비교
예: 장치 생성
설비 제작의 경우 다음과 같은 3가지 문법으로 비교한다.
vk::
vk::raii::
// VkPhysicalDevice physicalDevice = ...;
// VkDeviceCreateInfo createInfo = ...;
VkDevice device;
if (vkCreateDevice(physicalDevice, &createInfo, nullptr, &device) != VK_SUCCESS) {
throw std::runtime_error("failed to create logical device!");
}
// ...
vkDestroyDevice(device, nullptr);
C++ 래치// vk::PhysicalDevice physicalDevice = ...;
// vk::DeviceCreateInfo createInfo = ...;
vk::UniqueDevice device = physicalDevice.createDeviceUnique(createInfo);
RAII호// vk::raii::PhysicalDevice physicalDevice = ...;
// vk::DeviceCreateInfo createInfo = ...;
vk::raii::Device device(physicalDevice, createInfo);
destroy
라고 부르지 않아도 되고, 구조기로 초기화할 수 있다.예: 버퍼 바인딩
구조기보다 더 기쁜 것은
vk::Device
의 구성원 함수가 처리 대상류의 구성원 함수라는 것이다.C++ 래치
device.bindBufferMemory( buffer, memory, memoryOffset );
RAII호buffer.bindMemory( *memory, memoryOffset );
이전의 방법은 모든 곳을 방문해야 했지만, 이것에 따라 device
어느 정도 해방될 수 있다.Context
RAI 래퍼는 컨텍스트 카테고리
device
도 추가했다.vk::raii::Context context;
vk::raii::Instance instance(context, instanceCreateInfo);
이 분류에 관해서는 아직 완전한 문서가 없는 것 같다Issue #926에는 다음과 같다.The vk::raii::Context is a helper class needed for the classes in the vk::raii namespace. Essentially, it dynamically loads a minimal set of function pointers to do the very first steps in an application (enumerate extensions, layers, and the version). And it's passed into the vk::raii::Instance constructor, to allow the instance-related initializations.
공식 프로그래밍 안내서
공식 가이드 여기 있습니다.
추기: 사용 후의 소감
vk::raii::Context
자체는 쓰기 좋으나 vk::raii
와 vk::
의 사용은 번거롭고 두 개의 혼용 코드가 미묘하다.또 새로운 기능이 있어서 그런지 통일감이 없는 부분도 있다.예를 들어, 교환 의자의 이미지를 가져오면 Pure C의 객체가 반환됩니다.
vk::raii::SwapchainKHR swapChain( device, swapChainCreateInfo );
std::vector<VkImage> swapChainImages = swapChain.getImages();
// vk::Image で返して欲しくない...?
현황은 개인이 C++ 호각이면 된다고 생각하는 결론을 내렸다.앞으로의 발전을 기대해...!
Reference
이 문제에 관하여(raii C++로 Vulkan 쓰기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/nishiki/articles/3bd1ed2f0c16c7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)