DrawScreenSpaceRectangle
0x0028a8c0 · 4410 bytes · __cdecl
_Z24DrawScreenSpaceRectangleP9IMaterialiiiiffffiiPviif
Decompiled
undefined (15 params)
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* DrawScreenSpaceRectangle(IMaterial*, int, int, int, int, float, float, float, float, int, int,
void*, int, int, float) */
void DrawScreenSpaceRectangle
(IMaterial *param_1,int param_2,int param_3,int param_4,int param_5,float param_6,
float param_7,float param_8,float param_9,int param_10,int param_11,void *param_12,
int param_13,int param_14,float param_15)
{
undefined4 uVar1;
undefined4 uVar2;
char cVar3;
int *piVar4;
int *piVar5;
int iVar6;
undefined4 *puVar7;
int iVar8;
int iVar9;
int *piVar10;
uint uVar11;
int iVar12;
int iVar13;
uint uVar14;
int *piVar15;
bool bVar16;
byte bVar17;
float fVar18;
float fVar19;
float fVar20;
float fVar21;
float fVar22;
float fVar23;
float fVar24;
float fVar25;
float fVar26;
float fVar27;
float fVar28;
float fVar29;
float fVar30;
float fVar31;
float fVar32;
float fVar33;
int local_25c;
float local_240;
int local_230;
undefined1 local_21c [4];
undefined1 local_218 [4];
int local_214;
int local_210;
undefined4 local_20c;
undefined4 local_208;
int local_204 [39];
ushort *local_168;
int local_164;
ushort *local_160;
int local_154;
int *local_150;
undefined4 local_14c;
char local_148;
ushort *local_144;
int local_138;
int *local_134;
int local_130;
int local_12c;
ushort *local_128;
int local_124;
undefined4 local_120;
undefined4 local_11c;
undefined4 local_118;
undefined1 local_114;
int local_110 [3];
int local_104;
int local_100;
int local_f8;
int local_f4;
int local_f0;
int local_ec;
int local_e8;
int local_e4;
int local_e0;
int local_dc;
int local_d8;
int local_d4;
undefined4 local_c4;
uint local_c0;
float *local_bc;
undefined4 *local_b0;
int local_ac;
int local_a4 [8];
int local_84;
int local_80;
int *local_6c;
undefined1 local_68;
int local_64;
int local_60;
int local_5c;
float *local_58;
undefined4 *local_54;
int local_50;
float *local_4c;
int local_48;
int local_44;
int local_40;
int local_3c;
int local_38;
int local_34;
int local_30;
undefined4 local_2c;
int local_28;
ushort *local_24;
bVar17 = 0;
piVar4 = (int *)(**(code **)(*g_pMaterialSystem + 0x180))(g_pMaterialSystem);
if (piVar4 != (int *)0x0) {
/* try { // try from 0028a8ee to 0028a8f0 has its CatchHandler @ 0028ba06 */
(**(code **)(*piVar4 + 8))(piVar4);
}
if ((param_4 < 1) || (param_5 < 1)) {
if ((piVar4 != (int *)0x0) && ((**(code **)(*piVar4 + 0xc))(piVar4), piVar4 != (int *)0x0)) {
(**(code **)(*piVar4 + 4))(piVar4);
return;
}
}
else {
local_20c = 0;
local_208 = 0;
if (_SetSeed == 0) {
local_25c = 0;
}
else {
/* try { // try from 0028a97d to 0028a97f has its CatchHandler @ 0028b987 */
(**(code **)(_SetSeed + 0x50))
(_SetSeed,&local_20c,0,0,0,0,"/data/src/tier2/renderutils.cpp",0x44a,
&DrawScreenSpaceRectangle(IMaterial*,int,int,int,int,float,float,float,float,int,int,void*,int,int,float)
::tm_fmt,&DAT_002c48a3,"DrawScreenSpaceRectangle");
local_25c = _SetSeed;
}
uVar2 = local_208;
uVar1 = local_20c;
/* try { // try from 0028a9b6 to 0028aa74 has its CatchHandler @ 0028b99f */
(**(code **)(*piVar4 + 0x50))(piVar4,0);
(**(code **)(*piVar4 + 0x54))(piVar4);
(**(code **)(*piVar4 + 0x7c))(piVar4);
(**(code **)(*piVar4 + 0x50))(piVar4,1);
(**(code **)(*piVar4 + 0x54))(piVar4);
(**(code **)(*piVar4 + 0x7c))(piVar4);
(**(code **)(*piVar4 + 0x24))(piVar4,param_1,param_12);
if (param_13 < 1) {
param_13 = 1;
}
iVar12 = 1;
if (0 < param_14) {
iVar12 = param_14;
}
(**(code **)(*piVar4 + 0x9c))(piVar4,local_21c,local_218,&local_214,&local_210);
bVar16 = false;
if (((param_2 == 0 && param_3 == 0) && (param_4 == local_214)) && (param_5 == local_210)) {
bVar16 = param_13 == 1 && iVar12 == 1;
}
local_148 = 0;
local_150 = (int *)0x0;
local_134 = (int *)0x0;
local_130 = 0;
local_12c = 0;
local_124 = 0;
local_120 = 0;
local_11c = 0xffffffff;
local_118 = 0;
local_6c = (int *)0x0;
local_28 = -1;
local_24 = (ushort *)0x0;
local_60 = 0;
local_5c = 0;
local_64 = 0;
local_2c = 0;
local_c4 = 0xffffffff;
/* try { // try from 0028ab51 to 0028b645 has its CatchHandler @ 0028b9e6 */
piVar5 = (int *)(**(code **)(*piVar4 + 0xe8))(piVar4,1,0,0,0);
iVar6 = param_13 * iVar12;
local_150 = piVar5;
if (bVar16) {
local_148 = '\x01';
iVar13 = iVar6 * 3;
local_14c = 2;
(**(code **)(*piVar5 + 0x30))(piVar5,2);
local_230 = iVar13;
}
else {
local_148 = '\x01';
local_14c = 7;
iVar13 = iVar6 * 6;
(**(code **)(*piVar5 + 0x30))(piVar5,2);
local_230 = iVar6 * 4;
}
(**(code **)(*local_150 + 0x4c))(local_150,local_230,iVar13,local_204);
local_130 = iVar13;
iVar6 = 0x29;
local_68 = 0;
local_12c = 0;
local_114 = 0;
local_6c = piVar5;
local_134 = (int *)0x0;
if (piVar5 != (int *)0x0) {
local_134 = piVar5 + 1;
}
local_124 = 0;
local_60 = 0;
local_144 = local_160;
local_128 = local_168;
local_138 = local_154;
piVar10 = local_204;
piVar15 = local_110;
for (; iVar6 != 0; iVar6 = iVar6 + -1) {
*piVar15 = *piVar10;
piVar10 = piVar10 + (uint)bVar17 * -2 + 1;
piVar15 = piVar15 + (uint)bVar17 * -2 + 1;
}
local_64 = local_230;
local_c0 = ~-(uint)(local_c0 == 0) & 2;
if (local_28 == -1) {
local_2c = 0;
local_24 = local_168;
local_28 = local_164;
}
local_5c = 0;
local_54 = local_b0;
local_58 = local_bc;
piVar10 = local_a4;
do {
piVar15 = piVar10 + 1;
piVar10[0x16] = *piVar10;
piVar10 = piVar15;
} while (piVar15 != &local_84);
local_50 = local_ac;
if (param_4 == 1) {
fVar24 = 0.0;
}
else {
fVar24 = ((param_8 - param_6) / (float)(param_4 + -1)) * 0.5;
}
fVar19 = 0.0;
if (param_5 != 1) {
fVar19 = ((param_9 - param_7) / (float)(param_5 + -1)) * 0.5;
}
fVar21 = (param_8 + 0.5 + fVar24) * (1.0 / (float)param_10);
fVar29 = (param_9 + 0.5 + fVar19) * (1.0 / (float)param_11);
fVar24 = ((param_6 + 0.5) - fVar24) * (1.0 / (float)param_10);
fVar19 = ((param_7 + 0.5) - fVar19) * (1.0 / (float)param_11);
if (bVar16) {
uVar11 = 0;
do {
fVar20 = (float)(uVar11 * 2 & 2) - 0.5 / (float)local_214;
fVar25 = (float)(uVar11 & 2) - 0.5 / (float)local_210;
fVar18 = fVar24;
if ((uVar11 & 1) != 0) {
fVar18 = (fVar21 + fVar21) - fVar24;
}
fVar32 = fVar19;
if ((uVar11 & 2) != 0) {
fVar32 = (fVar29 + fVar29) - fVar19;
}
local_58[1] = 1.0 - (fVar25 + fVar25);
*local_58 = (fVar20 + fVar20) - 1.0;
local_58[2] = param_15;
*local_54 = 0;
local_54[1] = 0;
local_54[2] = 0x3f800000;
*local_4c = fVar18;
local_4c[1] = fVar32;
puVar7 = (undefined4 *)(local_d8 * local_5c + local_84);
*puVar7 = 0;
puVar7[1] = 0x3f800000;
puVar7[2] = 0;
puVar7 = (undefined4 *)(local_d4 * local_5c + local_80);
*puVar7 = 0x3f800000;
puVar7[1] = 0;
puVar7[2] = 0;
local_5c = local_5c + 1;
if (local_60 < local_5c) {
local_60 = local_5c;
}
uVar11 = uVar11 + 1;
local_54 = (undefined4 *)((int)local_54 + local_104);
local_58 = (float *)((int)local_58 + local_110[0]);
local_50 = local_50 + local_100;
local_4c = (float *)((int)local_4c + local_f8);
local_48 = local_48 + local_f4;
local_44 = local_44 + local_f0;
local_40 = local_40 + local_ec;
local_3c = local_3c + local_e8;
local_38 = local_38 + local_e4;
local_34 = local_34 + local_e0;
local_30 = local_30 + local_dc;
} while (uVar11 != 3);
}
else {
fVar18 = (float)(param_2 + param_4) + -0.5;
fVar25 = ((float)param_2 + -0.5 + (float)param_2 + -0.5) / (float)local_214 - 1.0;
fVar18 = (fVar18 + fVar18) / (float)local_214 - 1.0;
fVar20 = (((float)(param_3 + param_5) + -0.5) * -2.0) / (float)local_210 + 1.0;
fVar32 = (((float)param_3 + -0.5) * -2.0) / (float)local_210 + 1.0;
if ((param_13 < 2) && (iVar12 < 2)) {
uVar11 = 0;
uVar14 = 0;
bVar16 = true;
fVar30 = fVar32;
while( true ) {
fVar26 = fVar18;
if (bVar16) {
fVar26 = fVar25;
}
local_58[1] = fVar30;
*local_58 = fVar26;
local_58[2] = param_15;
*local_54 = 0;
local_54[1] = 0;
local_54[2] = 0x3f800000;
fVar30 = fVar29;
if (uVar14 == 0) {
fVar30 = fVar19;
}
fVar26 = fVar21;
if (bVar16) {
fVar26 = fVar24;
}
*local_4c = fVar26;
local_4c[1] = fVar30;
puVar7 = (undefined4 *)(local_d8 * local_5c + local_84);
*puVar7 = 0;
puVar7[1] = 0x3f800000;
puVar7[2] = 0;
puVar7 = (undefined4 *)(local_d4 * local_5c + local_80);
*puVar7 = 0x3f800000;
puVar7[1] = 0;
puVar7[2] = 0;
local_5c = local_5c + 1;
if (local_60 < local_5c) {
local_60 = local_5c;
}
uVar11 = uVar11 + 1;
local_54 = (undefined4 *)((int)local_54 + local_104);
local_58 = (float *)((int)local_58 + local_110[0]);
local_50 = local_50 + local_100;
local_4c = (float *)((int)local_4c + local_f8);
local_48 = local_48 + local_f4;
local_44 = local_44 + local_f0;
local_40 = local_40 + local_ec;
local_3c = local_3c + local_e8;
local_38 = local_38 + local_e4;
local_34 = local_34 + local_e0;
local_30 = local_30 + local_dc;
if (uVar11 == 4) break;
bVar16 = uVar11 == 3;
uVar14 = uVar11 & 2;
fVar30 = fVar32;
if (uVar14 != 0) {
fVar30 = fVar20;
}
}
}
else {
iVar6 = 0;
fVar30 = (fVar29 - fVar19) / (float)iVar12;
fVar29 = (fVar18 - fVar25) / (float)param_13;
fVar21 = (fVar21 - fVar24) / (float)param_13;
fVar18 = (fVar32 - fVar20) / (float)iVar12;
local_240 = 0.0;
do {
iVar6 = iVar6 + 1;
iVar9 = 0;
fVar26 = (float)iVar6;
fVar20 = 0.0;
fVar33 = fVar29 * local_240 + fVar25;
fVar31 = local_240 * fVar21 + fVar24;
fVar28 = fVar29 * fVar26 + fVar25;
fVar27 = fVar26 * fVar21 + fVar24;
do {
*local_58 = fVar33;
local_58[2] = param_15;
fVar22 = fVar32 - fVar18 * fVar20;
fVar20 = fVar20 * fVar30 + fVar19;
local_58[1] = fVar22;
*local_54 = 0;
local_54[1] = 0;
local_54[2] = 0x3f800000;
*local_4c = fVar31;
local_4c[1] = fVar20;
puVar7 = (undefined4 *)(local_d8 * local_5c + local_84);
*puVar7 = 0;
puVar7[1] = 0x3f800000;
puVar7[2] = 0;
puVar7 = (undefined4 *)(local_d4 * local_5c + local_80);
*puVar7 = 0x3f800000;
puVar7[1] = 0;
puVar7[2] = 0;
iVar8 = local_5c + 1;
if (local_60 < iVar8) {
local_60 = iVar8;
}
local_54 = (undefined4 *)((int)local_54 + local_104);
local_58 = (float *)((int)local_58 + local_110[0]);
local_50 = local_50 + local_100 * 4;
local_4c = (float *)((int)local_4c + local_f8);
local_48 = local_48 + local_f4 * 4;
local_44 = local_44 + local_f0 * 4;
local_40 = local_40 + local_ec * 4;
local_3c = local_3c + local_e8 * 4;
local_38 = local_38 + local_e4 * 4;
local_34 = local_34 + local_e0 * 4;
local_30 = local_30 + local_dc * 4;
*local_58 = fVar28;
local_58[1] = fVar22;
local_58[2] = param_15;
*local_54 = 0;
local_54[1] = 0;
local_54[2] = 0x3f800000;
*local_4c = fVar27;
local_4c[1] = fVar20;
puVar7 = (undefined4 *)(local_d8 * iVar8 + local_84);
*puVar7 = 0;
puVar7[1] = 0x3f800000;
puVar7[2] = 0;
puVar7 = (undefined4 *)(local_d4 * iVar8 + local_80);
*puVar7 = 0x3f800000;
puVar7[1] = 0;
puVar7[2] = 0;
iVar8 = local_5c + 2;
if (local_60 < iVar8) {
local_60 = iVar8;
}
iVar9 = iVar9 + 1;
fVar20 = (float)iVar9;
local_54 = (undefined4 *)((int)local_54 + local_104);
local_58 = (float *)((int)local_58 + local_110[0]);
fVar23 = fVar32 - fVar18 * fVar20;
local_4c = (float *)((int)local_4c + local_f8);
*local_58 = fVar28;
local_58[1] = fVar23;
local_58[2] = param_15;
fVar22 = fVar30 * fVar20 + fVar19;
*local_54 = 0;
local_54[1] = 0;
local_54[2] = 0x3f800000;
*local_4c = fVar27;
local_4c[1] = fVar22;
puVar7 = (undefined4 *)(local_d8 * iVar8 + local_84);
*puVar7 = 0;
puVar7[1] = 0x3f800000;
puVar7[2] = 0;
puVar7 = (undefined4 *)(local_d4 * iVar8 + local_80);
*puVar7 = 0x3f800000;
puVar7[1] = 0;
puVar7[2] = 0;
iVar8 = local_5c + 3;
if (local_60 < iVar8) {
local_60 = iVar8;
}
local_54 = (undefined4 *)((int)local_54 + local_104);
local_58 = (float *)((int)local_58 + local_110[0]);
local_4c = (float *)((int)local_4c + local_f8);
*local_58 = fVar33;
local_58[1] = fVar23;
local_58[2] = param_15;
*local_54 = 0;
local_54[1] = 0;
local_54[2] = 0x3f800000;
*local_4c = fVar31;
local_4c[1] = fVar22;
puVar7 = (undefined4 *)(local_d8 * iVar8 + local_84);
*puVar7 = 0;
puVar7[1] = 0x3f800000;
puVar7[2] = 0;
puVar7 = (undefined4 *)(local_d4 * iVar8 + local_80);
*puVar7 = 0x3f800000;
puVar7[1] = 0;
puVar7[2] = 0;
local_5c = local_5c + 4;
if (local_60 < local_5c) {
local_60 = local_5c;
}
local_54 = (undefined4 *)((int)local_54 + local_104);
local_58 = (float *)((int)local_58 + local_110[0]);
local_4c = (float *)((int)local_4c + local_f8);
} while (iVar9 < iVar12);
local_240 = fVar26;
} while (iVar6 < param_13);
}
}
if (local_148 != '\0') {
switch(local_14c) {
case 4:
iVar12 = local_60 * 2 + -2;
break;
case 5:
iVar12 = local_60 * 2;
break;
case 6:
iVar12 = local_60 * 3 + -6;
break;
case 7:
iVar12 = local_60 * 6;
if (iVar12 < 0) {
iVar12 = iVar12 + 3;
}
iVar12 = iVar12 >> 2;
break;
default:
iVar12 = local_60;
break;
case 9:
iVar12 = 0;
}
if (local_154 != 0) {
if (iVar12 <= iVar13) {
iVar13 = iVar12;
}
if (iVar13 != 0) {
switch(local_14c) {
case 0:
case 9:
break;
default:
/* try { // try from 0028b92a to 0028b92e has its CatchHandler @ 0028b9e6 */
GenerateSequentialIndexBuffer(local_160,iVar13,(int)local_168);
break;
case 4:
GenerateLineStripIndexBuffer(local_160,iVar13,(int)local_168);
break;
case 5:
GenerateLineLoopIndexBuffer(local_160,iVar13,(int)local_168);
break;
case 6:
GeneratePolygonIndexBuffer(local_168,(int)local_160,iVar13);
break;
case 7:
/* try { // try from 0028ba30 to 0028ba85 has its CatchHandler @ 0028b9e6 */
GenerateQuadIndexBuffer(local_160,iVar13,(int)local_168);
}
local_124 = local_124 + local_138 * iVar13;
if (local_12c < local_124) {
local_12c = local_124;
}
}
}
}
(**(code **)(*local_150 + 0x58))(local_150,local_60,local_12c,local_204);
local_134 = (int *)0x0;
local_130 = 0;
local_64 = 0;
local_6c = (int *)0x0;
local_c4 = 0xffffffff;
local_150 = (int *)0x0;
(**(code **)(*piVar5 + 0x34))(piVar5,0xffffffff,0);
(**(code **)(*piVar4 + 0x50))(piVar4,0);
(**(code **)(*piVar4 + 0x58))(piVar4);
(**(code **)(*piVar4 + 0x50))(piVar4,1);
(**(code **)(*piVar4 + 0x58))(piVar4);
if ((local_6c != (int *)0x0) &&
(cVar3 = (**(code **)(*local_6c + 0x10))(local_6c), cVar3 != '\0')) {
(**(code **)(*local_6c + 0x18))(local_6c);
}
if ((local_134 != (int *)0x0) &&
(cVar3 = (**(code **)(*local_134 + 0x10))(local_134), cVar3 != '\0')) {
(**(code **)(*local_134 + 0x18))(local_134);
}
if (local_25c != 0) {
(**(code **)(local_25c + 0x54))(local_25c,uVar1,uVar2,0,0,0);
}
if ((piVar4 != (int *)0x0) && ((**(code **)(*piVar4 + 0xc))(piVar4), piVar4 != (int *)0x0)) {
(**(code **)(*piVar4 + 4))(piVar4);
}
}
return;
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
used as the SourceMod key — change to fit your plugin's convention
SourceMod library name (server / engine / matchmaking)
Just a Signatures{} block, ready to drop into a gamedata
file. Wire it up in your plugin however you like - SDKCall, DHooks,
raw memory ops, or anything else.
Signatures + Functions block. The plugin uses
DHookCreateFromConf - DHooks reads return type, this-type,
calling convention, and argument types straight from the gamedata. Less
boilerplate in the plugin, types travel with the gamedata.
Gamedata KeyValues
DHooks plugin example
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.