SDL support: UI image is drawn ok

This commit is contained in:
Vadim Lopatin 2014-04-29 15:03:51 +04:00
parent 988abfe449
commit 8ce36c6eed
1 changed files with 28 additions and 24 deletions

View File

@ -91,11 +91,6 @@ version(USE_SDL) {
SDL_SetWindowTitle(_win, _caption.toStringz); SDL_SetWindowTitle(_win, _caption.toStringz);
} }
void handleResize(int w, int h) {
_dx = w;
_dy = h;
}
SDL_Texture * _texture; SDL_Texture * _texture;
int _txw; int _txw;
int _txh; int _txh;
@ -114,44 +109,48 @@ version(USE_SDL) {
_txh = _dy; _txh = _dy;
} }
} }
private void draw(ColorDrawBuf buf) { private void draw(ColorDrawBuf buf) {
updateBufferSize(); updateBufferSize();
SDL_Rect rect; SDL_Rect rect;
rect.x = 0; rect.w = buf.width;
rect.y = 0; rect.h = buf.height;
rect.w = _dx;
rect.h = _dy;
uint * pixels = buf.scanLine(0);
SDL_UpdateTexture(_texture, SDL_UpdateTexture(_texture,
&rect, &rect,
cast(const void*)pixels, cast(const void*)buf.scanLine(0),
_dx * uint.sizeof); buf.width * uint.sizeof);
SDL_RenderCopy(_renderer, _texture, &rect, &rect); SDL_RenderCopy(_renderer, _texture, &rect, &rect);
} }
void redraw() { void redraw() {
// check if size has been changed
// Select the color for drawing. It is set to red here. int w, h;
SDL_SetRenderDrawColor(_renderer, 255, 0, 0, 255); SDL_GetWindowSize(_win,
&w,
// Clear the entire screen to our selected color. &h);
SDL_RenderClear(_renderer); onResize(w, h);
if (_enableOpengl) { if (_enableOpengl) {
version(USE_OPENGL) { version(USE_OPENGL) {
} }
} else { } else {
// Select the color for drawing. It is set to red here.
//SDL_SetRenderDrawColor(_renderer, 255, 0, 0, 255);
// Clear the entire screen to our selected color.
//SDL_RenderClear(_renderer);
if (!_drawbuf) if (!_drawbuf)
_drawbuf = new ColorDrawBuf(_dx, _dy); _drawbuf = new ColorDrawBuf(_dx, _dy);
_drawbuf.resize(_dx, _dy); _drawbuf.resize(_dx, _dy);
_drawbuf.fill(_backgroundColor); _drawbuf.fill(_backgroundColor);
onDraw(_drawbuf); onDraw(_drawbuf);
draw(_drawbuf); draw(_drawbuf);
// Up until now everything was drawn behind the scenes.
// This will show the new, red contents of the window.
SDL_RenderPresent(_renderer);
} }
// Up until now everything was drawn behind the scenes.
// This will show the new, red contents of the window.
SDL_RenderPresent(_renderer);
} }
ColorDrawBuf _drawbuf; ColorDrawBuf _drawbuf;
@ -228,8 +227,8 @@ version(USE_SDL) {
bool connect() { bool connect() {
try { try {
DerelictGL3.load(); //DerelictGL3.load();
_enableOpengl = true; _enableOpengl = false;
} catch (Exception e) { } catch (Exception e) {
Log.e("Cannot load opengl library", e); Log.e("Cannot load opengl library", e);
} }
@ -285,7 +284,12 @@ version(USE_SDL) {
switch (event.window.event) { switch (event.window.event) {
case SDL_WINDOWEVENT_RESIZED: case SDL_WINDOWEVENT_RESIZED:
Log.d("SDL_WINDOWEVENT_RESIZED win=", event.window.windowID, " pos=", event.window.data1, Log.d("SDL_WINDOWEVENT_RESIZED win=", event.window.windowID, " pos=", event.window.data1,
",", event.window.data2);
break;
case SDL_WINDOWEVENT_SIZE_CHANGED:
Log.d("SDL_WINDOWEVENT_SIZE_CHANGED win=", event.window.windowID, " pos=", event.window.data1,
",", event.window.data2); ",", event.window.data2);
w.onResize(event.window.data1, event.window.data2);
break; break;
case SDL_WINDOWEVENT_CLOSE: case SDL_WINDOWEVENT_CLOSE:
Log.d("SDL_WINDOWEVENT_CLOSE win=", event.window.windowID); Log.d("SDL_WINDOWEVENT_CLOSE win=", event.window.windowID);