Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void __usercall R_RecenterSurfaceTexCoords(GfxSurface *surface@<esi>, char *vertLayerDataMem@<ecx>, GfxWorldVertex *vertsMem)
- {
- Material *v3; // eax
- char *v4; // eax
- char *v5; // edi
- unsigned int v6; // ebx
- unsigned int v7; // eax
- float v8; // xmm0_4
- float v9; // xmm1_4
- int v10; // ecx
- int v11; // eax
- unsigned int v12; // edx
- __m128 v13; // xmm3
- float v14; // xmm0_4
- float v15; // xmm1_4
- __m128 v16; // xmm4
- __m128 v17; // xmm2
- float v18; // xmm5_4
- __m128 v19; // xmm0
- int v20; // ecx
- unsigned int v21; // edi
- float v22; // xmm0_4
- int v23; // eax
- char *v24; // ebx
- int v25; // eax
- float v26; // xmm0_4
- float *v27; // eax
- int v28; // eax
- float v29; // xmm1_4
- unsigned int extraTexCoordCount; // [esp+0h] [ebp-B4h]
- char *layerVertsMem; // [esp+8h] [ebp-ACh]
- char *vertUsed; // [esp+Ch] [ebp-A8h]
- unsigned int vertLayerDataStride; // [esp+14h] [ebp-A0h]
- unsigned int texCoordIndex; // [esp+18h] [ebp-9Ch]
- char *triUsed; // [esp+1Ch] [ebp-98h]
- int triIndex; // [esp+20h] [ebp-94h]
- char *vertRecentered; // [esp+24h] [ebp-90h]
- char *v38; // [esp+28h] [ebp-8Ch]
- int v39; // [esp+28h] [ebp-8Ch]
- float center; // [esp+2Ch] [ebp-88h]
- float center_4; // [esp+30h] [ebp-84h]
- vec3_t maxs[5]; // [esp+38h] [ebp-7Ch]
- vec3_t mins[5]; // [esp+74h] [ebp-40h]
- v3 = surface->material;
- v38 = vertLayerDataMem;
- if ( v3 && v3->localTechniqueSet )
- {
- triUsed = Z_Malloc(surface->tris.triCount, "R_LoadSurfaces", 23);
- memset(triUsed, 0, surface->tris.triCount);
- v4 = Z_Malloc(surface->tris.vertexCount, "R_LoadSurfaces", 23);
- v5 = v4;
- vertUsed = v4;
- vertRecentered = Z_Malloc(surface->tris.vertexCount, "R_LoadSurfaces", 23);
- memset(vertRecentered, 0, surface->tris.vertexCount);
- v6 = s_extraTexCoordCountForWorldVertexFormat[surface->material->localTechniqueSet->worldVertFormat];
- extraTexCoordCount = s_extraTexCoordCountForWorldVertexFormat[surface->material->localTechniqueSet->worldVertFormat];
- vertLayerDataStride = R_GetSurfaceVertexLayerDataStride(surface);
- layerVertsMem = &v38[surface->tris.vertexDataOffset1];
- v7 = 0;
- triIndex = 0;
- if ( surface->tris.triCount > 0u )
- {
- v8 = FLOAT_3_4028235e38;
- v9 = FLOAT_N3_4028235e38;
- do
- {
- if ( !triUsed[v7] )
- {
- v10 = v6 + 1;
- if ( v6 != -1 )
- {
- v11 = 0;
- do
- {
- mins[v11].x = v8;
- mins[v11].y = v8;
- mins[v11].z = v8;
- maxs[v11].x = v9;
- maxs[v11].y = v9;
- maxs[v11].z = v9;
- ++v11;
- --v10;
- }
- while ( v10 );
- }
- memset(v5, 0, surface->tris.vertexCount);
- R_CalculateTriangleGroupTexCoordExtents(
- surface,
- vertsMem,
- layerVertsMem,
- vertLayerDataStride,
- v6,
- triUsed,
- v5,
- triIndex,
- mins,
- maxs);
- v12 = 0;
- texCoordIndex = 0;
- if ( v6 != -1 )
- {
- do
- {
- v13.m128_f32[0] = FLOAT_8388608_0;
- v14 = (mins[v12].x + maxs[v12].x) * 0.5;
- v15 = (mins[v12].y + maxs[v12].y) * 0.5;
- v16.m128_i32[0] = LODWORD(FLOAT_N0_0) & LODWORD(v14);
- v17.m128_i32[0] = LODWORD(v14) ^ LODWORD(FLOAT_N0_0) & LODWORD(v14);
- v13.m128_i32[0] = LODWORD(FLOAT_8388608_0) & *&_mm_cmplt_ss(v17, v13);
- v17.m128_f32[0] = (v14 + COERCE_FLOAT(v13.m128_i32[0] | LODWORD(FLOAT_N0_0) & LODWORD(v14)))
- - COERCE_FLOAT(v13.m128_i32[0] | LODWORD(FLOAT_N0_0) & LODWORD(v14));
- v13.m128_f32[0] = v17.m128_f32[0] - v14;
- v17.m128_f32[0] = v17.m128_f32[0] - COERCE_FLOAT(*&_mm_cmpgt_ss(v13, v16) & LODWORD(FLOAT_1_0));
- v13.m128_i32[0] = LODWORD(FLOAT_N0_0) & LODWORD(v15);
- v18 = v17.m128_f32[0];
- v17.m128_f32[0] = FLOAT_8388608_0;
- v19.m128_i32[0] = LODWORD(v15) ^ LODWORD(FLOAT_N0_0) & LODWORD(v15);
- v17.m128_i32[0] = LODWORD(FLOAT_8388608_0) & *&_mm_cmplt_ss(v19, v17) | LODWORD(FLOAT_N0_0) & LODWORD(v15);
- v19.m128_f32[0] = (v15 + v17.m128_f32[0]) - v17.m128_f32[0];
- v17.m128_f32[0] = v19.m128_f32[0] - v15;
- v20 = 0;
- v21 = 0;
- v22 = v19.m128_f32[0] - COERCE_FLOAT(*&_mm_cmpgt_ss(v17, v13) & LODWORD(FLOAT_1_0));
- center = v18;
- center_4 = v22;
- if ( surface->tris.vertexCount > 0u )
- {
- v23 = vertUsed - vertRecentered;
- v39 = 0;
- while ( 1 )
- {
- v24 = &vertRecentered[v21];
- if ( vertRecentered[v21 + v23] )
- {
- if ( v12 )
- {
- v28 = v20 + 8 * v12;
- v29 = *&layerVertsMem[v28 - 8];
- v27 = &layerVertsMem[v28 - 8];
- *v27 = v29 - v18;
- }
- else
- {
- if ( *v24 )
- {
- if ( !Assert_MyHandler(
- "c:\\t6\\code\\src\\gfx_d3d\\r_bsp_load_obj.cpp",
- 2818,
- 0,
- "(!vertRecentered[vertIndex])",
- &pBlock) )
- __debugbreak();
- v12 = texCoordIndex;
- }
- v18 = center;
- *v24 = 1;
- v25 = v21 + surface->tris.firstVertex;
- v26 = vertsMem[v25].texCoord.v[0];
- v27 = vertsMem[v25].texCoord.v;
- v20 = v39;
- *v27 = v26 - center;
- v22 = center_4;
- }
- v27[1] = v27[1] - v22;
- }
- v20 += vertLayerDataStride;
- ++v21;
- v39 = v20;
- if ( v21 >= surface->tris.vertexCount )
- break;
- v23 = vertUsed - vertRecentered;
- }
- v6 = extraTexCoordCount;
- }
- texCoordIndex = ++v12;
- }
- while ( v12 < v6 + 1 );
- v5 = vertUsed;
- }
- v8 = FLOAT_3_4028235e38;
- v9 = FLOAT_N3_4028235e38;
- }
- v7 = triIndex + 1;
- triIndex = v7;
- }
- while ( v7 < surface->tris.triCount );
- }
- Z_Free(triUsed, 24);
- Z_Free(v5, 24);
- Z_Free(vertRecentered, 24);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement