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 {