Wiki Page Content

Differences between revisions 21 and 52 (spanning 31 versions)
Revision 21 as of 2010-08-22 22:38:40
Size: 4109
Editor: SheenaSmith
Comment: update content (w/ Sam)
Revision 52 as of 2017-04-08 21:22:04
Size: 2484
Comment: Fixed description, see Remarks.
Deletions are marked like this. Additions are marked like this.
Line 2: Line 2:
#pragma disable-camelcase
||<tablewidth="100%"style="color: rgb(255, 0, 0); text-align: center;">DRAFT ||
#pragma camelcase off
Line 6: Line 5:
Use this function to initialize the SDL library. This must be called before using any other SDL function. Use this function to initialize the SDL library. This must be called before using most other SDL functions.
Line 19: Line 18:
Returns 0 on success or -1 on failure; call [[SDL_GetError]]() for more information. Returns 0 on success or a negative error code on failure; call [[SDL_GetError]]() for more information.
Line 22: Line 21:
=== C ===
Line 26: Line 24:
int main(int, char**)  {
    if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER) != 0) {
        fprintf(stderr,
                
"\nUnable to initialize SDL:  %s\n",                  SDL_GetError()
               
);
int main(int argc, char* argv[])
{
    if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) != 0) {
        SDL_Log("Unable to initialize SDL: %s", SDL_GetError());
Line 34: Line 30:
    atexit(SDL_Quit);
  
Line 37: Line 32:
  
    SDL_Quit();
Line 42: Line 39:
=== C++ ===
{{{#!highlight cpp
#include <exception>
#include <string>
#include "SDL.h"
== Remarks ==
[[SDL_Init]]() simply forwards to calling [[SDL_InitSubSystem]](). Therefore, the two may be used interchangeably. Though for readability of your code [[SDL_InitSubSystem]]() might be preferred.
Line 48: Line 42:
class InitError: public std::exception {
    public:
        InitError();
        InitError(const std::string&);
        virtual ~InitError() throw();
        virtual const char* what() const throw();
    private:
        std::string msg;
};
The [[CategoryIO|file I/O]] and [[CategoryThread|threading]] subsystems are initialized by default. You must specifically initialize other subsystems if you use them in your application.
Line 58: Line 44:
InitError::InitError():
  exception(), msg(SDL_GetError()) {}
InitError::InitError(const std::string& m):
  exception(), msg(m) {}
InitError::~InitError() throw() {}
const char* InitError::what() const throw() {
    return msg.c_str();
}
[[CategoryLog|Logging]] works without initialization, too.
Line 67: Line 46:
class SDL {
    public:
        SDL(Uint32 flags = 0) throw(InitError);
        virtual ~SDL();
};
'''flags''' may be any of the following OR'd together:
Line 73: Line 48:
SDL::SDL(Uint32 flags) throw(InitError) {
    if (SDL_Init(flags) != 0)
        throw InitError();
}

SDL::~SDL() {
    SDL_Quit();
}

/* ... */

#include <iostream>

int main(int argc, char **argv) {
    try {
        SDL sdl(SDL_INIT_VIDEO|SDL_INIT_TIMER);

        /* ... */

        return 0;
    }

    catch (const InitError& err) {
        std::cerr
            << "Error while initializing SDL: "
            << err.what() << std::endl;
    }
    
    return 1;
}
}}}

== Remarks ==
The [[CategoryEvents|Event Handling]], [[CategoryIO|File I/O]], and [[CategoryThread|Threading]] subsystems are initialized by default. To initialize other subsystems you must specifically call them. You can call SDL_Init(0) or SDL_Init(SDL_INIT_NOPARACHUTE) to initialize SDL without initializing any subsystems.

These are the flags which may be passed to [[SDL_Init]]() and may be OR'd together to initialize multiple subsystems.
##The following content is included on `SDL_InitSubSystem`. Any changes between these comments will be reflected there as well. Please use caution when editing. Start Include here.
Line 112: Line 52:
||'''SDL_INIT_VIDEO'''||video subsystem||
||'''SDL_INIT_JOYSTICK'''||joystick subsystem||
||'''SDL_INIT_VIDEO'''||video subsystem; automatically initializes the events subsystem||
||'''SDL_INIT_JOYSTICK'''||joystick subsystem; automatically initializes the events subsystem||
Line 115: Line 55:
||'''SDL_INIT_GAMECONTROLLER'''||controller subsystem; automatically initializes the joystick subsystem||
||'''SDL_INIT_EVENTS'''||events subsystem||
Line 116: Line 58:
||'''SDL_INIT_NOPARACHUTE'''||don't catch fatal signals||
||'''SDL_INIT_EVENTTHREAD'''||run the event loop in a separate thread (not supported by all OSs)||
||'''SDL_INIT_NOPARACHUTE'''||compatibility; this flag is ignored||
Line 119: Line 60:
This function initializes the subsystems specified by '''flags'''.
Unless the SDL_INIT_NOPARACHUTE flag is set, it will install cleanup signal handlers for some commonly ignored fatal signals (like SIGSEGV).
##End Include here.
Line 122: Line 62:
Note that the event system is actually started by the video subsystem, so using SDL_INIT_EVENTTHREAD without SDL_INIT_VIDEO is pointless.

*<<BR>>,,Typical cause of this error,, ^The most common cause for error^ is using a particular display without having ,,according,, ^the corresponding^ subsystem support^ed^, such as missing ^a^ mouse driver when using ^<<Color2(green,using what? SDL? A mouse?)>>^ with ^a^ framebuffer <<Color2(green,Should framebuffer be set apart somehow like `framebuffer`?)>> device. In this case you can either compile SDL without ^a^ mouse device, or set ^the^ "SDL_NOMOUSE=1" environment variable before running your application. <<BR>>*
If you want to initialize subsystems separately you would call [[SDL_Init]](0) followed by [[SDL_InitSubSystem]]() with the desired subsystem flag.
Line 127: Line 65:
 .[[SDL_InitSubSystem]] 
 .[[SDL_Quit]]
 .[[SDL_WasInit]] 
 .[[SDL_InitSubSystem]]
 .[[SDL_Quit]]
.[[SDL_SetMainReady]]
 .[[SDL_WasInit]]

SDL_Init

Use this function to initialize the SDL library. This must be called before using most other SDL functions.

Syntax

int SDL_Init(Uint32 flags)

Function Parameters

flags

subsystem initialization flags; see Remarks for details

Return Value

Returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.

Code Examples

#include "SDL.h"

int main(int argc, char* argv[])
{
    if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) != 0) {
        SDL_Log("Unable to initialize SDL: %s", SDL_GetError());
        return 1;
    }

    /* ... */

    SDL_Quit();

    return 0;
}

