Commit graph

4224 commits

Author SHA1 Message Date
Sam Lantinga
6af769d887 Fixed Haiku build (thanks Alexander!) 2013-08-18 22:05:53 -07:00
Ryan C. Gordon
8cd0072f2d Patched to compile with Visual Studio. 2013-08-17 20:46:34 -04:00
Sam Lantinga
f082b60d08 Fixed Windows build 2013-08-17 17:14:15 -07:00
Sam Lantinga
458f93d7cb Fixed for consistency with the other platforms 2013-08-17 17:04:14 -07:00
Edward Rudd
508d844d44 auto init the ticks if the GetTicks and the like methods are called before SDL_Init().. This prevents annoying game bugs such as caching SDL_GetPerformanceFrequency in a static initializer 2013-08-17 18:07:29 -04:00
Sam Lantinga
f2ddd7c822 Do full state initialization in D3D_Reset(), this fixes blend mode issues when resizing the window on Windows 8. 2013-08-17 09:54:30 -07:00
Sam Lantinga
814d56a9cc Fixed windows build 2013-08-16 17:50:44 -07:00
Sam Lantinga
8b93c73d0d The keyboard text events should be sent after the key down events 2013-08-16 15:38:06 -07:00
Sam Lantinga
ec992b0558 Fixed bug 1876 - SDL_TEXTINPUT only returns '?' (0x3F) in event.text.text with Khmer language input
Andreas

The issue comes down to this line on MSDN:
"TranslateMessage produces WM_CHAR messages only for keys that are mapped to ASCII characters by the keyboard driver."

"WM_KEYDOWN and WM_KEYUP combinations produce a WM_CHAR or WM_DEADCHAR message. WM_SYSKEYDOWN and WM_SYSKEYUP combinations produce a WM_SYSCHAR or WM_SYSDEADCHAR message."
Except for WM_CHAR, none of these messages are used in SDL. Hence TranslateMessage should be dropped entirely and proper handling be included in the WM_KEYDOWN event.
Currently TranslateMessage is called for every message even if it must not be called in certain cases (like "An application should not call TranslateMessage if the TranslateAccelerator function returns a nonzero value.").

WM_CHAR message handling should remain for external processes posting these messages - additionally, WM_UNICHAR should be added.

I made a patch for src/video/windows/SDL_windowsevents.c that seems to work fine. It doesn't solve the "missing" composition for Khmer, but at least input for languages that cannot be mapped to ASCII characters (and for which IME is not used) will now work on Windows.

--HG--
extra : rebase_source : 7024be6c3a874d0319ea4c65b7d43f105915288f
2013-08-16 15:35:10 -07:00
Gabriel Jacobo
140002c931 Android quirk:Some devices don't report GL_OES_framebuffer_object but support it 2013-08-16 14:38:04 -03:00
Ryan C. Gordon
e5511f4ca0 Patched to compile. 2013-08-16 12:51:29 -04:00
Gabriel Jacobo
054cb84414 [Bug 2042] OpenGL ES renderer tries to load OES functions unconditionally
Also, fail more gracefully when creating texture to avoid double free errors.
2013-08-16 13:37:27 -03:00
Sam Lantinga
a460259e6b Fixed alpha composition when destination alpha is transparent.
Jianyu Guan

I found I make a big mistake that when dstA==0, I just simply let *dstp=*srcp and forgot to make dstRGB = srcRGB*srcA.

