mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 13:11:05 +01:00 
			
		
		
		
	SDL example: tweaks and fixes.
This commit is contained in:
		| @@ -1,4 +1,3 @@ | |||||||
|  |  | ||||||
| #ifdef _MSC_VER | #ifdef _MSC_VER | ||||||
| #include <Windows.h> | #include <Windows.h> | ||||||
| #include <gl/GL.h> | #include <gl/GL.h> | ||||||
| @@ -25,9 +24,6 @@ static GLuint       g_FontTexture = 0; | |||||||
| // - in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) | // - in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) | ||||||
| static void ImGui_ImplSdl_RenderDrawLists(ImDrawList** const cmd_lists, int cmd_lists_count) | static void ImGui_ImplSdl_RenderDrawLists(ImDrawList** const cmd_lists, int cmd_lists_count) | ||||||
| { | { | ||||||
|     if (cmd_lists_count == 0) |  | ||||||
|         return; |  | ||||||
|  |  | ||||||
|     // We are using the OpenGL fixed pipeline to make the example code simpler to read! |     // We are using the OpenGL fixed pipeline to make the example code simpler to read! | ||||||
|     // A probable faster way to render would be to collate all vertices from all cmd_lists into a single vertex buffer. |     // A probable faster way to render would be to collate all vertices from all cmd_lists into a single vertex buffer. | ||||||
|     // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, vertex/texcoord/color pointers. |     // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, vertex/texcoord/color pointers. | ||||||
| @@ -208,7 +204,7 @@ bool ImGui_ImplSdl_NewFrame(SDL_Window *window) | |||||||
|  |  | ||||||
|     ImGuiIO& io = ImGui::GetIO(); |     ImGuiIO& io = ImGui::GetIO(); | ||||||
|  |  | ||||||
| 	bool done(false); | 	bool done = false; | ||||||
| 	SDL_Event event; | 	SDL_Event event; | ||||||
| 	while (SDL_PollEvent(&event)) | 	while (SDL_PollEvent(&event)) | ||||||
| 	{ | 	{ | ||||||
| @@ -218,14 +214,15 @@ bool ImGui_ImplSdl_NewFrame(SDL_Window *window) | |||||||
| 			done = true; | 			done = true; | ||||||
| 			break; | 			break; | ||||||
| 		case SDL_MOUSEWHEEL: | 		case SDL_MOUSEWHEEL: | ||||||
| 			if (event.wheel.y>0 ) | 			if (event.wheel.y > 0) | ||||||
| 			{ |  | ||||||
| 				g_MouseWheel = 1; | 				g_MouseWheel = 1; | ||||||
| 			} | 			if (event.wheel.y < 0) | ||||||
| 			if (event.wheel.y<0 ) |  | ||||||
| 			{ |  | ||||||
| 				g_MouseWheel = -1; | 				g_MouseWheel = -1; | ||||||
| 			} | 			break; | ||||||
|  | 		case SDL_MOUSEBUTTONDOWN: | ||||||
|  | 			if (event.button.button == SDL_BUTTON_LEFT) g_MousePressed[0] = true; | ||||||
|  | 			if (event.button.button == SDL_BUTTON_RIGHT) g_MousePressed[1] = true; | ||||||
|  | 			if (event.button.button == SDL_BUTTON_MIDDLE) g_MousePressed[2] = true; | ||||||
| 			break; | 			break; | ||||||
| 		case SDL_TEXTINPUT: | 		case SDL_TEXTINPUT: | ||||||
| 			ImGui_ImplSdl_CharCallback(event.text.text[0]); | 			ImGui_ImplSdl_CharCallback(event.text.text[0]); | ||||||
| @@ -258,27 +255,21 @@ bool ImGui_ImplSdl_NewFrame(SDL_Window *window) | |||||||
|  |  | ||||||
|     // Setup inputs |     // Setup inputs | ||||||
|     // (we already got mouse wheel, keyboard keys & characters from glfw callbacks polled in glfwPollEvents()) |     // (we already got mouse wheel, keyboard keys & characters from glfw callbacks polled in glfwPollEvents()) | ||||||
| 	Uint32 windowFlags = SDL_GetWindowFlags(window); |     if (SDL_GetWindowFlags(window) & SDL_WINDOW_MOUSE_FOCUS) | ||||||
|     if (windowFlags&SDL_WINDOW_MOUSE_FOCUS) |  | ||||||
|     { |  | ||||||
|     	io.MousePos = ImVec2((float)mx, (float)my);   // Mouse position, in pixels (set to -1,-1 if no mouse / on another screen, etc.) |     	io.MousePos = ImVec2((float)mx, (float)my);   // Mouse position, in pixels (set to -1,-1 if no mouse / on another screen, etc.) | ||||||
|     } |  | ||||||
|     else |     else | ||||||
|     { |  | ||||||
|     	io.MousePos = ImVec2(-1,-1); |     	io.MousePos = ImVec2(-1,-1); | ||||||
|     } |  | ||||||
|     |     | ||||||
|     for (int i = 0; i < 3; i++) | 	io.MouseDown[0] = g_MousePressed[0] || (mouseMask & SDL_BUTTON(SDL_BUTTON_LEFT)) != 0;		// If a mouse press event came, always pass it as "mouse held this frame", so we don't miss click-release events that are shorter than 1 frame. | ||||||
|     { | 	io.MouseDown[1] = g_MousePressed[1] || (mouseMask & SDL_BUTTON(SDL_BUTTON_RIGHT)) != 0; | ||||||
| 		io.MouseDown[i] = g_MousePressed[i] || (mouseMask&(1<<i)) != 0;    // If a mouse press event came, always pass it as "mouse held this frame", so we don't miss click-release events that are shorter than 1 frame. | 	io.MouseDown[2] = g_MousePressed[2] || (mouseMask & SDL_BUTTON(SDL_BUTTON_MIDDLE)) != 0; | ||||||
|         g_MousePressed[i] = false; |     g_MousePressed[0] = g_MousePressed[1] = g_MousePressed[2] = false; | ||||||
|     } |  | ||||||
|  |  | ||||||
|     io.MouseWheel = g_MouseWheel; |     io.MouseWheel = g_MouseWheel; | ||||||
|     g_MouseWheel = 0.0f; |     g_MouseWheel = 0.0f; | ||||||
|  |  | ||||||
|     // Hide/show hardware mouse cursor |     // Hide/show hardware mouse cursor | ||||||
|     SDL_ShowCursor( io.MouseDrawCursor ? 0 : 1); |     SDL_ShowCursor(io.MouseDrawCursor ? 0 : 1); | ||||||
|  |  | ||||||
|     // Start the frame |     // Start the frame | ||||||
|     ImGui::NewFrame(); |     ImGui::NewFrame(); | ||||||
|   | |||||||
| @@ -1,4 +1,3 @@ | |||||||
|  |  | ||||||
| struct		SDL_Window; | struct		SDL_Window; | ||||||
|  |  | ||||||
| bool        ImGui_ImplSdl_Init(SDL_Window *window); | bool        ImGui_ImplSdl_Init(SDL_Window *window); | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| // ImGui - standalone example application for Glfw + OpenGL 2, using fixed pipeline | // ImGui - standalone example application for SDL2 | ||||||
|  |  | ||||||
| #include <imgui.h> | #include <imgui.h> | ||||||
| #include "imgui_impl_sdl.h" | #include "imgui_impl_sdl.h" | ||||||
| @@ -12,10 +12,10 @@ | |||||||
|  |  | ||||||
| #ifdef MACOSX | #ifdef MACOSX | ||||||
| #include <OpenGL/gl.h> | #include <OpenGL/gl.h> | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #include <SDL.h> | #include <SDL.h> | ||||||
|  | #include <SDL_OpenGL.h> | ||||||
|  |  | ||||||
| int SDL_main(int /*argc*/, char* /*argv*/[]) | int SDL_main(int /*argc*/, char* /*argv*/[]) | ||||||
| { | { | ||||||
| @@ -27,16 +27,13 @@ int SDL_main(int /*argc*/, char* /*argv*/[]) | |||||||
| 	SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); | 	SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); | ||||||
| 	SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); | 	SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); | ||||||
| 	SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8); | 	SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8); | ||||||
|  |  | ||||||
| 	SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); | 	SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); | ||||||
| 	SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); | 	SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); | ||||||
|  |  | ||||||
| 	int width(1024), height(576); |  | ||||||
|  |  | ||||||
| 	// SDL window | 	// SDL window | ||||||
| 	SDL_DisplayMode current; | 	SDL_DisplayMode current; | ||||||
| 	SDL_GetCurrentDisplayMode(0, ¤t); | 	SDL_GetCurrentDisplayMode(0, ¤t); | ||||||
| 	SDL_Window *window = SDL_CreateWindow( "ImGui OpenGL2/SDL2 example", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_OPENGL|SDL_WINDOW_RESIZABLE ); | 	SDL_Window *window = SDL_CreateWindow("ImGui SDL2+OpenGL example", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720, SDL_WINDOW_OPENGL|SDL_WINDOW_RESIZABLE); | ||||||
|    |    | ||||||
| 	// Create an OpenGL context associated with the window. | 	// Create an OpenGL context associated with the window. | ||||||
| 	SDL_GLContext glcontext = SDL_GL_CreateContext(window); | 	SDL_GLContext glcontext = SDL_GL_CreateContext(window); | ||||||
| @@ -55,9 +52,9 @@ int SDL_main(int /*argc*/, char* /*argv*/[]) | |||||||
|     bool show_another_window = false; |     bool show_another_window = false; | ||||||
|     ImVec4 clear_color = ImColor(114, 144, 154); |     ImVec4 clear_color = ImColor(114, 144, 154); | ||||||
|  |  | ||||||
| 	bool done(false); |  | ||||||
|     // Main loop |     // Main loop | ||||||
|     while(!done) | 	bool done = false; | ||||||
|  |     while (!done) | ||||||
|     { |     { | ||||||
|         done = ImGui_ImplSdl_NewFrame(window); |         done = ImGui_ImplSdl_NewFrame(window); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user