android HW النشاط المعجل - كيفية الحصول على حد حجم نسيج OpenGL؟




2 Answers

هناك طريقة أخرى للحصول على الحد الأقصى للحجم المسموح به هو التكرار خلال جميع تكوينات EGL10 وتتبع الحجم الأكبر.

public static int getMaxTextureSize() {
    // Safe minimum default size
    final int IMAGE_MAX_BITMAP_DIMENSION = 2048;

    // Get EGL Display
    EGL10 egl = (EGL10) EGLContext.getEGL();
    EGLDisplay display = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);

    // Initialise
    int[] version = new int[2];
    egl.eglInitialize(display, version);

    // Query total number of configurations
    int[] totalConfigurations = new int[1];
    egl.eglGetConfigs(display, null, 0, totalConfigurations);

    // Query actual list configurations
    EGLConfig[] configurationsList = new EGLConfig[totalConfigurations[0]];
    egl.eglGetConfigs(display, configurationsList, totalConfigurations[0], totalConfigurations);

    int[] textureSize = new int[1];
    int maximumTextureSize = 0;

    // Iterate through all the configurations to located the maximum texture size
    for (int i = 0; i < totalConfigurations[0]; i++) {
        // Only need to check for width since opengl textures are always squared
        egl.eglGetConfigAttrib(display, configurationsList[i], EGL10.EGL_MAX_PBUFFER_WIDTH, textureSize);

        // Keep track of the maximum texture size
        if (maximumTextureSize < textureSize[0])
            maximumTextureSize = textureSize[0];
    }

    // Release
    egl.eglTerminate(display);

    // Return largest texture size found, or default
    return Math.max(maximumTextureSize, IMAGE_MAX_BITMAP_DIMENSION);
}

من خلال هذا الاختبار ، يمكن الاعتماد عليه بشكل كبير ولا يتطلب منك إنشاء مثيل. من حيث الأداء ، استغرق هذا 18 مللي ثانية للتنفيذ في بلادي 2 و 4 ميلي ثانية فقط على G3 الخاص بي.

android android-3.0-honeycomb hardware-acceleration

أحاول تمكين تسريع الأب في قرص العسل ، وعرض بعض الصور النقطية على قماش. كل شيء يعمل بشكل جيد ، ولكن بالنسبة للصور النقطية الكبيرة (> 2048 في بُعد واحد) ، أحصل على خطأ في السجل:

OpenGLRenderer: الصورة النقطية كبيرة جدا ليتم تحميلها في نسيج

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

سؤالي هو: كيفية تحديد حجم النسيج الأقصى المتاح بسهولة لرسم الصورة النقطية بواسطة الأجهزة. يبدو أن 2048 حدًا على جهازي ، ولكن قد يكون مختلفًا عن الأجهزة المختلفة.

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




وفقا للمواصفات ، استدعاء glGetIntegerv مع GL_MAX_TEXTURE_SIZE .

ترجع المعلمات GL_MAX_TEXTURE_SIZE قيمة واحدة. تعطي القيمة تقديراً تقريبياً للملمس الأكبر الذي يمكن لـ GL معالجته. يجب أن تكون القيمة 64 على الأقل.

http://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml






Related