Commit Graph

2776 Commits

Author SHA1 Message Date
Sam Lantinga
147196ba05 Zero streaming textures to reduce confusion.
(See mailing list message with subject "Streaming textures not properly initialized?")
2011-02-17 18:58:43 -08:00
Sam Lantinga
b807895313 Allow the application to explicitly request a software renderer. 2011-02-17 12:03:48 -08:00
Sam Lantinga
acbbcf8bfd Our minimum Windows version is Windows 2000, so it's okay to directly call InitializeCriticalSectionAndSpinCount().. 2011-02-17 09:26:15 -08:00
Sam Lantinga
37df96b8c7 Fixed bug 1128
Patrick Baggett      2011-02-16 22:58:33 PST

This enhancement is for both x86/x64 Windows.

The SDL implementation of mutexes uses the Win32 API interprocess
synchronization primitive called a "Mutex". This implementation is subpar
because it has a much higher overhead than an intraprocess mutex. The exact
technical details are below, but my tests have shown that for reasonably high
contention (10 threads on 4 physical cores), it has 13x higher overhead than
the Win32 CriticalSection API.

If this enhancement is accepted, I will write a patch to implement SDL mutexes
using the critical section API, which should dramatically reduce overhead and
improve scalability.


-- Tech details --
Normally, Win32 Mutexes are used across process boundaries to synchronize
separate processes. In order to lock or unlock them, a user->kernel space
transition is necessary, even in the uncontented case on a single CPU machine.
Win32 CriticalSection objects can only be used within the same process virtual
address space and thus to lock one, does not require a user->kernel space
transition for the uncontended case, and additionally may spin a short while
before going into kernel wait. This small spin allows a thread to obtain the
lock if the mutex is released shortly after the thread starts spinning, in
effect bypassing the overhead of user->kernel space transition which has higher
overhead than the spinning itself.
2011-02-17 09:13:12 -08:00
Sam Lantinga
2f91270700 Implemented OpenGL ES RenderClear() 2011-02-17 02:23:48 -08:00
Sam Lantinga
834553b492 Fixed warnings about unused variables and so forth. 2011-02-17 02:18:41 -08:00
Sam Lantinga
dc6b8539ff Fixed SDL_RenderClear() if the render driver doesn't implement it. 2011-02-17 02:17:38 -08:00
Sam Lantinga
4aaf8a6795 Fixed crash when drawing non-textured primitives 2011-02-17 02:16:30 -08:00
Sam Lantinga
7390f75299 Fixed bug 1122 (spinlock fails to compile with -march=armv4t) 2011-02-16 17:17:21 -08:00
Sam Lantinga
dbb0a44739 Renamed SDL_keysym.h to SDL_keycode.h to avoid confusion. 2011-02-16 15:46:12 -08:00
Sam Lantinga
b5513f44c8 Fixed bug #1090 (SDL_BlitCopyOverlap() assumes memcpy() operates in order)
Even if we're blitting between two different surfaces their pixels might still overlap, because of SDL_CreateRGBSurfaceFrom(), so always use SDL_BlitCopy() and check for overlap in that function.

When handling overlapping surfaces, don't assume that memcpy() iterates forward, instead use memmove() correctly, and provide a fallback implementation of SDL_memmove() that handles the different cases.

Fixed a bug with SDL_memset() not completely filling lengths that aren't a multiple of 4.
Optimized SDL_memcpy() a bit using the same technique as SDL_memset().
2011-02-16 15:25:10 -08:00
Sam Lantinga
c6e3f767cc Source is not executable... 2011-02-16 12:52:09 -08:00
Sam Lantinga
4e23998953 Fixed bug #1121 (More than one device through SDL_JOYSTICK_DEVICE)
Chusslove Illich      2011-02-13 04:30:28 PST

Currently SDL_JOYSTICK_DEVICE environment variable can be used to add
exactly one topmost device. I think it would be nice if one could also set
several devices (e.g. a stick and a throttle) in this way, as a colon-
separated list. The attached patch implements this
2011-02-16 04:51:13 -08:00
Sam Lantinga
d3919b512d Fixed bug #1085 (Jump to NULL function pointer on ALSA_OpenDevice)
Bruno      2010-12-16 02:41:51 PST

Fix segfault in ALSA_OpenDevice()

When alsa is linked to libsdl instead of being loaded on demand at runtime the
alsa macro snd_pcm_hw_params_alloca(ptr); misbehaves.

That macro calls snd_pcm_hw_params_sizeof() in order to determine the amount of
memory to allocate but due to mis-placed define that function is replaced with
ALSA_snd_pcm_hw_params_sizeof by preprocessor (and in case of link to alsa that
function pointer is initialized to itself).

Attached patch fixes the issue.
2011-02-16 04:08:28 -08:00
Sam Lantinga
7537a3d9e3 Setup the screensaver in the OpenGL case as well. 2011-02-16 02:57:00 -08:00
Sam Lantinga
9e66acd263 Fixed bug #963 (Crash with OpenGL & window resizing)
The crash was already fixed, but the window doesn't need to be recreated if you're just changing the size of the OpenGL window.
2011-02-16 02:55:46 -08:00
Sam Lantinga
307a90d292 Made it possible to build SDL from a fresh checkout without any additional steps.
The trick is that if you're using configure and you don't want to have SDL_config.h and SDL_revision.h to show up as modified, you need to configure and build from a separate directory.

You also need to include SDL_revision.h directly if you want to use the SDL_REVISION constant, as a side effect of these changes.
2011-02-16 02:37:09 -08:00
Sam Lantinga
139e1c3bca Needed to allocate memory for the shadow surface if we needed to create one. 2011-02-16 01:40:44 -08:00
Sam Lantinga
3c7e4f7d74 Okay, _now_ SDL_WM_ToggleFullScreen() works on all platforms. :) 2011-02-16 01:26:39 -08:00
Sam Lantinga
f948a0679c Fixed resetting the Direc3D renderer on mode change 2011-02-16 00:11:48 -08:00
Sam Lantinga
18c4439bb9 Fixed a host of issues with Windows fullscreen modes. Toggling fullscreen OpenGL works now in my test environment. 2011-02-15 23:07:14 -08:00
Sam Lantinga
f79be99af3 Implemented X11 fullscreen toggling with modern window managers 2011-02-15 17:23:02 -08:00
Sam Lantinga
572c033148 Patch to fix includes from Frank Zago 2011-02-15 16:41:04 -08:00
Sam Lantinga
e5780896f6 Don't accidentally pick a YV12 format as the closest format. 2011-02-15 15:50:21 -08:00
Sam Lantinga
2e54bfdc19 Don't reset the viewport unless you have to. 2011-02-15 14:17:42 -08:00
Sam Lantinga
83c480de5c Whoops, need to actually clip to the viewport in the software renderer. 2011-02-15 14:10:50 -08:00
Sam Lantinga
b59da3ffdc Changed the concept of a render clip rect to a render viewport.
The render viewport is automatically re-centered when the window changes size, so applications that don't care will not have to handle recalculating their rendering coordinates.

Fixed API for drawing and filling multiple rectangles - the parameter should be an array of rects, not an array of pointers to rects.

Fixed API for updating window rects for consistency with other APIs - the order is pointer to array followed by count in array.
2011-02-15 13:59:59 -08:00
Ken Rogoway
8c8191deef Software scaling support. Not very fast, but it seems to work. 2011-02-14 11:50:18 -06:00
Sam Lantinga
e66826bbdf Patch from Ken Rogoway:
Migrate all of the recent changes into the SDL VS2005 project file.
Fix missing return value in SDL_pixels.c
Fix compile error in testscale.c, variable was incorrectly named.
Added VS2005 project file for testscale
2011-02-14 00:45:16 -08:00
Sam Lantinga
416f3ec4e0 Center the old SDL 1.2 screen in the window if we can't get the size we wanted. 2011-02-13 23:09:18 -08:00
Sam Lantinga
675f896925 Fixed crash while resizing a window on Mac OS X. 2011-02-13 22:53:12 -08:00
Sam Lantinga
02677f3644 Fixed renderer variable scope. 2011-02-13 14:05:33 -08:00
Sam Lantinga
789241249f Removed renderer definition, removed extra -I statements since no other platform has them (files should be explicit in their include paths). 2011-02-13 14:02:37 -08:00
Sam Lantinga
35db143abf Frank Zago to SDL
On 02/12/2011 01:44 PM, Sam Lantinga wrote:
> BTW, you probably want to nuke the NDS renderer and just implement these three
> functions instead:
>     int (*CreateWindowFramebuffer) (_THIS, SDL_Window * window, Uint32 *
> format, void ** pixels, int *pitch);
>     int (*UpdateWindowFramebuffer) (_THIS, SDL_Window * window, int numrects,
> SDL_Rect * rects);
>     void (*DestroyWindowFramebuffer) (_THIS, SDL_Window * window);

