Commit Graph

5003 Commits

Author SHA1 Message Date
Sam Lantinga
9943aa0b1b Eric Wing to Sam, hfutrell
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
2009-11-24 08:12:32 +00:00
Sam Lantinga
07d9b53f03 Fixed bug #891
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);
2009-11-24 04:59:50 +00:00
Sam Lantinga
b7dc66d719 Mason Wheeler to sdl
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.
2009-11-24 04:48:12 +00:00
Sam Lantinga
1b236a4901 Set the error so someone can get more information 2009-11-22 20:53:53 +00:00
Sam Lantinga
2634a34422 Made the comment actually mean something. :) 2009-11-22 20:00:00 +00:00
Sam Lantinga
c0f5e8a979 More fixes to compile under Visual C++ 2009-11-22 07:00:26 +00:00
Sam Lantinga
411ee2e374 Fixed include paths for Visual C++ 2009-11-22 06:42:58 +00:00
Sam Lantinga
8c5da01bc8 The Direct3D Read/Write pixels interface is in progress. 2009-11-22 06:37:43 +00:00
Sam Lantinga
9fd8542b46 Whoops, actually set the SDL error, don't just print the error. 2009-11-22 06:34:45 +00:00
Mike Gorchak
f54a8cc44d Added support for QNX default font. Backspace and Return keys now handled. 2009-11-21 08:42:42 +00:00
Sam Lantinga
7125fdbe63 We want to be strict on software renderer tests and opaque tests, but give a decent margin for blending inaccuracy for the blended tests. 2009-11-21 07:59:19 +00:00
Sam Lantinga
fc6a229f72 Increased tolerance a little bit more for multiple blending passes accumulating error. 2009-11-21 07:46:12 +00:00
Sam Lantinga
24d9e6a497 Added comment for pixel-perfect line workaround. 2009-11-21 07:26:52 +00:00
Sam Lantinga
dd6317ef08 Of COURSE that trick wouldn't work on all renderers. Fall back to something for now, hopefully figure out a better way to do this later.
If we have to, we can use vertical line and horizontal line textures for vertical and horizontal lines, and then create custom textures for diagonal lines and software render those.  It's terrible, but at least it would be pixel perfect.
2009-11-21 07:22:59 +00:00
Sam Lantinga
cda15a93c7 This is terrible, but the OpenGL standard says that lines are half open, which means that one endpoint is not covered so adjoining lines don't overlap. It also doesn't define which end is open, and indeed Mac OS X and Linux differ. Mac OS X seems to leave the second endpoint open, but Linux uses the right-most endpoint for x major lines and the bottom-most endpoint for y major lines. 2009-11-21 07:14:21 +00:00
Sam Lantinga
4cbe158f13 Fixed the coordinates for pixel coverage in blits 2009-11-21 06:34:43 +00:00
Sam Lantinga
7863b8a31b Use 45 degree lines for the diagonal test to avoid aliasing errors in line drawing. 2009-11-21 06:28:25 +00:00
Sam Lantinga
d0c931c89a It's not the last pixel, it's the rightmost pixel, or if they're both the same x coordinate, the bottommost pixel. 2009-11-21 06:19:34 +00:00
Mike Gorchak
f351b80476 RenderReadPixels and RenderWritePixels functions work with back buffer now and all asynchronous operations are flushed before reading or writing to backbuffer. Thanks Sam for clarification of this. 2009-11-21 06:17:50 +00:00
Sam Lantinga
58effb88d3 My first OpenGL shader! Momma will be so proud!
This shader implements the software renderer mask semantics where the source pixel is multiplied by the color and alpha modulation values and then any pixel with non-zero alpha is fully opaque.

