1. 26 Nov, 2009 1 commit
    • Sam Lantinga's avatar
      Adam Strzelecki to SDL · 8a9c9fcc
      Sam Lantinga authored
      Currently SDL uses GL_RGB for internalFormat when GL_YCBCR_MESA is passed as format for glTextImage2D when using Linux Mesa's OpenGL. However this is wrong and makes glTextImage2D fail with invalid argument error. GL_YCBCR_MESA should be also internalFormat (not GL_RGB) there and this is what can be found googling various source codes using GL_YCBCR_MESA.
      
      --HG--
      extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%404235
      8a9c9fcc
  2. 25 Nov, 2009 4 commits
  3. 24 Nov, 2009 5 commits
    • Mike Gorchak's avatar
      Override renderer for OpenGL window, only in case if OpenGL or OpenGL ES renderers are enabled. · feffe121
      Mike Gorchak authored
      --HG--
      extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%404230
      feffe121
    • Sam Lantinga's avatar
      Fixed bug #771 · e7553b2d
      Sam Lantinga authored
      Cleaned up the code a bit and made sure that an OpenGL window gets the OpenGL
      renderer.  Inspired by a patch from Mason Wheeler.
      
      --HG--
      extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%404229
      e7553b2d
    • Sam Lantinga's avatar
      Eric Wing to Sam, hfutrell · 6524589f
      Sam Lantinga authored
      This one is quite puzzling. I found a partial workaround, but I don't fully understand the reasons yet.
      
      First, the console is complaining about not finding a nib for MainWindow.
      I tried removing the entry for this in the info.plist, and the message went away, but it didn't really change anything.
      
      Second, I stepped through this with the debugger and broke up some lines. It seems that the basic act of calling
             view = [SDL_uikitopenglview alloc];
      
      or even
             view = [SDL_uikitview alloc]
      
      will crash the program. The debugger messages plus the stack trace make me think it's not finding the SDL_uikitview classes for some reason. But I don't understand why this would be.
      
      view = [UIView alloc] will not crash the program.
      
      For kicks, I added a new definition of a class called SDL_object which subclasses NSObject in the same files as SDL_uikitopenglview and then call
             view = [SDL_object alloc];
      
      This does not crash the program.
      
      So, then I modified SDL_object to subclass UIView. No crash.
      
      Next, I made SDL_object subclass UIView<UITextFieldDelegate> . This crashes.
      
      So it is the act of conforming to the UITextFieldDelegate protocol that is crashing things.
      
      I don't understand why it would crash on alloc though. I'm guessing either a delegate needs to be set somewhere or one of the required methods needs to be implemented. But in the former case, I would not expect a crash, but a silent message to nil and something else doesn't work. And in the latter case, I would expect a compiler warning and an exception thrown instead of a crash.
      
      Anyway, my temporary workaround is to change the interface declaration for SDL_uikitview to look like:
      
      #if SDL_IPHONE_KEYBOARD
      @interface SDL_uikitview : UIView<UITextFieldDelegate> {
      #else
      @interface SDL_uikitview : UIView {
      #endif
      
      And then disable the keyboard support in the SDL_config_iphoneos.h file.
      /* enable iPhone keyboard support */
      #define SDL_IPHONE_KEYBOARD 0
      
      
      -Eric
      
      On Nov 23, 2009, at 1:43 AM, Sam Lantinga wrote:
      
      > I ran into a blocking startup crash with the Happy demo on iPhone OS 3.1.2 on my new iPhone:
      >
      > #0    0x323fea14 in _class_isInitialized
      > #1    0x323fea68 in _class_initialize
      > #2    0x32403e92 in prepareForMethodLookup
      > #3    0x32401244 in lookUpMethod
      > #4    0x323fea10 in _class_lookupMethodAndLoadCache
      > #5    0x323fe746 in objc_msgSend_uncached
      > #6    0x323feb26 in _class_initialize
      > #7    0x323fea58 in _class_initialize
      > #8    0x32403e92 in prepareForMethodLookup
      > #9    0x32401244 in lookUpMethod
      > #10   0x323fea10 in _class_lookupMethodAndLoadCache
      > #11   0x323fe746 in objc_msgSend_uncached
      > #12   0x000554dc in UIKit_GL_CreateContext at SDL_uikitopengles.m:103
      > #13   0x0004f89e in SDL_GL_CreateContext at SDL_video.c:3155
      > #14   0x000579e8 in GLES_CreateRenderer at SDL_renderer_gles.c:282
      > #15   0x0004d7b8 in SDL_CreateRenderer at SDL_video.c:1509
      > #16   0x00002bc2 in SDL_main at happy.c:156
      > #17   0x000571b2 in -[SDLUIKitDelegate postFinishLaunch] at
      > SDL_uikitappdelegate.m:77
      > #18   0x313f9ef2 in __NSFireDelayedPerform
      > #19   0x32567bb2 in CFRunLoopRunSpecific
      > #20   0x3256735c in CFRunLoopRunInMode
      > #21   0x32912cbe in GSEventRunModal
      > #22   0x32912d6a in GSEventRun
      > #23   0x32b6276e in -[UIApplication _run]
      > #24   0x32b61472 in UIApplicationMain
      > #25   0x00057088 in main at SDL_uikitappdelegate.m:50
      >
      > Any ideas?
      >
      > See ya!
      > --
      >       -Sam Lantinga, Founder and President, Galaxy Gameworks LLC
      
      --HG--
      extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%404228
      6524589f
    • Sam Lantinga's avatar
      Fixed bug #891 · 56425cc2
      Sam Lantinga authored
       Mason Wheeler      2009-11-23 06:59:48 PST
      
      There's code in SDL_RecreateWindow specifically to handle SDL_WINDOW_FOREIGN,
      but it appears to have been overlooked in the allowed_flags constant.  This
      causes the line
      
          window->flags = (flags & allowed_flags);
      
      to strip SDL_WINDOW_FOREIGN from the window's flags, which breaks some code in
      WIN_WindowProc in SDL_win32Events.c that treats foreign windows differently.
      This can be trivially fixed by defining allowed_flags as
      
          const Uint32 allowed_flags = (SDL_WINDOW_FULLSCREEN |
                                        SDL_WINDOW_OPENGL |
                                        SDL_WINDOW_BORDERLESS |
                                        SDL_WINDOW_RESIZABLE |
                                        SDL_WINDOW_INPUT_GRABBED |
                                        SDL_WINDOW_FOREIGN);
      
      --HG--
      extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%404227
      56425cc2
    • Sam Lantinga's avatar
      Mason Wheeler to sdl · b7844cd9
      Sam Lantinga authored
      I updated SDL, and suddenly my SDL frames stopped working.  They'd "initialize" full of gibberish, and I couldn't render anything to them.  After a bit of digging, I found a problem: the renderer initialization routine in my SDL frame code wasn't getting called anymore.
      
      procedure TSdlFrame.Paint;
      begin
         if SDL_SelectRenderer(FWindowID) = -1 then
            CreateRenderer;
         SDL_RenderPresent;
      end;
      
      function TSdlFrame.CreateRenderer: boolean;
      const
         pf: tagPIXELFORMATDESCRIPTOR = (nSize: sizeof(pf); nVersion: 1;
             dwFlags: PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
             iPixelType: PFD_TYPE_RGBA; cColorBits: 24; cAlphaBits: 8;
             iLayerType: PFD_MAIN_PLANE);
      
         RENDERERS: array[TRendererType] of AnsiString = ('software', 'gdi', 'opengl', 'd3d');
      var
        pFormat: integer;
      begin
         if (SDL_SelectRenderer(FWindowID) = 0) then
         begin
            result := true;
            Exit;
         end;
         if FRendererType = rtOpenGL then
         begin
            pFormat := ChoosePixelFormat(canvas.Handle, @pf);
            if not SetPixelFormat(canvas.Handle, pFormat, @pf) then
               outputDebugString(PChar(SysErrorMessage(GetLastError)));
            if wglCreateContext(canvas.Handle) = 0 then
               outputDebugString(PChar(SysErrorMessage(GetLastError)));
         end;
         if (SDL_CreateRenderer(FWindowID, SDL_RendererIndex(RENDERERS[FRendererType]), [sdlrPresentFlip3, sdlrAccelerated]) = 0) then
         begin
            SDL_ShowWindow(FWindowID);
            assert(SDL_SetRenderDrawColor(0, 0, 0, 255) = 0);
            FFlags := SDL_GetWindowFlags(FWindowID);
            if assigned(FOnAvailable) then
               FOnAvailable(self);
         end
         else outputDebugString(pChar(format('SDL_CreateRenderer failed: %s', [sdl_GetError])));
         result := SDL_SelectRenderer(FWindowID) = 0;
      end;
      
      This is a critical issue.  The Paint method gets called when the control receives a WM_PAINT message from Windows.  I can't create the renderer before then, or it will fail and cause trouble.  And when I do create it, it needs to be created with certain parameters.  So imagine my surprise when I started debugging into the DLL and found that SDL_SelectRenderer was trying to be "helpful" by creating the renderer for me if it didn't already exist!  Now not only does my initialization code not get called, I end up with the wrong renderer and so things don't render as expected when I try to use the window.
      
      --HG--
      extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%404226
      b7844cd9
  4. 22 Nov, 2009 6 commits
  5. 21 Nov, 2009 13 commits
  6. 20 Nov, 2009 5 commits
  7. 19 Nov, 2009 6 commits