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 | }
|
---|