0

iPhone 4 で Fragment Shader を実行すると、深刻な遅延が発生します。計算の一部をコメントしようとしましたが、Fragment Shader でほとんど計算を行っていないにもかかわらず、まだいくつかのジッタがあります。

// Fragment Shader Code
uniform sampler2D texture;
varying lowp vec2 fragmentTexCoords;
uniform lowp float passAlpha;
uniform lowp vec2 inPosition;
uniform lowp float varUniform;
void main()
{
    gl_FragColor = texture2D(texture, fragmentTexCoords);
    lowp float disY = gl_FragCoord.y - inPosition.y;
    lowp float disMax = 250.0;
    lowp float coeff = 1.0 - varUniform;
    gl_FragColor.rgb *= coeff;
}

//My render function is:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glFlush();

何が問題なのかはまだわかりませんが、iPhone はもっと複雑な計算を処理できると確信しています... 何かアイデアはありますか?

前もって感謝します。

4

2 に答える 2

0

スタッターがフラグメントシェーダーによって引き起こされていることは確かですか? フラグメント シェーダーからほとんどの操作を削除して、これを確認できますか? 私が質問しているのは、シェーダー コードでコストのかかることを実際に行っていないためです。パフォーマンスの問題が発生するのは奇妙です。更新ループで、テクスチャのアップロードなど、他に何もしていませんか? xcode プロファイリング ツールはパフォーマンスについて何を示していますか?

于 2013-09-11T05:44:28.007 に答える
0

私はこれを試してみます.変数が宣言されている方法のために、より高い精度で計算を行っているいくつかの状況を回避します...これによりパフォーマンスが向上する場合は、それが機能する理由をさらに説明できます.

// Fragment Shader Code
uniform lowp sampler2D texture;
varying lowp vec2      fragmentTexCoords;
uniform lowp float     passAlpha;
uniform lowp vec2      inPosition;
uniform lowp float     varUniform;

void main ()
{
    lowp vec4  color  = texture2D (texture, fragmentTexCoords);
    lowp float disY   = gl_FragCoord.y - inPosition.y;
    lowp float disMax = 250.0;
    lowp float coeff  = 1.0 - varUniform;
    color.rgb        *= coeff;
    gl_FragColor      = color;
}
于 2013-09-10T16:44:43.387 に答える