したがって、スプライトの特定のピクセルを変更しようとしています。現在、私は自分自身を作成することによって仕事を作ったSetPixel(int x, int y, Color color)
機能。これは、テクスチャの情報(RGBA値)を変更し、それをスプライトに渡すことによって機能します。しかし、これは遅いです:フラグメントシェーダ付きOpenGL SetPixel
1)(私が望むところでは)GPUの代わりにCPUを使用して、パフォーマンスを向上させるためにシェーダを使うことができました。
2)1つのピクセルを変更するたびに、修正されたテクスチャを再アップロードする必要があります。
この質問は私にとって大きなものです。特定のピクセルを変更するためにシェーダを使用するにはどうすればよいですか?私は頂点ごとに色を変更することができますが、これは私が望むものではありません。
提案がありますか?
フラグメントシェーダは、単一のピクセルだけでなく、フレームバッファ内のすべてのピクセルを変更します(drawElementsまたはdrawArraysを呼び出す場合)。新しいカラー値がCPUプログラムにある場合は、GPUテクスチャにアップロードするか、フラグメントシェーダの定数変数として設定します。 –
複数のピクセルを一度に変更したくないですか? 1ピクセルをGPUにアップロードすることは、1000000ピクセルをアップロードするのと同じように複雑です。 –
提案:あなたの 'SetPixel'関数を削除し、あなたがそれなしで何をするかを理解してください。 – ybungalobill