mirror of
				https://github.com/ocornut/imgui.git
				synced 2025-10-26 12:27:30 +00:00 
			
		
		
		
	Merge branch 'master' into docking
# Conflicts: # backends/imgui_impl_opengl3.cpp # backends/imgui_impl_osx.h # backends/imgui_impl_osx.mm # imgui.cpp
This commit is contained in:
		| @@ -16,6 +16,7 @@ | ||||
| // CHANGELOG | ||||
| // (minor and older changes stripped away, please see git history for details) | ||||
| //  2021-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface. | ||||
| //  2021-12-15: OpenGL: Using buffer orphaning + glBufferSubData(), seems to fix leaks with multi-viewports with some Intel HD drivers. | ||||
| //  2021-08-23: OpenGL: Fixed ES 3.0 shader ("#version 300 es") use normal precision floats to avoid wobbly rendering at HD resolutions. | ||||
| //  2021-08-19: OpenGL: Embed and use our own minimal GL loader (imgui_impl_opengl3_loader.h), removing requirement and support for third-party loader. | ||||
| //  2021-06-29: Reorganized backend to pull data from a single structure to facilitate usage with multiple-contexts (all g_XXXX access changed to bd->XXXX). | ||||
| @@ -176,6 +177,8 @@ struct ImGui_ImplOpenGL3_Data | ||||
|     GLuint          AttribLocationVtxUV; | ||||
|     GLuint          AttribLocationVtxColor; | ||||
|     unsigned int    VboHandle, ElementsHandle; | ||||
|     GLsizeiptr      VertexBufferSize; | ||||
|     GLsizeiptr      IndexBufferSize; | ||||
|     bool            HasClipOrigin; | ||||
|  | ||||
|     ImGui_ImplOpenGL3_Data() { memset(this, 0, sizeof(*this)); } | ||||
| @@ -436,8 +439,20 @@ void    ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data) | ||||
|         const ImDrawList* cmd_list = draw_data->CmdLists[n]; | ||||
|  | ||||
|         // Upload vertex/index buffers | ||||
|         glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)cmd_list->VtxBuffer.Size * (int)sizeof(ImDrawVert), (const GLvoid*)cmd_list->VtxBuffer.Data, GL_STREAM_DRAW); | ||||
|         glBufferData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)cmd_list->IdxBuffer.Size * (int)sizeof(ImDrawIdx), (const GLvoid*)cmd_list->IdxBuffer.Data, GL_STREAM_DRAW); | ||||
|         GLsizeiptr vtx_buffer_size = (GLsizeiptr)cmd_list->VtxBuffer.Size * (int)sizeof(ImDrawVert); | ||||
|         GLsizeiptr idx_buffer_size = (GLsizeiptr)cmd_list->IdxBuffer.Size * (int)sizeof(ImDrawIdx); | ||||
|         if (bd->VertexBufferSize < vtx_buffer_size) | ||||
|         { | ||||
|             bd->VertexBufferSize = vtx_buffer_size; | ||||
|             glBufferData(GL_ARRAY_BUFFER, bd->VertexBufferSize, NULL, GL_STREAM_DRAW); | ||||
|         } | ||||
|         if (bd->IndexBufferSize < idx_buffer_size) | ||||
|         { | ||||
|             bd->IndexBufferSize = idx_buffer_size; | ||||
|             glBufferData(GL_ELEMENT_ARRAY_BUFFER, bd->IndexBufferSize, NULL, GL_STREAM_DRAW); | ||||
|         } | ||||
|         glBufferSubData(GL_ARRAY_BUFFER, 0, vtx_buffer_size, (const GLvoid*)cmd_list->VtxBuffer.Data); | ||||
|         glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, idx_buffer_size, (const GLvoid*)cmd_list->IdxBuffer.Data); | ||||
|  | ||||
|         for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++) | ||||
|         { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 ocornut
					ocornut