1

アップルのフリーハンド描画GLPaintの例、OpenGLESを使用したペイントは大きなフレームでは描画できません。約{2410、1808}以上の大きな帆布に描く必要があります。しかし、描画しようとすると、コンソールに次のようなメッセージが表示されます。

2012-06-05 14:29:40.780 GLPaint [3390:707] drawingViewのフレーム:{{-827.222、-567.004}、{2410、1808}}
2012-06-05 14:29:40.884 GLPaint [3390:707]は完全なフレームバッファオブジェクト8cd6を作成できませんでした

私のコードでは、フレームを次のように設定しました-

//PaintingViewGL performing the freehand drawing of OpenGL ES
//drawingView is a UIView with dynamic frame size

paintingViewGL = [[PaintingViewGL alloc] initWithFrame:drawingView.frame];
paintingViewGL.backgroundColor = [UIColor clearColor];

[drawingView addSubview:paintingViewGL];
paintingViewGL.center = drawingView.center;
paintingViewGL.hidden = NO;

フレームサイズ{1435、1076}で良い結果が得られ、{1600、1200}のような少し大きいフレームでは、描画ブラシが波のようになり、画面上で踊り始めます。受信メモリの警告が表示されることがあります。この場合、レベル=1です。

4

2 に答える 2

3

iPad 2より古いデバイスの場合、最大テクスチャサイズは2048 x 2048であるため、それより大きいテクスチャまたはフレームバッファオブジェクトに描画することはできません。エラーと黒い画面が表示されるだけです。新しいデバイス(iPad 2、Retina iPad、iPhone 4S)では、このテクスチャサイズの制限が4096x4096に引き上げられました。

より大きなキャンバスに描画するための唯一の解決策は、Core Animation内でCATiledLayerが行うように、OpenGLESでタイリングメカニズムを作成することです。ただし、OpenGL ESレンダリングにそれほど精通していない場合は、重要な作業になるため、これで頑張ってください。

また、特に古いiOSデバイスでは、OpenGLESの非常に大きなシーンでメモリの問題が発生します。警告が表示されているとおっしゃる1600x1200の画像の場合、圧縮されていないすべてのフレームは、それ自体で最大7.7MBのメモリを消費します。複数のレイヤーまたはテクスチャがある場合、注意しないと、デバイスで使用可能なメモリがすぐに追加されて使い果たされる可能性があります。2410x1808の画像の場合、フレームあたり17.4 MBを見ているので、その瞬間に必要なタイルでのみ機能するようにこれを並べて表示する必要があるもう1つの理由です。

于 2012-06-07T14:28:42.903 に答える
0

この件のサイズキャップはテクスチャーと同じです。現在、1 << 11(2048)に制限されており、幅または高さが2048ピクセルを超えるバッファーを作成することはできません。必要な効果を達成するために私が見る唯一の方法は、1つ以上のビューまたは1つ以上のフレームバッファを作成することです。本当にすべての問題を解決したい/必要な場合は、FBO(フレームバッファオブジェクト)について少し読んでください。

于 2012-06-07T13:34:07.700 に答える