📄 m3gobject3d.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 + -