mirror of https://github.com/buggins/dlangui.git
SDL2 platform: OpenGL support, part 1
This commit is contained in:
parent
b076ed5859
commit
8e312aaacd
|
@ -49,21 +49,62 @@ version(USE_SDL) {
|
||||||
debug Log.d("Destroying SDL window");
|
debug Log.d("Destroying SDL window");
|
||||||
if (_renderer)
|
if (_renderer)
|
||||||
SDL_DestroyRenderer(_renderer);
|
SDL_DestroyRenderer(_renderer);
|
||||||
|
if (_context)
|
||||||
|
SDL_GL_DeleteContext(_context);
|
||||||
if (_win)
|
if (_win)
|
||||||
SDL_DestroyWindow(_win);
|
SDL_DestroyWindow(_win);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static private bool _sdlReloaded = false;
|
||||||
|
SDL_GLContext _context;
|
||||||
|
|
||||||
bool create() {
|
bool create() {
|
||||||
_win = SDL_CreateWindow(_caption.toStringz, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 700, 500, SDL_WINDOW_RESIZABLE);
|
uint windowFlags = SDL_WINDOW_RESIZABLE;
|
||||||
|
if (_enableOpengl)
|
||||||
|
windowFlags |= SDL_WINDOW_OPENGL;
|
||||||
|
_win = SDL_CreateWindow(_caption.toStringz, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
|
||||||
|
700, 500,
|
||||||
|
windowFlags);
|
||||||
|
if (!_win) {
|
||||||
|
if (_enableOpengl) {
|
||||||
|
Log.e("SDL_CreateWindow failed - cannot create OpenGL window: ", fromStringz(SDL_GetError()));
|
||||||
|
_enableOpengl = false;
|
||||||
|
// recreate w/o OpenGL
|
||||||
|
windowFlags &= ~SDL_WINDOW_OPENGL;
|
||||||
|
_win = SDL_CreateWindow(_caption.toStringz, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
|
||||||
|
700, 500,
|
||||||
|
windowFlags);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (!_win) {
|
if (!_win) {
|
||||||
Log.e("SDL2: Failed to create window");
|
Log.e("SDL2: Failed to create window");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (_enableOpengl) {
|
||||||
|
_context = SDL_GL_CreateContext(_win); // Create the actual context and make it current
|
||||||
|
if (!_context) {
|
||||||
|
Log.e("SDL_GL_CreateContext failed: ", fromStringz(SDL_GetError()));
|
||||||
|
_enableOpengl = false;
|
||||||
|
} else if (!_sdlReloaded) {
|
||||||
|
//if (SDL_GL_MakeCurrent(window, context)) {
|
||||||
|
// Log.e("SDL_GL_MakeCurrent failed: ", fromStringz(SDL_GetError()));
|
||||||
|
// _enableOpengl = false;
|
||||||
|
//}
|
||||||
|
DerelictGL3.reload(); //<-- BOOM SIGSEGV
|
||||||
|
_sdlReloaded = true;
|
||||||
|
}
|
||||||
|
//if (context)
|
||||||
|
// SDL_GL_DeleteContext(context);
|
||||||
|
//if (window)
|
||||||
|
// SDL_DestroyWindow(window);
|
||||||
|
}
|
||||||
|
if (!_enableOpengl) {
|
||||||
_renderer = SDL_CreateRenderer(_win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
|
_renderer = SDL_CreateRenderer(_win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
|
||||||
if (!_renderer) {
|
if (!_renderer) {
|
||||||
Log.e("SDL2: Failed to create renderer");
|
Log.e("SDL2: Failed to create renderer");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
//windowCaption = _caption;
|
//windowCaption = _caption;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -134,6 +175,10 @@ version(USE_SDL) {
|
||||||
|
|
||||||
|
|
||||||
if (_enableOpengl) {
|
if (_enableOpengl) {
|
||||||
|
// now you can make GL calls.
|
||||||
|
glClearColor(0,0.3f,0.7f,1);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
SDL_GL_SwapWindow(_win);
|
||||||
version(USE_OPENGL) {
|
version(USE_OPENGL) {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -446,12 +491,6 @@ version(USE_SDL) {
|
||||||
}
|
}
|
||||||
bool connect() {
|
bool connect() {
|
||||||
|
|
||||||
try {
|
|
||||||
//DerelictGL3.load();
|
|
||||||
_enableOpengl = false;
|
|
||||||
} catch (Exception e) {
|
|
||||||
Log.e("Cannot load opengl library", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -698,13 +737,6 @@ version(USE_SDL) {
|
||||||
string[] args = splitCmdLine(cmdline);
|
string[] args = splitCmdLine(cmdline);
|
||||||
Log.i("Command line params: ", args);
|
Log.i("Command line params: ", args);
|
||||||
|
|
||||||
try {
|
|
||||||
// Load the SDL 2 library.
|
|
||||||
DerelictSDL2.load();
|
|
||||||
} catch (Exception e) {
|
|
||||||
Log.e("Cannot load SDL2 library", e);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
//_cmdShow = iCmdShow;
|
//_cmdShow = iCmdShow;
|
||||||
//_hInstance = hInstance;
|
//_hInstance = hInstance;
|
||||||
|
@ -721,22 +753,6 @@ version(USE_SDL) {
|
||||||
setStderrLogger();
|
setStderrLogger();
|
||||||
setLogLevel(LogLevel.Trace);
|
setLogLevel(LogLevel.Trace);
|
||||||
|
|
||||||
try {
|
|
||||||
// Load the SDL 2 library.
|
|
||||||
DerelictSDL2.load();
|
|
||||||
} catch (Exception e) {
|
|
||||||
Log.e("Cannot load SDL2 library", e);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
SDL_DisplayMode displayMode;
|
|
||||||
if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER|SDL_INIT_EVENTS) != 0) {
|
|
||||||
Log.e("Cannot init SDL2");
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
scope(exit)SDL_Quit();
|
|
||||||
int request = SDL_GetDesktopDisplayMode(0,&displayMode);
|
|
||||||
|
|
||||||
|
|
||||||
FreeTypeFontManager ft = new FreeTypeFontManager();
|
FreeTypeFontManager ft = new FreeTypeFontManager();
|
||||||
// TODO: use FontConfig
|
// TODO: use FontConfig
|
||||||
|
@ -750,6 +766,36 @@ version(USE_SDL) {
|
||||||
int sdlmain(string[] args) {
|
int sdlmain(string[] args) {
|
||||||
currentTheme = createDefaultTheme();
|
currentTheme = createDefaultTheme();
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Load the SDL 2 library.
|
||||||
|
DerelictSDL2.load();
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.e("Cannot load SDL2 library", e);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
DerelictGL3.load();
|
||||||
|
_enableOpengl = true;
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.e("Cannot load opengl library", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_DisplayMode displayMode;
|
||||||
|
if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER|SDL_INIT_EVENTS) != 0) {
|
||||||
|
Log.e("Cannot init SDL2");
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
scope(exit)SDL_Quit();
|
||||||
|
int request = SDL_GetDesktopDisplayMode(0,&displayMode);
|
||||||
|
|
||||||
|
// we want OpenGL 3.3
|
||||||
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION,3);
|
||||||
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION,2);
|
||||||
|
// Set OpenGL attributes
|
||||||
|
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
|
||||||
|
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
|
||||||
|
|
||||||
SDLPlatform sdl = new SDLPlatform();
|
SDLPlatform sdl = new SDLPlatform();
|
||||||
if (!sdl.connect()) {
|
if (!sdl.connect()) {
|
||||||
return 1;
|
return 1;
|
||||||
|
|
Loading…
Reference in New Issue