Вопрос Рендер через RenderPass 1.21.8

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
7 Фев 2023
Сообщения
52
Реакции
1

Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:

  • бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
  • маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
  • приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
  • обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.

Спасибо!

Помогите, хочу сделать рендер систему для 1.21.8, уже всё перепробовал, копировал реализацию из GuiRenderer
но почему-то рект всё время либо не рендерит, либо рендерит в мире, пробывал ставить
ORTHOGRAPHIC матрицу проекции перед рендером, но так всё равно ничего не рендерит
Если кто-то уже делал на 1.21.8 рендер систему то поправьте мой код пожалуйста
Rectangle:
Expand Collapse Copy
package O57.jaypasha.core.main.newRender;

import O57.jaypasha.api.render.pipelines.PipelinesRepository;
import com.mojang.blaze3d.buffers.GpuBuffer;
import com.mojang.blaze3d.pipeline.RenderPipeline;
import com.mojang.blaze3d.systems.ProjectionType;
import com.mojang.blaze3d.systems.RenderPass;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.textures.GpuTextureView;
import com.mojang.blaze3d.vertex.VertexFormat;
import lombok.AccessLevel;
import lombok.experimental.FieldDefaults;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.*;
import net.minecraft.client.util.BufferAllocator;
import net.minecraft.client.util.Window;

import java.util.OptionalInt;

@FieldDefaults(level = AccessLevel.PRIVATE)
public final class Rectangle {
    GpuBuffer rectangleBuffer;

    final RenderPipeline renderPipeline;
    final float x, y, width, height;

    private final ProjectionMatrix2 rectProjectionMatrix = new ProjectionMatrix2("rect", 1000.0F, 11000.0F, true);

    public Rectangle(float x, float y, float width, float height) {
        this.renderPipeline = PipelinesRepository.RECTANGLE;
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;

        this.createBuffer();
    }

    private void createBuffer() {
        BufferAllocator allocator = BufferAllocator.method_72201(4 * VertexFormats.POSITION.getVertexSize());
        BufferBuilder builder = new BufferBuilder(allocator, VertexFormat.DrawMode.QUADS, VertexFormats.POSITION);

        try {
            createVertices(builder);
            BuiltBuffer built = builder.end();

            try {
                rectangleBuffer = RenderSystem.getDevice().createBuffer(() -> "Rectangle Buffer", 32, built.getBuffer());
            } finally {
                built.close();
            }

        } finally {
            allocator.close();
        }
    }


    private void createVertices(VertexConsumer vertexConsumer) {
        vertexConsumer.vertex(x, y + height, 0);
        vertexConsumer.vertex(x + width, y + height, 0);
        vertexConsumer.vertex(x + width, y, 0);
        vertexConsumer.vertex(x, y + height, 0);
    }

    public void render() {
        Window window = MinecraftClient.getInstance().getWindow();
        RenderSystem.setProjectionMatrix(this.rectProjectionMatrix.set(
                (float) window.getFramebufferWidth() / (float) window.getScaleFactor(),
                (float) window.getFramebufferHeight() / (float) window.getScaleFactor()), ProjectionType.ORTHOGRAPHIC);

        GpuTextureView target = MinecraftClient.getInstance().getFramebuffer().getColorAttachmentView();
        RenderSystem.ShapeIndexBuffer indexBuffer = RenderSystem.getSequentialBuffer(VertexFormat.DrawMode.QUADS);
        GpuBuffer gpuBuffer = indexBuffer.getIndexBuffer(4);

        RenderPass pass = RenderSystem.getDevice().createCommandEncoder().createRenderPass(() -> "rectpass",
                target, OptionalInt.empty());

        try {
            pass.setPipeline(this.renderPipeline);
            RenderSystem.bindDefaultUniforms(pass);
            pass.setVertexBuffer(0, this.rectangleBuffer);
            pass.setIndexBuffer(gpuBuffer, indexBuffer.getIndexType());
            pass.drawIndexed(0, 0, 4, 1);
        } finally {
            pass.close();
        }
    }
}
fsh shader:
Expand Collapse Copy
#version 150

out vec4 OutColor;

void main() {
    OutColor = vec4(1., .0, .0, 1.);
}
vsh shader:
Expand Collapse Copy
#version 150

in vec3 Position;

#moj_import <minecraft:dynamictransforms.glsl>
#moj_import <minecraft:projection.glsl>

