显示上下文属性和GL11投影矩阵模式-不支持该功能

时间:2018-06-23 04:57:44

标签: java opengl lwjgl

尝试将LWJGL程序的Matrix模式设置为GL_Projection时出现错误。

glMatrixMode(GL_PROJECTION);

错误是:

  

线程“主”中的异常java.lang.IllegalStateException:不支持该功能           在org.lwjgl.BufferChecks.checkFunctionAddress(BufferChecks.java:58)           在org.lwjgl.opengl.GL11.glMatrixMode(GL11.java:2075)           ....

我已查找到我制作显示器时的错误。当我删除ContexAttribs时,我的代码不会显示错误并呈现! (当我注释掉需要contexattribs的代码时)

这是我的代码:

显示代码:

Display.setDisplayMode(new DisplayMode(WIDTH, HEIGHT));
ContextAttribs attribs = new ContextAttribs(3, 2).withProfileCore(true).withForwardCompatible(true);
Display.create(new PixelFormat().withDepthBits(24).withSamples(4), attribs);
Display.setTitle(TITLE);
Display.setInitialBackground(1, 1, 1);
GL11.glEnable(GL13.GL_MULTISAMPLE);
GL11.glViewport(0, 0, WIDTH, HEIGHT);

初始化方法:

glMatrixMode(GL_PROJECTION);
glOrtho(0, width, height, 0, -1, 1);
glMatrixMode(GL_MODELVIEW);
glClearColor(0, 1, 0, 0);

textureID = loadTexture("res/hud.png");

glEnable(GL_TEXTURE_2D);

渲染方法:

glClear(GL_COLOR_BUFFER_BIT);

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glPushMatrix();

glTranslatef(0, 0, 0);

glBindTexture(GL_TEXTURE_2D, textureID);

glBegin(GL_QUADS);

{
        glTexCoord2f(0, 0);
        glVertex2f(0, 0);

        glTexCoord2f(1, 0);
        glVertex2f(width, 0);

        glTexCoord2f(1, 1);
        glVertex2f(width, height);

        glTexCoord2f(0, 1);
        glVertex2f(0, height);
}

glEnd();
glPopMatrix();

有人知道我如何使此代码与contextAttribs一起工作吗?

谢谢!

编辑1:我静态导入了GL11中的所有函数和变量。

1 个答案:

答案 0 :(得分:1)

首先,使用glBegin / glEnd序列进行绘制已超过10年了。有关最新的渲染方式,请参见Vertex Specification

与线

ContextAttribs attribs = new ContextAttribs(3, 2).withProfileCore(true).withForwardCompatible(true);

会生成设置了OpenGL core profile Context位的Forward compatibility

在这种情况下,所有不推荐使用的功能,例如glBegin / glEnd序列,矩阵堆栈(glMatrixMode),标准光照模型等都将被删除。这会导致错误。

另请参见Fixed Function PipelineOpenGL Context

跳过前向兼容性位(.withForwardCompatible(true))的设置即可解决此问题。