SFML community forums
Help => Window => Topic started by: KilledWhale on January 07, 2012, 04:50:11 pm
-
Following code draws the line as it should but without the sleep(1); it doesn't display a thing. Not even a black background.
Is some part of window initialization done asynchronously?
Happens at least on linux x64.
I wonder if there's any way to check if the window's ready for drawing or not because this solution seems kinda hacky.
Discovered the issue when I was trying to draw sierpinski triangle line-by-line without clearing the screen between each line drawing.
#include <stdint.h>
#include <iostream>
#include <SFML/Graphics.hpp>
int main() {
sf::RenderWindow window(sf::VideoMode(800, 800), "");
sleep(1);
sf::Vertex points[2];
points[0].Position.y = 50;
points[0].Position.x = 50;
points[1].Position.y = 400;
points[1].Position.x = 500;
window.Draw(points, 2, sf::Lines);
window.Display();
sleep(500);
return 0;
}
-
I believe you must call Clear(). I recently tried to omit it because I filled the whole background with an image, which resulted in strange display bugs.
-
I believe you must call Clear(). I recently tried to omit it because I filled the whole background with an image, which resulted in strange display bugs.
Calling Clear() doesn't help. Also it would make no sense as the program works if I use the sleep() to wait after creation :(
-
You probably need to handle your window's events. If you don't, the OS events will never reach your SFML window and it will remain frozen/inactive.
I believe you must call Clear(). I recently tried to omit it because I filled the whole background with an image, which resulted in strange display bugs.
This is strange, Clear is definitely not needed if you fill the entire target.
-
Ok, it was another issue... The bugs appeared because I used a repeated texture without enlarging the sf::Sprite's texture rect. With Clear(), the background was just not drawn for some time. Without Clear(), the effect was much more eye-catching.
-
You probably need to handle your window's events. If you don't, the OS events will never reach your SFML window and it will remain frozen/inactive.
I believe you must call Clear(). I recently tried to omit it because I filled the whole background with an image, which resulted in strange display bugs.
This is strange, Clear is definitely not needed if you fill the entire target.
But that still doens't explain why it works with sleep() but not without it :/
-
Have you tried to add event handling or not?
-
Have you tried to add event handling or not?
I tried adding event handling like this but no difference.
#include <stdint.h>
#include <iostream>
#include <SFML/Graphics.hpp>
int main() {
sf::RenderWindow window(sf::VideoMode(800, 800), "");
sf::Vertex points[2];
points[0].Position.y = 50;
points[0].Position.x = 50;
points[1].Position.y = 400;
points[1].Position.x = 500;
window.Draw(points, 2, sf::Lines);
window.Display();
sf::Event ev;
while(window.WaitEvent(ev)) {
if (ev.Type == sf::Event::Closed) break;
if (ev.Type == sf::Event::KeyPressed) break;
}
return 0;
}
-
I mean, between creating the window and drawing.
But this way of displaying things doesn't make sense anyway, so I don't know if it's worth solving this "problem".
-
retep998 explained why (and how) you should do here (https://github.com/SFML/SFML/issues/155#issuecomment-3396161).
-
Would not calling Clear() improve performance, and if so, by how much?
Ed
-
Would not calling Clear() improve performance, and if so, by how much?
It would, but the difference would be so tiny that you would most likely not see it.