Example #1
0
static GPU_Target* Init(GPU_Renderer* renderer, GPU_RendererID renderer_request, Uint16 w, Uint16 h, GPU_WindowFlagEnum SDL_flags)
{
	SDL_Window* window;
	
    GPU_Log(" %s (dummy)\n", __func__);
    
	renderer->requested_id = renderer_request;
    renderer->GPU_init_flags = GPU_GetPreInitFlags();
	renderer->SDL_init_flags = SDL_flags;
	
	window = NULL;
    // Is there a window already set up that we are supposed to use?
    if(renderer->current_context_target != NULL)
        window = SDL_GetWindowFromID(renderer->current_context_target->context->windowID);
    else
        window = SDL_GetWindowFromID(GPU_GetInitWindow());
    
    if(window == NULL)
    {
        // Set up window flags
        if(!(renderer->SDL_init_flags & SDL_WINDOW_HIDDEN))
            renderer->SDL_init_flags |= SDL_WINDOW_SHOWN;
        
        window = SDL_CreateWindow("",
                                  SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
                                  w, h,
                                  renderer->SDL_init_flags);

        if(window == NULL)
        {
            GPU_PushErrorCode("GPU_Init", GPU_ERROR_BACKEND_ERROR, "Window creation failed.");
            return NULL;
        }
        
        GPU_SetInitWindow(SDL_GetWindowID(window));
    }
    else
        renderer->SDL_init_flags = SDL_flags;
	
	renderer->enabled_features = 0xFFFFFFFF;  // Pretend to support them all
	
	renderer->current_context_target = renderer->impl->CreateTargetFromWindow(renderer, SDL_GetWindowID(window), renderer->current_context_target);
    if(renderer->current_context_target == NULL)
        return NULL;
    
    
    // If the dimensions of the window don't match what we asked for, then set up a virtual resolution to pretend like they are.
    if(!(renderer->GPU_init_flags & GPU_INIT_DISABLE_AUTO_VIRTUAL_RESOLUTION) && w != 0 && h != 0 && (w != renderer->current_context_target->w || h != renderer->current_context_target->h))
        renderer->impl->SetVirtualResolution(renderer, renderer->current_context_target, w, h);
    
    return renderer->current_context_target;
}
Example #2
0
bool LWindow::init() {
  //Create window
  mWindow = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE );
  if( mWindow != NULL ) {
    mMouseFocus = true;
    mKeyboardFocus = true;
    mWidth = SCREEN_WIDTH;
    mHeight = SCREEN_HEIGHT;

    //Create renderer for window
    mRenderer = SDL_CreateRenderer( mWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC );
    if( mRenderer == NULL ) {
      printf( "Renderer could not be created! SDL Error: %s\n", SDL_GetError() );
      SDL_DestroyWindow( mWindow );
      mWindow = NULL;
    } else {
      //Initialize renderer color
      SDL_SetRenderDrawColor( mRenderer, 0xFF, 0xFF, 0xFF, 0xFF );

      //Grab window identifier
      mWindowID = SDL_GetWindowID( mWindow );

      //Flag as opened
      mShown = true;
    }
  } else {
    printf( "Window could not be created! SDL Error: %s\n", SDL_GetError() );
  }

  return mWindow != NULL && mRenderer != NULL;
}
Example #3
0
	bool Multitouch::wasTouchActive(Window*window, unsigned int touchID)
	{
		if(window == nullptr)
		{
			SDL_Window*sdlwin = SDL_GetMouseFocus();
			if(sdlwin != nullptr)
			{
				window = EventManager::getWindowFromID(SDL_GetWindowID(sdlwin));
				if(window == nullptr)
				{
					return false;
				}
			}
		}
		
		bool pressed = false;
		Multitouch_state_mutex.lock();
		unsigned int index = Multitouch_indexOfData(Multitouch_prevActiveTouches, window, touchID);
		if(index != ARRAYLIST_NOTFOUND)
		{
			pressed = true;
		}
		Multitouch_state_mutex.unlock();
		
		return pressed;
	}
