我正在尝试将手机相机的输出流式传输到屏幕上。如果使用IwGx将此输出绘制到四边形上,它会比写入s3eSurfacePtr更快吗?
我听说有些人通过使用OpenGL将他们的2D图像渲染到四边形来创建游戏,而且速度更快(因为GPU加速?)。有谁知道这是真的吗?这似乎与我上面的问题相似。
答案 0 :(得分: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,让它使用上面的纹理并在屏幕上渲染纹理四边形。我会把这段代码留给你,因为它很直接!