예제 #1
0
  private SharedResource createEGLSharedResourceImpl(AbstractGraphicsDevice adevice) {
    final boolean madeCurrentES1;
    final boolean madeCurrentES2;
    final boolean madeCurrentES3;
    boolean[] hasPBufferES1 = new boolean[] {false};
    boolean[] hasPBufferES3ES2 = new boolean[] {false};
    // EGLContext[] eglCtxES1 = new EGLContext[] { null };
    // EGLContext[] eglCtxES2 = new EGLContext[] { null };
    GLRendererQuirks[] rendererQuirksES1 = new GLRendererQuirks[] {null};
    GLRendererQuirks[] rendererQuirksES3ES2 = new GLRendererQuirks[] {null};
    int[] ctpES1 = new int[] {-1};
    int[] ctpES3ES2 = new int[] {-1};

    if (DEBUG) {
      System.err.println("EGLDrawableFactory.createShared(): device " + adevice);
    }

    if (null != eglES1DynamicLookupHelper) {
      madeCurrentES1 =
          mapAvailableEGLESConfig(adevice, 1, hasPBufferES1, rendererQuirksES1, ctpES1);
    } else {
      madeCurrentES1 = false;
    }
    if (null != eglES2DynamicLookupHelper) {
      madeCurrentES3 =
          mapAvailableEGLESConfig(adevice, 3, hasPBufferES3ES2, rendererQuirksES3ES2, ctpES3ES2);
      if (madeCurrentES3) {
        // Only support highest - FIXME: Proper ES2/ES3 profile selection
        madeCurrentES2 = false;
      } else {
        madeCurrentES2 =
            mapAvailableEGLESConfig(adevice, 2, hasPBufferES3ES2, rendererQuirksES3ES2, ctpES3ES2);
      }
    } else {
      madeCurrentES2 = false;
      madeCurrentES3 = false;
    }

    if (!EGLContext.getAvailableGLVersionsSet(adevice)) {
      // Even though we override the non EGL native mapping intentionally,
      // avoid exception due to double 'set' - carefull exception of the rule.
      EGLContext.setAvailableGLVersionsSet(adevice);
    }
    if (hasX11) {
      handleDontCloseX11DisplayQuirk(rendererQuirksES1[0]);
      handleDontCloseX11DisplayQuirk(rendererQuirksES3ES2[0]);
    }
    final SharedResource sr =
        new SharedResource(
            defaultDevice,
            madeCurrentES1,
            hasPBufferES1[0],
            rendererQuirksES1[0],
            ctpES1[0],
            madeCurrentES2,
            madeCurrentES3,
            hasPBufferES3ES2[0],
            rendererQuirksES3ES2[0],
            ctpES3ES2[0]);

    synchronized (sharedMap) {
      sharedMap.put(adevice.getUniqueID(), sr);
    }
    if (DEBUG) {
      System.err.println(
          "EGLDrawableFactory.createShared: devices: queried nativeTK "
              + QUERY_EGL_ES_NATIVE_TK
              + ", adevice "
              + adevice
              + ", defaultDevice "
              + defaultDevice);
      System.err.println(
          "EGLDrawableFactory.createShared: context ES1: "
              + madeCurrentES1
              + ", hasPBuffer "
              + hasPBufferES1[0]);
      System.err.println(
          "EGLDrawableFactory.createShared: context ES2: "
              + madeCurrentES2
              + ", hasPBuffer "
              + hasPBufferES3ES2[0]);
      System.err.println(
          "EGLDrawableFactory.createShared: context ES3: "
              + madeCurrentES3
              + ", hasPBuffer "
              + hasPBufferES3ES2[0]);
      dumpMap();
    }
    return sr;
  }