• Я зарабатываю 100 000 RUB / месяц на этом сайте!

    А знаешь как? Я всего-лишь публикую (создаю темы), а админ мне платит. Трачу деньги на мороженое, робуксы и сервера в Minecraft. А ещё на паль из Китая. 

    Хочешь так же? Пиши и узнавай условия: https://t.me/alex_redact
    Реклама: https://t.me/yougame_official

Вопрос Проблема с opengl в коде

  • Автор темы Автор темы Elzij
  • Дата начала Дата начала
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
19 Мар 2023
Сообщения
11
Реакции
0
Пытаюсь освоить опенгл по немногу( с помощью ии и просто форумов) и по итогу при запуске майна он крашится
вот код
Java:
Expand Collapse Copy
package bezd2rr.font.mixin.client;

import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.gui.screen.TitleScreen;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.text.Text;
import org.lwjgl.opengl.GL11;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(TitleScreen.class)
public abstract class TitleScreenMixin extends Screen {

    protected TitleScreenMixin(Text title) {
        super(title);
    }

    @Inject(method = "init", at = @At("TAIL"))
    private void addSimpleButton(CallbackInfo ci) {
        int x = this.width / 2 - 124;
        int y = this.height / 4 + 132 - 24;

        ButtonWidget myButton = ButtonWidget.builder(
                Text.literal("𝐀"),
                btn -> {
                    System.out.println("+");
                }
        ).dimensions(x, y, 20, 20).build();

        this.addDrawableChild(myButton);
    }

    @Inject(method = "render", at = @At("TAIL"))
    private void renderCircle(CallbackInfo ci) {
        GL11.glEnable(GL11.GL_STENCIL_TEST);
        RenderSystem.enableBlend();
        RenderSystem.defaultBlendFunc();
        RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f);

        GL11.glStencilFunc(GL11.GL_ALWAYS, 1, 0xFF);
        GL11.glStencilOp(GL11.GL_KEEP, GL11.GL_KEEP, GL11.GL_REPLACE);
        GL11.glStencilMask(0xFF);
        GL11.glClear(GL11.GL_STENCIL_BUFFER_BIT);

        float centerX = this.width / 2.0f;
        float centerY = this.height / 2.0f;
        float radius = 50.0f;
        int segments = 64;

        GL11.glBegin(GL11.GL_TRIANGLE_FAN);
        GL11.glVertex2f(centerX, centerY);
        for (int i = 0; i <= segments; i++) {
            float angle = (float) (2.0 * Math.PI * i / segments);
            float x = centerX + (float) Math.cos(angle) * radius;
            float y = centerY + (float) Math.sin(angle) * radius;
            GL11.glVertex2f(x, y);
        }
        GL11.glEnd();


        GL11.glStencilFunc(GL11.GL_EQUAL, 1, 0xFF);
        GL11.glStencilOp(GL11.GL_KEEP, GL11.GL_KEEP, GL11.GL_KEEP);
        GL11.glStencilMask(0x00);

        GL11.glBegin(GL11.GL_TRIANGLE_FAN);
        GL11.glVertex2f(centerX, centerY);
        for (int i = 0; i <= segments; i++) {
            float angle = (float) (2.0 * Math.PI * i / segments);
            float x = centerX + (float) Math.cos(angle) * radius;
            float y = centerY + (float) Math.sin(angle) * radius;
            GL11.glVertex2f(x, y);
        }
        GL11.glEnd();

        GL11.glDisable(GL11.GL_STENCIL_TEST);
        RenderSystem.disableBlend();
        RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f);
    }
}


вот краш

