diff options
Diffstat (limited to 'src/share/native/sun/java2d/ShaderList.h')
-rw-r--r-- | src/share/native/sun/java2d/ShaderList.h | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/src/share/native/sun/java2d/ShaderList.h b/src/share/native/sun/java2d/ShaderList.h new file mode 100644 index 000000000..f46190fcd --- /dev/null +++ b/src/share/native/sun/java2d/ShaderList.h @@ -0,0 +1,85 @@ +/* + * Copyright 2007-2008 Sun Microsystems, Inc. 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. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +#ifndef ShaderList_h_Included +#define ShaderList_h_Included + +#ifdef __cplusplus +extern "C" { +#endif + +#include "jni.h" +#include "jlong.h" + +typedef void (ShaderDisposeFunc)(jlong programID); + +/** + * The following structures are used to maintain a list of fragment program + * objects and their associated attributes. Each logical shader (e.g. + * RadialGradientPaint shader, ConvolveOp shader) can have a number of + * different variants depending on a number of factors, such as whether + * antialiasing is enabled or the current composite mode. Since the number + * of possible combinations of these factors is in the hundreds, we need + * some way to create fragment programs on an as-needed basis, and also + * keep them in a limited sized cache to avoid creating too many objects. + * + * The ShaderInfo structure keeps a reference to the fragment program's + * handle, as well as some other values that help differentiate one ShaderInfo + * from another. ShaderInfos can be chained together to form a linked list. + * + * The ShaderList structure acts as a cache for ShaderInfos, placing + * most-recently used items at the front, and removing items from the + * cache when its size exceeds the "maxItems" limit. + */ +typedef struct _ShaderInfo ShaderInfo; + +typedef struct { + ShaderInfo *head; + ShaderDisposeFunc *dispose; + jint maxItems; +} ShaderList; + +struct _ShaderInfo { + ShaderInfo *next; + jlong programID; + jint compType; + jint compMode; + jint flags; +}; + +void ShaderList_AddProgram(ShaderList *programList, + jlong programID, + jint compType, jint compMode, + jint flags); +jlong ShaderList_FindProgram(ShaderList *programList, + jint compType, jint compMode, + jint flags); +void ShaderList_Dispose(ShaderList *programList); + +#ifdef __cplusplus +}; +#endif + +#endif /* ShaderList_h_Included */ |