⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 m3gobject3d.c

📁 java 1.1 gemini 08_16
💻 C
字号:
/*******************************************************************************
 *  Modification Notice:
 *  --------------------------
 *  This software is modified by MediaTek Inc. and the information contained
 *  herein is confidential. The software may not be copied and the information
 *  contained herein may not be used or disclosed except with the written
 *  permission of MediaTek Inc. (C) 2001
 *
 *******************************************************************************/

/*****************************************************************************
 *
 * Filename:
 * ---------
 *  Object3D.c
 *
 * Project:
 * --------
 *   Maui_Software
 *
 * Description:
 * ------------
 *   
 *
 * Author:
 * -------
 * -------
 *
 *============================================================================
 *             HISTORY
 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *------------------------------------------------------------------------------
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *------------------------------------------------------------------------------
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *============================================================================
 ****************************************************************************/
 
/****************************************************************************
 Include Header Files
****************************************************************************/ 
#include "m3g.h"
 
#ifdef SUPPORT_JSR_184
/****************************************************************************
 Function Definition
****************************************************************************/
KNIEXPORT KNI_RETURNTYPE_VOID
Java_javax_microedition_m3g_Object3D_addAnimationTrackImpl()
{
	st_m3g_object3d* handle = (st_m3g_object3d*)KNI_GetParameterAsInt(1);	
	st_m3g_animationtrack* track = (st_m3g_animationtrack*)KNI_GetParameterAsInt(2);	

	if(track == NULL) {
		KNI_ThrowNew("java/lang/NullPointerException", "add null track");			
	} else {
		ENTER_M3D_CS;
		if(_m3g_Object3D_check_animationtrack(handle, track) != M3G_SUCCESS) {
			KNI_ThrowNew("java/lang/IllegalArgumentException", "add invalid track");
		} else {
			M3G_Object3D_addAnimationTrack(handle, track);
		}
		LEAVE_M3D_CS;
	}

	KNI_ReturnVoid();
}

KNIEXPORT KNI_RETURNTYPE_INT
Java_javax_microedition_m3g_Object3D_animateImpl()
{
	st_m3g_object3d* handle = (st_m3g_object3d*)KNI_GetParameterAsInt(1);
	jint world_time = KNI_GetParameterAsInt(2);	
	jint validity_interval = 0x7fffffff;
	kal_int32 result;
	 
	kal_trace(TRACE_GROUP_6, FUNC_J2ME_M3G_ANIMATE, handle, world_time);

	if(handle == NULL) {
		KNI_ThrowNew("java/lang/NullPointerException", "animate null handle");			
	} else {	

		ENTER_M3D_CS;
		result = M3G_Object3D_animate(handle, world_time, &validity_interval);
		LEAVE_M3D_CS;

		if(result != M3G_SUCCESS) {
			KNI_ThrowNew("java/lang/IllegalStateException", "animate runtime error");
		}
	}
		
	KNI_ReturnInt(validity_interval);	
}
	
KNIEXPORT KNI_RETURNTYPE_INT	
Java_javax_microedition_m3g_Object3D_duplicateImpl()
{
	st_m3g_object3d* handle = (st_m3g_object3d*)KNI_GetParameterAsInt(1);	
	st_m3g_object3d* duplicate;
	 
	kal_trace(TRACE_GROUP_6, FUNC_J2ME_M3G_DUPLICATE, handle, handle->object_type);

	ENTER_M3D_CS;
	duplicate = M3G_Object3D_duplicate(handle, NULL);
	LEAVE_M3D_CS;

	KNI_ReturnInt((jint)duplicate);
}

KNIEXPORT KNI_RETURNTYPE_INT
Java_javax_microedition_m3g_Object3D_findImpl()
{
	st_m3g_object3d* handle = (st_m3g_object3d*)KNI_GetParameterAsInt(1);
	jint user_id = KNI_GetParameterAsInt(2);
	jint result;

	kal_trace(TRACE_GROUP_6, FUNC_J2ME_M3G_FIND, handle, user_id);

	ENTER_M3D_CS;
	result = (jint)M3G_Object3D_find(handle, user_id);
	LEAVE_M3D_CS;

	KNI_ReturnInt(result);
}

KNIEXPORT KNI_RETURNTYPE_INT
Java_javax_microedition_m3g_Object3D_getAnimationTrackCountImpl()
{
	st_m3g_object3d* handle = (st_m3g_object3d*)KNI_GetParameterAsInt(1);	
	//KNI_ReturnInt((jint)handle->animationtrack_count);
	KNI_ReturnInt((jint)M3G_Object3D_getAnimationTrackCount(handle));
}
	
