Subversion Repositories Kolibri OS

Rev

Rev 8069 | 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.         mode dd ? ;int
  67.    
  68.         zbuf dd ? ;*unsigned short
  69.         pbuf dd ? ;*PIXEL
  70.         frame_buffer_allocated dd ? ;int
  71.    
  72.         nb_colors dd ? ;int
  73.         dctable dd ? ;*unsigned char
  74.         ctable dd ? ;*int
  75.         current_texture dd ? ;*PIXEL
  76.         s_log2 dd ? ;unsigned int
  77.         s_bound dd ? ;unsigned int
  78.         t_bound dd ? ;unsigned int
  79. ends
  80.  
  81. struct ZBufferPoint
  82.         x dd ? ;int ;integer coordinates in the zbuffer
  83.         y dd ? ;int
  84.         z dd ? ;int
  85.         s dd ? ;int ;coordinates for the mapping
  86.         t dd ? ;int
  87.         r dd ? ;int ;color indexes
  88.         g dd ? ;int
  89.         b dd ? ;int
  90.  
  91.         fsz dd ? ;float ;temporary coordinates for mapping
  92.         tz dd ? ;float
  93. ends
  94.  
  95. ; ztriangle.c
  96.  
  97. ;
  98. ; Memory allocator for TinyGL
  99. ;
  100.  
  101. ; modify these functions so that they suit your needs
  102.  
  103. align 4
  104. proc gl_free uses eax ebx ecx, mptr:dword
  105.         mov ecx,[mptr]
  106.         or ecx,ecx
  107.         jz @f
  108.                 mcall 68, 13
  109.         @@:
  110.         ret
  111. endp
  112.  
  113. ;description:
  114. ; выделение памяти
  115. align 4
  116. proc gl_malloc uses ebx ecx, size:dword
  117.         mcall 68, 12, [size]
  118.         ret
  119. endp
  120.  
  121. ;description:
  122. ; выделение очищеной памяти
  123. align 4
  124. proc gl_zalloc uses ebx ecx edi, size:dword
  125.         mov ecx,[size]
  126.         stdcall gl_malloc,ecx
  127.         or eax,eax
  128.         jz @f
  129.                 mov ebx,eax
  130.                 mov edi,eax
  131.                 xor eax,eax
  132.                 shr ecx,2
  133.                 rep stosd ;очистка памяти (пишем везде 0)
  134.                 mov eax,ebx
  135.         @@:
  136.         ret
  137. endp
  138.