Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 生成一个非常大的对象数组会冻结程序_Opengl_Lwjgl - Fatal编程技术网

Opengl 生成一个非常大的对象数组会冻结程序

Opengl 生成一个非常大的对象数组会冻结程序,opengl,lwjgl,Opengl,Lwjgl,当我生成一个巨大的13k+瓷砖阵列,我想将其渲染为屏幕上的纹理时,它崩溃了,我不知道为什么,这就是导致问题的方法 public ArrayList<Tile> getNewChunk(int width, int height) { int amountOfTilesY = height * 32; int amountOfTilesX = width * 32; int amountOfTiles = (amountOfTilesX + amountOfTi

当我生成一个巨大的13k+瓷砖阵列,我想将其渲染为屏幕上的纹理时,它崩溃了,我不知道为什么,这就是导致问题的方法

public ArrayList<Tile> getNewChunk(int width, int height)
{
    int amountOfTilesY = height * 32;
    int amountOfTilesX = width * 32;
    int amountOfTiles = (amountOfTilesX + amountOfTilesY) / 32;
    ArrayList<Tile> tiles = new ArrayList<Tile>(amountOfTiles);
    for(int i = 0; i < amountOfTilesX; i += 32)
    {
        for(int j = 0; j < amountOfTilesY; j += 32)
        {
            Tile tempTile = new DirtTile(i, j, "res/tile/DirtTile.png");
            tiles.add(tempTile);
        }
    }

    return tiles;

}
public ArrayList getNewChunk(int-width,int-height)
{
int amountoftlessy=高度*32;
int amountOfTilesX=宽度*32;
int amontoftiles=(amontoftilesx+amontoftilesy)/32;
ArrayList tiles=新的ArrayList(amountOfTiles);
对于(int i=0;i
所以如果你能帮忙的话:D 我用来渲染游戏的引擎是LWJGL2,使用opengl
如果需要,我可以提供更多代码

根据您提供的内容,问题可能来自多个方面@javec是正确的,因为每个对象加载一次纹理会大大降低性能。您应该加载单个单元并在整个列表中分发其单个单元ID

此外,根据您提供的信息,不清楚您是否在这里分别为每个磁贴生成缓冲区。如果是这样,您应该生成一个缓冲区并以相同的方式共享它

根据你使用这些瓷砖的计划,你可以考虑一种不同的方法。如果平铺作为地形连接,则始终可以适当缩放网格,并使用以下方式平铺纹理:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

您可能只想加载DirtTile纹理一次并重新使用它,因为现在看起来每个瓷砖都要单独加载。加载13000个纹理可能需要大量的性能和内存。它在哪一行崩溃?它开始崩溃的瓷砖数量是多少?瓷砖有多大,它们是什么格式?