/* * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * * * * * * * * */ package com.sun.prism.es2; import com.sun.prism.es2.GLPixelFormat.Attributes; import java.util.HashMap; class IOSGLFactory extends GLFactory { private static native long nInitialize(int[] attrArr); private static native int nGetAdapterOrdinal(long nativeScreen); private static native int nGetAdapterCount(); private static native boolean nGetIsGL2(long nativeCtxInfo); // Entries must be in lowercase and null string is a wild card private GLGPUInfo preQualificationFilter[] = null; private GLGPUInfo blackList[] = { }; @Override GLGPUInfo[] getPreQualificationFilter() { return preQualificationFilter; } @Override GLGPUInfo[] getBlackList() { return blackList; } @Override GLContext createGLContext(long nativeCtxInfo) { return new IOSGLContext(nativeCtxInfo); } @Override GLContext createGLContext(GLDrawable drawable, GLPixelFormat pixelFormat, GLContext shareCtx, boolean vSyncRequest) { GLContext glassCtx = new IOSGLContext(drawable, pixelFormat, shareCtx, vSyncRequest); GLContext prismCtx = new IOSGLContext(drawable, pixelFormat, shareCtx, vSyncRequest); // NOTE: glassCtx isn't the prism rendering context. This glassCtx is created // and passed to Glass; prism never needs to switch or access it. // NOTE: By Prism design, we should pass in glassCtx to glass. However due to IOS // native code was done differently then its MacOS implementation. We will need to pass // in prismCtx since we don't have the resources to make the corresponding IOS change. HashMap devDetails = (HashMap) ES2Pipeline.getInstance().getDeviceDetails(); devDetails.put("contextPtr", prismCtx.getNativeHandle()); return prismCtx; } @Override GLDrawable createDummyGLDrawable(GLPixelFormat pixelFormat) { return new IOSGLDrawable(pixelFormat); } @Override GLDrawable createGLDrawable(long nativeWindow, GLPixelFormat pixelFormat) { return new IOSGLDrawable(nativeWindow, pixelFormat); } @Override GLPixelFormat createGLPixelFormat(long nativeScreen, Attributes attributes) { return new IOSGLPixelFormat(nativeScreen, attributes); } @Override boolean initialize(Class psClass, Attributes attrs) { // holds the list of attributes to be translated for native call int attrArr[] = new int[GLPixelFormat.Attributes.NUM_ITEMS]; attrArr[GLPixelFormat.Attributes.RED_SIZE] = attrs.getRedSize(); attrArr[GLPixelFormat.Attributes.GREEN_SIZE] = attrs.getGreenSize(); attrArr[GLPixelFormat.Attributes.BLUE_SIZE] = attrs.getBlueSize(); attrArr[GLPixelFormat.Attributes.ALPHA_SIZE] = attrs.getAlphaSize(); attrArr[GLPixelFormat.Attributes.DEPTH_SIZE] = attrs.getDepthSize(); attrArr[GLPixelFormat.Attributes.DOUBLEBUFFER] = attrs.isDoubleBuffer() ? 1 : 0; attrArr[GLPixelFormat.Attributes.ONSCREEN] = attrs.isOnScreen() ? 1 : 0; // return the context info object create on the default screen nativeCtxInfo = nInitialize(attrArr); System.err.println(" initialize() returns " + nativeCtxInfo); if (nativeCtxInfo == 0) { // current pipe doesn't support this pixelFormat request return false; } else { gl2 = nGetIsGL2(nativeCtxInfo); return true; } } @Override int getAdapterCount() { return nGetAdapterCount(); } @Override int getAdapterOrdinal(long nativeScreen) { return nGetAdapterOrdinal(nativeScreen); } @Override void updateDeviceDetails(HashMap deviceDetails) { deviceDetails.put("shareContextPtr", getShareContext().getNativeHandle()); } }