void main() {
    gl_Position = ProjMat * ModelViewMat * vec4(Position, 1.0);
}
pipeline:
Expand Collapse Copy
    @ApiStatus.Internal
    public static final RenderPipeline RECTANGLE = RenderPipelines.register(RenderPipeline.builder(RenderPipelines.TRANSFORMS_AND_PROJECTION_SNIPPET)
            .withBlend(BlendFunction.TRANSLUCENT)
            .withVertexFormat(VertexFormats.POSITION, VertexFormat.DrawMode.QUADS)
            .withFragmentShader(Identifier.of("stondof", "core/rect"))
            .withVertexShader(Identifier.of("stondof", "core/rect"))
            .withLocation(Identifier.of("stondof", "pipeline/rect"))
            .build());
 
Помогите, хочу сделать рендер систему для 1.21.8, уже всё перепробовал, копировал реализацию из GuiRenderer
но почему-то рект всё время либо не рендерит, либо рендерит в мире, пробывал ставить
ORTHOGRAPHIC матрицу проекции перед рендером, но так всё равно ничего не рендерит
Если кто-то уже делал на 1.21.8 рендер систему то поправьте мой код пожалуйста
Rectangle:
Expand Collapse Copy
package O57.jaypasha.core.main.newRender;

import O57.jaypasha.api.render.pipelines.PipelinesRepository;
import com.mojang.blaze3d.buffers.GpuBuffer;
import com.mojang.blaze3d.pipeline.RenderPipeline;
import com.mojang.blaze3d.systems.ProjectionType;
import com.mojang.blaze3d.systems.RenderPass;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.textures.GpuTextureView;
import com.mojang.blaze3d.vertex.VertexFormat;
import lombok.AccessLevel;
import lombok.experimental.FieldDefaults;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.*;
import net.minecraft.client.util.BufferAllocator;
import net.minecraft.client.util.Window;

import java.util.OptionalInt;

@FieldDefaults(level = AccessLevel.PRIVATE)
public final class Rectangle {
    GpuBuffer rectangleBuffer;

    final RenderPipeline renderPipeline;
    final float x, y, width, height;

    private final ProjectionMatrix2 rectProjectionMatrix = new ProjectionMatrix2("rect", 1000.0F, 11000.0F, true);

    public Rectangle(float x, float y, float width, float height) {
        this.renderPipeline = PipelinesRepository.RECTANGLE;
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;

        this.createBuffer();
    }

    private void createBuffer() {
        BufferAllocator allocator = BufferAllocator.method_72201(4 * VertexFormats.POSITION.getVertexSize());
        BufferBuilder builder = new BufferBuilder(allocator, VertexFormat.DrawMode.QUADS, VertexFormats.POSITION);

        try {
            createVertices(builder);
            BuiltBuffer built = builder.end();

            try {
                rectangleBuffer = RenderSystem.getDevice().createBuffer(() -> "Rectangle Buffer", 32, built.getBuffer());
            } finally {
                built.close();
            }

        } finally {
            allocator.close();
        }
    }


    private void createVertices(VertexConsumer vertexConsumer) {
        vertexConsumer.vertex(x, y + height, 0);
        vertexConsumer.vertex(x + width, y + height, 0);
        vertexConsumer.vertex(x + width, y, 0);
        vertexConsumer.vertex(x, y + height, 0);
    }

    public void render() {
        Window window = MinecraftClient.getInstance().getWindow();
        RenderSystem.setProjectionMatrix(this.rectProjectionMatrix.set(
                (float) window.getFramebufferWidth() / (float) window.getScaleFactor(),
                (float) window.getFramebufferHeight() / (float) window.getScaleFactor()), ProjectionType.ORTHOGRAPHIC);

        GpuTextureView target = MinecraftClient.getInstance().getFramebuffer().getColorAttachmentView();
        RenderSystem.ShapeIndexBuffer indexBuffer = RenderSystem.getSequentialBuffer(VertexFormat.DrawMode.QUADS);
        GpuBuffer gpuBuffer = indexBuffer.getIndexBuffer(4);

        RenderPass pass = RenderSystem.getDevice().createCommandEncoder().createRenderPass(() -> "rectpass",
                target, OptionalInt.empty());

        try {
            pass.setPipeline(this.renderPipeline);
            RenderSystem.bindDefaultUniforms(pass);
            pass.setVertexBuffer(0, this.rectangleBuffer);
            pass.setIndexBuffer(gpuBuffer, indexBuffer.getIndexType());
            pass.drawIndexed(0, 0, 4, 1);
        } finally {
            pass.close();
        }
    }
}
fsh shader:
Expand Collapse Copy
#version 150

out vec4 OutColor;

void main() {
    OutColor = vec4(1., .0, .0, 1.);
}
vsh shader:
Expand Collapse Copy
#version 150

in vec3 Position;

#moj_import <minecraft:dynamictransforms.glsl>
#moj_import <minecraft:projection.glsl>

