Hi,
I am trying to replace the way to load textures resources from "url-file" to "inputstream" since I want it working even outside the IDE, with the dist/ jar.. But I get a null point exception and I am wondering if I am doing it properly or not Here I get the inputStream InputStream inputStream = NvImage.class.getResourceAsStream(filePath); and then I try to retrieve the textureData TextureData textureData = TextureIO.newTextureData(gl4.getGLProfile(), inputStream, false, TextureIO.DDS); But I get this exception Mai 04, 2015 10:56:46 AM nvGlSamples.bindlessApp.BindlessApp initBindlessTextures SCHWERWIEGEND: null java.io.EOFException at java.io.DataInputStream.readShort(DataInputStream.java:315) at com.jogamp.opengl.util.texture.spi.SGIImage.isSGIImage(SGIImage.java:206) at com.jogamp.opengl.util.texture.TextureIO$SGITextureProvider.newTextureData(TextureIO.java:1055) at com.jogamp.opengl.util.texture.TextureIO.newTextureDataImpl(TextureIO.java:834) at com.jogamp.opengl.util.texture.TextureIO.newTextureData(TextureIO.java:247) at nvGlSamples.util.NvImage.uploadTextureFromDDSFile(NvImage.java:40) at nvGlSamples.bindlessApp.BindlessApp.initBindlessTextures(BindlessApp.java:379) at nvGlSamples.bindlessApp.BindlessApp.initRendering(BindlessApp.java:195) at nvGlSamples.util.NvSampleApp.init(NvSampleApp.java:75) at jogamp.opengl.GLDrawableHelper.init(GLDrawableHelper.java:641) at jogamp.opengl.GLDrawableHelper.init(GLDrawableHelper.java:663) at jogamp.opengl.GLAutoDrawableBase$1.run(GLAutoDrawableBase.java:430) at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1275) at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:1131) at com.jogamp.newt.opengl.GLWindow.display(GLWindow.java:680) at jogamp.opengl.GLAutoDrawableBase.defaultWindowResizedOp(GLAutoDrawableBase.java:259) at com.jogamp.newt.opengl.GLWindow.access$200(GLWindow.java:119) at com.jogamp.newt.opengl.GLWindow$2.windowResized(GLWindow.java:141) at jogamp.newt.WindowImpl.consumeWindowEvent(WindowImpl.java:3682) at jogamp.newt.WindowImpl.sendWindowEvent(WindowImpl.java:3616) at jogamp.newt.WindowImpl.setVisibleActionImpl(WindowImpl.java:1003) at jogamp.newt.WindowImpl$VisibleAction.run(WindowImpl.java:1015) at com.jogamp.common.util.RunnableTask.run(RunnableTask.java:150) at jogamp.newt.DefaultEDTUtil$NEDT.run(DefaultEDTUtil.java:372) Looking at the place where it fails, it is in the TextureIO.SGITextureProvide: //---------------------------------------------------------------------- // SGI RGB image provider static class SGITextureProvider extends StreamBasedTextureProvider { @Override public TextureData newTextureData(final GLProfile glp, final InputStream stream, int internalFormat, int pixelFormat, final boolean mipmap, final String fileSuffix) throws IOException { if (SGI.equals(fileSuffix) || SGI_RGB.equals(fileSuffix) || SGIImage.isSGIImage(stream)) { final SGIImage image = SGIImage.read(stream); if (pixelFormat == 0) { pixelFormat = image.getFormat(); } if (internalFormat == 0) { internalFormat = image.getFormat(); } return new TextureData(glp, internalFormat, image.getWidth(), image.getHeight(), 0, pixelFormat, GL.GL_UNSIGNED_BYTE, mipmap, false, false, ByteBuffer.wrap(image.getData()), null); } return null; } } at the .isSGIImage: /** Determines from the magic number whether the given InputStream points to an SGI RGB image. The given InputStream must return true from markSupported() and support a minimum of two bytes of read-ahead. */ public static boolean isSGIImage(InputStream in) throws IOException { if (!(in instanceof BufferedInputStream)) { in = new BufferedInputStream(in); } if (!in.markSupported()) { throw new IOException("Can not test non-destructively whether given InputStream is an SGI RGB image"); } final DataInputStream dIn = new DataInputStream(in); dIn.mark(4); final short magic = dIn.readShort(); dIn.reset(); return (magic == MAGIC); } at the .dIn.readShort() Do you think it is a bug or I did some stupid mistake? |
For me at least the usual (99.99%) cases where I get EOFs like that is because the resource wasn't found on the classpath. Remember it's a classpath and not a file-path, for example "foo/baz.resource" is not a relative filepath to the current directory.
|
What do you mean? I am passing the String "filePath = (java.lang.String) "/nvGlSamples/bindlessApp/assets/textures/NV0.dds"" and it looks correct to me.. |
Administrator
|
You should use Class.getResource() or Class.getResourceAsStream() in order to determine whether you provide the right path to retrieve your file. It will return null if no resource is found.
Julien Gouesse | Personal blog | Website
|
Free forum by Nabble | Edit this page |