私は現在、より大きなウェブプロジェクトでThree.jsを使用しています。 すべてうまく動作し、レンダリングなどの問題はありません。私が取り組んでいる唯一の問題は、具体的なものです。テクスチャを生成するときにWebGLがクラッシュする - OutOfMemory
私のプロジェクトの一部では、ユーザーはテクスチャとして使用されるキャンバスを通して3Dモデルに画像を配置できます。場合によっては、ユーザーがクリックによって実際に位置をすばやく変更すると、WebGLの動作が停止することがあります。 Chromeの場合
:
ラット! WebGLがスラッグを起こしました。
したがって、ユーザーはページをリロードする必要があります。
これは実際にのパフォーマンスの問題ですか?
これは、1秒あたりの変換速度を低下させる唯一の方法ですか?またはtry/catchのようなものがあるので、WebGLをブロックしない場合は変換を実行しますか?
私は実際に3Dモデル上に画像のこのライブポジショニングを保持したいと思います。
また、シーン内の他のオブジェクトを隠すことができるので、画像が配置されているオブジェクトのみが表示されますが、それは役に立ちますか?
ありがとうございました!
これはコンソールで実際のエラーです:
GL_INVALID_OPERATION : glGenSyncTokenCHROMIUM:
fence sync must be flushed before generating sync token
filename.html:1 WebGL: CONTEXT_LOST_WEBGL: loseContext: context lost
クリックごとに実行されるコードは次のとおりです。WebGLのではない持っているよう
context = canvas.getContext("2d");
canvas.width = 1024;
canvas.height = 1024;
canvas.style.width = canvas.width + "px";
canvas.style.height = canvas.height + "px";
context.clearRect(0, 0, canvas.width, canvas.height);
context.save();
context.setTransform(1, 0, 0, 1, x + width/2, y + height/2);
context.rotate(angle * TO_RADIANS);
var imgT = new Image();
imgT.src = fotoprintPath + this.id;
context.drawImage(imgT, -width/2, -height/2, width, height);
context.restore();
matTexture.map = new THREE.Texture(canvas);
matTexture.map.needsUpdate = true;
それは、asynchrone関数呼び出しとは何かを持っています前のタスクを終了したのでクラッシュしますか?
Firefoxではブラウザがクラッシュするだけです。私は誰かがこれを手伝ったり、それを避ける方法を教えてくれることを願っています。
**アップデート クリック数を制限すると、満足できる解決策ではありません。このソリューションの問題は、1秒間に1クリック(非常に遅い位置にする)を許可するか、PCが処理できる秒あたりのクリック数を使用するかのいずれかですが、これはタブレットのユーザーと遅いPCの間でエラーが発生する原因になります。私は本当に必要なもの
この
function canPerformTextureTransformation(){
if(availableMemory >= neededMemory)
return true;
else
return false;
}
のような機能ですが、どのように、私は必要とされたメモリと使用可能なメモリをチェックすることができますか?
テストできるコードはありますか? – neeh
元のエラーはドイツ語で間違いありませんか?ドイツ語の "WebGL wurde blockiert"エラーは英語で "Rats!WebGL hit Snag。"と報告されています。これにより、Googleでより多くの回答を得ることができます。私は個人的に "WebGLがブロックされた"と遭遇したことはありません。 –
はい、申し訳ありません。私はそれを翻訳しようとしました。 – Dubbox