Patch attached. The renderer for the DS is not used anymore, but I left the
file in place if someone wants to finish it.

I've also added a README.ds and fixed the spinlocks.
2011-02-13 14:01:02 -08:00
Sam Lantinga
c7b5cc946d A few fixes:
Fixed creating render texture framebuffer.
Removed the need for palette watch, added surface format caching.
Added an SDL_DONTFREE flag so you can't free the window and 1.2 shadow surfaces.
2011-02-13 13:46:10 -08:00
Sam Lantinga
a4031e9f9f Whoops, work in progress, didn't mean to commit. 2011-02-13 01:31:07 -08:00
Sam Lantinga
ea3c0c473a Updated the platform test for the new CPU feature functions. 2011-02-13 01:29:29 -08:00
Sam Lantinga
e6ec7f6b28 Fixed bug #1117
There's a new event that's always sent when the window changes size, and that event is what the renderers listen for to determine if they need to rebind their context.
2011-02-12 19:02:14 -08:00
Sam Lantinga
dcfeae7397 Fixed bug #1116
Don't allocate the window's texture data until after creating the renderer, in case the renderer recreates the window.
2011-02-12 17:51:47 -08:00
Sam Lantinga
43c2c12758 This should match the header change. 2011-02-12 12:04:23 -08:00
Sam Lantinga
c3265bbc90 changeset: 5272:cb08ef104ac4
tag: tip
user: Martin Decky <martin@decky.cz>
date: Sat Feb 12 20:53:06 2011 +0100
summary: improve header files compatibility with SDL 1.2 applications (namely QEMU)
2011-02-12 12:04:00 -08:00
Sam Lantinga
fd246efe1e Removed the atomic file for the old API 2011-02-12 11:43:22 -08:00
Sam Lantinga
362639036a Frank Zago to sdl
The following patch fixes some of the bitrot for the Nintendo DS port.
The support is still basic at the moment, but it allows to run the "general"
test under the current head of tree (parent: 5269:11bd1585efb5 tip).
Most of the patch is mine, but I integrated a couple changes that John
Magnotti posted on Feb 1st.
2011-02-12 11:36:56 -08:00
Sam Lantinga
52f11a9f4f The YV12 image isn't w*h*2, it's actually w*h + w*h/4 + w*h/4 2011-02-12 10:13:53 -08:00
Sam Lantinga
8fed295309 Fixed a crash caused by the 1.2 code path getting a YV12 texture. :) 2011-02-12 08:17:58 -08:00
Sam Lantinga
5645af4067 Only expose the OpenGL flag to SDL 1.2 if it was requested.
The window flags mean the window is OpenGL capable.  The surface flag means that the surface is a stub surface representing a window that has an OpenGL context attached.
2011-02-12 08:17:37 -08:00
Sam Lantinga
5410391fe9 Removed private API use that was causing AppStore rejection
Pavel Kanzelsberger to SDL

I tried to submit a SDL application to the Mac AppStore and it got rejected because SDL cocoa is using a Private (non-public) API. Problematic part is here:

SDL_cocoaevents.m

@implementation NSApplication(SDL)
- (void)setRunning
{
    _running = 1;
}
@end

Symbol _running in NSApplication is private and shouldn't be used. Any ideas what could I do about this?
2011-02-12 07:57:35 -08:00
Sam Lantinga
acd458dad9 Ah there, that fixed it. :) 2011-02-12 00:42:39 -08:00
Sam Lantinga
5e1535525c Initial pass at shader YV12 support - doesn't quite work yet. 2011-02-12 00:25:02 -08:00
Sam Lantinga
aef6fb230a Fixed SSE4 detection, and split it into SSE 4.1 and 4.2 2011-02-11 23:02:35 -08:00