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:
secrart 2022-06-13 19:06:09 -04:00
parent a857a1d1b5
commit 389affc86b
4 changed files with 65 additions and 1 deletions

View File

@ -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)")

View File

@ -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)

View File

@ -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)

View File

@ -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