Mercurial > sdl-ios-xcode
view README.QNX @ 3487:24d13328c44a
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
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Tue, 24 Nov 2009 08:12:32 +0000 |
parents | 7c73d5b5a0d6 |
children |
line wrap: on
line source
README.QNX by Mike Gorchak <mike@malva.ua>, <lestat@i.com.ua> Last changed at 10 Jun 2009. QNX Photon and GF drivers are being constructed, OpenGL ES support is finished. Still no 2D renderer support in GF and Photon drivers. QNX QSA (QNX Sound Architecture) driver is ready. QNX HID input driver is finished. ---------------------- -- SDL QSA driver -- ---------------------- Due to QNX Sound Architecture limitations software could not determine what playback channels are designed for, so some casus can be. For example, output after testmultiaudio test utility execution: Using audio driver: qsa playing on device #0: ('Vortex 8820 @ fb000000 d0')...done. playing on device #1: ('Vortex 8820 @ fb000000 d1')...done. playing on device #2: ('i8x0 @ d800 d0')...done. playing on device #3: ('i8x0 @ d800 d1')...done. playing on all devices... Open device 3 failed: QSA: snd_pcm_channel_params failed: Invalid argument If speakers are connected to both audio cards: Vortex 8820 and Intel Integrated Audio we can hear sound playback on device #0 and devices #2, #3 only. Device #1 is an unknown PCM channel which does not produce any sound. As for error during device #3 opening, it's caused by QSA software mixer channel, because it can't open real hardware device #2, since it's already opened by SDL. After simultaneous sound playback on all devices utility testmultiaudio stays running waiting for sound playback finish on device #1, which is locked up due to some Aureal Vortex 8820 driver limitations. --------------------- -- SDL GF driver -- --------------------- Here is an additional information about SDL GF driver: * 0. Introduction. * 1. Environment variables which SDL GF driver supports. * 2. Custom video modes. * 3. Limitations. 0. Introduction. SDL GF driver is a layer between SDL and QNX Graphics Framework (GF). SDL GF driver also supports OpenGL ES through the QNX Graphics Framework. Hardware accelerated features which SDL can support depend on real hardware capabilities. 1. Environment variables which GF driver supports. GF driver supports the following environment variables for QNX GF specific customization options: a) SDL_VIDEO_GF_REFRESH_RATE - refresh rate of video output in Hz. Without this environment variable declaration SDL controls refresh rate of your display. If this enironment variable is set to 0, SDL will control refresh rate of display, otherwise value of flag SDL_VIDEO_GF_REFRESH_RATE is used for all screen resolutions as refresh rate. This example will set 60Hz refresh rate as refresh rate for all graphics modes: export SDL_VIDEO_GF_REFRESH_RATE=60 2. Custom video modes. Since most QNX graphics drivers support GENERIC video modes, i.e. you can specify any horizontal and vertical resolution and any refresh rate, SDL GF driver uses its own fullscreen modes list, which can be incomplete. You can add any custom video mode, which your QNX graphics driver supports by editing file ./src/video/qnxgf/SDL_qnxgf.c. Custom graphics mode definition looks like this: {0, 1024, 640, 60, NULL}, /* 1024x640 mode is 60Hz only */ You must specify horizontal resolution as the second parameter, vertical resolution as the third one and refresh rate as the fourth parameter. Please leave the first and the last parameters as 0 and NULL. Then send me your changes to e-mail address which is specified in the header of this document. 3. Limitations. There are few limitations while using SDL GF driver: a) Since GF driver supports fullscreen modes only, when flag SDL_WINDOW_FULLSCREEN is not specified, SDL GF driver will try to find the fullscreen graphics mode which corresponds to SDL window size. Refresh rate will be the lowest available, if SDL_VIDEO_GF_REFRESH_RATE environment variable is not set. b) As confirmed by QSSL none of existing video drivers has support of doublescan low-resolution video modes. So modes below 640x480 are not supported. If your video driver supports low-resolution video modes, please add SDL_GF_LOWRESOLUTION flag to the gf_devicename array in the SDL_qnxgf.c source file. c) Since GF framework supports hardware mouse cursor only, you'll get hardware mouse cursor in case of specific graphics driver supports it. ------------------------- -- SDL Photon driver -- ------------------------- ---------------------------- -- SDL HID input driver -- ----------------------------