2

我正在尝试将手机摄像头的输出流式传输到屏幕上。如果使用 IwGx 将此输出绘制到四边形上,它会比写入 s3eSurfacePtr 更快吗?

我听说有些人通过使用 OpenGL 将他们的 2d 图像渲染到四边形来创建游戏,而且速度更快(因为 GPU 加速?)。有谁知道这是不是真的?这似乎与我上面的问题相似。

4

1 回答 1

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,让它使用上面的纹理并在屏幕上渲染一个带纹理的四边形。我将把代码留给你,因为它非常简单!

于 2012-05-01T09:24:59.487 回答