PIXEL.C 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. /*
  2. THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
  3. SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
  4. END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
  5. ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
  6. IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
  7. SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
  8. FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
  9. CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
  10. AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
  11. COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
  12. */
  13. #include "pa_enabl.h" //$$POLY_ACC
  14. #include "mem.h"
  15. #include "gr.h"
  16. #include "grdef.h"
  17. #if defined(POLY_ACC)
  18. #include "poly_acc.h"
  19. #include "error.h"
  20. #endif
  21. void gr_upixel( int x, int y )
  22. {
  23. switch (TYPE)
  24. {
  25. case BM_LINEAR:
  26. DATA[ ROWSIZE*y+x ] = COLOR;
  27. return;
  28. case BM_MODEX:
  29. gr_modex_setplane( (x+XOFFSET) & 3 );
  30. gr_video_memory[(ROWSIZE * (y+YOFFSET)) + ((x+XOFFSET)>>2)] = COLOR;
  31. return;
  32. case BM_SVGA:
  33. gr_vesa_pixel( COLOR, (unsigned int)DATA + (unsigned int)ROWSIZE * y + x);
  34. return;
  35. #if defined(POLY_ACC)
  36. case BM_LINEAR15:
  37. {
  38. unsigned short *p = (unsigned short *)(DATA + y * ROWSIZE + x * PA_BPP);
  39. while(!pa_idle());
  40. *p = pa_clut[COLOR];
  41. return;
  42. }
  43. default:
  44. Int3();
  45. #endif
  46. }
  47. }
  48. void gr_pixel( int x, int y )
  49. {
  50. if ((x<0) || (y<0) || (x>=WIDTH) || (y>=HEIGHT)) return;
  51. switch (TYPE)
  52. {
  53. case BM_LINEAR:
  54. DATA[ ROWSIZE*y+x ] = COLOR;
  55. return;
  56. case BM_MODEX:
  57. gr_modex_setplane( (x+XOFFSET) & 3 );
  58. gr_video_memory[(ROWSIZE * (y+YOFFSET)) + ((x+XOFFSET)>>2)] = COLOR;
  59. return;
  60. case BM_SVGA:
  61. gr_vesa_pixel( COLOR, (unsigned int)DATA + (unsigned int)ROWSIZE * y + x);
  62. return;
  63. #if defined(POLY_ACC)
  64. case BM_LINEAR15:
  65. {
  66. unsigned short *p = (unsigned short *)(DATA + y * ROWSIZE + x * PA_BPP);
  67. while(!pa_idle());
  68. *p = pa_clut[COLOR];
  69. return;
  70. }
  71. default:
  72. Int3();
  73. #endif
  74. }
  75. }
  76. void gr_bm_upixel( grs_bitmap * bm, int x, int y, unsigned char color )
  77. {
  78. switch (bm->bm_type)
  79. {
  80. case BM_LINEAR:
  81. bm->bm_data[ bm->bm_rowsize*y+x ] = color;
  82. return;
  83. case BM_MODEX:
  84. x += bm->bm_x;
  85. y += bm->bm_y;
  86. gr_modex_setplane( x & 3 );
  87. gr_video_memory[(bm->bm_rowsize * y) + (x/4)] = color;
  88. return;
  89. case BM_SVGA:
  90. gr_vesa_pixel(color,(unsigned int)bm->bm_data + (unsigned int)bm->bm_rowsize * y + x);
  91. return;
  92. #if defined(POLY_ACC)
  93. case BM_LINEAR15:
  94. {
  95. unsigned short *p = (unsigned short *)(bm->bm_data + y * bm->bm_rowsize + x * PA_BPP);
  96. while(!pa_idle());
  97. *p = pa_clut[color];
  98. return;
  99. }
  100. default:
  101. Int3();
  102. #endif
  103. }
  104. }
  105. void gr_bm_pixel( grs_bitmap * bm, int x, int y, unsigned char color )
  106. {
  107. if ((x<0) || (y<0) || (x>=bm->bm_w) || (y>=bm->bm_h)) return;
  108. switch (bm->bm_type)
  109. {
  110. case BM_LINEAR:
  111. bm->bm_data[ bm->bm_rowsize*y+x ] = color;
  112. return;
  113. case BM_MODEX:
  114. x += bm->bm_x;
  115. y += bm->bm_y;
  116. gr_modex_setplane( x & 3 );
  117. gr_video_memory[(bm->bm_rowsize * y) + (x/4)] = color;
  118. return;
  119. case BM_SVGA:
  120. gr_vesa_pixel(color,(unsigned int)bm->bm_data + (unsigned int)bm->bm_rowsize * y + x);
  121. return;
  122. #if defined(POLY_ACC)
  123. case BM_LINEAR15:
  124. {
  125. unsigned short *p = (unsigned short *)(bm->bm_data + y * bm->bm_rowsize + x * PA_BPP);
  126. while(!pa_idle());
  127. *p = pa_clut[color];
  128. return;
  129. }
  130. default:
  131. Int3();
  132. #endif
  133. }
  134. }