mirror of
https://github.com/glfw/glfw.git
synced 2025-04-11 19:32:02 +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