523 AddFileLog('OpenGL - "' + extension + '" failed to load'); |
523 AddFileLog('OpenGL - "' + extension + '" failed to load'); |
524 {$ENDIF} |
524 {$ENDIF} |
525 end; |
525 end; |
526 |
526 |
527 procedure SetupOpenGL; |
527 procedure SetupOpenGL; |
528 {$IFNDEF IPHONEOS} |
528 var vendor: shortstring = ''; |
529 var vendor: shortstring; |
|
530 {$IFDEF DARWIN} |
529 {$IFDEF DARWIN} |
531 const one : LongInt = 1; |
530 const one : LongInt = 1; |
532 {$ENDIF} |
531 {$ENDIF} |
533 {$ENDIF} |
532 begin |
534 begin |
533 {$IFDEF SDL13} |
|
534 // this function creates an opengles1.1 context by default on mobile devices |
|
535 // use SDL_GL_SetAttribute to change this behaviour |
|
536 SDLGLcontext:=SDL_GL_CreateContext(SDLwindow); |
|
537 SDLTry(SDLGLcontext <> nil, true); |
|
538 SDL_GL_SetSwapInterval(1); |
|
539 {$ENDIF} |
535 |
540 |
536 {$IFDEF IPHONEOS} |
541 {$IFDEF IPHONEOS} |
537 SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 0); |
542 SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 0); |
538 SDL_GL_SetAttribute(SDL_GL_RETAINED_BACKING, 1); |
543 SDL_GL_SetAttribute(SDL_GL_RETAINED_BACKING, 1); |
|
544 vendor:= vendor; // avoid hint |
|
545 one:= one; // avoid hint |
539 {$ELSE} |
546 {$ELSE} |
540 SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); |
547 SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); |
541 vendor:= LowerCase(shortstring(pchar(glGetString(GL_VENDOR)))); |
548 vendor:= LowerCase(shortstring(pchar(glGetString(GL_VENDOR)))); |
542 {$IFNDEF SDL13} |
549 {$IFNDEF SDL13} |
543 // this attribute is default in 1.3 and must be enabled in MacOSX |
550 // this attribute is default in 1.3 and must be enabled in MacOSX |
955 {$IFDEF IPHONEOS} |
962 {$IFDEF IPHONEOS} |
956 // make the sdl window appear on the second monitor when present |
963 // make the sdl window appear on the second monitor when present |
957 x:= x or (SDL_GetNumVideoDisplays() - 1); |
964 x:= x or (SDL_GetNumVideoDisplays() - 1); |
958 y:= y or (SDL_GetNumVideoDisplays() - 1); |
965 y:= y or (SDL_GetNumVideoDisplays() - 1); |
959 |
966 |
960 // hardcode the opengles driver as we do our own drawing |
967 flags:= flags or SDL_WINDOW_BORDERLESS or SDL_WINDOW_RESIZABLE; |
961 SDL_SetHint('SDL_RENDER_DRIVER','opengles'); |
|
962 flags:= flags or SDL_WINDOW_BORDERLESS; // do not set SDL_WINDOW_RESIZABLE on iOS |
|
963 {$ENDIF} |
968 {$ENDIF} |
964 |
969 |
965 SDLwindow:= SDL_CreateWindow('Hedgewars', x, y, cScreenWidth, cScreenHeight, flags); |
970 SDLwindow:= SDL_CreateWindow('Hedgewars', x, y, cScreenWidth, cScreenHeight, flags); |
966 SDLTry(SDLwindow <> nil, true); |
971 SDLTry(SDLwindow <> nil, true); |
967 SDLrender:= SDL_CreateRenderer(SDLwindow, -1, SDL_RENDERER_ACCELERATED or SDL_RENDERER_PRESENTVSYNC); |
|
968 SDLTry(SDLrender <> nil, true); |
|
969 |
|
970 // clean the renderer before using it |
|
971 SDL_SetRenderDrawColor(SDLrender, 0, 0, 0, 255); |
|
972 SDL_RenderClear(SDLrender); |
|
973 SDL_RenderPresent(SDLrender); |
|
974 |
|
975 // reset the gl context from the one created by SDL (as we have our own drawing system) |
|
976 glMatrixMode(GL_PROJECTION); |
|
977 glLoadIdentity(); |
|
978 {$ELSE} |
972 {$ELSE} |
979 if not cOnlyStats then |
973 if not cOnlyStats then |
980 begin |
974 begin |
981 SDLPrimSurface:= SDL_SetVideoMode(cScreenWidth, cScreenHeight, cBits, flags); |
975 SDLPrimSurface:= SDL_SetVideoMode(cScreenWidth, cScreenHeight, cBits, flags); |
982 SDLTry(SDLPrimSurface <> nil, true); |
976 SDLTry(SDLPrimSurface <> nil, true); |