[01:31:54] [Render thread/INFO] (Minecraft) Created: 128x128x0 minecraft:textures/atlas/mob_effects.png-atlas
FATAL ERROR in native method: Thread[#3,Render thread,10,main]: No context is current or a function that is not available in the current context was called. The JVM will abort execution.
at org.lwjgl.opengl.GL11.glBegin(Native Method)
at net.minecraft.client.gui.screen.TitleScreen.handler$zjf000$custom-font$renderCircle(TitleScreen.java:557)
at net.minecraft.client.gui.screen.TitleScreen.render(TitleScreen.java:295)
at net.minecraft.client.gui.screen.Screen.renderWithTooltip(Screen.java:110)
at net.minecraft.client.render.GameRenderer.render(GameRenderer.java:945)
at net.minecraft.client.MinecraftClient.render(MinecraftClient.java:1219)
at net.minecraft.client.MinecraftClient.run(MinecraftClient.java:802)
at net.minecraft.client.main.Main.main(Main.java:250)
at java.lang.invoke.LambdaForm$DMH/0x00000190c0014000.invokeStaticInit(java.base@24.0.1/LambdaForm$DMH)
at java.lang.invoke.LambdaForm$MH/0x00000190c0003400.invokeExact_MT(java.base@24.0.1/LambdaForm$MH)
at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:480)
at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74)
at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23)
at java.lang.invoke.LambdaForm$DMH/0x00000190c0002c00.invokeStatic(java.base@24.0.1/LambdaForm$DMH)
at java.lang.invoke.LambdaForm$MH/0x00000190c0003400.invokeExact_MT(java.base@24.0.1/LambdaForm$MH)
at net.fabricmc.devlaunchinjector.Main.main(Main.java:86)
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Пытаюсь освоить опенгл по немногу( с помощью ии и просто форумов) и по итогу при запуске майна он крашится
вот код
Java:
Expand Collapse Copy
package bezd2rr.font.mixin.client;

import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.gui.screen.TitleScreen;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.text.Text;
import org.lwjgl.opengl.GL11;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(TitleScreen.class)
public abstract class TitleScreenMixin extends Screen {

    protected TitleScreenMixin(Text title) {
        super(title);
    }

    @Inject(method = "init", at = @At("TAIL"))
    private void addSimpleButton(CallbackInfo ci) {
        int x = this.width / 2 - 124;
        int y = this.height / 4 + 132 - 24;

        ButtonWidget myButton = ButtonWidget.builder(
                Text.literal("𝐀"),
                btn -> {
                    System.out.println("+");
                }
        ).dimensions(x, y, 20, 20).build();

        this.addDrawableChild(myButton);
    }

    @Inject(method = "render", at = @At("TAIL"))
    private void renderCircle(CallbackInfo ci) {
        GL11.glEnable(GL11.GL_STENCIL_TEST);
        RenderSystem.enableBlend();
        RenderSystem.defaultBlendFunc();
        RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f);

        GL11.glStencilFunc(GL11.GL_ALWAYS, 1, 0xFF);
        GL11.glStencilOp(GL11.GL_KEEP, GL11.GL_KEEP, GL11.GL_REPLACE);
        GL11.glStencilMask(0xFF);
        GL11.glClear(GL11.GL_STENCIL_BUFFER_BIT);

        float centerX = this.width / 2.0f;
        float centerY = this.height / 2.0f;
        float radius = 50.0f;
        int segments = 64;

        GL11.glBegin(GL11.GL_TRIANGLE_FAN);
        GL11.glVertex2f(centerX, centerY);
        for (int i = 0; i <= segments; i++) {
            float angle = (float) (2.0 * Math.PI * i / segments);
            float x = centerX + (float) Math.cos(angle) * radius;
            float y = centerY + (float) Math.sin(angle) * radius;
            GL11.glVertex2f(x, y);
        }
        GL11.glEnd();


        GL11.glStencilFunc(GL11.GL_EQUAL, 1, 0xFF);
        GL11.glStencilOp(GL11.GL_KEEP, GL11.GL_KEEP, GL11.GL_KEEP);
        GL11.glStencilMask(0x00);

        GL11.glBegin(GL11.GL_TRIANGLE_FAN);
        GL11.glVertex2f(centerX, centerY);
        for (int i = 0; i <= segments; i++) {
            float angle = (float) (2.0 * Math.PI * i / segments);
            float x = centerX + (float) Math.cos(angle) * radius;
            float y = centerY + (float) Math.sin(angle) * radius;
            GL11.glVertex2f(x, y);
        }
        GL11.glEnd();

