From 179dc04d8a3969654def9c60c7db31864b07580c Mon Sep 17 00:00:00 2001 From: ocornut Date: Wed, 30 Sep 2020 14:22:36 +0200 Subject: [PATCH] Examples: Added missing comments in example_apple_metal. (#3400) --- examples/example_apple_metal/README.md | 4 +- .../example_apple_metal/Shared/Renderer.mm | 37 ++++++++++++++++--- examples/example_apple_opengl2/main.mm | 4 +- 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/examples/example_apple_metal/README.md b/examples/example_apple_metal/README.md index 4f620327..c13df2f1 100644 --- a/examples/example_apple_metal/README.md +++ b/examples/example_apple_metal/README.md @@ -4,5 +4,7 @@ This example shows how to integrate Dear ImGui with Metal. It is based on the "cross-platform" game template provided with Xcode as of Xcode 9. -(NB: you may still want to use GLFW or SDL which will also support Windows, Linux along with OSX.) +Consider basing your work off the example_glfw_metal/ or example_sdl_metal/ examples. They are better supported and will be portable unlike this one. + + diff --git a/examples/example_apple_metal/Shared/Renderer.mm b/examples/example_apple_metal/Shared/Renderer.mm index efc3332b..3f7e32d1 100644 --- a/examples/example_apple_metal/Shared/Renderer.mm +++ b/examples/example_apple_metal/Shared/Renderer.mm @@ -15,7 +15,7 @@ @implementation Renderer --(nonnull instancetype)initWithView:(nonnull MTKView *)view; +-(nonnull instancetype)initWithView:(nonnull MTKView*)view; { self = [super init]; if(self) @@ -23,17 +23,41 @@ _device = view.device; _commandQueue = [_device newCommandQueue]; + // Setup Dear ImGui context + // FIXME: This example doesn't have proper cleanup... IMGUI_CHECKVERSION(); ImGui::CreateContext(); - ImGui::StyleColorsDark(); + ImGuiIO& io = ImGui::GetIO(); (void)io; + //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls + //io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls + // Setup Dear ImGui style + ImGui::StyleColorsDark(); + //ImGui::StyleColorsClassic(); + + // Setup Renderer bindings ImGui_ImplMetal_Init(_device); + + // Load Fonts + // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. + // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. + // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). + // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. + // - Read 'docs/FONTS.txt' for more instructions and details. + // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! + //io.Fonts->AddFontDefault(); + //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Roboto-Medium.ttf", 16.0f); + //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf", 15.0f); + //io.Fonts->AddFontFromFileTTF("../../misc/fonts/DroidSans.ttf", 16.0f); + //io.Fonts->AddFontFromFileTTF("../../misc/fonts/ProggyTiny.ttf", 10.0f); + //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); + //IM_ASSERT(font != NULL); } return self; } -- (void)drawInMTKView:(MTKView *)view +- (void)drawInMTKView:(MTKView*)view { ImGuiIO &io = ImGui::GetIO(); io.DisplaySize.x = view.bounds.size.width; @@ -50,11 +74,12 @@ id commandBuffer = [self.commandQueue commandBuffer]; + // Our state (make them static = more or less global) as a convenience to keep the example terse. static bool show_demo_window = true; static bool show_another_window = false; static float clear_color[4] = { 0.28f, 0.36f, 0.5f, 1.0f }; - MTLRenderPassDescriptor *renderPassDescriptor = view.currentRenderPassDescriptor; + MTLRenderPassDescriptor* renderPassDescriptor = view.currentRenderPassDescriptor; if (renderPassDescriptor != nil) { renderPassDescriptor.colorAttachments[0].clearColor = MTLClearColorMake(clear_color[0], clear_color[1], clear_color[2], clear_color[3]); @@ -110,7 +135,7 @@ // Rendering ImGui::Render(); - ImDrawData *drawData = ImGui::GetDrawData(); + ImDrawData* drawData = ImGui::GetDrawData(); ImGui_ImplMetal_RenderDrawData(drawData, commandBuffer, renderEncoder); [renderEncoder popDebugGroup]; @@ -122,7 +147,7 @@ [commandBuffer commit]; } -- (void)mtkView:(MTKView *)view drawableSizeWillChange:(CGSize)size +- (void)mtkView:(MTKView*)view drawableSizeWillChange:(CGSize)size { } diff --git a/examples/example_apple_opengl2/main.mm b/examples/example_apple_opengl2/main.mm index 7cbf3409..133f928a 100644 --- a/examples/example_apple_opengl2/main.mm +++ b/examples/example_apple_opengl2/main.mm @@ -45,7 +45,7 @@ ImGui_ImplOSX_NewFrame(self); ImGui::NewFrame(); - // Global data for the demo + // Our state (make them static = more or less global) as a convenience to keep the example terse. static bool show_demo_window = true; static bool show_another_window = false; static ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); @@ -243,10 +243,12 @@ NSLog(@"No OpenGL Context!"); // Setup Dear ImGui context + // FIXME: This example doesn't have proper cleanup... IMGUI_CHECKVERSION(); ImGui::CreateContext(); ImGuiIO& io = ImGui::GetIO(); (void)io; //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls + //io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls // Setup Dear ImGui style ImGui::StyleColorsDark();