سؤال

هل يجب علي تنظيف جميع العارضات، القوام، (الهندسة)، وهلم جرا باليد عبر وظائف GLDELETE *، أو احصل على GPU MEM تحريرها تلقائيا عند خروج / تعطل برنامجي؟

ملاحظة: يشير GPU MEM إلى الذاكرة المخصصة في بطاقة رسومات مخصصة، وليس ذاكرة وحدة المعالجة المركزية.

هل كانت مفيدة؟

المحلول

في السياق، كل شيء آخر محلي للسياق (ما لم تكن قد قمت بتمكين مشاركة قائمة العرض) وسوف تذهب إلى جانبها.

نصائح أخرى

كما ذكر آخرون، يجب على نظام التشغيل الخاص بك (بالتعاون مع مدير موارد برنامج التشغيل) إطلاق الموارد. هذا هو ما هي أنظمة تشغيل ل. تجدر الإشارة إلى أن هذا لا علاقة له مع OpenGL، ولكنه شيء جزء من ميثاق أنظمة تشغيل تصرفية بشكل جيد وبرامج التشغيل المرتبطة بها. نظام التشغيل هناك للتعامل مع الكل موارد النظام. OpenGL منها فقط ولكن مجموعة فرعية منها، وهي لا تختلف عنها، كما يقول مقبض ملف. الآن للحصول على مزيد من الخرسانة، يجب عليك تحديد أي نظام تشغيل تهتم به.

راجع للشغل، هذا هو المكان الذي اتخذته مع إجابة Chrisf. لا ينبغي أن يكون الأمر متروك للسائق لتحديد أنه يحتاج إلى القيام بالتنظيف. سيكون لدى نماذج برنامج تشغيل OS واجهة واضحة بين برنامج تشغيل OpenGL OpenDGL OptGL (لا ينبغي ألا يقوم بتخصيص موارد GFX الفعلي، لأنه مشترك في الجهاز)، وهو نظام التشغيل (الذي يوفر مكافئ مكالمات النظام لتخصيص الموارد) و برنامج تشغيل وضع kernel (هو مجرد هناك لتنفيذ أوامر نظام التشغيل بطريقة متوافقة مع GPU). هذا هو على الأقل حالة مع نماذج WIN2K و WDDM.

لذلك ... إذا تعطلت العملية الخاصة بك أو تنتهي، في هذه النماذج، إنها مسؤولية نظام التشغيل لاستدعاء برنامج تشغيل وضع Kernel لتحرير جميع الموارد المرتبطة بالعملية.

الآن، سواء كنت ينبغي أم لا حقا شيء يشبه القليل من طلب علامات التبويب أو المسافات في التعليمات البرمجية المصدرية. مختلف الناس لديهم معتقدات مختلفة هنا. "ستفعل نظام التشغيل ذلك على أي حال، الإقلاع عن التدخين فورا هو تجربة مستخدم نهائية أفضل" مقابل "أريد أن أعرف ما إذا كنت تسريب الذاكرة لأنه إذا كان برنامجي يمتد طويلا، فأنا لا أريد حقا أن أصاب أخطاء Oom . أفضل طريقة للقيام بذلك هي أن تكون خالية من التسرب طوال الوقت "هي الخطوط الرئيسية 2 التي أدركها.

عند خروج البرنامج (أو تعطل)، يجب إطلاق أي ذاكرة يتم تخصيصها حاليا في نهاية المطاف بنفس الطريقة التي عادة ما يتم تحرير الذاكرة الرئيسية عند خروج البرنامج. قد يكون الأمر بعض الوقت قبل أن يدرك GPU "أن الذاكرة متاحة للاستخدام مرة أخرى.

ومع ذلك، يجب ألا تعتمد على هذا السلوك لأنه قد يعتمد على كيفية تنفيذ برامج تشغيل بطاقات الرسومات. من الأفضل بكثير إجراء مكالمات تنظيف واضحة عند (كمبرمج) تعرف أنك لن تحتاج إلى هذه الذاكرة مرة أخرى.

سيتم إصدار جميع موارد GPU الخاصة بك عند خروج البرنامج الخاص بك. طريقة سهلة لاختبارها هي عدم حذف الأشياء، وتشغيل تطبيقك مرارا وتكرارا لمعرفة ما إذا كان يفشل في التخصيصات بعد بعض التكرارات.

في OpenGL، لا توجد ذاكرة لتخزين معلومات الرسم. هنا، عندما نقوم بتنفيذ برنامج OpenGL، فإن هذا الوقت استدعاء طريقة الإطار السحب يتصل بالتتابع. على أي حال، إذا رسمنا سطر أو دائرة دائرية، في أي وقت تتميز طريقة الإطار السحب لرسم في مكان محدد. ولكن OpenGL لا يخزن هذا الخط في الذاكرة. في أي وقت، رسم لها فقط. ولكن، عندما رأينا، هذا الخط مرهن بنجاح.

على سبيل المثال: في Android OpenGL ES2.0 استخدمت طريقة عمل مصطلح REDENDER داخل الفئة الداخلية (طريقة رسم داخلية) لرسم الخطوط أو الدوائر، إلخ. لقد استخدمت برنامج OpenGL ES2.0 هذا في تطوير تطبيقات AutoCAD Android .. إذا كنت ترغب في مسح تستخدم خطوط Dawned هذه الطريقة في Class Renderer داخل OndrawFrame Method Gles20.glcleascolor (0.0F، 0.0F، 0.0F، 1.0F)؛ gles20.glclear (gles20.gl_color_buffer_bit)؛ gles20.glclear (gles20.gl_color_buffer_bit | gles20.gl_depth_buffer_bit)؛

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top