Reputation: 792
I'm trying to build an SDL2 app on OSX El Capitan, and I am running into an issue where the window dressing is not appearing. Things like the exit button and the resizing bar are not appearing. I've compiled on Windows and it all works fine there.
To make it a bit easier this link to Lazy Foo's tutorial replicates the issue: http://lazyfoo.net/tutorials/SDL/01_hello_SDL/index2.php
My make file is pretty simple (I've stolen it off his website as well)
COMPILER_FLAGS = -w
LINKER_FLAGS = -framework SDL2
#OBJS specifies which files to compile as part of the project
OBJS = main.c
#CC specifies which compiler we're using
CC = g++
OBJ_NAME = main
#This is the target that compiles our executable
all : $(OBJS)
$(CC) $(OBJS) $(INCLUDE_PATHS) $(LIBRARY_PATHS) $(COMPILER_FLAGS) $(LINKER_FLAGS) -o $(OBJ_NAME)
If anyone knows what I am doing wrong, I'd love to find out.
UPDATE: I pulled out an old laptop, fresh installed to El Capitan and it is having the same issue based on the Lazy Foo code.
UPDATE:
/*This source code copyrighted by Lazy Foo' Productions (2004-2015)
and may not be redistributed without written permission.*/
//Using SDL and standard IO
#include <SDL.h>
#include <stdio.h>
//Screen dimension constants
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
int main( int argc, char* args[] )
{
//The window we'll be rendering to
SDL_Window* window = NULL;
//The surface contained by the window
SDL_Surface* screenSurface = NULL;
//Initialize SDL
if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
{
printf( "SDL could not initialize! SDL_Error: %s\n", SDL_GetError() );
}
else
{
//Create window
window = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
if( window == NULL )
{
printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
}
else
{
//Get window surface
screenSurface = SDL_GetWindowSurface( window );
//Fill the surface white
SDL_FillRect( screenSurface, NULL, SDL_MapRGB( screenSurface->format, 0xFF, 0xFF, 0xFF ) );
//Update the surface
SDL_UpdateWindowSurface( window );
//Wait two seconds
SDL_Delay( 2000 );
}
}
//Destroy window
SDL_DestroyWindow( window );
//Quit SDL subsystems
SDL_Quit();
return 0;
}
Upvotes: 1
Views: 1086
Reputation: 86
Not sure of the root cause but making a loop that polls events seems to do the trick.
bool loop = true;
while(loop)
{
SDL_Event event;
while(SDL_PollEvent(&event))
{
if(event.type == SDL_QUIT)
{
loop = false;
}
}
}
Upvotes: 3