簡體   English   中英

為什么我調整的OpenGL ES 2.0模板的幀速率在iPad上如此之慢?

[英]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 CallersCharge Symbol to Caller

在某些時候,你會開始在那里看到與OpenGL相關的符號,這應該讓你了解GPU正在做什么。 此外,您可能會驚訝地發現自己的一些代碼會降低速度。

您可以嘗試使用另一種OpenGL ES儀器,但它是Xcode 4 beta的一部分,目前正在使用NDA。 查看WWDC 2010會話視頻,了解有關該視頻的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM