OpenGL(LWJGL)GL_QUADS表现得很奇怪

时间:2014-06-15 23:33:36

标签: java performance swing opengl lwjgl

我知道glBegin \ {{{}}}所有这些内容已被弃用多年,但我只是在试验并发现glEnd渲染模式的奇怪行为。

我正在使用LWJGL + Swing制作地图编辑器。所以我正在渲染 256x256 图块的整个(一次)地图。我知道这是错的,但这只是一个考验。

如您所知,您拨打的电话越少越好。所以根据逻辑,如果我做这样的事情:

GL_QUAD

它会比以下快得多:

glBegin(GL_QUADS);
for (x = 0 to.. xSize)
   for (y = 0 to.. ySize)
       world.getTile(x, y).render();
glEnd();

但实践表明相反。 这是屏幕。

第一路(1 drawCall):

enter image description here

第二种方式(许多drawCalls):

enter image description here

如果您想要查看实际代码,请执行以下操作:

1)

for (x = 0 to.. xSize)
   for (y = 0 to.. ySize) {
    glBegin(GL_QUADS);
    world.getTile(x, y).render();
    glEnd();
}

2)

if (needsRecompile) {
    needsRecompile = false;
    glNewList(terrainList, GL_COMPILE);
    GRenderEngine.startDrawingQuads();
    for (int i = 0; i < world.xSize; i++) {
        for (int j = 0; j < world.ySize; j++) {
            Tile t = world.getTile(i, j);
            t.renderTile(world, i, j);
        }
    }
    GRenderEngine.stopDrawing();
    glEndList();
}

这有什么问题或我不明白?

修改 刚做了另一个测试:

if (needsRecompile) {
    needsRecompile = false;
    glNewList(terrainList, GL_COMPILE);
    for (int i = 0; i < world.xSize; i++) {
        for (int j = 0; j < world.ySize; j++) {
            GRenderEngine.startDrawingQuads();
            Tile t = world.getTile(i, j);
            t.renderTile(world, i, j);
            GRenderEngine.stopDrawing();
        }
    }
    glEndList();
}

现在它提供几乎0%的CPU使用率,最佳性能。我调整了瓷砖以通过三角形渲染。

0 个答案:

没有答案