diff options
Diffstat (limited to 'src/native/ogl/Attributes.c')
-rw-r--r-- | src/native/ogl/Attributes.c | 3716 |
1 files changed, 0 insertions, 3716 deletions
diff --git a/src/native/ogl/Attributes.c b/src/native/ogl/Attributes.c deleted file mode 100644 index fbd536f..0000000 --- a/src/native/ogl/Attributes.c +++ /dev/null @@ -1,3716 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 1999-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. - * - * $Revision$ - * $Date$ - * $State$ - */ - -/* j3dsys.h needs to be included before any other include files to suppres VC warning */ -#include "j3dsys.h" - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <math.h> -#include <jni.h> - -#include "gldefs.h" - -#ifdef DEBUG -/* Uncomment the following for VERBOSE debug messages */ -/* #define VERBOSE */ -#endif /* DEBUG */ - -/* - * Screen door transparency table. - */ -const unsigned int screen_door[17][32] = { -/* 0 / 16 */ - { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - }, -/* 1 / 16 */ - { - 0x00000000, 0x22222222, 0x00000000, 0x00000000, - 0x00000000, 0x22222222, 0x00000000, 0x00000000, - 0x00000000, 0x22222222, 0x00000000, 0x00000000, - 0x00000000, 0x22222222, 0x00000000, 0x00000000, - 0x00000000, 0x22222222, 0x00000000, 0x00000000, - 0x00000000, 0x22222222, 0x00000000, 0x00000000, - 0x00000000, 0x22222222, 0x00000000, 0x00000000, - 0x00000000, 0x22222222, 0x00000000, 0x00000000, - }, -/* 2 / 16 */ - { - 0x00000000, 0x22222222, 0x00000000, 0x88888888, - 0x00000000, 0x22222222, 0x00000000, 0x88888888, - 0x00000000, 0x22222222, 0x00000000, 0x88888888, - 0x00000000, 0x22222222, 0x00000000, 0x88888888, - 0x00000000, 0x22222222, 0x00000000, 0x88888888, - 0x00000000, 0x22222222, 0x00000000, 0x88888888, - 0x00000000, 0x22222222, 0x00000000, 0x88888888, - 0x00000000, 0x22222222, 0x00000000, 0x88888888, - }, -/* 3 / 16 */ - { - 0x00000000, 0xaaaaaaaa, 0x00000000, 0x88888888, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0x88888888, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0x88888888, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0x88888888, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0x88888888, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0x88888888, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0x88888888, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0x88888888, - }, -/* 4 / 16 */ - { - 0x00000000, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - }, -/* 5 / 16 */ - { - 0x11111111, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - }, -/* 6 / 16 */ - { - 0x11111111, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - }, -/* 7 / 16 */ - { - 0x55555555, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - }, -/* 8 / 16 */ - { - 0x55555555, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - }, -/* 9 / 16 */ - { - 0x77777777, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - }, -/* 10 / 16 */ - { - 0x77777777, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - }, -/* 11 / 16 */ - { - 0xffffffff, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - }, -/* 12 / 16 */ - { - 0xffffffff, 0xaaaaaaaa, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xffffffff, 0xaaaaaaaa, - }, -/* 13 / 16 */ - { - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xaaaaaaaa, - }, -/* 14 / 16 */ - { - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xeeeeeeee, - }, -/* 15 / 16 */ - { - 0xffffffff, 0xffffffff, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xffffffff, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xffffffff, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xffffffff, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xffffffff, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xffffffff, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xffffffff, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xffffffff, 0xffffffff, 0xeeeeeeee, - }, -/* 16 / 16 */ - { - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - }, -}; - -void -throwAssert(JNIEnv *env, char *str) -{ - jclass rte; - if ((rte = (*env)->FindClass(env, "java/lang/AssertionError")) != NULL) { - (*env)->ThrowNew(env, rte, str); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateLinearFog( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat red, - jfloat green, - jfloat blue, - jdouble fdist, - jdouble bdist) -{ - - float color[3]; -#ifdef VERBOSE - fprintf(stderr, "LinearFog is on: %f %f %f %f %f\n", - red, green, blue, fdist, bdist); -#endif - - color[0] = red; - color[1] = green; - color[2] = blue; - glFogi(GL_FOG_MODE, GL_LINEAR); - glFogfv(GL_FOG_COLOR, color); - glFogf(GL_FOG_START, (float) fdist); - glFogf(GL_FOG_END, (float) bdist); - glEnable(GL_FOG); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateExponentialFog( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat red, - jfloat green, - jfloat blue, - jfloat density) -{ - - float color[3]; -#ifdef VERBOSE - fprintf(stderr, "ExponentialFog is on: %f %f %f %f\n", - red, green, blue, density); -#endif - - color[0] = red; - color[1] = green; - color[2] = blue; - glFogi(GL_FOG_MODE, GL_EXP); - glFogfv(GL_FOG_COLOR, color); - glFogf(GL_FOG_DENSITY, density); - glEnable(GL_FOG); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateModelClip( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint planeNum, - jboolean enableFlag, - jdouble A, - jdouble B, - jdouble C, - jdouble D) -{ - - double equation[4]; - GLenum pl = GL_CLIP_PLANE0 + planeNum; - -#ifdef VERBOSE - fprintf(stderr, "ModelClip is on: %d %d %f %f %f %f\n", - planeNum, enableFlag, A, B, C, D); -#endif - - /* OpenGL clip planes are opposite to J3d clip planes - */ - if (enableFlag) { - equation[0] = -A; - equation[1] = -B; - equation[2] = -C; - equation[3] = -D; - glClipPlane(pl, equation); - glEnable(pl); - } else - glDisable(pl); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setModelViewMatrix( - JNIEnv * env, - jobject obj, - jlong ctxInfo, - jdoubleArray viewMatrix, - jdoubleArray modelMatrix) -{ - jdouble *vmatrix_pointer; - jdouble *mmatrix_pointer; - JNIEnv table = *env; - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - vmatrix_pointer = (jdouble *)(*(table->GetPrimitiveArrayCritical))(env, - viewMatrix , NULL); - mmatrix_pointer = (jdouble *)(*(table->GetPrimitiveArrayCritical))(env, - modelMatrix , NULL); - - - glMatrixMode(GL_MODELVIEW); - - if (ctxProperties->gl13) { - ctxProperties->glLoadTransposeMatrixd(vmatrix_pointer); - ctxProperties->glMultTransposeMatrixd(mmatrix_pointer); - } else { - double v[16]; - double m[16]; - - COPY_TRANSPOSE(vmatrix_pointer, v); - COPY_TRANSPOSE(mmatrix_pointer, m); - - glLoadMatrixd(v); - glMultMatrixd(m); -#ifdef VERBOSE - fprintf(stderr, "\n"); - fprintf(stderr, "Canvas3D.setModelViewMatrix()\n"); - fprintf(stderr, "-----------------------------\n"); - fprintf(stderr, "VIEW : %f %f %f %f\n", v[0], v[4], v[8], v[12]); - fprintf(stderr, " : %f %f %f %f\n", v[1], v[5], v[9], v[13]); - fprintf(stderr, " : %f %f %f %f\n", v[2], v[6], v[10], v[14]); - fprintf(stderr, " : %f %f %f %f\n", v[3], v[7], v[11], v[15]); - fprintf(stderr, "\n"); - fprintf(stderr, "MODEL : %f %f %f %f\n", m[0], m[4], m[8], m[12]); - fprintf(stderr, " : %f %f %f %f\n", m[1], m[5], m[9], m[13]); - fprintf(stderr, " : %f %f %f %f\n", m[2], m[6], m[10], m[14]); - fprintf(stderr, " : %f %f %f %f\n", m[3], m[7], m[11], m[15]); - fprintf(stderr, "\n\n"); -#endif - } - (*(table->ReleasePrimitiveArrayCritical))(env, viewMatrix, - vmatrix_pointer, 0); - (*(table->ReleasePrimitiveArrayCritical))(env, modelMatrix, - mmatrix_pointer, 0); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setProjectionMatrix( - JNIEnv * env, - jobject obj, - jlong ctxInfo, - jdoubleArray projMatrix) -{ - jdouble *matrix_pointer; - JNIEnv table = *env; - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - matrix_pointer = (jdouble *)(*(table->GetPrimitiveArrayCritical))(env, - projMatrix, NULL); - - glMatrixMode(GL_PROJECTION); - - if (ctxProperties->gl13) { - /* - * Invert the Z value in clipping coordinates because OpenGL uses - * left-handed clipping coordinates, while Java3D defines right-handed - * coordinates everywhere. - */ - matrix_pointer[8] *= -1.0; - matrix_pointer[9] *= -1.0; - matrix_pointer[10] *= -1.0; - matrix_pointer[11] *= -1.0; - ctxProperties->glLoadTransposeMatrixd(matrix_pointer); - matrix_pointer[8] *= -1.0; - matrix_pointer[9] *= -1.0; - matrix_pointer[10] *= -1.0; - matrix_pointer[11] *= -1.0; - } else { - double p[16]; - - COPY_TRANSPOSE(matrix_pointer, p); - /* - * Invert the Z value in clipping coordinates because OpenGL uses - * left-handed clipping coordinates, while Java3D defines right-handed - * coordinates everywhere. - */ - p[2] *= -1.0; - p[6] *= -1.0; - p[10] *= -1.0; - p[14] *= -1.0; - - glLoadMatrixd(p); -#ifdef VERBOSE - fprintf(stderr, "\n"); - fprintf(stderr, "Canvas3D.setProjectionMatrix()\n"); - fprintf(stderr, "------------------------------\n"); - fprintf(stderr, "PROJECTION : %f %f %f %f\n", p[0], p[4], p[8], p[12]); - fprintf(stderr, " : %f %f %f %f\n", p[1], p[5], p[9], p[13]); - fprintf(stderr, " : %f %f %f %f\n", p[2], p[6], p[10], p[14]); - fprintf(stderr, " : %f %f %f %f\n", p[3], p[7], p[11], p[15]); - fprintf(stderr, "\n\n"); -#endif - - } - - (*(table->ReleasePrimitiveArrayCritical))(env, projMatrix, - matrix_pointer, 0); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setViewport( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint x, - jint y, - jint width, - jint height) -{ - - glViewport(x, y, width, height); -} - -#ifdef WIN32 -#define M_PI 3.14159265358979323846 -#endif - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setSceneAmbient( - JNIEnv *env, - jobject cv, - jlong ctxInfo, - jfloat red, - jfloat green, - jfloat blue) -{ - float color[4]; - - color[0] = red; - color[1] = green; - color[2] = blue; - color[3] = 1.0f; - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, color); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setLightEnables( - JNIEnv *env, - jobject cv, - jlong ctxInfo, - jlong enable_mask, - jint nlights) -{ - int i; - -#ifdef VERBOSE - fprintf(stderr, "Canvas3D.updateLightEnables: mask = 0x%x, 0x%x\n", - (int) ((enable_mask >> 32L) & 0xffffffff), - (int) (enable_mask & 0xffffffff)); -#endif - - for (i=0; i<nlights; i++) { - if (enable_mask & ((long)(1<<i))) { - glEnable(GL_LIGHT0 + i); - } - else { - glDisable(GL_LIGHT0 + i); - } - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setLightingEnable( - JNIEnv *env, - jobject cv, - jlong ctxInfo, - jboolean lightingOn) -{ - if (lightingOn) { - glEnable(GL_LIGHTING); -#ifdef VERBOSE - fprintf(stderr, "ENABLE LIGHTING\n\n"); -#endif - } else { - glDisable(GL_LIGHTING); -#ifdef VERBOSE - fprintf(stderr, "DISABLE LIGHTING\n\n"); -#endif - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_disableFog( - JNIEnv *env, - jobject cv, - jlong ctxInfo) -{ -#ifdef VERBOSE - fprintf(stderr, "Disable Fog\n"); -#endif - glDisable(GL_FOG); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_disableModelClip( - JNIEnv *env, - jobject cv, - jlong ctxInfo) -{ -#ifdef VERBOSE - fprintf(stderr, "Disable ModelClip\n"); -#endif - glDisable(GL_CLIP_PLANE0); - glDisable(GL_CLIP_PLANE1); - glDisable(GL_CLIP_PLANE2); - glDisable(GL_CLIP_PLANE3); - glDisable(GL_CLIP_PLANE4); - glDisable(GL_CLIP_PLANE5); -} - - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_resetRenderingAttributes( - JNIEnv *env, - jobject cv, - jlong ctxInfo, - jboolean db_write_enable_override, - jboolean db_enable_override) -{ - if (db_write_enable_override == JNI_FALSE) { - glDepthMask(GL_TRUE); - } - if (db_enable_override == JNI_FALSE) { - glEnable(GL_DEPTH_TEST); - } - glAlphaFunc(GL_ALWAYS, 0.0f); - glDepthFunc(GL_LEQUAL); - glEnable(GL_COLOR_MATERIAL); - glDisable(GL_COLOR_LOGIC_OP); - -} - -GLenum getFunctionValue(jint func) { - switch (func) { - case javax_media_j3d_RenderingAttributes_ALWAYS: - func = GL_ALWAYS; - break; - case javax_media_j3d_RenderingAttributes_NEVER: - func = GL_NEVER; - break; - case javax_media_j3d_RenderingAttributes_EQUAL: - func = GL_EQUAL; - break; - case javax_media_j3d_RenderingAttributes_NOT_EQUAL: - func = GL_NOTEQUAL; - break; - case javax_media_j3d_RenderingAttributes_LESS: - func = GL_LESS; - break; - case javax_media_j3d_RenderingAttributes_LESS_OR_EQUAL: - func = GL_LEQUAL; - break; - case javax_media_j3d_RenderingAttributes_GREATER: - func = GL_GREATER; - break; - case javax_media_j3d_RenderingAttributes_GREATER_OR_EQUAL: - func = GL_GEQUAL; - break; - } - - return func; -} - -GLenum getStencilOpValue(jint op) { - switch (op) { - case javax_media_j3d_RenderingAttributes_STENCIL_KEEP: - op = GL_KEEP; - break; - case javax_media_j3d_RenderingAttributes_STENCIL_ZERO: - op = GL_ZERO; - break; - case javax_media_j3d_RenderingAttributes_STENCIL_REPLACE: - op = GL_REPLACE; - break; - case javax_media_j3d_RenderingAttributes_STENCIL_INCR: - op = GL_INCR; - break; - case javax_media_j3d_RenderingAttributes_STENCIL_DECR: - op = GL_DECR; - break; - case javax_media_j3d_RenderingAttributes_STENCIL_INVERT: - op = GL_INVERT; - break; - } - - return op; - -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateRenderingAttributes( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jboolean db_write_enable_override, - jboolean db_enable_override, - jboolean db_enable, - jboolean db_write_enable, - jint db_func, - jfloat at_value, - jint at_func, - jboolean ignoreVertexColors, - jboolean rasterOpEnable, - jint rasterOp, - jboolean userStencilAvailable, - jboolean stencilEnable, - jint stencilFailOp, - jint stencilZFailOp, - jint stencilZPassOp, - jint stencilFunction, - jint stencilReferenceValue, - jint stencilCompareMask, - jint stencilWriteMask) -{ - if (db_enable_override == JNI_FALSE) { - if (db_enable == JNI_TRUE) { - glEnable(GL_DEPTH_TEST); - glDepthFunc( getFunctionValue(db_func)); - - } else { - glDisable(GL_DEPTH_TEST); - } - } - - if (db_write_enable_override == JNI_FALSE) { - if (db_write_enable == JNI_TRUE ) { - glDepthMask(GL_TRUE); - } else { - glDepthMask(GL_FALSE); - } - } - - if (at_func == javax_media_j3d_RenderingAttributes_ALWAYS) { - glDisable(GL_ALPHA_TEST); - } else { - glEnable(GL_ALPHA_TEST); - glAlphaFunc(getFunctionValue(at_func), at_value); - } - - if (ignoreVertexColors == JNI_TRUE) { - glDisable(GL_COLOR_MATERIAL); - } - else { - glEnable(GL_COLOR_MATERIAL); - } - - if (rasterOpEnable == JNI_TRUE) { - glEnable(GL_COLOR_LOGIC_OP); - switch (rasterOp) { - case javax_media_j3d_RenderingAttributes_ROP_CLEAR: - glLogicOp(GL_CLEAR); - break; - case javax_media_j3d_RenderingAttributes_ROP_AND: - glLogicOp(GL_AND); - break; - case javax_media_j3d_RenderingAttributes_ROP_AND_REVERSE: - glLogicOp(GL_AND_REVERSE); - break; - case javax_media_j3d_RenderingAttributes_ROP_COPY: - glLogicOp(GL_COPY); - break; - case javax_media_j3d_RenderingAttributes_ROP_AND_INVERTED: - glLogicOp(GL_AND_INVERTED); - break; - case javax_media_j3d_RenderingAttributes_ROP_NOOP: - glLogicOp(GL_NOOP); - break; - case javax_media_j3d_RenderingAttributes_ROP_XOR: - glLogicOp(GL_XOR); - break; - case javax_media_j3d_RenderingAttributes_ROP_OR: - glLogicOp(GL_OR); - break; - case javax_media_j3d_RenderingAttributes_ROP_NOR: - glLogicOp(GL_NOR); - break; - case javax_media_j3d_RenderingAttributes_ROP_EQUIV: - glLogicOp(GL_EQUIV); - break; - case javax_media_j3d_RenderingAttributes_ROP_INVERT: - glLogicOp(GL_INVERT); - break; - case javax_media_j3d_RenderingAttributes_ROP_OR_REVERSE: - glLogicOp(GL_OR_REVERSE); - break; - case javax_media_j3d_RenderingAttributes_ROP_COPY_INVERTED: - glLogicOp(GL_COPY_INVERTED); - break; - case javax_media_j3d_RenderingAttributes_ROP_OR_INVERTED: - glLogicOp(GL_OR_INVERTED); - break; - case javax_media_j3d_RenderingAttributes_ROP_NAND: - glLogicOp(GL_NAND); - break; - case javax_media_j3d_RenderingAttributes_ROP_SET: - glLogicOp(GL_SET); - break; - } - } else { - glDisable(GL_COLOR_LOGIC_OP); - } - - if (userStencilAvailable == JNI_TRUE) { - if (stencilEnable == JNI_TRUE) { - glEnable(GL_STENCIL_TEST); - - glStencilOp(getStencilOpValue(stencilFailOp), - getStencilOpValue(stencilZFailOp), - getStencilOpValue(stencilZPassOp)); - - glStencilFunc(getFunctionValue(stencilFunction), - stencilReferenceValue, stencilCompareMask); - - glStencilMask(stencilWriteMask); - - } else { - glDisable(GL_STENCIL_TEST); - } - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_resetPolygonAttributes( - JNIEnv *env, - jobject cv, - jlong ctxInfo) -{ - glCullFace(GL_BACK); - glEnable(GL_CULL_FACE); - - glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); - - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - - glPolygonOffset(0.0f, 0.0f); - glDisable(GL_POLYGON_OFFSET_POINT); - glDisable(GL_POLYGON_OFFSET_LINE); - glDisable(GL_POLYGON_OFFSET_FILL); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updatePolygonAttributes( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint polygonMode, - jint cullFace, - jboolean backFaceNormalFlip, - jfloat polygonOffset, - jfloat polygonOffsetFactor) -{ - if (cullFace == javax_media_j3d_PolygonAttributes_CULL_NONE) { - glDisable(GL_CULL_FACE); - } else { - if (cullFace == javax_media_j3d_PolygonAttributes_CULL_BACK) { - glCullFace(GL_BACK); - } else { - glCullFace(GL_FRONT); - } - glEnable(GL_CULL_FACE); - } - - if (backFaceNormalFlip == JNI_TRUE && (cullFace != javax_media_j3d_PolygonAttributes_CULL_BACK)) { - glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); - } else { - glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); - } - - if (polygonMode == javax_media_j3d_PolygonAttributes_POLYGON_POINT) { - glPolygonMode(GL_FRONT_AND_BACK, GL_POINT); - } else if (polygonMode == javax_media_j3d_PolygonAttributes_POLYGON_LINE) { - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - } else { - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - } - - glPolygonOffset(polygonOffsetFactor, polygonOffset); - - if((polygonOffsetFactor != 0.0) || (polygonOffset != 0.0)) { - /* fprintf(stderr, "set polygonOffSet\n"); */ - switch (polygonMode) { - case javax_media_j3d_PolygonAttributes_POLYGON_POINT: - glEnable(GL_POLYGON_OFFSET_POINT); - glDisable(GL_POLYGON_OFFSET_LINE); - glDisable(GL_POLYGON_OFFSET_FILL); - break; - case javax_media_j3d_PolygonAttributes_POLYGON_LINE: - glEnable(GL_POLYGON_OFFSET_LINE); - glDisable(GL_POLYGON_OFFSET_POINT); - glDisable(GL_POLYGON_OFFSET_FILL); - break; - case javax_media_j3d_PolygonAttributes_POLYGON_FILL: - glEnable(GL_POLYGON_OFFSET_FILL); - glDisable(GL_POLYGON_OFFSET_POINT); - glDisable(GL_POLYGON_OFFSET_LINE); - break; - } - } - else { - glDisable(GL_POLYGON_OFFSET_POINT); - glDisable(GL_POLYGON_OFFSET_LINE); - glDisable(GL_POLYGON_OFFSET_FILL); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_resetLineAttributes( - JNIEnv *env, - jobject cv, - jlong ctxInfo) -/* comment out until called in java code - jfloat lineWidth, - jint linePattern, - jboolean lineAntialiasing) -*/ -{ - glLineWidth(1.0f); - glDisable(GL_LINE_STIPPLE); - - /* XXXX: Polygon Mode check, blend enable */ - glDisable (GL_LINE_SMOOTH); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateLineAttributes( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat lineWidth, - jint linePattern, - jint linePatternMask, - jint linePatternScaleFactor, - jboolean lineAntialiasing) -{ - glLineWidth(lineWidth); - - if (linePattern == javax_media_j3d_LineAttributes_PATTERN_SOLID) { - glDisable(GL_LINE_STIPPLE); - } else { - if (linePattern == javax_media_j3d_LineAttributes_PATTERN_DASH) { /* dashed lines */ - glLineStipple(1, 0x00ff); - } else if (linePattern == javax_media_j3d_LineAttributes_PATTERN_DOT) { /* dotted lines */ - glLineStipple(1, 0x0101); - } else if (linePattern == javax_media_j3d_LineAttributes_PATTERN_DASH_DOT) { /* dash-dotted lines */ - glLineStipple(1, 0x087f); - } else if (linePattern == javax_media_j3d_LineAttributes_PATTERN_USER_DEFINED) { /* user-defined mask */ - glLineStipple(linePatternScaleFactor, (GLushort) linePatternMask); - } - glEnable(GL_LINE_STIPPLE); - } - - /* XXXX: Polygon Mode check, blend enable */ - if (lineAntialiasing == JNI_TRUE) { - glEnable (GL_LINE_SMOOTH); - } else { - glDisable (GL_LINE_SMOOTH); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_resetPointAttributes( - JNIEnv *env, - jobject cv, - jlong ctxInfo) -{ - glPointSize(1.0f); - - /* XXXX: Polygon Mode check, blend enable */ - glDisable (GL_POINT_SMOOTH); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updatePointAttributes( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat pointSize, - jboolean pointAntialiasing) -{ - glPointSize(pointSize); - - /* XXXX: Polygon Mode check, blend enable */ - if (pointAntialiasing == JNI_TRUE) { - glEnable (GL_POINT_SMOOTH); - } else { - glDisable (GL_POINT_SMOOTH); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_resetTexCoordGeneration( - JNIEnv *env, - jobject cv, - jlong ctxInfo) -{ - glDisable(GL_TEXTURE_GEN_S); - glDisable(GL_TEXTURE_GEN_T); - glDisable(GL_TEXTURE_GEN_R); - glDisable(GL_TEXTURE_GEN_Q); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexCoordGeneration( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jboolean enable, - jint genMode, - jint format, - jfloat planeSx, - jfloat planeSy, - jfloat planeSz, - jfloat planeSw, - jfloat planeTx, - jfloat planeTy, - jfloat planeTz, - jfloat planeTw, - jfloat planeRx, - jfloat planeRy, - jfloat planeRz, - jfloat planeRw, - jfloat planeQx, - jfloat planeQy, - jfloat planeQz, - jfloat planeQw, - jdoubleArray vworldToEc) -{ - float planeS[4], planeT[4], planeR[4], planeQ[4]; - JNIEnv table = *env; - jdouble *mat; - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - if (enable == JNI_TRUE) { - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_3) { - glEnable(GL_TEXTURE_GEN_R); - glDisable(GL_TEXTURE_GEN_Q); - } else if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_4) { - glEnable(GL_TEXTURE_GEN_R); - glEnable(GL_TEXTURE_GEN_Q); - } else { - glDisable(GL_TEXTURE_GEN_R); - glDisable(GL_TEXTURE_GEN_Q); - } - - if (genMode != javax_media_j3d_TexCoordGeneration_SPHERE_MAP) { - planeS[0] = planeSx; planeS[1] = planeSy; - planeS[2] = planeSz; planeS[3] = planeSw; - planeT[0] = planeTx; planeT[1] = planeTy; - planeT[2] = planeTz; planeT[3] = planeTw; - if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_3) { - planeR[0] = planeRx; planeR[1] = planeRy; - planeR[2] = planeRz; planeR[3] = planeRw; - } else if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_4) { - planeR[0] = planeRx; planeR[1] = planeRy; - planeR[2] = planeRz; planeR[3] = planeRw; - planeQ[0] = planeQx; planeQ[1] = planeQy; - planeQ[2] = planeQz; planeQ[3] = planeQw; - } - } - - switch (genMode) { - case javax_media_j3d_TexCoordGeneration_OBJECT_LINEAR: - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGenfv(GL_S, GL_OBJECT_PLANE, planeS); - glTexGenfv(GL_T, GL_OBJECT_PLANE, planeT); - - if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_3) { - glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGenfv(GL_R, GL_OBJECT_PLANE, planeR); - } else if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_4) { - glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGenfv(GL_R, GL_OBJECT_PLANE, planeR); - glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGenfv(GL_Q, GL_OBJECT_PLANE, planeQ); - } - break; - case javax_media_j3d_TexCoordGeneration_EYE_LINEAR: - - mat = (jdouble *)(*(table->GetPrimitiveArrayCritical))(env, - vworldToEc, NULL); - - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - - if (ctxProperties->gl13) { - ctxProperties->glLoadTransposeMatrixd(mat); - } else { - jdouble v[16]; - COPY_TRANSPOSE(mat, v); - glLoadMatrixd(v); - } - - (*(table->ReleasePrimitiveArrayCritical))(env, vworldToEc, - mat, 0); - - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); - glTexGenfv(GL_S, GL_EYE_PLANE, planeS); - glTexGenfv(GL_T, GL_EYE_PLANE, planeT); - - if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_3) { - glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); - glTexGenfv(GL_R, GL_EYE_PLANE, planeR); - } else if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_4) { - glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); - glTexGenfv(GL_R, GL_EYE_PLANE, planeR); - glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); - glTexGenfv(GL_Q, GL_EYE_PLANE, planeQ); - } - glPopMatrix(); - break; - case javax_media_j3d_TexCoordGeneration_SPHERE_MAP: - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_3) { - glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - } else if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_4) { - glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - } - - break; - case javax_media_j3d_TexCoordGeneration_NORMAL_MAP: - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_EXT); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_EXT); - if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_3) { - glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_EXT); - } else if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_4) { - glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_EXT); - glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_EXT); - } - break; - case javax_media_j3d_TexCoordGeneration_REFLECTION_MAP: - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_EXT); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_EXT); - if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_3) { - glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_EXT); - } else if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_4) { - glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_EXT); - glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_EXT); - } - break; - } - } else { - glDisable(GL_TEXTURE_GEN_S); - glDisable(GL_TEXTURE_GEN_T); - glDisable(GL_TEXTURE_GEN_R); - glDisable(GL_TEXTURE_GEN_Q); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_resetTextureAttributes( - JNIEnv *env, - jobject cv, - jlong ctxInfo) -{ - float color[] = {0.0, 0.0, 0.0, 0.0}; - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - glPushAttrib(GL_TRANSFORM_BIT); - glMatrixMode(GL_TEXTURE); - glLoadIdentity(); - glPopAttrib(); - glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, color); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); - glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); - - if(ctxProperties->textureRegisterCombinersAvailable) - glDisable(GL_REGISTER_COMBINERS_NV); - - if(ctxProperties->textureColorTableAvailable) - glDisable(GL_TEXTURE_COLOR_TABLE_SGI); - /* GL_SGI_texture_color_table */ -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureAttributes( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jdoubleArray transform, - jboolean isIdentity, - jint textureMode, - jint perspCorrectionMode, - jfloat textureBlendColorRed, - jfloat textureBlendColorGreen, - jfloat textureBlendColorBlue, - jfloat textureBlendColorAlpha, - jint textureFormat) -{ - jdouble *mx_ptr; - float color[4]; - JNIEnv table = *env; - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - if (perspCorrectionMode == javax_media_j3d_TextureAttributes_NICEST) { - glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); - } else { - glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); - } - - /* set OGL texture matrix */ - glPushAttrib(GL_TRANSFORM_BIT); - glMatrixMode(GL_TEXTURE); - - mx_ptr = (jdouble *)(*(table->GetPrimitiveArrayCritical))(env, transform, - NULL); - if (isIdentity) { - glLoadIdentity(); - } else if (ctxProperties->gl13) { - ctxProperties->glLoadTransposeMatrixd(mx_ptr); - } else { - double mx[16]; - COPY_TRANSPOSE(mx_ptr, mx); - glLoadMatrixd(mx); - } - - (*(table->ReleasePrimitiveArrayCritical))(env, transform, mx_ptr, 0); - - glPopAttrib(); - - /* set texture color */ - color[0] = textureBlendColorRed; - color[1] = textureBlendColorGreen; - color[2] = textureBlendColorBlue; - color[3] = textureBlendColorAlpha; - glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, color); - - /* set texture environment mode */ - - switch (textureMode) { - case javax_media_j3d_TextureAttributes_MODULATE: - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - break; - case javax_media_j3d_TextureAttributes_DECAL: - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); - break; - case javax_media_j3d_TextureAttributes_BLEND: - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND); - break; - case javax_media_j3d_TextureAttributes_REPLACE: - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); - break; - case javax_media_j3d_TextureAttributes_COMBINE: - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, - ctxProperties->combine_enum); - break; - } - - if(ctxProperties->textureColorTableAvailable) - glDisable(GL_TEXTURE_COLOR_TABLE_SGI); - /* GL_SGI_texture_color_table */ -} - -GLenum getCombinerArg(jint arg, GLenum textureUnit, GLenum combUnit) { - GLenum comb; - - switch (arg) { - case javax_media_j3d_TextureAttributes_COMBINE_OBJECT_COLOR: - if (combUnit == GL_COMBINER0_NV) { - comb = GL_PRIMARY_COLOR_NV; - } else { - comb = GL_SPARE0_NV; - } - break; - case javax_media_j3d_TextureAttributes_COMBINE_TEXTURE_COLOR: - comb = textureUnit; - break; - case javax_media_j3d_TextureAttributes_COMBINE_CONSTANT_COLOR: - comb = GL_CONSTANT_COLOR0_NV; - break; - case javax_media_j3d_TextureAttributes_COMBINE_PREVIOUS_TEXTURE_UNIT_STATE: - comb = textureUnit -1; - break; - } - - return (comb); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateRegisterCombiners( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jdoubleArray transform, - jboolean isIdentity, - jint textureMode, - jint perspCorrectionMode, - jfloat textureBlendColorRed, - jfloat textureBlendColorGreen, - jfloat textureBlendColorBlue, - jfloat textureBlendColorAlpha, - jint textureFormat, - jint combineRgbMode, - jint combineAlphaMode, - jintArray combineRgbSrc, - jintArray combineAlphaSrc, - jintArray combineRgbFcn, - jintArray combineAlphaFcn, - jint combineRgbScale, - jint combineAlphaScale) -{ - jdouble *mx_ptr; - float color[4]; - JNIEnv table = *env; - GLenum textureUnit; - GLenum combinerUnit; - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - jint * rgbSrc; - GLenum color1, color2; - GLenum fragment; - - if (perspCorrectionMode == javax_media_j3d_TextureAttributes_NICEST) { - glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); - } else { - glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); - } - - /* set OGL texture matrix */ - glPushAttrib(GL_TRANSFORM_BIT); - glMatrixMode(GL_TEXTURE); - - mx_ptr = (jdouble *)(*(table->GetPrimitiveArrayCritical))(env, transform, - NULL); - if (isIdentity) { - glLoadIdentity(); - } else if (ctxProperties->gl13) { - ctxProperties->glLoadTransposeMatrixd(mx_ptr); - } else { - double mx[16]; - COPY_TRANSPOSE(mx_ptr, mx); - glLoadMatrixd(mx); - } - - (*(table->ReleasePrimitiveArrayCritical))(env, transform, mx_ptr, 0); - - glPopAttrib(); - - /* set texture color */ - color[0] = textureBlendColorRed; - color[1] = textureBlendColorGreen; - color[2] = textureBlendColorBlue; - color[3] = textureBlendColorAlpha; - glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, color); - - /* set texture environment mode */ - glEnable(GL_REGISTER_COMBINERS_NV); - textureUnit = ctxProperties->currentTextureUnit; - combinerUnit = ctxProperties->currentCombinerUnit; - if (combinerUnit == GL_COMBINER0_NV) { - fragment = GL_PRIMARY_COLOR_NV; - } else { - fragment = GL_SPARE0_NV; - } - - switch (textureMode) { - case javax_media_j3d_TextureAttributes_MODULATE: - - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_A_NV, fragment, - GL_UNSIGNED_IDENTITY_NV, GL_RGB); - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_B_NV, textureUnit, - GL_UNSIGNED_IDENTITY_NV, GL_RGB); - ctxProperties->glCombinerInputNV(combinerUnit, GL_ALPHA, - GL_VARIABLE_A_NV, fragment, - GL_UNSIGNED_IDENTITY_NV, GL_ALPHA); - ctxProperties->glCombinerInputNV(combinerUnit, GL_ALPHA, - GL_VARIABLE_B_NV, textureUnit, - GL_UNSIGNED_IDENTITY_NV, GL_ALPHA); - - ctxProperties->glCombinerOutputNV(combinerUnit, GL_RGB, - GL_SPARE0_NV, GL_DISCARD_NV, GL_DISCARD_NV, - GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, GL_FALSE); - ctxProperties->glCombinerOutputNV(combinerUnit, GL_ALPHA, - GL_SPARE0_NV, GL_DISCARD_NV, GL_DISCARD_NV, - GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, GL_FALSE); - break; - - case javax_media_j3d_TextureAttributes_DECAL: - - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_A_NV, fragment, - GL_UNSIGNED_IDENTITY_NV, GL_RGB); - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_B_NV, textureUnit, - GL_UNSIGNED_INVERT_NV, GL_ALPHA); - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_C_NV, textureUnit, - GL_UNSIGNED_IDENTITY_NV, GL_RGB); - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_D_NV, textureUnit, - GL_UNSIGNED_IDENTITY_NV, GL_ALPHA); - - ctxProperties->glCombinerInputNV(combinerUnit, GL_ALPHA, - GL_VARIABLE_A_NV, fragment, - GL_UNSIGNED_IDENTITY_NV, GL_ALPHA); - ctxProperties->glCombinerInputNV(combinerUnit, GL_ALPHA, - GL_VARIABLE_B_NV, GL_ZERO, - GL_UNSIGNED_INVERT_NV, GL_ALPHA); - - ctxProperties->glCombinerOutputNV(combinerUnit, GL_RGB, - GL_DISCARD_NV, GL_DISCARD_NV, GL_SPARE0_NV, - GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, GL_FALSE); - ctxProperties->glCombinerOutputNV(combinerUnit, GL_ALPHA, - GL_SPARE0_NV, GL_DISCARD_NV, GL_DISCARD_NV, - GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, GL_FALSE); - break; - - case javax_media_j3d_TextureAttributes_BLEND: - - ctxProperties->glCombinerParameterfvNV(GL_CONSTANT_COLOR0_NV, color); - - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_A_NV, fragment, - GL_UNSIGNED_IDENTITY_NV, GL_RGB); - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_B_NV, textureUnit, - GL_UNSIGNED_INVERT_NV, GL_RGB); - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_C_NV, GL_CONSTANT_COLOR0_NV, - GL_UNSIGNED_IDENTITY_NV, GL_RGB); - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_D_NV, textureUnit, - GL_UNSIGNED_IDENTITY_NV, GL_RGB); - - ctxProperties->glCombinerInputNV(combinerUnit, GL_ALPHA, - GL_VARIABLE_A_NV, fragment, - GL_UNSIGNED_IDENTITY_NV, GL_ALPHA); - ctxProperties->glCombinerInputNV(combinerUnit, GL_ALPHA, - GL_VARIABLE_B_NV, textureUnit, - GL_UNSIGNED_IDENTITY_NV, GL_ALPHA); - - ctxProperties->glCombinerOutputNV(combinerUnit, GL_RGB, - GL_DISCARD_NV, GL_DISCARD_NV, GL_SPARE0_NV, - GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, GL_FALSE); - ctxProperties->glCombinerOutputNV(combinerUnit, GL_ALPHA, - GL_SPARE0_NV, GL_DISCARD_NV, GL_DISCARD_NV, - GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, GL_FALSE); - break; - - case javax_media_j3d_TextureAttributes_REPLACE: - - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_A_NV, textureUnit, - GL_UNSIGNED_IDENTITY_NV, GL_RGB); - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_B_NV, GL_ZERO, - GL_UNSIGNED_INVERT_NV, GL_RGB); - ctxProperties->glCombinerInputNV(combinerUnit, GL_ALPHA, - GL_VARIABLE_A_NV, textureUnit, - GL_UNSIGNED_IDENTITY_NV, GL_ALPHA); - ctxProperties->glCombinerInputNV(combinerUnit, GL_ALPHA, - GL_VARIABLE_B_NV, GL_ZERO, - GL_UNSIGNED_INVERT_NV, GL_ALPHA); - - ctxProperties->glCombinerOutputNV(combinerUnit, GL_RGB, - GL_SPARE0_NV, GL_DISCARD_NV, GL_DISCARD_NV, - GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, GL_FALSE); - ctxProperties->glCombinerOutputNV(combinerUnit, GL_ALPHA, - GL_SPARE0_NV, GL_DISCARD_NV, GL_DISCARD_NV, - GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, GL_FALSE); - break; - - case javax_media_j3d_TextureAttributes_COMBINE: - if (combineRgbMode == - javax_media_j3d_TextureAttributes_COMBINE_DOT3) { - rgbSrc = (jint *)(*(table->GetPrimitiveArrayCritical))( - env, combineRgbSrc, NULL); - color1 = getCombinerArg(rgbSrc[0], textureUnit, combinerUnit); - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_A_NV, color1, - GL_EXPAND_NORMAL_NV, GL_RGB); - color2 = getCombinerArg(rgbSrc[1], textureUnit, combinerUnit); - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_B_NV, color2, - GL_EXPAND_NORMAL_NV, GL_RGB); - (*(table->ReleasePrimitiveArrayCritical))(env, combineRgbSrc, - rgbSrc, 0); - ctxProperties->glCombinerInputNV(combinerUnit, GL_ALPHA, - GL_VARIABLE_A_NV, GL_ZERO, - GL_UNSIGNED_INVERT_NV, GL_ALPHA); - ctxProperties->glCombinerInputNV(combinerUnit, GL_ALPHA, - GL_VARIABLE_B_NV, GL_ZERO, - GL_UNSIGNED_INVERT_NV, GL_ALPHA); - - ctxProperties->glCombinerOutputNV(combinerUnit, GL_RGB, - GL_SPARE0_NV, GL_DISCARD_NV, GL_DISCARD_NV, - GL_NONE/*SCALE_BY_FOUR_NV*/, GL_NONE, GL_TRUE, - GL_FALSE, GL_FALSE); - ctxProperties->glCombinerOutputNV(combinerUnit, GL_ALPHA, - GL_SPARE0_NV, GL_DISCARD_NV, GL_DISCARD_NV, - GL_NONE, GL_NONE, GL_FALSE, - GL_FALSE, GL_FALSE); - } - break; - } - - - ctxProperties->glFinalCombinerInputNV(GL_VARIABLE_A_NV, - GL_SPARE0_NV, GL_UNSIGNED_IDENTITY_NV, GL_RGB); - ctxProperties->glFinalCombinerInputNV(GL_VARIABLE_B_NV, - GL_ZERO, GL_UNSIGNED_INVERT_NV, GL_RGB); - ctxProperties->glFinalCombinerInputNV(GL_VARIABLE_C_NV, - GL_ZERO, GL_UNSIGNED_IDENTITY_NV, GL_RGB); - ctxProperties->glFinalCombinerInputNV(GL_VARIABLE_D_NV, - GL_ZERO, GL_UNSIGNED_IDENTITY_NV, GL_RGB); - ctxProperties->glFinalCombinerInputNV(GL_VARIABLE_E_NV, - GL_ZERO, GL_UNSIGNED_IDENTITY_NV, GL_RGB); - ctxProperties->glFinalCombinerInputNV(GL_VARIABLE_F_NV, - GL_ZERO, GL_UNSIGNED_IDENTITY_NV, GL_RGB); - ctxProperties->glFinalCombinerInputNV(GL_VARIABLE_G_NV, - GL_SPARE0_NV, GL_UNSIGNED_IDENTITY_NV, GL_ALPHA); - - if(ctxProperties->textureColorTableAvailable) - glDisable(GL_TEXTURE_COLOR_TABLE_SGI); - /* GL_SGI_texture_color_table */ -} - -void getGLCombineMode(GraphicsContextPropertiesInfo *ctxInfo, - jint combineRgbMode, jint combineAlphaMode, - jint *GLrgbMode, jint *GLalphaMode) { - - switch (combineRgbMode) { - case javax_media_j3d_TextureAttributes_COMBINE_REPLACE: - *GLrgbMode = GL_REPLACE; - break; - case javax_media_j3d_TextureAttributes_COMBINE_MODULATE: - *GLrgbMode = GL_MODULATE; - break; - case javax_media_j3d_TextureAttributes_COMBINE_ADD: - *GLrgbMode = GL_ADD; - break; - case javax_media_j3d_TextureAttributes_COMBINE_ADD_SIGNED: - *GLrgbMode = ctxInfo->combine_add_signed_enum; - break; - case javax_media_j3d_TextureAttributes_COMBINE_SUBTRACT: - *GLrgbMode = ctxInfo->combine_subtract_enum; - break; - case javax_media_j3d_TextureAttributes_COMBINE_INTERPOLATE: - *GLrgbMode = ctxInfo->combine_interpolate_enum; - break; - case javax_media_j3d_TextureAttributes_COMBINE_DOT3: - *GLrgbMode = ctxInfo->combine_dot3_rgb_enum; - break; - default: - break; - } - - switch (combineAlphaMode) { - case javax_media_j3d_TextureAttributes_COMBINE_REPLACE: - *GLalphaMode = GL_REPLACE; - break; - case javax_media_j3d_TextureAttributes_COMBINE_MODULATE: - *GLalphaMode = GL_MODULATE; - break; - case javax_media_j3d_TextureAttributes_COMBINE_ADD: - *GLalphaMode = GL_ADD; - break; - case javax_media_j3d_TextureAttributes_COMBINE_ADD_SIGNED: - *GLalphaMode = ctxInfo->combine_add_signed_enum; - break; - case javax_media_j3d_TextureAttributes_COMBINE_SUBTRACT: - *GLalphaMode = ctxInfo->combine_subtract_enum; - break; - case javax_media_j3d_TextureAttributes_COMBINE_INTERPOLATE: - *GLalphaMode = ctxInfo->combine_interpolate_enum; - break; - case javax_media_j3d_TextureAttributes_COMBINE_DOT3: - /* dot3 will only make sense for alpha if rgb is also - doing dot3. So if rgb is not doing dot3, fallback to replace - */ - if (combineRgbMode == javax_media_j3d_TextureAttributes_COMBINE_DOT3) { - *GLrgbMode = ctxInfo->combine_dot3_rgba_enum; - } else { - *GLalphaMode = GL_REPLACE; - } - break; - default: - break; - } - - return; -} - -/* mapping from java enum to gl enum - */ - -jint _gl_combineRgbSrcIndex[] = { - GL_SOURCE0_RGB_ARB, - GL_SOURCE1_RGB_ARB, - GL_SOURCE2_RGB_ARB, -}; - -jint _gl_combineAlphaSrcIndex[] = { - GL_SOURCE0_ALPHA_ARB, - GL_SOURCE1_ALPHA_ARB, - GL_SOURCE2_ALPHA_ARB, -}; - -jint _gl_combineRgbOpIndex[] = { - GL_OPERAND0_RGB_ARB, - GL_OPERAND1_RGB_ARB, - GL_OPERAND2_RGB_ARB, -}; - -jint _gl_combineAlphaOpIndex[] = { - GL_OPERAND0_ALPHA_ARB, - GL_OPERAND1_ALPHA_ARB, - GL_OPERAND2_ALPHA_ARB, -}; - -jint _gl_combineSrc[] = { - GL_PRIMARY_COLOR_ARB, /* TextureAttributes.COMBINE_OBJECT_COLOR */ - GL_TEXTURE, /* TextureAttributes.COMBINE_TEXTURE */ - GL_CONSTANT_ARB, /* TextureAttributes.COMBINE_CONSTANT_COLOR */ - GL_PREVIOUS_ARB, /* TextureAttributes.COMBINE_PREVIOUS_TEXTURE_UNIT_STATE */ -}; - -jint _gl_combineFcn[] = { - GL_SRC_COLOR, /* TextureAttributes.COMBINE_SRC_COLOR */ - GL_ONE_MINUS_SRC_COLOR, /* TextureAttributes.COMBINE_ONE_MINUS_SRC_COLOR */ - GL_SRC_ALPHA, /* TextureAttributes.COMBINE_SRC_ALPHA */ - GL_ONE_MINUS_SRC_ALPHA, /* TextureAttributes.COMBINE_ONE_MINUS_SRC_ALPHA */ -}; - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateCombiner( - JNIEnv *env, - jobject obj, - jlong ctxProperties, - jint combineRgbMode, - jint combineAlphaMode, - jintArray combineRgbSrc, - jintArray combineAlphaSrc, - jintArray combineRgbFcn, - jintArray combineAlphaFcn, - jint combineRgbScale, - jint combineAlphaScale) { - - - JNIEnv table = *env; - GraphicsContextPropertiesInfo *ctxInfo = - (GraphicsContextPropertiesInfo *)ctxProperties; - jint *rgbSrc, *alphaSrc, *rgbFcn, *alphaFcn; - jint GLrgbMode, GLalphaMode; - jint nargs, i; - - rgbSrc = (jint *)(*(table->GetPrimitiveArrayCritical))( - env, combineRgbSrc, NULL); - alphaSrc = (jint *)(*(table->GetPrimitiveArrayCritical))( - env, combineAlphaSrc, NULL); - rgbFcn = (jint *)(*(table->GetPrimitiveArrayCritical))( - env, combineRgbFcn, NULL); - alphaFcn = (jint *)(*(table->GetPrimitiveArrayCritical))( - env, combineAlphaFcn, NULL); - - getGLCombineMode(ctxInfo, combineRgbMode, combineAlphaMode, - &GLrgbMode, &GLalphaMode); - - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GLrgbMode); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GLalphaMode); - - if (combineRgbMode == javax_media_j3d_TextureAttributes_COMBINE_REPLACE) { - nargs = 1; - } else if (combineRgbMode == javax_media_j3d_TextureAttributes_COMBINE_INTERPOLATE) { - nargs = 3; - } else { - nargs = 2; - } - - for (i = 0; i < nargs; i++) { - glTexEnvi(GL_TEXTURE_ENV, _gl_combineRgbSrcIndex[i], - _gl_combineSrc[rgbSrc[i]]); - glTexEnvi(GL_TEXTURE_ENV, _gl_combineRgbOpIndex[i], - _gl_combineFcn[rgbFcn[i]]); - } - - if (combineAlphaMode == javax_media_j3d_TextureAttributes_COMBINE_REPLACE) { - nargs = 1; - } else if (combineAlphaMode == javax_media_j3d_TextureAttributes_COMBINE_INTERPOLATE) { - nargs = 3; - } else { - nargs = 2; - } - - for (i = 0; i < nargs; i++) { - glTexEnvi(GL_TEXTURE_ENV, _gl_combineAlphaSrcIndex[i], - _gl_combineSrc[alphaSrc[i]]); - glTexEnvi(GL_TEXTURE_ENV, _gl_combineAlphaOpIndex[i], - _gl_combineFcn[alphaFcn[i]]); - } - - glTexEnvi(GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, combineRgbScale); - glTexEnvi(GL_TEXTURE_ENV, GL_ALPHA_SCALE, combineAlphaScale); - - (*(table->ReleasePrimitiveArrayCritical))(env, combineRgbSrc, rgbSrc, 0); - (*(table->ReleasePrimitiveArrayCritical))(env, combineAlphaSrc, alphaSrc, 0); - (*(table->ReleasePrimitiveArrayCritical))(env, combineRgbFcn, rgbFcn, 0); - (*(table->ReleasePrimitiveArrayCritical))(env, combineAlphaFcn, alphaFcn, 0); - -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureColorTable( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint numComponents, - jint colorTableSize, - jintArray textureColorTable) -{ - JNIEnv table = *env; - jint *ctable; - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - if(ctxProperties->textureColorTableAvailable) { - ctable = (jint *)(*(table->GetPrimitiveArrayCritical))(env, - textureColorTable, NULL); - if (numComponents == 3) { - ctxProperties->glColorTable(GL_TEXTURE_COLOR_TABLE_SGI, GL_RGB, - colorTableSize, GL_RGB, GL_INT, ctable); - } else { - ctxProperties->glColorTable(GL_TEXTURE_COLOR_TABLE_SGI, GL_RGBA, - colorTableSize, GL_RGBA, GL_INT, ctable); - } - - (*(table->ReleasePrimitiveArrayCritical))(env, textureColorTable, ctable, 0); - glEnable(GL_TEXTURE_COLOR_TABLE_SGI); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateMaterialColor( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat colorRed, - jfloat colorGreen, - jfloat colorBlue, - jfloat transparency) -{ - float color[4]; - - color[0] = colorRed; - color[1] = colorGreen; - color[2] = colorBlue; - color[3] = transparency; - glColor4fv(color); - glDisable(GL_LIGHTING); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateMaterial( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat colorRed, - jfloat colorGreen, - jfloat colorBlue, - jfloat transparency, - jfloat aRed, - jfloat aGreen, - jfloat aBlue, - jfloat eRed, - jfloat eGreen, - jfloat eBlue, - jfloat dRed, - jfloat dGreen, - jfloat dBlue, - jfloat sRed, - jfloat sGreen, - jfloat sBlue, - jfloat shininess, - jint colorTarget, - jboolean lightEnable) -{ - float color[4]; - - color[3] = 1.0f; - glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, &shininess); - if (colorTarget == javax_media_j3d_Material_DIFFUSE) { - glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); - } - else if (colorTarget == javax_media_j3d_Material_AMBIENT) { - glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT); - } - else if (colorTarget == javax_media_j3d_Material_EMISSIVE) { - glColorMaterial(GL_FRONT_AND_BACK, GL_EMISSION); - } - else if (colorTarget == javax_media_j3d_Material_SPECULAR) { - glColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR); - } - else if (colorTarget == javax_media_j3d_Material_AMBIENT_AND_DIFFUSE) { - glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); - } - - color[0] = eRed; color[1] = eGreen; color[2] = eBlue; - glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, color); - - color[0] = aRed; color[1] = aGreen; color[2] = aBlue; - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, color); - - color[0] = sRed; color[1] = sGreen; color[2] = sBlue; - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, color); - - if (lightEnable == JNI_TRUE) { - color[0] = dRed; color[1] = dGreen; color[2] = dBlue; - } else { - color[0] = colorRed; color[1] = colorGreen; color[2] = colorBlue; - } - color[3] = transparency; - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, color); - glColor4fv(color); - - if (lightEnable) { - glEnable(GL_LIGHTING); - } else { - glDisable(GL_LIGHTING); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_resetTransparency( - JNIEnv *env, - jobject cv, - jlong ctxInfo, - jint geometryType, - jint polygonMode, - jboolean lineAA, - jboolean pointAA) -{ - if (((((geometryType & javax_media_j3d_RenderMolecule_LINE) != 0) || - (polygonMode == javax_media_j3d_PolygonAttributes_POLYGON_LINE)) - && lineAA == JNI_TRUE) || - ((((geometryType & javax_media_j3d_RenderMolecule_POINT) != 0) || - (polygonMode == javax_media_j3d_PolygonAttributes_POLYGON_POINT)) - && pointAA == JNI_TRUE)) { - glEnable (GL_BLEND); - glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - } else { - glDisable (GL_BLEND); - } - glDisable(GL_POLYGON_STIPPLE); - -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTransparencyAttributes( - JNIEnv *env, - jobject tr, - jlong ctxInfo, - jfloat transparency, - jint geometryType, - jint polygonMode, - jboolean lineAA, - jboolean pointAA, - jint transparencyMode, - jint srcBlendFunction, - jint dstBlendFunction) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - if (transparencyMode != javax_media_j3d_TransparencyAttributes_SCREEN_DOOR) { - glDisable(GL_POLYGON_STIPPLE); - } else { - glEnable(GL_POLYGON_STIPPLE); - glPolygonStipple((GLubyte *)(screen_door[(int)((transparency)*16)])); - } - - if ((transparencyMode < javax_media_j3d_TransparencyAttributes_SCREEN_DOOR) || - ((((geometryType & javax_media_j3d_RenderMolecule_LINE) != 0) || - (polygonMode == javax_media_j3d_PolygonAttributes_POLYGON_LINE)) - && lineAA == JNI_TRUE) || - ((((geometryType & javax_media_j3d_RenderMolecule_POINT) != 0) || - (polygonMode == javax_media_j3d_PolygonAttributes_POLYGON_POINT)) - && pointAA == JNI_TRUE)) { - glEnable (GL_BLEND); - /* valid range of blendFunction 0..3 is already verify in Java code. */ - glBlendFunc(ctxProperties->blendFunctionTable[srcBlendFunction], - ctxProperties->blendFunctionTable[dstBlendFunction]); - } else { - glDisable (GL_BLEND); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_resetColoringAttributes( - JNIEnv *env, - jobject cv, - jlong ctxInfo, - jfloat colorRed, - jfloat colorGreen, - jfloat colorBlue, - jfloat transparency, - jboolean lightEnable) -{ - - float color[4]; - - if (lightEnable != JNI_TRUE) { - color[0] = colorRed; color[1] = colorGreen; color[2] = colorBlue; - color[3] = transparency; - glColor4fv(color); - - } - glShadeModel(GL_SMOOTH); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateColoringAttributes( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat dRed, - jfloat dGreen, - jfloat dBlue, - jfloat colorRed, - jfloat colorGreen, - jfloat colorBlue, - jfloat transparency, - jboolean lightEnable, - jint shadeModel) -{ - - float color[4]; - - if (lightEnable == JNI_TRUE) { - color[0] = dRed; color[1] = dGreen; color[2] = dBlue; - } else { - color[0] = colorRed; color[1] = colorGreen; color[2] = colorBlue; - } - color[3] = transparency; - - glColor4fv(color); - if (shadeModel == javax_media_j3d_ColoringAttributes_SHADE_FLAT) { - glShadeModel(GL_FLAT); - } else { - glShadeModel(GL_SMOOTH); - } -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_resetTextureNative( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint texUnitIndex) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - if(ctxProperties->gl13) { - if (texUnitIndex >= 0) { - ctxProperties->glActiveTexture(texUnitIndex + GL_TEXTURE0); - ctxProperties->glClientActiveTexture(texUnitIndex + GL_TEXTURE0); - } - } - - glDisable(GL_TEXTURE_1D); - glDisable(GL_TEXTURE_2D); - glDisable(GL_TEXTURE_3D); - glDisable(GL_TEXTURE_CUBE_MAP); -} - - -/* - * A set of common updateTexture functions shared among Texture2D, Texture3D, - * and TextureCubeMap for setting texture parameters - */ -void updateTextureFilterModes( - GraphicsContextPropertiesInfo *ctxProperties, - jint target, - jint minFilter, - jint magFilter) { - - /* set texture min filter */ - switch(minFilter) { - case javax_media_j3d_Texture_FASTEST: - case javax_media_j3d_Texture_BASE_LEVEL_POINT: - glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - break; - case javax_media_j3d_Texture_BASE_LEVEL_LINEAR: - glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - break; - case javax_media_j3d_Texture_MULTI_LEVEL_POINT: - glTexParameteri(target, GL_TEXTURE_MIN_FILTER, - GL_NEAREST_MIPMAP_NEAREST); - break; - case javax_media_j3d_Texture_NICEST: - case javax_media_j3d_Texture_MULTI_LEVEL_LINEAR: - glTexParameteri(target, GL_TEXTURE_MIN_FILTER, - GL_LINEAR_MIPMAP_LINEAR); - break; - case javax_media_j3d_Texture_FILTER4: - glTexParameteri(target, GL_TEXTURE_MIN_FILTER, - ctxProperties->filter4_enum); - break; - - } - - /* set texture mag filter */ - switch(magFilter){ - case javax_media_j3d_Texture_FASTEST: - case javax_media_j3d_Texture_BASE_LEVEL_POINT: - glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - break; - case javax_media_j3d_Texture_NICEST: - case javax_media_j3d_Texture_BASE_LEVEL_LINEAR: - glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - break; - case javax_media_j3d_Texture_LINEAR_SHARPEN: - glTexParameteri(target, GL_TEXTURE_MAG_FILTER, - ctxProperties->linear_sharpen_enum); - break; - case javax_media_j3d_Texture_LINEAR_SHARPEN_RGB: - glTexParameteri(target, GL_TEXTURE_MAG_FILTER, - ctxProperties->linear_sharpen_rgb_enum); - break; - case javax_media_j3d_Texture_LINEAR_SHARPEN_ALPHA: - glTexParameteri(target, GL_TEXTURE_MAG_FILTER, - ctxProperties->linear_sharpen_alpha_enum); - break; - case javax_media_j3d_Texture2D_LINEAR_DETAIL: - glTexParameteri(target, GL_TEXTURE_MAG_FILTER, - ctxProperties->linear_detail_enum); - break; - case javax_media_j3d_Texture2D_LINEAR_DETAIL_RGB: - glTexParameteri(target, GL_TEXTURE_MAG_FILTER, - ctxProperties->linear_detail_rgb_enum); - break; - case javax_media_j3d_Texture2D_LINEAR_DETAIL_ALPHA: - glTexParameteri(target, GL_TEXTURE_MAG_FILTER, - ctxProperties->linear_detail_alpha_enum); - break; - case javax_media_j3d_Texture_FILTER4: - glTexParameteri(target, GL_TEXTURE_MAG_FILTER, - ctxProperties->filter4_enum); - break; - } -} - - -void updateTextureLodRange( - GraphicsContextPropertiesInfo *ctxProperties, - jint target, - jint baseLevel, - jint maximumLevel, - float minimumLod, float maximumLod) { - - /* - * checking of the availability of the extension is already done - * in the java side - */ - glTexParameteri(target, ctxProperties->texture_base_level_enum, - baseLevel); - glTexParameteri(target, ctxProperties->texture_max_level_enum, - maximumLevel); - glTexParameterf(target, ctxProperties->texture_min_lod_enum, - minimumLod); - glTexParameterf(target, ctxProperties->texture_max_lod_enum, - maximumLod); -} - -void updateTextureLodOffset( - GraphicsContextPropertiesInfo *ctxProperties, - jint target, - float lodOffsetS, float lodOffsetT, float lodOffsetR) { - - /* - * checking of the availability of the extension is already done - * in the java side - */ - glTexParameterf(target, GL_TEXTURE_LOD_BIAS_S_SGIX, lodOffsetS); - glTexParameterf(target, GL_TEXTURE_LOD_BIAS_T_SGIX, lodOffsetT); - glTexParameterf(target, GL_TEXTURE_LOD_BIAS_R_SGIX, lodOffsetR); -} - - -void updateTextureBoundary( - GraphicsContextPropertiesInfo *ctxProperties, - jint target, - jint boundaryModeS, - jint boundaryModeT, - jint boundaryModeR, - jfloat boundaryRed, - jfloat boundaryGreen, - jfloat boundaryBlue, - jfloat boundaryAlpha) -{ - float color[4]; - - /* set texture wrap parameter */ - switch (boundaryModeS){ - case javax_media_j3d_Texture_WRAP: - glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_REPEAT); - break; - case javax_media_j3d_Texture_CLAMP: - glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP); - break; - case javax_media_j3d_Texture_CLAMP_TO_EDGE: - glTexParameteri(target, GL_TEXTURE_WRAP_S, - GL_CLAMP_TO_EDGE); - break; - case javax_media_j3d_Texture_CLAMP_TO_BOUNDARY: - glTexParameteri(target, GL_TEXTURE_WRAP_S, - ctxProperties->texture_clamp_to_border_enum); - break; - } - - switch (boundaryModeT) { - case javax_media_j3d_Texture_WRAP: - glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_REPEAT); - break; - case javax_media_j3d_Texture_CLAMP: - glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP); - break; - case javax_media_j3d_Texture_CLAMP_TO_EDGE: - glTexParameteri(target, GL_TEXTURE_WRAP_T, - GL_CLAMP_TO_EDGE); - break; - case javax_media_j3d_Texture_CLAMP_TO_BOUNDARY: - glTexParameteri(target, GL_TEXTURE_WRAP_T, - ctxProperties->texture_clamp_to_border_enum); - break; - } - - /* applies to Texture3D only */ - if (boundaryModeR != -1) { - switch (boundaryModeR) { - case javax_media_j3d_Texture_WRAP: - glTexParameteri(target, - GL_TEXTURE_WRAP_R, GL_REPEAT); - break; - - case javax_media_j3d_Texture_CLAMP: - glTexParameteri(target, - GL_TEXTURE_WRAP_R, GL_CLAMP); - break; - case javax_media_j3d_Texture_CLAMP_TO_EDGE: - glTexParameteri(target, - GL_TEXTURE_WRAP_R, - GL_CLAMP_TO_EDGE); - break; - case javax_media_j3d_Texture_CLAMP_TO_BOUNDARY: - glTexParameteri(target, - GL_TEXTURE_WRAP_R, - ctxProperties->texture_clamp_to_border_enum); - break; - } - } - - if (boundaryModeS == javax_media_j3d_Texture_CLAMP || - boundaryModeT == javax_media_j3d_Texture_CLAMP || - boundaryModeR == javax_media_j3d_Texture_CLAMP) { - /* set texture border color */ - color[0] = boundaryRed; - color[1] = boundaryGreen; - color[2] = boundaryBlue; - color[3] = boundaryAlpha; - glTexParameterfv(target, GL_TEXTURE_BORDER_COLOR, color); - } -} - -void updateTextureSharpenFunc( - JNIEnv *env, - GraphicsContextPropertiesInfo *ctxProperties, - jint target, - jint numPts, - jfloatArray pts) -{ - /* - * checking of the availability of sharpen texture functionality - * is already done in the java side - */ - - JNIEnv table = *env; - jfloat *funcPts = NULL; - - if (numPts > 0) { - funcPts = (jfloat *)(*(table->GetPrimitiveArrayCritical))( - env, pts, NULL); - } - - ctxProperties->glSharpenTexFuncSGIS(target, numPts, funcPts); - - if (funcPts != NULL) { - (*(table->ReleasePrimitiveArrayCritical))(env, pts, funcPts, 0); - } -} - - -void updateTextureFilter4Func( - JNIEnv *env, - GraphicsContextPropertiesInfo *ctxProperties, - jint target, - jint numPts, - jfloatArray pts) -{ - /* - * checking of the availability of filter4 functionality - * is already done in the java side - */ - - JNIEnv table = *env; - jfloat *funcPts = NULL; - - if (numPts > 0) { - funcPts = (jfloat *)(*(table->GetPrimitiveArrayCritical))( - env, pts, NULL); - } - - ctxProperties->glTexFilterFuncSGIS(target, ctxProperties->filter4_enum, - numPts, funcPts); - - if (funcPts != NULL) { - (*(table->ReleasePrimitiveArrayCritical))(env, pts, funcPts, 0); - } -} - -void updateTextureAnisotropicFilter( - JNIEnv *env, - GraphicsContextPropertiesInfo *ctxProperties, - jint target, - jfloat degree) -{ - /* - * checking of the availability of anisotropic filter functionality - * is already done in the java side - */ - glTexParameterf(target, - ctxProperties->texture_filter_anisotropic_ext_enum, - degree); -} - -/* - * common function to define 2D texture image for different target - */ -void updateTexture2DImage( - JNIEnv *env, - GraphicsContextPropertiesInfo *ctxProperties, - jint target, - jint numLevels, - jint level, - jint textureFormat, - jint imageFormat, - jint width, - jint height, - jint boundaryWidth, - jint dataType, - jobject data, - jboolean useAutoMipMap) -{ - void *imageObjPtr; - GLenum format = 0, internalFormat = 0, type = GL_UNSIGNED_INT_8_8_8_8; - JNIEnv table = *env; - GLboolean forceAlphaToOne = GL_FALSE; - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - imageObjPtr = (void *)(*(table->GetPrimitiveArrayCritical))(env, (jarray)data, NULL); - } - else { - imageObjPtr = (void *)(*(table->GetDirectBufferAddress))(env, data); - } - - switch (textureFormat) { - case INTENSITY: - internalFormat = GL_INTENSITY; - break; - case LUMINANCE: - internalFormat = GL_LUMINANCE; - break; - case ALPHA: - internalFormat = GL_ALPHA; - break; - case LUMINANCE_ALPHA: - internalFormat = GL_LUMINANCE_ALPHA; - break; - case J3D_RGB: - internalFormat = GL_RGB; - break; - case J3D_RGBA: - internalFormat = GL_RGBA; - break; - default: - throwAssert(env, "updateTexture2DImage : textureFormat illegal format"); - return; - } - - if (useAutoMipMap) { - glTexParameteri(target, GL_GENERATE_MIPMAP, GL_TRUE); - } - else { - glTexParameteri(target, GL_GENERATE_MIPMAP, GL_FALSE); - } - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_BYTE_BUFFER)) { - switch (imageFormat) { - /* GL_BGR */ - case IMAGE_FORMAT_BYTE_BGR: - format = GL_BGR; - break; - case IMAGE_FORMAT_BYTE_RGB: - format = GL_RGB; - break; - /* GL_ABGR_EXT */ - case IMAGE_FORMAT_BYTE_ABGR: - if (ctxProperties->abgr_ext) { /* If its zero, should never come here! */ - format = GL_ABGR_EXT; - } - else { - throwAssert(env, "updateTexture2DImage : GL_ABGR_EXT format is unsupported"); - return; - } - break; - case IMAGE_FORMAT_BYTE_RGBA: - format = GL_RGBA; - break; - case IMAGE_FORMAT_BYTE_LA: - /* all LA types are stored as LA8 */ - format = GL_LUMINANCE_ALPHA; - break; - case IMAGE_FORMAT_BYTE_GRAY: - if (internalFormat == GL_ALPHA) { - format = GL_ALPHA; - } else { - format = GL_LUMINANCE; - } - break; - - case IMAGE_FORMAT_USHORT_GRAY: - case IMAGE_FORMAT_INT_BGR: - case IMAGE_FORMAT_INT_RGB: - case IMAGE_FORMAT_INT_ARGB: - default: - throwAssert(env, "updateTexture2DImage : imageFormat illegal format"); - return; - } - - glTexImage2D(target, level, internalFormat, - width, height, boundaryWidth, - format, GL_UNSIGNED_BYTE, imageObjPtr); - - } - else if((dataType == IMAGE_DATA_TYPE_INT_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_BUFFER)) { - switch (imageFormat) { - /* GL_BGR */ - case IMAGE_FORMAT_INT_BGR: /* Assume XBGR format */ - format = GL_RGBA; - type = GL_UNSIGNED_INT_8_8_8_8_REV; - forceAlphaToOne = GL_TRUE; - break; - case IMAGE_FORMAT_INT_RGB: /* Assume XRGB format */ - forceAlphaToOne = GL_TRUE; - /* Fall through to next case */ - case IMAGE_FORMAT_INT_ARGB: - format = GL_BGRA; - type = GL_UNSIGNED_INT_8_8_8_8_REV; - break; - /* This method only supports 3 and 4 components formats and INT types. */ - case IMAGE_FORMAT_BYTE_LA: - case IMAGE_FORMAT_BYTE_GRAY: - case IMAGE_FORMAT_USHORT_GRAY: - case IMAGE_FORMAT_BYTE_BGR: - case IMAGE_FORMAT_BYTE_RGB: - case IMAGE_FORMAT_BYTE_RGBA: - case IMAGE_FORMAT_BYTE_ABGR: - default: - throwAssert(env, "updateTexture2DImage : imageFormat illegal format"); - return; - } - - /* Force Alpha to 1.0 if needed */ - if(forceAlphaToOne) { - glPixelTransferf(GL_ALPHA_SCALE, 0.0f); - glPixelTransferf(GL_ALPHA_BIAS, 1.0f); - } - - glTexImage2D(target, level, internalFormat, - width, height, boundaryWidth, - format, type, imageObjPtr); - - /* Restore Alpha scale and bias */ - if(forceAlphaToOne) { - glPixelTransferf(GL_ALPHA_SCALE, 1.0f); - glPixelTransferf(GL_ALPHA_BIAS, 0.0f); - } - } - else { - throwAssert(env, "updateTexture2DImage : illegal image data type"); - return; - } - - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - (*(table->ReleasePrimitiveArrayCritical))(env, data, imageObjPtr, 0); - } - -} - - -/* - * common function to update 2D texture image for different target - */ - -void updateTexture2DSubImage( - JNIEnv *env, - GraphicsContextPropertiesInfo *ctxProperties, - jint target, - jint level, - jint xoffset, - jint yoffset, - jint textureFormat, - jint imageFormat, - jint imgXOffset, - jint imgYOffset, - jint tilew, - jint width, - jint height, - jint dataType, - jobject data) { - - void *imageObjPtr; - GLenum format = 0, internalFormat = 0, type = GL_UNSIGNED_INT_8_8_8_8; - JNIEnv table = *env; - GLboolean forceAlphaToOne = GL_FALSE; - jbyte *tmpByte; - jint *tmpInt; - jint numBytes = 0; - jboolean pixelStore = JNI_FALSE; - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - imageObjPtr = (void *)(*(table->GetPrimitiveArrayCritical))(env, (jarray)data, NULL); - } - else { - imageObjPtr = (void *)(*(table->GetDirectBufferAddress))(env, data); - } - - if (imgXOffset > 0 || (width < tilew)) { - pixelStore = JNI_TRUE; - glPixelStorei(GL_UNPACK_ROW_LENGTH, tilew); - } - - switch (textureFormat) { - case INTENSITY: - internalFormat = GL_INTENSITY; - break; - case LUMINANCE: - internalFormat = GL_LUMINANCE; - break; - case ALPHA: - internalFormat = GL_ALPHA; - break; - case LUMINANCE_ALPHA: - internalFormat = GL_LUMINANCE_ALPHA; - break; - case J3D_RGB: - internalFormat = GL_RGB; - break; - case J3D_RGBA: - internalFormat = GL_RGBA; - break; - default: - throwAssert(env, "updateTexture2DSubImage : textureFormat illegal format"); - return; - } - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_BYTE_BUFFER)) { - switch (imageFormat) { - /* GL_BGR */ - case IMAGE_FORMAT_BYTE_BGR: - format = GL_BGR; - numBytes = 3; - break; - case IMAGE_FORMAT_BYTE_RGB: - format = GL_RGB; - numBytes = 3; - break; - /* GL_ABGR_EXT */ - case IMAGE_FORMAT_BYTE_ABGR: - if (ctxProperties->abgr_ext) { /* If its zero, should never come here! */ - format = GL_ABGR_EXT; - numBytes = 4; - } - else { - throwAssert(env, "updateTexture2DSubImage : GL_ABGR_EXT format is unsupported"); - return; - } - break; - case IMAGE_FORMAT_BYTE_RGBA: - format = GL_RGBA; - numBytes = 4; - break; - case IMAGE_FORMAT_BYTE_LA: - /* all LA types are stored as LA8 */ - numBytes = 2; - format = GL_LUMINANCE_ALPHA; - break; - case IMAGE_FORMAT_BYTE_GRAY: - if (internalFormat == GL_ALPHA) { - format = GL_ALPHA; - numBytes = 1; - } else { - format = GL_LUMINANCE; - numBytes = 1; - } - break; - - case IMAGE_FORMAT_USHORT_GRAY: - case IMAGE_FORMAT_INT_BGR: - case IMAGE_FORMAT_INT_RGB: - case IMAGE_FORMAT_INT_ARGB: - default: - throwAssert(env, "updateTexture2DSubImage : imageFormat illegal format"); - return; - } - - tmpByte = (jbyte*)imageObjPtr + - (tilew * imgYOffset + imgXOffset) * numBytes; - - - glTexSubImage2D(target, level, xoffset, yoffset, width, height, - format, GL_UNSIGNED_BYTE, (GLvoid *)tmpByte); - - } - else if((dataType == IMAGE_DATA_TYPE_INT_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_BUFFER)) { - switch (imageFormat) { - /* GL_BGR */ - case IMAGE_FORMAT_INT_BGR: /* Assume XBGR format */ - format = GL_RGBA; - type = GL_UNSIGNED_INT_8_8_8_8_REV; - forceAlphaToOne = GL_TRUE; - break; - case IMAGE_FORMAT_INT_RGB: /* Assume XRGB format */ - forceAlphaToOne = GL_TRUE; - /* Fall through to next case */ - case IMAGE_FORMAT_INT_ARGB: - format = GL_BGRA; - type = GL_UNSIGNED_INT_8_8_8_8_REV; - break; - /* This method only supports 3 and 4 components formats and INT types. */ - case IMAGE_FORMAT_BYTE_LA: - case IMAGE_FORMAT_BYTE_GRAY: - case IMAGE_FORMAT_USHORT_GRAY: - case IMAGE_FORMAT_BYTE_BGR: - case IMAGE_FORMAT_BYTE_RGB: - case IMAGE_FORMAT_BYTE_RGBA: - case IMAGE_FORMAT_BYTE_ABGR: - default: - throwAssert(env, "updateTexture2DSubImage : imageFormat illegal format"); - return; - } - - numBytes = 4; - - tmpInt = (jint*)((jbyte*)imageObjPtr + - (tilew * imgYOffset + imgXOffset)*numBytes); - - /* Force Alpha to 1.0 if needed */ - if(forceAlphaToOne) { - glPixelTransferf(GL_ALPHA_SCALE, 0.0f); - glPixelTransferf(GL_ALPHA_BIAS, 1.0f); - } - - glTexSubImage2D(target, level, xoffset, yoffset, width, height, - format, type, (GLvoid *)tmpInt); - - /* Restore Alpha scale and bias */ - if(forceAlphaToOne) { - glPixelTransferf(GL_ALPHA_SCALE, 1.0f); - glPixelTransferf(GL_ALPHA_BIAS, 0.0f); - } - } - else { - throwAssert(env, "updateTexture2DImage : illegal image data type"); - return; - } - - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - (*(table->ReleasePrimitiveArrayCritical))(env, data, imageObjPtr, 0); - } - - if (pixelStore) { - glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_bindTexture2D( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint objectId, - jboolean enable) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - glDisable(GL_TEXTURE_CUBE_MAP); - glDisable(GL_TEXTURE_3D); - - if (enable == JNI_FALSE) { - glDisable(GL_TEXTURE_2D); - } else { - glBindTexture(GL_TEXTURE_2D, objectId); - glEnable(GL_TEXTURE_2D); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DFilterModes( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint minFilter, - jint magFilter) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureFilterModes(ctxProperties, GL_TEXTURE_2D, - minFilter, magFilter); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DLodRange( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint baseLevel, - jint maximumLevel, - jfloat minimumLOD, - jfloat maximumLOD) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureLodRange(ctxProperties, GL_TEXTURE_2D, - baseLevel, maximumLevel, - minimumLOD, maximumLOD); -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DLodOffset( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat lodOffsetS, - jfloat lodOffsetT, - jfloat lodOffsetR) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureLodOffset(ctxProperties, GL_TEXTURE_2D, - lodOffsetS, lodOffsetT, lodOffsetR); -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DBoundary( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint boundaryModeS, - jint boundaryModeT, - jfloat boundaryRed, - jfloat boundaryGreen, - jfloat boundaryBlue, - jfloat boundaryAlpha) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureBoundary(ctxProperties, GL_TEXTURE_2D, - boundaryModeS, boundaryModeT, -1, - boundaryRed, boundaryGreen, - boundaryBlue, boundaryAlpha); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DSharpenFunc( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint numPts, - jfloatArray pts) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureSharpenFunc(env, ctxProperties, GL_TEXTURE_2D, numPts, pts); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DFilter4Func( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint numPts, - jfloatArray pts) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureFilter4Func(env, ctxProperties, GL_TEXTURE_2D, numPts, pts); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DAnisotropicFilter( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat degree) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureAnisotropicFilter(env, ctxProperties, GL_TEXTURE_2D, degree); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DSubImage( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint level, - jint xoffset, - jint yoffset, - jint textureFormat, - jint imageFormat, - jint imgXOffset, - jint imgYOffset, - jint tilew, - jint width, - jint height, - jint dataType, - jobject data, - jboolean useAutoMipMap) -{ - /* Note : useAutoMipMap is not use for subImage in ogl pipe */ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - updateTexture2DSubImage(env, ctxProperties, GL_TEXTURE_2D, - level, xoffset, yoffset, - textureFormat, imageFormat, - imgXOffset, imgYOffset, tilew, width, height, - dataType, data); -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DImage( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint numLevels, - jint level, - jint textureFormat, - jint imageFormat, - jint width, - jint height, - jint boundaryWidth, - jint dataType, - jobject data, - jboolean useAutoMipMap) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTexture2DImage(env, ctxProperties, GL_TEXTURE_2D, - numLevels, level, textureFormat, imageFormat, - width, height, boundaryWidth, dataType, data, useAutoMipMap); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_bindTexture3D( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint objectId, - jboolean enable) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - /* textureCubeMap will take precedure over 3D Texture */ - glDisable(GL_TEXTURE_CUBE_MAP); - - if (enable == JNI_FALSE) { - glDisable(GL_TEXTURE_3D); - } else { - glBindTexture(GL_TEXTURE_3D, objectId); - glEnable(GL_TEXTURE_3D); - } -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DFilterModes( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint minFilter, - jint magFilter) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureFilterModes(ctxProperties, GL_TEXTURE_3D, - minFilter, magFilter); -} - - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DLodRange( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint baseLevel, - jint maximumLevel, - jfloat minimumLOD, - jfloat maximumLOD) -{ - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureLodRange(ctxProperties, GL_TEXTURE_3D, - baseLevel, maximumLevel, - minimumLOD, maximumLOD); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DLodOffset( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat lodOffsetS, - jfloat lodOffsetT, - jfloat lodOffsetR) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureLodOffset(ctxProperties, GL_TEXTURE_3D, - lodOffsetS, lodOffsetT, lodOffsetR); -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DBoundary( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint boundaryModeS, - jint boundaryModeT, - jint boundaryModeR, - jfloat boundaryRed, - jfloat boundaryGreen, - jfloat boundaryBlue, - jfloat boundaryAlpha) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureBoundary(ctxProperties, GL_TEXTURE_3D, - boundaryModeS, boundaryModeT, boundaryModeR, - boundaryRed, boundaryGreen, - boundaryBlue, boundaryAlpha); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DSharpenFunc( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint numPts, - jfloatArray pts) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureSharpenFunc(env, ctxProperties, GL_TEXTURE_3D, numPts, pts); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DFilter4Func( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint numPts, - jfloatArray pts) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureFilter4Func(env, ctxProperties, GL_TEXTURE_3D, numPts, pts); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DAnisotropicFilter( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat degree) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureAnisotropicFilter(env, ctxProperties, GL_TEXTURE_3D, degree); -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DImage( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint numLevels, - jint level, - jint textureFormat, - jint imageFormat, - jint width, - jint height, - jint depth, - jint boundaryWidth, - jint dataType, - jobject data, - jboolean useAutoMipMap) -{ - void *imageObjPtr; - GLenum format = 0, internalFormat = 0, type = GL_UNSIGNED_INT_8_8_8_8; - JNIEnv table = *env; - GLboolean forceAlphaToOne = GL_FALSE; - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - imageObjPtr = (void *)(*(table->GetPrimitiveArrayCritical))(env, (jarray)data, NULL); - } - else { - imageObjPtr = (void *)(*(table->GetDirectBufferAddress))(env, data); - } - - switch (textureFormat) { - case INTENSITY: - internalFormat = GL_INTENSITY; - break; - case LUMINANCE: - internalFormat = GL_LUMINANCE; - break; - case ALPHA: - internalFormat = GL_ALPHA; - break; - case LUMINANCE_ALPHA: - internalFormat = GL_LUMINANCE_ALPHA; - break; - case J3D_RGB: - internalFormat = GL_RGB; - break; - case J3D_RGBA: - internalFormat = GL_RGBA; - break; - default: - throwAssert(env, "updateTexture3DImage : textureFormat illegal format"); - return; - } - - if (useAutoMipMap) { - glTexParameteri(GL_TEXTURE_3D, GL_GENERATE_MIPMAP, GL_TRUE); - } - else { - glTexParameteri(GL_TEXTURE_3D, GL_GENERATE_MIPMAP, GL_FALSE); - } - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_BYTE_BUFFER)) { - switch (imageFormat) { - /* GL_BGR */ - case IMAGE_FORMAT_BYTE_BGR: - format = GL_BGR; - break; - case IMAGE_FORMAT_BYTE_RGB: - format = GL_RGB; - break; - /* GL_ABGR_EXT */ - case IMAGE_FORMAT_BYTE_ABGR: - if (ctxProperties->abgr_ext) { /* If its zero, should never come here! */ - format = GL_ABGR_EXT; - } - else { - throwAssert(env, "updateTexture3DImage : GL_ABGR_EXT format is unsupported"); - return; - } - break; - case IMAGE_FORMAT_BYTE_RGBA: - format = GL_RGBA; - break; - case IMAGE_FORMAT_BYTE_LA: - /* all LA types are stored as LA8 */ - format = GL_LUMINANCE_ALPHA; - break; - case IMAGE_FORMAT_BYTE_GRAY: - if (internalFormat == GL_ALPHA) { - format = GL_ALPHA; - } else { - format = GL_LUMINANCE; - } - break; - - case IMAGE_FORMAT_USHORT_GRAY: - case IMAGE_FORMAT_INT_BGR: - case IMAGE_FORMAT_INT_RGB: - case IMAGE_FORMAT_INT_ARGB: - default: - throwAssert(env, "updateTexture3DImage : imageFormat illegal format"); - return; - } - - ctxProperties->glTexImage3DEXT(GL_TEXTURE_3D, - level, internalFormat, - width, height, depth, boundaryWidth, - format, GL_UNSIGNED_BYTE, - imageObjPtr); - - } - else if((dataType == IMAGE_DATA_TYPE_INT_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_BUFFER)) { - switch (imageFormat) { - /* GL_BGR */ - case IMAGE_FORMAT_INT_BGR: /* Assume XBGR format */ - format = GL_RGBA; - type = GL_UNSIGNED_INT_8_8_8_8_REV; - forceAlphaToOne = GL_TRUE; - break; - case IMAGE_FORMAT_INT_RGB: /* Assume XRGB format */ - forceAlphaToOne = GL_TRUE; - /* Fall through to next case */ - case IMAGE_FORMAT_INT_ARGB: - format = GL_BGRA; - type = GL_UNSIGNED_INT_8_8_8_8_REV; - break; - /* This method only supports 3 and 4 components formats and INT types. */ - case IMAGE_FORMAT_BYTE_LA: - case IMAGE_FORMAT_BYTE_GRAY: - case IMAGE_FORMAT_USHORT_GRAY: - case IMAGE_FORMAT_BYTE_BGR: - case IMAGE_FORMAT_BYTE_RGB: - case IMAGE_FORMAT_BYTE_RGBA: - case IMAGE_FORMAT_BYTE_ABGR: - default: - throwAssert(env, "updateTexture3DImage : imageFormat illegal format"); - return; - } - - /* Force Alpha to 1.0 if needed */ - if(forceAlphaToOne) { - glPixelTransferf(GL_ALPHA_SCALE, 0.0f); - glPixelTransferf(GL_ALPHA_BIAS, 1.0f); - } - - ctxProperties->glTexImage3DEXT(GL_TEXTURE_3D, - level, internalFormat, - width, height, depth, boundaryWidth, - format, type, imageObjPtr); - - /* Restore Alpha scale and bias */ - if(forceAlphaToOne) { - glPixelTransferf(GL_ALPHA_SCALE, 1.0f); - glPixelTransferf(GL_ALPHA_BIAS, 0.0f); - } - } - else { - throwAssert(env, "updateTexture3DImage : illegal image data type"); - } - - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - (*(table->ReleasePrimitiveArrayCritical))(env, data, imageObjPtr, 0); - } - -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DSubImage( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint level, - jint xoffset, - jint yoffset, - jint zoffset, - jint textureFormat, - jint imageFormat, - jint imgXOffset, - jint imgYOffset, - jint imgZOffset, - jint tilew, - jint tileh, - jint width, - jint height, - jint depth, - jint dataType, - jobject data, - jboolean useAutoMipMap) { - - /* Note : useAutoMipMap is not use for SubImage in ogl pipe */ - - void *imageObjPtr; - GLenum format = 0, internalFormat = 0, type = GL_UNSIGNED_INT_8_8_8_8; - JNIEnv table = *env; - GLboolean forceAlphaToOne = GL_FALSE; - jbyte *tmpByte; - jint *tmpInt; - jint numBytes = 0; - jboolean pixelStore = JNI_FALSE; - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - imageObjPtr = (void *)(*(table->GetPrimitiveArrayCritical))(env, (jarray)data, NULL); - } - else { - imageObjPtr = (void *)(*(table->GetDirectBufferAddress))(env, data); - } - - if (imgXOffset > 0 || (width < tilew)) { - pixelStore = JNI_TRUE; - glPixelStorei(GL_UNPACK_ROW_LENGTH, tilew); - } - - switch (textureFormat) { - case INTENSITY: - internalFormat = GL_INTENSITY; - break; - case LUMINANCE: - internalFormat = GL_LUMINANCE; - break; - case ALPHA: - internalFormat = GL_ALPHA; - break; - case LUMINANCE_ALPHA: - internalFormat = GL_LUMINANCE_ALPHA; - break; - case J3D_RGB: - internalFormat = GL_RGB; - break; - case J3D_RGBA: - internalFormat = GL_RGBA; - break; - default: - throwAssert(env, "updateTexture3DSubImage : textureFormat illegal format"); - break; - } - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_BYTE_BUFFER)) { - switch (imageFormat) { - /* GL_BGR */ - case IMAGE_FORMAT_BYTE_BGR: - format = GL_BGR; - numBytes = 3; - break; - case IMAGE_FORMAT_BYTE_RGB: - format = GL_RGB; - numBytes = 3; - break; - /* GL_ABGR_EXT */ - case IMAGE_FORMAT_BYTE_ABGR: - if (ctxProperties->abgr_ext) { /* If its zero, should never come here! */ - format = GL_ABGR_EXT; - numBytes = 4; - } - else { - throwAssert(env, "updateTexture3DSubImage : GL_ABGR_EXT format is unsupported"); - } - break; - case IMAGE_FORMAT_BYTE_RGBA: - format = GL_RGBA; - numBytes = 4; - break; - case IMAGE_FORMAT_BYTE_LA: - /* all LA types are stored as LA8 */ - format = GL_LUMINANCE_ALPHA; - numBytes = 2; - break; - case IMAGE_FORMAT_BYTE_GRAY: - if (internalFormat == GL_ALPHA) { - format = GL_ALPHA; - numBytes = 1; - } else { - format = GL_LUMINANCE; - numBytes = 1; - } - break; - - case IMAGE_FORMAT_USHORT_GRAY: - case IMAGE_FORMAT_INT_BGR: - case IMAGE_FORMAT_INT_RGB: - case IMAGE_FORMAT_INT_ARGB: - default: - throwAssert(env, "updateTexture3DSubImage : imageFormat illegal format"); - break; - } - - tmpByte = (jbyte*)imageObjPtr + - (tilew * tileh * imgZOffset + tilew * imgYOffset + imgXOffset) * - numBytes; - - ctxProperties->glTexSubImage3DEXT(GL_TEXTURE_3D, - level, xoffset, yoffset, zoffset, - width, height, depth, - format, GL_UNSIGNED_BYTE, - (GLvoid *)tmpByte); - - - } - else if((dataType == IMAGE_DATA_TYPE_INT_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_BUFFER)) { - switch (imageFormat) { - /* GL_BGR */ - case IMAGE_FORMAT_INT_BGR: /* Assume XBGR format */ - format = GL_RGBA; - type = GL_UNSIGNED_INT_8_8_8_8_REV; - forceAlphaToOne = GL_TRUE; - break; - case IMAGE_FORMAT_INT_RGB: /* Assume XRGB format */ - forceAlphaToOne = GL_TRUE; - /* Fall through to next case */ - case IMAGE_FORMAT_INT_ARGB: - format = GL_BGRA; - type = GL_UNSIGNED_INT_8_8_8_8_REV; - break; - /* This method only supports 3 and 4 components formats and INT types. */ - case IMAGE_FORMAT_BYTE_LA: - case IMAGE_FORMAT_BYTE_GRAY: - case IMAGE_FORMAT_USHORT_GRAY: - case IMAGE_FORMAT_BYTE_BGR: - case IMAGE_FORMAT_BYTE_RGB: - case IMAGE_FORMAT_BYTE_RGBA: - case IMAGE_FORMAT_BYTE_ABGR: - default: - throwAssert(env, "updateTexture3DSubImage : imageFormat illegal format"); - break; - } - - numBytes = 4; - - tmpInt = (jint*)((jbyte*)imageObjPtr + - (tilew * tileh * imgZOffset + - tilew * imgYOffset + imgXOffset)*numBytes); - - /* Force Alpha to 1.0 if needed */ - if(forceAlphaToOne) { - glPixelTransferf(GL_ALPHA_SCALE, 0.0f); - glPixelTransferf(GL_ALPHA_BIAS, 1.0f); - } - - ctxProperties->glTexSubImage3DEXT(GL_TEXTURE_3D, - level, xoffset, yoffset, zoffset, - width, height, depth, - format, type, - (GLvoid *)tmpInt); - - /* Restore Alpha scale and bias */ - if(forceAlphaToOne) { - glPixelTransferf(GL_ALPHA_SCALE, 1.0f); - glPixelTransferf(GL_ALPHA_BIAS, 0.0f); - } - } - else { - throwAssert(env, "updateTexture3DImage : illegal image data type"); - return; - } - - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - (*(table->ReleasePrimitiveArrayCritical))(env, data, imageObjPtr, 0); - } - - if (pixelStore) { - glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); - } -} - - -/* - * mapping from java enum to gl enum - */ - -jint _gl_textureCubeMapFace[] = { - GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT, - GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT, - GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT, - GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT, - GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT, - GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT, -}; - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_bindTextureCubeMap( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint objectId, - jboolean enable) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - /* - * TextureCubeMap will take precedure over 3D Texture so - * there is no need to disable 3D Texture here. - */ - if (enable == JNI_FALSE) { - glDisable(GL_TEXTURE_CUBE_MAP); - } else { - glBindTexture(GL_TEXTURE_CUBE_MAP, objectId); - glEnable(GL_TEXTURE_CUBE_MAP); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapFilterModes( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint minFilter, - jint magFilter) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureFilterModes(ctxProperties, - GL_TEXTURE_CUBE_MAP, - minFilter, magFilter); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapLodRange( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint baseLevel, - jint maximumLevel, - jfloat minimumLOD, - jfloat maximumLOD) -{ - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureLodRange(ctxProperties, - GL_TEXTURE_CUBE_MAP, - baseLevel, maximumLevel, - minimumLOD, maximumLOD); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapLodOffset( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat lodOffsetS, - jfloat lodOffsetT, - jfloat lodOffsetR) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureLodOffset(ctxProperties, - GL_TEXTURE_CUBE_MAP, - lodOffsetS, lodOffsetT, lodOffsetR); -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapBoundary( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint boundaryModeS, - jint boundaryModeT, - jfloat boundaryRed, - jfloat boundaryGreen, - jfloat boundaryBlue, - jfloat boundaryAlpha) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureBoundary(ctxProperties, - GL_TEXTURE_CUBE_MAP, - boundaryModeS, boundaryModeT, -1, - boundaryRed, boundaryGreen, - boundaryBlue, boundaryAlpha); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapSharpenFunc( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint numPts, - jfloatArray pts) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureSharpenFunc(env, ctxProperties, - GL_TEXTURE_CUBE_MAP, - numPts, pts); -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapFilter4Func( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint numPts, - jfloatArray pts) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureFilter4Func(env, ctxProperties, - GL_TEXTURE_CUBE_MAP, - numPts, pts); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapAnisotropicFilter( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat degree) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureAnisotropicFilter(env, ctxProperties, - GL_TEXTURE_CUBE_MAP, - degree); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapSubImage( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint face, - jint level, - jint xoffset, - jint yoffset, - jint textureFormat, - jint imageFormat, - jint imgXOffset, - jint imgYOffset, - jint tilew, - jint width, - jint height, - jint dataType, - jobject data, - jboolean useAutoMipMap) -{ - /* Note : useAutoMipMap is not use for SubImage in ogl pipe */ - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - updateTexture2DSubImage(env, ctxProperties, _gl_textureCubeMapFace[face], - level, xoffset, yoffset, textureFormat, - imageFormat, imgXOffset, imgYOffset, tilew, - width, height, dataType, data); -} - - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapImage( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint face, - jint numLevels, - jint level, - jint textureFormat, - jint imageFormat, - jint width, - jint height, - jint boundaryWidth, - jint dataType, - jobject data, - jboolean useAutoMipMap) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - updateTexture2DImage(env, ctxProperties, _gl_textureCubeMapFace[face], - numLevels, level, textureFormat, imageFormat, - width, height, boundaryWidth, dataType, data, useAutoMipMap); -} - -JNIEXPORT -jboolean JNICALL Java_javax_media_j3d_NativePipeline_decal1stChildSetup( - JNIEnv *env, - jobject obj, - jlong ctxInfo) -{ - glEnable(GL_STENCIL_TEST); - glClearStencil(0x0); - glClear(GL_STENCIL_BUFFER_BIT); - glStencilFunc (GL_ALWAYS, 0x1, 0x1); - glStencilOp (GL_KEEP, GL_KEEP, GL_REPLACE); - if (glIsEnabled(GL_DEPTH_TEST)) - return JNI_TRUE; - else - return JNI_FALSE; -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_decalNthChildSetup( - JNIEnv *env, - jobject obj, - jlong ctxInfo) -{ - glDisable(GL_DEPTH_TEST); - glStencilFunc (GL_EQUAL, 0x1, 0x1); - glStencilOp (GL_KEEP, GL_KEEP, GL_KEEP); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_decalReset( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jboolean depthBufferEnable) -{ - glDisable(GL_STENCIL_TEST); - if (depthBufferEnable == JNI_TRUE) - glEnable(GL_DEPTH_TEST); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_ctxUpdateEyeLightingEnable( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jboolean localEyeLightingEnable) -{ - if (localEyeLightingEnable == JNI_TRUE) { - glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE); - } else { - glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_FALSE); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateSeparateSpecularColorEnable( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jboolean enable) -{ - if (enable) { - glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR); - } else { - glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SINGLE_COLOR); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureUnitState( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint index, - jboolean enable) -{ - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - if (ctxProperties->gl13 && index >= 0) { - ctxProperties->glActiveTexture(index + GL_TEXTURE0); - ctxProperties->glClientActiveTexture(GL_TEXTURE0 + index); - if (ctxProperties->textureRegisterCombinersAvailable) { - ctxProperties->currentTextureUnit = index + GL_TEXTURE0; - ctxProperties->currentCombinerUnit = index + GL_COMBINER0_NV; - if (ctxProperties->glCombinerParameteriNV != NULL) - ctxProperties->glCombinerParameteriNV( - GL_NUM_GENERAL_COMBINERS_NV, index + 1); - } - } - - if (enable == JNI_FALSE) { - /* if not enabled, then don't enable any tex mapping */ - - glDisable(GL_TEXTURE_1D); - glDisable(GL_TEXTURE_2D); - glDisable(GL_TEXTURE_3D); - glDisable(GL_TEXTURE_CUBE_MAP); - } - - /* - * if it is enabled, the enable flag will be taken care of - * in the bindTexture call - */ -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setBlendColor( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat colorRed, - jfloat colorGreen, - jfloat colorBlue, - jfloat colorAlpha) -{ - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - if (ctxProperties->blend_color_ext) { - /* - fprintf(stderr, "setBlendColor is on: %f %f %f %f\n", - colorRed, colorGreen, colorBlue, colorAlpha); - */ - - ctxProperties->glBlendColor(colorRed, colorGreen, colorBlue, colorAlpha); - } -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setBlendFunc( - JNIEnv * env, - jobject obj, - jlong ctxInfo, - jint srcBlendFunction, - jint dstBlendFunction) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - glEnable(GL_BLEND); - glBlendFunc(ctxProperties->blendFunctionTable[srcBlendFunction], - ctxProperties->blendFunctionTable[dstBlendFunction]); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setFogEnableFlag( - JNIEnv * env, - jobject obj, - jlong ctxInfo, - jboolean enable) -{ - if (enable == JNI_TRUE) - glEnable(GL_FOG); - else - glDisable(GL_FOG); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_activeTextureUnit( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint index) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - if (ctxProperties->gl13) { - ctxProperties->glActiveTexture(GL_TEXTURE0 + index); - ctxProperties->glClientActiveTexture(GL_TEXTURE0 + index); - } -} - - -/* - * strJavaToC - * - * Returns a copy of the specified Java String object as a new, - * null-terminated "C" string. The caller must free this string. - */ -char * -strJavaToC(JNIEnv *env, jstring str) -{ - JNIEnv table = *env; - jclass oom; - - const char *strUTFBytes; /* Array of UTF-8 bytes */ - char *cString = NULL; /* Null-terminated "C" string */ - - if (str == NULL) { - return NULL; - } - - strUTFBytes = table->GetStringUTFChars(env, str, NULL); - if (strUTFBytes == NULL) { - /* Just return, since GetStringUTFChars will throw OOM if it returns NULL */ - return NULL; - } - - cString = strdup(strUTFBytes); - table->ReleaseStringUTFChars(env, str, strUTFBytes); - if (cString == NULL) { - if ((oom = table->FindClass(env, "java/lang/OutOfMemoryError")) != NULL) { - table->ThrowNew(env, oom, "strdup"); - } - return NULL; - } - - return cString; -} - - -/* - * createShaderError - * - * Constructs a new ShaderError object from the given error code, - * error message, and detail message. - */ -jobject -createShaderError( - JNIEnv *env, - int errorCode, - const char *errorMsg, - const char *detailMsg) -{ - JNIEnv table = *env; - jclass shaderErrorClass; - jobject shaderError; - jmethodID methodID; - jstring errorMsgString = NULL; - jstring detailMsgString = NULL; - - if (errorMsg != NULL) { - if ((errorMsgString = table->NewStringUTF(env, errorMsg)) == NULL) { - return NULL; - } - } - - if (detailMsg != NULL) { - if ((detailMsgString = table->NewStringUTF(env, detailMsg)) == NULL) { - return NULL; - } - } - - shaderErrorClass = (*(table->FindClass))(env, "javax/media/j3d/ShaderError"); - if (shaderErrorClass == NULL) { - return NULL; - } - - methodID = table->GetMethodID(env, shaderErrorClass, - "<init>", - "(ILjava/lang/String;)V"); - if (methodID == NULL) { - return NULL; - } - - shaderError = table->NewObject(env, shaderErrorClass, methodID, - errorCode, errorMsgString); - if (shaderError == NULL) { - return NULL; - } - - methodID = table->GetMethodID(env, shaderErrorClass, - "setDetailMessage", - "(Ljava/lang/String;)V"); - if (methodID == NULL) { - return NULL; - } - - table->CallVoidMethod(env, shaderError, methodID, - detailMsgString); - - return shaderError; -} |