All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sun.prism.ResourceFactory Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 2009, 2021, 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 com.sun.prism;

import com.sun.prism.Texture.WrapMode;
import com.sun.prism.impl.TextureResourcePool;
import com.sun.prism.shape.ShapeRep;

public interface ResourceFactory extends GraphicsResource {

    /**
     * Returns whether this resource factory has been disposed.
     * If this resource factory has been disposed, it is no longer valid and
     * will need to be recreated before any new resources can be created.
     * Any attempt to create a resource will be ignored and will return null.
     *
     * @return true if this resource factory has been disposed.
     */
    public boolean isDisposed();

    /**
     * Returns status of this graphics device, possibly reinitializing it.
     * If the device is not ready the createRTTexture and
     * present operations will fail.
     * As long as the device has not been disposed, creation of shaders and
     * regular textures will succeed and return valid resources.
     * All hardware resources (RenderTargets and SwapChains) have to be recreated
     * after a device-lost event notification.
     *
     * NOTE: since this method can reinitialize the graphics device if it has
     * been released, it should only be called at the start of a rendering pass.
     *
     * @return true if this graphics device is ready for use.
     */
    public boolean isDeviceReady();

    public TextureResourcePool getTextureResourcePool();

    /**
     * Returns a new {@code Texture} containing the pixels from the given
     * image with the indicated texture edge wrap mode.
     * Note that the dimensions of the returned texture may be larger
     * than those of the given image.
     * 

* Equivalent to (but perhaps more efficient than): *


     *     PixelFormat format = image.getPixelFormat();
     *     int w = image.getWidth();
     *     int h = image.getHeight();
     *     Texture tex = createTexture(format, usageHint, wrapMode, w, h);
     *     tex.update(image, 0, 0, w, h);
     * 
* * @param image the pixel data to be uploaded to the new texture * @param usageHint the Dynamic vs. Static nature of the texture data * @param wrapMode the desired edge behavior (clamping vs. wrapping) * @return a new texture */ public Texture createTexture(Image image, Texture.Usage usageHint, Texture.WrapMode wrapMode); /** * Returns a new {@code Texture} containing the pixels from the given * image with the indicated texture edge wrap mode. * Note that the dimensions of the returned texture may be larger * than those of the given image. *

* Equivalent to (but perhaps more efficient than): *


     *     PixelFormat format = image.getPixelFormat();
     *     int w = image.getWidth();
     *     int h = image.getHeight();
     *     Texture tex = createTexture(format, usageHint, wrapMode, w, h, useMipmap);
     *     tex.update(image, 0, 0, w, h);
     * 
* * @param image the pixel data to be uploaded to the new texture * @param usageHint the Dynamic vs. Static nature of the texture data * @param wrapMode the desired edge behavior (clamping vs. wrapping) * @param useMipmap the flag indicates should texture be created with mipmap * @return a new texture */ public Texture createTexture(Image image, Texture.Usage usageHint, Texture.WrapMode wrapMode, boolean useMipmap); /** * Returns a new {@code Texture} with the given format and edge wrapping * support. Note that the dimensions of the returned texture may be larger * than those requested and the wrap mode may be a simulated version of * the type requested. * * @param formatHint intended pixel format of the data to be stored * in this texture * @param usageHint the Dynamic vs. Static nature of the texture data * @param wrapMode intended wrap mode to be used for the texture * @param w width of the content in the texture * @param h height of the content in the texture * @return texture most appropriate for the given intended format, wrap * mode and dimensions */ public Texture createTexture(PixelFormat formatHint, Texture.Usage usageHint, Texture.WrapMode wrapMode, int w, int h); /** * Returns a new {@code Texture} with the given format and edge wrapping * support. Note that the dimensions of the returned texture may be larger * than those requested and the wrap mode may be a simulated version of * the type requested. * * @param formatHint intended pixel format of the data to be stored * in this texture * @param usageHint the Dynamic vs. Static nature of the texture data * @param wrapMode intended wrap mode to be used for the texture * @param w width of the content in the texture * @param h height of the content in the texture * @param useMipmap the flag indicates should texture be created with mipmap * @return texture most appropriate for the given intended format, wrap * mode and dimensions */ public Texture createTexture(PixelFormat formatHint, Texture.Usage usageHint, Texture.WrapMode wrapMode, int w, int h, boolean useMipmap); /** * Returns a new {@code Texture} that can contain the video image as specified * in the provided {@code MediaFrame}. Note that padding is almost implicit * since this method has to accommodate the line strides of each plane. Also * due to renderer limitations, some format conversion may be necessary so * the texture format may end up being different from the video image format. * * @param frame the video image that we need to create a new texture for * @return texture most appropriate for the given video image. */ public Texture createTexture(MediaFrame frame); /** * Returns a {@code Texture} for the given image set up to use or * simulate the indicated wrap mode. * If no texture could be found in the cache, this method will create a * new texture and put it in the cache before returning it. * NOTE: the caller of this method should not hold a reference to the * cached texture beyond its immediate needs since the cache may be * cleared at any time. * * @param image the pixel data to be uploaded if the texture is new or * needs new fringe pixels to simulate a new wrap mode * @param wrapMode the mode that describes the behavior for samples * outside the content area * @return a cached texture */ public Texture getCachedTexture(Image image, Texture.WrapMode wrapMode); /** * Returns a {@code Texture} for the given image set up to use or * simulate the indicated wrap mode. * If no texture could be found in the cache, this method will create a * new texture and put it in the cache before returning it. * NOTE: the caller of this method should not hold a reference to the * cached texture beyond its immediate needs since the cache may be * cleared at any time. * * @param image the pixel data to be uploaded if the texture is new or * needs new fringe pixels to simulate a new wrap mode * @param wrapMode the mode that describes the behavior for samples * outside the content * @param useMipmap the flag indicates should mipmapping be used for this * texture * @return a cached texture */ public Texture getCachedTexture(Image image, Texture.WrapMode wrapMode, boolean useMipmap); /** * Returns true if the given {@code PixelFormat} is supported; otherwise * returns false. *

* Note that the following formats are guaranteed to be supported * across all devices: *


     *     BYTE_RGB
     *     BYTE_RGBA_PRE
     *     BYTE_GRAY
     *     BYTE_ALPHA
     * 
*

* Support for the other formats depends on the capabilities of the * device. Be sure to call this method before attempting to create * a {@code Texture} with a non-standard format and plan to have an * alternate codepath if the given format is not supported. * * @param format the {@code PixelFormat} to test * @return true if the given format is supported; false otherwise */ public boolean isFormatSupported(PixelFormat format); /** * Returns true iff the indicated {@link WrapMode wrap mode} is directly * supported (i.e. not simulated) by the underlying pipeline and platform. * * @param mode the desired {@code WrapMode} * @return true iff the wrap mode is supported and not simulated */ public boolean isWrapModeSupported(WrapMode mode); /** * Returns the maximum supported texture dimension for this device. * For example, if this method returns 2048, it means that textures * larger than 2048x2048 cannot be created. * * @return the maximum supported texture dimension */ public int getMaximumTextureSize(); public int getRTTWidth(int w, Texture.WrapMode wrapMode); public int getRTTHeight(int h, Texture.WrapMode wrapMode); public Texture createMaskTexture(int width, int height, Texture.WrapMode wrapMode); public Texture createFloatTexture(int width, int height); public RTTexture createRTTexture(int width, int height, Texture.WrapMode wrapMode); public RTTexture createRTTexture(int width, int height, Texture.WrapMode wrapMode, boolean msaa); /** * A Texture may have been obtained from a different resource factory. * @param tex the texture to check. * @return whether this texture is compatible. */ public boolean isCompatibleTexture(Texture tex); public Presentable createPresentable(PresentableState pState); public ShapeRep createPathRep(); public ShapeRep createRoundRectRep(); public ShapeRep createEllipseRep(); public ShapeRep createArcRep(); public void addFactoryListener(ResourceFactoryListener l); public void removeFactoryListener(ResourceFactoryListener l); public void setRegionTexture(Texture texture); public Texture getRegionTexture(); public void setGlyphTexture(Texture texture); public Texture getGlyphTexture(); public boolean isSuperShaderAllowed(); /* * 3D stuff */ public PhongMaterial createPhongMaterial(); public MeshView createMeshView(Mesh mesh); public Mesh createMesh(); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy