view TODO @ 876:9e84d106ec19

(Said Max Horn on the SDL mailing list...) Hi folks, based on Eric Wing's patch, I created the attached patch which fixes the OpenGL coordinate inversion bug in SDL. It works fine over here on 10.3 with Ryan's test program (which I also attached). There is another change in it: I removed the "- 1" in the two lines using CGDisplayPixelsHigh()... while I understand from a logical point of view why they *should* be correct, I checked the actual values computed that way, and they were off-by-one. After removing the " - 1", the returned mouse coordinates are correct. I checked this by moving the mouse to the screen top/bottom in fullscreen mode, BTW. With the change, the proper values 0 and 479 are returned (in 640x480 mode). Sam, you may still want to test on 10.1, it's very simple using Ryan's minimal test code :-) Cheers, Max (Here is the reproduction case for revision history's sake...) /* * To compile: * gcc -o test test.c `sdl-config --cflags` `sdl-config --libs` -framework OpenGL * * --ryan. */ #include <stdio.h> #include "SDL.h" #include "SDL_opengl.h" int main(int argc, char **argv) { Uint32 flags = SDL_OPENGL /* | SDL_FULLSCREEN */; SDL_Surface *screen; SDL_Event event; int done = 0; GLfloat ratio; SDL_Init(SDL_INIT_VIDEO); SDL_ShowCursor(0); if ((argv[1]) && (strcmp(argv[1], "--grab") == 0)) SDL_WM_GrabInput(SDL_GRAB_ON); screen = SDL_SetVideoMode(640, 480, 0, flags); if (!screen) return(42); ratio = ((GLfloat) screen->w) / ((GLfloat) screen->h); glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ); glClearDepth( 1.0f ); glEnable( GL_DEPTH_TEST ); glDepthFunc( GL_LEQUAL ); glViewport( 0, 0, screen->w, screen->h); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); gluPerspective( 45.0f, ratio, 0.1f, 100.0f ); glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); SDL_GL_SwapBuffers(); // eh, close enough. #define MAX_X 6.12 #define MAX_Y 4.50 while (!done) { int x, y; GLfloat glx, gly; if (!SDL_WaitEvent(&event)) break; switch (event.type) { case SDL_KEYUP: if (event.key.keysym.sym == SDLK_ESCAPE) done = 1; break; } SDL_GetMouseState(&x, &y); glx = ((((GLfloat) x) / ((GLfloat) screen->w)) - 0.5f) * MAX_X; gly = ((((GLfloat) y) / ((GLfloat) screen->h)) - 0.5f) * MAX_Y; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(glx,-gly,-6.0f); glBegin(GL_TRIANGLES); glColor3f(1,0,0); glVertex3f( 0.00f, 0.25f, 0.00f); glColor3f(0,1,0); glVertex3f(-0.25f, -0.25f, 0.00f); glColor3f(0,0,1); glVertex3f( 0.25f, -0.25f, 0.00f); glEnd(); SDL_GL_SwapBuffers(); } SDL_Quit(); return(0); } /* end of test.c ... */
author Ryan C. Gordon <icculus@icculus.org>
date Mon, 22 Mar 2004 09:38:20 +0000
parents df1d68818edb
children 19418e4422cb
line wrap: on
line source


Wish list for the 1.3 development branch:

 * Use /etc/fb.modes, if available, like GGI does
 * Add mousewheel events (new unified event architecture?)
 * DirectInput joystick support needs to be implemented
 * Be able to enumerate and select available audio and video drivers
 * Fullscreen video mode support for MacOS X
 * Explicit vertical retrace wait (maybe separate from SDL_Flip?)
 * Shaped windows, windows without borders
 * Multiple windows, multiple display support
 * SDL_INIT_EVENTTHREAD on Windows and MacOS?
 * Add a timestamp to events
 * Use RDTSC for timer resolution on x86 hardware
 * Add audio input API
 * Add hardware accelerated scaled blit
 * Add hardware accelerated alpha blits
 * Redesign blitting architecture to allow blit plugins

In the jump from 1.2 to 1.3, we should change the SDL_Rect members to
int and evaluate all the rest of the datatypes.  This is the only place
we should do it though, since the 1.2 series should not break binary
compatibility in this way.

Requests:
 * PCM and CDROM volume control (deprecated, but possible)