Advertisement
Airyz_

Untitled

Jul 2nd, 2020
1,442
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.89 KB | None | 0 0
  1. void __usercall R_RecenterSurfaceTexCoords(GfxSurface *surface@<esi>, char *vertLayerDataMem@<ecx>, GfxWorldVertex *vertsMem)
  2. {
  3.   Material *v3; // eax
  4.   char *v4; // eax
  5.   char *v5; // edi
  6.   unsigned int v6; // ebx
  7.   unsigned int v7; // eax
  8.   float v8; // xmm0_4
  9.   float v9; // xmm1_4
  10.   int v10; // ecx
  11.   int v11; // eax
  12.   unsigned int v12; // edx
  13.   __m128 v13; // xmm3
  14.   float v14; // xmm0_4
  15.   float v15; // xmm1_4
  16.   __m128 v16; // xmm4
  17.   __m128 v17; // xmm2
  18.   float v18; // xmm5_4
  19.   __m128 v19; // xmm0
  20.   int v20; // ecx
  21.   unsigned int v21; // edi
  22.   float v22; // xmm0_4
  23.   int v23; // eax
  24.   char *v24; // ebx
  25.   int v25; // eax
  26.   float v26; // xmm0_4
  27.   float *v27; // eax
  28.   int v28; // eax
  29.   float v29; // xmm1_4
  30.   unsigned int extraTexCoordCount; // [esp+0h] [ebp-B4h]
  31.   char *layerVertsMem; // [esp+8h] [ebp-ACh]
  32.   char *vertUsed; // [esp+Ch] [ebp-A8h]
  33.   unsigned int vertLayerDataStride; // [esp+14h] [ebp-A0h]
  34.   unsigned int texCoordIndex; // [esp+18h] [ebp-9Ch]
  35.   char *triUsed; // [esp+1Ch] [ebp-98h]
  36.   int triIndex; // [esp+20h] [ebp-94h]
  37.   char *vertRecentered; // [esp+24h] [ebp-90h]
  38.   char *v38; // [esp+28h] [ebp-8Ch]
  39.   int v39; // [esp+28h] [ebp-8Ch]
  40.   float center; // [esp+2Ch] [ebp-88h]
  41.   float center_4; // [esp+30h] [ebp-84h]
  42.   vec3_t maxs[5]; // [esp+38h] [ebp-7Ch]
  43.   vec3_t mins[5]; // [esp+74h] [ebp-40h]
  44.  
  45.   v3 = surface->material;
  46.   v38 = vertLayerDataMem;
  47.   if ( v3 && v3->localTechniqueSet )
  48.   {
  49.     triUsed = Z_Malloc(surface->tris.triCount, "R_LoadSurfaces", 23);
  50.     memset(triUsed, 0, surface->tris.triCount);
  51.     v4 = Z_Malloc(surface->tris.vertexCount, "R_LoadSurfaces", 23);
  52.     v5 = v4;
  53.     vertUsed = v4;
  54.     vertRecentered = Z_Malloc(surface->tris.vertexCount, "R_LoadSurfaces", 23);
  55.     memset(vertRecentered, 0, surface->tris.vertexCount);
  56.     v6 = s_extraTexCoordCountForWorldVertexFormat[surface->material->localTechniqueSet->worldVertFormat];
  57.     extraTexCoordCount = s_extraTexCoordCountForWorldVertexFormat[surface->material->localTechniqueSet->worldVertFormat];
  58.     vertLayerDataStride = R_GetSurfaceVertexLayerDataStride(surface);
  59.     layerVertsMem = &v38[surface->tris.vertexDataOffset1];
  60.     v7 = 0;
  61.     triIndex = 0;
  62.     if ( surface->tris.triCount > 0u )
  63.     {
  64.       v8 = FLOAT_3_4028235e38;
  65.       v9 = FLOAT_N3_4028235e38;
  66.       do
  67.       {
  68.         if ( !triUsed[v7] )
  69.         {
  70.           v10 = v6 + 1;
  71.           if ( v6 != -1 )
  72.           {
  73.             v11 = 0;
  74.             do
  75.             {
  76.               mins[v11].x = v8;
  77.               mins[v11].y = v8;
  78.               mins[v11].z = v8;
  79.               maxs[v11].x = v9;
  80.               maxs[v11].y = v9;
  81.               maxs[v11].z = v9;
  82.               ++v11;
  83.               --v10;
  84.             }
  85.             while ( v10 );
  86.           }
  87.           memset(v5, 0, surface->tris.vertexCount);
  88.           R_CalculateTriangleGroupTexCoordExtents(
  89.             surface,
  90.             vertsMem,
  91.             layerVertsMem,
  92.             vertLayerDataStride,
  93.             v6,
  94.             triUsed,
  95.             v5,
  96.             triIndex,
  97.             mins,
  98.             maxs);
  99.           v12 = 0;
  100.           texCoordIndex = 0;
  101.           if ( v6 != -1 )
  102.           {
  103.             do
  104.             {
  105.               v13.m128_f32[0] = FLOAT_8388608_0;
  106.               v14 = (mins[v12].x + maxs[v12].x) * 0.5;
  107.               v15 = (mins[v12].y + maxs[v12].y) * 0.5;
  108.               v16.m128_i32[0] = LODWORD(FLOAT_N0_0) & LODWORD(v14);
  109.               v17.m128_i32[0] = LODWORD(v14) ^ LODWORD(FLOAT_N0_0) & LODWORD(v14);
  110.               v13.m128_i32[0] = LODWORD(FLOAT_8388608_0) & *&_mm_cmplt_ss(v17, v13);
  111.               v17.m128_f32[0] = (v14 + COERCE_FLOAT(v13.m128_i32[0] | LODWORD(FLOAT_N0_0) & LODWORD(v14)))
  112.                               - COERCE_FLOAT(v13.m128_i32[0] | LODWORD(FLOAT_N0_0) & LODWORD(v14));
  113.               v13.m128_f32[0] = v17.m128_f32[0] - v14;
  114.               v17.m128_f32[0] = v17.m128_f32[0] - COERCE_FLOAT(*&_mm_cmpgt_ss(v13, v16) & LODWORD(FLOAT_1_0));
  115.               v13.m128_i32[0] = LODWORD(FLOAT_N0_0) & LODWORD(v15);
  116.               v18 = v17.m128_f32[0];
  117.               v17.m128_f32[0] = FLOAT_8388608_0;
  118.               v19.m128_i32[0] = LODWORD(v15) ^ LODWORD(FLOAT_N0_0) & LODWORD(v15);
  119.               v17.m128_i32[0] = LODWORD(FLOAT_8388608_0) & *&_mm_cmplt_ss(v19, v17) | LODWORD(FLOAT_N0_0) & LODWORD(v15);
  120.               v19.m128_f32[0] = (v15 + v17.m128_f32[0]) - v17.m128_f32[0];
  121.               v17.m128_f32[0] = v19.m128_f32[0] - v15;
  122.               v20 = 0;
  123.               v21 = 0;
  124.               v22 = v19.m128_f32[0] - COERCE_FLOAT(*&_mm_cmpgt_ss(v17, v13) & LODWORD(FLOAT_1_0));
  125.               center = v18;
  126.               center_4 = v22;
  127.               if ( surface->tris.vertexCount > 0u )
  128.               {
  129.                 v23 = vertUsed - vertRecentered;
  130.                 v39 = 0;
  131.                 while ( 1 )
  132.                 {
  133.                   v24 = &vertRecentered[v21];
  134.                   if ( vertRecentered[v21 + v23] )
  135.                   {
  136.                     if ( v12 )
  137.                     {
  138.                       v28 = v20 + 8 * v12;
  139.                       v29 = *&layerVertsMem[v28 - 8];
  140.                       v27 = &layerVertsMem[v28 - 8];
  141.                       *v27 = v29 - v18;
  142.                     }
  143.                     else
  144.                     {
  145.                       if ( *v24 )
  146.                       {
  147.                         if ( !Assert_MyHandler(
  148.                                 "c:\\t6\\code\\src\\gfx_d3d\\r_bsp_load_obj.cpp",
  149.                                 2818,
  150.                                 0,
  151.                                 "(!vertRecentered[vertIndex])",
  152.                                 &pBlock) )
  153.                           __debugbreak();
  154.                         v12 = texCoordIndex;
  155.                       }
  156.                       v18 = center;
  157.                       *v24 = 1;
  158.                       v25 = v21 + surface->tris.firstVertex;
  159.                       v26 = vertsMem[v25].texCoord.v[0];
  160.                       v27 = vertsMem[v25].texCoord.v;
  161.                       v20 = v39;
  162.                       *v27 = v26 - center;
  163.                       v22 = center_4;
  164.                     }
  165.                     v27[1] = v27[1] - v22;
  166.                   }
  167.                   v20 += vertLayerDataStride;
  168.                   ++v21;
  169.                   v39 = v20;
  170.                   if ( v21 >= surface->tris.vertexCount )
  171.                     break;
  172.                   v23 = vertUsed - vertRecentered;
  173.                 }
  174.                 v6 = extraTexCoordCount;
  175.               }
  176.               texCoordIndex = ++v12;
  177.             }
  178.             while ( v12 < v6 + 1 );
  179.             v5 = vertUsed;
  180.           }
  181.           v8 = FLOAT_3_4028235e38;
  182.           v9 = FLOAT_N3_4028235e38;
  183.         }
  184.         v7 = triIndex + 1;
  185.         triIndex = v7;
  186.       }
  187.       while ( v7 < surface->tris.triCount );
  188.     }
  189.     Z_Free(triUsed, 24);
  190.     Z_Free(v5, 24);
  191.     Z_Free(vertRecentered, 24);
  192.   }
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement