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