mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-03 22:51:06 +01:00 
			
		
		
		
	Readme, Wiki: Image loading examples.
This commit is contained in:
		
							
								
								
									
										22
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -622,6 +622,7 @@ CODE
 | 
			
		||||
 | 
			
		||||
 Q: How can I display an image? What is ImTextureID, how does it works?
 | 
			
		||||
 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.
 | 
			
		||||
    - 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).
 | 
			
		||||
@@ -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.
 | 
			
		||||
    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:
 | 
			
		||||
    Refer to the Wiki to find simplified examples for loading textures with OpenGL, DirectX9 and DirectX11:
 | 
			
		||||
 | 
			
		||||
        // 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));
 | 
			
		||||
        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.
 | 
			
		||||
    Because both end-points (user code and rendering function) are under your control, you know exactly what is stored inside the ImTextureID / void*.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user