gdx-vfx icon indicating copy to clipboard operation
gdx-vfx copied to clipboard

Crash on iOS

Open Snehks opened this issue 3 years ago • 8 comments

Hi, I am getting the following crash on iOS.

com.badlogic.gdx.utils.GdxRuntimeException: File not found: gdxvfx/shaders/screenspace.vert (Classpath)
 	at com.badlogic.gdx.files.FileHandle.read(FileHandle.java:142)
 	at com.badlogic.gdx.files.FileHandle.length(FileHandle.java:638)
 	at com.badlogic.gdx.files.FileHandle.estimateLength(FileHandle.java:239)
 	at com.badlogic.gdx.files.FileHandle.readString(FileHandle.java:204)
 	at com.badlogic.gdx.files.FileHandle.readString(FileHandle.java:197)
 	at com.crashinvaders.vfx.gl.VfxGLUtils.compileShader(VfxGLUtils.java:103)
 	at com.crashinvaders.vfx.gl.VfxGLUtils.compileShader(VfxGLUtils.java:79)
 	at com.crashinvaders.vfx.effects.LensFlareEffect.<init>(LensFlareEffect.java:61)

The project works fine on desktop and Android.

Snehks avatar Apr 27 '21 10:04 Snehks

Hi @Snehks, Thanks for the report. Sorry for the delay, but I do not actively maintain this project atm. I will check on the issue next week and hopefully prepare a new release for LibGDX 1.10.0

metaphore avatar Apr 29 '21 15:04 metaphore

Hi, I get this error too. Have you already found some time to look at this ? Thanks !

Laurent1967 avatar Sep 12 '21 21:09 Laurent1967

This issue is still there after the update to libGDX 1.10.0

Laurent1967 avatar Dec 28 '21 06:12 Laurent1967

Hi, sorry for not coming back to you earlier on this one. The problem was identified a while ago and still didn't get any resolution.

The issue here is with the specifics of MobiVM. iOS modules basically don't pick up the library's built in asset files (including those shader vert/frag ones).

While there's technically still no easy fix, one workaround would be to extract the library's assets and add them to iOS module manually. For that you'd need to

  1. Grab the entire gdx-vfx/effects/assets dir and place it to the root of your iOS submodule.
  2. In your robovm.xml file add a resource configuration entry like so
<config>
  ...
  <resources>
    <resource>
      <directory>assets</directory>
      <includes>
        <include>**</include>
      </includes>
      <skipPngCrush>true</skipPngCrush>
    </resource>
    ...
  </resources>

That should do the trick. Please let me know if you have any issues with that.

metaphore avatar Dec 30 '21 19:12 metaphore

Hi,

Many thanks for your answer !

I’ll try that ;-)

Happy new year !

Laurent

De : Anton Chekulaev @.> Envoyé : jeudi 30 décembre 2021 20:33 À : crashinvaders/gdx-vfx @.> Cc : Laurent Crenier @.>; Comment @.> Objet : Re: [crashinvaders/gdx-vfx] Crash on iOS (#16)

Hi, sorry for not coming back to you earlier on this one. The problem was identified a while ago and still didn't get any resolution.

The issue here is with the specifics of MobiVM. iOS modules basically don't pick up the library's built in asset files (including those shader vert/frag ones).

While there's technically still no easy fix, one workaround would be to extract the library's assets and add them to iOS module manually. For that you'd need to

  1. Grab the entire https://github.com/crashinvaders/gdx-vfx/tree/master/gdx-vfx/effects/assets gdx-vfx/effects/assets dir and place it to the root of your iOS submodule.
  2. In your robovm.xml file add a resource configuration entry like so
... assets ** true ...

That should do the trick. Please let me know if you have any issues with that.

— Reply to this email directly, view it on GitHub https://github.com/crashinvaders/gdx-vfx/issues/16#issuecomment-1003156513 , or unsubscribe https://github.com/notifications/unsubscribe-auth/AE7IH4FVARPIB7QQQCOK5CTUTSXYFANCNFSM43UXC52Q . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub . You are receiving this because you commented. https://github.com/notifications/beacon/AE7IH4H5BQMH6AUEWGB5Q5DUTSXYFA5CNFSM43UXC522YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOHPFPIII.gif Message ID: @.*** @.***> >

Laurent1967 avatar Dec 30 '21 20:12 Laurent1967

Hey @metaphore, thanks for providing an workaround.

If I understood this correctly, the vert/frag files are read using Gdx.files.classpath, for example here: https://github.com/crashinvaders/gdx-vfx/blob/3de10cf9004715d809ca1559ca2f915c602b2fbf/gdx-vfx/effects/src/com/crashinvaders/vfx/effects/util/CopyEffect.java#L33

I tested the workaround and I believe it doesn't work because when the FileHandle tries to read it, it loads from the classpath here.

Do you have any suggestions on alternatives? (maybe using Gdx.files.internal given it will try both the internal and classpath types?)

Cheers!

lucas-kakele avatar Jul 18 '22 20:07 lucas-kakele

Unfortunately, the MobiVM team hasn't provided any helpful insight as of yet and I don't really have any good workaround for the vfx-effects module.

The only thing that can be done now, is to grab the effects code, replace all the classpath file references with internal. That requires having all the vert and frag shader files to be manually added to your game's assets...

metaphore avatar Jul 18 '22 22:07 metaphore

Thanks!

I copied the code for the time being, replacing the references.

Note for future readers: you have to do it to iOS only. For Android, still use the classpath call. I didn't test for other platforms but I believe it is a good idea keep using classpath.

Cheers!

lucas-kakele avatar Jul 20 '22 20:07 lucas-kakele