• Show log

    Commit

  • Hash : d76c2cc1
    Author : Sam Lantinga
    Date : 2014-01-30T12:30:40

    Add a new hint SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT that allows SDL_CreateWindowFrom() to set the pixel format of another SDL_Window (and also will set the SDL_WINDOW_OPENGL flag on the window created with SDL_CreateWindowFrom()).
    
    The reasoning behind this change is that source2 in -tools mode has a single OpenGL context that is used with multiple different windows.  Some of those windows are created outside the engine (i.e. with Qt) and therefore we need to use SDL_CreateWindowFrom() to get an SDL_Window for those.  The requirement for sharing an OpenGL context across multiple different windows is that each window has the same pixel format.  To facilitate this, I now set SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT for the main window before calling SDL_CreateWindowFrom().  When I do this, SDL_CreateWindowFrom() will:
    
    1. Set the pixel format of the returned window to the same pixel format as this SDL_Window passed in with the hint
    2. The flag SDL_WINDOW_OPENGL will be set on the new window so it can be used for OpenGL rendering.
    
    I only currently implemented this for Win32/WGL so implementing it for other platforms (i.e. X11) remains a TODO.
    
    CR: SamL
    
    Some pseudocode that shows how this is used in Source2:
    
    HWND hExternalHwnd; // HWND that was established outside of SDL
    
    // Create main window (happens inside platwindow.cpp)
    SDL_Window *mainWindow = SDL_CreateWindow( , SDL_WINDOW_OPENGL .. );
    // Create GL context, happens inside rendersystemgl
    SDL_GLContext onlyContext = SDL_GL_CreateContext( mainWindow );
    
    // Now I need to create another window from hEternalHwnd for my swap chain that will have the same pixel format as mainWindow, so set the hint
    SDL_SetHint( SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT, CFmtStr( %p, mainWindow) );
    
    // Create the secondary window.  This returned window will have SDL_WINDOW_OPENGL set and share a pixel format with mainWindow from the hint
    SDL_Window *secondaryWindow = SDL_CreateWindowFrom( hExternalHwnd );
    
    // To render to the main window:
    SDL_GL_MakeCurrent( mainWindow, onlyContext );
    // Do some rendering to main window
    
    // To render to the secondary window:
    SDL_GLMakeCurrent( secondaryWindow, onlyContext );
    // Do some rendering to secondary window
    

  • Properties

  • Git HTTP https://git.kmx.io/kc3-lang/SDL.git
    Git SSH git@git.kmx.io:kc3-lang/SDL.git
    Public access ? public
    Description

    Fork of https://github.com/libsdl-org/SDL

    Users
    thodg_m kc3_lang_org thodg_w thodg_l www_kmx_io thodg
    Tags