- 12
- 0
Когда я пытаюсь нарисовать текст при помощи
Я понимаю, что эта ошибка связана с OpenGL, потому что идет вызов функции OpenGL из потока в котором нет текущего контекста OpenGL. И, конечно,
после этого я в классе с своими эвентами
Если нужен код то вот он:
Тут все предельно легко, но вот как переключиться на главный поток, или использовать контекст с другого потока? Может ли вообще есть другой способ отрисовки текста поверх игры?
Если вы хотите взглянуть на лог то вот он, хотя он мало что покажет.
FontRenderer
и его метода drawString(...), в эвенте EntityJoinWorldEvent
или WorldEvent
, то вылетает ошибка: No OpenGL context found in the current thread.
Я понимаю, что эта ошибка связана с OpenGL, потому что идет вызов функции OpenGL из потока в котором нет текущего контекста OpenGL. И, конечно,
после этого я в классе с своими эвентами
MTEvents
добавил к аннотации @EventBusSubscriber(value = Side.CLIENT, modid = "mts")
. То есть по идее Forge должен регистрировать мои эвенты только на клиентской стороне майна, то есть на главном потоку ClientThread
, где соответственно есть контекст OpenGL для отрисовки. Но как я и ожидал это не сработало, хотя если использовать кастомный GuiCustom*
класс который наследуется от GuiScreen
и вызове showGuiScreen(...)
это работает. Но мне не нужен сам GuiScreen, мне нужно просто отрендерить текст поверх самой игры.Если нужен код то вот он:
Код:
@Mod.EventBusSubscriber(value = Side.CLIENT, modid = "mts")
public class MTEvents
{
@SubscribeEvent
public static void onJoinWorld(EntityJoinWorldEvent e)
{
World world = e.getWorld();
EntityPlayer player = Minecraft.getMinecraft().player;
FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer;
if(player != null && !world.isRemote)
{
fontRenderer.drawString("Day: " + MyModClass.dayElapsed + ", Time: " + (int) world.getWorldTime(), 10, 10, 145);
}
}
}
Тут все предельно легко, но вот как переключиться на главный поток, или использовать контекст с другого потока? Может ли вообще есть другой способ отрисовки текста поверх игры?
Если вы хотите взглянуть на лог то вот он, хотя он мало что покажет.
Код:
java.lang.RuntimeException: No OpenGL context found in the current thread.
at org.lwjgl.opengl.GLContext.getCapabilities(GLContext.java:124)
at org.lwjgl.opengl.GL11.glEnable(GL11.java:1012)
at net.minecraft.client.renderer.GlStateManager$BooleanState.setState(SourceFile:997)
at net.minecraft.client.renderer.GlStateManager$BooleanState.setEnabled(SourceFile:990)
at net.minecraft.client.renderer.GlStateManager.enableAlpha(SourceFile:90)
at net.minecraft.client.gui.FontRenderer.enableAlpha(FontRenderer.java:870)
at net.minecraft.client.gui.FontRenderer.drawString(FontRenderer.java:284)
at net.minecraft.client.gui.FontRenderer.drawString(FontRenderer.java:279)
at com.kenny.mts.MTEvents.onJoinWorld(MTEvents.java:30)
at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_8_MTEvents_onJoinWorld_EntityJoinWorldEvent.invoke(.dynamic)
at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:90)
at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:182)
at net.minecraft.world.WorldServer.loadEntities(WorldServer.java:1065)
at net.minecraft.world.chunk.Chunk.onLoad(Chunk.java:860)
at net.minecraftforge.common.chunkio.ChunkIOProvider.syncCallback(ChunkIOProvider.java:109)
at net.minecraftforge.common.chunkio.ChunkIOExecutor.syncChunkLoad(ChunkIOExecutor.java:94)
at net.minecraft.world.gen.ChunkProviderServer.loadChunk(ChunkProviderServer.java:118)
at net.minecraft.world.gen.ChunkProviderServer.loadChunk(ChunkProviderServer.java:89)
at net.minecraft.world.gen.ChunkProviderServer.provideChunk(ChunkProviderServer.java:135)
at net.minecraft.world.World.getChunkFromChunkCoords(World.java:310)
at net.minecraft.world.World.getChunkFromBlockCoords(World.java:305)
at net.minecraft.world.World.getBlockState(World.java:911)
at net.minecraft.world.WorldEntitySpawner.canCreatureTypeSpawnBody(WorldEntitySpawner.java:233)
at net.minecraft.entity.EntityLiving$SpawnPlacementType.canSpawnAt(EntityLiving.java:1463)
at net.minecraft.world.WorldEntitySpawner.canCreatureTypeSpawnAtLocation(WorldEntitySpawner.java:226)
at net.minecraft.world.WorldEntitySpawner.findChunksForSpawning(WorldEntitySpawner.java:135)
at net.minecraft.world.WorldServer.tick(WorldServer.java:203)
at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:756)
at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:668)
at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:185)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:526)
at java.lang.Thread.run(Unknown Source)