mirror of https://github.com/xemu-project/xemu.git
glx stuff not used in windows so don't need to be common?
This commit is contained in:
parent
ba602e2e5c
commit
ab820ea7df
|
@ -84,16 +84,6 @@ extern void glo_flags_get_readpixel_type(int formatFlags, int *glFormat, int *gl
|
|||
/* Score how close the given format flags match. 0=great, >0 not so great */
|
||||
extern int glo_flags_score(int formatFlagsExpected, int formatFlagsReal);
|
||||
|
||||
/* Create a set of format flags from a null-terminated list
|
||||
* of GLX fbConfig flags. If assumeBooleans is set, items such
|
||||
* as GLX_RGBA/GLX_DOUBLEBUFFER are treated as booleans, not key-value pairs
|
||||
* (glXChooseVisual treats them as booleans, glXChooseFBConfig as key-value pairs)
|
||||
*/
|
||||
extern int glo_flags_get_from_glx(const int *fbConfig, int assumeBooleans);
|
||||
/* Use in place of glxGetConfig - returns information from flags based on a GLX enum */
|
||||
extern int glo_get_glx_from_flags(int formatFlags, int glxEnum);
|
||||
|
||||
|
||||
/* In terms of speed, glReadPixels actually seems the best we can do.
|
||||
* * On Windows PFB_DRAW_TO_BITMAP is software-only.
|
||||
* * http://www.opengl.org/registry/specs/ARB/pixel_buffer_object.txt would be
|
||||
|
|
|
@ -38,28 +38,6 @@
|
|||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
// ---------------------------------------------------
|
||||
// Copied from glx.h as we need them in windows too
|
||||
/*
|
||||
* Tokens for glXChooseVisual and glXGetConfig:
|
||||
*/
|
||||
#define GLX_USE_GL 1
|
||||
#define GLX_BUFFER_SIZE 2
|
||||
#define GLX_LEVEL 3
|
||||
#define GLX_RGBA 4
|
||||
#define GLX_DOUBLEBUFFER 5
|
||||
#define GLX_STEREO 6
|
||||
#define GLX_AUX_BUFFERS 7
|
||||
#define GLX_RED_SIZE 8
|
||||
#define GLX_GREEN_SIZE 9
|
||||
#define GLX_BLUE_SIZE 10
|
||||
#define GLX_ALPHA_SIZE 11
|
||||
#define GLX_DEPTH_SIZE 12
|
||||
#define GLX_STENCIL_SIZE 13
|
||||
#define GLX_ACCUM_RED_SIZE 14
|
||||
#define GLX_ACCUM_GREEN_SIZE 15
|
||||
#define GLX_ACCUM_BLUE_SIZE 16
|
||||
#define GLX_ACCUM_ALPHA_SIZE 17
|
||||
// ---------------------------------------------------
|
||||
|
||||
extern void glo_surface_getcontents_readpixels(int formatFlags, int stride,
|
||||
|
@ -180,116 +158,3 @@ int glo_flags_score(int formatFlagsExpected, int formatFlagsReal) {
|
|||
return score;
|
||||
}
|
||||
|
||||
int glo_flags_get_from_glx(const int *fbConfig, int assumeBooleans) {
|
||||
int bufferSize = 0;
|
||||
int depthSize = 0;
|
||||
int stencilSize = 0;
|
||||
int rgbaSize[] = {0,0,0,0};
|
||||
int flags = 0;
|
||||
|
||||
while (*fbConfig) {
|
||||
int isSingle = 0;
|
||||
switch (*fbConfig) {
|
||||
case GLX_USE_GL:
|
||||
isSingle = 1;
|
||||
break;
|
||||
case GLX_BUFFER_SIZE:
|
||||
bufferSize = fbConfig[1];
|
||||
break;
|
||||
case GLX_LEVEL:
|
||||
break;
|
||||
case GLX_RGBA:
|
||||
flags |= GLO_FF_ALPHA;
|
||||
break;
|
||||
case GLX_DOUBLEBUFFER:
|
||||
isSingle = 1;
|
||||
break;
|
||||
case GLX_STEREO:
|
||||
isSingle = 1;
|
||||
break;
|
||||
case GLX_AUX_BUFFERS:
|
||||
break;
|
||||
case GLX_RED_SIZE:
|
||||
rgbaSize[0] = fbConfig[1];
|
||||
break;
|
||||
case GLX_GREEN_SIZE:
|
||||
rgbaSize[1] = fbConfig[1];
|
||||
break;
|
||||
case GLX_BLUE_SIZE:
|
||||
rgbaSize[2] = fbConfig[1];
|
||||
break;
|
||||
case GLX_ALPHA_SIZE:
|
||||
rgbaSize[3] = fbConfig[1];
|
||||
break;
|
||||
case GLX_DEPTH_SIZE:
|
||||
depthSize = fbConfig[1];
|
||||
break;
|
||||
case GLX_STENCIL_SIZE:
|
||||
stencilSize = fbConfig[1];
|
||||
break;
|
||||
case GLX_ACCUM_RED_SIZE:
|
||||
case GLX_ACCUM_GREEN_SIZE:
|
||||
case GLX_ACCUM_BLUE_SIZE:
|
||||
case GLX_ACCUM_ALPHA_SIZE:
|
||||
break;
|
||||
}
|
||||
// go to next
|
||||
if (isSingle && assumeBooleans)
|
||||
fbConfig++;
|
||||
else
|
||||
fbConfig+=2;
|
||||
}
|
||||
if (rgbaSize[3])
|
||||
flags |= GLO_FF_ALPHA;
|
||||
// ensure we have room for *some* alpha
|
||||
if ((flags & GLO_FF_ALPHA) && (rgbaSize[3]==0))
|
||||
rgbaSize[3] = 1;
|
||||
// Buffer size flag
|
||||
if (bufferSize==0)
|
||||
bufferSize = rgbaSize[0]+rgbaSize[1]+rgbaSize[2]+rgbaSize[3];
|
||||
if (bufferSize==0)
|
||||
bufferSize = (flags & GLO_FF_ALPHA) ? 32 : 24;
|
||||
if (bufferSize<=16)
|
||||
flags |= GLO_FF_BITS_16;
|
||||
else if (bufferSize<=24)
|
||||
flags |= GLO_FF_BITS_24;
|
||||
else flags |= GLO_FF_BITS_32;
|
||||
// Depth
|
||||
if (depthSize<=16)
|
||||
flags |= GLO_FF_DEPTH_16;
|
||||
else if (depthSize<=24)
|
||||
flags |= GLO_FF_DEPTH_24;
|
||||
else flags |= GLO_FF_DEPTH_32;
|
||||
// Stencil
|
||||
if (stencilSize>0)
|
||||
flags |= GLO_FF_STENCIL_8;
|
||||
return flags;
|
||||
}
|
||||
|
||||
int glo_get_glx_from_flags(int formatFlags, int glxEnum) {
|
||||
int rgba[4];
|
||||
glo_flags_get_rgba_bits(formatFlags, rgba);
|
||||
|
||||
switch (glxEnum) {
|
||||
case GLX_USE_GL: return 1;
|
||||
case GLX_BUFFER_SIZE: return glo_flags_get_bytes_per_pixel(formatFlags)*8;
|
||||
case GLX_LEVEL: return 0;
|
||||
case GLX_RGBA: return formatFlags & GLO_FF_ALPHA;
|
||||
case GLX_DOUBLEBUFFER: return 1;
|
||||
case GLX_STEREO: return 0;
|
||||
case GLX_AUX_BUFFERS: return 0;
|
||||
case GLX_RED_SIZE: return rgba[0];
|
||||
case GLX_GREEN_SIZE: return rgba[1];
|
||||
case GLX_BLUE_SIZE: return rgba[2];
|
||||
case GLX_ALPHA_SIZE: return rgba[3];
|
||||
case GLX_DEPTH_SIZE: return glo_flags_get_depth_bits(formatFlags);
|
||||
case GLX_STENCIL_SIZE: return glo_flags_get_stencil_bits(formatFlags);
|
||||
case GLX_ACCUM_RED_SIZE:
|
||||
case GLX_ACCUM_GREEN_SIZE:
|
||||
case GLX_ACCUM_BLUE_SIZE:
|
||||
case GLX_ACCUM_ALPHA_SIZE:
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue