1

GPUImageまたはOpenGLESでフラグメントまたは頂点シェーダーの精度を上げることは可能ですか?

GPUを使用して画像処理を行うことを検討しており、元のデータをできるだけ多く保持したいと考えています。

4

2 に答える 2

1

次のステートメントを使用して、ハードウェアに実装されている最高精度を使用するようにシェーダーに要求できます。

precision highp float;
precision highp int;

または、特定の宣言で highp 修飾子を使用します。どのような場合でも、シェーダーはデフォルトで利用可能な最高の精度になると思います。

どのような精度が得られるかは、特定のハードウェアの実装によって異なります。また、フラグメント シェーダーでの highp 修飾子の実装はオプションです。glGetShaderPrecisionFormat() API 呼び出しを使用して、フォーマットの精度を照会できます。Power VR SGX530 チップでは、highp float と int に対して次の値を取得します。

float range = 126/126, precision = 23/0
int range = 24/24, precision = 0/0
于 2013-02-26T22:54:57.760 に答える
0

元のテクスチャ データを増やさない限り、精度を上げることはできません。

ピクセルを補間する方法はたくさんありますが、精度が向上するわけではありません。

あなたの場合、AVCaptureSessionPresetXXXXXXなどのIOS APIでカメラのプリセットを増やすことができます

GPUImage は OpenGL ES で作成されているため、GPUImage のシェーダー コードと任意の OpenGL ES 2.0 プログラムのシェーダー コードは完全に同じです。

また、パイプラインで Vertex & Frag (ピクセル) シェーダーが何をしているかを知りたいです。これらはレデリング処理のほんの一部です。

これを知らなかった場合は、Vertex シェーダーが trasformation を実行しており、Fragment Shader が Texturing を実行していることを思い出してください。

つまり、ピクセルを補間する場合は、フラグメントシェーダーにある必要があります。

于 2013-02-25T22:29:08.250 に答える