我知道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):
第二种方式(许多drawCalls):
如果您想要查看实际代码,请执行以下操作:
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使用率,最佳性能。我调整了瓷砖以通过三角形渲染。