From fc140d4a12b76ade3326bc2eb4554d76ecf9a608 Mon Sep 17 00:00:00 2001 From: omar Date: Wed, 22 Apr 2026 14:55:39 +0200 Subject: [PATCH] Update Vulkan example for removal of VkSampler --- Image-Loading-and-Displaying-Examples.md | 29 ++++++------------------ 1 file changed, 7 insertions(+), 22 deletions(-) diff --git a/Image-Loading-and-Displaying-Examples.md b/Image-Loading-and-Displaying-Examples.md index ee9ef8f..9aca356 100644 --- a/Image-Loading-and-Displaying-Examples.md +++ b/Image-Loading-and-Displaying-Examples.md @@ -86,7 +86,7 @@ DirectX9: ImTextureID = LPDIRECT3DTEXTURE9 (see ImGui_ImplDX9_Rende DirectX11: ImTextureID = ID3D11ShaderResourceView* (see ImGui_ImplDX11_RenderDrawData() in imgui_impl_dx11.cpp) DirectX12: ImTextureID = D3D12_GPU_DESCRIPTOR_HANDLE (see ImGui_ImplDX12_RenderDrawData() in imgui_impl_dx12.cpp) SDL_Renderer: ImTextureID = SDL_Texture* (see ImGui_ImplSDLRenderer2_RenderDrawData() in imgui_impl_sdlrenderer2.cpp) -Vulkan: ImTextureID = VkDescriptorSet (see ImGui_ImplVulkan_RenderDrawData() in imgui_impl_vulkan.cpp) +Vulkan: ImTextureID = ImageView's VkDescriptorSet (see ImGui_ImplVulkan_RenderDrawData() in imgui_impl_vulkan.cpp) WebGPU: ImTextureID = WGPUTextureView (see ImGui_ImplWGPU_RenderDrawData() in imgui_impl_wgpu.cpp) ``` For example, in the OpenGL example binding we store raw OpenGL texture identifier (GLuint) inside ImTextureID. Whereas in the DirectX11 example binding we store a pointer to ID3D11ShaderResourceView inside ImTextureID, which is a higher-level structure tying together both the texture and information about its format and how to read it. @@ -858,7 +858,9 @@ ImGui::End(); We will here use [stb_image.h](https://github.com/nothings/stb/blob/master/stb_image.h) to load images from disk. -Note that since 2023/07/29, our examples Vulkan application are creating minimum-sized descriptor pools. You'll need to increase pool sizes in examples's main.cpp to fit extra descriptors. +Since 2026/04/22 (1.92.8): `ImGui_ImplVulkan_AddTexture()` does not take a sampler anymore, as samplers have been separated from ImageView. The code is simpler. See details in commit [ac261203](https://github.com/ocornut/imgui/commit/ac261203a58e7cb3db8c7dbbb9665ed92ffac1b7). + +Since 2023/07/29: our examples Vulkan application are creating minimum-sized descriptor pools. You'll need to increase pool sizes in examples's main.cpp to fit extra descriptors. **THIS IS ONE WAY TO DO THIS AMONG MANY, and provided for informational purpose. Unfortunately due to the nature of Vulkan, it is not really possible to provide a function that will work in all setups and codebases.** @@ -879,7 +881,6 @@ struct MyTextureData VkImageView ImageView; VkImage Image; VkDeviceMemory ImageMemory; - VkSampler Sampler; VkBuffer UploadBuffer; VkDeviceMemory UploadBufferMemory; @@ -958,25 +959,9 @@ bool LoadTextureFromFile(const char* filename, MyTextureData* tex_data) check_vk_result(err); } - // Create Sampler - { - VkSamplerCreateInfo sampler_info{}; - sampler_info.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO; - sampler_info.magFilter = VK_FILTER_LINEAR; - sampler_info.minFilter = VK_FILTER_LINEAR; - sampler_info.mipmapMode = VK_SAMPLER_MIPMAP_MODE_LINEAR; - sampler_info.addressModeU = VK_SAMPLER_ADDRESS_MODE_REPEAT; // outside image bounds just use border color - sampler_info.addressModeV = VK_SAMPLER_ADDRESS_MODE_REPEAT; - sampler_info.addressModeW = VK_SAMPLER_ADDRESS_MODE_REPEAT; - sampler_info.minLod = -1000; - sampler_info.maxLod = 1000; - sampler_info.maxAnisotropy = 1.0f; - err = vkCreateSampler(g_Device, &sampler_info, g_Allocator, &tex_data->Sampler); - check_vk_result(err); - } - - // Create Descriptor Set using ImGUI's implementation - tex_data->DS = ImGui_ImplVulkan_AddTexture(tex_data->Sampler, tex_data->ImageView, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); + // Create Image View Descriptor Set + // (note: before 1.92.8 this also took a Sampler. See Wiki history) + tex_data->DS = ImGui_ImplVulkan_AddTexture(tex_data->ImageView, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); // Create Upload Buffer {