携帯電話のカメラの出力を画面にストリーミングしようとしています。この出力がIwGxを使用してクワッドに描画される場合、s3eSurfacePtrに書き込むよりも高速ですか?
OpenGLを使用して2D画像をクワッドにレンダリングすることでゲームを作成する人もいると聞きましたが、GPUアクセラレーションのおかげで高速です。それが本当かどうか誰かが知っていますか?これは上記の私の問題に似ているようです。
はい、私は間違いなくIwGxルートを下ります。s3eSurfaceは、最新のハードウェア(特にiOSプラットフォームなど)では非常に遅くなる可能性があります。
CIwTextureのインスタンスを作成し、ミップマップを無効にして、変更可能にすることから始めます。
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構造体へのポインターです。コールバックが終了するとデータが存在しなくなるため、コールバックでコピーを実行する必要がありますが、アプリケーションのループごとに1回だけ実行するように、アップロードを延期することをお勧めします。
これで、CIwMaterialを作成し、上記のテクスチャを使用して、テクスチャクワッドを画面にレンダリングするだけです。非常に簡単なので、そのコードはあなたに任せます!