mirror of
				https://github.com/glfw/glfw.git
				synced 2025-10-31 12:42:26 +00:00 
			
		
		
		
	Add new function glfwResetCocoaMTKFrame
- glfwResetCocoaFrame is a helper function that allows glfw to resize an MTKView - also adds CMake configurations to allow Metal integration to be optional.
This commit is contained in:
		
							parent
							
								
									a857a1d1b5
								
							
						
					
					
						commit
						389affc86b
					
				| @ -46,6 +46,8 @@ cmake_dependent_option(GLFW_USE_HYBRID_HPG "Force use of high-performance GPU on | ||||
| cmake_dependent_option(USE_MSVC_RUNTIME_LIBRARY_DLL "Use MSVC runtime library DLL" ON | ||||
|                        "MSVC" OFF) | ||||
| 
 | ||||
| cmake_dependent_option(GLFW_USE_METALKIT "Allow GLFW to include MetalKit.h for metal support" OFF GLFW_BUILD_COCOA ON) | ||||
| 
 | ||||
| set(GLFW_LIBRARY_TYPE "${GLFW_LIBRARY_TYPE}" CACHE STRING | ||||
|     "Library type override for GLFW (SHARED, STATIC, OBJECT, or empty to follow BUILD_SHARED_LIBS)") | ||||
| 
 | ||||
|  | ||||
| @ -289,6 +289,20 @@ GLFWAPI id glfwGetCocoaWindow(GLFWwindow* window); | ||||
|  */ | ||||
| GLFWAPI void glfwAddCocoaMTKSubview(GLFWwindow* window, void* view); | ||||
| 
 | ||||
| 
 | ||||
| /*! @brief Resizes an 'MTKView' to the window's framebuffer size -helpful because the Apple metal-cpp API lacks the ability to do this
 | ||||
|  * | ||||
|  * | ||||
|  *  @errors Possible errors include @ref GLFW_NOT_INITIALIZED. | ||||
|  * | ||||
|  *  @thread_safety Call this function from the main thread. | ||||
|  * | ||||
|  *  @since Added in version 3.3. | ||||
|  * | ||||
|  *  @ingroup native | ||||
|  */ | ||||
| GLFWAPI void glfwResetCocoaMTKFramesize(GLFWwindow* window, void* view); | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| #if defined(GLFW_EXPOSE_NATIVE_NSGL) | ||||
|  | ||||
| @ -31,6 +31,9 @@ set_target_properties(update_mappings PROPERTIES FOLDER "GLFW3") | ||||
| 
 | ||||
| if (GLFW_BUILD_COCOA) | ||||
|     target_compile_definitions(glfw PRIVATE _GLFW_COCOA) | ||||
|     if(GLFW_USE_METALKIT) | ||||
|         target_compile_definitions(glfw PRIVATE _GLFW_BUILD_METAL_DEPENDENCIES) | ||||
|     endif() | ||||
|     target_sources(glfw PRIVATE cocoa_platform.h cocoa_joystick.h cocoa_init.m | ||||
|                                 cocoa_joystick.m cocoa_monitor.m cocoa_window.m | ||||
|                                 nsgl_context.m) | ||||
|  | ||||
| @ -30,7 +30,6 @@ | ||||
| 
 | ||||
| #include <float.h> | ||||
| #include <string.h> | ||||
| #import <MetalKit/MetalKit.h> | ||||
| 
 | ||||
| // Returns the style mask corresponding to the window settings | ||||
| // | ||||
| @ -276,6 +275,7 @@ static const NSRange kEmptyRange = { NSNotFound, 0 }; | ||||
|         window->ns.height = contentRect.size.height; | ||||
|         _glfwInputWindowSize(window, contentRect.size.width, contentRect.size.height); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| - (void)windowDidMove:(NSNotification *)notification | ||||
| @ -363,6 +363,7 @@ static const NSRange kEmptyRange = { NSNotFound, 0 }; | ||||
| 
 | ||||
|         [self updateTrackingAreas]; | ||||
|         [self registerForDraggedTypes:@[NSPasteboardTypeURL]]; | ||||
|          | ||||
|     } | ||||
| 
 | ||||
|     return self; | ||||
| @ -1951,6 +1952,9 @@ GLFWAPI id glfwGetCocoaWindow(GLFWwindow* handle) | ||||
|     return window->ns.object; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| #ifdef _GLFW_BUILD_METAL_DEPENDENCIES | ||||
| #import <MetalKit/MetalKit.h> | ||||
| GLFWAPI void glfwAddCocoaMTKSubview(GLFWwindow* handle, void* view) { | ||||
| 
 | ||||
|     _GLFWwindow* window = (_GLFWwindow*) handle; | ||||
| @ -1968,3 +1972,44 @@ GLFWAPI void glfwAddCocoaMTKSubview(GLFWwindow* handle, void* view) { | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| GLFWAPI void glfwResetCocoaMTKFramesize(GLFWwindow* handle, void* view) {  | ||||
| 
 | ||||
|     _GLFWwindow* window = (_GLFWwindow*) handle; | ||||
|     _GLFW_REQUIRE_INIT_OR_RETURN(); | ||||
| 
 | ||||
|     if (_glfw.platform.platformID != GLFW_PLATFORM_COCOA) | ||||
|     { | ||||
|         _glfwInputError(GLFW_PLATFORM_UNAVAILABLE, | ||||
|                         "Cocoa: Platform not initialized"); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     MTKView* mtkView = (MTKView*) view; | ||||
|     int width, height; | ||||
|     _glfwGetFramebufferSizeCocoa(window, &width, &height); | ||||
|     NSSize size = NSMakeSize(width, height); | ||||
|     [mtkView setFrameSize: size]; | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| #else | ||||
| GLFWAPI void glfwAddCocoaMTKSubview(GLFWwindow* handle, void* view) { | ||||
| 
 | ||||
|     _GLFW_REQUIRE_INIT_OR_RETURN(); | ||||
|     _glfwInputError(GLFW_PLATFORM_ERROR, | ||||
|                     "GLFW was compiled without \"GLFW_USE_METALKIT\" enabled"); | ||||
|      | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| GLFWAPI void glfwResetCocoaMTKFramesize(GLFWwindow* handle, void* view) { | ||||
| 
 | ||||
|     _GLFW_REQUIRE_INIT_OR_RETURN(); | ||||
|     _glfwInputError(GLFW_PLATFORM_ERROR, | ||||
|                     "GLFW was compiled without \"GLFW_USE_METALKIT\" enabled"); | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| #endif | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user