Reputation: 94
Config in build.properties
minecraft_version=1.18.2
yarn_mappings=1.18.2+build.3
loader_version=0.13.3
fabric_version=0.51.1+1.18.2
Development environment:
SkyRenderer code
@Environment(EnvType.CLIENT)
public class OverworldSkyRenderer implements DimensionRenderingRegistry.SkyRenderer {
@Override
public void render(WorldRenderContext context) {
RenderSystem.disableTexture();
RenderSystem.enableDepthTest();
RenderSystem.depthFunc(515);
RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc();
RenderSystem.depthMask(false);
Tessellator tessellator = Tessellator.getInstance();
BufferBuilder bufferBuilder = tessellator.getBuffer();
RenderSystem.setShader(GameRenderer::getPositionColorShader);
bufferBuilder.begin(VertexFormat.DrawMode.LINES, VertexFormats.POSITION_COLOR);
bufferBuilder.vertex(0f,0f,0f).color(255,255,255,255).next();
bufferBuilder.vertex(3f,3f,3f).color(255,255,255,255).next();
tessellator.draw();
RenderSystem.enableCull();
RenderSystem.depthMask(true);
RenderSystem.disableBlend();
RenderSystem.defaultBlendFunc();
RenderSystem.enableTexture();
}
}
And Mod initialization code
public class MainMod implements ModInitializer {
@Override
public void onInitialize() {
// Register sky renderer
DimensionRenderingRegistry.registerSkyRenderer(
RegistryKey.of(Registry.WORLD_KEY, new Identifier("overworld")),
new OverworldSkyRenderer()
);
DimensionRenderingRegistry.registerDimensionEffects(
new Identifier("overworld"),
new DimensionEffects.End()
);
}
}
But it did not work, at least I did not find any line in my view(F5
has been used).
I consulted some code of fabric-carpet
There are some difference, but I think these are not the key point
Package import
In carpet, it includes com.mojang.blaze3d.vertex
, but I cannot find this package in my IDEA. And when I cloned carpet and built it, import com.mojang.blaze3d.vertex.*;
was removed, and endVertex()
was changed to next()
.
begin()
function
In carpet, it uses DEBUG_LINES
and I used LINES
, I think they should have no difference in rendering. And I tried DEBUG_LINES
later, still no line.
Here are some of my assumptions:
If anyone can help me?
Upvotes: 2
Views: 3384
Reputation: 94
My solution is using VertexFormat.Mode.DEBUG_LINES
Here I found an issue related to this question, although it is Forge, not Fabric.
In this issue, it found that LINES
, LINE_STRIP
cannot be rendered for that they do not pass correct mode argument when invoking glDrawElements
, so it cannot be rendered correctly. And DEBUG_LINES
and DEBUG_LINE_STRIP
have correct mode.
Before I found this issue, I tried some code in ChunkBoarderDebugRenderer
, which uses VertexFormat.Mode.DEBUG_LINE_STRIP
, and it did work!
So what I did was changing:
bufferBuilder.begin(VertexFormat.DrawMode.LINES, VertexFormats.POSITION_COLOR);
to
bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION_COLOR);
And the vertex of second point(Camera looks at Z-negative, which means you can only see the point with negative z. I am noob for opengl T_T)
So here is my changed code
@Environment(EnvType.CLIENT)
public class OverworldSkyRenderer implements DimensionRenderingRegistry.SkyRenderer {
@Override
public void render(WorldRenderContext context) {
// ...
RenderSystem.setShader(GameRenderer::getPositionColorShader);
bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION_COLOR);
bufferBuilder.vertex(1f,0f,-3f).color(255,0,0,255).next();
bufferBuilder.vertex(1f,3f,-3f).color(255,0,0,255).next();
tessellator.draw();
// ...
}
}
And the screenshot
However, TRIANGLE
cannot work, although it has correct mode value. I am trying to figure it out.
Upvotes: 1