GPIXEL.C 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. unsigned char gr_ugpixel( grs_bitmap * bitmap, int x, int y )
  22. {
  23. switch(bitmap->bm_type)
  24. {
  25. case BM_LINEAR:
  26. return bitmap->bm_data[ bitmap->bm_rowsize*y + x ];
  27. case BM_MODEX:
  28. x += bitmap->bm_x;
  29. y += bitmap->bm_y;
  30. gr_modex_setplane( x & 3 );
  31. return gr_video_memory[(bitmap->bm_rowsize * y) + (x/4)];
  32. case BM_SVGA:
  33. {
  34. unsigned int offset;
  35. offset = (unsigned int)bitmap->bm_data + (unsigned int)bitmap->bm_rowsize * y + x;
  36. gr_vesa_setpage( offset >> 16 );
  37. return gr_video_memory[offset & 0xFFFF];
  38. }
  39. #if defined(POLY_ACC)
  40. case BM_LINEAR15:
  41. {
  42. unsigned short p;
  43. while(!pa_idle());
  44. p = *(unsigned short *)(bitmap->bm_data + y * bitmap->bm_rowsize + x * PA_BPP);
  45. return gr_find_closest_color(((p >> 9) & 0x3e), ((p >> 4) & 0x3e), ((p << 1) & 0x3e));
  46. }
  47. default:
  48. Int3();
  49. #endif
  50. }
  51. return 0;
  52. }
  53. unsigned char gr_gpixel( grs_bitmap * bitmap, int x, int y )
  54. {
  55. if ((x<0) || (y<0) || (x>=bitmap->bm_w) || (y>=bitmap->bm_h)) return 0;
  56. switch(bitmap->bm_type)
  57. {
  58. case BM_LINEAR:
  59. return bitmap->bm_data[ bitmap->bm_rowsize*y + x ];
  60. case BM_MODEX:
  61. x += bitmap->bm_x;
  62. y += bitmap->bm_y;
  63. gr_modex_setplane( x & 3 );
  64. return gr_video_memory[(bitmap->bm_rowsize * y) + (x/4)];
  65. case BM_SVGA:
  66. {
  67. unsigned int offset;
  68. offset = (unsigned int)bitmap->bm_data + (unsigned int)bitmap->bm_rowsize * y + x;
  69. gr_vesa_setpage( offset >> 16 );
  70. return gr_video_memory[offset & 0xFFFF];
  71. }
  72. #if defined(POLY_ACC)
  73. case BM_LINEAR15:
  74. {
  75. unsigned short p;
  76. while(!pa_idle());
  77. p = *(unsigned short *)(bitmap->bm_data + y * bitmap->bm_rowsize + x * PA_BPP);
  78. return gr_find_closest_color(((p >> 9) & 0x3e), ((p >> 4) & 0x3e), ((p << 1) & 0x3e));
  79. }
  80. default:
  81. Int3();
  82. #endif
  83. }
  84. return 0;
  85. }