LightX  dw 128
LightY  dw 128
x       dd 255
y       dd 255
valeur1 dd 1.0

; Entr‚e : ES=dest. de l'environment map
;          DS=CS !!!
PrepareBump:

  finit
  fld dword [valeur255]
  fld dword [valeur1]
  fld dword [valeur128]
  xor di,di

  .pb_loop_y:
    mov word [x],255
    .pb_loop_x:
      fild dword [x]      ; x          | 128   | 1   | 255
      fsub st0,st1        ; x-128      | 128   | 1   | 255
      fild dword [y]      ; y          | x-128 | 128 | 1   | 255
      fsub st0,st2        ; y-128      | x-128 | 128 | 1   | 255
      fdiv st0,st2        ; nY         | x-128 | 128 | 1   | 255
      fxch
      fdiv st0,st2        ; nX         | nY    | 128 | 1   | 255
      fmul st0,st0        ; nXý        | nY    | 128 | 1   | 255
      fxch
      fmul st0,st0        ; nXý        | nYý   | 128 | 1   | 255
      faddp st1,st0       ; nXý+nYý    | 128   | 1   | 255
      fsqrt               ; û(nXý+nYý) | 128   | 1   | 255
      fsubr st0,st2       ; nZ         | 128   | 1   | 255
      fmul st0,st3        ; nZ*255     | 128   | 1   | 255
      fistp dword [temp1] ; 128        | 1     | 255
      mov ax, [temp1]
      or ah,ah
      jz .pb_val_OK
        mov al,0
      .pb_val_OK:
      ;===========
      shr al,2  ;= Pour le nombre de couleurs
      ;===========
      stosb

      dec word [x]
    jns .pb_loop_x
    dec word [y]
  jns .pb_loop_y
ret


; Entr‚es : ES=Dest
;           FS=Image src
;           GS=Enviro
DoBump:
  xor di,di
;  xor si,si
  mov bh,0
  .db_loop_y:
    mov bl,0
    .db_loop_x:
      cmp [fs:bx],byte 255
      je .db_pas_de_bump
        mov ah,0
        mov ch,ah
        mov dh,ah
        mov al,[fs:bx+1]
        mov dl,[fs:bx-1]
        sub ax,dx
        ;========
         shl ax,1
        ;========
        mov cl,[fs:bx+256]
        mov dh,0
        mov dl,[fs:bx-256]
        sub cx,dx
        ;========
         shl cx,1
        ;========
        add ax,[LightX]
        add cx,[LightY]
        mov dh,0
        mov dl,bl
        sub ax,dx
        mov dl,bh
        sub cx,dx
        add ax,128
        add cx,128
      .db_pas_de_bump:

      or ah,ah
      jz .bp_nx_ok
        xor ax,ax
      .bp_nx_ok:
      or ch,ch
      jz .bp_ny_ok
        xor cx,cx
      .bp_ny_ok:
      cmp [fs:bx],byte 255
      jne .db_ok_pt
        xor cx,cx
      .db_ok_pt:
      mov ah,cl 
      mov si,ax
      mov al,[gs:si]
      stosb

      inc bl
    jnz .db_loop_x
    inc bh
  jnz .db_loop_y
ret





