2013-02-20 62 views
7

मेरे पास एक ऐसा पृष्ठ है जो कई कैनवासों में से कई वेबलॉग संदर्भों का उपयोग कर रहा है। प्रत्येक बार नए संदर्भ बनाने के लिए कैनवास को फिर से लोड किया जा सकता है, आकार बदल सकता है। यह कई रीलोड्स के लिए काम करता है, लेकिन आखिरकार जब मैं एक नया संदर्भ बनाने की कोशिश करता हूं तो यह एक शून्य मान देता है। मुझे लगता है कि मैं स्मृति से बाहर चला रहा हूँ।वेबजीएल संदर्भों को हटाने

मैं उन संदर्भों को हटाने में सक्षम होना चाहता हूं जिन्हें मैं अब उपयोग नहीं कर रहा हूं इसलिए मैं स्मृति को पुनर्प्राप्त कर सकता हूं और अपने नए संदर्भों के लिए इसका उपयोग कर सकता हूं। क्या इसे करने का कोई तरीका है? या क्या कई कैनवासों को संभालने का एक बेहतर तरीका है?

धन्यवाद।

+0

getContext() कॉल शून्य लौट रहा है, इसलिए विफलता तब होती है जब मैं व्यूपोर्ट को त्रुटियों को सेट करने का प्रयास करता हूं क्योंकि ऑब्जेक्ट शून्य है। – user2089247

+0

अच्छी तरह से आपको यह जांचना चाहिए कि आपका संदर्भ 'getContext() ' – Aesthete

+0

पर कॉल करने के बाद _anything_ करने से पहले मान्य है, यह ~ 200 वां संदर्भ बनने पर विफल रहता है। पहला 199 सुंदर और अद्भुत है। कोड बहुत सरल है। – user2089247

उत्तर

5

यह क्रोम में एक लंबे समय से बग और वेबकिट

http://code.google.com/p/chromium/issues/detail?id=124238

WebGL में एक संदर्भ "हटाएँ" का कोई तरीका नहीं है। जब भी सिस्टम इसके आसपास हो जाता है तो कचरे को कचरा संग्रह द्वारा हटा दिया जाता है। सभी संसाधनों को उस बिंदु पर मुक्त कर दिया जाएगा, लेकिन यदि आप ब्राउज़र को हटाने के लिए प्रतीक्षा करने के बजाय अपने संसाधनों को हटाते हैं तो यह सबसे अच्छा है।

जैसा कि मैंने कहा कि यह एक बग है। अंत में यह तय किया जाएगा लेकिन मेरे पास कोई ईटीए नहीं है।

मैं सुझाव दूंगा कि कैनवास को हटाना न पड़े। उन्हें चारों ओर रखें और उनका पुन: उपयोग करें।

एक और सुझाव हमें बताएगा कि आपको 200 कैनवास क्यों चाहिए। हो सकता है कि आप जिस समस्या को हल करने की कोशिश कर रहे हैं उसे बेहतर तरीके से हल किया जाएगा।

2

मैं मानता हूं, जब तक कि आप अपने संदर्भ से जुड़े सभी संसाधनों को जारी नहीं करते हैं, तब तक कुछ भी इसके संदर्भ में रहेंगे, और इसलिए यह अभी भी मौजूद रहेगा।

कुछ बातें की कोशिश करने के लिए:

  • Here is some debug gl code. एक समारोह वहाँ एक संदर्भ रीसेट करने के लिए यह प्रारंभिक अवस्था है नहीं है। कोशिश करें कि कैनवास को हटाने से पहले यह संबंधित है।

  • यह संभव है कि कुछ घटना प्रणाली ज़ोंबी राज्य में रखते हुए, आपके संदर्भों के संदर्भ में हो सकती हैं।

  • क्या आप अपने कैनवास को डीओएम से हटा रहे हैं? मुझे यकीन है कि संसाधनों पर एक सीमा है जो पृष्ठ एक उदाहरण में बनाए रख सकता है।

SO शिकायत कर रहा था कि हमारी टिप्पणी थ्रेड थोड़ी देर हो रही थी। पहले इन चीजों को आजमाएं और अगर यह मदद करता है तो मुझे बताएं।

+0

डीबग कोड ने मदद की है। संदर्भों का ट्रैक रखने के साथ चीजें बहुत बेहतर हैं और कभी-कभी WebGLDebugUtils.resetToInitialS के साथ उनमें से सभी को साफ़ करती हैं टेट (ग्ल) ;, फिर कैनवस हटाएं, फिर संदर्भ हटा दें। – user2089247

+1

वह लिंक टूटा हुआ है, लेकिन कोड भी https://code.google.com/p/webglsamples/source/browse/khronos/webgl-debug.js?name=211f7fbdc9&r=211f7fbdc9752db2540432c91f6ec266879d88d4#267 पर होस्ट किया गया है – orlade