[英]Why is the framerate of my tweaked OpenGL ES 2.0 template so slow on the iPad?
我在Xcode中修改了OpenGL es 2.0模板,將該小框渲染為屏幕外紋理(50 * 50),然后重置視口並使用全屏四邊形將紋理渲染到屏幕上。 但FPS下降得如此之多,以至於明顯滯后(大約10個)。
我知道iPad有關於填充的問題,但這似乎不對。 我只使用了一個FBO,並在循環中更改了紋理和renderBuffer之間的顏色附件。 這有什么影響嗎?
此外,我正在編寫一個音頻可視化工具(如Windows Media Player中的那個),在OpenGL中編輯像素值。 有什么建議?
這里是代碼:
//implement the texture in -(id)init
glGenTextures(1, &ScreenTex);
glBindTexture(GL_TEXTURE_2D, ScreenTex);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, texSize, texSize, 0, GL_RGB, GL_UNSIGNED_BYTE, nil);
//And in the render loop
//draw to the texture
glViewport(0, 0, texSize, texSize);
glBindTexture(GL_TEXTURE_2D, ScreenTex);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, ScreenTex, 0);
glClear(GL_COLOR_BUFFER_BIT);
glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, squareVertices);
glUniform1i(Htunnel, 0);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
//switch to render to render buffer here
glViewport(0, 0, backingWidth, backingHeight);
glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,colorRenderbuffer);
glClear(GL_COLOR_BUFFER_BIT);
glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, texVertices);
glUniform1i(Htunnel, 1);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
//vertex shader
void main()
{
if (tunnel==0) {
gl_Position = position;
gl_Position.y += sin(translate) / 2.0;
colorVarying = color;
}else {
f_texCoord = v_texCoord;
gl_Position = position;
}
}
//frag shader
void main()
{
if (tunnel==0) {
gl_FragColor = colorVarying;
} else {
gl_FragColor = texture2D(s_texture, f_texCoord);
}
}
如果沒有實際代碼,就很難找出瓶頸所在。 但是,通過使用Instruments來定位原因,您可以了解問題所在。
使用OpenGL ES儀器和新的Time Profiler工具創建新的Instruments文檔。 在OpenGL ES儀器中,點擊右側的小檢查器按鈕,然后單擊配置按鈕。 確保在結果頁面上檢查幾乎所有日志記錄選項,尤其是Tiler Utilization%和Renderer Utilization%。 單擊“完成”並確保在“ Select statistics to list
頁面中選中這兩個統計Select statistics to list
。
在渲染過程中,在iPad上對應用程序運行這組儀器一段時間。 停下來看看數字。 正如Pivot對我的問題的回答所解釋的那樣,如果你看到OpenGL ES儀器中的Tiler利用率百分比達到100%,你就會受到幾何形狀的限制(這里不太可能)。 同樣,如果渲染器利用率%接近100%,則您的填充率受限。 您還可以查看已記錄的其他統計信息,以了解可能發生的情況。
然后,您可以轉到Time Profiler結果,看看是否可以縮小代碼中可能會減慢速度的熱點。 找到列表頂部附近的項目。 如果它們在您的代碼中,請雙擊它們以查看正在進行的操作。 如果它們位於系統庫中,請過濾結果,直到您看到更相關的內容,方法是右鍵單擊符號名稱並選擇Charge Library to Callers
或Charge Symbol to Caller
。
在某些時候,你會開始在那里看到與OpenGL相關的符號,這應該讓你了解GPU正在做什么。 此外,您可能會驚訝地發現自己的一些代碼會降低速度。
您可以嘗試使用另一種OpenGL ES儀器,但它是Xcode 4 beta的一部分,目前正在使用NDA。 查看WWDC 2010會話視頻,了解有關該視頻的更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.