Example #4
0
	Vector2d Multitouch::getPreviousPosition(Window*window, unsigned int touchID)
	{
		if(window == nullptr)
		{
			SDL_Window*sdlwin = SDL_GetMouseFocus();
			if(sdlwin != nullptr)
			{
				window = EventManager::getWindowFromID(SDL_GetWindowID(sdlwin));
				if(window == nullptr)
				{
					return Vector2d(0,0);
				}
			}
		}
		
		Multitouch_state_mutex.lock();
		unsigned int index = Multitouch_indexOfData(Multitouch_prevActiveTouches, window, touchID);
		if(index == ARRAYLIST_NOTFOUND)
		{
			Multitouch_state_mutex.unlock();
			return Vector2d(0,0);
		}
		Vector2d vect = Multitouch_prevActiveTouches.get(index).position;
		Multitouch_state_mutex.unlock();
		return vect;
	}
Example #5
0
File: window.cpp Project: karhu/sol
    WindowHandle WindowSystem::create(uint32_t width, uint32_t height)
    {
        WindowData data;
        SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE,8);
        data.sdl_window = SDL_CreateWindow(
            "",
            SDL_WINDOWPOS_UNDEFINED,
            SDL_WINDOWPOS_UNDEFINED,
            width, height,
            SDL_WINDOW_RESIZABLE | SDL_WINDOW_OPENGL);
        uint32_t id = SDL_GetWindowID((SDL_Window*)data.sdl_window);
        m_data.insert(std::make_pair(id,data));

        if (m_gl_context == nullptr) {
            m_gl_context = SDL_GL_CreateContext(  (SDL_Window*)data.sdl_window );
            if( m_gl_context == nullptr )
            {
                printf( "OpenGL context could not be created! SDL Error: %s\n", SDL_GetError() );
                return WindowHandle();
            }
        }

       if (m_data.size() == 1) m_main_window = id;

       return WindowHandle(id);
    }
Example #6
0
	Vector2d Mouse::getPreviousPosition(Window*window, unsigned int mouseIndex)
	{
		if(window == nullptr)
		{
			SDL_Window*sdlwin = SDL_GetMouseFocus();
			if(sdlwin != nullptr)
			{
				window = EventManager::getWindowFromID(SDL_GetWindowID(sdlwin));
				if(window == nullptr)
				{
					return Vector2d(0,0);
				}
			}
		}
		
		Mouse_state_mutex.lock();
		unsigned int index = Mouse_indexOfData(Mouse_prevStates, window, mouseIndex);
		if(index == ARRAYLIST_NOTFOUND)
		{
			Mouse_state_mutex.unlock();
			return Vector2d(0,0);
		}
		Vector2d vect = Mouse_prevStates.get(index).position;
		Mouse_state_mutex.unlock();
		return vect;
	}
Example #7
0
/// Called by view factory to create window
void PlasmacoreView::init ()
{
  printf("LOG: PlasmacoreView::init()\n");
#ifdef __EMSCRIPTEN__
  SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
#endif
  SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
  SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
  SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
  SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1);

  create_window();
  if (!window) throw "Didn't create window";

  gl_context = SDL_GL_CreateContext(window);
  if (!gl_context) throw "Didn't create GL context";

  swindowID = SDL_GetWindowID(window);
  sdl_windows[swindowID] = this;

  if (SDL_GL_MakeCurrent(window, gl_context))
  {
    fprintf( stderr, "SDL_GL_MakeCurrent() failed: %s\n", SDL_GetError() );
    return;
  }

  glClearColor(1,1,0,1);
  glClear(GL_COLOR_BUFFER_BIT);

  configure(); // Is there a reason not to call this here?
}
Example #8
0
	bool Mouse::wasButtonPressed(Window*window, unsigned int mouseIndex, Mouse::Button button)
	{
		if(window == nullptr)
		{
			SDL_Window*sdlwin = SDL_GetMouseFocus();
			if(sdlwin != nullptr)
			{
				window = EventManager::getWindowFromID(SDL_GetWindowID(sdlwin));
				if(window == nullptr)
				{
					return false;
				}
			}
		}
		
		bool pressed = false;
		Mouse_state_mutex.lock();
		unsigned int index = Mouse_indexOfData(Mouse_prevStates, window, mouseIndex);
		if(index != ARRAYLIST_NOTFOUND)
		{
			if(Mouse_prevStates[index].state[button])
			{
				pressed = true;
			}
		}
		Mouse_state_mutex.unlock();
		
		return pressed;
	}
