# Putting obj files on the GPU with Metal.jl

**URL:** <https://discourse.julialang.org/t/putting-obj-files-on-the-gpu-with-metal-jl/118416>\
**Category:** GPU\
**Tags:** gpu, geometrybasics, metaljl\
**Created:** [August 20, 2024, 1:58pm UTC](https://discourse.julialang.org/t/putting-obj-files-on-the-gpu-with-metal-jl/118416 "2024-08-20T13:58:54Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![dchang10](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dchang10/32/44162_2.png) [@dchang10](https://discourse.julialang.org/u/dchang10)\
**Post date:** [August 20, 2024, 1:58pm UTC](https://discourse.julialang.org/t/putting-obj-files-on-the-gpu-with-metal-jl/118416/1 "2024-08-20T13:58:54Z")

</div>

How do I bring mesh from obj files onto the GPU?

I am trying to do some GPU manipulation of meshes from .obj files. I was testing my code with the [stanford bunny obj file](https://raw.githubusercontent.com/alecjacobson/common-3d-test-models/master/data/stanford-bunny.obj), which I imported into a `GeometryBasics` `Mesh` using

```julia
using FileIO
bunny_mesh = load(joinpath((@ __DIR__ ),"stanfordbunny.obj") )

```

I then try some sort of manipulation on the GPU with `Metal.jl` here’s a minimal working example:

```julia
using Metal
a = collect(map(pix->let 
        bunny_mesh=bunny_mesh;
        return pix
    end, 
    MtlArray(ones(Float32, 100))))

```

Doing this returns an array of `BrokenBroadcast` instead of

```julia
100-element Vector{GPUArrays.BrokenBroadcast{Union{}}}:
 GPUArrays.BrokenBroadcast{Union{}}()
 GPUArrays.BrokenBroadcast{Union{}}()
 GPUArrays.BrokenBroadcast{Union{}}()
 GPUArrays.BrokenBroadcast{Union{}}()
 GPUArrays.BrokenBroadcast{Union{}}()
 GPUArrays.BrokenBroadcast{Union{}}()
 GPUArrays.BrokenBroadcast{Union{}}()
 GPUArrays.BrokenBroadcast{Union{}}()
 GPUArrays.BrokenBroadcast{Union{}}()
 GPUArrays.BrokenBroadcast{Union{}}()
 GPUArrays.BrokenBroadcast{Union{}}()
 GPUArrays.BrokenBroadcast{Union{}}()
 ⋮
 GPUArrays.BrokenBroadcast{Union{}}()
 GPUArrays.BrokenBroadcast{Union{}}()
 GPUArrays.BrokenBroadcast{Union{}}()
 GPUArrays.BrokenBroadcast{Union{}}()
 GPUArrays.BrokenBroadcast{Union{}}()
 GPUArrays.BrokenBroadcast{Union{}}()
 GPUArrays.BrokenBroadcast{Union{}}()
 GPUArrays.BrokenBroadcast{Union{}}()
 GPUArrays.BrokenBroadcast{Union{}}()
 GPUArrays.BrokenBroadcast{Union{}}()
 GPUArrays.BrokenBroadcast{Union{}}()

```
