Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 6100 → Rev 6101

/programs/develop/libraries/TinyGL/asm_fork/light.asm
685,17 → 685,15
stdcall specbuf_get_buffer, edx, dword[ecx+offs_mate_shininess_i], dword[ecx+offs_mate_shininess]
mov edi,eax ;edi = specbuf
mov dword[idx],SPECULAR_BUFFER_SIZE ;idx = SPECULAR_BUFFER_SIZE
fld1
fcomp
fstsw ax
fild dword[idx]
sahf
jbe @f ;if(dot_spec < 1.0) st0=1 st1=dot_spec
fmul st0,st1 ;idx *= dot_spec
 
;idx = (int)(dot_spec*SPECULAR_BUFFER_SIZE)
fimul dword[idx]
fistp dword[idx]
;if (idx > SPECULAR_BUFFER_SIZE) idx = SPECULAR_BUFFER_SIZE
cmp dword[idx],SPECULAR_BUFFER_SIZE
jle @f
mov dword[idx],SPECULAR_BUFFER_SIZE
@@:
fistp dword[idx]
ffree st0 ;dot_spec
fincstp
shl dword[idx],2
add edi,dword[idx]
fld dword[edi+offs_spec_buf] ;dot_spec = specbuf.buf[idx]
/programs/develop/libraries/TinyGL/asm_fork/specbuf.asm
8,21 → 8,23
val dd ? ;float
f_inc dd ? ;float
endl
mov dword[val],0.0f
mov dword[f_inc],SPECULAR_BUFFER_SIZE
fld1
fidiv dword[f_inc]
fstp dword[f_inc] ;f_inc = 1.0f/SPECULAR_BUFFER_SIZE
mov ebx,[buf]
add ebx,offs_spec_buf
mov dword[ebx],0.0 ;buf.buf[0] = 0.0
xor ecx,ecx
inc ecx
fld dword[shininess] ;сначала берем y
fld1
fidiv dword[f_inc]
fst dword[f_inc] ;f_inc = 1.0f/SPECULAR_BUFFER_SIZE
fst dword[val]
align 4
.cycle_0: ;for (i = 0; i <= SPECULAR_BUFFER_SIZE; i++)
.cycle_0: ;for (i = 1; i <= SPECULAR_BUFFER_SIZE; i++)
cmp ecx,SPECULAR_BUFFER_SIZE
jg @f
;Вычисляем x^y
fld dword[val] ;сначала берем y
fld dword[shininess] ;а потом x
 
fyl2x ;Стек FPU теперь содержит: st0=z=y*log2(x):
;Теперь считаем 2**z:
fld st0 ;Создаем еще одну копию z
35,15 → 37,22
fxch st1
fstp st ;Результат остается на вершине стека st0
 
add ebx,4
fstp dword[ebx] ;buf.buf[i] = pow(val, shininess)
add ebx,4
ffree st0 ;испорченный shininess
fincstp
 
fld dword[shininess] ;сначала берем y
fld dword[val]
fadd dword[f_inc]
fstp dword[val] ;val += f_inc
fst dword[val] ;val += f_inc
inc ecx
jmp .cycle_0
@@:
ffree st0 ;val
fincstp
ffree st0 ;shininess
fincstp
ret
endp