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