--- title: WebGL best practices slug: Web/API/WebGL_API/WebGL_best_practices tags: - WebGL translation_of: Web/API/WebGL_API/WebGL_best_practices ---
{{WebGLSidebar}}
この文書は WebGL を使ったコンテンツの向上のための Tips について書きます。これらの提案に従うことで、多くの機器への互換性を高めたり、パフォーマンスを上げることにもなります。
getError()
で得られますが、Firefox では webgl.verbose
の設定を有効にすることで、ウェブコンソールに WebGL のエラーと警告を出力します。ユーザーのコンソールにエラーを吐き出す必要はないでしょう?(訳註:パフォーマンスの理由もある。下参照)#ifdef GL_ES
は絶対に使ってはいけません。初期の例ではこれが使われていましたが、WebGL では必ず true になるので必要ありません。highp
精度を使うのはやめましょう。mediump
を代わりに使いましょう。highp
を使うと今のモバイルのハードウェアのほとんどで動きません。Firefox 11 からは getShaderPrecisionFormat()
関数が実装されるので、highp
精度が使えるかどうかだけでなく、それぞれの精度の名称について実際の精度を知ることができます。getParameter()
を使って調べましょう。例えば、2D テクスチャのサイズは webgl.getParameter(webgl.MAX_TEXTURE_SIZE)
でわかります。Firefox 10 からは webgl.min_capability_mode
の設定があり、最低限の機能の環境をシミュレートすることができます。webgl.getParameter(webgl.MAX_VERTEX_TEXTURE_IMAGE_UNITS)
がゼロより大きくなければ使えません。現在のモバイルのハードウェアではまず使えないでしょう。webgl.disable-extensions
の設定があり、拡張のない環境をシミュレートすることができます。OES_texture_float
拡張がサポートされていたとしても、浮動小数点数テクスチャへのレンダリングはサポートされていないかもしれません。モバイルのハードウェアではまず動かないでしょう。サポートされているかを調べるには checkFramebufferStatus()
を使ってください。getError()
、readPixels()
、finish()
などの関数がそれです。getParameter()
や getUniformLocation()
といった WebGL のゲッタも遅いので、JS 側で変数にキャッシュしてください。drawArrays()
や drawElements()
でやりましょう。一回の drawArrays()
で離れたオブジェクトを描画するなら、3 点が一直線上にある三角形が使えます。if
文を減らせば速くなります。割り算や log()
などの数学の演算もコストが高いです。