Mercurial > mm7
comparison Render.cpp @ 2102:0db53678ff48
RasterLine2D, DIALOGUE_EVT_A etc.
author | Ritor1 |
---|---|
date | Tue, 17 Dec 2013 21:34:20 +0600 |
parents | ee2724b9ca05 |
children | 68fbaf45ef66 |
comparison
equal
deleted
inserted
replaced
2101:ee2724b9ca05 | 2102:0db53678ff48 |
---|---|
3559 pBeforePresentFunction = Present_NoColorKey; | 3559 pBeforePresentFunction = Present_NoColorKey; |
3560 goto LABEL_45; | 3560 goto LABEL_45; |
3561 } | 3561 } |
3562 | 3562 |
3563 //----- (004A0BEE) -------------------------------------------------------- | 3563 //----- (004A0BEE) -------------------------------------------------------- |
3564 char Render::RasterLine2D(signed int uX, signed int uY, signed int uZ, signed int uW, unsigned __int16 uColor) | 3564 void Render::RasterLine2D(signed int uX, signed int uY, signed int uZ, signed int uW, unsigned __int16 uColor) |
3565 { | 3565 { |
3566 signed int v8; // ebx@5 | |
3567 signed int v10; // ecx@9 | |
3568 signed int v11; // esi@13 | |
3569 signed int v12; // eax@17 | 3566 signed int v12; // eax@17 |
3570 int v13; // eax@21 | 3567 //signed int v19; // qax@41 |
3571 int v16; // eax@27 | 3568 //int v20; // edi@41 |
3572 signed int v19; // qax@41 | |
3573 int v20; // edi@41 | |
3574 unsigned int v21; // edi@46 | 3569 unsigned int v21; // edi@46 |
3575 int v22; // esi@47 | 3570 int v22; // esi@47 |
3576 int v23; // ebx@47 | 3571 int v23; // ebx@47 |
3577 signed int v24; // edx@50 | 3572 signed int v24; // edx@50 |
3578 signed int v25; // esi@52 | 3573 signed int v25; // esi@52 |
3584 int v31; // edx@61 | 3579 int v31; // edx@61 |
3585 int v32; // edi@61 | 3580 int v32; // edi@61 |
3586 __int64 v36; // [sp+14h] [bp-8h]@1 | 3581 __int64 v36; // [sp+14h] [bp-8h]@1 |
3587 signed int v37; // [sp+18h] [bp-4h]@28 | 3582 signed int v37; // [sp+18h] [bp-4h]@28 |
3588 unsigned int uXa; // [sp+24h] [bp+8h]@49 | 3583 unsigned int uXa; // [sp+24h] [bp+8h]@49 |
3589 unsigned int uYa; // [sp+28h] [bp+Ch]@28 | 3584 //unsigned int uYa; // [sp+28h] [bp+Ch]@28 |
3590 int uYb; // [sp+28h] [bp+Ch]@47 | 3585 int uYb; // [sp+28h] [bp+Ch]@47 |
3591 int uZa; // [sp+2Ch] [bp+10h]@38 | 3586 //int uZa; // [sp+2Ch] [bp+10h]@38 |
3587 bool left_border; | |
3592 | 3588 |
3593 v36 = 0i64; | 3589 v36 = 0i64; |
3594 if ( uX < this->raster_clip_x )// x выходит за рамки левой границы | 3590 if ( uX < this->raster_clip_x )// x выходит за рамки левой границы |
3595 HIDWORD(v36) = 8; | 3591 HIDWORD(v36) = 8; //left_border = true; |
3596 if ( uX > this->raster_clip_z )// x выходит за рамки правой границы | 3592 if ( uX > this->raster_clip_z )// x выходит за рамки правой границы |
3597 HIDWORD(v36) |= 4; | 3593 HIDWORD(v36) |= 4;//right_border = true; |
3598 | 3594 |
3599 if ( uZ < this->raster_clip_x )// z выходит за рамки левой границы | 3595 if ( uZ < this->raster_clip_x )// z выходит за рамки левой границы |
3600 LODWORD(v36) = 8; | 3596 LODWORD(v36) = 8;// |
3601 if ( uZ > this->raster_clip_z )// z выходит за рамки правой границы | 3597 if ( uZ > this->raster_clip_z )// z выходит за рамки правой границы |
3602 LODWORD(v36) |= 4; | 3598 LODWORD(v36) |= 4; |
3603 | 3599 |
3604 if ( uY < this->raster_clip_y )// y выходит за рамки верхней границы | 3600 if ( uY < this->raster_clip_y )// y выходит за рамки верхней границы |
3605 HIDWORD(v36) |= 2; | 3601 HIDWORD(v36) |= 2;//upper_border = true; |
3606 if ( uY > this->raster_clip_w )// y выходит за рамки нижней границы | 3602 if ( uY > this->raster_clip_w )// y выходит за рамки нижней границы |
3607 HIDWORD(v36) |= 1; | 3603 HIDWORD(v36) |= 1;//bottom_border = true; |
3608 | 3604 |
3609 if ( uW < this->raster_clip_y )// w выходит за рамки верхней границы | 3605 if ( uW < this->raster_clip_y )// w выходит за рамки верхней границы |
3610 LODWORD(v36) |= 2; | 3606 LODWORD(v36) |= 2; |
3611 if ( uW > this->raster_clip_w )// w выходит за рамки нижней границы | 3607 if ( uW > this->raster_clip_w )// w выходит за рамки нижней границы |
3612 LODWORD(v36) |= 1; | 3608 LODWORD(v36) |= 1; |
3613 | 3609 |
3614 v8 = uY; | 3610 //LOBYTE(v12) = v36; |
3615 v11 = uW; | |
3616 v10 = uZ; | |
3617 | |
3618 LOBYTE(v12) = v36; | |
3619 if ( (unsigned int)v36 & HIDWORD(v36) ) | 3611 if ( (unsigned int)v36 & HIDWORD(v36) ) |
3620 return v12; | 3612 return; |
3621 if ( !v36 ) | 3613 |
3614 if ( !v36 ) //полностью в рамках | |
3622 { | 3615 { |
3623 LABEL_46: | 3616 LABEL_46: |
3624 v21 = pRenderer->uTargetSurfacePitch; | 3617 v21 = pRenderer->uTargetSurfacePitch; |
3625 if ( pRenderer->uTargetSurfacePitch ) | 3618 if ( pRenderer->uTargetSurfacePitch ) |
3626 { | 3619 { |
3627 v12 = uX + uY * pRenderer->uTargetSurfacePitch; | 3620 v12 = uX + uY * pRenderer->uTargetSurfacePitch; |
3628 v22 = v11 - v8; | 3621 v22 = uW - uY; |
3629 v23 = v22; | 3622 v23 = v22; |
3630 uYb = v22; | 3623 uYb = v22; |
3631 if ( v22 < 0 ) | 3624 if ( v22 < 0 ) |
3632 { | 3625 { |
3633 v23 = -v22; | 3626 v23 = -v22; |
3634 uYb = -v22; | 3627 uYb = -v22; |
3635 v21 = -pRenderer->uTargetSurfacePitch; | 3628 v21 = -pRenderer->uTargetSurfacePitch; |
3636 } | 3629 } |
3637 uXa = v10 - uX; | 3630 uXa = uZ - uX; |
3638 if ( (uXa & 0x80000000u) == 0 ) | 3631 if ( (uXa & 0x80000000u) == 0 ) |
3639 { | 3632 { |
3640 v24 = 1; | 3633 v24 = 1; |
3641 } | 3634 } |
3642 else | 3635 else |
3713 } | 3706 } |
3714 } | 3707 } |
3715 } | 3708 } |
3716 } | 3709 } |
3717 } | 3710 } |
3718 return v12; | 3711 return; |
3719 } | 3712 } |
3720 if ( (BYTE4(v36) ^ (unsigned __int8)v36) & 8 ) | 3713 |
3721 { | 3714 if ( (BYTE4(v36) ^ (unsigned __int8)v36) & 8 )//левая и |
3722 if ( BYTE4(v36) & 8 ) | 3715 { |
3723 { | 3716 if ( BYTE4(v36) & 8 )//left_border = true; |
3724 v13 = ((uW - uY) * (this->raster_clip_x - uX)) / (uZ - uX); | 3717 { |
3725 v8 = v13 + uY; | 3718 uY += ((uW - uY) * (this->raster_clip_x - uX)) / (uZ - uX); |
3726 uX = this->raster_clip_x; | 3719 uX = this->raster_clip_x; |
3727 goto LABEL_24; | 3720 } |
3728 } | 3721 else |
3729 v10 = this->raster_clip_x; | 3722 { |
3730 v11 = ((uY - uW) * (this->raster_clip_x - uZ)) / (uX - uZ) + uW; | 3723 uZ = this->raster_clip_x; |
3731 } | 3724 uW += ((uY - uW) * (this->raster_clip_x - uZ)) / (uX - uZ); |
3732 LABEL_24: | 3725 } |
3726 } | |
3733 if ( (BYTE4(v36) ^ (unsigned __int8)v36) & 4 ) | 3727 if ( (BYTE4(v36) ^ (unsigned __int8)v36) & 4 ) |
3734 { | 3728 { |
3735 //v15 = this->raster_clip_z; | 3729 if ( BYTE4(v36) & 4 ) //right_border = true |
3736 if ( BYTE4(v36) & 4 ) | 3730 { |
3737 { | 3731 uY += ((uW - uY) * (this->raster_clip_z - uX)) / (uZ - uX); |
3738 v8 += ((v11 - v8) * (this->raster_clip_z - uX)) / (v10 - uX); | |
3739 uX = this->raster_clip_z; | 3732 uX = this->raster_clip_z; |
3740 } | 3733 } |
3741 else | 3734 else |
3742 { | 3735 { |
3743 v16 = ((v8 - v11) * (this->raster_clip_z - v10)) / (uX - v10); | 3736 uW += ((uY - uW) * (this->raster_clip_z - uZ)) / (uX - uZ); |
3744 v10 = this->raster_clip_z; | 3737 uY = this->raster_clip_z; |
3745 v11 += v16; | |
3746 } | 3738 } |
3747 } | 3739 } |
3748 v37 = 0; | 3740 v37 = 0; |
3749 uYa = this->raster_clip_y; | 3741 if ( uY < this->raster_clip_y ) |
3750 if ( v8 < this->raster_clip_y ) | |
3751 v37 = 2; | 3742 v37 = 2; |
3752 if ( v8 > this->raster_clip_w ) | 3743 if ( uY > this->raster_clip_w ) |
3753 v37 |= 1; | 3744 v37 |= 1; |
3754 | 3745 |
3755 if ( v11 >= this->raster_clip_y ) | 3746 if ( uW >= this->raster_clip_y ) |
3756 v12 = 0; | 3747 v12 = 0; |
3757 else | 3748 else |
3758 v12 = 2; | 3749 v12 = 2; |
3759 if ( v11 > this->raster_clip_w ) | 3750 if ( uW > this->raster_clip_w ) |
3760 LOBYTE(v12) = v12 | 1; | 3751 v12 |= 1; |
3761 | 3752 |
3762 if ( !(v12 & v37) ) | 3753 if ( !(v12 & v37) ) |
3763 { | 3754 { |
3764 v12 ^= v37; | 3755 v12 ^= v37; |
3765 uZa = v12; | |
3766 if ( v12 & 2 ) | 3756 if ( v12 & 2 ) |
3767 { | 3757 { |
3768 if ( v37 & 2 ) | 3758 if ( v37 & 2 ) |
3769 { | 3759 { |
3770 uX += ((v10 - uX) * (uYa - v8)) / (v11 - v8); | 3760 uX += ((uZ - uX) * (this->raster_clip_y - uY)) / (uW - uY); |
3771 LOBYTE(v12) = (char)this; | 3761 uY = this->raster_clip_y; |
3772 v8 = this->raster_clip_y; | |
3773 } | 3762 } |
3774 else | 3763 else |
3775 { | 3764 { |
3776 v19 = (uX - v10) * (uYa - v11); | 3765 uZ += (uX - uZ) * (this->raster_clip_y - uW) / (uY - uW); |
3777 v20 = v8 - v11; | 3766 uW = this->raster_clip_y; |
3778 v11 = uYa; | 3767 } |
3779 v12 = v19 / v20; | 3768 } |
3780 v10 += v12; | 3769 if ( v12 & 1 ) |
3781 } | |
3782 } | |
3783 if ( uZa & 1 ) | |
3784 { | 3770 { |
3785 if ( v37 & 1 ) | 3771 if ( v37 & 1 ) |
3786 { | 3772 { |
3787 uX += ((v10 - uX) * (this->raster_clip_w - v8)) / (v11 - v8); | 3773 uX += ((uZ - uX) * (this->raster_clip_w - uY)) / (uW - uY); |
3788 LOBYTE(v12) = (char)this; | 3774 uY = this->raster_clip_w; |
3789 v8 = this->raster_clip_w; | |
3790 } | 3775 } |
3791 else | 3776 else |
3792 { | 3777 { |
3793 v12 = ((uX - v10) * (this->raster_clip_w - v11)) / (v8 - v11); | 3778 uZ += ((uX - uZ) * (this->raster_clip_w - uW)) / (uY - uW); |
3794 v11 = this->raster_clip_w; | 3779 uW = this->raster_clip_w; |
3795 v10 += v12; | |
3796 } | 3780 } |
3797 } | 3781 } |
3798 goto LABEL_46; | 3782 goto LABEL_46; |
3799 } | 3783 } |
3800 return v12; | 3784 return; |
3801 } | 3785 } |
3802 | 3786 |
3803 //----- (004A0E80) -------------------------------------------------------- | 3787 //----- (004A0E80) -------------------------------------------------------- |
3804 void Render::ClearZBuffer(int a2, int a3) | 3788 void Render::ClearZBuffer(int a2, int a3) |
3805 { | 3789 { |