The if consition "(*dstp & amask) == 0" in BlitRGBtoRGBPixelAlphaMMX and BlitRGBtoRGBPixelAlphaMMX3dNow should be removed.
2013-08-16 09:20:33 -07:00
Sam Lantinga
1873067816 Fixed alpha blending for the MMX blit functions
I see the Remarks of function SDL_BlitSurface shows that "when SDL_BLENDMODE_BLEND, we have dstA = srcA + (dstA * (1-srcA))". however, I tested some pictures but the result implies "dstA=arcA" actually. I stepped into the source code, and found after I set SDL_BLENDMODE_BLEND for the source surface, the final blit function is BlitRGBtoRGBPixelAlphaMMX when I use SDL_BlitSurface on my computer. And I found these codes:

    else if (alpha == amask) {
    /* opaque alpha -- copy RGB, keep dst alpha */
    *dstp = (*srcp & chanmask) | (*dstp & ~chanmask);

The same code is used in BlitRGBtoRGBPixelAlphaMMX3DNOW and BlitRGBtoRGBPixelAlpha. So I think they still keep dst alpha.

Best regards,
Jianyu Guan
2013-08-16 06:59:19 -07:00
Sam Lantinga
a0bc602061 Don't print "unrecognized key" message for an X11 keycode of 0. This can happen with composed characters. 2013-08-12 22:00:21 -07:00
Jørgen P. Tjernø
a100a39fe9 Mac: Fix restoring of Cmd-H-hidden fullscreen desktop windows.
This should fix http://bugzilla.libsdl.org/show_bug.cgi?id=1996

--HG--
extra : histedit_source : 5d56152c804e07c2750a8490d945f65f78d3cf93
2013-08-12 11:09:13 -07:00
Gabriel Jacobo
a3982939c5 Fixes #2022, do not resume on Android when surfaceChanged
If the app is in landscape mode and the user presses the power button, a pause
is followed immediately by a surfaceChanged event because the lock screen
is shown in portrait mode. This triggers a "false" resume.
So, we just pause and resume following the onWindowFocusChanged events.

Also, wait for SDL_APP_WILLENTERBACKGROUND and SDL_APP_DIDENTERBACKGROUND before
blocking the event pump.
2013-08-12 11:13:50 -03:00
Sam Lantinga
dd7da60a4f Fixed bug 2027 - Full-screen appears to be broken - hang in SDL_DestroyWindow()
Rainer Deyke

I'm running Linux Mint 15 with the Cinnamon window manager.  SDL_DestroyWindow consistently locks up for me when the window if fullscreen.
2013-08-11 19:56:43 -07:00
Philipp Wiesemann
286dc2e1dc Added missing call to SDL_stack_free().
On Windows this is needed because SDL_stack_alloc() wraps SDL_malloc().
2013-08-10 23:21:06 +02:00
Sam Lantinga
28b592cb5d Fixed bug 1925 - SDL_GetPerformanceFrequency returns incorrect value on iOS
PoopiSan

Currently on OSX and iOS simulator the values:
mach_base_info.denom = 1
mach_base_info.numer = 1

but on the real iOS device
mach_base_info.denom = 3
mach_base_info.numer = 125

The calculation is made using following formula
mach_base_info.denom / mach_base_info.numer * 1000000

but all values are int32 and the result is casted to int64.

This solves the problem:

return 1.0 * mach_base_info.denom / mach_base_info.numer * 1000000;
2013-08-10 11:19:30 -07:00
Sam Lantinga
df092588e8 Fixed whitespace 2013-08-10 10:57:54 -07:00
Sam Lantinga
e6e79353e8 Fixed bug 2024 - Update OSX Joystick code to fully support Saitek p2500 gamepad
Patrick Maloney

Saitek p2500 (Cyborg Rumble Force Pad) has a D-pad, two analog sticks, and numerous buttons.  SDL 2.x on OSX detected everything except the right-side analog stick.  The right-side stick is considered a 'simulation device' with the axes mapped to throttle and rudder.

The patch adds support for throttle and rudder on the HID simulation page.
2013-08-10 10:55:12 -07:00
Sam Lantinga
42c560b05d Check the return value of glGenTextures()
--HG--
extra : rebase_source : e079554f253890d862bfd5d51d7b229e3fcff3d9
2013-08-10 10:49:26 -07:00
Ryan C. Gordon
d4f386f5e3 Haptic: Let XInput update effects while they're still running. 2013-08-10 13:46:19 -04:00
Ryan C. Gordon
de6d6a5554 Removed no-longer-necessary comment. 2013-08-10 13:40:08 -04:00
Ryan C. Gordon
c35c4a6f18 Replaced SDL_HAPTIC_SQUARE with SDL_HAPTIC_LEFTRIGHT.
We needed a bit, so we're hoping no one needs this effect, especially when
it's fairly close to SDL_HAPTIC_SINE, we hope.

SDL_HAPTIC_LEFTRIGHT maps to XInput's functionality, so this removes the SINE
code for the XInput driver to keep things clean.

This also makes the simplified Rumble API use SDL_HAPTIC_LEFTRIGHT if
SDL_HAPTIC_SINE isn't available, to keep XInput working.

When we break the ABI, and can extend the supported capabilities field from
a Uint16, we'll add SDL_HAPTIC_SQUARE back in.

This patch is based on work by Ethan Lee.
2013-08-10 13:38:09 -04:00
Sam Lantinga
9444c11e99 Fixed bug 2007 - SDL_SetWindowMinimumSize() not implemented on X11 (thanks Rainer!) 2013-08-09 23:13:52 -07:00
Andreas Schiffler
7067bff470 Fix Bug 2021: Win32: Stack overflow due to recursive SDL_LogOutput on SDL_LogError without console; fix off-by-one error in SDLtest test suite 2013-08-08 21:29:30 -07:00
Sam Lantinga
58eedbb27e Removed unneeded Android audio code 2013-08-08 21:16:29 -07:00
Gabriel Jacobo
610264fb0b Start Android Audio Thread after audio buffer and AudioTrack are ready.
Also, it starts the Audio Thread from the native side, putting the code in line
with other backends.
2013-08-08 21:25:09 -03:00
Ryan C. Gordon
98a222e974 SDL_RegisterEvents() now rejects requests for numevents <= 0.
--HG--
extra : rebase_source : b45e0465ab759f92595b8cb0cbcad22d429f27f7
2013-08-08 15:04:30 -07:00
Jørgen P. Tjernø
4f1c2fd2c3 Mac: Fix mouse tap on 10.5.
There's no Block support in the runtime on 10.5, so the old code
wouldn't work.
2013-08-08 13:29:44 -07:00
Ryan C. Gordon
f43141b289 Backed out changeset 3f487d7d2d1d
This breaks applications.
2013-08-08 13:22:21 -07:00
Ryan C. Gordon
f3280d289a Send the SDL_QUIT when last window is destroyed, not during its close event.
--HG--
extra : rebase_source : 1a30ff486e98282c7d6a05d64eea0c4f3e026c41
2013-08-08 12:49:29 -07:00
Jørgen P. Tjernø
cf76f36660 Mac: Don't enable SDL_MAC_NO_SANDBOX by default.
To get this functionality, you need to use -DSDL_MAC_NO_SANDBOX=1 in
your CFLAGS.
2013-08-08 12:48:37 -07:00
Sam Lantinga
9f90ffbc9f Fixed crash if SDL_GetThreadName() is passed a NULL thread. 2013-08-08 12:21:26 -07:00
Sam Lantinga
5a167e03cd Fixed compile error 2013-08-08 02:34:21 -07:00
Sam Lantinga
780f3a273d Fixed bug 2009 - Creating texture from 32-bit surface with colorkey and per-surface alpha ignores the colorkey
To fix this we need to ignore the alpha channel in the colorkey comparison, which is the way colorkey comparisons are defined in SDL.

We also need to reset the alpha and color modulation when converting a surface.
2013-08-08 02:30:32 -07:00
Sam Lantinga
88b0f42281 Explicitly use the RTLD_LOCAL flag since that's the behavior we want.
The default on Linux is RTLD_LOCAL, the default on Mac OS X is RTLD_GLOBAL.
2013-08-07 17:26:28 -07:00
Jørgen P. Tjernø
5d1bee0f17 Ensure that the right window is current in SDL_GL_SwapWindow. 2013-08-07 16:29:28 -07:00
Jørgen P. Tjernø
9fb9406bbc Mac: Support for multiple contexts per SDL_Window. 2013-08-07 16:29:25 -07:00
Jørgen P. Tjernø
20c8287efc Mac: Don't -[NSOpenGLContext update] on (potentially) the wrong thread.
If the user is using their context from a non-main thread, we could be
calling -[NSOpenGLContext update] on our thread, while they were
accessing it on their thread.

With this change, we schedule updates when the event comes in on the
main thread, and act on them when the user calls SDL_GL_MakeCurrent or
SDL_GL_SwapWindow.
2013-08-07 16:29:21 -07:00
Jørgen P. Tjernø
8d8238f8ae Mac: Better mouse-grab if you define SDL_MAC_NO_SANDBOX.
This uses a better mouse grab if you define SDL_MAC_NO_SANDBOX. This
mouse grab uses CGEventTapCreate, which you cannot access if you have
sandboxing enabled.
2013-08-07 16:29:15 -07:00
Sam Lantinga
b03f072d95 Updated the name of the iOS platform 2013-08-07 14:00:41 -07:00
Ryan C. Gordon
ff5cf27049 Whoops, forgot to commit this piece. 2013-08-07 12:17:33 -07:00
Ryan C. Gordon
009e12858b SDL_Init() is now just a wrapper around SDL_InitSubSystem(). 2013-08-07 11:14:16 -07:00
Ryan C. Gordon
d99a4adff9 SDL_*Parachute() are no-ops, remove them. 2013-08-07 11:12:11 -07:00
Ryan C. Gordon
8c143ffe40 Removed SDL_AssertionsInit(). It's a no-op, let's keep it that way. :) 2013-08-07 11:00:44 -07:00
Sam Lantinga
89c3ac1eab Reset the viewport when we reset the other D3D state.
From Sythical:

