sixtyfifthbit
Member
- Joined
- Aug 24, 2007
- Messages
- 168
I've been trying to make a library to use GLES 1.x but I can't even seem to get act one right - I cannot even open a GL display. Here is the code:
On Linux X86, I get:
...and on the Pandora:
I haven't the faintest idea what is wrong on the Pandora, but I assume the issue on the X86 has to do with the GLES simulation libraries. Any ideas?
Code:
static bool InitEGL(bool FSAA)
{
nEGL_Display = eglGetDisplay((NativeDisplayType)nX11_Display);
if (EGL_NO_DISPLAY==nEGL_Display)
{
errorf("WARNING: eglGetDisplay((NativeDisplayType)nX11_Display) failed.\n"\
"Attempting eglGetDisplay(EGL_DEFAULT_DISPLAY)\n");
nEGL_Display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
if (EGL_NO_DISPLAY==nEGL_Display)
{
errorf("Error: eglGetDisplay() failed.\n");
Shutdown();
return false;
}
}
EGLint iMajorVersion, iMinorVersion;
if (!eglInitialize(nEGL_Display, &iMajorVersion, &iMinorVersion))
{
EGLint iErr = eglGetError();
errorf("Error: eglInitialize() failed (%s).\n",GetErrorString(iErr));
Shutdown();
return false;
}
EGLint pi32ConfigAttribs[10];
int attrib = 0;
pi32ConfigAttribs[attrib++] = EGL_SURFACE_TYPE;
pi32ConfigAttribs[attrib++] = EGL_WINDOW_BIT;
pi32ConfigAttribs[attrib++] = EGL_NONE;
if ( FSAA )
{
pi32ConfigAttribs[attrib++] = EGL_SAMPLE_BUFFERS;
pi32ConfigAttribs[attrib++] = 1;
pi32ConfigAttribs[attrib++] = EGL_SAMPLES;
pi32ConfigAttribs[attrib++] = 4;
}
pi32ConfigAttribs[attrib++] = EGL_NONE;
EGLint iConfigs=0;
if (!eglChooseConfig(nEGL_Display, pi32ConfigAttribs, &nEGL_Config, 1, &iConfigs) || (iConfigs != 1))
{
EGLint iErr = eglGetError();
errorf("Error: eglChooseConfig() failed(%s).\n",GetErrorString(iErr));
eglGetConfigs(nEGL_Display,NULL,0,&iConfigs);
if (iConfigs)
{
EGLConfig *cfgs=new EGLConfig[iConfigs];
eglGetConfigs(nEGL_Display,cfgs,iConfigs,&iConfigs);
for(int loop=0;loop<iConfigs;loop++)
{
EGLint scratch[4];
eglGetConfigAttrib(nEGL_Display,cfgs[loop],EGL_BUFFER_SIZE,&scratch[0]);
eglGetConfigAttrib(nEGL_Display,cfgs[loop],EGL_MAX_PBUFFER_WIDTH,&scratch[1]);
eglGetConfigAttrib(nEGL_Display,cfgs[loop],EGL_MAX_PBUFFER_HEIGHT,&scratch[2]);
eglGetConfigAttrib(nEGL_Display,cfgs[loop],EGL_SURFACE_TYPE,&scratch[3]);
errorf("%d: %dx%dx%d, %X\n",loop,scratch[1],scratch[2],scratch[0],scratch[3]);
}
delete cfgs;
}
else
errorf("There are literally no configurations available.\n");
Shutdown();
return false;
}
nEGL_Surface = eglCreateWindowSurface(nEGL_Display, nEGL_Config, (NativeWindowType)nX11_Window, NULL);
if (!TestEGLError("eglCreateWindowSurface"))
{
Shutdown();
return false;
}
nEGL_Context = eglCreateContext(nEGL_Display, nEGL_Config, NULL, NULL);
if (EGL_NO_CONTEXT==nEGL_Context)
{
EGLint iErr = eglGetError();
errorf("Error: eglCreateContext() failed(%s).\n",GetErrorString(iErr));
Shutdown();
return false;
}
eglMakeCurrent(nEGL_Display, nEGL_Surface, nEGL_Surface, nEGL_Context);
if (!TestEGLError("eglMakeCurrent"))
{
Shutdown();
return false;
}
#ifdef __PLAT_PANDORA__
nVSync = true;
#else
eglSwapInterval( nEGL_Display, 1 );
#endif
return true;
}
static bool InitX11()
{
Window sRootWindow;
XSetWindowAttributes sWA;
unsigned int ui32Mask;
int i32Depth;
nX11_Display = XOpenDisplay( ":0" );
if (!nX11_Display)
{
errorf("Error: Unable to open X display\n");
Shutdown();
return false;
}
nX11_Screen = XDefaultScreen( nX11_Display );
sRootWindow = RootWindow(nX11_Display, nX11_Screen);
i32Depth = DefaultDepth(nX11_Display, nX11_Screen);
nX11_Visual = new XVisualInfo;
XMatchVisualInfo( nX11_Display, nX11_Screen, i32Depth, TrueColor, nX11_Visual);
if (!nX11_Visual)
{
errorf("Error: Unable to acquire visual\n");
Shutdown();
return false;
}
// Colormap of the specified visual type for the display.
nX11_Colormap = XCreateColormap( nX11_Display, sRootWindow, nX11_Visual->visual, AllocNone );
sWA.colormap = nX11_Colormap;
// List of events to be handled by the application. Add to these for handling other events.
sWA.event_mask = StructureNotifyMask | ExposureMask | ButtonPressMask | ButtonReleaseMask | KeyPressMask | KeyReleaseMask;
// Display capabilities list.
ui32Mask = CWBackPixel | CWBorderPixel | CWEventMask | CWColormap;
// Creates the X11 window
nX11_Window = XCreateWindow( nX11_Display, RootWindow(nX11_Display, nX11_Screen), 0, 0, nWidth, nHeight,
0, CopyFromParent, InputOutput, CopyFromParent, ui32Mask, &sWA);
// Make the window viewable and flush the output buffer.
XMapWindow(nX11_Display, nX11_Window);
XFlush(nX11_Display);
return true;
}
bool Initialize(bool FSAA)
{
if (SDL_Init(SDL_INIT_VIDEO)!=0)
{
errorf("Unable to initialize SDL: %s\n", SDL_GetError());
return false;
}
if (!InitX11())
{
errorf("Unable to initialize X11\n");
return false;
}
if (!InitEGL(FSAA))
{
errorf("Unable to initialize EGL\n");
return false;
}
Enable2D();
char cmd[512];
strcpy( cmd, "xset r rate 500 10" );
system( cmd );
return true;
}
On Linux X86, I get:
Code:
Egl scizka: /usr/lib/libEGL.so
Egl scizka2: /usr/lib/libEGL.so
Error: eglChooseConfig() failed(Success!).
There are literally no configurations available.
Unable to initialize EGL
...and on the Pandora:
Code:
WARNING: eglGetDisplay((NativeDisplayType)nX11_Display) failed (Success!).
Attempting eglGetDisplay(EGL_DEFAULT_DISPLAY)
Error: eglInitialize() failed (BAD ALLOC).
server does not have extension for "r rate" option
Unable to initialize EGL
I haven't the faintest idea what is wrong on the Pandora, but I assume the issue on the X86 has to do with the GLES simulation libraries. Any ideas?