Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

LibGDX on Raspberry Pi using JOGL - error on run

I'm trying to run a LibGDX desktop app (a simple app displaying an image and nothing else) on Raspberry Pi 2 using the JOGL backend (https://github.com/gouessej/libgdx/).

In the current libgdx version, JoglApplicationConfiguration is abstract and there are 2 child classes: JoglAwtApplicationConfiguration and JoglNewtApplicationConfiguration.

When I'm trying to use JoglAwtApplicationConfiguration to run it, I'm getting an error:

 [java] glGetError 0x500
 [java] glGetError 0x500
 [java] JoglApplication: Couldn't initialize audio, disabling audio
 [java] java.lang.ExceptionInInitializerError
 [java]     at com.badlogic.gdx.backends.jogamp.JoglApplicationBase.<init>(JoglApplicationBase.java:54)
 [java]     at com.badlogic.gdx.backends.jogamp.JoglNewtApplication.<init>(JoglNewtApplication.java:49)
 [java]     at com.mygdx.game.desktop.DesktopLauncher.main(DesktopLauncher.java:14)
 [java] Caused by: com.jogamp.openal.ALException: Error opening default OpenAL device
 [java]     at com.jogamp.openal.util.ALut.alutInit(ALut.java:69)
 [java]     at com.badlogic.gdx.backends.jogamp.audio.OpenALAudio.<clinit>(OpenALAudio.java:41)
 [java]     ... 3 more
 [java] AL lib: (EE) ALCplaybackOSS_open: Could not open /dev/dsp: Nie ma takiego pliku ani katalogu
 [java] glGetError 0x500
 [java] Exception in thread "main-Animator#00" com.jogamp.opengl.util.AnimatorBase$UncaughtAnimatorException: com.jogamp.opengl.GLException: Caught NoSuchFieldError: gl on thread main-Animator#00
 [java]     at com.jogamp.opengl.util.DefaultAnimatorImpl.display(DefaultAnimatorImpl.java:61)
 [java]     at com.jogamp.opengl.util.AnimatorBase.display(AnimatorBase.java:451)
 [java]     at com.jogamp.opengl.util.Animator$MainLoop.run(Animator.java:198)
 [java]     at java.lang.Thread.run(Thread.java:724)
 [java] Caused by: com.jogamp.opengl.GLException: Caught NoSuchFieldError: gl on thread main-Animator#00
 [java]     at com.jogamp.opengl.GLException.newGLException(GLException.java:76)
 [java]     at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1311)
 [java]     at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1131)
 [java]     at com.jogamp.newt.opengl.GLWindow.display(GLWindow.java:680)
 [java]     at com.jogamp.opengl.util.DefaultAnimatorImpl.display(DefaultAnimatorImpl.java:54)
 [java]     ... 3 more
 [java] Caused by: java.lang.NoSuchFieldError: gl
 [java]     at com.mygdx.game.MyGdxGame.render(MyGdxGame.java:21)
 [java]     at com.badlogic.gdx.backends.jogamp.JoglGraphicsBase.display(JoglGraphicsBase.java:164)
 [java]     at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:691)
 [java]     at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:673)
 [java]     at jogamp.opengl.GLAutoDrawableBase$2.run(GLAutoDrawableBase.java:442)
 [java]     at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1277)
 [java]     ... 6 more
 [java] EGLDisplayUtil.EGLDisplays: Shutdown (open: 1)
 [java] EGLDisplayUtil: Open EGL Display Connections: 1
 [java] EGLDisplayUtil: Open[0]: 0x1: EGLDisplayRef[0x1: refCnt 2]