KNIEXPORT KNI_RETURNTYPE_INT 
Java_javax_microedition_m3g_Object3D_getAnimationTrackImpl()
{
	st_m3g_object3d* handle = (st_m3g_object3d*)KNI_GetParameterAsInt(1);	
	jint index = KNI_GetParameterAsInt(2);
	st_m3g_animationtrack* track = NULL;

	if(index<0 || index>=handle->animationtrack_count) {
		KNI_ThrowNew("java/lang/IndexOutOfBoundsException", "add null track");
	} else {
		//track = handle->animationtracks[index];
		track = (st_m3g_animationtrack*)M3G_Object3D_getAnimationTrack(handle,index);
	}

	KNI_ReturnInt((jint)track);		
}
	
KNIEXPORT KNI_RETURNTYPE_INT
Java_javax_microedition_m3g_Object3D_getUserIDImpl()
{
	st_m3g_object3d* handle = (st_m3g_object3d*)KNI_GetParameterAsInt(1);		
	//KNI_ReturnInt((jint)handle->user_id);
	KNI_ReturnInt((jint)M3G_Object3D_getUserID(handle));
}
	
KNIEXPORT KNI_RETURNTYPE_VOID
Java_javax_microedition_m3g_Object3D_removeAnimationTrackImpl()
{
	st_m3g_object3d* handle = (st_m3g_object3d*)KNI_GetParameterAsInt(1);		
	st_m3g_animationtrack* track_handle = (st_m3g_animationtrack*)KNI_GetParameterAsInt(2);

	kal_trace(TRACE_GROUP_6, FUNC_J2ME_M3G_REMOVEANIMATIONTRACK, handle, track_handle);

	ENTER_M3D_CS;
	if(track_handle) {
		M3G_Object3D_removeAnimationTrack(handle, track_handle);
	}
	LEAVE_M3D_CS;
	
	KNI_ReturnVoid();
}
	
KNIEXPORT KNI_RETURNTYPE_VOID
Java_javax_microedition_m3g_Object3D_setUserIDImpl()
{	
	st_m3g_object3d* handle = (st_m3g_object3d*)KNI_GetParameterAsInt(1);		
	jint user_id = KNI_GetParameterAsInt(2);
	
	kal_trace(TRACE_GROUP_6, FUNC_J2ME_M3G_SETUSERID, handle, user_id);

	M3G_Object3D_setUserID(handle, user_id);
	KNI_ReturnVoid();	
}

KNIEXPORT KNI_RETURNTYPE_INT
Java_javax_microedition_m3g_Object3D_getReferencesImpl()
{
	st_m3g_object3d* handle = (st_m3g_object3d*)KNI_GetParameterAsInt(1);
	jint reference_count;
	jint len;
	
	KNI_StartHandles(1);	
	KNI_DeclareHandle(references);		
	KNI_GetParameterAsObject(2, references);

	reference_count = M3G_Object3D_getReferences(handle, 0, NULL);	
	
	if (*references != NULL) {
		len = KNI_GetArrayLength(references);

		if (len < reference_count) {
			KNI_ThrowNew("java/lang/IllegalArgumentException", "array size too small");			
		} else {
#if FAST_KNI && defined(CLDCHI)
			jint_array* array = (jint_array*)*references;
			M3G_Object3D_getReferences(handle, len, (st_m3g_object3d**)array->elements);
#else
			ASSERT(0);
#endif /* FAST_KNI */
		}
	}
	
	KNI_EndHandles();
	
	KNI_ReturnInt(reference_count);	
}

