private static void GmTvxSetModelEx( AppMain.TVX_FILE model_tvx, AppMain.NNS_TEXLIST model_tex, ref AppMain.VecFx32 pos, ref AppMain.VecFx32 scale, uint flag, short rotate_z, ref AppMain.GMS_TVX_EX_WORK ex_work) { if (!AppMain.GmMainIsDrawEnable()) { return; } AppMain.GMS_TVX_DRAW_WORK[] gmTvxDrawWork = AppMain.gm_tvx_draw_work; uint textureNum = AppMain.AoTvxGetTextureNum(model_tvx); for (uint tex_no = 0; tex_no < textureNum; ++tex_no) { uint vertexNum = AppMain.AoTvxGetVertexNum(model_tvx, tex_no); int textureId = AppMain.AoTvxGetTextureId(model_tvx, tex_no); for (int index = 0; index < AppMain.GMD_TVX_DRAW_WORK_NUM; ++index) { if (gmTvxDrawWork[index].tex == null && gmTvxDrawWork[index].tex_id == -1 || gmTvxDrawWork[index].tex == model_tex && gmTvxDrawWork[index].tex_id == textureId && (gmTvxDrawWork[index].u_wrap == ex_work.u_wrap && gmTvxDrawWork[index].v_wrap == ex_work.v_wrap)) { if ((long)gmTvxDrawWork[index].stack_num >= (long)AppMain.GMD_TVX_DRAW_STACK_NUM) { return; } gmTvxDrawWork[index].tex = model_tex; gmTvxDrawWork[index].tex_id = textureId; gmTvxDrawWork[index].u_wrap = ex_work.u_wrap; gmTvxDrawWork[index].v_wrap = ex_work.v_wrap; gmTvxDrawWork[index].all_vtx_num += vertexNum; AppMain.GMS_TVX_DRAW_STACK gmsTvxDrawStack = gmTvxDrawWork[index].stack[(int)gmTvxDrawWork[index].stack_num]; gmsTvxDrawStack.vtx = AppMain.AoTvxGetVertex(model_tvx, tex_no); gmsTvxDrawStack.vtx_num = vertexNum; gmsTvxDrawStack.pos = pos; gmsTvxDrawStack.scale = scale; gmsTvxDrawStack.disp_flag = flag; gmsTvxDrawStack.rotate_z = (int)rotate_z; gmsTvxDrawStack.coord = ex_work.coord; gmsTvxDrawStack.color = ex_work.color; ++gmTvxDrawWork[index].stack_num; break; } } } }
// Token: 0x0600052B RID: 1323 RVA: 0x0002B790 File Offset: 0x00029990 private static void GmTvxSetModelEx(AppMain.TVX_FILE model_tvx, AppMain.NNS_TEXLIST model_tex, ref AppMain.VecFx32 pos, ref AppMain.VecFx32 scale, uint flag, short rotate_z, ref AppMain.GMS_TVX_EX_WORK ex_work) { if (!AppMain.GmMainIsDrawEnable()) { return; } AppMain.GMS_TVX_DRAW_WORK[] array = AppMain.gm_tvx_draw_work; uint num = AppMain.AoTvxGetTextureNum(model_tvx); for (uint num2 = 0U; num2 < num; num2 += 1U) { uint num3 = AppMain.AoTvxGetVertexNum(model_tvx, num2); int num4 = AppMain.AoTvxGetTextureId(model_tvx, num2); int i = 0; while (i < AppMain.GMD_TVX_DRAW_WORK_NUM) { if ((array[i].tex == null && array[i].tex_id == -1) || (array[i].tex == model_tex && array[i].tex_id == num4 && array[i].u_wrap == ex_work.u_wrap && array[i].v_wrap == ex_work.v_wrap)) { if ((ulong)array[i].stack_num >= (ulong)((long)AppMain.GMD_TVX_DRAW_STACK_NUM)) { return; } array[i].tex = model_tex; array[i].tex_id = num4; array[i].u_wrap = ex_work.u_wrap; array[i].v_wrap = ex_work.v_wrap; array[i].all_vtx_num += num3; AppMain.GMS_TVX_DRAW_STACK gms_TVX_DRAW_STACK = array[i].stack[(int)((UIntPtr)array[i].stack_num)]; gms_TVX_DRAW_STACK.vtx = AppMain.AoTvxGetVertex(model_tvx, num2); gms_TVX_DRAW_STACK.vtx_num = num3; gms_TVX_DRAW_STACK.pos = pos; gms_TVX_DRAW_STACK.scale = scale; gms_TVX_DRAW_STACK.disp_flag = flag; gms_TVX_DRAW_STACK.rotate_z = (int)rotate_z; gms_TVX_DRAW_STACK.coord = ex_work.coord; gms_TVX_DRAW_STACK.color = ex_work.color; array[i].stack_num += 1U; break; } else { i++; } } } }
// Token: 0x0600052C RID: 1324 RVA: 0x0002B92C File Offset: 0x00029B2C private static void GmTvxExecuteDraw() { AppMain.GMS_TVX_DRAW_WORK[] array = AppMain.gm_tvx_draw_work; if (array == null) { return; } if (array[0].tex == null) { return; } uint num = AppMain.GmMainGetLightColor(); AppMain._AMS_PARAM_DRAW_PRIMITIVE.bldSrc = 770; AppMain._AMS_PARAM_DRAW_PRIMITIVE.bldDst = 771; AppMain._AMS_PARAM_DRAW_PRIMITIVE.bldMode = 32774; AppMain._AMS_PARAM_DRAW_PRIMITIVE.aTest = 1; AppMain._AMS_PARAM_DRAW_PRIMITIVE.zMask = 0; AppMain._AMS_PARAM_DRAW_PRIMITIVE.zTest = 1; AppMain._AMS_PARAM_DRAW_PRIMITIVE.noSort = 1; AppMain._AMS_PARAM_DRAW_PRIMITIVE.format3D = 4; uint num2 = 0U; while ((ulong)num2 < (ulong)((long)AppMain.GMD_TVX_DRAW_WORK_NUM)) { if (array[(int)((UIntPtr)num2)].tex_id == -1) { return; } AppMain._AMS_PARAM_DRAW_PRIMITIVE.ablend = 0; AppMain._AMS_PARAM_DRAW_PRIMITIVE.texlist = array[(int)((UIntPtr)num2)].tex; AppMain._AMS_PARAM_DRAW_PRIMITIVE.uwrap = array[(int)((UIntPtr)num2)].u_wrap; AppMain._AMS_PARAM_DRAW_PRIMITIVE.vwrap = array[(int)((UIntPtr)num2)].v_wrap; AppMain._AMS_PARAM_DRAW_PRIMITIVE.type = 1; AppMain._AMS_PARAM_DRAW_PRIMITIVE.count = (int)(array[(int)((UIntPtr)num2)].all_vtx_num + array[(int)((UIntPtr)num2)].stack_num * 2U - 2U); AppMain.NNS_PRIM3D_PCT_ARRAY nns_PRIM3D_PCT_ARRAY = AppMain.amDrawAlloc_NNS_PRIM3D_PCT(AppMain._AMS_PARAM_DRAW_PRIMITIVE.count); AppMain.NNS_PRIM3D_PCT[] buffer = nns_PRIM3D_PCT_ARRAY.buffer; int offset = nns_PRIM3D_PCT_ARRAY.offset; int num3 = 0; AppMain._AMS_PARAM_DRAW_PRIMITIVE.vtxPCT3D = nns_PRIM3D_PCT_ARRAY; AppMain._AMS_PARAM_DRAW_PRIMITIVE.texId = array[(int)((UIntPtr)num2)].tex_id; SNNS_MATRIX snns_MATRIX = default(SNNS_MATRIX); SNNS_MATRIX snns_MATRIX2 = default(SNNS_MATRIX); AppMain.nnMakeUnitMatrix(ref snns_MATRIX2); for (uint num4 = 0U; num4 < array[(int)((UIntPtr)num2)].stack_num; num4 += 1U) { AppMain.GMS_TVX_DRAW_STACK gms_TVX_DRAW_STACK = array[(int)((UIntPtr)num2)].stack[(int)((UIntPtr)num4)]; if ((gms_TVX_DRAW_STACK.disp_flag & AppMain.GMD_TVX_DISP_BLEND) != 0U) { AppMain._AMS_PARAM_DRAW_PRIMITIVE.ablend = 1; } float num5 = AppMain.FXM_FX32_TO_FLOAT(gms_TVX_DRAW_STACK.pos.x); float num6 = -AppMain.FXM_FX32_TO_FLOAT(gms_TVX_DRAW_STACK.pos.y); float num7 = AppMain.FXM_FX32_TO_FLOAT(gms_TVX_DRAW_STACK.pos.z); AppMain.nnMakeUnitMatrix(ref snns_MATRIX); if ((gms_TVX_DRAW_STACK.disp_flag & AppMain.GMD_TVX_DISP_ROTATE) != 0U) { AppMain.nnRotateZMatrix(ref snns_MATRIX, ref snns_MATRIX, (int)((ushort)gms_TVX_DRAW_STACK.rotate_z)); } if ((gms_TVX_DRAW_STACK.disp_flag & AppMain.GMD_TVX_DISP_SCALE) != 0U) { AppMain.nnScaleMatrix(ref snns_MATRIX, ref snns_MATRIX, AppMain.FXM_FX32_TO_FLOAT(gms_TVX_DRAW_STACK.scale.x), AppMain.FXM_FX32_TO_FLOAT(gms_TVX_DRAW_STACK.scale.y), AppMain.FXM_FX32_TO_FLOAT(gms_TVX_DRAW_STACK.scale.z)); } uint num8 = num; if ((gms_TVX_DRAW_STACK.disp_flag & AppMain.GMD_TVX_DISP_LIGHT_DISABLE) != 0U) { num8 = gms_TVX_DRAW_STACK.color; } SNNS_VECTOR snns_VECTOR = default(SNNS_VECTOR); int num9 = num3 + offset; AppMain.AOS_TVX_VERTEX[] vtx = gms_TVX_DRAW_STACK.vtx; int num10 = 0; while ((long)num10 < (long)((ulong)gms_TVX_DRAW_STACK.vtx_num)) { snns_VECTOR.x = vtx[num10].x; snns_VECTOR.y = vtx[num10].y; snns_VECTOR.z = vtx[num10].z; int num11 = num9 + num10; if (gms_TVX_DRAW_STACK.disp_flag != 0U) { AppMain.nnTransformVector(ref buffer[num11].Pos, ref snns_MATRIX, ref snns_VECTOR); } else { buffer[num11].Pos.Assign(snns_VECTOR.x, snns_VECTOR.y, snns_VECTOR.z); } AppMain.NNS_PRIM3D_PCT[] array2 = buffer; int num12 = num11; array2[num12].Pos.x = array2[num12].Pos.x + num5; AppMain.NNS_PRIM3D_PCT[] array3 = buffer; int num13 = num11; array3[num13].Pos.y = array3[num13].Pos.y + num6; AppMain.NNS_PRIM3D_PCT[] array4 = buffer; int num14 = num11; array4[num14].Pos.z = array4[num14].Pos.z + num7; buffer[num11].Tex.u = vtx[num10].u + gms_TVX_DRAW_STACK.coord.u; buffer[num11].Tex.v = vtx[num10].v + gms_TVX_DRAW_STACK.coord.v; buffer[num11].Col = (vtx[num10].c & num8); num10++; } num3 += (int)(gms_TVX_DRAW_STACK.vtx_num + 2U); if (num4 != 0U) { int num15 = num9 - 1; buffer[num15] = buffer[num15 + 1]; } if (num4 != array[(int)((UIntPtr)num2)].stack_num - 1U) { int num15 = num9 + (int)(gms_TVX_DRAW_STACK.vtx_num - 1U); buffer[num15 + 1] = buffer[num15]; } } AppMain.amMatrixPush(ref snns_MATRIX2); AppMain.ObjDraw3DNNDrawPrimitive(AppMain._AMS_PARAM_DRAW_PRIMITIVE); AppMain.amMatrixPop(); array[(int)((UIntPtr)num2)].tex = null; array[(int)((UIntPtr)num2)].tex_id = -1; array[(int)((UIntPtr)num2)].stack_num = 0U; array[(int)((UIntPtr)num2)].all_vtx_num = 0U; num2 += 1U; } }
private static void GmTvxExecuteDraw() { AppMain.GMS_TVX_DRAW_WORK[] gmTvxDrawWork = AppMain.gm_tvx_draw_work; if (gmTvxDrawWork == null || gmTvxDrawWork[0].tex == null) { return; } uint lightColor = AppMain.GmMainGetLightColor(); AppMain._AMS_PARAM_DRAW_PRIMITIVE.bldSrc = 770; AppMain._AMS_PARAM_DRAW_PRIMITIVE.bldDst = 771; AppMain._AMS_PARAM_DRAW_PRIMITIVE.bldMode = 32774; AppMain._AMS_PARAM_DRAW_PRIMITIVE.aTest = (short)1; AppMain._AMS_PARAM_DRAW_PRIMITIVE.zMask = (short)0; AppMain._AMS_PARAM_DRAW_PRIMITIVE.zTest = (short)1; AppMain._AMS_PARAM_DRAW_PRIMITIVE.noSort = (short)1; AppMain._AMS_PARAM_DRAW_PRIMITIVE.format3D = 4; for (uint index1 = 0; (long)index1 < (long)AppMain.GMD_TVX_DRAW_WORK_NUM && gmTvxDrawWork[(int)index1].tex_id != -1; ++index1) { AppMain._AMS_PARAM_DRAW_PRIMITIVE.ablend = 0; AppMain._AMS_PARAM_DRAW_PRIMITIVE.texlist = gmTvxDrawWork[(int)index1].tex; AppMain._AMS_PARAM_DRAW_PRIMITIVE.uwrap = gmTvxDrawWork[(int)index1].u_wrap; AppMain._AMS_PARAM_DRAW_PRIMITIVE.vwrap = gmTvxDrawWork[(int)index1].v_wrap; AppMain._AMS_PARAM_DRAW_PRIMITIVE.type = 1; AppMain._AMS_PARAM_DRAW_PRIMITIVE.count = (int)gmTvxDrawWork[(int)index1].all_vtx_num + (int)gmTvxDrawWork[(int)index1].stack_num * 2 - 2; AppMain.NNS_PRIM3D_PCT_ARRAY nnsPriM3DPctArray = AppMain.amDrawAlloc_NNS_PRIM3D_PCT(AppMain._AMS_PARAM_DRAW_PRIMITIVE.count); AppMain.NNS_PRIM3D_PCT[] buffer = nnsPriM3DPctArray.buffer; int offset = nnsPriM3DPctArray.offset; int num1 = 0; AppMain._AMS_PARAM_DRAW_PRIMITIVE.vtxPCT3D = nnsPriM3DPctArray; AppMain._AMS_PARAM_DRAW_PRIMITIVE.texId = gmTvxDrawWork[(int)index1].tex_id; AppMain.SNNS_MATRIX snnsMatrix1 = new AppMain.SNNS_MATRIX(); AppMain.SNNS_MATRIX snnsMatrix2 = new AppMain.SNNS_MATRIX(); AppMain.nnMakeUnitMatrix(ref snnsMatrix2); for (uint index2 = 0; index2 < gmTvxDrawWork[(int)index1].stack_num; ++index2) { AppMain.GMS_TVX_DRAW_STACK gmsTvxDrawStack = gmTvxDrawWork[(int)index1].stack[(int)index2]; if (((int)gmsTvxDrawStack.disp_flag & (int)AppMain.GMD_TVX_DISP_BLEND) != 0) { AppMain._AMS_PARAM_DRAW_PRIMITIVE.ablend = 1; } float num2 = AppMain.FXM_FX32_TO_FLOAT(gmsTvxDrawStack.pos.x); float num3 = -AppMain.FXM_FX32_TO_FLOAT(gmsTvxDrawStack.pos.y); float num4 = AppMain.FXM_FX32_TO_FLOAT(gmsTvxDrawStack.pos.z); AppMain.nnMakeUnitMatrix(ref snnsMatrix1); if (((int)gmsTvxDrawStack.disp_flag & (int)AppMain.GMD_TVX_DISP_ROTATE) != 0) { AppMain.nnRotateZMatrix(ref snnsMatrix1, ref snnsMatrix1, (int)(ushort)gmsTvxDrawStack.rotate_z); } if (((int)gmsTvxDrawStack.disp_flag & (int)AppMain.GMD_TVX_DISP_SCALE) != 0) { AppMain.nnScaleMatrix(ref snnsMatrix1, ref snnsMatrix1, AppMain.FXM_FX32_TO_FLOAT(gmsTvxDrawStack.scale.x), AppMain.FXM_FX32_TO_FLOAT(gmsTvxDrawStack.scale.y), AppMain.FXM_FX32_TO_FLOAT(gmsTvxDrawStack.scale.z)); } uint num5 = lightColor; if (((int)gmsTvxDrawStack.disp_flag & (int)AppMain.GMD_TVX_DISP_LIGHT_DISABLE) != 0) { num5 = gmsTvxDrawStack.color; } AppMain.SNNS_VECTOR src = new AppMain.SNNS_VECTOR(); int num6 = num1 + offset; AppMain.AOS_TVX_VERTEX[] vtx = gmsTvxDrawStack.vtx; for (int index3 = 0; (long)index3 < (long)gmsTvxDrawStack.vtx_num; ++index3) { src.x = vtx[index3].x; src.y = vtx[index3].y; src.z = vtx[index3].z; int index4 = num6 + index3; if (gmsTvxDrawStack.disp_flag != 0U) { AppMain.nnTransformVector(ref buffer[index4].Pos, ref snnsMatrix1, ref src); } else { buffer[index4].Pos.Assign(src.x, src.y, src.z); } buffer[index4].Pos.x += num2; buffer[index4].Pos.y += num3; buffer[index4].Pos.z += num4; buffer[index4].Tex.u = vtx[index3].u + gmsTvxDrawStack.coord.u; buffer[index4].Tex.v = vtx[index3].v + gmsTvxDrawStack.coord.v; buffer[index4].Col = vtx[index3].c & num5; } num1 += (int)gmsTvxDrawStack.vtx_num + 2; if (index2 != 0U) { int index3 = num6 - 1; buffer[index3] = buffer[index3 + 1]; } if ((int)index2 != (int)gmTvxDrawWork[(int)index1].stack_num - 1) { int index3 = num6 + ((int)gmsTvxDrawStack.vtx_num - 1); buffer[index3 + 1] = buffer[index3]; } } AppMain.amMatrixPush(ref snnsMatrix2); AppMain.ObjDraw3DNNDrawPrimitive(AppMain._AMS_PARAM_DRAW_PRIMITIVE); AppMain.amMatrixPop(); gmTvxDrawWork[(int)index1].tex = (AppMain.NNS_TEXLIST)null; gmTvxDrawWork[(int)index1].tex_id = -1; gmTvxDrawWork[(int)index1].stack_num = 0U; gmTvxDrawWork[(int)index1].all_vtx_num = 0U; } }