While using JoglNewtApplicationConfiguration I get other error:

 [java] glGetError 0x500
 [java] glGetError 0x500
 [java] JoglApplication: Couldn't initialize audio, disabling audio
 [java] java.lang.ExceptionInInitializerError
 [java]     at com.badlogic.gdx.backends.jogamp.JoglApplicationBase.<init>(JoglApplicationBase.java:54)
 [java]     at com.badlogic.gdx.backends.jogamp.JoglAwtApplication.<init>(JoglAwtApplication.java:49)
 [java]     at com.mygdx.game.desktop.DesktopLauncher.main(DesktopLauncher.java:16)
 [java] Caused by: com.jogamp.openal.ALException: Error opening default OpenAL device
 [java]     at com.jogamp.openal.util.ALut.alutInit(ALut.java:69)
 [java]     at com.badlogic.gdx.bacAL lib: (EE) ALCplaybackOSS_open: Could not open /dev/dsp: Nie ma takiego pliku ani katalogu
 [java] kends.jogamp.audio.OpenALAudio.<clinit>(OpenALAudio.java:41)
 [java]     ... 3 more
 [java] Exception in thread "main" com.badlogic.gdx.utils.GdxRuntimeException: Creating window failed
 [java]     at com.badlogic.gdx.backends.jogamp.JoglAwtApplication.<init>(JoglAwtApplication.java:103)
 [java]     at com.mygdx.game.desktop.DesktopLauncher.main(DesktopLauncher.java:16)
 [java] Caused by: java.lang.reflect.InvocationTargetException
 [java]     at java.awt.EventQueue.invokeAndWait(EventQueue.java:1272)
 [java]     at java.awt.EventQueue.invokeAndWait(EventQueue.java:1247)
 [java]     at com.badlogic.gdx.backends.jogamp.JoglAwtApplication.<init>(JoglAwtApplication.java:101)
 [java]     ... 1 more
 [java] Caused by: java.lang.ClassCastException: com.jogamp.nativewindow.DefaultGraphicsConfiguration cannot be cast to com.jogamp.nativewindow.awt.AWTGraphicsConfiguration
 [java]     at com.jogamp.opengl.awt.GLCanvas.chooseGraphicsConfiguration(GLCanvas.java:1557)
 [java]     at com.jogamp.opengl.awt.GLCanvas.addNotify(GLCanvas.java:615)
 [java]     at java.awt.Container.addNotify(Container.java:2769)
 [java]     at java.awt.Window.addNotify(Window.java:770)
 [java]     at java.awt.Frame.addNotify(Frame.java:487)
 [java]     at java.awt.Window.pack(Window.java:807)
 [java]     at com.badlogic.gdx.backends.jogamp.JoglAwtApplication$1.run(JoglAwtApplication.java:63)
 [java]     at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:241)
 [java]     at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
 [java]     at java.awt.EventQueue.access$200(EventQueue.java:103)
 [java]     at java.awt.EventQueue$3.run(EventQueue.java:694)
 [java]     at java.awt.EventQueue$3.run(EventQueue.java:692)
 [java]     at java.security.AccessController.doPrivileged(Native Method)
 [java]     at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
 [java]     at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
 [java]     at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
 [java]     at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
 [java]     at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
 [java]     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
 [java]     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
 [java]     at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

Using both, the app builds fine but the error appears while I'm trying to run it. Can someone help me?

My app code (generated using libgdx generator):

package com.mygdx.game;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;

public class MyGdxGame extends ApplicationAdapter {
    SpriteBatch batch;
    Texture img;

    @Override
    public void create () {
        batch = new SpriteBatch();
        img = new Texture("badlogic.jpg");
    }

    @Override
    public void render () {
        Gdx.gl.glClearColor(1, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        batch.begin();
        batch.draw(img, 0, 0);
        batch.end();
    }
}

and the launcher class:

package com.mygdx.game.desktop;

import com.badlogic.gdx.backends.jogamp.*;
import com.mygdx.game.MyGdxGame;

public class DesktopLauncher {
    public static void main (String[] arg) {
        JoglNewtApplicationConfiguration config = new JoglNewtApplicationConfiguration();
        new JoglNewtApplication(new MyGdxGame(), config);
        // OR:
        //JoglAwtApplicationConfiguration config = new JoglAwtApplicationConfiguration();
        //new JoglAwtApplication(new MyGdxGame(), config);
    }
}
like image 219
user3626048 Avatar asked Feb 03 '26 19:02

user3626048


1 Answers

If OpenAL fail to initialize "AL lib: (EE) ALCplaybackOSS_open: Could not open /dev/dsp: No such file or directory" this originate from that the libopenal sound library, failed to find your raspberry pi soundcard then you have three options:

A) load the OSS linux kernel driver for the Pi's soundcard

sudo modprobe snd_pcm_oss

B) disable the OpenAL soft oss driver: edit /etc/openal/alsoft.conf and make sure that the drivers list contains -oss (it disables the OSS backend that tries to use the non existant dsp file)

C) The best solution would be if the OpenAL-soft project can detect that the OSS backend do not work and retry using its ALSA backend, however such a solution would require that someone collaborate and patch OpenAL-soft upstream to make OpenAl-soft work out of the box on the Raspberry Pi: http://kcat.strangesoft.net/openal.html

like image 113
xranby Avatar answered Feb 06 '26 13:02

xranby



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!