        GL11.glDisable(GL11.GL_STENCIL_TEST);
        RenderSystem.disableBlend();
        RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f);
    }
}


вот краш

[01:31:54] [Render thread/INFO] (Minecraft) Created: 128x128x0 minecraft:textures/atlas/mob_effects.png-atlas
FATAL ERROR in native method: Thread[#3,Render thread,10,main]: No context is current or a function that is not available in the current context was called. The JVM will abort execution.
at org.lwjgl.opengl.GL11.glBegin(Native Method)
at net.minecraft.client.gui.screen.TitleScreen.handler$zjf000$custom-font$renderCircle(TitleScreen.java:557)
at net.minecraft.client.gui.screen.TitleScreen.render(TitleScreen.java:295)
at net.minecraft.client.gui.screen.Screen.renderWithTooltip(Screen.java:110)
at net.minecraft.client.render.GameRenderer.render(GameRenderer.java:945)
at net.minecraft.client.MinecraftClient.render(MinecraftClient.java:1219)
at net.minecraft.client.MinecraftClient.run(MinecraftClient.java:802)
at net.minecraft.client.main.Main.main(Main.java:250)
at java.lang.invoke.LambdaForm$DMH/0x00000190c0014000.invokeStaticInit(java.base@24.0.1/LambdaForm$DMH)
at java.lang.invoke.LambdaForm$MH/0x00000190c0003400.invokeExact_MT(java.base@24.0.1/LambdaForm$MH)
at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:480)
at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74)
at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23)
at java.lang.invoke.LambdaForm$DMH/0x00000190c0002c00.invokeStatic(java.base@24.0.1/LambdaForm$DMH)
at java.lang.invoke.LambdaForm$MH/0x00000190c0003400.invokeExact_MT(java.base@24.0.1/LambdaForm$MH)
at net.fabricmc.devlaunchinjector.Main.main(Main.java:86)
Замени это "𝐀"
 
вместо gl11 Юзай RenderSystem
У тебя рендер вызывается в момент загрузки текстур без контекста рендера типо а если юзать RenderSystem то оно автоматически проверяет хз поможет ли тебе мне всегда это помогало
 
Последнее редактирование:
вместо gl11 Юзай RenderSystem
У тебя рендер вызывается в момент загрузки текстур без контекста рендера типо а если юзать RenderSystem то оно автоматически проверяет хз поможет ли тебе мне всегда это помогало
итак попробывал и вот что вышло

Java:
Expand Collapse Copy
package bezd2rr.font.mixin.client;

import net.minecraft.client.gui.screen.TitleScreen;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.text.Text;
import net.minecraft.client.render.*;

import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import com.mojang.blaze3d.systems.RenderSystem;

@Mixin(TitleScreen.class)
public abstract class TitleScreenMixin extends Screen {
    private boolean showCircle = false;

    protected TitleScreenMixin(Text title) {
        super(title);
    }

    @Inject(method = "init", at = @At("TAIL"))
    private void addSimpleButton(CallbackInfo ci) {
        int x = this.width / 2 - 124;
        int y = this.height / 4 + 132 - 24;

        ButtonWidget myButton = ButtonWidget.builder(
                Text.literal("𝐀"),
                btn -> {
                    showCircle = !showCircle;
                    System.out.println("Кнопка нажата! Показывать круг: " + showCircle);
                }
        ).dimensions(x, y, 20, 20).build();

        this.addDrawableChild(myButton);
    }

