既に言及したように、直接行うことはできません。スレッドに関係なく、レンダリングが実際にどの状態にあるのか分からないので、アプリケーションのランダムな点に図面を挿入しないでください。
常にロジックを図面から分離してみます。あなたの場合は、オブジェクト(三角形)の配列が必要であると思われるようです。ユーザーが触れるたびに、この配列に三角形オブジェクトを追加して描画することができます。三角形を描くことができます。
ここでは、三角形で2つの状況があります。まず、すべての描画でバッファーをクリアすると、配列はタッチイベントで成長し続け、各フレームではすべての三角形が描画されます。第2に、バッファをクリアせずに一方のオブジェクトを他のオブジェクトに引き続き描画するだけの場合は、描画時にすべてのオブジェクトを配列から削除するだけです。
どちらの場合でも、変更が行われたときにのみ描画メソッドを呼び出すオプションもあります。この場合、needsRedraw
のようなブール値を使用することが最も一般的であり、レンダリングがトリガーされるべきであるときには、表示がリフレッシュされ、needsRedraw
がfalseに設定される。値needsRedraw
は、別の三角形が追加されたような何らかのアクションが行われたときに再びtrueに設定されます。
タッチイベントが報告される別のスレッドで共有コンテキストを作成するなど、いくつかの方法があります。このコンテキストでは、テクスチャを添付してFBOを作成することができます。主なコンテキストは、このテクスチャをフルスクリーンで再描画し、結果は同じになります...これはさらに難しい手順であり、実装する理由はありません。これらの2つのスレッドが同じでないか、スレッドの現在のコンテキストを変更しないようにする必要はありません。また、この場合はダブルバッファリングが必須であるため、FBO、ロックシステム、着脱システムの2つのテクスチャを検討しています。
はOnDrawFrame()で、OnTouchEvent()は異なるスレッドで実行されますか? – ArunKumarmn
私はMatic Oblakによって以下の答えを読むことをお勧めします。彼はあなたの質問について詳しく説明しました。 – codetiger