GPIXEL.C 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
  12. */
  13. /*
  14. * $Source: f:/miner/source/2d/rcs/gpixel.c $
  15. * $Revision: 1.5 $
  16. * $Author: john $
  17. * $Date: 1994/11/18 22:50:20 $
  18. *
  19. * Graphical routines for getting a pixel's value.
  20. *
  21. * $Log: gpixel.c $
  22. * Revision 1.5 1994/11/18 22:50:20 john
  23. * Changed shorts to ints in parameters.
  24. *
  25. * Revision 1.4 1994/05/06 12:50:08 john
  26. * Added supertransparency; neatend things up; took out warnings.
  27. *
  28. * Revision 1.3 1993/10/15 16:22:50 john
  29. * y
  30. *
  31. * Revision 1.2 1993/09/29 16:15:00 john
  32. * optimized
  33. *
  34. * Revision 1.1 1993/09/08 11:43:40 john
  35. * Initial revision
  36. *
  37. *
  38. */
  39. #include "mem.h"
  40. #include "gr.h"
  41. #include "grdef.h"
  42. unsigned char gr_ugpixel( grs_bitmap * bitmap, int x, int y )
  43. {
  44. switch(bitmap->bm_type)
  45. {
  46. case BM_LINEAR:
  47. return bitmap->bm_data[ bitmap->bm_rowsize*y + x ];
  48. case BM_MODEX:
  49. x += bitmap->bm_x;
  50. y += bitmap->bm_y;
  51. gr_modex_setplane( x & 3 );
  52. return gr_video_memory[(bitmap->bm_rowsize * y) + (x/4)];
  53. case BM_SVGA:
  54. {
  55. unsigned int offset;
  56. offset = (unsigned int)bitmap->bm_data + (unsigned int)bitmap->bm_rowsize * y + x;
  57. gr_vesa_setpage( offset >> 16 );
  58. return gr_video_memory[offset & 0xFFFF];
  59. }
  60. }
  61. return 0;
  62. }
  63. unsigned char gr_gpixel( grs_bitmap * bitmap, int x, int y )
  64. {
  65. if ((x<0) || (y<0) || (x>=bitmap->bm_w) || (y>=bitmap->bm_h)) return 0;
  66. switch(bitmap->bm_type)
  67. {
  68. case BM_LINEAR:
  69. return bitmap->bm_data[ bitmap->bm_rowsize*y + x ];
  70. case BM_MODEX:
  71. x += bitmap->bm_x;
  72. y += bitmap->bm_y;
  73. gr_modex_setplane( x & 3 );
  74. return gr_video_memory[(bitmap->bm_rowsize * y) + (x/4)];
  75. case BM_SVGA:
  76. {
  77. unsigned int offset;
  78. offset = (unsigned int)bitmap->bm_data + (unsigned int)bitmap->bm_rowsize * y + x;
  79. gr_vesa_setpage( offset >> 16 );
  80. return gr_video_memory[offset & 0xFFFF];
  81. }
  82. }
  83. return 0;
  84. }
  85.