void main() {
    gl_Position = ProjMat * ModelViewMat * vec4(Position, 1.0);
}
pipeline:
Expand Collapse Copy
    @ApiStatus.Internal
    public static final RenderPipeline RECTANGLE = RenderPipelines.register(RenderPipeline.builder(RenderPipelines.TRANSFORMS_AND_PROJECTION_SNIPPET)
            .withBlend(BlendFunction.TRANSLUCENT)
            .withVertexFormat(VertexFormats.POSITION, VertexFormat.DrawMode.QUADS)
            .withFragmentShader(Identifier.of("stondof", "core/rect"))
            .withVertexShader(Identifier.of("stondof", "core/rect"))
            .withLocation(Identifier.of("stondof", "pipeline/rect"))
            .build());
1753968182474.png
ёмаё
 
1. Используй только ортографическую проекцию
2. у тебя неправильно строится квадрат, последняя вершина должна быть на x, y
 

Пожалуйста, зарегистрируйтесь или авторизуйтесь, чтобы увидеть содержимое.




1. Используй только ортографическую проекцию
2. у тебя неправильно строится квадрат, последняя вершина должна быть на x, y
Орографическая проекция и так стоит
Вертексы поменяло, но ничего не изменилось

Если сможешь реально помочь то пошли в дс, 200 рублей заплачу если получится

Rectangle:
Expand Collapse Copy
package O57.jaypasha.core.main.newRender;

import O57.jaypasha.api.render.pipelines.PipelinesRepository;
import com.mojang.blaze3d.buffers.GpuBuffer;
import com.mojang.blaze3d.pipeline.RenderPipeline;
import com.mojang.blaze3d.systems.ProjectionType;
import com.mojang.blaze3d.systems.RenderPass;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.textures.GpuTextureView;
import com.mojang.blaze3d.vertex.VertexFormat;
import lombok.AccessLevel;
import lombok.experimental.FieldDefaults;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.*;
import net.minecraft.client.util.BufferAllocator;
import net.minecraft.client.util.Window;

import java.util.OptionalInt;

@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true)
public final class Rectangle {

    RenderPipeline renderPipeline;
    float x, y, width, height;
    GpuBuffer rectangleBuffer;

    ProjectionMatrix2 rectProjectionMatrix = new ProjectionMatrix2("rect", 1000.0F, 11000.0F, true);

    public Rectangle(float x, float y, float width, float height) {
        this.renderPipeline = PipelinesRepository.RECTANGLE;

        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;

        this.rectangleBuffer = this.createBuffer();
    }

    private GpuBuffer createBuffer() {
        BufferAllocator allocator = BufferAllocator.method_72201(4 * VertexFormats.POSITION.getVertexSize());
        BufferBuilder builder = new BufferBuilder(allocator, VertexFormat.DrawMode.QUADS, VertexFormats.POSITION);

        try {
            createVertices(builder);
            BuiltBuffer built = builder.end();

            try {
                return RenderSystem.getDevice().createBuffer(() -> "Rectangle Buffer", 1, built.getBuffer());
            } finally {
                built.close();
            }

        } finally {
            allocator.close();
        }
    }


    private void createVertices(VertexConsumer vertexConsumer) {
        vertexConsumer.vertex(x, y + height, 0);
        vertexConsumer.vertex(x + width, y + height, 0);
        vertexConsumer.vertex(x + width, y, 0);
        vertexConsumer.vertex(x, y, 0);
    }

    public void render() {
        Window window = MinecraftClient.getInstance().getWindow();
        RenderSystem.setProjectionMatrix(this.rectProjectionMatrix.set(
                (float) window.getFramebufferWidth() / (float) window.getScaleFactor(),
                (float) window.getFramebufferHeight() / (float) window.getScaleFactor()), ProjectionType.ORTHOGRAPHIC);

        GpuTextureView target = MinecraftClient.getInstance().getFramebuffer().getColorAttachmentView();
        RenderSystem.ShapeIndexBuffer indexBuffer = RenderSystem.getSequentialBuffer(VertexFormat.DrawMode.QUADS);
        GpuBuffer gpuBuffer = indexBuffer.getIndexBuffer(4);

        RenderPass pass = RenderSystem.getDevice().createCommandEncoder().createRenderPass(() -> "rectpass",
                target, OptionalInt.empty());

        try {
            pass.setPipeline(this.renderPipeline);
            RenderSystem.bindDefaultUniforms(pass);
            pass.setVertexBuffer(0, this.rectangleBuffer);
            pass.setIndexBuffer(gpuBuffer, indexBuffer.getIndexType());
            pass.drawIndexed(0, 0, 4, 1);
        } finally {
            pass.close();
        }
    }
}
 
Последнее редактирование:
Назад
Сверху Снизу