diff options
author | Kevin Rushforth <[email protected]> | 2004-10-29 16:21:22 +0000 |
---|---|---|
committer | Kevin Rushforth <[email protected]> | 2004-10-29 16:21:22 +0000 |
commit | a4461c4fe84cf7cfd29677b5073e8b9ea41c3a4a (patch) | |
tree | 30724a1d54d3d7045c10ecdb4ba6b479e3c0da43 /src/native/ogl/Canvas3D.c | |
parent | 2ce93668c57e29a6d2ea992f8675afdd0719c820 (diff) |
Submitted by: mikofclassx
Reviewed by: kcr
Added new j3d.transparentOffScreen flag to allow transparent (alpha = 0)
backgrounds for off-screen Canvas3D rendering.
git-svn-id: https://svn.java.net/svn/j3d-core~svn/trunk@64 ba19aa83-45c5-6ac9-afd3-db810772062c
Diffstat (limited to 'src/native/ogl/Canvas3D.c')
-rw-r--r-- | src/native/ogl/Canvas3D.c | 66 |
1 files changed, 34 insertions, 32 deletions
diff --git a/src/native/ogl/Canvas3D.c b/src/native/ogl/Canvas3D.c index 24654ff..339fe63 100644 --- a/src/native/ogl/Canvas3D.c +++ b/src/native/ogl/Canvas3D.c @@ -38,18 +38,6 @@ #endif /* DEBUG */ -#ifndef FALSE -#define FALSE 0 -#endif - -#ifndef TRUE -#define TRUE 1 -#endif - -#ifndef BOOL -#define BOOL int -#endif - static char *gl_VERSION; static char *gl_VENDOR; @@ -382,7 +370,8 @@ void checkTextureExtensions( } } -BOOL getJavaBoolEnv(JNIEnv *env, char* envStr) +jboolean +getJavaBoolEnv(JNIEnv *env, char* envStr) { JNIEnv table = *env; jclass cls; @@ -392,31 +381,31 @@ BOOL getJavaBoolEnv(JNIEnv *env, char* envStr) cls = (jclass) (*(table->FindClass))(env, "javax/media/j3d/VirtualUniverse"); if (cls == NULL) { - return FALSE; + return JNI_FALSE; } fieldID = (jfieldID) (*(table->GetStaticFieldID))(env, cls, "mc", "Ljavax/media/j3d/MasterControl;"); if (fieldID == NULL) { - return FALSE; + return JNI_FALSE; } obj = (*(table->GetStaticObjectField))(env, cls, fieldID); if (obj == NULL) { - return FALSE; + return JNI_FALSE; } cls = (jclass) (*(table->FindClass))(env, "javax/media/j3d/MasterControl"); if (cls == NULL) { - return FALSE; + return JNI_FALSE; } fieldID = (jfieldID) (*(table->GetFieldID))(env, cls, envStr, "Z"); if (fieldID == NULL ) { - return FALSE; + return JNI_FALSE; } return (*(table->GetBooleanField))(env, obj, fieldID); @@ -426,7 +415,8 @@ BOOL getJavaBoolEnv(JNIEnv *env, char* envStr) /* * get properties from current context */ -BOOL getPropertiesFromCurrentContext( +static jboolean +getPropertiesFromCurrentContext( JNIEnv *env, jobject obj, GraphicsContextPropertiesInfo *ctxInfo, @@ -456,7 +446,7 @@ BOOL getPropertiesFromCurrentContext( glversion = (char *)glGetString(GL_VERSION); if (glversion == NULL) { fprintf(stderr, "glversion == null\n"); - return FALSE; + return JNI_FALSE; } gl_VERSION = glversion; tmpVersionStr = strdup(glversion); @@ -469,7 +459,7 @@ BOOL getPropertiesFromCurrentContext( extensionStr = (char *)glGetString(GL_EXTENSIONS); if (extensionStr == NULL) { fprintf(stderr, "extensionStr == null\n"); - return FALSE; + return JNI_FALSE; } tmpExtensionStr = strdup(extensionStr); @@ -988,7 +978,7 @@ BOOL getPropertiesFromCurrentContext( /* clearing up the memory */ free(tmpExtensionStr); free(tmpVersionStr); - return TRUE; + return JNI_TRUE; } @@ -1723,7 +1713,7 @@ void JNICALL Java_javax_media_j3d_Canvas3D_clear( #endif if(!pa2d) { - glClearColor((float)r, (float)g, (float)b, 1.0f); + glClearColor((float)r, (float)g, (float)b, ctxProperties->alphaClearValue); glClear(GL_COLOR_BUFFER_BIT); } else { @@ -1813,7 +1803,7 @@ void JNICALL Java_javax_media_j3d_Canvas3D_clear( if(xzoom > 1.0f || yzoom > 1.0f) { /* else don't need to clear the background with background color */ - glClearColor((float)r, (float)g, (float)b, 1.0f); + glClearColor((float)r, (float)g, (float)b, ctxProperties->alphaClearValue); glClear(GL_COLOR_BUFFER_BIT); } glPixelZoom(1.0, -1.0); @@ -1823,7 +1813,7 @@ void JNICALL Java_javax_media_j3d_Canvas3D_clear( break; case javax_media_j3d_Background_SCALE_FIT_MIN: if(xzoom != yzoom ) { - glClearColor((float)r, (float)g, (float)b, 1.0f); + glClearColor((float)r, (float)g, (float)b, ctxProperties->alphaClearValue); glClear(GL_COLOR_BUFFER_BIT); } zoom = xzoom < yzoom? xzoom:yzoom; @@ -1865,7 +1855,7 @@ void JNICALL Java_javax_media_j3d_Canvas3D_clear( case javax_media_j3d_Background_SCALE_NONE_CENTER: if(xzoom > 1.0f || yzoom > 1.0f){ - glClearColor((float)r, (float)g, (float)b, 1.0f); + glClearColor((float)r, (float)g, (float)b, ctxProperties->alphaClearValue); glClear(GL_COLOR_BUFFER_BIT); } if(xzoom >= 1.0f){ @@ -1957,7 +1947,7 @@ void JNICALL Java_javax_media_j3d_Canvas3D_textureclear(JNIEnv *env, fprintf(stderr, "Canvas3D.textureclear()\n"); #endif if(!pa2d){ - glClearColor((float)r, (float)g, (float)b, 1.0f); + glClearColor((float)r, (float)g, (float)b, ctxProperties->alphaClearValue); glClear(GL_COLOR_BUFFER_BIT); } /* glPushAttrib(GL_DEPTH_BUFFER_BIT); */ @@ -2092,7 +2082,7 @@ void JNICALL Java_javax_media_j3d_Canvas3D_textureclear(JNIEnv *env, switch(imageScaleMode) { case javax_media_j3d_Background_SCALE_NONE: if(xzoom > 1.0f || yzoom > 1.0f){ - glClearColor((float)r, (float)g, (float)b, 1.0f); + glClearColor((float)r, (float)g, (float)b, ctxProperties->alphaClearValue); glClear(GL_COLOR_BUFFER_BIT); } texMinU = 0.0f; @@ -2111,7 +2101,7 @@ void JNICALL Java_javax_media_j3d_Canvas3D_textureclear(JNIEnv *env, break; case javax_media_j3d_Background_SCALE_FIT_MIN: if(xzoom != yzoom){ - glClearColor((float)r, (float)g, (float)b, 1.0f); + glClearColor((float)r, (float)g, (float)b, ctxProperties->alphaClearValue); glClear(GL_COLOR_BUFFER_BIT); } @@ -2174,7 +2164,7 @@ void JNICALL Java_javax_media_j3d_Canvas3D_textureclear(JNIEnv *env, break; case javax_media_j3d_Background_SCALE_NONE_CENTER: if(xzoom > 1.0f || yzoom > 1.0f){ - glClearColor((float)r, (float)g, (float)b, 1.0f); + glClearColor((float)r, (float)g, (float)b, ctxProperties->alphaClearValue); glClear(GL_COLOR_BUFFER_BIT); } if(xzoom >= 1.0f){ @@ -2899,7 +2889,16 @@ jint JNICALL Java_javax_media_j3d_Canvas3D_createOffScreenBuffer( bih.biWidth = width; bih.biHeight = height; bih.biPlanes = 1; - bih.biBitCount = 24; + + + // by MIK OF CLASSX + if (getJavaBoolEnv(env, "transparentOffScreen")) { + bih.biBitCount = 32; + } + else { + bih.biBitCount = 24; + } + bih.biCompression = BI_RGB; bitmapHdc = CreateCompatibleDC(hdc); @@ -3128,6 +3127,9 @@ void initializeCtxInfo(JNIEnv *env , GraphicsContextPropertiesInfo* ctxInfo){ ctxInfo->multi_draw_arrays_ext = JNI_FALSE; ctxInfo->implicit_multisample = getJavaBoolEnv(env, "implicitAntialiasing"); + + // by MIK OF CLASSX + ctxInfo->alphaClearValue = (getJavaBoolEnv(env, "transparentOffScreen") ? 0.0f : 1.0f); /* ARB extensions */ ctxInfo->arb_transpose_matrix = JNI_FALSE; @@ -3541,6 +3543,6 @@ jboolean JNICALL Java_javax_media_j3d_Canvas3D_validGraphicsMode( #endif #if defined(SOLARIS) || defined(__linux__) - return TRUE; + return JNI_TRUE; #endif } |