Jump to content

Recommended Posts

Posted (edited)

I have an 3-d-Array of IblockStates and using renderBlock to rendem them. (this works fine)

BlockRendererDispatcher.renderBlock(IBlockState state, BlockPos pos, IBlockAccess blockAccess, VertexBuffer worldRendererIn)

Everything is correctly in the VertexBuffer I give to this methode and I can render this VertexBuffer using draw. (This is the code inside the Tesselator.draw() methode)

WorldVertexBufferUploader.draw(VertexBuffer vertexBufferIn)

But calling everytime renderBlock is slow and the blocks and the data doesnt change so I try to keep the data inside the VertexBuffer and just render them again, but now the issue happens.

 

The VertexData is stored inside a ByteBuffer you can get them via getByteBuffer() inside VertexData. VertexData also has the methode addVertexData(int[] vertexData), to add alot of data in one go. With some Buffer magic I convert the ByteBuffer to a IntBuffer and add the data to a new VertexBuffer (the one that is currently inuse from the Tesselator). But somehow the face and vertex amount is correct but nothing is rendered. But rendering the "old" VertexBuffer works. Has anybody any advise were a possible bug is?

 

 

Conversation Code:

private static final WorldVertexBufferUploader vboUploader = new WorldVertexBufferUploader();

private static void rotateStaticData(VertexBuffer target, VertexBuffer data, float[] rotation, float[] translation)
	{	
		if(target.getVertexFormat() != data.getVertexFormat())
		{
			return; //this should not happen!
		}
		
		float[] rot = new float[6];
		rot[0] = (float) Math.sin(rotation[0]);
		rot[1] = (float) Math.sin(rotation[1]);
		rot[2] = (float) Math.sin(rotation[2]);
		
		rot[3] = (float) Math.cos(rotation[0]);
		rot[4] = (float) Math.cos(rotation[1]);
		rot[5] = (float) Math.cos(rotation[2]);
				
		if(data.getVertexFormat() == DefaultVertexFormats.BLOCK)
		{
			
			//vboUploader.draw(data);
			VertexFormat format = data.getVertexFormat();
			
			ByteBuffer read = data.getByteBuffer().asReadOnlyBuffer();
			read.position(0);
			ByteBuffer write = ByteBuffer.allocate(data.getVertexCount() * format.getNextOffset());
			
			
			//target.setTranslation(translation[0], translation[1], translation[2]);
			
			IntBuffer intBuf = write.asIntBuffer();
			intBuf.position(0);
			int[] vertexData = new int[intBuf.limit()];
			intBuf.get(vertexData);
						
			target.addVertexData(vertexData);//TODO: this still is not rendering
			
			//vboUploader.draw(data); is this is used in renders Correctly
			
			return;
		}
	}

 

Edited by MCenderdragon

catch(Exception e)

{

 

}

Yay, Pokémon exception handling, gotta catch 'em all (and then do nothing with 'em).

Posted

 

Quote

face and vertex amount

well lets asume this statement is wrong, what else is importent and inside the VertexBuffer ?

 

Also is their anyother way to "bake" a custom block construction an render them? Also I need to translate and rotate them but if the rendering is working this is not so hard to achieve.

catch(Exception e)

{

 

}

Yay, Pokémon exception handling, gotta catch 'em all (and then do nothing with 'em).

Posted

Also I noticed the FastTESR starts and stops the Tesselator from the renderTileEntityAT even if I tell the block to be have an AnimatedModel, dosnt all FastTESR should render at once?

catch(Exception e)

{

 

}

Yay, Pokémon exception handling, gotta catch 'em all (and then do nothing with 'em).

Posted
16 hours ago, diesieben07 said:

Yes, it does, for legacy purposes. Normally renderTileEntityAt is not called for a FastTESR.

Ahh okay, I will try to check the bytes before and after again, maybe only some bytes are wrong but still result in no gl error.

catch(Exception e)

{

 

}

Yay, Pokémon exception handling, gotta catch 'em all (and then do nothing with 'em).

Posted

Ok I fixed it, too things too note here for the others:

1.) at conversation to the IntBuffer somehow the bytes got twisted so everything was wrong, i fixed this by accessing the vertexCount and the byteBuffer field or the VertexBuffer via reflection

2.) to propeply read/write and edit the data inside the buffer you need to use ByteOrder.LITTLE_ENDIAN, but too let it work while rendering it has to be ByteOrder.BIG_ENDIAN, so just changed this to little befor editing and back to big to let it render.

catch(Exception e)

{

 

}

Yay, Pokémon exception handling, gotta catch 'em all (and then do nothing with 'em).

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • I wanted to make a horror CurseForge modpack, but my game crashed when I try to play it! Does anyone know what to do? I've looked at other forums with the same problem, but I didn't understand what the replies were talking about. I also checked the log, did everything it said, but still, it didn't work. I am playing on 1.20.1 Forge. This is my first time using Forge. I've also made another Forge modpack test, but that didn't work, and I tried it with a NeoForge modpack test, too, but that didn't work either. Fabric works fine, though. Please help. # # A fatal error has been detected by the Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ffb0c676280, pid=30812, tid=27596 # # JRE version: OpenJDK Runtime Environment Microsoft-8035246 (17.0.8+7) (build 17.0.8+7-LTS) # Java VM: OpenJDK 64-Bit Server VM Microsoft-8035246 (17.0.8+7-LTS, mixed mode, tiered, compressed oops, compressed class ptrs, g1 gc, windows-amd64) # Problematic frame: # C [atio6axx.dll+0x196280] # # No core dump will be written. Minidumps are not enabled by default on client versions of Windows # # If you would like to submit a bug report, please visit: # https://aka.ms/minecraftjavacrashes # The crash happened outside the Java Virtual Machine in native code. # See problematic frame for where to report the bug. # Remember: 1. I am using CurseForge 2. I am on 1.20.1 3. I am on Forge 4. Tried the log methods   If you have any details I need to show, please tell me.
    • Server has been running fine until a restart today, at which point it crashes partway through load. I've tried swapping out the modpack to a fresh server and it boots fine, but if I bring in the world file it causes the crash so I'm guessing something is wrong in there but I have no idea how to read and understand these logs, so any advice on what to do next would be helpful, thanks! Here's the log: https://api.mclo.gs/1/raw/jYzFXVR
    • And without betterfortresses?
    • as I understand it, it helped, but a strange error happened again- https://pastes.io/minecraft-crash-6 The game crashed: feature placement Error: java.lang.IllegalArgumentException: Cannot set property DirectionProperty{name=facing, clazz=class net.minecraft.core.Direction, values=[north, south, west, east]} to down on Block{minecraft:dark_oak_button}, it is not an allowed value
  • Topics

  • Who's Online (See full list)

    • There are no registered users currently online
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.