fixes in Light functions

git-svn-id: svn://kolibrios.org@5262 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
IgorA 2014-12-23 22:07:07 +00:00
parent 5dd0204401
commit 49aa2adc78
3 changed files with 55 additions and 28 deletions

View File

@ -347,25 +347,30 @@ endp
align 4 align 4
fl_1e_3 dd 1.0e-3 fl_1e_3 dd 1.0e-3
if DEBUG
txt_mate db 'Material',0
txt_colo db 'Color',0
end if
; non optimized lightening model ; non optimized lightening model
align 4 align 4
proc gl_shade_vertex, context:dword, v:dword proc gl_shade_vertex, context:dword, v:dword
locals locals
R dd ? ;float R dd ? ;float ebp-100
G dd ? ;float G dd ? ;float ebp-96
B dd ? ;float B dd ? ;float ebp-92
A dd ? ;float A dd ? ;float ebp-88
s V3 s V3 ;ebp-84
d V3 d V3 ;ebp-72
dist dd ? ;float dist dd ? ;float ebp-60
tmp dd ? ;float tmp dd ? ;float ebp-56
att dd ? ;float att dd ? ;float ebp-52
dot_spot dd ? ;float dot_spot dd ? ;float ebp-48
lR dd ? ;float lR dd ? ;float ebp-44
lB dd ? ;float lB dd ? ;float ebp-40
lG dd ? ;float lG dd ? ;float ebp-36
twoside dd ? ;int twoside dd ? ;int ebp-32
idx dd ? ;int idx dd ? ;int ebp-28
n V3 ;ebp-24 n V3 ;ebp-24
vcoord V3 ;ebp-12 vcoord V3 ;ebp-12
endl endl
@ -387,6 +392,20 @@ pushad
movsd ;n.Z=v.normal.Z movsd ;n.Z=v.normal.Z
mov esi,[v] mov esi,[v]
if DEBUG ;offs_mate_emission, offs_mate_ambient, offs_mate_specular, offs_mate_diffuse
push ecx
stdcall dbg_print,txt_mate,txt_nl
add ecx,offs_mate_emission
stdcall gl_print_matrix,ecx,1
add ecx,offs_mate_ambient-offs_mate_emission
stdcall gl_print_matrix,ecx,1
add ecx,offs_mate_specular-offs_mate_ambient
stdcall gl_print_matrix,ecx,1
add ecx,offs_mate_diffuse-offs_mate_specular
stdcall gl_print_matrix,ecx,1
pop ecx
end if
fld dword[edx+offs_cont_ambient_light_model] fld dword[edx+offs_cont_ambient_light_model]
fmul dword[ecx+offs_mate_ambient] fmul dword[ecx+offs_mate_ambient]
fadd dword[ecx] ;offs_mate_emission=0 fadd dword[ecx] ;offs_mate_emission=0
@ -409,7 +428,7 @@ pushad
; ambient ; ambient
fld dword[ecx+offs_mate_ambient] fld dword[ecx+offs_mate_ambient]
fmul dword[ebx+offs_ligh_ambient] fmul dword[ebx] ;offs_ligh_ambient=0
fstp dword[lR] ;lR=l.ambient.v[0] * m.ambient.v[0] fstp dword[lR] ;lR=l.ambient.v[0] * m.ambient.v[0]
fld dword[ecx+offs_mate_ambient+4] fld dword[ecx+offs_mate_ambient+4]
fmul dword[ebx+offs_ligh_ambient+4] fmul dword[ebx+offs_ligh_ambient+4]
@ -658,7 +677,7 @@ pushad
; testing specular buffer code ; testing specular buffer code
; dot_spec= pow(dot_spec,m.shininess) ; dot_spec= pow(dot_spec,m.shininess)
stdcall specbuf_get_buffer, edx, dword[ecx+offs_mate_shininess_i], dword[ecx+offs_mate_shininess] stdcall specbuf_get_buffer, edx, dword[ecx+offs_mate_shininess_i], dword[ecx+offs_mate_shininess]
;eax = specbuf mov edi,eax ;edi = specbuf
mov dword[idx],SPECULAR_BUFFER_SIZE mov dword[idx],SPECULAR_BUFFER_SIZE
fild dword[idx] fild dword[idx]
fld1 fld1
@ -673,21 +692,21 @@ pushad
ffree st0 ;dot_spec ffree st0 ;dot_spec
fincstp fincstp
shl dword[idx],2 shl dword[idx],2
add eax,dword[idx] add edi,dword[idx]
fld dword[eax+offs_spec_buf] ;dot_spec = specbuf.buf[idx] fld dword[edi+offs_spec_buf] ;dot_spec = specbuf.buf[idx]
fld dword[ebx+offs_ligh_specular] fld dword[ebx+offs_ligh_specular]
fmul st0,st1 fmul st0,st1
fmul dword[ecx+offs_mate_specular] fmul dword[ecx+offs_mate_specular]
fadd dword[lR] fadd dword[lR]
fstp dword[lR] ;lR+=dot_spec * l.specular.v[0] * m.specular.v[0] fstp dword[lR] ;lR+=dot_spec * l.specular.v[0] * m.specular.v[0]
fld dword[ebx+offs_ligh_specular+offs_Y] fld dword[ebx+offs_ligh_specular+4]
fmul st0,st1 fmul st0,st1
fmul dword[ecx+offs_mate_specular+offs_Y] fmul dword[ecx+offs_mate_specular+4]
fadd dword[lG] fadd dword[lG]
fstp dword[lG] ;lG+=dot_spec * l.specular.v[1] * m.specular.v[1] fstp dword[lG] ;lG+=dot_spec * l.specular.v[1] * m.specular.v[1]
fld dword[ebx+offs_ligh_specular+offs_Z] fld dword[ebx+offs_ligh_specular+8]
fmul st0,st1 fmul st0,st1
fmul dword[ecx+offs_mate_specular+offs_Z] fmul dword[ecx+offs_mate_specular+8]
fadd dword[lB] fadd dword[lB]
fstp dword[lB] ;lB+=dot_spec * l.specular.v[2] * m.specular.v[2] fstp dword[lB] ;lB+=dot_spec * l.specular.v[2] * m.specular.v[2]
ffree st0 ;dot_spec ffree st0 ;dot_spec
@ -725,6 +744,13 @@ pushad
mov [esi+offs_vert_color+8],eax ;v.color.v[2]=clampf(B,0,1) mov [esi+offs_vert_color+8],eax ;v.color.v[2]=clampf(B,0,1)
mov eax,[A] mov eax,[A]
mov [esi+offs_vert_color+12],eax ;v.color.v[3]=A mov [esi+offs_vert_color+12],eax ;v.color.v[3]=A
if DEBUG ;offs_vert_color
push esi
stdcall dbg_print,txt_colo,txt_nl
add esi,offs_vert_color
stdcall gl_print_matrix,esi,1
pop esi
end if
popad popad
ret ret
endp endp