The OpenGL renderer on Mac OS X now passes all the automated render tests! :)
2009-11-21 05:29:31 +00:00
Sam Lantinga
3808553966 pixels don't need to be dynamically allocated
Added a dump_screen() function to assist with test failure diagnosis
2009-11-21 05:25:08 +00:00
Sam Lantinga
32188b63d3 SDL_RenderReadPixels() needs to flush asynchronous operations before it reads.
The semantics are that it reads the back buffer, and those pixels may not be available once SDL_RenderPresent() has happened.
2009-11-21 05:05:19 +00:00
Mike Gorchak
744dfa75a8 Support for UTF-8 text input has been added. 2009-11-20 14:42:40 +00:00
Mike Gorchak
b6c6b41bb5 1. SDL_RenderPresent() call has been added after each test to be sure, that all graphics output is flushed in case if it was asynchronous.
2. After each renderer test window recreation has been added.
2009-11-20 07:11:29 +00:00
Mike Gorchak
e7e2a01f50 Output last SDL error in case of test was failed. 2009-11-20 07:08:28 +00:00
Mike Gorchak
516d648ebd RenderReadPixels and RenderWritePixels now work properly. 2009-11-20 07:07:41 +00:00
Mike Gorchak
ada6df0ab1 Deinitialization fixes, in case if QNXGF driver is not initialized properly. 2009-11-20 07:06:50 +00:00
Mike Gorchak
8a2f3c4aeb Added support for generic getopt() function instead of getopt_long(). Because not all platforms have getopt_long(). 2009-11-19 09:07:09 +00:00
Mike Gorchak
00648d42b4 Support for RendererReadPixels and RendererWritePixels has been added to photon renderer. 2009-11-19 08:44:07 +00:00
Sam Lantinga
e665ed1ee6 Mike Gorchak to Sam
Hello Sam!

You have reverted back my patches for OpenGL renderer :)

To reproduce an issue, compare graphics output while running these tests:

testdraw2 --renderer opengl --blend mask --cyclealpha
and
testdraw2 --renderer software --blend mask --cyclealpha

You will see, that software renderer output is different from opengl renderer output.

Thanks!
2009-11-19 08:02:00 +00:00
Sam Lantinga
287d2b84fc Found a way to implement mask semantics in OpenGL 2009-11-19 05:33:41 +00:00
Sam Lantinga
98198245bc Allow some variation in the pixel values to account for blending accuracy differences. 2009-11-19 05:06:01 +00:00
Sam Lantinga
abb42ffd01 Include the endpoint in the line we're drawing 2009-11-19 04:59:19 +00:00
Sam Lantinga
36c5366455 Adjust the vertices to be over the texel center. 2009-11-19 04:33:35 +00:00
Sam Lantinga
dce6c3f274 Fixed a bunch of bugs in the blit blend mode tests 2009-11-18 09:39:32 +00:00
Sam Lantinga
e671076c62 Use SDL's string and memory functions instead of stdlib 2009-11-18 09:28:35 +00:00
Sam Lantinga
3e539ff849 Implemented SDL_RenderReadPixels()/SDL_RenderWritePixels() for the dummy renderer.
This is helpful to validate the automated test suite, since this renderer is super simple and should always pass tests.
2009-11-18 09:20:01 +00:00
Sam Lantinga
9cc7fc361e Don't add the OpenGL renderers for drivers that don't support OpenGL 2009-11-18 09:17:29 +00:00
Sam Lantinga
8259a10e12 Fixes for the automated rendering test 2009-11-18 09:07:13 +00:00
Sam Lantinga
46db19c1fd If we explicitly request a driver, try to initialize it. 2009-11-18 08:54:13 +00:00
Sam Lantinga
9cc81118d2 Fixed GL_RenderReadPixels() - thanks Ryan! 2009-11-18 08:07:37 +00:00
Sam Lantinga
a9553c1c3d First pass (untested) at RenderWritePixels() 2009-11-18 07:35:00 +00:00
Sam Lantinga
f07fad9ec7 Refactored to use render_loadTestFace() 2009-11-18 07:34:05 +00:00
Sam Lantinga
cacae661e6 Fixed endianness of the face image surface 2009-11-18 07:22:22 +00:00
Sam Lantinga
ae3824a9bf Trying to figure out why the OpenGL tests are failing... 2009-11-18 06:15:44 +00:00
Sam Lantinga
754e60b870 Compare against the correct image 2009-11-18 06:15:21 +00:00
Sam Lantinga
c14ffddbcc Debug info to help track down render test failures 2009-11-17 06:51:14 +00:00
Sam Lantinga
e306484919 Added missing return values 2009-11-17 06:50:29 +00:00
Sam Lantinga
6820ff5982 Fixed some bugs in the automated test suite, revealed by working SDL_RenderReadPixels() 2009-11-17 05:17:11 +00:00
Sam Lantinga
cd1a4a74e5 Scott to slouken
Heres the wiz patch and additional files. (I think I got everything)
2009-11-17 04:53:15 +00:00