I wanna draw a pixel buffer directly on the screen with the Metal API.
in OpenGL I can use glDrawPixels
how to do it in Metal?
General
RSS for tagDelve into the world of graphics and game development. Discuss creating stunning visuals, optimizing game mechanics, and share resources for game developers.
Post
Replies
Boosts
Views
Activity
I am working on an application where we are planning to use Metal for directly rendering custom content. When user looks at something on the rendered image, I want to get the position or ray of cursor (the point where the user is currently looking at) to render something else like a crosshair. Is it possible to get the cursor position information on VisionOS to accomplish this? How can I know if something is being hovered on by the eyes?
As per the new App Review Guidelines, are HTML5 games provided within apps required to embed in the binary?
Given that the App Review Guidelines' section 4.7 has been updated.
In VisionOS1.1, when using the com.apple.unityplugin.core-3.1.0 & com.apple.unityplugin.gamekit-2.2.0 to sign in Apple Game Center.
var player = await GKLocalPlayer.Authenticate();
Debug.Log($"GKLocalPlayer Player: {player.DisplayName}");
Debug.Log($"GKLocalPlayer Player Alias: {player.Alias}");
it returns
GKLocalPlayer Player:
GKLocalPlayer Player Alias: Unknown
all other parameters are fine, except for the DisplayName is blank and the Alias returns "Unknown".
However, it works fine on iOS.
Currently (jax-metal 0.0.5) doesn't support matrix decompositions like Cholesky, LU, or Eigen, on Metal. I have a 64GB M1 Max on Sonoma 14.2.1 (23C71). Eigen raises a NotImplemented error, but Cholesky and jax.linalg.inv error out. When using the CPU by setting
export JAX_PLATFORM_NAME=CPU
then the decompositions work. The error I am getting:
XlaRuntimeError Traceback (most recent call last) Cell In[33], line 1 ----> 1 jsl.cho_factor(Sigma_0_inv)
File ~/miniconda3/envs/jaxmetal/lib/python3.10/site-packages/jax/_src/scipy/linalg.py:61, in cho_factor(failed resolving arguments) 56 @_wraps(scipy.linalg.cho_factor, 57 lax_description=_no_overwrite_and_chkfinite_doc, skip_params=('overwrite_a', 'check_finite')) 58 def cho_factor(a: ArrayLike, lower: bool = False, overwrite_a: bool = False, 59 check_finite: bool = True) -> tuple[Array, bool]: 60 del overwrite_a, check_finite # Unused ---> 61 return (cholesky(a, lower=lower), lower)
File ~/miniconda3/envs/jaxmetal/lib/python3.10/site-packages/jax/_src/scipy/linalg.py:54, in cholesky(failed resolving arguments) 49 @_wraps(scipy.linalg.cholesky, 50 lax_description=_no_overwrite_and_chkfinite_doc, skip_params=('overwrite_a', 'check_finite')) 51 def cholesky(a: ArrayLike, lower: bool = False, overwrite_a: bool = False, 52 check_finite: bool = True) -> Array: 53 del overwrite_a, check_finite # Unused ---> 54 return _cholesky(a, lower)
File ~/miniconda3/envs/jaxmetal/lib/python3.10/site-packages/jax/_src/compiler.py:255, in backend_compile(backend, module, options, host_callbacks) 250 return backend.compile(built_c, compile_options=options, 251 host_callbacks=host_callbacks) 252 # Some backends don't have host_callbacks option yet 253 # TODO(sharadmv): remove this fallback when all backends allow compile 254 # to take in host_callbacks --> 255 return backend.compile(built_c, compile_options=options)
XlaRuntimeError: UNKNOWN: /var/folders/9d/0035yr7j3bx84h3ghpp_86pc0000gn/T/ipykernel_40684/3046650730.py:1:0: error: failed to legalize operation 'mhlo.cholesky' /var/folders/9d/0035yr7j3bx84h3ghpp_86pc0000gn/T/ipykernel_40684/3046650730.py:1:0: note: see current operation: %5 = "mhlo.cholesky"(%4) {lower = true} : (tensor<200x200xf32>) -> tensor<200x200xf32>
Hi,
Here I encountered an issue while building game-porting-toolkit 1.1.
Below are the prints:
===================================================
2 warnings and 7 errors generated.
make: *** [dlls/crypt32/unixlib.o] Error 1
make: *** Waiting for unfinished jobs....
==> Formula
Tap: apple/apple
Path: /usr/local/Homebrew/Library/Taps/apple/homebrew-apple/Formula/game-porting-toolkit.rb
==> Configuration
HOMEBREW_VERSION: 4.2.12
ORIGIN: https://github.com/Homebrew/brew
HEAD: 780fbbc65e90fbe09629aba180a1839e9e7dbaf2
Last commit: 6 days ago
Core tap JSON: 17 Mar 14:17 UTC
Core cask tap JSON: 17 Mar 10:58 UTC
HOMEBREW_PREFIX: /usr/local
HOMEBREW_CASK_OPTS: []
HOMEBREW_MAKE_JOBS: 10
Homebrew Ruby: 3.1.4 => /usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/3.1.4/bin/ruby
CPU: 10-core 64-bit westmere
Clang: 15.0.0 build 1500
Git: 2.39.3 => /Applications/Xcode.app/Contents/Developer/usr/bin/git
Curl: 8.4.0 => /usr/bin/curl
macOS: 14.4-x86_64
CLT: 15.3.0.0.1.1708646388
Xcode: 15.3 => /Applications/XCode.app/Contents/Developer
Rosetta 2: true
==> ENV
HOMEBREW_CC: clang
HOMEBREW_CXX: clang++
Error: apple/apple/game-porting-toolkit 1.1 did not build
Logs:
/Users/mfhyy/Library/Logs/Homebrew/game-porting-toolkit/00.options.out
/Users/mfhyy/Library/Logs/Homebrew/game-porting-toolkit/01.configure
/Users/mfhyy/Library/Logs/Homebrew/game-porting-toolkit/01.configure.cc
/Users/mfhyy/Library/Logs/Homebrew/game-porting-toolkit/02.make
/Users/mfhyy/Library/Logs/Homebrew/game-porting-toolkit/wine64-build
If reporting this issue please do so to (not Homebrew/brew or Homebrew/homebrew-core):
apple/apple
apple/apple/game-porting-toolkit 1.1 did not build
Logs:
/Users/jorge/Library/Logs/Homebrew/game-porting-toolkit/00.options.out
/Users/jorge/Library/Logs/Homebrew/game-porting-toolkit/01.configure
/Users/jorge/Library/Logs/Homebrew/game-porting-toolkit/01.configure.cc
/Users/jorge/Library/Logs/Homebrew/game-porting-toolkit/02.make
/Users/jorge/Library/Logs/Homebrew/game-porting-toolkit/wine64-build
I've got a couple 2D PNG assets that I want to add to a scene made of a couple other udsz files in RCP (picture adding a couple 2D videogame characters to a simple 3D diorama).
When I try to drag the PNGs to the workspace or the file tree…nothing happens.
I found a walkthrough on Medium (called "Importing and Exporting Personalized Objects for Augmented Reality: Reality Composer and SwiftUI" for those curious as I can't link to Medium posts here) that makes it look like users could do this with simple drag-and-drop. The Medium post is from June 2023, and in the screenshots RCP visually looks a lot more like Reality Composer on iPad, so I'm assuming it's changed a lot since then?
Is there still a way to do this? I've tried adding the 2D elements to a scene with Blenders "import images as planes," but I'm getting weird halos around them and was hoping RCP could make the process a bit easier/cleaner.
Hi everyone,
Last month, my endless runner game set in a crypto world was rejected for using the Bitcoin logo, labeled as a "Copycats" issue. We were asked to remove the logo and Bitcoin prices, even though the Bitcoin logo is public domain. I noticed other Bitcoin games on the AppStore were updated recently without any problems.
I couldn't find any rules against using Bitcoin in the guidelines. When I appealed, they just told me to remove it again but didn't explain why. We've updated our game several times before, and only this small bug fix was rejected.
Any advice on what are the next step? Anyone experienced this?
Cheers
I've been trying to find a C/C++ framework for apps on macos. I couldn't find good docs on metal. Is there a way to write C++ apps without any other library?
We have built the game on Unreal engine 4 and we have optimised the game to run on tvOS devices newer than 2017 (viz. Apple TV 4k and above). We could not bring it down to support Apple TV HD (2015) due to its visual and memory requirements. Is there a way to exclude Apple TV HD from support list. We couldnt find any required device capability to add to info.plist (eg: iphone-ipad-minimum-performance-a12, we tried it but this does not work for tvOS build).
Hello,
Documentation says CGDisplayCreateImage() is deprecated.
Are there any equivalent which can be used instead of CGDisplayCreateImage()? (any function which implements the same functionality)
Thank you for the help,
Pavel
I am in Unity 2022.3.21f1 using the Apple plugins for Unity with the following versions:
Apple.Core - 3.1.0
Apple.Accessibility - 1.1.0
Apple.GameController - 1.2.0
Apple.GameKit - 2.2.0
I am on MacOS 14.4 Apple Silicon and Xcode 15.3.
I started working in a file that I haven't worked on in a while, and found that I was getting errors in Unity with the Apple.Accessibility plugin, so I updated the Apple plugins and stopped getting the errors. However, when I went to build my project (which is just for iOS), I now get the following error for each of the four plugins I have installed:
Please ensure that the build invocation (build.py, xcodebuild, or Xcode) compiled cleanly and that the build was configured to support Release on iOS.
UnityEngine.Debug:LogError (object)
Apple.Core.AppleNativeLibraryUtility:ProcessWrapperLibrary (string,UnityEditor.BuildTarget,string,UnityEditor.iOS.Xcode.PBXProject) (at ./Library/PackageCache/com.apple.unityplugin.core@ba71bdbec187/Editor/ApplePlugInEnvironment.cs:604)
Apple.GameController.Editor.AppleGameControllerBuildStep:OnProcessFrameworks (Apple.Core.AppleBuildProfile,UnityEditor.BuildTarget,string,UnityEditor.iOS.Xcode.PBXProject) (at ./Library/PackageCache/com.apple.unityplugin.gamecontroller@4ec66225948e/Editor/AppleGameControllerBuildStep.cs:61)
Apple.Core.AppleBuild:OnPostProcessBuild (UnityEditor.BuildTarget,string) (at ./Library/PackageCache/com.apple.unityplugin.core@ba71bdbec187/Editor/AppleBuild.cs:195)
UnityEditor.EditorApplication:Internal_CallGlobalEventHandler () (at /Users/bokken/build/output/unity/unity/Editor/Mono/EditorApplication.cs:493)
I downloaded these plugins from Github and built with the build.py script, and had no errors in doing so. I've tried rebuilding multiple times and even specifying the platform as Release (although the default is all so it should have built Release anyways). I've tried rolling back to previous versions of the plugins as well with no luck so far. I don't remember which exact versions I used to be on but have had no luck with the approximate ones.
Does anyone know how I can point Unity to the NativeRelease folders? I've checked that the frameworks for my libraries are there (i.e. at ../Library/PackageCache/com.apple.unityplugin.core@287366a1eaa5/NativeLibraries~/Release/iOS/AppleCoreNative.framework)
I tried to render to two layers using vertex amplification in my mesh shader program, but in the vision pro only the left eye has content and it contains 2 eyes image, and when I switch the mapping0.renderTargetArrayIndexOffset in the encoder, it does not transfer the image to the right eye. Using vertex amplification achieve 2 eyes rendering?
Platform 'METAL' is experimental and not all JAX functionality may be correctly supported!
2024-03-23 22:04:38.947506: W pjrt_plugin/src/mps_client.cc:563] WARNING: JAX Apple GPU support is experimental and not all JAX functionality is correctly supported!
Metal device set to: Apple M1 Pro
systemMemory: 16.00 GB
maxCacheSize: 5.33 GB
loc("-":0:0): error: current mps dialect version is 1.0.0, can't parse version 1.1.0
/AppleInternal/Library/BuildRoots/495c257e-668e-11ee-93ce-926038f30c31/Library/Caches/com.apple.xbs/Sources/MetalPerformanceShadersGraph/mpsgraph/MetalPerformanceShadersGraph/Core/Files/MPSGraphExecutable.mm:1097: failed assertion `Error importing MLIR bytecode.
'
zsh: abort python -c 'import jax; print(jax.numpy.arange(10))'
I have a plane that is stereoscopic so represents to the user depth that is beyond the plane.
I would like to have the options to render the depth buffer for the pixels or to not render any information into the depth for the plane.
I cannot see any option in Shader Graph Material to affect the depth buffer during render. I also cannot see any way in RealityKit to not render to the depth buffer for an entity.
I'm open to any suggestions.
Hi,
I have a CUDA program that I want to convert to Metal Compute so that we can support Apple hardware.
When I wrote the CUDA version, I was able to write efficient code because I learned first about the Cuda-core architecture. The way the cores can access memory for instance is very important information so that I could write code that efficiently access the memory.
Now I want to do the same for the Metal Compute software. But I can not find any information about the low level architecture and especially the things you should know to be able to write efficient code.
Do I miss something?
Is there some guide giving hints for the most efficient way to access memory for instance?
I'm trying to follow the metal-cpp tutorials I've found at https://developer.apple.com/metal/sample-code/?q=learn
The program seems to be launching correctly (I can see the menu bar and interact with it), but nothing is rendered inside the window. I suppose the culprit is somewhere in the following function (I see it binds the device, the view and the window with the object in charge of drawing stuff in the view)
void core::Application::applicationDidFinishLaunching(NS::Notification *pNotification)
{
CGRect frame = (CGRect){{100.0, 100.0}, {512.0, 512.0}};
m_Window->init(frame, NS::WindowStyleMaskClosable | NS::WindowStyleMaskTitled, NS::BackingStoreBuffered, false);
m_Device = MTL::CreateSystemDefaultDevice();
m_View = MTK::View::alloc()->init(frame, m_Device);
m_View->setColorPixelFormat(MTL::PixelFormat::PixelFormatBGRA8Unorm);
m_View->setClearColor(MTL::ClearColor::Make(1.0, 0.0, 0.0, 1.0));
m_ViewDelegate = new graphics::ViewDelegate(m_Device);
m_View->setDelegate(m_ViewDelegate);
m_Window->setContentView(m_View);
m_Window->setTitle(NS::String::string("Template 1", NS::StringEncoding::UTF8StringEncoding));
m_Window->makeKeyAndOrderFront(nullptr);
NS::Application* nsApp = reinterpret_cast<NS::Application*>(pNotification->object());
nsApp->activateIgnoringOtherApps(true);
}
but, as you can infer from the fact that I'm failing at the very first tutorial of the bunch, I'm quite lost. I've tried debugging the app with the Xcode debugger and I saw that it never enters in this function.
void ViewDelegate::drawInMTKView(MTK::View *pView)
{
m_Renderer->Draw(pView);
}
Can it be a symptom of some call missing from my code?
Thank you in advance for your help
I have a fbo generated by last frame, which contain a color texture and a depth texture. Then i want blit that fbo to current MTKView, but failed. Thanks a lot for any suggestions.
Here is the code:
last frame:
id <MTLTexture> src_color;
id <MTLTexture> src_depth;
drawTo(src_color, src_depth);
current frame:
first, init a depth texture if null:
id<MTLTexture> depth_texture_;
if(depth_texture_) {
depth_texture_ = [device_ newTextureWithDescriptor:desc];
}
second,
create desc for encoder:
current_desc = metal_view_.currentRenderPassDescriptor;
current_desc.depthAttachment.texture = depth_texture_;
current_desc.depthAttachment.loadAction = MTLLoadActionClear;
current_desc.depthAttachment.clearDepth = 1.0;
current_desc.stencilAttachment.texture = depth_texture_;
current_desc.stencilAttachment.loadAction = MTLLoadActionClear;
current_desc.stencilAttachment.clearStencil = 0;
current_desc.colorAttachments[0].loadAction = MTLLoadActionClear;
current_desc.colorAttachments[0].clearColor = MTLClearColorMake(1.0, 1, 1, 1.0);
third,
blit to current MTKView:
auto dst_color = current_desc.colorAttachments[0].texture;
auto dst_depth = current_desc.depthAttachment.texture;
id<MTLCommandBuffer> commandBuffer = [command_queue_ commandBuffer];
commandBuffer.label = @"blit";
id <MTLBlitCommandEncoder> blitEncoder = [commandBuffer blitCommandEncoder];
[blitEncoder copyFromTexture:src_color
sourceSlice:0
sourceLevel:0
sourceOrigin:MTLOriginMake(srcRect.x, srcRect.y, 0)
sourceSize:MTLSizeMake(srcRect.width, srcRect.height, 1)
toTexture:dst_color
destinationSlice:0
destinationLevel:0
destinationOrigin:MTLOriginMake(dstRect.x, dstRect.y, 0)];
[blitEncoder copyFromTexture:src_depth
sourceSlice:0
sourceLevel:0
sourceOrigin:MTLOriginMake(srcRect.x, srcRect.y, 0)
sourceSize:MTLSizeMake(srcRect.width, srcRect.height, 1)
toTexture:dst_depth
destinationSlice:0
destinationLevel:0
destinationOrigin:MTLOriginMake(dstRect.x, dstRect.y, 0)];
[blitEncoder endEncoding];
[commandBuffer commit];
[commandBuffer waitUntilCompleted];
Hi,
I'm struggling a little with the Shader Graph in Reality Composer Pro. Doing something simple like linearly interpolating between two colors has me searching through nodes without any luck. Is there a node comparable to the lerp node in Unity? And if so, what is it called?