How can I call STBImage.stbi_load_from_memory correctly? (SIGSEGV)

Started by aaron.santos, May 08, 2016, 04:42:46

Previous topic - Next topic


Hi, I'm using LWJGL 3.0.0 SNAPSHOT build 79 on Ubuntu 15.10 and having an issue with STBImage.stbi_load_from_memory.

The error I get is

# A fatal error has been detected by the Java Runtime Environment:
#  SIGSEGV (0xb) at pc=0x00007fb305d6edeb, pid=1506, tid=140406906939136
# JRE version: Java(TM) SE Runtime Environment (8.0_25-b17) (build 1.8.0_25-b17)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.25-b02 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C  []

The stack trace is
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  org.lwjgl.stb.STBImage.nstbi_load_from_memory(JIJJJI)J+0
j  org.lwjgl.stb.STBImage.stbi_load_from_memory(Ljava/nio/ByteBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;I)Ljava/nio/ByteBuffer;+43
j  zaffre.imageutil$load_image.invoke(Ljava/lang/Object;)Ljava/lang/Object;+81

where  zaffre.imageutil$load_image blah blah is my code.

The buffer argument looks like this when I print it

#object[java.nio.HeapByteBuffer 0xa1c50d5 "java.nio.HeapByteBuffer[pos=0 lim=378 cap=378]"]

I'm loading a png from disk that's 378 bytes so I can't find fault in that.

The x, y, and c arguments are IntBuffers created with
just like

I know Clojure is a bit obscure but my routine looks like this I can convert the section into Java if needed.


LWJGL does not support heap ByteBuffers, you must load the file contents into a direct ByteBuffer. IOUtils has methods that help with that afaik.

Even more efficient would be to use a MappedByteBuffer (see, which avoids a copy. Instead of disk -> memory -> stb_image, you get disk -> stb_image.