diff options
Diffstat (limited to 'src/native/ogl/CgShaderProgram.c')
-rw-r--r-- | src/native/ogl/CgShaderProgram.c | 2460 |
1 files changed, 0 insertions, 2460 deletions
diff --git a/src/native/ogl/CgShaderProgram.c b/src/native/ogl/CgShaderProgram.c deleted file mode 100644 index 192b64d..0000000 --- a/src/native/ogl/CgShaderProgram.c +++ /dev/null @@ -1,2460 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2005-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" -#include "CgWrapper.h" - -#if defined(UNIX) -#include <dlfcn.h> -#endif - -#ifdef DEBUG -/* Uncomment the following for VERBOSE debug messages */ -/* #define VERBOSE */ -#endif /* DEBUG */ - - -extern char *strJavaToC(JNIEnv *env, jstring str); -extern void throwAssert(JNIEnv *env, char *str); -extern jobject createShaderError(JNIEnv *env, - int errorCode, - const char *errorMsg, - const char *detailMsg); - -static void cgVertexAttrPointer(GraphicsContextPropertiesInfo *ctxProperties, - int index, int size, int type, int stride, - const void *pointer); -static void cgEnableVertexAttrArray(GraphicsContextPropertiesInfo *ctxProperties, - int index); -static void cgDisableVertexAttrArray(GraphicsContextPropertiesInfo *ctxProperties, - int index); -static void cgVertexAttr(GraphicsContextPropertiesInfo *ctxProperties, - int index, const float *v); - - -/* Global CG wrapper info struct, created by MasterControl during initialization */ -static CgWrapperInfo *globalCgWrapperInfo = NULL; - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: loadNativeCgLibrary - * Signature: ([Ljava/lang/String;)Z - */ -JNIEXPORT jboolean JNICALL -Java_javax_media_j3d_NativePipeline_loadNativeCgLibrary( - JNIEnv *env, - jobject thiz, - jobjectArray libpath) -{ - CgWrapperInfo *cgWrapperInfo; - -#ifdef COMPILE_CG_SHADERS - int i, pathLen; - char *errName = NULL; - -#ifdef WIN32 - DWORD err; - LPTSTR errString; - UINT origErrorMode; -#endif /* WIN32 */ - -#endif /* COMPILE_CG_SHADERS */ - - /* - * This method is called exactly once to load and initialize the - * CG wrapper library. - */ - - /* Assertion check that we don't get called more than once */ - if (globalCgWrapperInfo != NULL) { - throwAssert(env, "NativePipeline.loadNativeCgLibrary called more than once"); - return JNI_FALSE; - } - - /* Allocate global Cg wrapper struct */ - cgWrapperInfo = (CgWrapperInfo*)malloc(sizeof(CgWrapperInfo)); - cgWrapperInfo->loaded = JNI_FALSE; - cgWrapperInfo->cgLibraryHandle = NULL; - -#ifdef COMPILE_CG_SHADERS - - /* Remove the following print statement when the native Cg code is stable */ - fprintf(stderr, "*** JAVA 3D : loading experimental native Cg library\n"); - - /* Get number of entries in libpath array */ - pathLen = (*env)->GetArrayLength(env, libpath); - /*fprintf(stderr, "pathLen = %d\n", pathLen);*/ - -#ifdef UNIX - - for (i = 0; i < pathLen; i++) { - jstring libname; - char *libnameStr; - - libname = (*env)->GetObjectArrayElement(env, libpath, i); - libnameStr = strJavaToC(env, libname); - /*fprintf(stderr, "dlopen(%s)\n", libnameStr);*/ - cgWrapperInfo->cgLibraryHandle = dlopen(libnameStr, RTLD_LAZY); - if ((cgWrapperInfo->cgLibraryHandle == NULL) && (i == pathLen-1)) { - errName = strdup(libnameStr); - } - free(libnameStr); - if (cgWrapperInfo->cgLibraryHandle != NULL) { - break; - } - } - - if (cgWrapperInfo->cgLibraryHandle == NULL) { - fprintf(stderr, "JAVA 3D ERROR : Unable to load library "); - perror(errName); - free(errName); - free(cgWrapperInfo); - return JNI_FALSE; - } - - /* Get pointer to library function to setup function pointers */ - cgWrapperInfo->j3dLoadCgFunctionPointers = - (PFNJ3DLOADCGFUNCTIONPOINTERS)dlsym(cgWrapperInfo->cgLibraryHandle, - "j3dLoadCgFunctionPointers"); - -#endif /* UNIX */ - -#ifdef WIN32 - - /* Load the library, suppressing any dialog boxes that may occur */ - origErrorMode = SetErrorMode(SEM_NOOPENFILEERRORBOX | - SEM_FAILCRITICALERRORS); - - for (i = 0; i < pathLen; i++) { - jstring libname; - char *libnameStr; - - libname = (*env)->GetObjectArrayElement(env, libpath, i); - libnameStr = strJavaToC(env, libname); - /*fprintf(stderr, "LoadLibrary(%s)\n", libnameStr);*/ - cgWrapperInfo->cgLibraryHandle = LoadLibrary(libnameStr); - if ((cgWrapperInfo->cgLibraryHandle == NULL) && (i == pathLen-1)) { - errName = strdup(libnameStr); - } - free(libnameStr); - if (cgWrapperInfo->cgLibraryHandle != NULL) { - break; - } - } - - SetErrorMode(origErrorMode); - - if (cgWrapperInfo->cgLibraryHandle == NULL) { - err = GetLastError(); - FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM, - NULL, err, 0, (LPTSTR)&errString, 0, NULL); - - fprintf(stderr, - "JAVA 3D ERROR : Unable to load library %s: %s\n", - errName, errString); - free(errName); - return JNI_FALSE; - } - - cgWrapperInfo->j3dLoadCgFunctionPointers = - (PFNJ3DLOADCGFUNCTIONPOINTERS)GetProcAddress( - (HMODULE)cgWrapperInfo->cgLibraryHandle, - "j3dLoadCgFunctionPointers"); - - if (cgWrapperInfo->j3dLoadCgFunctionPointers == NULL) { - err = GetLastError(); - FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM, - NULL, err, 0, (LPTSTR)&errString, 0, NULL); - - fprintf(stderr, - "JAVA 3D ERROR : Unable to find: j3dLoadCgFunctionPointers: %s\n", - errString); - return JNI_FALSE; - } - -#endif /* WIN32 */ - - if (cgWrapperInfo->j3dLoadCgFunctionPointers) { - cgWrapperInfo->j3dLoadCgFunctionPointers(cgWrapperInfo); - cgWrapperInfo->loaded = JNI_TRUE; - } - -#else /* COMPILE_CG_SHADERS */ - - fprintf(stderr, "Java 3D: CgShaderProgram code not compiled\n"); - -#endif /* COMPILE_CG_SHADERS */ - - /* Save pointer in global variable */ - globalCgWrapperInfo = cgWrapperInfo; - - return cgWrapperInfo->loaded; -} - - -#ifdef COMPILE_CG_SHADERS - -static char * -getErrorLog( - GraphicsContextPropertiesInfo* ctxProperties, - CGerror lastError) -{ - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - - if (lastError != 0) { - const char *errString = cgWrapperInfo->cgGetErrorString(lastError); - const char *delimeter1 = "\n"; - const char *listing = cgWrapperInfo->cgGetLastListing(cgCtxInfo->cgCtx); - - char *errMsg = (char *) - malloc(strlen(errString) + strlen(delimeter1) + strlen(listing) + 1); - - if (errMsg == NULL) { - perror("malloc"); - return NULL; - } - - strcpy(errMsg, errString); - strcat(errMsg, delimeter1); - strcat(errMsg, listing); - - return errMsg; - } - - fprintf(stderr, "Assertion error: assert(lastError != 0) failed\n"); - return NULL; -} - - -static CgCtxInfo * -createCgShaderContext( - JNIEnv *env, - GraphicsContextPropertiesInfo *ctxInfo) -{ - jclass oom; - CGerror lastError; - CgCtxInfo *cgCtxInfo = NULL; - CgWrapperInfo *cgWrapperInfo; - - /* Assertion check that we don't get here unless the library is loaded */ - if (globalCgWrapperInfo == NULL) { - throwAssert(env, "createCgShaderContext: cgWrapperInfo is NULL"); - return NULL; - } - - if (!globalCgWrapperInfo->loaded) { - throwAssert(env, "createCgShaderContext: cgWrapper library not loaded"); - return NULL; - } - - cgCtxInfo = (CgCtxInfo*)malloc(sizeof(CgCtxInfo)); - if (cgCtxInfo == NULL) { - if ((oom = (*env)->FindClass(env, "java/lang/OutOfMemoryError")) != NULL) { - (*env)->ThrowNew(env, oom, "malloc"); - } - return NULL; - } - - /* Point to the global CG wrapper info */ - cgWrapperInfo = cgCtxInfo->cgWrapperInfo = globalCgWrapperInfo; - - /* Create CG context */ - cgCtxInfo->cgCtx = cgWrapperInfo->cgCreateContext(); - - if ((lastError = cgWrapperInfo->cgGetError()) != 0) { - fprintf(stderr, "Fatal error in creating Cg context:\n"); - fprintf(stderr, "\t%s\n", cgWrapperInfo->cgGetErrorString(lastError)); - free(cgCtxInfo); - return NULL; - } - - if (cgCtxInfo->cgCtx == 0) { - fprintf(stderr, "Invalid NULL Cg context\n"); - free(cgCtxInfo); - return NULL; - } - - /* Use GL_ARB_vertex_program extension if supported by video card */ - if (cgWrapperInfo->cgGLIsProfileSupported(CG_PROFILE_ARBVP1)) { -#ifdef VERBOSE - fprintf(stderr, "Using CG_PROFILE_ARBVP1\n"); -#endif /* VERBOSE */ - cgCtxInfo->vProfile = CG_PROFILE_ARBVP1; - } - else if (cgWrapperInfo->cgGLIsProfileSupported(CG_PROFILE_VP20)) { -#ifdef VERBOSE - fprintf(stderr, "Using CG_PROFILE_VP20\n"); -#endif /* VERBOSE */ - cgCtxInfo->vProfile = CG_PROFILE_VP20; - } - else { - fprintf(stderr, - "JAVA 3D ERROR : No CG vertex program profile is supported\n"); - free(cgCtxInfo); - return NULL; - } - - /* Use GL_ARB_fragment_program extension if supported by video card */ - if (cgWrapperInfo->cgGLIsProfileSupported(CG_PROFILE_ARBFP1)) { -#ifdef VERBOSE - fprintf(stderr, "Using CG_PROFILE_ARBFP1\n"); -#endif /* VERBOSE */ - cgCtxInfo->fProfile = CG_PROFILE_ARBFP1; - } - else if (cgWrapperInfo->cgGLIsProfileSupported(CG_PROFILE_FP20)) { -#ifdef VERBOSE - fprintf(stderr, "Using CG_PROFILE_FP20\n"); -#endif /* VERBOSE */ - cgCtxInfo->fProfile = CG_PROFILE_FP20; - } - else { - fprintf(stderr, - "JAVA 3D ERROR : No CG fragment program profile is supported\n"); - free(cgCtxInfo); - return NULL; - } - -#ifdef VERBOSE - fprintf(stderr, "createCgShaderContext: SUCCESS\n"); - fprintf(stderr, " cgCtx = 0x%x\n", cgCtxInfo->cgCtx); - fprintf(stderr, " vProfile = 0x%x\n", cgCtxInfo->vProfile); - fprintf(stderr, " fProfile = 0x%x\n", cgCtxInfo->fProfile); -#endif /* VERBOSE */ - - return cgCtxInfo; -} - -#endif /* COMPILE_CG_SHADERS */ - - -/* - * Called by getPropertiesFromCurrentContext to initialize the Cg - * shader function pointers and set the flag indicating whether Cg - * shaders are available. - */ -void -checkCgShaderExtensions( - JNIEnv *env, - jobject obj, - char *tmpExtensionStr, - GraphicsContextPropertiesInfo *ctxInfo, - jboolean cgLibraryAvailable) -{ - ctxInfo->shadingLanguageCg = JNI_FALSE; - ctxInfo->cgCtxInfo = NULL; - -#ifdef COMPILE_CG_SHADERS - if (cgLibraryAvailable) { - /* TODO: need to free ctxInfo->cgCtxInfo when ctxInfo is freed */ - ctxInfo->cgCtxInfo = createCgShaderContext(env, ctxInfo); - if (ctxInfo->cgCtxInfo != NULL) { - CgWrapperInfo *cgWrapperInfo = ctxInfo->cgCtxInfo->cgWrapperInfo; - -#ifdef VERBOSE - fprintf(stderr, "Cg ctx is available\n"); -#endif /* VERBOSE */ - ctxInfo->shadingLanguageCg = JNI_TRUE; - - /* TODO: Query Cg texture sampler limits */ - ctxInfo->maxTextureImageUnits = ctxInfo->maxTextureUnits; - ctxInfo->maxVertexTextureImageUnits = 0; - ctxInfo->maxCombinedTextureImageUnits = ctxInfo->maxTextureUnits; - - /* TODO: Query max vertex attrs */ - ctxInfo->maxVertexAttrs = 7; - - /* Initialize shader vertex attribute function pointers */ - ctxInfo->vertexAttrPointer = cgVertexAttrPointer; - ctxInfo->enableVertexAttrArray = cgEnableVertexAttrArray; - ctxInfo->disableVertexAttrArray = cgDisableVertexAttrArray; - ctxInfo->vertexAttr1fv = cgVertexAttr; - ctxInfo->vertexAttr2fv = cgVertexAttr; - ctxInfo->vertexAttr3fv = cgVertexAttr; - ctxInfo->vertexAttr4fv = cgVertexAttr; - } -#ifdef VERBOSE - else { - fprintf(stderr, "ERROR: Cg ctx *not* available\n"); - } -#endif /* VERBOSE */ - } -#endif /* COMPILE_CG_SHADERS */ - -} - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: createCgShader - * Signature: (JI[J)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_createCgShader( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint shaderType, - jlongArray shaderIdArray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - - jlong *shaderIdPtr; - CGprogram shaderId = 0; - jclass oom; - CgShaderInfo *cgShaderInfo; - -#ifdef VERBOSE - fprintf(stderr, "CgShaderProgramRetained.createCgShader\n"); -#endif /* VERBOSE */ - - cgShaderInfo = (CgShaderInfo*)malloc(sizeof(CgShaderInfo)); - if (cgShaderInfo == NULL) { - if ((oom = (*env)->FindClass(env, "java/lang/OutOfMemoryError")) != NULL) { - (*env)->ThrowNew(env, oom, "malloc"); - } - return NULL; - } - cgShaderInfo->cgShader = 0; - cgShaderInfo->shaderType = shaderType; - if (shaderType == javax_media_j3d_Shader_SHADER_TYPE_VERTEX) { - cgShaderInfo->shaderProfile = cgCtxInfo->vProfile; - } - else if (shaderType == javax_media_j3d_Shader_SHADER_TYPE_FRAGMENT) { - cgShaderInfo->shaderProfile = cgCtxInfo->fProfile; - } - else { - cgShaderInfo->shaderProfile = 0; - fprintf(stderr, "shaderType = %d\n", shaderType); - throwAssert(env, "unrecognized shaderType"); - return NULL; - } - - shaderIdPtr = (*env)->GetLongArrayElements(env, shaderIdArray, NULL); - shaderIdPtr[0] = (jlong) cgShaderInfo; - (*env)->ReleaseLongArrayElements(env, shaderIdArray, shaderIdPtr, 0); - -#else /* COMPILE_CG_SHADERS */ - - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, - "CgShaderProgram support not compiled", - NULL); - -#endif /* !COMPILE_CG_SHADERS */ - - return shaderError; -} - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: destroyCgShader - * Signature: (JJ)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_destroyCgShader( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderId) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - - CgShaderInfo *cgShaderInfo = (CgShaderInfo *)shaderId; - -#ifdef VERBOSE - fprintf(stderr, "CgShaderProgramRetained.destroyCgShader\n"); -#endif /* VERBOSE */ - - if (cgShaderInfo != NULL) { - if (cgShaderInfo->cgShader != 0) { - cgWrapperInfo->cgDestroyProgram(cgShaderInfo->cgShader); - } - - free(cgShaderInfo); - } - -#else /* COMPILE_CG_SHADERS */ - - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, - "CgShaderProgram support not compiled", - NULL); - -#endif /* !COMPILE_CG_SHADERS */ - - return shaderError; -} - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: compileCgShader - * Signature: (JJLjava/lang/String;)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_compileCgShader( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderId, - jstring program) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - - CgShaderInfo *cgShaderInfo = (CgShaderInfo *)shaderId; - CGerror lastError; - GLcharARB *shaderString = NULL; - -#ifdef VERBOSE - fprintf(stderr, "CgShaderProgramRetained.compileCgShader\n"); -#endif /* VERBOSE */ - - /* Assertion check the cgShaderInfo pointer */ - if (cgShaderInfo == NULL) { - throwAssert(env, "cgShaderInfo is NULL"); - return NULL; - } - - /* Assertion check the program string */ - if (program == NULL) { - throwAssert(env, "shader program string is NULL"); - return NULL; - } - - shaderString = strJavaToC(env, program); - if (shaderString == NULL) { - /* Just return, since strJavaToC will throw OOM if it returns NULL */ - return NULL; - } - - /* create the shader */ -#ifdef VERBOSE - if (cgShaderInfo->shaderType == javax_media_j3d_Shader_SHADER_TYPE_VERTEX) { - fprintf(stderr, "Create vertex shader\n"); - } - else if (cgShaderInfo->shaderType == javax_media_j3d_Shader_SHADER_TYPE_FRAGMENT) { - fprintf(stderr, "Create fragment shader\n"); - } - fprintf(stderr, "cgCtx = 0x%x\n", cgCtxInfo->cgCtx); - fprintf(stderr, "shaderProfile = 0x%x\n", cgShaderInfo->shaderProfile); -#endif /* VERBOSE */ - - cgShaderInfo->cgShader = cgWrapperInfo->cgCreateProgram(cgCtxInfo->cgCtx, - CG_SOURCE, shaderString, - cgShaderInfo->shaderProfile, NULL, NULL); - -#ifdef VERBOSE - fprintf(stderr, " cgShader = 0x%x\n", cgShaderInfo->cgShader); -#endif /* VERBOSE */ - - free(shaderString); - - if ((lastError = cgWrapperInfo->cgGetError()) != 0) { - char *detailMsg = getErrorLog(ctxProperties, lastError); - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_COMPILE_ERROR, - "Cg shader compile error", - detailMsg); - if (detailMsg != NULL) { - free(detailMsg); - } - } - -#else /* COMPILE_CG_SHADERS */ - - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, - "CgShaderProgram support not compiled", - NULL); - -#endif /* !COMPILE_CG_SHADERS */ - - return shaderError; -} - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: createCgShaderProgram - * Signature: (J[J)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_createCgShaderProgram( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlongArray shaderProgramIdArray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jlong *shaderProgramIdPtr; - - CgShaderProgramInfo *shaderProgramInfo = - (CgShaderProgramInfo*)malloc(sizeof(CgShaderProgramInfo)); - -#ifdef VERBOSE - fprintf(stderr, "CgShaderProgramRetained.createCgShaderProgram\n"); -#endif /* VERBOSE */ - - shaderProgramInfo->vShader = NULL; - shaderProgramInfo->fShader = NULL; - shaderProgramInfo->numVtxAttrs = 0; - shaderProgramInfo->vtxAttrs = NULL; - - shaderProgramIdPtr = (*env)->GetLongArrayElements(env, shaderProgramIdArray, NULL); - shaderProgramIdPtr[0] = (jlong)shaderProgramInfo; - (*env)->ReleaseLongArrayElements(env, shaderProgramIdArray, shaderProgramIdPtr, 0); - -#else /* COMPILE_CG_SHADERS */ - - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, - "CgShaderProgram support not compiled", - NULL); - -#endif /* !COMPILE_CG_SHADERS */ - - return shaderError; -} - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: destroyCgShaderProgram - * Signature: (JJ)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_destroyCgShaderProgram( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - CgShaderProgramInfo *shaderProgramInfo = (CgShaderProgramInfo*)shaderProgramId; - -#ifdef VERBOSE - fprintf(stderr, "CgShaderProgramRetained.destroyCgShaderProgram\n"); -#endif /* VERBOSE */ - - if (shaderProgramInfo != NULL) { - if (shaderProgramInfo->vtxAttrs != NULL) { - free(shaderProgramInfo->vtxAttrs); - shaderProgramInfo->vtxAttrs = NULL; - } - free(shaderProgramInfo); - } - -#else /* COMPILE_CG_SHADERS */ - - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, - "CgShaderProgram support not compiled", - NULL); - -#endif /* !COMPILE_CG_SHADERS */ - - return shaderError; -} - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: linkCgShaderProgram - * Signature: (JJ[J)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_linkCgShaderProgram( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlongArray shaderIdArray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - - jsize shaderIdArrayLength = (*env)->GetArrayLength(env, shaderIdArray); - jlong *shaderIdPtr = (*env)->GetLongArrayElements(env, shaderIdArray, NULL); - CGerror lastError; - - int i; - - CgShaderProgramInfo *shaderProgramInfo = (CgShaderProgramInfo*)shaderProgramId; - -#ifdef VERBOSE - fprintf(stderr, "CgShaderProgramRetained.linkCgShaderProgram\n"); -#endif /* VERBOSE */ - - /* - * NOTE: we assume that the caller has already verified that there - * is at most one vertex program and one fragment program - */ - shaderProgramInfo->vShader = NULL; - shaderProgramInfo->fShader = NULL; - for (i = 0; i < shaderIdArrayLength; i++) { - CgShaderInfo *shader = (CgShaderInfo*)shaderIdPtr[i]; - if (shader->shaderType == javax_media_j3d_Shader_SHADER_TYPE_VERTEX) { - shaderProgramInfo->vShader = shader; - } else { - shaderProgramInfo->fShader = shader; - } - - cgWrapperInfo->cgGLLoadProgram(shader->cgShader); - - if ((lastError = cgWrapperInfo->cgGetError()) != 0) { - char *detailMsg = getErrorLog(ctxProperties, lastError); - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_LINK_ERROR, - "Cg shader link/load error", - detailMsg); - if (detailMsg != NULL) { - free(detailMsg); - } - } - - cgWrapperInfo->cgGLBindProgram(shader->cgShader); - - if ((lastError = cgWrapperInfo->cgGetError()) != 0) { - char *detailMsg = getErrorLog(ctxProperties, lastError); - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_LINK_ERROR, - "Cg shader link/bind error", - detailMsg); - if (detailMsg != NULL) { - free(detailMsg); - } - } - } - - (*env)->ReleaseLongArrayElements(env, shaderIdArray, shaderIdPtr, JNI_ABORT); - -#else /* COMPILE_CG_SHADERS */ - - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, - "CgShaderProgram support not compiled", - NULL); - -#endif /* !COMPILE_CG_SHADERS */ - - return shaderError; -} - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: lookupCgVertexAttrNames - * Signature: (JJI[Ljava/lang/String;[Z)V - */ -JNIEXPORT void JNICALL -Java_javax_media_j3d_NativePipeline_lookupCgVertexAttrNames( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jint numAttrNames, - jobjectArray attrNames, - jbooleanArray errArr) -{ -#ifdef COMPILE_CG_SHADERS - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - - CgShaderProgramInfo *shaderProgramInfo = (CgShaderProgramInfo*)shaderProgramId; - - int i; - jstring attrName; - char *attrNameString; - jboolean *errPtr; - - errPtr = (*env)->GetBooleanArrayElements(env, errArr, NULL); - - if (shaderProgramInfo->vShader == NULL) { - /* If there if no vertex shader, no attributes can be looked up, so all fail */ - for (i = 0; i < numAttrNames; i++) { - errPtr[i] = JNI_TRUE; - } - (*env)->ReleaseBooleanArrayElements(env, errArr, errPtr, 0); - return; - } - - shaderProgramInfo->numVtxAttrs = numAttrNames; - shaderProgramInfo->vtxAttrs = (CGparameter *)malloc(numAttrNames * sizeof(CGparameter)); - -#ifdef VERBOSE - fprintf(stderr, "CgShaderProgramRetained.lookupCgVertexAttrNames()\n"); -#endif /* VERBOSE */ - - for (i = 0; i < numAttrNames; i++) { - attrName = (*env)->GetObjectArrayElement(env, attrNames, i); - attrNameString = strJavaToC(env, attrName); - - shaderProgramInfo->vtxAttrs[i] = - cgWrapperInfo->cgGetNamedParameter(shaderProgramInfo->vShader->cgShader, - attrNameString); -#ifdef VERBOSE - fprintf(stderr, " %s : 0x%x\n", attrNameString, shaderProgramInfo->vtxAttrs[i]); -#endif /* VERBOSE */ - if (shaderProgramInfo->vtxAttrs[i] == NULL) { - errPtr[i] = JNI_TRUE; - } - - free(attrNameString); - } - - (*env)->ReleaseBooleanArrayElements(env, errArr, errPtr, 0); - -#endif /* COMPILE_CG_SHADERS */ -} - - -#ifdef COMPILE_CG_SHADERS - -static jint -cgToJ3dType(CGtype type) -{ - switch (type) { - case CG_BOOL: - case CG_BOOL1: - case CG_FIXED: - case CG_FIXED1: - case CG_HALF: - case CG_HALF1: - case CG_INT: - case CG_INT1: - return TYPE_INTEGER; - - /* - * XXXX: add ShaderAttribute support for setting samplers. In the - * mean time, the binding between sampler and texture unit will - * need to be specified in the shader itself (which it already is - * in most example shaders). - * - * case CG_SAMPLER2D: - * case CG_SAMPLER3D: - * case CG_SAMPLERCUBE: - * - */ - - case CG_BOOL2: - case CG_FIXED2: - case CG_HALF2: - case CG_INT2: - return TYPE_TUPLE2I; - - case CG_BOOL3: - case CG_FIXED3: - case CG_HALF3: - case CG_INT3: - return TYPE_TUPLE3I; - - case CG_BOOL4: - case CG_FIXED4: - case CG_HALF4: - case CG_INT4: - return TYPE_TUPLE4I; - - case CG_FLOAT: - case CG_FLOAT1: - return TYPE_FLOAT; - - case CG_FLOAT2: - return TYPE_TUPLE2F; - - case CG_FLOAT3: - return TYPE_TUPLE3F; - - case CG_FLOAT4: - return TYPE_TUPLE4F; - - case CG_FLOAT3x3: - return TYPE_MATRIX3F; - - case CG_FLOAT4x4: - return TYPE_MATRIX4F; - - /* - * Java 3D does not support the following sampler types: - * - * case CG_SAMPLER1D: - * case CG_SAMPLERRECT: - */ - } - - return -1; -} - -static CGparameter -lookupParams( - CgWrapperInfo *cgWrapperInfo, - CgShaderInfo *shader, - char *attrNameString, - CGtype *type, - int *size, - jboolean *isArray) -{ - CGparameter loc; - CGparameter firstElem; - - loc = cgWrapperInfo->cgGetNamedParameter(shader->cgShader, - attrNameString); - if (loc != NULL) { - *type = cgWrapperInfo->cgGetParameterType(loc); - if (*type == CG_ARRAY) { - *isArray = JNI_TRUE; - *size = cgWrapperInfo->cgGetArraySize(loc, 0); - /**type = cgWrapperInfo->cgGetArrayType(loc);*/ - firstElem = cgWrapperInfo->cgGetArrayParameter(loc, 0); - *type = cgWrapperInfo->cgGetParameterType(firstElem); - /* - fprintf(stderr, - "firstElem = %d, *type = %d\n", - firstElem, *type); - */ - } - else { - *isArray = JNI_FALSE; - *size = 1; - } - } - - return loc; -} - -#endif /* COMPILE_CG_SHADERS */ - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: lookupCgShaderAttrNames - * Signature: (JJI[Ljava/lang/String;[J[I[I[Z)V - */ -JNIEXPORT void JNICALL -Java_javax_media_j3d_NativePipeline_lookupCgShaderAttrNames( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jint numAttrNames, - jobjectArray attrNames, - jlongArray locArr, - jintArray typeArr, - jintArray sizeArr, - jbooleanArray isArrayArr) -{ - -#ifdef COMPILE_CG_SHADERS - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgShaderProgramInfo *shaderProgramInfo = (CgShaderProgramInfo*)shaderProgramId; - - jstring attrName; - char *attrNameString; - jlong *locPtr; - jint *typePtr; - jint *sizePtr; - jboolean *isArrayPtr; - CGparameter vLoc, fLoc; - CGtype vType, fType; - int vSize, fSize; - jboolean vIsArray, fIsArray; - int i; - - locPtr = (*env)->GetLongArrayElements(env, locArr, NULL); - typePtr = (*env)->GetIntArrayElements(env, typeArr, NULL); - sizePtr = (*env)->GetIntArrayElements(env, sizeArr, NULL); - isArrayPtr = (*env)->GetBooleanArrayElements(env, isArrayArr, NULL); - - /* - * Set the loc, type, and size arrays to out-of-band values - */ - for (i = 0; i < numAttrNames; i++) { - locPtr[i] = -1; - typePtr[i] = -1; - sizePtr[i] = -1; - } - - /* Now lookup the location of each name in the attrNames array */ - for (i = 0; i < numAttrNames; i++) { - jboolean err; - CgParameterInfo *cgParamInfo; - - attrName = (*env)->GetObjectArrayElement(env, attrNames, i); - attrNameString = (GLcharARB *)strJavaToC(env, attrName); - -#ifdef VERBOSE - fprintf(stderr, "lookup %s\n", attrNameString); -#endif /* VERBOSE */ - - /* - * Get uniform attribute location -- note that we need to - * lookup the name in both the vertex and fragment shader - * (although we will generalize it to look at the list of "N" - * shaders). If all parameter locations are NULL, then no - * struct will be allocated and -1 will be stored for this - * attribute. If there is more than one non-NULL parameter, - * then all must be of the same type and dimensionality, - * otherwise an error will be generated and -1 will be stored - * for this attribute. If all non-NULL parameters are of the - * same type and dimensionality, then a struct is allocated - * containing the list of parameters. - * - * When any of the setCgUniform methods are called, the attribute - * will be set for each parameter in the list. - */ - cgParamInfo = (CgParameterInfo *)malloc(sizeof(CgParameterInfo)); - cgParamInfo->vParam = NULL; - cgParamInfo->fParam = NULL; - err = JNI_FALSE; - - vLoc = NULL; - if (shaderProgramInfo->vShader != NULL) { - vLoc = lookupParams(cgWrapperInfo, shaderProgramInfo->vShader, - attrNameString, &vType, &vSize, &vIsArray); - cgParamInfo->vParam = vLoc; - if (vLoc != NULL) { - sizePtr[i] = (jint)vSize; - isArrayPtr[i] = vIsArray; - typePtr[i] = cgToJ3dType(vType); - -#ifdef VERBOSE - fprintf(stderr, " vLoc = %d, vType = %d, vSize = %d, vIsArray = %d\n", - vLoc, vType, vSize, vIsArray); -#endif /* VERBOSE */ - } - } - - fLoc = NULL; - if (shaderProgramInfo->fShader != NULL) { - fLoc = lookupParams(cgWrapperInfo, shaderProgramInfo->fShader, - attrNameString, &fType, &fSize, &fIsArray); - cgParamInfo->fParam = fLoc; - if (fLoc != NULL) { - sizePtr[i] = (jint)fSize; - isArrayPtr[i] = fIsArray; - typePtr[i] = cgToJ3dType(fType); - -#ifdef VERBOSE - fprintf(stderr, " fLoc = %d, fType = %d, fSize = %d, fIsArray = %d\n", - fLoc, fType, fSize, fIsArray); -#endif /* VERBOSE */ - } - } - - /* - * If the name lookup found an entry in both vertex and - * fragment program, verify that the type and size are the - * same. - */ - if (cgParamInfo->vParam != NULL && cgParamInfo->fParam != NULL) { - if (vType != fType || vSize != fSize || vIsArray != fIsArray) { - /* TODO: the following needs to be propagated to ShaderError */ - fprintf(stderr, - "JAVA 3D : error shader attribute type mismatch: %s\n", - attrNameString); - fprintf(stderr, - " 1 : type = %d, size = %d, isArray = %d\n", - vType, vSize, vIsArray); - fprintf(stderr, - " 0 : type = %d, size = %d, isArray = %d\n", - fType, fSize, fIsArray); - err = JNI_TRUE; - } - } - - /* - * Report an error if we got a mismatch or if the attribute - * was not found in either the vertex or the fragment program - */ - if (err || (cgParamInfo->vParam == NULL && cgParamInfo->fParam == NULL)) { - /* - * TODO: distinguish between (err) and (vParam and fParam both NULL) - * so we can report a more helpful error message - */ - free(cgParamInfo); - locPtr[i] = (jlong)-1; - } - else { - /* - * TODO: need to store the cgParamInfo pointers in the - * shader program so we can free them later. - * - * NOTE: WE CURRENTLY HAVE A MEMORY LEAK. - */ - locPtr[i] = (jlong)cgParamInfo; - } - - free(attrNameString); - } - - /* Release JNI arrays */ - (*env)->ReleaseLongArrayElements(env, locArr, locPtr, 0); - (*env)->ReleaseIntArrayElements(env, typeArr, typePtr, 0); - (*env)->ReleaseIntArrayElements(env, sizeArr, sizePtr, 0); - (*env)->ReleaseBooleanArrayElements(env, isArrayArr, isArrayPtr, 0); - -#endif /* COMPILE_CG_SHADERS */ - -} - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: useCgShaderProgram - * Signature: (JJ)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_useCgShaderProgram( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId) -{ -#ifdef COMPILE_CG_SHADERS - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - - CgShaderProgramInfo *shaderProgramInfo = (CgShaderProgramInfo*)shaderProgramId; - - /* Disable shader profiles */ - cgWrapperInfo->cgGLDisableProfile(cgCtxInfo->vProfile); - cgWrapperInfo->cgGLDisableProfile(cgCtxInfo->fProfile); - - if (shaderProgramId != 0) { - if (shaderProgramInfo->vShader != NULL) { - cgWrapperInfo->cgGLBindProgram(shaderProgramInfo->vShader->cgShader); - cgWrapperInfo->cgGLEnableProfile(shaderProgramInfo->vShader->shaderProfile); - } else { - cgWrapperInfo->cgGLUnbindProgram(cgCtxInfo->vProfile); - } - - if (shaderProgramInfo->fShader != NULL) { - cgWrapperInfo->cgGLBindProgram(shaderProgramInfo->fShader->cgShader); - cgWrapperInfo->cgGLEnableProfile(shaderProgramInfo->fShader->shaderProfile); - } else { - cgWrapperInfo->cgGLUnbindProgram(cgCtxInfo->fProfile); - } - } else { - cgWrapperInfo->cgGLUnbindProgram(cgCtxInfo->vProfile); - cgWrapperInfo->cgGLUnbindProgram(cgCtxInfo->fProfile); - } - - ctxProperties->shaderProgramId = shaderProgramId; - -#endif /* COMPILE_CG_SHADERS */ - - return NULL; -} - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: setCgUniform1i - * Signature: (JJJI)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform1i( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jint value) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameter1f(cgParamInfo->vParam, (float)value); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameter1f(cgParamInfo->fParam, (float)value); - } - -#else /* COMPILE_CG_SHADERS */ - - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, - "CgShaderProgram support not compiled", - NULL); - -#endif /* !COMPILE_CG_SHADERS */ - - return shaderError; -} - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: setCgUniform1f - * Signature: (JJJF)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform1f( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jfloat value) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameter1f(cgParamInfo->vParam, value); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameter1f(cgParamInfo->fParam, value); - } - -#else /* COMPILE_CG_SHADERS */ - - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, - "CgShaderProgram support not compiled", - NULL); - -#endif /* !COMPILE_CG_SHADERS */ - - return shaderError; -} - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: setCgUniform2i - * Signature: (JJJ[I)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform2i( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jintArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jint *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetIntArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameter2f(cgParamInfo->vParam, - (float)values[0], - (float)values[1]); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameter2f(cgParamInfo->fParam, - (float)values[0], - (float)values[1]); - } - - /* Release array values */ - (*env)->ReleaseIntArrayElements(env, varray, values, JNI_ABORT); - -#else /* COMPILE_CG_SHADERS */ - - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, - "CgShaderProgram support not compiled", - NULL); - -#endif /* !COMPILE_CG_SHADERS */ - - return shaderError; -} - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: setCgUniform2f - * Signature: (JJJ[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform2f( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jfloatArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jfloat *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetFloatArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameter2f(cgParamInfo->vParam, - values[0], - values[1]); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameter2f(cgParamInfo->fParam, - values[0], - values[1]); - } - - /* Release array values */ - (*env)->ReleaseFloatArrayElements(env, varray, values, JNI_ABORT); - -#else /* COMPILE_CG_SHADERS */ - - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, - "CgShaderProgram support not compiled", - NULL); - -#endif /* !COMPILE_CG_SHADERS */ - - return shaderError; -} - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: setCgUniform3i - * Signature: (JJJ[I)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform3i( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jintArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jint *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetIntArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameter3f(cgParamInfo->vParam, - (float)values[0], - (float)values[1], - (float)values[2]); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameter3f(cgParamInfo->fParam, - (float)values[0], - (float)values[1], - (float)values[2]); - } - - /* Release array values */ - (*env)->ReleaseIntArrayElements(env, varray, values, JNI_ABORT); - -#else /* COMPILE_CG_SHADERS */ - - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, - "CgShaderProgram support not compiled", - NULL); - -#endif /* !COMPILE_CG_SHADERS */ - - return shaderError; -} - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: setCgUniform3f - * Signature: (JJJ[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform3f( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jfloatArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jfloat *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetFloatArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameter3f(cgParamInfo->vParam, - values[0], - values[1], - values[2]); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameter3f(cgParamInfo->fParam, - values[0], - values[1], - values[2]); - } - - /* Release array values */ - (*env)->ReleaseFloatArrayElements(env, varray, values, JNI_ABORT); - -#else /* COMPILE_CG_SHADERS */ - - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, - "CgShaderProgram support not compiled", - NULL); - -#endif /* !COMPILE_CG_SHADERS */ - - return shaderError; -} - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: setCgUniform4i - * Signature: (JJJ[I)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform4i( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jintArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jint *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetIntArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameter4f(cgParamInfo->vParam, - (float)values[0], - (float)values[1], - (float)values[2], - (float)values[3]); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameter4f(cgParamInfo->fParam, - (float)values[0], - (float)values[1], - (float)values[2], - (float)values[3]); - } - - /* Release array values */ - (*env)->ReleaseIntArrayElements(env, varray, values, JNI_ABORT); - -#else /* COMPILE_CG_SHADERS */ - - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, - "CgShaderProgram support not compiled", - NULL); - -#endif /* !COMPILE_CG_SHADERS */ - - return shaderError; -} - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: setCgUniform4f - * Signature: (JJJ[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform4f( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jfloatArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jfloat *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetFloatArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameter4f(cgParamInfo->vParam, - values[0], - values[1], - values[2], - values[3]); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameter4f(cgParamInfo->fParam, - values[0], - values[1], - values[2], - values[3]); - } - - /* Release array values */ - (*env)->ReleaseFloatArrayElements(env, varray, values, JNI_ABORT); - -#else /* COMPILE_CG_SHADERS */ - - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, - "CgShaderProgram support not compiled", - NULL); - -#endif /* !COMPILE_CG_SHADERS */ - - return shaderError; -} - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: setCgUniformMatrix3f - * Signature: (JJJ[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniformMatrix3f( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jfloatArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jfloat *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetFloatArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetMatrixParameterfr(cgParamInfo->vParam, values); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetMatrixParameterfr(cgParamInfo->fParam, values); - } - - /* Release array values */ - (*env)->ReleaseFloatArrayElements(env, varray, values, JNI_ABORT); - -#else /* COMPILE_CG_SHADERS */ - - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, - "CgShaderProgram support not compiled", - NULL); - -#endif /* !COMPILE_CG_SHADERS */ - - return shaderError; -} - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: setCgUniformMatrix4f - * Signature: (JJJ[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniformMatrix4f( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jfloatArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jfloat *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetFloatArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetMatrixParameterfr(cgParamInfo->vParam, values); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetMatrixParameterfr(cgParamInfo->fParam, values); - } - - /* Release array values */ - (*env)->ReleaseFloatArrayElements(env, varray, values, JNI_ABORT); - -#else /* COMPILE_CG_SHADERS */ - - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, - "CgShaderProgram support not compiled", - NULL); - -#endif /* !COMPILE_CG_SHADERS */ - - return shaderError; -} - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: setCgUniform1iArray - * Signature: (JJJI[I)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform1iArray( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jint length, - jintArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - int i; - jint *ivalues; - float *fvalues; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - ivalues = (*env)->GetIntArrayElements(env, varray, NULL); - fvalues = malloc(length * sizeof(float)); - for (i = 0; i < length; i++) { - fvalues[i] = (float)ivalues[i]; - } - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray1f(cgParamInfo->vParam, - 0, length, fvalues); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray1f(cgParamInfo->fParam, - 0, length, fvalues); - } - - /* Release array values */ - (*env)->ReleaseIntArrayElements(env, varray, ivalues, JNI_ABORT); - free(fvalues); - -#else /* COMPILE_CG_SHADERS */ - - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, - "CgShaderProgram support not compiled", - NULL); - -#endif /* !COMPILE_CG_SHADERS */ - - return shaderError; -} - -/* - * Class: javax_media_j3d_NativePipeline - * Method: setCgUniform1fArray - * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform1fArray( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jint length, - jfloatArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jfloat *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetFloatArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray1f(cgParamInfo->vParam, - 0, length, values); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray1f(cgParamInfo->fParam, - 0, length, values); - } - - /* Release array values */ - (*env)->ReleaseFloatArrayElements(env, varray, values, JNI_ABORT); - -#else /* COMPILE_CG_SHADERS */ - - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, - "CgShaderProgram support not compiled", - NULL); - -#endif /* !COMPILE_CG_SHADERS */ - - return shaderError; -} - -/* - * Class: javax_media_j3d_NativePipeline - * Method: setCgUniform2iArray - * Signature: (JJJI[I)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform2iArray( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jint length, - jintArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - int i; - jint *ivalues; - float *fvalues; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - ivalues = (*env)->GetIntArrayElements(env, varray, NULL); - fvalues = malloc(length * sizeof(float)); - for (i = 0; i < 2 * length; i++) { - fvalues[i] = (float)ivalues[i]; - } - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray2f(cgParamInfo->vParam, - 0, length, fvalues); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray2f(cgParamInfo->fParam, - 0, length, fvalues); - } - - /* Release array values */ - (*env)->ReleaseIntArrayElements(env, varray, ivalues, JNI_ABORT); - free(fvalues); - -#else /* COMPILE_CG_SHADERS */ - - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, - "CgShaderProgram support not compiled", - NULL); - -#endif /* !COMPILE_CG_SHADERS */ - - return shaderError; -} - -/* - * Class: javax_media_j3d_NativePipeline - * Method: setCgUniform2fArray - * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform2fArray( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jint length, - jfloatArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jfloat *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetFloatArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray2f(cgParamInfo->vParam, - 0, length, values); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray2f(cgParamInfo->fParam, - 0, length, values); - } - - /* Release array values */ - (*env)->ReleaseFloatArrayElements(env, varray, values, JNI_ABORT); - -#else /* COMPILE_CG_SHADERS */ - - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, - "CgShaderProgram support not compiled", - NULL); - -#endif /* !COMPILE_CG_SHADERS */ - - return shaderError; -} - -/* - * Class: javax_media_j3d_NativePipeline - * Method: setCgUniform3iArray - * Signature: (JJJI[I)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform3iArray( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jint length, - jintArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - int i; - jint *ivalues; - float *fvalues; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - ivalues = (*env)->GetIntArrayElements(env, varray, NULL); - fvalues = malloc(length * sizeof(float)); - for (i = 0; i < 3 * length; i++) { - fvalues[i] = (float)ivalues[i]; - } - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray3f(cgParamInfo->vParam, - 0, length, fvalues); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray3f(cgParamInfo->fParam, - 0, length, fvalues); - } - - /* Release array values */ - (*env)->ReleaseIntArrayElements(env, varray, ivalues, JNI_ABORT); - free(fvalues); - -#else /* COMPILE_CG_SHADERS */ - - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, - "CgShaderProgram support not compiled", - NULL); - -#endif /* !COMPILE_CG_SHADERS */ - - return shaderError; -} - -/* - * Class: javax_media_j3d_NativePipeline - * Method: setCgUniform3fArray - * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform3fArray( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jint length, - jfloatArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jfloat *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetFloatArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray3f(cgParamInfo->vParam, - 0, length, values); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray3f(cgParamInfo->fParam, - 0, length, values); - } - - /* Release array values */ - (*env)->ReleaseFloatArrayElements(env, varray, values, JNI_ABORT); - -#else /* COMPILE_CG_SHADERS */ - - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, - "CgShaderProgram support not compiled", - NULL); - -#endif /* !COMPILE_CG_SHADERS */ - - return shaderError; -} - -/* - * Class: javax_media_j3d_NativePipeline - * Method: setCgUniform4iArray - * Signature: (JJJI[I)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform4iArray( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jint length, - jintArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - int i; - jint *ivalues; - float *fvalues; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - ivalues = (*env)->GetIntArrayElements(env, varray, NULL); - fvalues = malloc(length * sizeof(float)); - for (i = 0; i < 4 * length; i++) { - fvalues[i] = (float)ivalues[i]; - } - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray4f(cgParamInfo->vParam, - 0, length, fvalues); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray4f(cgParamInfo->fParam, - 0, length, fvalues); - } - - /* Release array values */ - (*env)->ReleaseIntArrayElements(env, varray, ivalues, JNI_ABORT); - free(fvalues); - -#else /* COMPILE_CG_SHADERS */ - - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, - "CgShaderProgram support not compiled", - NULL); - -#endif /* !COMPILE_CG_SHADERS */ - - return shaderError; -} - -/* - * Class: javax_media_j3d_NativePipeline - * Method: setCgUniform4fArray - * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform4fArray( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jint length, - jfloatArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jfloat *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetFloatArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray4f(cgParamInfo->vParam, - 0, length, values); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray4f(cgParamInfo->fParam, - 0, length, values); - } - - /* Release array values */ - (*env)->ReleaseFloatArrayElements(env, varray, values, JNI_ABORT); - -#else /* COMPILE_CG_SHADERS */ - - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, - "CgShaderProgram support not compiled", - NULL); - -#endif /* !COMPILE_CG_SHADERS */ - - return shaderError; -} - -/* - * Class: javax_media_j3d_NativePipeline - * Method: setCgUniformMatrix3fArray - * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniformMatrix3fArray( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jint length, - jfloatArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jfloat *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetFloatArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetMatrixParameterArrayfr(cgParamInfo->vParam, - 0, length, values); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetMatrixParameterArrayfr(cgParamInfo->fParam, - 0, length, values); - } - - /* Release array values */ - (*env)->ReleaseFloatArrayElements(env, varray, values, JNI_ABORT); - -#else /* COMPILE_CG_SHADERS */ - - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, - "CgShaderProgram support not compiled", - NULL); - -#endif /* !COMPILE_CG_SHADERS */ - - return shaderError; -} - -/* - * Class: javax_media_j3d_NativePipeline - * Method: setCgUniformMatrix4fArray - * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniformMatrix4fArray( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jint length, - jfloatArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jfloat *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetFloatArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetMatrixParameterArrayfr(cgParamInfo->vParam, - 0, length, values); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetMatrixParameterArrayfr(cgParamInfo->fParam, - 0, length, values); - } - - /* Release array values */ - (*env)->ReleaseFloatArrayElements(env, varray, values, JNI_ABORT); - -#else /* COMPILE_CG_SHADERS */ - - shaderError = createShaderError(env, - javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, - "CgShaderProgram support not compiled", - NULL); - -#endif /* !COMPILE_CG_SHADERS */ - - return shaderError; -} - - -/* - * Cg vertex attribute functions - */ - -static void -cgVertexAttrPointer( - GraphicsContextPropertiesInfo *ctxProperties, - int index, int size, int type, int stride, - const void *pointer) -{ -#ifdef COMPILE_CG_SHADERS - - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgShaderProgramInfo *shaderProgramInfo = - (CgShaderProgramInfo *)ctxProperties->shaderProgramId; - -#ifdef VERBOSE - fprintf(stderr, "cgVertexAttrPointer()\n"); -#endif /* VERBOSE */ - - if (shaderProgramInfo != NULL && index < shaderProgramInfo->numVtxAttrs) { - cgWrapperInfo->cgGLSetParameterPointer(shaderProgramInfo->vtxAttrs[index], - size, - type, - stride, - pointer); - } -#ifdef VERBOSE - else { - if (shaderProgramInfo == NULL) { - fprintf(stderr, - " shaderProgramInfo is NULL\n"); - } else { - fprintf(stderr, - " index (%d) out of range; numVtxAttrs = %d\n", - index, shaderProgramInfo->numVtxAttrs); - } - } -#endif /* VERBOSE */ - -#endif /* COMPILE_CG_SHADERS */ -} - -static void -cgEnableVertexAttrArray( - GraphicsContextPropertiesInfo *ctxProperties, - int index) -{ -#ifdef COMPILE_CG_SHADERS - - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgShaderProgramInfo *shaderProgramInfo = - (CgShaderProgramInfo *)ctxProperties->shaderProgramId; - -#ifdef VERBOSE - fprintf(stderr, "cgEnableVertexAttrArray()\n"); -#endif /* VERBOSE */ - - if (shaderProgramInfo != NULL && index < shaderProgramInfo->numVtxAttrs) { - cgWrapperInfo->cgGLEnableClientState(shaderProgramInfo->vtxAttrs[index]); - } -#ifdef VERBOSE - else { - if (shaderProgramInfo == NULL) { - fprintf(stderr, - " shaderProgramInfo is NULL\n"); - } else { - fprintf(stderr, - " index (%d) out of range; numVtxAttrs = %d\n", - index, shaderProgramInfo->numVtxAttrs); - } - } -#endif /* VERBOSE */ - -#endif /* COMPILE_CG_SHADERS */ -} - -static void -cgDisableVertexAttrArray( - GraphicsContextPropertiesInfo *ctxProperties, - int index) -{ -#ifdef COMPILE_CG_SHADERS - - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgShaderProgramInfo *shaderProgramInfo = - (CgShaderProgramInfo *)ctxProperties->shaderProgramId; - -#ifdef VERBOSE - fprintf(stderr, "cgDisableVertexAttrArray()\n"); -#endif /* VERBOSE */ - - if (shaderProgramInfo != NULL && index < shaderProgramInfo->numVtxAttrs) { - cgWrapperInfo->cgGLDisableClientState(shaderProgramInfo->vtxAttrs[index]); - } -#ifdef VERBOSE - else { - if (shaderProgramInfo == NULL) { - fprintf(stderr, - " shaderProgramInfo is NULL\n"); - } else { - fprintf(stderr, - " index (%d) out of range; numVtxAttrs = %d\n", - index, shaderProgramInfo->numVtxAttrs); - } - } -#endif /* VERBOSE */ - -#endif /* COMPILE_CG_SHADERS */ -} - -static void -cgVertexAttr( - GraphicsContextPropertiesInfo *ctxProperties, - int index, const float *v) -{ - /* - * NOTE: we should never get here. This function is only called - * when building display lists for geometry arrays with vertex - * attributes, and such display lists are disabled in Cg mode. - */ - fprintf(stderr, - "Java 3D ERROR : Assertion failed: invalid call to cgVertexAttr*f\n"); -} |