膨大な回数呼び出されるフラグメント シェーダー関数にいくつかの計算 (以下) があります。このコードを最適化できるかどうか知りたいです。OpenGL.org glsl 最適化ページを見て、いくつかの変更を加えましたが、このコードを高速化することは可能ですか?
uniform int mn;
highp float Nx;
highp float Ny;
highp float Nz;
highp float invXTMax;
highp float invYTMax;
int m;
int n;
highp vec4 func(in highp vec3 texCoords3D)
{
// tile index
int Ti = int(texCoords3D.z * Nz);
// (r, c) position of tile withn texture unit
int r = Ti / n; // integer division
int c = Ti - r * n;
// x/y offsets in pixels of tile origin with the texture unit
highp float xOff = float(c) * Nx;
highp float yOff = float(r) * Ny;
// 2D texture coordinates
highp vec2 texCoords2D;
texCoords2D.x = (Nx * texCoords3D.x + xOff)*invXTMax;
texCoords2D.y = (Ny * texCoords3D.y + yOff)*invYTMax;
return texture2D(uSamplerTex0, texCoords2D);
}
編集:
いくつかのコンテキストを提供するために、func() がレイ キャスティング セットアップの一部として使用されます。フラグメントごとに main() から最大 300 回呼び出されます。