Subversion Repositories Kolibri OS

Rev

Rev 6243 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;
  2. ; Z buffer
  3. ;
  4.  
  5. include 'zfeatures.inc'
  6.  
  7. ZB_Z_BITS equ 16
  8.  
  9. ZB_POINT_Z_FRAC_BITS equ 14
  10.  
  11. ZB_POINT_TEXEL_SIZE equ 12 ;точность множителя для вычисления координат текселя
  12.         ;влияет на максимальный размер текстуры
  13.  
  14. ZB_POINT_RED_MIN equ (1 shl 8)
  15. ZB_POINT_RED_MAX equ ( (1 shl 16)-1 )
  16. ZB_POINT_GREEN_MIN equ (1 shl 8)
  17. ZB_POINT_GREEN_MAX equ ( (1 shl 16)-1 )
  18. ZB_POINT_BLUE_MIN equ (1 shl 8)
  19. ZB_POINT_BLUE_MAX equ ( (1 shl 16)-1 )
  20.  
  21. ; display modes
  22. ZB_MODE_5R6G5B equ 1  ; true color 16 bits
  23. ZB_MODE_INDEX  equ 2  ; color index 8 bits
  24. ZB_MODE_RGBA   equ 3  ; 32 bit rgba mode
  25. ZB_MODE_RGB24  equ 4  ; 24 bit rgb mode
  26. ZB_NB_COLORS   equ 225 ; number of colors for 8 bit display
  27.  
  28. if TGL_FEATURE_RENDER_BITS eq 24
  29.  
  30. macro RGB_TO_PIXEL r,g,b
  31. {
  32.         mov eax,b
  33.         shr eax,8
  34.         push eax
  35.                 mov eax,g
  36.                 and eax,0xff00
  37.                 or dword[esp],eax
  38.                 mov eax,r
  39.                 shl eax,8
  40.                 or dword[esp],eax
  41.         pop eax
  42. }
  43.  
  44. ;typedef unsigned char PIXEL;
  45. PSZB equ 3
  46. PSZSH equ 5
  47.  
  48. else if TGL_FEATURE_RENDER_BITS eq 32
  49.  
  50. ;#define RGB_TO_PIXEL(r,g,b) \
  51. ;  ((((r) << 8) & 0xff0000) | ((g) & 0xff00) | ((b) >> 8))
  52. ;typedef unsigned int PIXEL;
  53. ;PSZB equ 4
  54. ;PSZSH equ 5
  55.  
  56. else
  57.  
  58. ;#error Incorrect number of bits per pixel
  59.  
  60. end if
  61.  
  62. struct ZBuffer
  63.         xsize dd ? ;int
  64.         ysize dd ? ;int
  65.         linesize dd ? ;int ;line size, in bytes
  66.                 dd ? ;fix old error offset
  67.         mode dd ? ;int
  68.    
  69.         zbuf dd ? ;*unsigned short
  70.         pbuf dd ? ;*PIXEL
  71.         frame_buffer_allocated dd ? ;int
  72.    
  73.         nb_colors dd ? ;int
  74.         dctable dd ? ;*unsigned char
  75.         ctable dd ? ;*int
  76.         current_texture dd ? ;*PIXEL
  77.         s_log2 dd ? ;unsigned int
  78.         s_bound dd ? ;unsigned int
  79.         t_bound dd ? ;unsigned int
  80. ends
  81.  
  82. struct ZBufferPoint
  83.         x dd ? ;int ;integer coordinates in the zbuffer
  84.         y dd ? ;int
  85.         z dd ? ;int
  86.         s dd ? ;int ;coordinates for the mapping
  87.         t dd ? ;int
  88.         r dd ? ;int ;color indexes
  89.         g dd ? ;int
  90.         b dd ? ;int
  91.  
  92.         fsz dd ? ;float ;temporary coordinates for mapping
  93.         tz dd ? ;float
  94. ends
  95.  
  96. ; ztriangle.c
  97.  
  98. ;
  99. ; Memory allocator for TinyGL
  100. ;
  101.  
  102. ; modify these functions so that they suit your needs
  103.  
  104. align 4
  105. proc gl_free uses eax ebx ecx, mptr:dword
  106.         mov ecx,[mptr]
  107.         or ecx,ecx
  108.         jz @f
  109.                 mcall 68, 13
  110.         @@:
  111.         ret
  112. endp
  113.  
  114. ;description:
  115. ; выделение памяти
  116. align 4
  117. proc gl_malloc uses ebx ecx, size:dword
  118.         mcall 68, 12, [size]
  119.         ret
  120. endp
  121.  
  122. ;description:
  123. ; выделение очищеной памяти
  124. align 4
  125. proc gl_zalloc uses ebx ecx edi, size:dword
  126.         mov ecx,[size]
  127.         stdcall gl_malloc,ecx
  128.         or eax,eax
  129.         jz @f
  130.                 mov ebx,eax
  131.                 mov edi,eax
  132.                 xor eax,eax
  133.                 shr ecx,2
  134.                 rep stosd ;очистка памяти (пишем везде 0)
  135.                 mov eax,ebx
  136.         @@:
  137.         ret
  138. endp
  139.