Example #9
0
ross_internal void 
manage_events(Input input, SDL_Window *window)
{
    if(input.keyboard.alt && input.keyboard.f4)
    {
        global_running = 0;
    }

    SDL_Event event;
    while(SDL_PollEvent(&event))
    {
        switch(event.type)
        {
            case SDL_WINDOWEVENT:
                {
                    u32 window_id = SDL_GetWindowID(window);
                    if(event.window.windowID == window_id)
                    {
                        switch(event.window.event)
                        {
                            case SDL_WINDOWEVENT_CLOSE:
                                {
                                    global_running = 0;
                                } break;
                        }
                    }
                } break;
            case SDL_QUIT:
                {
                    global_running = 0;
                } break;
        }
    }
}
Example #10
0
		bool isWindowEvent(const SDL_Event& e, SDL_Window* window)
		{
			auto mainId = SDL_GetWindowID(window);
			switch(e.type)
			{
			case SDL_WINDOWEVENT:
				return mainId == e.window.windowID;
			case SDL_KEYDOWN:
			case SDL_KEYUP:
				return mainId == e.key.windowID;
			case SDL_TEXTEDITING:
				return mainId == e.edit.windowID;
			case SDL_TEXTINPUT:
				return mainId == e.text.windowID;
			case SDL_MOUSEMOTION:
				return mainId == e.motion.windowID;
			case SDL_MOUSEBUTTONDOWN:
			case SDL_MOUSEBUTTONUP:
				return mainId == e.button.windowID;
			case SDL_MOUSEWHEEL:
				return mainId == e.wheel.windowID;
			default:
				// Event doesn't have a window ID
				return true;
			}
		}
Example #11
0
void SDLEventHandler::onWindowEvent(const SDL_WindowEvent& e)
{
    /*
     *SDL provides two "resize" events.
     * Warp Drive only provides treatment for the "resize request"
     * type, for the moment. Should it prove useful, this will be ammended
     */
    if (e.windowID != SDL_GetWindowID(DisplayManager::instance()->getScreen()))
    {
        return;
    }

    switch (e.event)
    {
        case SDL_WINDOWEVENT_SHOWN:
            onWindowShown(e);
            break;
        case SDL_WINDOWEVENT_HIDDEN:
            onWindowHidden(e);
            break;
        case SDL_WINDOWEVENT_EXPOSED:
            onWindowExposed(e);
            break;
        case SDL_WINDOWEVENT_MOVED:
            onWindowMoved(e);
            break;
        case SDL_WINDOWEVENT_SIZE_CHANGED:
            onWindowResized(e);
            break;
        case SDL_WINDOWEVENT_MINIMIZED:
            onWindowMinimized(e);
            break;
        case SDL_WINDOWEVENT_MAXIMIZED:
            onWindowMaximized(e);
            break;
        case SDL_WINDOWEVENT_RESTORED:
            onWindowRestored(e);
            break;
        case SDL_WINDOWEVENT_ENTER:
            onMouseEntered(e);
            break;
        case SDL_WINDOWEVENT_LEAVE:
            onMouseLeft(e);
            break;
        case SDL_WINDOWEVENT_FOCUS_GAINED:
            onKeyboardFocus(e);
            break;
        case SDL_WINDOWEVENT_FOCUS_LOST:
            onKeyboardFocusLost(e);
            break;
        case SDL_WINDOWEVENT_CLOSE:
            onWindowCloseRequest(e);
            break;
    default:
        // Unexpected event type!
        assert(0);
        break;
    }
}
Example #12
0
Window::Window(int width, int height, const std::string & title) : width(width), height(height)
{
	sdlWindow = SDL_CreateWindow(title.c_str(), SDL_WINDOWPOS_CENTERED,
								 SDL_WINDOWPOS_CENTERED, width, height,
								 SDL_WINDOW_OPENGL);
	sdlWindowID = SDL_GetWindowID(sdlWindow);
	sdlGLContext = SDL_GL_CreateContext(sdlWindow);
}
Example #13
0
void ZWindow::PostClearUpEvent()
{
	SDL_Event event;
	event.type=SDL_USEREVENT;
	event.user.code=SET_CLEAR_UP;
	event.user.windowID=SDL_GetWindowID(m_win);
	SDL_PushEvent(&event);
}
Example #14
0
bool DKObject::WrongWindow(SDL_Event* event)
{
	if(SDL_GetWindowID(win) != event->window.windowID){
		return true;
	}
	return false;

}
SkOSWindow* SkOSWindow::GetInstanceForWindowID(Uint32 windowID) {
    if (gCurrentWindow &&
        gCurrentWindow->fWindow &&
        SDL_GetWindowID(gCurrentWindow->fWindow) == windowID) {
        return gCurrentWindow;
    }
    return nullptr;
}
Example #16
0
/**
 * @brief Window Creation and recreation.
 */
