--- old/src/java.desktop/macosx/classes/sun/java2d/metal/MetalLayer.java 2019-06-19 14:03:14.000000000 +0530 +++ /dev/null 2019-06-19 14:03:14.000000000 +0530 @@ -1,173 +0,0 @@ -/* - * Copyright (c) 2019, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package sun.java2d.metal; - -import sun.lwawt.LWWindowPeer; -import sun.lwawt.macosx.CFRetainedResource; -import sun.java2d.SurfaceData; -import sun.java2d.NullSurfaceData; - -import java.awt.*; - -import sun.awt.CGraphicsConfig; -import sun.java2d.metal.MetalGraphicsConfig; - -public class MetalLayer extends CFRetainedResource { - - private native long nativeCreateLayer(); - private native long nativeInitLayer(long deviceInfo, long layer); - //private native long nativeValidate(long layer, long view); - //private native long nativeDraw(long layer); - private static native void validate(long layerPtr, MetalSurfaceData msd); - private static native void nativeSetScale(long layerPtr, double scale); - //private static native void nativeSetScale(long layerPtr, double scale); - //private static native void blitTexture(long layerPtr); - - private LWWindowPeer peer; - private int scale = 1; - private SurfaceData surfaceData; // represents intermediate buffer (texture) - private long pNativeLayer; - - public MetalLayer(LWWindowPeer peer) { - super(0, true); - - pNativeLayer = nativeCreateLayer(); - setPtr(pNativeLayer); - this.peer = peer; - - // TODO : No need to initialize layer here, it will be done - // when we initialize surface in MetalSurfaceData. - MetalGraphicsConfig gc = (MetalGraphicsConfig)getGraphicsConfiguration(); - nativeInitLayer(gc.pConfigInfo, pNativeLayer); - } - - public long getPointer() { - return ptr; - } - - - public Rectangle getBounds() { - return peer.getBounds(); - } - - public GraphicsConfiguration getGraphicsConfiguration() { - return peer.getGraphicsConfiguration(); - } - - public boolean isOpaque() { - return !peer.isTranslucent(); - } - - public int getTransparency() { - return isOpaque() ? Transparency.OPAQUE : Transparency.TRANSLUCENT; - } - - public Object getDestination() { - return peer.getTarget(); - } - - public SurfaceData replaceSurfaceData() { - if (getBounds().isEmpty()) { - surfaceData = NullSurfaceData.theInstance; - return surfaceData; - } - - // the layer redirects all painting to the buffer's graphics - // and blits the buffer to the layer surface (in drawInCGLContext callback) - CGraphicsConfig gc = (CGraphicsConfig)getGraphicsConfiguration(); - surfaceData = gc.createSurfaceData(this); - - setScale(gc.getDevice().getScaleFactor()); - - // the layer holds a reference to the buffer, which in - // turn has a reference back to this layer - if (surfaceData instanceof MetalSurfaceData) { - validate((MetalSurfaceData)surfaceData); - } - - return surfaceData; - - } - - public SurfaceData getSurfaceData() { - return surfaceData; - } - - /*public void validate(long viewPtr) { - //OGLRenderQueue rq = OGLRenderQueue.getInstance(); - //rq.lock(); - try { - execute(ptr -> nativeValidate(ptr, viewPtr)); - } finally { - // rq.unlock(); - } - }*/ - - public void validate(final MetalSurfaceData metalsd) { - MetalRenderQueue rq = MetalRenderQueue.getInstance(); - rq.lock(); - try { - execute(ptr -> validate(ptr, metalsd)); - } finally { - rq.unlock(); - } - } - - @Override - public void dispose() { - // break the connection between the layer and the buffer - validate(null); - super.dispose(); - } - - private void setScale(final int _scale) { - if (scale != _scale) { - scale = _scale; - execute(ptr -> nativeSetScale(ptr, scale)); - } - } - - // ---------------------------------------------------------------------- - // NATIVE CALLBACKS : TODO: check how should this be done in Metal? - // ---------------------------------------------------------------------- - - public void drawInMetalContext(long viewPtr) { - // tell the flusher thread not to update the intermediate buffer - // until we are done blitting from it - /*OGLRenderQueue rq = OGLRenderQueue.getInstance(); - rq.lock(); - try { - execute(ptr -> blitTexture(ptr)); - } finally { - rq.unlock(); - }*/ - System.out.println("drawInMetalContext method invoked"); - - //nativeDraw(pNativeLayer); - - } - -}