glut_bitmap.c
上传用户:xk288cn
上传日期:2007-05-28
资源大小:4876k
文件大小:2k
源码类别:

GIS编程

开发平台:

Visual C++

  1. /* Copyright (c) Mark J. Kilgard, 1994. */
  2. /* This program is freely distributable without licensing fees
  3.    and is provided without guarantee or warrantee expressed or
  4.    implied. This program is -not- in the public domain. */
  5. #include "glutint.h"
  6. #include "glutbitmap.h"
  7. void APIENTRY 
  8. glutBitmapCharacter(GLUTbitmapFont font, int c)
  9. {
  10.   const BitmapCharRec *ch;
  11.   BitmapFontPtr fontinfo;
  12.   GLint swapbytes, lsbfirst, rowlength;
  13.   GLint skiprows, skippixels, alignment;
  14. #if defined(_WIN32)
  15.   fontinfo = (BitmapFontPtr) __glutFont(font);
  16. #else
  17.   fontinfo = (BitmapFontPtr) font;
  18. #endif
  19.   if (c < fontinfo->first ||
  20.     c >= fontinfo->first + fontinfo->num_chars)
  21.     return;
  22.   ch = fontinfo->ch[c - fontinfo->first];
  23.   if (ch) {
  24.     /* Save current modes. */
  25.     glGetIntegerv(GL_UNPACK_SWAP_BYTES, &swapbytes);
  26.     glGetIntegerv(GL_UNPACK_LSB_FIRST, &lsbfirst);
  27.     glGetIntegerv(GL_UNPACK_ROW_LENGTH, &rowlength);
  28.     glGetIntegerv(GL_UNPACK_SKIP_ROWS, &skiprows);
  29.     glGetIntegerv(GL_UNPACK_SKIP_PIXELS, &skippixels);
  30.     glGetIntegerv(GL_UNPACK_ALIGNMENT, &alignment);
  31.     /* Little endian machines (DEC Alpha for example) could
  32.        benefit from setting GL_UNPACK_LSB_FIRST to GL_TRUE
  33.        instead of GL_FALSE, but this would require changing the
  34.        generated bitmaps too. */
  35.     glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE);
  36.     glPixelStorei(GL_UNPACK_LSB_FIRST, GL_FALSE);
  37.     glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
  38.     glPixelStorei(GL_UNPACK_SKIP_ROWS, 0);
  39.     glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0);
  40.     glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
  41.     glBitmap(ch->width, ch->height, ch->xorig, ch->yorig,
  42.       ch->advance, 0, ch->bitmap);
  43.     /* Restore saved modes. */
  44.     glPixelStorei(GL_UNPACK_SWAP_BYTES, swapbytes);
  45.     glPixelStorei(GL_UNPACK_LSB_FIRST, lsbfirst);
  46.     glPixelStorei(GL_UNPACK_ROW_LENGTH, rowlength);
  47.     glPixelStorei(GL_UNPACK_SKIP_ROWS, skiprows);
  48.     glPixelStorei(GL_UNPACK_SKIP_PIXELS, skippixels);
  49.     glPixelStorei(GL_UNPACK_ALIGNMENT, alignment);
  50.   }
  51. }