forked from KolibriOS/kolibrios
fix calculate light position (in function Matrix_Inv)
git-svn-id: svn://kolibrios.org@6017 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
dd4f527c54
commit
ba6e638119
@ -8,15 +8,6 @@ CLIP_YMAX equ (1<<3)
|
|||||||
CLIP_ZMIN equ (1<<4)
|
CLIP_ZMIN equ (1<<4)
|
||||||
CLIP_ZMAX equ (1<<5)
|
CLIP_ZMAX equ (1<<5)
|
||||||
|
|
||||||
offs_X equ 0
|
|
||||||
offs_Y equ 4
|
|
||||||
offs_Z equ 8
|
|
||||||
offs_W equ 12
|
|
||||||
|
|
||||||
if DEBUG
|
|
||||||
f_ttv db ' gl_transform_to_viewport',0
|
|
||||||
end if
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc gl_transform_to_viewport uses eax ebx ecx, context:dword,v:dword
|
proc gl_transform_to_viewport uses eax ebx ecx, context:dword,v:dword
|
||||||
locals
|
locals
|
||||||
@ -87,31 +78,6 @@ endl
|
|||||||
fistp dword[ebx+offs_vert_zp+offs_zbup_t]
|
fistp dword[ebx+offs_vert_zp+offs_zbup_t]
|
||||||
add dword[ebx+offs_vert_zp+offs_zbup_s],ZB_POINT_T_MIN
|
add dword[ebx+offs_vert_zp+offs_zbup_s],ZB_POINT_T_MIN
|
||||||
@@:
|
@@:
|
||||||
if DEBUG ;gl_transform_to_viewport
|
|
||||||
pushad
|
|
||||||
mov ecx,80
|
|
||||||
mov eax,[ebx+offs_vert_zp]
|
|
||||||
lea edi,[buf_param]
|
|
||||||
stdcall convert_int_to_str,ecx
|
|
||||||
stdcall str_n_cat,edi,txt_zp_sp,2
|
|
||||||
stdcall str_len,edi
|
|
||||||
add edi,eax
|
|
||||||
sub ecx,eax
|
|
||||||
|
|
||||||
mov eax,[ebx+offs_vert_zp+offs_zbup_y]
|
|
||||||
stdcall convert_int_to_str,ecx
|
|
||||||
stdcall str_n_cat,edi,txt_zp_sp,2
|
|
||||||
stdcall str_len,edi
|
|
||||||
add edi,eax
|
|
||||||
sub ecx,eax
|
|
||||||
|
|
||||||
mov eax,[ebx+offs_vert_zp+offs_zbup_z]
|
|
||||||
stdcall convert_int_to_str,ecx
|
|
||||||
|
|
||||||
stdcall str_n_cat,edi,txt_nl,2
|
|
||||||
stdcall dbg_print,f_ttv,buf_param
|
|
||||||
popad
|
|
||||||
end if
|
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
|
@ -2,6 +2,10 @@ include 'opengl_const.inc'
|
|||||||
include 'zbuffer.inc'
|
include 'zbuffer.inc'
|
||||||
include 'zmath.inc'
|
include 'zmath.inc'
|
||||||
|
|
||||||
|
offs_X equ 0
|
||||||
|
offs_Y equ 4
|
||||||
|
offs_Z equ 8
|
||||||
|
offs_W equ 12
|
||||||
|
|
||||||
;enum { OP_ ## a , ... }
|
;enum { OP_ ## a , ... }
|
||||||
sum1 equ 0
|
sum1 equ 0
|
||||||
|
@ -207,7 +207,7 @@ proc gl_M4_MulV4 uses ebx ecx edx, a:dword, b:dword, c:dword ;V4 *a, M4 *b, V4 *
|
|||||||
fmul st0,st3 ;st0 *= c.Z
|
fmul st0,st3 ;st0 *= c.Z
|
||||||
faddp
|
faddp
|
||||||
fld dword[ebx+12] ;st0 += m[_][3]
|
fld dword[ebx+12] ;st0 += m[_][3]
|
||||||
fmul st0,st2 ;st0 *= c.Z
|
fmul st0,st2 ;st0 *= c.W
|
||||||
faddp
|
faddp
|
||||||
fstp dword[edx] ;a.X = b.m[_][0]*c.X +b.m[_][1]*c.Y +b.m[_][2]*c.Z +b.m[_][3]*c.W
|
fstp dword[edx] ;a.X = b.m[_][0]*c.X +b.m[_][1]*c.Y +b.m[_][2]*c.Z +b.m[_][3]*c.W
|
||||||
add ebx,16 ;ñëåäóùàÿ ñòðîêà ìàòðèöû
|
add ebx,16 ;ñëåäóùàÿ ñòðîêà ìàòðèöû
|
||||||
@ -343,14 +343,18 @@ endl
|
|||||||
shl eax,2
|
shl eax,2
|
||||||
add eax,[m]
|
add eax,[m]
|
||||||
fld dword[eax]
|
fld dword[eax]
|
||||||
fcom dword[max] ;if (fabs(m[i*n+j])>fabs(max))
|
fld st0
|
||||||
|
fabs
|
||||||
|
fld dword[max]
|
||||||
|
fabs
|
||||||
|
fcompp ;if (fabs(m[i*n+j])>fabs(max))
|
||||||
fstsw ax
|
fstsw ax
|
||||||
sahf
|
sahf
|
||||||
jbe @f
|
jae @f
|
||||||
mov edx,edi ;k=i
|
mov edx,edi ;k=i
|
||||||
fst dword[max]
|
fst dword[max]
|
||||||
@@:
|
@@:
|
||||||
ffree st0
|
ffree st0 ;m[i*n+j]
|
||||||
fincstp
|
fincstp
|
||||||
inc edi
|
inc edi
|
||||||
jmp .cycle_1
|
jmp .cycle_1
|
||||||
@ -600,10 +604,10 @@ proc gl_V3_Norm uses ebx, a:dword
|
|||||||
mov ebx,[a]
|
mov ebx,[a]
|
||||||
fld dword[ebx]
|
fld dword[ebx]
|
||||||
fmul st0,st0
|
fmul st0,st0
|
||||||
fld dword[ebx+4]
|
fld dword[ebx+offs_Y]
|
||||||
fmul st0,st0
|
fmul st0,st0
|
||||||
faddp
|
faddp
|
||||||
fld dword[ebx+8]
|
fld dword[ebx+offs_Z]
|
||||||
fmul st0,st0
|
fmul st0,st0
|
||||||
faddp
|
faddp
|
||||||
fsqrt ;st0 = sqrt(a.X^2 +a.Y^2 +a.Z^2)
|
fsqrt ;st0 = sqrt(a.X^2 +a.Y^2 +a.Z^2)
|
||||||
@ -614,12 +618,12 @@ proc gl_V3_Norm uses ebx, a:dword
|
|||||||
fld dword[ebx] ;offs_X = 0
|
fld dword[ebx] ;offs_X = 0
|
||||||
fdiv st0,st1
|
fdiv st0,st1
|
||||||
fstp dword[ebx] ;a.X/=sqrt(...)
|
fstp dword[ebx] ;a.X/=sqrt(...)
|
||||||
fld dword[ebx+4]
|
fld dword[ebx+offs_Y]
|
||||||
fdiv st0,st1
|
fdiv st0,st1
|
||||||
fstp dword[ebx+4] ;a.Y/=sqrt(...)
|
fstp dword[ebx+offs_Y] ;a.Y/=sqrt(...)
|
||||||
fld dword[ebx+8]
|
fld dword[ebx+offs_Z]
|
||||||
fdiv st0,st1
|
fdiv st0,st1
|
||||||
fstp dword[ebx+8] ;a.Z/=sqrt(...)
|
fstp dword[ebx+offs_Z] ;a.Z/=sqrt(...)
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
jmp @f
|
jmp @f
|
||||||
.r1:
|
.r1:
|
||||||
|
Loading…
Reference in New Issue
Block a user