Skip to content

Commit

Permalink
sokol_imgui.h: update doc section on user-provided images and samplers
Browse files Browse the repository at this point in the history
  • Loading branch information
floooh committed Dec 17, 2024
1 parent 734338d commit f896d02
Showing 1 changed file with 22 additions and 38 deletions.
60 changes: 22 additions & 38 deletions util/sokol_imgui.h
Original file line number Diff line number Diff line change
Expand Up @@ -112,13 +112,9 @@
sokol-imgui will use this to compute the size of the vertex-
and index-buffers allocated via sokol_gfx.h
int image_pool_size
Number of simgui_image_t objects which can be alive at the same time.
The default is 256.
sg_pixel_format color_format
The color pixel format of the render pass where the UI
will be rendered. The default (0) matches sokoL_gfx.h's
will be rendered. The default (0) matches sokol_gfx.h's
default pass.
sg_pixel_format depth_format
Expand Down Expand Up @@ -236,49 +232,37 @@
ON USER-PROVIDED IMAGES AND SAMPLERS
====================================
To render your own images via ImGui::Image(), first create an simgui_image_t
object from a sokol-gfx image and sampler object.
// create a sokol-imgui image object which associates an sg_image with an sg_sampler
simgui_image_t simgui_img = simgui_make_image(&(simgui_image_desc_t){
.image = sg_make_image(...),
.sampler = sg_make_sampler(...),
});
// convert the returned image handle into a ImTextureID handle
ImTextureID tex_id = simgui_imtextureid(simgui_img);
// use the ImTextureID handle in Dear ImGui calls:
ImGui::Image(tex_id, ...);
simgui_image_t objects are small and cheap (literally just the image and sampler
handle).
To render your own images via ImGui::Image() you need to create a Dear ImGui
compatible texture handle (ImTextureID) from a sokol-gfx image handle
or optionally an image handle and a compatible sampler handle.
You can omit the sampler handle in the simgui_make_image() call, in this case a
default sampler will be used with nearest-filtering and clamp-to-edge.
To create a ImTextureID from a sokol-gfx image handle, call:
Trying to render with an invalid simgui_image_t handle will render a small 8x8
white default texture instead.
sg_image img= ...;
ImTextureID imtex_id = simgui_imtextureid(img);
To destroy a sokol-imgui image object, call
Since no sampler is provided, such a texture handle will use a default
sampler with nearest filtering and clamp-to-edge.
simgui_destroy_image(simgui_img);
If you need to render with a different sampler, do this instead:
But please be aware that the image object needs to be around until simgui_render() is called
in a frame (if this turns out to be too much of a hassle we could introduce some sort
of garbage collection where destroyed simgui_image_t objects are kept around until
the simgui_render() call).
sg_image img = ...;
sg_sampler smp = ...;
ImTextureID imtex_id = simgui_imtextureid_with_sampler(img, smp);
You can call:
You don't need to 'release' the ImTextureID handle, the ImTextureID
bits is simply a combination of the sg_image and sg_sampler bits.
simgui_image_desc_t desc = simgui_query_image_desc(img)
Once you have constructed an ImTextureID handle via simgui_imtextureid()
or simgui_imtextureid_with_sampler(), it used in the ImGui::Image()
call like this:
...to get the original desc struct, useful if you need to get the sokol-gfx image
and sampler handle of the simgui_image_t object.
ImGui::Image(imtex_id, ...);
You can convert an ImTextureID back into an simgui_image_t handle:
To extract the sg_image and sg_sampler handle from an ImTextureID:
simgui_image_t img = simgui_image_from_imtextureid(tex_id);
sg_image img = simgui_image_from_imtextureid(imtex_id);
sg_sampler smp = simgui_sampler_from_imtextureid(imtex_id);
MEMORY ALLOCATION OVERRIDE
Expand Down

0 comments on commit f896d02

Please sign in to comment.