mirror of
				https://github.com/ocornut/imgui.git
				synced 2025-10-26 12:27:30 +00:00 
			
		
		
		
	Viewport: Obsoleted io.DisplayPos (which was a Viewport branch thing), added ImDrawData::DisplayPos, DisplaySize (#1542) wip
This commit is contained in:
		| @@ -6,7 +6,7 @@ | ||||
| // (minor and older changes stripped away, please see git history for details) | ||||
| //  2018-03-06: OpenGL: Added const char* glsl_version parameter to ImGui_ImplOpenGL3_Init() so user can override the GLSL version e.g. "#version 150". | ||||
| //  2018-02-23: OpenGL: Create the VAO in the render function so the setup can more easily be used with multiple shared GL context. | ||||
| //  2018-XX-XX: OpenGL: Offset projection matrix and clipping rectangle by io.DisplayPos (which will be non-zero for multi-viewport applications). | ||||
| //  2018-XX-XX: OpenGL: Offset projection matrix and clipping rectangle by draw_data->DisplayPos (which will be non-zero for multi-viewport applications). | ||||
| //  2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplSdlGL3_RenderDrawData() in the .h file so you can call it yourself. | ||||
| //  2018-01-07: OpenGL: Changed GLSL shader version from 330 to 150. | ||||
| //  2017-09-01: OpenGL: Save and restore current bound sampler. Save and restore current polygon mode. | ||||
| @@ -71,9 +71,9 @@ void    ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data) | ||||
| { | ||||
|     // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) | ||||
|     ImGuiIO& io = ImGui::GetIO(); | ||||
|     int fb_width = (int)(io.DisplaySize.x * io.DisplayFramebufferScale.x); | ||||
|     int fb_height = (int)(io.DisplaySize.y * io.DisplayFramebufferScale.y); | ||||
|     if (fb_width == 0 || fb_height == 0) | ||||
|     int fb_width = (int)(draw_data->DisplaySize.x * io.DisplayFramebufferScale.x); | ||||
|     int fb_height = (int)(draw_data->DisplaySize.y * io.DisplayFramebufferScale.y); | ||||
|     if (fb_width <= 0 || fb_height <= 0) | ||||
|         return; | ||||
|     draw_data->ScaleClipRects(io.DisplayFramebufferScale); | ||||
|  | ||||
| @@ -110,12 +110,12 @@ void    ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data) | ||||
|     glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); | ||||
|  | ||||
|     // Setup viewport, orthographic projection matrix | ||||
|     // Our visible imgui space lies from io.DisplayPos (top left) to io.DisplayPos+io.DisplaySize (bottom right). io.DisplayPos is typically (0,0) for single viewport applications. | ||||
|     // Our visible imgui space lies from draw_data->DisplayPps (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is typically (0,0) for single viewport apps. | ||||
|     glViewport(0, 0, (GLsizei)fb_width, (GLsizei)fb_height); | ||||
|     float L = io.DisplayPos.x; | ||||
|     float R = io.DisplayPos.x + io.DisplaySize.x; | ||||
|     float T = io.DisplayPos.y; | ||||
|     float B = io.DisplayPos.y + io.DisplaySize.y; | ||||
|     float L = draw_data->DisplayPos.x; | ||||
|     float R = draw_data->DisplayPos.x + draw_data->DisplaySize.x; | ||||
|     float T = draw_data->DisplayPos.y; | ||||
|     float B = draw_data->DisplayPos.y + draw_data->DisplaySize.y; | ||||
|     const float ortho_projection[4][4] = | ||||
|     { | ||||
|         { 2.0f/(R-L),   0.0f,         0.0f,   0.0f }, | ||||
| @@ -142,6 +142,7 @@ void    ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data) | ||||
|     glVertexAttribPointer(g_AttribLocationColor, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ImDrawVert), (GLvoid*)IM_OFFSETOF(ImDrawVert, col)); | ||||
|  | ||||
|     // Draw | ||||
|     ImVec2 display_pos = draw_data->DisplayPos; | ||||
|     for (int n = 0; n < draw_data->CmdListsCount; n++) | ||||
|     { | ||||
|         const ImDrawList* cmd_list = draw_data->CmdLists[n]; | ||||
| @@ -163,7 +164,7 @@ void    ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data) | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 ImVec4 clip_rect = ImVec4(pcmd->ClipRect.x - io.DisplayPos.x, pcmd->ClipRect.y - io.DisplayPos.y, pcmd->ClipRect.z - io.DisplayPos.x, pcmd->ClipRect.w - io.DisplayPos.y); | ||||
|                 ImVec4 clip_rect = ImVec4(pcmd->ClipRect.x - display_pos.x, pcmd->ClipRect.y - display_pos.y, pcmd->ClipRect.z - display_pos.x, pcmd->ClipRect.w - display_pos.y); | ||||
|                 if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0f && clip_rect.w >= 0.0f) | ||||
|                 { | ||||
|                     // Apply scissor/clipping rectangle | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 omar
					omar