2012-04-28 35 views
2

我想將手機攝像頭的輸出流到屏幕上。如果使用IwGx將此輸出繪製到四邊形上,它會比寫入s3eSurfacePtr更快嗎?流攝像頭輸出到屏幕上:IwGx vs s3e

我聽說有人通過使用OpenGL將他們的2D圖像渲染成四邊形來創建遊戲,並且它更快(因爲GPU加速?)。有誰知道這是真的嗎?這似乎與我上面的問題類似。

回答

2

是的,我一定會沿着IwGx的路線走下去。 s3eSurface在現代硬件上可能非常慢(例如特別是iOS平臺)。

首先創建一個CIwTexture實例,禁用mip貼圖並使其可修改。

CIwTexture* lpTexture = new CIwTexture; 
lpTexture->SetModifiable(true); 
lpTexture->SetMipMapping(false); 

初始化回調方法

s3eCameraRegister(S3E_CAMERA_UPDATE_STREAMING, (s3eCallback) MyFrameDataCallback, NULL); 

啓動相機運行,並要求它,當它接收到幀轉換爲RGB565。您應該根據使用情況改變所需的尺寸和質量提示。這有點試驗和錯誤,因爲它取決於硬件支持。

s3eCameraStart(S3E_CAMERA_STREAMING_SIZE_HINT_LARGEST, S3E_CAMERA_PIXEL_TYPE_RGB565_CONVERTED, S3E_CAMERA_STREAMING_QUALITY_HINT_HIGH); 

然後,在照相機框架回調更新紋理

lpTexture->CopyFromBuffer(apFrame->m_Width, apFrame->m_Height, CIwImage::RGB_565, apFrame->m_Pitch, (uint8*) apFrame->m_Data, 0); 
lpTexture->Upload(); 

apFrame是指針以獲取傳遞到回調函數作爲第一個參數的s3eCameraFrameData結構。您需要在回調中執行副本,因爲一旦回調完成後數據將不再存在,但您可能需要推遲上傳,因此您只需在應用程序的每個循環中執行一次。

現在,您只需創建一個CIwMaterial,使其使用上述紋理並在屏幕上渲染紋理四邊形。我會把這段代碼留給你,因爲它非常直截了當!

+0

非常感謝第1波,這是一個非常簡潔的分步指南,介紹如何使用IwGx方法來流式傳輸相機輸出 – chaindriver 2012-05-06 16:32:02