هل من الممكن أن تحقق ما إذا كان نسيج برنامج OpenGL ES على اي فون قد يتم deallocated حقا؟

StackOverflow https://stackoverflow.com/questions/1420794

سؤال

والدليل تعليمات فقط منك أن تكتب:

glDeleteTextures(1, &GLtexture);

ويدعي أنه سيتم حذف الملمس. اي فون لديها ذاكرة النادرة وأريد التأكد من أن هذه القوام يتم الافراج حقا.

والصك التسريبات لا يمكن الكشف عن هذا، وبصراحة، أنا قلق قليلا. أريد حقا أن تأكد من أن القوام ولت حقا.

وشكرا لكم.

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

المحلول

لا يتم التعامل مع القوام بواسطة وقت التشغيل الكائنات ج، لذلك التسريبات لا يعرف عنهم شيئا. لديك لاستخدام أداة أخرى.

في كسكودي بدء مشروع جديد باستخدام قالب برنامج OpenGL. بحث الطريقة التي التحديثات / توجه مشهد وإضافة هذا الرمز إلى نهايته:

static int tick = -1;
static GLuint tex[5];

if (tick++ < 0)
    for (int f = 0; f < 5; f++)
        tex[f] = 0;

tick = tick % 5;
if (tex[tick]) {
    glDeleteTextures(1, &tex[tick]);
    tex[tick] = 0;
} else {
    glGenTextures(1, &tex[tick]);
    glBindTexture(GL_TEXTURE_2D, tex[tick]);
    char *mem = malloc(1024 * 1024 * 4);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
        1024, 1024, 0, GL_RGBA, GL_UNSIGNED_BYTE, mem);
    free(mem);
}

والرمز يولد ويدمر خمسة القوام باستخدام برنامج OpenGL أوامر. بناء عليه وتشغيله مرة واحدة على الجهاز الخاص بك للتأكد من تثبيته. لا تقلق بشأن الأزيز.

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

في بلدي التجارب، هذا المثال يستهلك بين 25MB إلى 3MB تبعا لحظة أخذ العينات الذاكرة. هذا هو الحال مع اي فون الجيل الثاني وSDK 3.1. إذا كان لديك SDK الإصدار 2.x لديك للبحث عن حجم كائن GART المقيم في رصد برنامج OpenGL العادي. انظر HTTP: // blog.zincroe.com/2009/04/how-to-check-iphone-texture-memory-usage-with-instruments/ للإشارة أخرى.

في أي حال، فإن الذاكرة القفز صعودا وهبوطا يثبت أن glDeleteTexture () لا عملها المعلن عنها.

نصائح أخرى

والتفاف المكالمات إلى glDeleteTextures(int, int*) في وظيفة الخاصة بك التي يحتفظ جدول التخصيص.

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