2016-04-01 23 views
-1

當我生成一個龐大的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; 

} 

因此,如果歐能幫:d 我使用的渲染遊戲引擎是LWJGL 2,使用OpenGL的 如果需要

+1

瓷磚的質地您可能需要加載DirtTile紋理只有一次,重複使用它,因爲此刻它看起來像您爲每個圖塊分別加載它。加載13,000紋理可能需要大量的性能和內存。 – javac

+0

它在哪一行崩潰?它開始崩潰的瓦片數量是多少?瓷磚有多大,以及它們是什麼格式? – Andreas

回答

0

根據您提供什麼我可以提供更多的代碼中,問題可能來自多個方面。 @javec是正確的,每個對象加載一次紋理會大幅降低性能。您應該加載單個設備並在整個列表中分配其單個設備ID。

此外,根據您提供的內容,您是否正在爲每個tile分別生成緩衝區並不清楚。如果是這樣,您應該生成一個緩衝區並以相同的方式共享它。

根據您計劃使用這些瓷磚的計劃,您可能會考慮採用不同的方法。如果瓷磚連接成一個地形,你總是可以適當地擴展您的網格,並使用類似

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