bool WindowManager::createWindow(bool fullScreen)
{
    // If Window Already Exists, destory so we can recreate it.
    if(m_window)
    {
        //std::cout << "Destroy SDL Window" << std::endl;
        SDL_DestroyWindow(m_window);
        m_window = nullptr;
    }

    int display_height = (m_height / 2);
    int display_width  = (m_width / 2);

    // create window in in full screen or windowed mode.
    if(fullScreen)
    {
        m_window = SDL_CreateWindow("EtherTerm 0.4.6 Alpha Demo - Full Screen",
                                    (m_position_placement % 2 == 0) ? SDL_WINDOWPOS_CENTERED : display_width,
                                    (m_position_placement % 2 == 0) ? SDL_WINDOWPOS_CENTERED : display_height,
                                    m_width,
                                    m_height,
                                    SDL_WINDOW_SHOWN | SDL_WINDOW_FULLSCREEN_DESKTOP);

        if(!m_window) // window init success
        {
            SDL_Log("Terminal::restartWindowSize() SDL_CreateWindow globalWindow: %s",
                    SDL_GetError());
            assert(m_window);
        }
    }
    else
    {
        m_window = SDL_CreateWindow("EtherTerm 0.4.6 Alpha Demo - Windowed",
                                    (m_position_placement % 2 == 0) ? SDL_WINDOWPOS_CENTERED : display_width,
                                    (m_position_placement % 2 == 0) ? SDL_WINDOWPOS_CENTERED : display_height,
                                    m_width,
                                    m_height,
                                    SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE);
        if(!m_window) // window init success
        {
            SDL_Log("Terminal::restartWindowSize() SDL_CreateWindow globalWindow: %s",
                    SDL_GetError());
            assert(m_window);
        }
    }

    // Set the Window ID
    m_window_id = SDL_GetWindowID(m_window);

    std::string title = "EtherTerm 0.4.6 Alpha Demo w/ Multiple Windows - Window ID: ";
    title.append(std::to_string(m_window_id));
    SDL_SetWindowTitle(m_window, title.c_str());

    // Display and move focus to the new window.
    SDL_ShowWindow(m_window);
    SDL_RaiseWindow(m_window);
    return true;
}
Example #17
0
bool initPeripherals(void) {
	// Init SDL
	if(SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) != 0) {
		printf("[FATAL]SDL could not initialize. SDL: %s\n", SDL_GetError());
		return true;
	}
	SDL_version v;
	SDL_GetVersion(&v);
	printf("[INFO]SDL version %d.%d.%d\n", v.major, v.minor, v.patch);

	// Init window
	wndWidth = 480;
	wndHeight = 360;
	wnd = SDL_CreateWindow("Unofficial Scratch Project Player", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, wndWidth, wndHeight, SDL_WINDOW_SHOWN|SDL_WINDOW_RESIZABLE);
	if(wnd == NULL) {
		printf("[FATAL]SDL could not create new window. SDL: %s\n", SDL_GetError());
		return true;
	}

	// Init OpenGL
	SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
	SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
	SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
	SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG);
	//SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
	//SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 4);
	
	gl = SDL_GL_CreateContext(wnd);
	if(gl == NULL) {
		printf("[FATAL]SDL could not create an OpenGL context. SDL: %s\n", SDL_GetError());
		return true;
	}

	if(SDL_GL_SetSwapInterval(-1) != 0) {
		printf("[NOTE]SDL could not enable late swap tearing. Trying vsync instead. SDL: %s\n", SDL_GetError());
		if(SDL_GL_SetSwapInterval(1) != 0)
			printf("[WARNING]SDL could not enable vsync: %s\n", SDL_GetError());
	}

	glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
	SDL_GL_SwapWindow(wnd);

	// finish setting OpenGL options
	//glEnable(GL_MULTISAMPLE);
	glEnable(GL_BLEND);
	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

	wndID = SDL_GetWindowID(wnd);
	hasFocus = true; hasMouse = true; windowIsShowing = true;
	shouldQuit = false;

	printf("[INFO]OpenGL: version %s ; glsl version %s ; vendor %s ; renderer %s\n", glGetString(GL_VERSION), glGetString(GL_SHADING_LANGUAGE_VERSION), glGetString(GL_VENDOR), glGetString(GL_RENDERER));

	initGraphics();
	//initAudio();

	return false;
}
Example #18
0
void I_GetEvent(void)
{
    extern void I_HandleKeyboardEvent(SDL_Event *sdlevent);
    extern void I_HandleMouseEvent(SDL_Event *sdlevent);
    SDL_Event sdlevent;

    SDL_PumpEvents();

    while (SDL_PollEvent(&sdlevent))
    {
        switch (sdlevent.type)
        {
            case SDL_KEYDOWN:
                if (ToggleFullScreenKeyShortcut(&sdlevent.key.keysym))
                {
                    I_ToggleFullScreen();
                    break;
                }
                // deliberate fall-though

            case SDL_KEYUP:
		I_HandleKeyboardEvent(&sdlevent);
                break;

            case SDL_MOUSEBUTTONDOWN:
            case SDL_MOUSEBUTTONUP:
            case SDL_MOUSEWHEEL:
                if (usemouse && !nomouse && window_focused)
                {
                    I_HandleMouseEvent(&sdlevent);
                }
                break;

            case SDL_QUIT:
                if (screensaver_mode)
                {
                    I_Quit();
                }
                else
                {
                    event_t event;
                    event.type = ev_quit;
                    D_PostEvent(&event);
                }
                break;

            case SDL_WINDOWEVENT:
                if (sdlevent.window.windowID == SDL_GetWindowID(screen))
                {
                    HandleWindowEvent(&sdlevent.window);
                }
                break;

            default:
                break;
        }
    }
}
bool Window_mac::initWindow() {
    if (fRequestedDisplayParams.fMSAASampleCount != fMSAASampleCount) {
        this->closeWindow();
    }
    // we already have a window
    if (fWindow) {
        return true;
    }

    constexpr int initialWidth = 1280;
    constexpr int initialHeight = 960;

    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);

    SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
    SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
    SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 0);
    SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8);

    SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1);

    if (fRequestedDisplayParams.fMSAASampleCount > 1) {
        SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
        SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, fRequestedDisplayParams.fMSAASampleCount);
    } else {
        SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 0);
    }
    // TODO: handle other display params

    uint32_t windowFlags = SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE;
    fWindow = SDL_CreateWindow("SDL Window", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
                               initialWidth, initialHeight, windowFlags);

    if (!fWindow) {
        return false;
    }

    fMSAASampleCount = fRequestedDisplayParams.fMSAASampleCount;

    // add to hashtable of windows
    fWindowID = SDL_GetWindowID(fWindow);
    gWindowMap.add(this);

    fGLContext = SDL_GL_CreateContext(fWindow);
    if (!fGLContext) {
        SkDebugf("%s\n", SDL_GetError());
        this->closeWindow();
        return false;
    }

    return true;
}
Example #20
0
void loop()
{
    SDL_Event event;
    int i;
    int status;

    /* Check for events */
    ++frames;
    while (SDL_PollEvent(&event) && !done) {
        switch (event.type) {
        case SDL_WINDOWEVENT:
            switch (event.window.event) {
                case SDL_WINDOWEVENT_RESIZED:
                    for (i = 0; i < state->num_windows; ++i) {
                        if (event.window.windowID == SDL_GetWindowID(state->windows[i])) {
                            int w, h;
                            status = SDL_GL_MakeCurrent(state->windows[i], context[i]);
                            if (status) {
                                SDL_Log("SDL_GL_MakeCurrent(): %s\n", SDL_GetError());
                                break;
                            }
                            /* Change view port to the new window dimensions */
                            SDL_GL_GetDrawableSize(state->windows[i], &w, &h);
                            glViewport(0, 0, w, h);
                            state->window_w = event.window.data1;
                            state->window_h = event.window.data2;
                            /* Update window content */
                            Render(event.window.data1, event.window.data2, &datas[i]);
                            SDL_GL_SwapWindow(state->windows[i]);
                            break;
                        }
                    }
                    break;
            }
        }
        SDLTest_CommonEvent(state, &event, &done);
    }
    if (!done) {
      for (i = 0; i < state->num_windows; ++i) {
          status = SDL_GL_MakeCurrent(state->windows[i], context[i]);
          if (status) {
              SDL_Log("SDL_GL_MakeCurrent(): %s\n", SDL_GetError());

              /* Continue for next window */
              continue;
          }
          Render(state->window_w, state->window_h, &datas[i]);
          SDL_GL_SwapWindow(state->windows[i]);
      }
    }
#ifdef __EMSCRIPTEN__
    else {
        emscripten_cancel_main_loop();
    }
#endif
}
Example #21
0
bool gl_set_video_mode(struct graphics_data *graphics, int width, int height,
 int depth, bool fullscreen, bool resize)
{
  struct sdl_render_data *render_data = graphics->render_data;

#if SDL_VERSION_ATLEAST(2,0,0)
  SDL_GLContext context;

  render_data->window = SDL_CreateWindow("MegaZeux",
   SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height,
   GL_STRIP_FLAGS(sdl_flags(depth, fullscreen, resize)));

  if(!render_data->window)
  {
    warn("Failed to create window: %s\n", SDL_GetError());
    return false;
  }

  render_data->renderer =
   SDL_CreateRenderer(render_data->window, -1, SDL_RENDERER_ACCELERATED);

  if(!render_data->renderer)
  {
    warn("Failed to create renderer: %s\n", SDL_GetError());
    return false;
  }

  context = SDL_GL_CreateContext(render_data->window);
  if(!context)
  {
    warn("Failed to create context: %s\n", SDL_GetError());
    return false;
  }

  if(SDL_GL_MakeCurrent(render_data->window, context))
  {
    warn("Failed to make context current: %s\n", SDL_GetError());
    return false;
  }

  sdl_window_id = SDL_GetWindowID(render_data->window);

#else // !SDL_VERSION_ATLEAST(2,0,0)

  if(!SDL_SetVideoMode(width, height, depth,
       GL_STRIP_FLAGS(sdl_flags(depth, fullscreen, resize))))
    return false;

#endif // !SDL_VERSION_ATLEAST(2,0,0)

  render_data->screen = NULL;
  render_data->shadow = NULL;

  return true;
}
Example #22
0
	virtual bool initSDL(int x, int y, int w, int h, std::string wtitle, Uint32 flags)
	{
		bool success = true;

		mTitle = wtitle;

		//Set the scaling quality to nearest-pixel
		if (SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "0") < 0)
		{
			success = false;
			logger().error() << "Error: Failed to set Render Scale Quality" << logs::end;
			return success;
		}

		//Create window
		mWindow = SDL_CreateWindow(mTitle.c_str(), x, y, w, h, flags);
		if (mWindow != NULL)
		{
			mMouseFocus = true;
			mKeyboardFocus = true;
			mWidth = w;
			mHeight = h;

			//Create renderer for window
			mRenderer = SDL_CreateRenderer(mWindow, -1,
					SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
			if (mRenderer == NULL)
			{
				logger().error() << "Error: Renderer could not be created! SDL Error: "
						<< SDL_GetError() << logs::end;
				SDL_DestroyWindow(mWindow);
				mWindow = NULL;
				success = false;
				return success;
			}
			else
			{
				//Grab window identifier
				mWindowID = SDL_GetWindowID(mWindow);

				//Flag as opened
				mShown = true;
			}
		}
		else
		{
			success = false;
			logger().error() << "Error: Window could not be created! SDL Error: " << SDL_GetError()
					<< logs::end;
			return success;
		}
		logger().debug() << "Window initSDL => ID= " << mWindowID << logs::end;
		return success;
	}