View File

@ -10,6 +10,8 @@ endl
fld1 fld1
fidiv dword[f_inc] fidiv dword[f_inc]
fstp dword[f_inc] ;f_inc = 1.0f/SPECULAR_BUFFER_SIZE fstp dword[f_inc] ;f_inc = 1.0f/SPECULAR_BUFFER_SIZE
mov ebx,[buf]
add ebx,offs_spec_buf
xor ecx,ecx xor ecx,ecx
align 4 align 4
.cycle_0: ;for (i = 0; i <= SPECULAR_BUFFER_SIZE; i++) .cycle_0: ;for (i = 0; i <= SPECULAR_BUFFER_SIZE; i++)
@ -30,11 +32,8 @@ align 4
fxch st1 fxch st1
fstp st ;Результат остается на вершине стека st0 fstp st ;Результат остается на вершине стека st0
mov ebx,ecx
shl ebx,2
add ebx,offs_spec_buf
add ebx,[buf]
fstp dword[ebx] ;buf.buf[i] = pow(val, shininess) fstp dword[ebx] ;buf.buf[i] = pow(val, shininess)
add ebx,4
fld dword[val] fld dword[val]
fadd dword[f_inc] fadd dword[f_inc]

View File

@ -59,7 +59,9 @@ endl
sub edi,16 ;edi = &q[3] sub edi,16 ;edi = &q[3]
mov ecx,4 mov ecx,4
rep movsd rep movsd
stdcall glopMaterial, eax,[q] ;mov edi,ebp
sub edi,28 ;edi = &q
stdcall glopMaterial, eax,edi
@@: @@:
ret ret
endp endp