我的遊戲背景渲染需要所有的渲染時間我一直在試圖改善它的1/4,但我仍然不認爲這是正常的,它需要這麼長知道如何簡單它是:的OpenGL/Libgdx:方格網渲染優化
的背景是一個正方形網格(如棋盤),其中每平方都有自己的顏色,從而改變每幀,正方形y位置變化,每幀過,但不x位置
這裏是我的主要渲染功能
public void main.render() {
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
final float deltaS = Gdx.graphics.getDeltaTime();
background.update(deltaS);
updateTheGame(deltaS);
background.render();
spriteBatch.setProjectionMatrix(uiCamera.combined);
spriteBatch.begin();
renderTheGame(spriteBatch);
spriteBatch.end();
}
這裏是背景的網聲明
mesh = new Mesh(true, nbVertices, nbIndices,
new VertexAttribute(VertexAttributes.Usage.Position, 2, ShaderProgram.POSITION_ATTRIBUTE),
new VertexAttribute(VertexAttributes.Usage.ColorUnpacked, 3, GL20.GL_FLOAT, false, ShaderProgram.COLOR_ATTRIBUTE));
這裏是後臺更新功能(稱爲每一幀渲染()之前) (這不是一個我想優化)
void background.update(float deltaS) {
for (BGSquareRow row : squareRows)
row.update(deltaS);
setupVerticesArray();
mesh.updateVertices(0, verticesArray);
}
private final Color tmpColor = new Color();
private void setupVerticesArray() {
int index = 0;
for (BGSquareRow row : squareRows) {
final float y0 = row.y;
final float y1 = row.y + squareSize;
for (int i=0; i<nbSquareX; i++) {
row.getSquareColor(i, tmpColor);
final float x0 = squareXs[i];
final float x1 = squareXs[i+1];
verticesArray[index++] = x0;
verticesArray[index++] = y0;
verticesArray[index++] = tmpColor.r;
verticesArray[index++] = tmpColor.g;
verticesArray[index++] = tmpColor.b;
verticesArray[index++] = x1;
verticesArray[index++] = y0;
verticesArray[index++] = tmpColor.r;
verticesArray[index++] = tmpColor.g;
verticesArray[index++] = tmpColor.b;
verticesArray[index++] = x1;
verticesArray[index++] = y1;
verticesArray[index++] = tmpColor.r;
verticesArray[index++] = tmpColor.g;
verticesArray[index++] = tmpColor.b;
verticesArray[index++] = x0;
verticesArray[index++] = y1;
verticesArray[index++] = tmpColor.r;
verticesArray[index++] = tmpColor.g;
verticesArray[index++] = tmpColor.b;
}
}
}
這裏是),後臺生成功能,被稱爲background.update(後每幀(這是太costy之一)
void background.render() {
shaderProgram.begin();
shaderProgram.setUniformMatrix("u_projTrans", parent.uiCamera.combined);
mesh.render(shaderProgram, GL20.GL_TRIANGLES);
shaderProgram.end();
}
我試圖把僅有最少明白我的問題需要的,所以如果我忘了一些重要的東西,請告訴我
我有優化的一些想法,但我不知道如何做到這一點:
有沒有可能來在主spriteBatch上繪製背景網格?這將導致在main.render()函數中1次繪製調用,而不是2次如果我是對的
是否可以僅更新網格頂點緩衝區中的y,紅色,藍色和綠色值?我找到了更新頂點緩衝的一部分,但只有當它是一個連續部分
是否有針對verticesArray設置任何可能的優化?
(我還試圖用ColorPacked爲頂點緩衝區,但它是不是更好)
有多少行/列有哪些? – Tenfour04
有10分格17行!它填補了屏幕 –
而且你知道,如果你是填充速率限制或CPU有限的,還是什麼?這看起來真是小巫見大巫,所以如果你需要對其進行優化,可能會出現一些嚴重的問題,那就是在代碼中你沒有顯示。 – Tenfour04