Mercurial > sdl-ios-xcode
view test/README @ 3485:e77a69aae239
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.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Tue, 24 Nov 2009 04:48:12 +0000 |
parents | 3e3724fb829e |
children | cf7976fd3258 |
line wrap: on
line source
These are test programs for the SDL library: checkkeys Watch the key events to check the keyboard graywin Display a gray gradient and center mouse on spacebar loopwave Audio test -- loop playing a WAV file testalpha Display an alpha faded icon -- paint with mouse testaudioinfo Lists audio device capabilities testbitmap Test displaying 1-bit bitmaps testblitspeed Tests performance of SDL's blitters and converters. testcdrom Sample audio CD control program testcursor Tests custom mouse cursor testdyngl Tests dynamically loading OpenGL library testerror Tests multi-threaded error handling testfile Tests RWops layer testgamma Tests video device gamma ramp testgl A very simple example of using OpenGL with SDL testgl2 An even simpler example using the SDL 1.3 API testhread Hacked up test of multi-threading testiconv Tests international string conversion testjoystick List joysticks and watch joystick events testkeys List the available keyboard keys testloadso Tests the loadable library layer testlock Hacked up test of multi-threading and locking testmultiaudio Tests using several audio devices testoverlay Tests the software/hardware overlay functionality. testoverlay2 Tests the overlay flickering/scaling during playback. testpalette Tests palette color cycling testplatform Tests types, endianness and cpu capabilities testsem Tests SDL's semaphore implementation testsprite Example of fast sprite movement on the screen testsprite2 Improved version of testsprite testtimer Test the timer facilities testver Check the version and dynamic loading and endianness testvidinfo Show the pixel format of the display and perfom the benchmark testwin Display a BMP image at various depths testwm Test window manager -- title, icon, events testwm2 Improved version of testwm threadwin Test multi-threaded event handling torturethread Simple test for thread creation/destruction