Example #23
0
int main(int argc, char **argv)
{
    init_sdl(&Render_Context::sdlWindow, &Render_Context::sdlRenderer,
             &Render_Context::sdlTexture, &Render_Context::screen, SCREEN_WIDTH, SCREEN_HEIGHT);

    Render_Context::windowID = SDL_GetWindowID(Render_Context::sdlWindow);
    //SDL_SetWindowSize(Render_Context::sdlWindow, 1024+100, 768+100);

    //fprintf(stderr, "screen = %d\n", Render_Context::screen);
    App app(argc, argv, 32000);
    app.run();
}
Example #24
0
ALLEGRO_DISPLAY *_al_sdl_find_display(uint32_t window_id) {
   unsigned int i;
   ALLEGRO_SYSTEM *s = al_get_system_driver();
   for (i = 0; i < _al_vector_size(&s->displays); i++) {
      void **v = (void **)_al_vector_ref(&s->displays, i);
      ALLEGRO_DISPLAY_SDL *d = *v;
      if (SDL_GetWindowID(d->window) == window_id) {
         return &d->display;
         break;
      }
   }
   return NULL;
}
Example #25
0
void RenderBlock::initializeRenderer(SDL_Window *window) {
    _renderer = SDL_CreateRenderer(window, -1,
                SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
    if (!_renderer)
        emit error("SDL_CreateRenderer error: ");
    _windowId = SDL_GetWindowID(window);

    // autoscaling
    SDL_Window *w = SDL_GetWindowFromID(_windowId);
    int x, y;
    SDL_GetWindowSize(w, &x, &y);
    SDL_RenderSetLogicalSize(_renderer, x, y);
}
Example #26
0
void Client::HandleEvent (const SDL_Event *event)
{
    // The only event that the client handles himself is SDL_QUIT
    // The rest is passed on to the current scene.

    Uint32 windowID = SDL_GetWindowID (mainWindow);

    switch(event->type) {

        case SDL_QUIT:
            ShutDown ();
            break;

        case SDL_WINDOWEVENT:
            if (event->window.windowID != windowID)
                break;

        case SDL_KEYDOWN:
        case SDL_KEYUP:
            if (event->key.windowID != windowID)
                break;

        case SDL_TEXTINPUT:
            if (event->text.windowID != windowID)
                break;

        case SDL_TEXTEDITING:
            if (event->edit.windowID != windowID)
                break;

        case SDL_MOUSEWHEEL:
            if (event->wheel.windowID != windowID)
                break;

        case SDL_MOUSEBUTTONDOWN:
        case SDL_MOUSEBUTTONUP:
            if (event->button.windowID != windowID)
                break;

        case SDL_MOUSEMOTION:
            if (event->motion.windowID != windowID)
                break;

        default:
            if (pScene)
                pScene -> OnEvent (event);
            break;

    } // End switch
}
void ApplicationContextSDL::pollEvents()
{
    if(mWindows.empty())
    {
        // SDL events not initialized
        return;
    }

    SDL_Event event;
    while (SDL_PollEvent(&event))
    {
        switch (event.type)
        {
        case SDL_QUIT:
            mRoot->queueEndRendering();
            break;
        case SDL_WINDOWEVENT:
            if(event.window.event != SDL_WINDOWEVENT_RESIZED)
                continue;

            for(WindowList::iterator it = mWindows.begin(); it != mWindows.end(); ++it)
            {
                if(event.window.windowID != SDL_GetWindowID(it->native))
                    continue;

                Ogre::RenderWindow* win = it->render;
                win->windowMovedOrResized();
                windowResized(win);
            }
            break;
        default:
            _fireInputEvent(convert(event), event.window.windowID);
            break;
        }
    }

#if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
    // hacky workaround for black window on OSX
    for(const auto& win : mWindows)
    {
        SDL_SetWindowSize(win.native, win.render->getWidth(), win.render->getHeight());
        win.render->windowMovedOrResized();
    }
#endif
}
Example #28
0
//--------------------------------------------
// --
//--------------------------------------------
void Machine::HandleEvent(SDL_Event& _event)
{
	if (_event.window.windowID != SDL_GetWindowID(mWindow))
		return;

    switch(_event.type)
    {
        case SDL_KEYDOWN:
        {
            Joypad& joypad = mGb.GetJoypad();

            switch(_event.key.keysym.sym)
            {
                case SDLK_UP:       joypad.OnKeyDown(Joypad::Key::Up);      break;
                case SDLK_DOWN:     joypad.OnKeyDown(Joypad::Key::Down);    break;
                case SDLK_LEFT:     joypad.OnKeyDown(Joypad::Key::Left);    break;
                case SDLK_RIGHT:    joypad.OnKeyDown(Joypad::Key::Right);   break;
                case SDLK_a:        joypad.OnKeyDown(Joypad::Key::A);       break;
                case SDLK_s:        joypad.OnKeyDown(Joypad::Key::B);       break;
                case SDLK_LSHIFT:   joypad.OnKeyDown(Joypad::Key::Select);  break;
                case SDLK_RETURN:   joypad.OnKeyDown(Joypad::Key::Start);   break;
            }
        }
        break;

        case SDL_KEYUP:
        {
            Joypad& joypad = mGb.GetJoypad();

            switch (_event.key.keysym.sym)
            {
            case SDLK_UP:       joypad.OnKeyUp(Joypad::Key::Up);      break;
            case SDLK_DOWN:     joypad.OnKeyUp(Joypad::Key::Down);    break;
            case SDLK_LEFT:     joypad.OnKeyUp(Joypad::Key::Left);    break;
            case SDLK_RIGHT:    joypad.OnKeyUp(Joypad::Key::Right);   break;
            case SDLK_a:        joypad.OnKeyUp(Joypad::Key::A);       break;
            case SDLK_s:        joypad.OnKeyUp(Joypad::Key::B);       break;
            case SDLK_LSHIFT:   joypad.OnKeyUp(Joypad::Key::Select);  break;
            case SDLK_RETURN:   joypad.OnKeyUp(Joypad::Key::Start);   break;
            }
        }
        break;
    }
}
Example #29
0
        bool Window::init()
        {

            if (SDL_Init(SDL_INIT_EVERYTHING) < 0)
            {
                std::cout << "Failed to init SDL\n";
                return false;
            }
        

            m_Window.reset(SDL_CreateWindow(m_Title.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, m_Width, m_Height, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE));

            if (!m_Window)
            {
                std::cout << "Failed to create Window\n";
                return false;
            }

            m_Context = SDL_GL_CreateContext(m_Window.get());
            m_WindowId = SDL_GetWindowID(m_Window.get());
           

#ifdef __APPLE__
            // "Magic incantation" for getting an OpenGL 3.2 context with SDL2 on Mac OS X
            // See: http://stackoverflow.com/questions/11961116/opengl-3-x-context-creation-using-sdl2-on-osx-macbook-air-2012
            SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
            SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
            SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
#endif

#ifndef __APPLE__
            auto status=glewInit();
            if (status!= GLEW_OK)
            {
                std::cout << "Failed to initialize glew\n";
                std::cout << glewGetErrorString(status) << "\n";
                return false;
            }
#endif

            std::cout << "OpenGL " << glGetString(GL_VERSION) << "\n";
            glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
            return true;
        }
int SDL_DUMMY_UpdateWindowFramebuffer(_THIS, SDL_Window * window, const SDL_Rect * rects, int numrects)
{
    static int frame_number;
    SDL_Surface *surface;

    surface = (SDL_Surface *) SDL_GetWindowData(window, DUMMY_SURFACE);
    if (!surface) {
        return SDL_SetError("Couldn't find dummy surface for window");
    }

    /* Send the data to the display */
    if (SDL_getenv("SDL_VIDEO_DUMMY_SAVE_FRAMES")) {
        char file[128];
        SDL_snprintf(file, sizeof(file), "SDL_window%d-%8.8d.bmp",
                     SDL_GetWindowID(window), ++frame_number);
        SDL_SaveBMP(surface, file);
    }
    return 0;
}