|
@@ -622,6 +622,7 @@ CODE
|
|
|
|
|
|
Q: How can I display an image? What is ImTextureID, how does it works?
|
|
Q: How can I display an image? What is ImTextureID, how does it works?
|
|
A: Short explanation:
|
|
A: Short explanation:
|
|
|
|
+ - Please read Wiki entry for examples: https://github.com/ocornut/imgui/wiki/Image-Loading-and-Displaying-Examples
|
|
- You may use functions such as ImGui::Image(), ImGui::ImageButton() or lower-level ImDrawList::AddImage() to emit draw calls that will use your own textures.
|
|
- You may use functions such as ImGui::Image(), ImGui::ImageButton() or lower-level ImDrawList::AddImage() to emit draw calls that will use your own textures.
|
|
- Actual textures are identified in a way that is up to the user/engine. Those identifiers are stored and passed as ImTextureID (void*) value.
|
|
- Actual textures are identified in a way that is up to the user/engine. Those identifiers are stored and passed as ImTextureID (void*) value.
|
|
- Loading image files from the disk and turning them into a texture is not within the scope of Dear ImGui (for a good reason).
|
|
- Loading image files from the disk and turning them into a texture is not within the scope of Dear ImGui (for a good reason).
|
|
@@ -669,26 +670,9 @@ CODE
|
|
This is by design and is actually a good thing, because it means your code has full control over your data types and how you display them.
|
|
This is by design and is actually a good thing, because it means your code has full control over your data types and how you display them.
|
|
If you want to display an image file (e.g. PNG file) into the screen, please refer to documentation and tutorials for the graphics API you are using.
|
|
If you want to display an image file (e.g. PNG file) into the screen, please refer to documentation and tutorials for the graphics API you are using.
|
|
|
|
|
|
- Here's a simplified OpenGL example using stb_image.h:
|
|
|
|
-
|
|
|
|
- // Use stb_image.h to load a PNG from disk and turn it into raw RGBA pixel data:
|
|
|
|
- #define STB_IMAGE_IMPLEMENTATION
|
|
|
|
- #include <stb_image.h>
|
|
|
|
- [...]
|
|
|
|
- int my_image_width, my_image_height;
|
|
|
|
- unsigned char* my_image_data = stbi_load("my_image.png", &my_image_width, &my_image_height, NULL, 4);
|
|
|
|
-
|
|
|
|
- // Turn the RGBA pixel data into an OpenGL texture:
|
|
|
|
- GLuint my_opengl_texture;
|
|
|
|
- glGenTextures(1, &my_opengl_texture);
|
|
|
|
- glBindTexture(GL_TEXTURE_2D, my_opengl_texture);
|
|
|
|
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
|
|
|
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
|
|
|
- glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
|
|
|
|
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image_width, image_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, image_data);
|
|
|
|
-
|
|
|
|
- // Now that we have an OpenGL texture, assuming our imgui rendering function (imgui_impl_xxx.cpp file) takes GLuint as ImTextureID, we can display it:
|
|
|
|
- ImGui::Image((void*)(intptr_t)my_opengl_texture, ImVec2(my_image_width, my_image_height));
|
|
|
|
|
|
+ Refer to the Wiki to find simplified examples for loading textures with OpenGL, DirectX9 and DirectX11:
|
|
|
|
+
|
|
|
|
+ https://github.com/ocornut/imgui/wiki/Image-Loading-and-Displaying-Examples
|
|
|
|
|
|
C/C++ tip: a void* is pointer-sized storage. You may safely store any pointer or integer into it by casting your value to ImTextureID / void*, and vice-versa.
|
|
C/C++ tip: a void* is pointer-sized storage. You may safely store any pointer or integer into it by casting your value to ImTextureID / void*, and vice-versa.
|
|
Because both end-points (user code and rendering function) are under your control, you know exactly what is stored inside the ImTextureID / void*.
|
|
Because both end-points (user code and rendering function) are under your control, you know exactly what is stored inside the ImTextureID / void*.
|