JNIEXPORT void JNICALL Java_com_sun_pisces_NativeSurface_initialize(JNIEnv* env, jobject objectHandle, jint dataType, jint width, jint height) { AbstractSurface* surface; if (surface_initialize(env, objectHandle) && initializeSurfaceFieldIds(env, objectHandle)) { surface = my_malloc(AbstractSurface, 1); if (surface != NULL) { jint size = width * height * sizeof(jint); jint* data = (jint*)PISCESmalloc(size); if (data != NULL) { memset(data, 0, size); surface->super.width = width; surface->super.height = height; surface->super.offset = 0; surface->super.scanlineStride = width; surface->super.pixelStride = 1; surface->super.imageType = dataType; surface->super.data = data; surface->acquire = surface_acquire; surface->release = surface_release; surface->cleanup = surface_cleanup; (*env)->SetLongField(env, objectHandle, fieldIds[SURFACE_NATIVE_PTR], PointerToJLong(surface)); // KNI_registerCleanup(objectHandle, disposeNativeImpl); } else { JNI_ThrowNew(env, "java/lang/OutOfMemoryError", "Allocation of internal renderer buffer failed."); } } else { JNI_ThrowNew(env, "java/lang/OutOfMemoryError", "Allocation of internal renderer buffer failed."); } } else { JNI_ThrowNew(env, "java/lang/IllegalStateException", ""); } }
/* * Class: com_sun_pisces_JavaSurface * Method: initialize * Signature: (III)V */ JNIEXPORT void JNICALL Java_com_sun_pisces_JavaSurface_initialize (JNIEnv *env, jobject objectHandle, jint dataType, jint width, jint height) { if (surface_initialize(env, objectHandle) && initializeSurfaceFieldIds(env, objectHandle)) { // NOTE: when is this freed? JavaSurface* jSurface = my_malloc(JavaSurface, 1); AbstractSurface* surface = &jSurface->super; if (surface != NULL) { surface->super.width = width; surface->super.height = height; surface->super.offset = 0; surface->super.scanlineStride = width; surface->super.pixelStride = 1; surface->super.imageType = dataType; surface->acquire = surface_acquire; surface->release = surface_release; surface->cleanup = surface_cleanup; switch(surface->super.imageType){ case TYPE_INT_ARGB_PRE: jSurface->javaArrayFieldID = fieldIds[SURFACE_DATA_INT]; break; default: //errorneous - should never happen jSurface->javaArrayFieldID = NULL; } (*env)->SetLongField(env, objectHandle, fieldIds[SURFACE_NATIVE_PTR], PointerToJLong(jSurface)); // JNI_registerCleanup(objectHandle, disposeNativeImpl); } else { JNI_ThrowNew(env, "java/lang/OutOfMemoryError", "Allocation of internal renderer buffer failed."); } } else { JNI_ThrowNew(env, "java/lang/IllegalStateException", ""); } }
KNIEXPORT KNI_RETURNTYPE_VOID Java_com_sun_pisces_JavaSurface_initialize() { KNI_StartHandles(1); KNI_DeclareHandle(objectHandle); jint dataType = KNI_GetParameterAsInt(1); jint width = KNI_GetParameterAsInt(2); jint height = KNI_GetParameterAsInt(3); JavaSurface* jSurface; AbstractSurface* surface; KNI_GetThisPointer(objectHandle); if (surface_initialize(objectHandle) && initializeSurfaceFieldIds(objectHandle)) { jSurface = my_malloc(JavaSurface, 1); surface = &jSurface->super; if (surface != NULL) { surface->super.width = width; surface->super.height = height; surface->super.offset = 0; surface->super.scanlineStride = width; surface->super.pixelStride = 1; surface->super.imageType = dataType; surface->acquire = surface_acquire; surface->release = surface_release; surface->cleanup = surface_cleanup; switch(surface->super.imageType){ case TYPE_INT_RGB: case TYPE_INT_ARGB: case TYPE_INT_ARGB_PRE: jSurface->javaArrayFieldID = fieldIds[SURFACE_DATA_INT]; jSurface->javaArrayFieldSize = sizeof(jint); break; case TYPE_USHORT_565_RGB: jSurface->javaArrayFieldID = fieldIds[SURFACE_DATA_SHORT]; jSurface->javaArrayFieldSize = sizeof(jshort); break; case TYPE_BYTE_GRAY: jSurface->javaArrayFieldID = fieldIds[SURFACE_DATA_BYTE]; jSurface->javaArrayFieldSize = sizeof(jbyte); break; default: //errorneous - should never happen jSurface->javaArrayFieldID = NULL; } KNI_SetLongField(objectHandle, fieldIds[SURFACE_NATIVE_PTR], PointerToJLong(surface)); // KNI_registerCleanup(objectHandle, disposeNativeImpl); } else { KNI_ThrowNew("java/lang/OutOfMemoryError", "Allocation of internal renderer buffer failed."); } } else { KNI_ThrowNew("java/lang/IllegalStateException", ""); } KNI_EndHandles(); KNI_ReturnVoid(); }