(Breaking) Moved ImDrawCallback_ResetRenderState -> ImGui::GetPlatformIO().DrawCallback_ResetRenderState + added room in ImGuiPlatformIO for more standard backend-agnostic draw callbacks. (#9378)
This commit is contained in:
+2
-2
@@ -255,8 +255,8 @@ void MyImGuiBackend_RenderDrawData(ImDrawData* draw_data)
|
|||||||
const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i];
|
const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i];
|
||||||
if (pcmd->UserCallback)
|
if (pcmd->UserCallback)
|
||||||
{
|
{
|
||||||
if (pcmd->UserCallback == ImDrawCallback_ResetRenderState)
|
if (pcmd->UserCallback == platform_io.DrawCallback_ResetRenderState)
|
||||||
MyEngineSetupenderState();
|
MyEngineSetupSenderState();
|
||||||
else
|
else
|
||||||
pcmd->UserCallback(cmd_list, pcmd);
|
pcmd->UserCallback(cmd_list, pcmd);
|
||||||
}
|
}
|
||||||
|
|||||||
+17
-2
@@ -41,6 +41,10 @@ HOW TO UPDATE?
|
|||||||
|
|
||||||
Breaking Changes:
|
Breaking Changes:
|
||||||
|
|
||||||
|
- DrawList:
|
||||||
|
- Obsoleted `ImDrawCallback_ResetRenderState` in favor of using `ImGui::GetPlatformIO().DrawCallback_ResetRenderState`,
|
||||||
|
which is part of our new standard draw callbacks. (#9378)
|
||||||
|
Redirecting the earlier value into the later one when set, so both old and new code should work.
|
||||||
- Backends:
|
- Backends:
|
||||||
- Vulkan: redesigned to use separate ImageView + Sampler instead of Combined Image Sampler. (#914)
|
- Vulkan: redesigned to use separate ImageView + Sampler instead of Combined Image Sampler. (#914)
|
||||||
This change allows us to facilitate changing samplers, in line with other backends. [@yaz0r, @ocornut]
|
This change allows us to facilitate changing samplers, in line with other backends. [@yaz0r, @ocornut]
|
||||||
@@ -57,6 +61,19 @@ Breaking Changes:
|
|||||||
|
|
||||||
Other Changes:
|
Other Changes:
|
||||||
|
|
||||||
|
- DrawList:
|
||||||
|
- Added room in ImGuiPlatformIO for standard backend-agnostic draw callbacks. Those callbacks
|
||||||
|
are setup/provided by the backend and available in most of our standard backends.
|
||||||
|
They allow backend-agnostic code from e.g. switching to a Nearest/Point sampler without
|
||||||
|
messing with custom Renderer-specific callbacks.
|
||||||
|
platform_io.DrawCallback_ResetRenderState; // Request to reset the graphics/render state.
|
||||||
|
platform_io.DrawCallback_SetSamplerLinear; // Request to set current texture sampling to Linear
|
||||||
|
platform_io.DrawCallback_SetSamplerNearest; // Request to set current texture sampling to Nearest/Point
|
||||||
|
platform_io.DrawCallback_SetSamplerCustom; // Request to set current texture sampling using Backend Specific data.
|
||||||
|
Note that some backends might not support all callbacks.
|
||||||
|
(#9378, #9371, #3590, #8926, #2973, #7485, #7468, #6969, #5118, #7616, #9173, #8322, #7230,
|
||||||
|
#5999, #6452, #5156, #7342, #7592, #7511)
|
||||||
|
- Made AddCallback() user data default to Null for convenience.
|
||||||
- InputText:
|
- InputText:
|
||||||
- InputTextMultiline: fixed an issue processing deactivation logic when an active
|
- InputTextMultiline: fixed an issue processing deactivation logic when an active
|
||||||
multi-line edit is clipped due to being out of view.
|
multi-line edit is clipped due to being out of view.
|
||||||
@@ -113,8 +130,6 @@ Other Changes:
|
|||||||
reporting the common clipper error over a table sanity check assert). (#9350)
|
reporting the common clipper error over a table sanity check assert). (#9350)
|
||||||
- Tweaked assert triggering when first item height measurement fails, and made it
|
- Tweaked assert triggering when first item height measurement fails, and made it
|
||||||
a better recoverable error. (#9350)
|
a better recoverable error. (#9350)
|
||||||
- DrawList:
|
|
||||||
- Made AddCallback() user data default parameter.
|
|
||||||
- Misc:
|
- Misc:
|
||||||
- Minor optimization: reduce redudant label scanning in common widgets.
|
- Minor optimization: reduce redudant label scanning in common widgets.
|
||||||
- Added missing Test Engine hooks for PlotXXX(), VSliderXXX(), TableHeader().
|
- Added missing Test Engine hooks for PlotXXX(), VSliderXXX(), TableHeader().
|
||||||
|
|||||||
@@ -395,6 +395,7 @@ IMPLEMENTING SUPPORT for ImGuiBackendFlags_RendererHasTextures:
|
|||||||
When you are not sure about an old symbol or function name, try using the Search/Find function of your IDE to look for comments or references in all imgui files.
|
When you are not sure about an old symbol or function name, try using the Search/Find function of your IDE to look for comments or references in all imgui files.
|
||||||
You can read releases logs https://github.com/ocornut/imgui/releases for more details.
|
You can read releases logs https://github.com/ocornut/imgui/releases for more details.
|
||||||
|
|
||||||
|
- 2026/04/23 (1.92.8) - Obsoleted `ImDrawCallback_ResetRenderState` in favor of using `ImGui::GetPlatformIO().DrawCallback_ResetRenderState`, which is part of our new standard draw callbacks. (#9378)
|
||||||
- 2026/04/22 (1.92.8) - Backends: Vulkan: redesigned to use separate ImageView + Sampler instead of Combined Image Sampler.
|
- 2026/04/22 (1.92.8) - Backends: Vulkan: redesigned to use separate ImageView + Sampler instead of Combined Image Sampler.
|
||||||
- When registering custom textures: changed ImGui_ImplVulkan_AddTexture() signature to remove Sampler.
|
- When registering custom textures: changed ImGui_ImplVulkan_AddTexture() signature to remove Sampler.
|
||||||
- When creating your own descriptor pool (instead of letting backend creates its own): need at least IMGUI_IMPL_VULKAN_MINIMUM_SAMPLED_IMAGE_POOL_SIZE descriptors of type VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE + IMGUI_IMPL_VULKAN_MINIMUM_SAMPLER_POOL_SIZE descriptors of type VK_DESCRIPTOR_TYPE_SAMPLER.
|
- When creating your own descriptor pool (instead of letting backend creates its own): need at least IMGUI_IMPL_VULKAN_MINIMUM_SAMPLED_IMAGE_POOL_SIZE descriptors of type VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE + IMGUI_IMPL_VULKAN_MINIMUM_SAMPLER_POOL_SIZE descriptors of type VK_DESCRIPTOR_TYPE_SAMPLER.
|
||||||
@@ -15816,6 +15817,7 @@ void ImGuiPlatformIO::ClearRendererHandlers()
|
|||||||
{
|
{
|
||||||
Renderer_TextureMaxWidth = Renderer_TextureMaxHeight = 0;
|
Renderer_TextureMaxWidth = Renderer_TextureMaxHeight = 0;
|
||||||
Renderer_RenderState = NULL;
|
Renderer_RenderState = NULL;
|
||||||
|
DrawCallback_ResetRenderState = DrawCallback_SetSamplerLinear = DrawCallback_SetSamplerNearest = DrawCallback_SetSamplerCustom = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGuiViewport* ImGui::GetMainViewport()
|
ImGuiViewport* ImGui::GetMainViewport()
|
||||||
|
|||||||
@@ -3166,12 +3166,6 @@ typedef unsigned short ImDrawIdx; // Default: 16-bit (for maximum compatibilit
|
|||||||
typedef void (*ImDrawCallback)(const ImDrawList* parent_list, const ImDrawCmd* cmd);
|
typedef void (*ImDrawCallback)(const ImDrawList* parent_list, const ImDrawCmd* cmd);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Special Draw callback value to request renderer backend to reset the graphics/render state.
|
|
||||||
// The renderer backend needs to handle this special value, otherwise it will crash trying to call a function at this address.
|
|
||||||
// This is useful, for example, if you submitted callbacks which you know have altered the render state and you want it to be restored.
|
|
||||||
// Render state is not reset by default because they are many perfectly useful way of altering render state (e.g. changing shader/blending settings before an Image call).
|
|
||||||
#define ImDrawCallback_ResetRenderState (ImDrawCallback)(-8)
|
|
||||||
|
|
||||||
// Typically, 1 command = 1 GPU draw call (unless command is a callback)
|
// Typically, 1 command = 1 GPU draw call (unless command is a callback)
|
||||||
// - VtxOffset: When 'io.BackendFlags & ImGuiBackendFlags_RendererHasVtxOffset' is enabled,
|
// - VtxOffset: When 'io.BackendFlags & ImGuiBackendFlags_RendererHasVtxOffset' is enabled,
|
||||||
// this fields allow us to render meshes larger than 64K vertices while keeping 16-bit indices.
|
// this fields allow us to render meshes larger than 64K vertices while keeping 16-bit indices.
|
||||||
@@ -3378,7 +3372,8 @@ struct ImDrawList
|
|||||||
|
|
||||||
// Advanced: Draw Callbacks
|
// Advanced: Draw Callbacks
|
||||||
// - May be used to alter render state (change sampler, blending, current shader). May be used to emit custom rendering commands (difficult to do correctly, but possible).
|
// - May be used to alter render state (change sampler, blending, current shader). May be used to emit custom rendering commands (difficult to do correctly, but possible).
|
||||||
// - Use special ImDrawCallback_ResetRenderState callback to instruct backend to reset its render state to the default.
|
// - Use special GetPlatformIO().DrawCallback_ResetRenderState callback to instruct backend to reset its render state to the default.
|
||||||
|
// - See other standard callbacks in GetPlatformIO(), which may or not be supported by your backend.
|
||||||
// - Your rendering loop must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. All standard backends are honoring this.
|
// - Your rendering loop must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. All standard backends are honoring this.
|
||||||
// - For some backends, the callback may access selected render-states exposed by the backend in a ImGui_ImplXXXX_RenderState structure pointed to by platform_io.Renderer_RenderState.
|
// - For some backends, the callback may access selected render-states exposed by the backend in a ImGui_ImplXXXX_RenderState structure pointed to by platform_io.Renderer_RenderState.
|
||||||
// - IMPORTANT: please be mindful of the different level of indirection between using size==0 (copying argument) and using size>0 (copying pointed data into a buffer).
|
// - IMPORTANT: please be mindful of the different level of indirection between using size==0 (copying argument) and using size>0 (copying pointed data into a buffer).
|
||||||
@@ -4022,6 +4017,12 @@ struct ImGuiPlatformIO
|
|||||||
// Written by some backends during ImGui_ImplXXXX_RenderDrawData() call to point backend_specific ImGui_ImplXXXX_RenderState* structure.
|
// Written by some backends during ImGui_ImplXXXX_RenderDrawData() call to point backend_specific ImGui_ImplXXXX_RenderState* structure.
|
||||||
void* Renderer_RenderState;
|
void* Renderer_RenderState;
|
||||||
|
|
||||||
|
// Standard draw callbacks
|
||||||
|
ImDrawCallback DrawCallback_ResetRenderState; // Request to reset the graphics/render state.
|
||||||
|
ImDrawCallback DrawCallback_SetSamplerLinear; // Request to set current texture sampling to Linear
|
||||||
|
ImDrawCallback DrawCallback_SetSamplerNearest; // Request to set current texture sampling to Nearest/Point
|
||||||
|
ImDrawCallback DrawCallback_SetSamplerCustom; // Request to set current texture sampling using Backend Specific data.
|
||||||
|
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
// Output
|
// Output
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
@@ -4150,6 +4151,8 @@ namespace ImGui
|
|||||||
//static inline void SetScrollPosHere() { SetScrollHere(); } // OBSOLETED in 1.42
|
//static inline void SetScrollPosHere() { SetScrollHere(); } // OBSOLETED in 1.42
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define ImDrawCallback_ResetRenderState (ImDrawCallback)(-8) // OBSOLETED in 1.92.8: Use ImGui::GetPlatformIO().DrawCallback_ResetRenderState
|
||||||
|
|
||||||
//-- OBSOLETED in 1.92.0: ImFontAtlasCustomRect becomes ImTextureRect
|
//-- OBSOLETED in 1.92.0: ImFontAtlasCustomRect becomes ImTextureRect
|
||||||
// - ImFontAtlasCustomRect::X,Y --> ImTextureRect::x,y
|
// - ImFontAtlasCustomRect::X,Y --> ImTextureRect::x,y
|
||||||
// - ImFontAtlasCustomRect::Width,Height --> ImTextureRect::w,h
|
// - ImFontAtlasCustomRect::Width,Height --> ImTextureRect::w,h
|
||||||
|
|||||||
+6
-1
@@ -528,9 +528,14 @@ void ImDrawList::_PopUnusedDrawCmd()
|
|||||||
|
|
||||||
void ImDrawList::AddCallback(ImDrawCallback callback, void* userdata, size_t userdata_size)
|
void ImDrawList::AddCallback(ImDrawCallback callback, void* userdata, size_t userdata_size)
|
||||||
{
|
{
|
||||||
|
IM_ASSERT(callback != NULL);
|
||||||
|
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
||||||
|
if (callback == ImDrawCallback_ResetRenderState && _Data->Context != NULL && _Data->Context->PlatformIO.DrawCallback_ResetRenderState != NULL)
|
||||||
|
callback = _Data->Context->PlatformIO.DrawCallback_ResetRenderState; // == ImGui::GetPlatformIO().DrawCallback_ResetRenderState
|
||||||
|
#endif
|
||||||
|
|
||||||
IM_ASSERT_PARANOID(CmdBuffer.Size > 0);
|
IM_ASSERT_PARANOID(CmdBuffer.Size > 0);
|
||||||
ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
|
ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
|
||||||
IM_ASSERT(callback != NULL);
|
|
||||||
IM_ASSERT(curr_cmd->UserCallback == NULL);
|
IM_ASSERT(curr_cmd->UserCallback == NULL);
|
||||||
if (curr_cmd->ElemCount != 0)
|
if (curr_cmd->ElemCount != 0)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user