問題
Google ChromeにおけるWebGLで、正しいテクスチャサイズ(2の累乗)にも関わらず、
RENDER WARNING: texture bound to texture unit 0 is not renderable. It maybe non-power-of-2 and have incompatible texture filtering or is not 'texture complete'
というエラーが出力された場合
結論
「テクスチャ画像の読み込みが完了していない状態でレンダリングを行った」ことにより、同エラーが出ている可能性を疑うこと。
以下、駄文
WebGLであるゲームの開発をやっているんですが、テクスチャ関連で以下のエラーが出てくるんですよ(ちなみにブラウザはChrome)。
RENDER WARNING: texture bound to texture unit 0 is not renderable. It maybe non-power-of-2 and have incompatible texture filtering or is not 'texture complete'
もうね。何かと思って。テクスチャサイズは256x64だし、フィルタリングの指定も間違ってないし。色々ググったり試行錯誤して辿り着いたオチが……。
「テクスチャ画像の読み込みが完了していない状態でレンダリングを行ったから」
あー、たしかに or is not 'texture complete'
って書いてあるけどさ……。
ふつー、non-power-of-2の方に注目しちゃうだろ。
おいら、まさかなーあるわけないよなーとか考えながらも画像サイズを256x256に変えてみたりとかアホみたいなことしちゃったじゃまいか。
何が ~ or ~ だ。どっちの原因なのかそこまでちゃんとチェックして、適切にエラーを出せ、と。
WebGLの画像ファイル読み込みは非同期なので、ちょっと横着して、テクスチャの読み込みが完了する前に描画命令しちゃうのはよくある事だと思うのですよ。
そういうケースも考えて、シンプルに「まだロード完了してないよん」とか言ってくれればいいのに、「non-power-of-2」とかいうからもう誤解しちゃったじゃんよ。
こういう「原因は〜〜〜かもしれないし〜〜〜かもしれません」的なエラーって設計した人はどういうつもりで作ったんだろう。
仕様的に判断が難しいというのは考えづらい気がするんだよなー。
ちなみに、これはChromeでの話です。他のブラウザの場合どういったエラーが出るかは確かめていません。(どなたか試された方いらっしゃいましたらコメントいただけますと幸いです)