aboutsummaryrefslogtreecommitdiffstats
path: root/src/native/d3d/RasterRetained.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/native/d3d/RasterRetained.cpp')
-rw-r--r--src/native/d3d/RasterRetained.cpp255
1 files changed, 0 insertions, 255 deletions
diff --git a/src/native/d3d/RasterRetained.cpp b/src/native/d3d/RasterRetained.cpp
deleted file mode 100644
index 9cd3750..0000000
--- a/src/native/d3d/RasterRetained.cpp
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * $RCSfile$
- *
- * Copyright (c) 2006 Sun Microsystems, Inc. All rights reserved.
- *
- * Use is subject to license terms.
- *
- * $Revision$
- * $Date$
- * $State$
- */
-
-#include "StdAfx.h"
-
-D3dImageComponent RasterList;
-D3dImageComponent BackgroundImageList;
-
-extern "C" JNIEXPORT
-void JNICALL Java_javax_media_j3d_RasterRetained_execute(JNIEnv *env,
- jobject obj, jlong ctx, jobject geo,
- jboolean updateAlpha, jfloat alpha,
- jint type, jint w_raster, jint h_raster,
- jint x_offset, jint y_offset, jfloat x, jfloat y, jfloat z,
- jbyteArray imageYdown)
-{
- jfieldID id;
- int width, height;
- int hashCode;
- D3DVERTEX worldCoord;
- D3DTLVERTEX screenCoord;
-
- GetDevice();
-
- int startx = x_offset;
- int starty = y_offset;
- int endx = x_offset + w_raster;
- int endy = y_offset + h_raster;
-
- jclass geo_class = env->GetObjectClass(geo);
-
- if ((type == javax_media_j3d_Raster_RASTER_COLOR) ||
- (type == javax_media_j3d_Raster_RASTER_COLOR_DEPTH)) {
-
- int alphaChanged = 0; // used so we can get alpha data from
- // JNI before using it so we can use
- // GetPrimitiveArrayCritical
-
- id = env->GetFieldID(geo_class, "image",
- "Ljavax/media/j3d/ImageComponent2DRetained;");
- jobject image = env->GetObjectField(geo, id);
-
-
- jclass image_class = env->GetObjectClass(image);
-
- if (image_class == NULL) {
- return;
- }
- /*
- id = env->GetFieldID(image_class, "surfaceDirty", "I");
- if (env->GetIntField(image, id) == NOTLIVE) {
- return;
- }
- */
- id = env->GetFieldID(image_class, "width", "I");
- width = env->GetIntField(image, id);
- id = env->GetFieldID(image_class, "height", "I");
- height = env->GetIntField(image, id);
-
- id = env->GetFieldID(image_class, "hashId", "I");
- hashCode = env->GetIntField(image, id);
-
- // clipping
- if (startx > width) {
- startx = width;
- } else if (startx < 0) {
- startx = 0;
- }
- if (starty > height) {
- starty = height;
- } else if (starty < 0) {
- starty = 0;
- }
- if (endx > width) {
- endx = width;
- } else if (endx < 0) {
- endx = 0;
- }
- if (endy > height) {
- endy = height;
- } else if (endy < 0) {
- endy = 0;
- }
-
- // raster position is upper left corner, default for Java3D
- // ImageComponent currently has the data reverse in Y
- worldCoord.x = x;
- worldCoord.y = y;
- worldCoord.z = z;
-
- lockImage();
-
- D3dImageComponent* d3dImage =
- D3dImageComponent::find(&RasterList, d3dCtx, hashCode);
-
- LPDIRECT3DTEXTURE9 surf = NULL ;
-
- if ((d3dImage == NULL) || (d3dImage->surf == NULL)) {
-
- surf = createSurfaceFromImage(env, image, ctx,
- width, height, imageYdown);
-
- if (surf == NULL) {
- if (d3dImage != NULL) {
- D3dImageComponent::remove(&RasterList, d3dImage);
- }
- unlockImage();
- return;
- }
- if (d3dImage == NULL) {
- d3dImage = D3dImageComponent::add(&RasterList, d3dCtx, hashCode, surf);
-
- if (d3dImage == NULL) {
- return;
- }
-
- } else {
- d3dImage->surf = surf;
- }
- }
-
- d3dCtx->transform(&worldCoord, &screenCoord);
- if ((screenCoord.sz >= 0) && (screenCoord.sz <= 1)) {
- screenCoord.sx -= 0.5f;
- screenCoord.sy -= 0.5f;
- drawTextureRect(d3dCtx, device, d3dImage->surf, screenCoord,
- startx, starty, endx, endy,
- endx - startx, endy - starty, false);
- }
- unlockImage();
-
- }
-
- if ((type == javax_media_j3d_Raster_RASTER_DEPTH) ||
- (type == javax_media_j3d_Raster_RASTER_COLOR_DEPTH)) {
- id = env->GetFieldID(geo_class, "depthComponent",
- "Ljavax/media/j3d/DepthComponentRetained;");
-
- jobject depth = env->GetObjectField(geo, id);
- jclass depth_class = env->GetObjectClass(depth);
-
- if (depth_class == NULL) {
- return;
- }
- id = env->GetFieldID(depth_class, "type", "I");
- int depth_type = env->GetIntField(depth, id);
- id = env->GetFieldID(depth_class, "width", "I");
- width = env->GetIntField(depth, id);
- id = env->GetFieldID(depth_class, "height", "I");
- height = env->GetIntField(depth, id);
-
-
-
- // clipping
- if (startx > width) {
- startx = width;
- } else if (startx < 0) {
- startx = 0;
- }
- if (starty > height) {
- starty = height;
- } else if (starty < 0) {
- starty = 0;
- }
- if (endx > width) {
- endx = width;
- } else if (endx < 0) {
- endx = 0;
- }
- if (endy > height) {
- endy = height;
- } else if (endy < 0) {
- endy = 0;
- }
-
- int h = endy - starty;
- int w = endx - startx;
-
- // raster position is upper left corner, default for Java3D
- // ImageComponent currently has the data reverse in Y
- if ((h > 0) && (w > 0)) {
- worldCoord.x = x;
- worldCoord.y = y;
- worldCoord.z = z;
-
- d3dCtx->transform(&worldCoord, &screenCoord);
-
- if (d3dCtx->depthStencilSurface == NULL) {
- HRESULT hr =
- device->GetDepthStencilSurface(&d3dCtx->depthStencilSurface);
- if (FAILED(hr)) {
- if (debug) {
- printf("[Java3D] Fail to get depth stencil surface %s\n",
- DXGetErrorString9(hr));
- }
- return;
- }
- }
-
- if (depth_type == javax_media_j3d_DepthComponentRetained_DEPTH_COMPONENT_TYPE_INT) {
- id = env->GetFieldID(depth_class, "depthData","[I");
- jintArray intData_array = (jintArray) env->GetObjectField(depth, id);
- jint * intData = (jint *) env->GetPrimitiveArrayCritical(
- intData_array, NULL);
- copyDepthToSurface(d3dCtx,
- device,
- (int)(screenCoord.sx),
- (int)(screenCoord.sy),
- x_offset, y_offset,
- w, h,width, height,
- intData, d3dCtx->depthStencilSurface);
- env->ReleasePrimitiveArrayCritical(intData_array,
- intData, 0);
- } else { // javax_media_j3d_DepthComponentRetained_DEPTH_COMPONENT_TYPE_FLOAT
-
- id = env->GetFieldID(depth_class, "depthData","[F");
- jfloatArray floatData_array = (jfloatArray)
- env->GetObjectField(depth, id);
-
- jfloat *floatData = (jfloat *) env->GetPrimitiveArrayCritical(
- floatData_array, NULL);
- copyDepthToSurface(d3dCtx,
- device,
- (jint)(screenCoord.sx),
- (jint)(screenCoord.sy),
- x_offset, y_offset,
- w, h, width, height,
- floatData, d3dCtx->depthStencilSurface);
- env->ReleasePrimitiveArrayCritical(floatData_array,
- floatData, 0);
- }
- }
- }
-}
-
-
-
-extern "C" JNIEXPORT
-void JNICALL Java_javax_media_j3d_RasterRetained_executeTiled(JNIEnv *env,
- jobject obj, jlong ctx, jobject geo,
- jint format, jint w_raster, jint h_raster,
- jint x_offset, jint y_offset, jint deltaw, jint deltah,
- jfloat x, jfloat y, jfloat z, jbyteArray tile)
-{
- // This is is not used by both OGL and D3D
-}