libsdl2 wrong window size reported [was: Building .deb from sources: more libtool problems]
Rafal Kolanski <[email protected]> Mon, 8 Feb 2016 01:46:26 +1100
| Newsgroups | gmane.comp.window-managers.sawfish |
|---|---|
| Message-ID | <[email protected]> |
Hi again, I solved the libtool problems. Wrong dependency cascaded through into the .debs, entirely my fault. However, the original SDL2 problem is still present in the latest repository versions: When using SDL2 to create a 640x480 window, sawfish 1.9.90 does not report window border sizes correctly and a window with a canvas size of 638x478 results, while SDL2 thinks it's 640x480 and parts of the canvas are not rendered. Using xfwm4 does not have any problems of this kind. I'm attaching a short example which demonstrates this on my system (Ubuntu vivid 64bit, NVIDIA GTX 560Ti running closed-source drivers). Does anyone know where this problem might originate from so that I can investigate further? Sincerely, Rafal Kolanski
sawfish_problem.c
(text/x-csrc, 2.2 KB)
/* compile with:
gcc -o sawfish_problem sawfish_problem.c `sdl2-config --cflags` -Wall -std=gnu11 `sdl2-config --libs`
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>
#include "SDL.h"
/* Globals */
SDL_Window *window = NULL;
SDL_Renderer *renderer = NULL;
bool init(void) {
if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
printf("Error: SDL_Init: %s\n", SDL_GetError());
return false;
}
window = SDL_CreateWindow("Title",
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480,
SDL_WINDOW_SHOWN
/*|SDL_WINDOW_BORDERLESS renders correctly!*/);
if (!window) {
printf("Error: SDL_CreateWindow: %s\n", SDL_GetError());
return false;
}
int w=0,h=0;
SDL_GetWindowSize(window, &w, &h);
printf("window: %d x %d\n", w, h);
w = 0; h = 0;
SDL_GL_GetDrawableSize(window, &w, &h);
printf("drawable: %d x %d\n", w, h);
renderer = SDL_CreateRenderer(window, -1,
SDL_RENDERER_ACCELERATED|SDL_RENDERER_PRESENTVSYNC);
if (!renderer) {
printf("Error: SDL_CreateRenderer: %s\n", SDL_GetError());
return false;
}
w = 0; h = 0;
SDL_GetRendererOutputSize(renderer, &w, &h);
printf("output: %d x %d\n", w, h);
return true;
}
int main(int argc, char* argv[]) {
if (!init()) return 1;
SDL_Event e;
bool quit = false;
while (!quit) {
while (SDL_PollEvent(&e)) {
if (e.type == SDL_QUIT) quit = true;
if (e.type == SDL_KEYDOWN) {
if (e.key.keysym.sym == SDLK_ESCAPE) quit = true;
}
}
SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0x00);
SDL_RenderClear(renderer);
SDL_SetRenderDrawColor(renderer, 0xFF, 0x00, 0x00, 0x00);
SDL_Rect rect = {0, 0, 639, 479};
SDL_RenderDrawRect(renderer, &rect);
SDL_SetRenderDrawColor(renderer, 0x00, 0xFE, 0xFE, 0x00);
SDL_RenderDrawPoint(renderer, 0,0);
/* the pixel can be read back correctly */
SDL_RenderPresent(renderer);
}
printf("Normal termination.\n");
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}