-#if !defined(GL_VERSION_1_2) && G_BYTE_ORDER == G_LITTLE_ENDIAN
- rgb =
- (((guint32) (color[0] * 255.0)) << 0) |
- (((guint32) (color[1] * 255.0)) << 8) |
- (((guint32) (color[2] * 255.0)) << 16);
-#else
- rgb =
- (((guint32) (color[0] * 255.0)) << 24) |
- (((guint32) (color[1] * 255.0)) << 16) |
- (((guint32) (color[2] * 255.0)) << 8);
-#endif
- alpha = color[3];
-
- row = bitmap.buffer + bitmap.rows * bitmap.width; // Past the end.
- row_end = bitmap.buffer; // Beginning.
-
- if (alpha == 1.0) {
- do {
- row -= bitmap.width;
- for (i = 0; i < bitmap.width; i++) {
-#if !defined(GL_VERSION_1_2) && G_BYTE_ORDER == G_LITTLE_ENDIAN
- *p++ = rgb | (((guint32) row[i]) << 24);
-#else
- *p++ = rgb | ((guint32) row[i]);
-#endif
- }
- } while (row != row_end);
- }
-
- else { // Translucent. Much less efficient, so try to avoid.
- do {
- row -= bitmap.width;
- for (i = 0; i < bitmap.width; i++) {
-#if !defined(GL_VERSION_1_2) && G_BYTE_ORDER == G_LITTLE_ENDIAN
- *p++ = rgb | (((guint32) (alpha * row[i])) << 24);
-#else
- *p++ = rgb | ((guint32) (alpha * row[i]));
-#endif
- }
- } while (row != row_end);
- }