Hello, I've created a simple SDL2 application which draws a texture on the screen. The problem I'm having is that if I launch another program which loads the UAC popup or if I lock my PC and then login again, the application stops drawing the texture. I tried adding SDL_Delay(10000) after SDL_RenderPresent(renderer). This made the texture stay on the screen for a little bit but the texture wasn't drawn again after the delay. Here's my code:

#include "SDL.h"

int main(int argc, char *argv[])
{
    SDL_Renderer *renderer;
    SDL_Window *window;
    SDL_Surface *surface;
    SDL_Texture *rect_texture;
    SDL_Event main_event;
    SDL_Rect rect_data;
    int enable_vsync = 1;

    if(SDL_Init(SDL_INIT_VIDEO) < 0) return 1;

    window = SDL_CreateWindow("SDL2 Application", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 600, 600, SDL_WINDOW_RESIZABLE);

    renderer = SDL_CreateRenderer(window, -1, enable_vsync ? SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC : SDL_RENDERER_ACCELERATED);
    SDL_SetRenderDrawColor(renderer, 20, 20, 30, 255);

    surface = SDL_LoadBMP("icon.bmp");
    rect_texture = SDL_CreateTextureFromSurface(renderer, surface);

    rect_data.w = 32; rect_data.h = 32;
    rect_data.x = 300; rect_data.y = 300;

    while(main_event.type != SDL_QUIT)
    {
        SDL_PollEvent(&main_event);

        SDL_RenderClear(renderer);
        SDL_RenderCopy(renderer, rect_texture, NULL, &rect_data);
        SDL_RenderPresent(renderer);
    }

    SDL_DestroyTexture(rect_texture);
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();

    return 0;
}
2013-08-07 01:14:04 -07:00
Sam Lantinga
cdcee9a581 Unify the SetWindowPos() calls so that they all set the window state based on SDL state.
This prevents a rogue call to SetWindowPos() from changing the state unexpectedly.
Also moved the size correction code above the window position query, because the initial window size can affect the positioning.
2013-08-07 00:46:42 -07:00