첫 번째 Vulkan 프로그래밍 step4 이미지 보기

8982 단어 GLFWVulkanC++
디렉토리로 돌아가기
소스 코드는 다음 위치에 두십시오.각자의 버전에 따라 속성을 설정한 후 자유롭게 사용하세요.
GitHub

개시하다


Image 객체는 프로그램을 직접 읽고 쓸 수 없습니다.대신 ImageView를 사용합니다.

VkImage 가져오기


Vkimage는 창을 직접 표시하는 이미지입니다.
교환 체인에서 이미지를 가져오려면 vkGetSwapchainImagesKHR을 사용해야 합니다.
void Window::_InitSwapchainImages()
{
    std::vector<VkImage> _swapchain_Image;
    std::vector<VkImageView> _swapchain_image_view;
    vkGetSwapchainImagesKHR(device, _swapchain, &_swapchain_image_count, nullptr);


    _swapchain_Image.resize(_swapchain_image_count);
    _swapchain_image_view.resize(_swapchain_image_count);
    vkGetSwapchainImagesKHR(device, _swapchain, &_swapchain_image_count, _swapchain_Image.data());

VKimageView 생성


렌더링 경로에서 VkImage를 사용하려면 VKimageView를 만들어야 합니다.
VKimageView는 1D 텍스쳐, 2D 텍스쳐로 이미지를 처리하는 등의 방법으로 이미지에 액세스하는 방법을 지정합니다.


    for (int i = 0; i < _swapchain_image_count; i++) {
        VkImageViewCreateInfo image_view_create_info{};

        image_view_create_info.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
        image_view_create_info.pNext = nullptr;
        image_view_create_info.flags = 0;
        image_view_create_info.image = _swapchain_Image[i];
viewtype,format을 통해 그림의 처리 방법을 지정합니다.
components를 지정하면 임의의 색만 꺼낼 수 있습니다.
이번에는 임의의 색만 꺼내는 것을 고려하지 않았기 때문에components의 값을 기본값으로 설정합니다.

        image_view_create_info.viewType = VK_IMAGE_VIEW_TYPE_2D;
        image_view_create_info.format = VK_FORMAT_B8G8R8A8_UNORM;
        image_view_create_info.components.r = VK_COMPONENT_SWIZZLE_IDENTITY;
        image_view_create_info.components.g = VK_COMPONENT_SWIZZLE_IDENTITY;
        image_view_create_info.components.b = VK_COMPONENT_SWIZZLE_IDENTITY;
        image_view_create_info.components.a = VK_COMPONENT_SWIZZLE_IDENTITY;
subreasourceRange는 그림의 목적이 무엇인지, 그림의 어느 부분에 접근해야 하는지를 나타낸다
aspectMask...Image에서 가져온 데이터를 표시합니다.
        image_view_create_info.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
        image_view_create_info.subresourceRange.baseMipLevel = 0;
        image_view_create_info.subresourceRange.levelCount = 1;
        image_view_create_info.subresourceRange.baseArrayLayer = 0;
        image_view_create_info.subresourceRange.layerCount = 1;

완료되면 vkCreateImageView 함수를 호출합니다.

        vkCreateImageView(_renderer->GetVulkanDevice(), &image_view_create_info, nullptr, &_swapchain_image_view[i]);
    }
}

이미지 뷰 삭제


그림 보기는 명확하게 만들어졌기 때문에 프로그램이 끝날 때 버려야 합니다

void Window::_DeInitSwapchainImages()
{
    for (auto view : _swapchain_image_view) {
        vkDestroyImageView(_renderer->GetVulkanDevice(),view,nullptr);
    }
}

끝맺다


다음부터 우리는 도형 파이프라인과 같은 새로운 개념을 접하게 될 것이다.

연락처


tweeter: tositada_nakada
mail: [email protected]

기부하다


paypal: tositada_nakada
Amazon: 원하는 목록

좋은 웹페이지 즐겨찾기