mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-02 09:52:27 -04:00
compensate for byte order
This commit is contained in:
parent
375fd5c352
commit
1a78b5851d
@ -994,6 +994,37 @@ paint_window() {
|
|||||||
memcpy(_reversed_buffer + (y_size - 1 - yi) * rowsize,
|
memcpy(_reversed_buffer + (y_size - 1 - yi) * rowsize,
|
||||||
(char *)framebuffer + yi * rowsize,
|
(char *)framebuffer + yi * rowsize,
|
||||||
rowsize);
|
rowsize);
|
||||||
|
|
||||||
|
#ifdef __BIG_ENDIAN__
|
||||||
|
// It appears that kBGRAPixelFormat, below, is ignored on
|
||||||
|
// big-endian machines, and it is treated as KARGBPixelFormat
|
||||||
|
// regardless of what we specify. Vexing. To compensate for
|
||||||
|
// this, we have to reverse the color channels ourselves on
|
||||||
|
// big-endian machines.
|
||||||
|
|
||||||
|
/*
|
||||||
|
unsigned int *b = (unsigned int *)(_reversed_buffer + (y_size - 1 - yi) * rowsize);
|
||||||
|
for (int xi = 0; xi < x_size; ++xi) {
|
||||||
|
unsigned int w = *b;
|
||||||
|
*b = ((w >> 24) & 0xff) | ((w >> 8) & 0xff00) | ((w << 8) & 0xff0000) | ((w << 24) & 0xff000000);
|
||||||
|
++b;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
// This was measured to be faster than the above.
|
||||||
|
unsigned char *t = (unsigned char *)(_reversed_buffer + (y_size - 1 - yi) * rowsize);
|
||||||
|
for (int xi = 0; xi < x_size; ++xi) {
|
||||||
|
unsigned char b = t[0];
|
||||||
|
unsigned char g = t[1];
|
||||||
|
unsigned char r = t[2];
|
||||||
|
unsigned char a = t[3];
|
||||||
|
t[0] = a;
|
||||||
|
t[1] = r;
|
||||||
|
t[2] = g;
|
||||||
|
t[3] = b;
|
||||||
|
t += 4;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
_swbuffer->close_read_framebuffer();
|
_swbuffer->close_read_framebuffer();
|
||||||
|
@ -140,7 +140,7 @@ shutdown() {
|
|||||||
struct timeval now;
|
struct timeval now;
|
||||||
gettimeofday(&now, NULL);
|
gettimeofday(&now, NULL);
|
||||||
int now_ms = now.tv_sec * 1000 + now.tv_usec / 1000;
|
int now_ms = now.tv_sec * 1000 + now.tv_usec / 1000;
|
||||||
double elapsed = now_ms - start_ms;
|
int elapsed = now_ms - start_ms;
|
||||||
|
|
||||||
if (elapsed > max_wait_ms) {
|
if (elapsed > max_wait_ms) {
|
||||||
// Tired of waiting. Kill the process.
|
// Tired of waiting. Kill the process.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user