Cannot call glTexImage2D twice after minecraft initialization

0

I'm making some FabricMC mod with 1.16.4.
While Minecraft initialization, code works perfectly.
But if I join to server, or single player, code crash with EXCEPTION_ACCESS_VILOATION(0xc0000005).
ByteBuffer is flipped, and checked remaining byte is equals to picture size.
It works first time.
But if render method is called twice, Minecraft crashes.

Used Code :

       // Force-load
       ImageUtil.ImageBufferData bd = ImageUtil.toBuffer(VideoPanel.LOADING_CUTSCENE);
       ByteBuffer buffer = new CutSceneData.BufferData(bd.getBuffer(), bd.getWidth(), bd.getHeight());
       GL11.glClearColor(0f, 0f, 0f, 1f);
       GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
       RenderSystem.translatef(0.0F, 0.0F, -2000.0F);
       GlStateManager.pushMatrix();
       RenderSystem.enableTexture();
       RenderSystem.bindTexture(cutScene.getTextureID());
       RenderSystem.texParameter(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR_MIPMAP_LINEAR);
       RenderSystem.texParameter(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
       GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA8, (int) (buffer.getWidth()), (int) (buffer.getHeight()), 0, GL11.GL_RGBA, GL_UNSIGNED_BYTE, buffer.getBuffer().duplicate());
       GL30.glGenerateMipmap(GL11.GL_TEXTURE_2D);
       drawQuadFully();
       RenderSystem.popMatrix();
       RenderSystem.disableTexture();

Java dump:

Current thread (0x00000212074e4800):  JavaThread "Render thread" [_thread_in_native, id=38608, stack(0x000000d5a8000000,0x000000d5a8100000)]

Stack: [0x000000d5a8000000,0x000000d5a8100000],  sp=0x000000d5a80fca58,  free space=1010k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [nvoglv64.dll+0xc11760]

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
J 18048  org.lwjgl.opengl.GL11C.nglTexImage2D(IIIIIIIIJ)V (0 bytes) @ 0x00000212180d7e4c [0x00000212180d7dc0+0x000000000000008c]
j  org.lwjgl.opengl.GL11C.glTexImage2D(IIIIIIIILjava/nio/ByteBuffer;)V+17
j  org.lwjgl.opengl.GL11.glTexImage2D(IIIIIIIILjava/nio/ByteBuffer;)V+14
J 11250 c1 skywolf46.videopanel.renderer.CutSceneRenderer.renderToScreen()Z (215 bytes) @ 0x0000021210fb38e4 [0x0000021210faf880+0x0000000000004064]
J 11248 c1 net.minecraft.client.render.GameRenderer.render(FJZ)V (886 bytes) @ 0x0000021210f985f4 [0x0000021210f983e0+0x0000000000000214]
J 11125 c1 net.minecraft.client.MinecraftClient.render(Z)V (946 bytes) @ 0x0000021210f49aec [0x0000021210f459a0+0x000000000000414c]
j  net.minecraft.client.MinecraftClient.run()V+83
j  net.minecraft.client.main.Main.main([Ljava/lang/String;)V+1366

Additional Info

  • ByteBuffer remaining() returns width * height * 4.
  • Used lastest FabricMC of Minecraft 1.16.4.
  • Tried to draw something in screen.
java
lwjgl
minecraft
asked on Stack Overflow Dec 17, 2020 by Skywolf46

0 Answers

Nobody has answered this question yet.


User contributions licensed under CC BY-SA 3.0