Bonsoir.
Je développe en ce moment un éditeur de niveau en utilisant Qt et SFML. Je me suis aperçu d'un soucis avec la SFML après avoir recompilé plusieurs fois la lib testé sur une autre machine et avoir vérifié mes drivers. Il semblerait avoir un soucis avec sf::RenderTexture. Je veux juste afficher une grille définit par: une largeur, une hauteur, la largeur d'une cellule, la hauteur d'une cellule. Mais RenderTexture ne souhaite pas faire ce que j'attends. Une image pour illustrer.
Grille: 320 x 320 (pixels)
Tiles: 32 x 32 (pixels)
Vert: La grille dessiné sur un renderTexture (Position: 0.f, 0.f);
Rouge: La grille dessiné via la fenêtre; (Afficher après sf::RenderTexture en traçant la grille depuis la position 0.f, 0.f).
Voilà un code fait à l'instant pour résumer le problème.
#include <iostream>
#include <SFML/Graphics.hpp>
int main()
{
int grid_width = 320;
int grid_height = 320;
int tiles_width = 32;
int tiles_height = 32;
// Create GRID
sf::RenderTexture gridRenderTexture;
gridRenderTexture.create(grid_width, grid_height);
gridRenderTexture.clear(sf::Color::Black);
// Vertical
for(int x=0; x<=grid_width/tiles_width; ++x)
{
sf::VertexArray line(sf::Lines, 2);
line[0].position = sf::Vector2f(x*tiles_width, 0.f);
line[0].color = sf::Color::Green;
line[1].position = sf::Vector2f(x*tiles_width, grid_height);
line[1].color = sf::Color::Green;
gridRenderTexture.draw(line);
}
// Horizontal
for(int y=0; y<=grid_height/tiles_height; ++y)
{
sf::VertexArray line(sf::Lines, 2);
line[0].position = sf::Vector2f(0.f, y*tiles_height);
line[0].color = sf::Color::Green;
line[1].position = sf::Vector2f(grid_width, y*tiles_height);
line[1].color = sf::Color::Green;
gridRenderTexture.draw(line);
}
gridRenderTexture.display();
sf::Texture tx(gridRenderTexture.getTexture());
sf::Sprite grid;
grid.setTexture(tx);
// Create Window
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window");
while(window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
window.clear(sf::Color::Blue);
window.draw(grid);
// Vertical
for(int x=0; x<=grid_width/tiles_width; ++x)
{
sf::VertexArray line(sf::Lines, 2);
line[0].position = sf::Vector2f(x*tiles_width, 0.f);
line[0].color = sf::Color::Red;
line[1].position = sf::Vector2f(x*tiles_width, grid_height);
line[1].color = sf::Color::Red;
window.draw(line);
}
// Horizontal
for(int y=0; y<=grid_height/tiles_height; ++y)
{
sf::VertexArray line(sf::Lines, 2);
line[0].position = sf::Vector2f(0.f, y*tiles_height);
line[0].color = sf::Color::Red;
line[1].position = sf::Vector2f(grid_width, y*tiles_height);
line[1].color = sf::Color::Red;
window.draw(line);
}
window.display();
}
return EXIT_SUCCESS;
}
Le problème se produit en aussi en variant la taille de la grille et des cellules.