簡體   English   中英

在iPhone上使用OpenGL渲染UIImage / PNG的最簡單,最快捷的方法?

[英]Easiest, fastest way to render UIImage/PNG using OpenGL on iPhone?

我編寫了一個iPhone應用程序,它從用戶那里獲取輸入並根據輸入更新位圖上下文。 更新后,它會更新UIView的顯示。 我通過在UIView子類中實現drawRect來實現這一點。

目前我正在使用Quartz 2D。 鑒於更新每秒發生多次,我注意到雖然app在模擬器中表現良好,但實際設備上的速度要慢得多(盡管不可用)。 我想重寫drawRect來改用OpenGL(因為我聽說這個性能要高得多)。 如果你有其他想法,我會全力以赴。

我瀏覽過網絡上有關如何使用OpenGL簡單顯示PNG的示例/教程,但大多數都對我需要的東西有點過分。 我正在尋找一個簡短而甜蜜的樣本,用於快速獲取PNG文件或UIImage,然后使用OpenGL在UIView內渲染(可以實現?這在概念上甚至是否有意義?) - 或指向文檔的指針以加速圖像渲染使用現有的Quartz API。

在您決定回復RTFM回復之前 - 請不要浪費我的時間或您的時間。 我不是在尋找捷徑,我不介意做功課。 我只是在尋找一個符合我需求的簡單解決方案/指導,而且很難找到。 我相信精通OpenGL的人可能會解釋需要做什么,並在5分鍾內完成這個代碼。 如果那就是你,那將是我的一天:)。

任何幫助,指導等總是受到贊賞。 謝謝。

使用您自己分配的內存創建位圖上下文

void* data = malloc(width*height*4);

CGContextRef ctx = CGBitmapContextCreate( . . . );

並將您想要的任何內容呈現到該位圖上下文中。 接下來,從數據中創建紋理

glGenTextures(1, &texref);
glBindTexture(GL_TEXTURE_2D, texref);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);

現在,只需按照任何有關使用GL渲染此紋理的教程,使用Apple的示例代碼了解如何將GL渲染為UIView。 請注意在位圖上下文中使用RGBA字節順序(或將GL調用交換到ARGB)。 此外,請記住,GL僅喜歡尺寸為2 ^ nx 2 ^ n的紋理。

使用iPhone的共享內存架構,數據不會在每個周期發送到顯卡,因此這不會導致性能損失。

顯示更新位圖的更快方法可能是將位圖上下文分配給UIView的CALayer(如果需要,可以調整大小和/或轉換為所需目標矩形的子視圖)。 不需要drawRect或OpenGL框架渲染。

暫無
暫無

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

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