    @Inject(method = "render", at = @At("TAIL"))
    private void renderCircle(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) {
        if (showCircle) {
            RenderSystem.enableBlend();
            RenderSystem.defaultBlendFunc();
            RenderSystem.disableDepthTest();

            RenderSystem.setShader(GameRenderer::getPositionColorProgram);
            RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);

            int centerX = this.width / 2;
            int centerY = this.height / 2;
            int radius = 100;
            int segments = 64;

            Tessellator tessellator = Tessellator.getInstance();
            BufferBuilder buffer = tessellator.getBuffer();

            buffer.begin(VertexFormat.DrawMode.TRIANGLE_FAN, VertexFormats.POSITION_COLOR);


            buffer.vertex(
                    context.getMatrices().peek().getPositionMatrix(),
                    centerX, centerY, 0
            ).color(1.0F, 0.0F, 0.0F, 0.8F).next(); // red

            // Точки окружности
            for (int i = 0; i <= segments; i++) {
                double angle = 2 * Math.PI * i / segments;
                double x = centerX + radius * Math.cos(angle);
                double y = centerY + radius * Math.sin(angle);
                buffer.vertex(
                        context.getMatrices().peek().getPositionMatrix(),
                        (float) x, (float) y, 0
                ).color(1.0F, 0.0F, 0.0F, 0.5F).next();
            }

            tessellator.draw();
            RenderSystem.enableDepthTest();
            RenderSystem.disableBlend();
        }
    }
}


по итогу круга вообще нету(
 
что можно сделать что бы все работало?
 
что можно сделать что бы все работало?
попробуй добавить в начале кода ну до строки RenderSystem.enableBlend строку context.getMatrices().push(); и в конце кода перед RenderSystem.disableBlend();
напиш context.getMatrices().pop();
 
Пытаюсь освоить опенгл по немногу( с помощью ии и просто форумов) и по итогу при запуске майна он крашится
вот код
Java:
Expand Collapse Copy
package bezd2rr.font.mixin.client;

import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.gui.screen.TitleScreen;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.text.Text;
import org.lwjgl.opengl.GL11;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(TitleScreen.class)
public abstract class TitleScreenMixin extends Screen {

    protected TitleScreenMixin(Text title) {
        super(title);
    }

    @Inject(method = "init", at = @At("TAIL"))
    private void addSimpleButton(CallbackInfo ci) {
        int x = this.width / 2 - 124;
        int y = this.height / 4 + 132 - 24;

        ButtonWidget myButton = ButtonWidget.builder(
                Text.literal("𝐀"),
                btn -> {
                    System.out.println("+");
                }
        ).dimensions(x, y, 20, 20).build();

        this.addDrawableChild(myButton);
    }

    @Inject(method = "render", at = @At("TAIL"))
    private void renderCircle(CallbackInfo ci) {
        GL11.glEnable(GL11.GL_STENCIL_TEST);
        RenderSystem.enableBlend();
        RenderSystem.defaultBlendFunc();
        RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f);

        GL11.glStencilFunc(GL11.GL_ALWAYS, 1, 0xFF);
        GL11.glStencilOp(GL11.GL_KEEP, GL11.GL_KEEP, GL11.GL_REPLACE);
        GL11.glStencilMask(0xFF);
        GL11.glClear(GL11.GL_STENCIL_BUFFER_BIT);

        float centerX = this.width / 2.0f;
        float centerY = this.height / 2.0f;
        float radius = 50.0f;
        int segments = 64;

        GL11.glBegin(GL11.GL_TRIANGLE_FAN);
        GL11.glVertex2f(centerX, centerY);
        for (int i = 0; i <= segments; i++) {
            float angle = (float) (2.0 * Math.PI * i / segments);
            float x = centerX + (float) Math.cos(angle) * radius;
            float y = centerY + (float) Math.sin(angle) * radius;
            GL11.glVertex2f(x, y);
        }
        GL11.glEnd();


        GL11.glStencilFunc(GL11.GL_EQUAL, 1, 0xFF);
        GL11.glStencilOp(GL11.GL_KEEP, GL11.GL_KEEP, GL11.GL_KEEP);
        GL11.glStencilMask(0x00);

        GL11.glBegin(GL11.GL_TRIANGLE_FAN);
        GL11.glVertex2f(centerX, centerY);
        for (int i = 0; i <= segments; i++) {
            float angle = (float) (2.0 * Math.PI * i / segments);
            float x = centerX + (float) Math.cos(angle) * radius;
            float y = centerY + (float) Math.sin(angle) * radius;
            GL11.glVertex2f(x, y);
        }
        GL11.glEnd();

        GL11.glDisable(GL11.GL_STENCIL_TEST);
        RenderSystem.disableBlend();
        RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f);
    }
}


вот краш

[01:31:54] [Render thread/INFO] (Minecraft) Created: 128x128x0 minecraft:textures/atlas/mob_effects.png-atlas
FATAL ERROR in native method: Thread[#3,Render thread,10,main]: No context is current or a function that is not available in the current context was called. The JVM will abort execution.
at org.lwjgl.opengl.GL11.glBegin(Native Method)
at net.minecraft.client.gui.screen.TitleScreen.handler$zjf000$custom-font$renderCircle(TitleScreen.java:557)
at net.minecraft.client.gui.screen.TitleScreen.render(TitleScreen.java:295)
at net.minecraft.client.gui.screen.Screen.renderWithTooltip(Screen.java:110)
at net.minecraft.client.render.GameRenderer.render(GameRenderer.java:945)
at net.minecraft.client.MinecraftClient.render(MinecraftClient.java:1219)
at net.minecraft.client.MinecraftClient.run(MinecraftClient.java:802)
at net.minecraft.client.main.Main.main(Main.java:250)
at java.lang.invoke.LambdaForm$DMH/0x00000190c0014000.invokeStaticInit(java.base@24.0.1/LambdaForm$DMH)
at java.lang.invoke.LambdaForm$MH/0x00000190c0003400.invokeExact_MT(java.base@24.0.1/LambdaForm$MH)
at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:480)
at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74)
at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23)
at java.lang.invoke.LambdaForm$DMH/0x00000190c0002c00.invokeStatic(java.base@24.0.1/LambdaForm$DMH)
at java.lang.invoke.LambdaForm$MH/0x00000190c0003400.invokeExact_MT(java.base@24.0.1/LambdaForm$MH)
at net.fabricmc.devlaunchinjector.Main.main(Main.java:86)
на новых версиях (на сколько помню 1.19+) нельзя напрямую использовать методы GL, они были заменены RenderSystem. Также вместо vertex2d или vertex3d надо использовать BufferBuilder
 
на новых версиях (на сколько помню 1.19+) нельзя напрямую использовать методы GL, они были заменены RenderSystem. Также вместо vertex2d или vertex3d надо использовать BufferBuilder
я ему про это же и писал
 
Java:
Expand Collapse Copy
RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc();
RenderSystem.disableCull();
RenderSystem.setShader(ShaderProgramKeys.POSITION_COLOR);
BufferBuilder builder = Tessellator.getInstance().begin(VertexFormat.DrawMode.TRIANGLE_STRIP, VertexFormats.POSITION_COLOR);
builder.vertex(0, 0, 0).color(-1);
builder.vertex(0, 100, 0).color(-1);
builder.vertex(100, 100, 0).color(-1);
BuiltBuffer buffer = builder.endNullable();
if (buffer != null)
    BufferRenderer.drawWithGlobalProgram(buffer);
 
Java:
Expand Collapse Copy
RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc();
RenderSystem.disableCull();
RenderSystem.setShader(ShaderProgramKeys.POSITION_COLOR);
BufferBuilder builder = Tessellator.getInstance().begin(VertexFormat.DrawMode.TRIANGLE_STRIP, VertexFormats.POSITION_COLOR);
builder.vertex(0, 0, 0).color(-1);
builder.vertex(0, 100, 0).color(-1);
builder.vertex(100, 100, 0).color(-1);
BuiltBuffer buffer = builder.endNullable();
if (buffer != null)
    BufferRenderer.drawWithGlobalProgram(buffer);
помогло
спасибо большое

еще вопрос
что бы рендерить прям идеально красивые гуишки всякие лучше шейдер писать или как?
 
помогло
спасибо большое

еще вопрос
что бы рендерить прям идеально красивые гуишки всякие лучше шейдер писать или как?
да, в основном все что ты видишь на экране (гуи, худ и т.д.) это шейдера
даже блоки в мире это шейдера
 
Назад
Сверху Снизу