[Sawfish] libsdl2 wrong window size reported [was: Building .deb from sources: more libtool problems] |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/sawfish Archives
]
- To: sawfish@xxxxxxxxxxxxxxxxxxx
- Subject: [Sawfish] libsdl2 wrong window size reported [was: Building .deb from sources: more libtool problems]
- From: Rafal Kolanski <xs@xxxxxxxx>
- Date: Mon, 8 Feb 2016 01:46:26 +1100
- Dkim-signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=xaph.net; s=default; h=Content-Type:In-Reply-To:MIME-Version:Date:Message-ID:To:References:Subject:From; bh=wFMRoosw/SgJj/bvpwvfuaECpIMO2x/HiCRFNS7Qu9U=; b=AWEUta9z5+GiTv2fJNFsNEx+DFgyDx3gvUDfLA8ZKJ/vrt0QZ/LiGOqGx1vHUIS1vfTqZssg+m4bA0Ry570gmUQLG4JdzPyJ6i3CU+MNjcJ917F6P3xJz/ICA8b6mH1h;
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
/* 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;
}