blob: 261363f42e2b5d569ece015971d17059a9ed114e [file]
/*
* Copyright (c) 2019, 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.
*/
#ifndef MTLSurfaceDataBase_h_Included
#define MTLSurfaceDataBase_h_Included
#include "java_awt_image_AffineTransformOp.h"
#include "sun_java2d_pipe_hw_AccelSurface.h"
#include "SurfaceData.h"
#include "Trace.h"
/**
* The MTLSDOps structure describes a native Metal surface and contains all
* information pertaining to the native surface. Some information about
* the more important/different fields:
*
* void* privOps;
* Pointer to native-specific (Metal) SurfaceData info, such as the
* native Drawable handle and GraphicsConfig data.
*
* jint drawableType;
* The surface type; can be any one of the surface type constants defined
* below (MTLSD_WINDOW, MTLSD_TEXTURE, etc).
*
* jboolean isOpaque;
* If true, the surface should be treated as being fully opaque. If
* the underlying surface (e.g. MTLTexture/MTLBuffer) has an alpha channel and
* isOpaque is true, then we should take appropriate action to ensure that the
* surface remains fully opaque.
*
* jint width/height;
* The cached surface bounds. For offscreen surface types (
* MTLSD_TEXTURE, MTLSD_RT_TEXTURE etc.) these values must remain constant.
* Onscreen window surfaces (MTLSD_WINDOW, MTLSD_FLIP_BACKBUFFER, etc.) may
* have their bounds changed in response to a programmatic or user-initiated
* event, so these values represent the last known dimensions. To determine the
* true current bounds of this surface, query the native Drawable through the
* privOps field.
*
* void* pTexture;
* The texture object handle, as generated by MTLTextureDescriptor(). If this
* value is null, the texture has not yet been initialized.
*
* void* pStencilTexture;
* The byte buffer stencil mask used in rendering Metal rendering pass.
*/
typedef struct {
SurfaceDataOps sdOps;
void* privOps;
jobject graphicsConfig;
jint drawableType;
jboolean isOpaque;
jint width;
jint height;
void* pTexture;
void* pStencilData; // stencil data to be rendered to this buffer
void* pStencilTexture; // stencil texture byte buffer stencil mask used in main rendering
} BMTLSDOps;
#define MTLSD_UNDEFINED sun_java2d_pipe_hw_AccelSurface_UNDEFINED
#define MTLSD_WINDOW sun_java2d_pipe_hw_AccelSurface_WINDOW
#define MTLSD_TEXTURE sun_java2d_pipe_hw_AccelSurface_TEXTURE
#define MTLSD_FLIP_BACKBUFFER sun_java2d_pipe_hw_AccelSurface_FLIP_BACKBUFFER
#define MTLSD_RT_TEXTURE sun_java2d_pipe_hw_AccelSurface_RT_TEXTURE
/**
* These are shorthand names for the filtering method constants used by
* image transform methods.
*/
#define MTLSD_XFORM_DEFAULT 0
#define MTLSD_XFORM_NEAREST_NEIGHBOR \
java_awt_image_AffineTransformOp_TYPE_NEAREST_NEIGHBOR
#define MTLSD_XFORM_BILINEAR \
java_awt_image_AffineTransformOp_TYPE_BILINEAR
/**
* The SurfaceRasterFlags structure contains information about raster (of some MTLTexture):
*
* jboolean isOpaque;
* If true, indicates that this pixel format hasn't alpha component (and values of this component can contain garbage).
*
* jboolean isPremultiplied;
* If true, indicates that this pixel format contains color components that have been pre-multiplied by their
* corresponding alpha component.
*/
typedef struct {
jboolean isOpaque;
jboolean isPremultiplied;
} SurfaceRasterFlags;
/**
* Exported methods.
*/
jint MTLSD_Lock(JNIEnv *env,
SurfaceDataOps *ops, SurfaceDataRasInfo *pRasInfo,
jint lockflags);
void MTLSD_GetRasInfo(JNIEnv *env,
SurfaceDataOps *ops, SurfaceDataRasInfo *pRasInfo);
void MTLSD_Unlock(JNIEnv *env,
SurfaceDataOps *ops, SurfaceDataRasInfo *pRasInfo);
void MTLSD_Dispose(JNIEnv *env, SurfaceDataOps *ops);
void MTLSD_Delete(JNIEnv *env, BMTLSDOps *mtlsdo);
jint MTLSD_NextPowerOfTwo(jint val, jint max);
#endif /* MTLSurfaceDataBase_h_Included */