Remarks

SDL_Init() simply forwards to calling SDL_InitSubSystem(). Therefore, the two may be used interchangeably. Though for readability of your code SDL_InitSubSystem() might be preferred.

The file I/O and threading subsystems are initialized by default. You must specifically initialize other subsystems if you use them in your application.

Logging works without initialization, too.

flags may be any of the following OR'd together:

SDL_INIT_TIMER

timer subsystem

SDL_INIT_AUDIO

audio subsystem

SDL_INIT_VIDEO

video subsystem; automatically initializes the events subsystem

SDL_INIT_JOYSTICK

joystick subsystem; automatically initializes the events subsystem

SDL_INIT_HAPTIC

haptic (force feedback) subsystem

SDL_INIT_GAMECONTROLLER

controller subsystem; automatically initializes the joystick subsystem

SDL_INIT_EVENTS

events subsystem

SDL_INIT_EVERYTHING

all of the above subsystems

SDL_INIT_NOPARACHUTE

compatibility; this flag is ignored

If you want to initialize subsystems separately you would call SDL_Init(0) followed by SDL_InitSubSystem() with the desired subsystem flag.


CategoryAPI, CategoryInit

None: SDL_Init (last edited 2017-04-08 21:22:04 by PhilippWiesemann)

(Page Info.)
Feedback
Please include your contact information if you'd like to receive a reply.
Submit