Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. macro .comment
  2. {
  3. init_envmap:         ; create 512x512 env map
  4. .temp equ word [ebp-2]
  5.          push     ebp
  6.          mov      ebp,esp
  7.          sub      esp,2
  8.          mov      edi,envmap
  9.          fninit
  10.  
  11.          mov      dx,-256
  12.     .ie_ver:
  13.          mov      cx,-256
  14.     .ie_hor:
  15.          mov      .temp,cx
  16.          fild     .temp
  17.          fmul     st,st0
  18.          mov      .temp,dx
  19.          fild     .temp
  20.          fmul     st,st0
  21.          faddp
  22.          fsqrt
  23.          mov      .temp,254
  24.          fisubr   .temp
  25.          fmul     [env_const]
  26.          fistp    .temp
  27.          mov      ax,.temp
  28.  
  29.          or      ax,ax
  30.          jge     .ie_ok1
  31.          xor     ax,ax
  32.          jmp     .ie_ok2
  33.   .ie_ok1:
  34.          cmp     ax,254
  35.          jle     .ie_ok2
  36.          mov     ax,254
  37.   .ie_ok2:
  38.          push    dx
  39.          mov     bx,ax
  40.          mul     [max_color_b]
  41.          shr     ax,8
  42.          stosb
  43.          mov     ax,bx
  44.          mul     [max_color_g]
  45.          shr     ax,8
  46.          stosb
  47.          mov     ax,bx
  48.          mul     [max_color_r]
  49.          shr     ax,8
  50.          stosb
  51.          pop     dx
  52.  
  53.          inc     cx
  54.          cmp     cx,256
  55.          jne     .ie_hor
  56.  
  57.          inc     dx
  58.          cmp     dx,256
  59.          jne     .ie_ver
  60.  
  61.          mov     esp,ebp
  62.          pop     ebp
  63. ret
  64. }
  65. calc_bumpmap:            ; calculate random bumpmap
  66. ;--------------in edi _ pointer to TEX_X x TEX_Y bumpmap
  67.          push    edi
  68.          mov     ecx,TEXTURE_SIZE
  69.       @@:
  70.          push    ecx
  71.          xor     ecx,ecx
  72.          mov     edx,255
  73.          call    random
  74.          stosb
  75.          pop    ecx
  76.          loop   @b
  77.  
  78.          pop    edi
  79.          mov    ecx,4
  80.       .blur:
  81.          xor    esi,esi
  82.          mov    edx,TEXTURE_SIZE
  83.          xor    eax,eax
  84.          xor    ebx,ebx
  85.       @@:
  86.          mov    ebp,esi
  87.          dec    ebp
  88.          and    ebp,TEXTURE_SIZE
  89.          mov    al,byte[ebp+edi]
  90.  
  91.          mov    ebp,esi
  92.          inc    ebp
  93.          and    ebp,TEXTURE_SIZE
  94.          mov    bl,byte[ebp+edi]
  95.          add    eax,ebx
  96.  
  97.          mov    ebp,esi
  98.          sub    ebp,TEX_X
  99.          and    ebp,TEXTURE_SIZE
  100.          mov    bl,byte[ebp+edi]
  101.          add    eax,ebx
  102.  
  103.          mov    ebp,esi
  104.          add    ebp,TEX_X
  105.          and    ebp,TEXTURE_SIZE
  106.          mov    bl,byte[ebp+edi]
  107.          add    eax,ebx
  108.  
  109.          shr    eax,2
  110.          mov    byte[esi+edi],al
  111.  
  112.          inc    esi
  113.          dec    edx
  114.          jnz    @b
  115.  
  116.          loop   .blur
  117. ret
  118. random:
  119. ;  in  - ecx - min
  120. ;        edx - max
  121. ;  out - eax - random number
  122.          mov    bx,[rand_seed]
  123.          add    bx,0x9248
  124.          ror    bx,3
  125.          mov    [rand_seed],bx
  126.  
  127.          mov    ax,dx
  128.          sub    ax,cx
  129.          mul    bx
  130.          mov    ax,dx
  131.          add    ax,cx
  132.          cwde
  133. ret
  134. rand_seed       dw      ?
  135.