【问题标题】:Java LWJGL - Function is not supported error when trying to render GUIJava LWJGL - 尝试呈现 GUI 时不支持函数错误
【发布时间】:2015-02-28 12:26:48
【问题描述】:

我正在尝试通过 3D 游戏将简单的 GUI 元素渲染到我的屏幕上。当我运行我的程序时,我得到一个 IllegalStateException 说函数不受支持。它在drawRect方法的GUI类中抛出:

package renderEngine;

import org.lwjgl.opengl.GL11;

public class GUI {
public float getRedFromHex(int color) {
    return (float)(color >> 16 & 0xFF) / 255F;
}
public float getGreenFromHex(int color) {
    return (float)(color >> 8 & 0xFF) / 255F;
}
public float getBlueFromHex(int color) {
    return (float)(color & 0xFF) / 255F;
}
public float getAlphaFromHex(int color) {
    return (float)(color >> 24 & 0xFF) / 255F;
}

public void drawRect(float x, float y, float width, float height, int color) {
    float r = this.getRedFromHex(color);
    float g = this.getGreenFromHex(color);
    float b = this.getBlueFromHex(color);
    float a = this.getAlphaFromHex(color);

    GL11.glEnable(GL11.GL_BLEND);
    GL11.glDisable(GL11.GL_TEXTURE_2D);

    GL11.glColor4f(r, g, b, a);
    GL11.glBegin(GL11.GL_QUADS);
        GL11.glVertex2f(x, y);
        GL11.glVertex2f(x + width, y);
        GL11.glVertex2f(x + width, y + height);
        GL11.glVertex2f(x, y + height);
    GL11.glEnd();

    GL11.glDisable(GL11.GL_BLEND);
    GL11.glEnable(GL11.GL_TEXTURE_2D);
}
}

我正在我的渲染类中调用该方法:

private GUI gui = new GUI();

public void render(Light sun, Camera camera) {
    prepare();
    shader.start();
    shader.loadSkyColour(RED,GREEN,BLUE);
    shader.loadLight(sun);
    shader.loadViewMatrix(camera);
    renderer.render(entities);
    shader.stop();
    terrainShader.start();
    terrainShader.loadLight(sun);
    terrainShader.loadViewMatrix(camera);
    terrainShader.loadSkyColour(RED,GREEN,BLUE);
    terrainRenderer.render(terrains);
    terrainShader.stop();
    gui.drawRect(100, 100, 300, 300, 0x00000000);
    terrains.clear();
    entities.clear();
}

我做错了什么?

编辑:

这是堆栈跟踪:P

Exception in thread "main" java.lang.IllegalStateException: Function is not supported
at org.lwjgl.BufferChecks.checkFunctionAddress(BufferChecks.java:58)
at org.lwjgl.opengl.GL11.glColor4f(GL11.java:893)
at renderEngine.GUI.drawRect(GUI.java:28)
at renderEngine.MasterRenderer.render(MasterRenderer.java:85)
at engineTester.MainGameLoop.main(MainGameLoop.java:147)

【问题讨论】:

  • 抱歉昨晚来晚了,请查看 EDIT :)
  • 我假设你的 GL 版本是 3.2+ 核心配置文件,对吧?
  • 我相信是的@SriHarshaChilakapati
  • 你们谁来帮我?我在堆栈跟踪中添加了@VinceEmigh
  • @KyleJensen 您检查以确保您的 GL 版本是最新的吗?相信是不够的

标签: java user-interface render lwjgl illegalstateexception


【解决方案1】:

自 3.0 版以来,Opengl 引入了弃用模型,glVertex、glColor、glTexCoord 等函数已被弃用。

这些已弃用的函数已在核心配置文件中删除,它们不再存在,因此您会遇到该异常。

您需要做的是阅读现代方式的 opengl、VBO 和 VAO。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 2022-01-24
    • 2020-10-05
    相关资源
    最近更新 更多