KNIEXPORT KNI_RETURNTYPE_VOID
Java_javax_microedition_m3g_Object3D_finalize()
{
	st_m3g_object3d* handle;
	int i;

	KNI_StartHandles(1);
	KNI_DeclareHandle(object_handle);
	KNI_GetParameterAsObject(0, object_handle);
	
	if(*object_handle) {
#if FAST_KNI && defined(CLDCHI)
		object3d_class* object = (object3d_class*)*object_handle;
		handle = (st_m3g_object3d*)object->object3d_handle;
#else
		ASSERT(0);
#endif /* KNI */

		if(handle) {
			switch(handle->object_type) {
			case M3G_ANIMATION_CONTROLLER:
			case M3G_CAMERA:
			case M3G_COMPOSITINGMODE:
			case M3G_FOG:
			case M3G_IMAGE2D:
			case M3G_KEYFRAMESEQUENCE:
			case M3G_LIGHT:
			case M3G_MATERIAL:
			case M3G_POLYGONMODE:
			case M3G_TRIANGLESTRIPARRAY:
			case M3G_VERTEXARRAY:
				break;
			case M3G_ANIMATION_TRACK:
				{
					st_m3g_animationtrack* track = (st_m3g_animationtrack*)handle;
					_m3g_ObjectPool_removeAssociation((st_m3g_object3d*)track->keyframe_sequence);
					_m3g_ObjectPool_removeAssociation((st_m3g_object3d*)track->animation_controller);		
				}
				break;
			case M3G_APPEARANCE:
				{
					st_m3g_appearance* appearance = (st_m3g_appearance*)handle;

					_m3g_ObjectPool_removeAssociation((st_m3g_object3d*)appearance->material);
					_m3g_ObjectPool_removeAssociation((st_m3g_object3d*)appearance->fog);		
					_m3g_ObjectPool_removeAssociation((st_m3g_object3d*)appearance->polygon_mode);		
					_m3g_ObjectPool_removeAssociation((st_m3g_object3d*)appearance->compositing_mode);								
					for (i=0; i<m3g_graphics3d.max_texunits; i++) {
						if(appearance->textures[i])
							_m3g_ObjectPool_removeAssociation((st_m3g_object3d*)appearance->textures[i]);											
					}
				}
				break;
			case M3G_BACKGROUND:
				{
					st_m3g_background* background = (st_m3g_background*)handle;
					_m3g_ObjectPool_removeAssociation((st_m3g_object3d*)background->background_image);		
				}
				break;
			case M3G_WORLD:
				{
					st_m3g_world* world = (st_m3g_world*)handle;
					_m3g_ObjectPool_removeAssociation((st_m3g_object3d*)world->background);
					_m3g_ObjectPool_removeAssociation((st_m3g_object3d*)world->active_camera);
				}
				/* go through */
			case M3G_GROUP:
				{
					st_m3g_group* group = (st_m3g_group*)handle;
					st_m3g_node_list* list = group->children;
					st_m3g_node* children = NULL;			
					if (list) children = list->list_head;	
					while (children) {
						_m3g_ObjectPool_removeAssociation((st_m3g_object3d*)children);		
						children = children->children_next;
					}
				}
				break;
			case M3G_MORPHINGMESH:
			case M3G_SKINNEDMESH:
			case M3G_MESH:
				{
					st_m3g_mesh* mesh = (st_m3g_mesh*)handle;
					for (i=0; i<mesh->submesh_count; i++) {
						_m3g_ObjectPool_removeAssociation((st_m3g_object3d*)mesh->index_buffer[i]);
						_m3g_ObjectPool_removeAssociation((st_m3g_object3d*)mesh->appearance[i]);			
					}
					_m3g_ObjectPool_removeAssociation((st_m3g_object3d*)mesh->vertex_buffer);

					if(handle->object_type == M3G_MORPHINGMESH) {
						st_m3g_morphingmesh* morph = (st_m3g_morphingmesh*)handle;
						for (i=0; i<morph->morphtarget_count; i++) {
							_m3g_ObjectPool_removeAssociation((st_m3g_object3d*)morph->morph_target[i]);
						}
					} else if(handle->object_type == M3G_SKINNEDMESH) {
						st_m3g_skinnedmesh* skin = (st_m3g_skinnedmesh*)handle;
						_m3g_ObjectPool_removeAssociation((st_m3g_object3d*)skin->skeleton);
					}
				}
				break;
			case M3G_SPRITE:
				{
					st_m3g_sprite3d* sprite = (st_m3g_sprite3d*)handle;
					_m3g_ObjectPool_removeAssociation((st_m3g_object3d*)sprite->image);
					_m3g_ObjectPool_removeAssociation((st_m3g_object3d*)sprite->appearance);
				}
				break;
			case M3G_TEXTURE2D:
				{
					st_m3g_texture2d* texture = (st_m3g_texture2d*)handle;
					_m3g_ObjectPool_removeAssociation((st_m3g_object3d*)texture->image);
				}
				break;
			case M3G_VERTEXBUFFER:
				{
					st_m3g_vertexbuffer* vb = (st_m3g_vertexbuffer*)handle;
					_m3g_ObjectPool_removeAssociation((st_m3g_object3d*)vb->normals);
					_m3g_ObjectPool_removeAssociation((st_m3g_object3d*)vb->colors);
					_m3g_ObjectPool_removeAssociation((st_m3g_object3d*)vb->positions);		
					for (i=0; i<vb->texcoordarray_count; i++) {
						_m3g_ObjectPool_removeAssociation((st_m3g_object3d*)vb->texcoords[i]);			
					}
				}
				break;
			default:
				break;
			}

			_m3g_ObjectPool_removeAssociation(handle);

			if (DEC_CHECK_REF(handle)) {
				ENTER_M3D_CS;
				M3G_Object3D_finalize(handle);
				LEAVE_M3D_CS;
			}	
		}
	}

	KNI_EndHandles();
	KNI_ReturnVoid();	
}
#endif /* #ifdef SUPPORT_JSR_184 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -