Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Sujets - Assouan

Pages: [1]
1
Graphique / [résolu] [RenderTexture] méthode create lente
« le: Février 19, 2013, 10:58:52 am »
Salut, j'ai un élément graphique qui contient d'autre élément graphique
On peut résumer ce-ci, par ce-ci :

// Fonction d'initialisation
sf::RenderTexture rendertexture;
sf::Sprite sprite;

// Fonction de refresh (taille)
rendertexture.create(geometry.width, geometry.height);
sprite.setTexture(rendertexture.getTexture(), true);
ps: j'ai tapé le code à la main (des erreurs sont possible)

Le problème, est que l'appel de create est vraiment lourd... alors que celui de image/texture est léger

Donc, je voudrais vous demander, qu'elle solution me conseiller vous ?

Utiliser GLEW me rendra t'il create plus rapide ?
Créer des rendertexture de grande taille et jouer avec sf::View ?
Utiliser Image/Texture (au risque d'avoir mon propre draw faible et lent? par ce que franchement, je doute que passer par des getPixel/setPixel soit une bonne idée... sauf pour tuer mon processeur =D) ?

2
Salut, après avoir envoyé un mail à Laurent (qui est sans réponse), je pense qu'il doit être occuper pour ne pas y répondre. C'est pour quoi, je me redirige vers vous !

Voilà, j'ai du temps libre devant moi et j'aimerais me consacré à un projet qui puisse être utiles aux autres.
Et je me lance donc dans une Gui pour SFML (en reprenant comme base, ma Gui personnel)

J'aimerais terminer et mettre au point mon prototype (pour enfin, commencé à ma focaliser sur l'optimisation de celle-ci).

Donc voici la liste des questions (vous pouvez vous contenter de répondre à celles, dont vous avez envie) :

1) Cela vous dérangerait-il, si je passe à la norme C++11 ? (voir exemple)

// Constructeur
Button::Button() : Button("default text")
{
}

// Énumération
Policy::Expanding;

// ...
 

2) Qu'elle syntaxe désirez vous pour les signaux/slots ? Qu'elle syntaxe de signaux préférez-vous ? (voici les 2 syntaxe actuelle)

// Connexion (signal via énumération, converti en std::size_t)
button.connect(Button::Clicked, window, slot(&RenderWindow::close));
// Connexion (signal via std::string)
button.connect("clicked", window, slot(&RenderWindow::close));

// Émission de signal (exemple, depuis l'intérieur de la class Slider)
transmit(ValueChanged, m_value, valueOld);
transmit("valueChanged", m_value, valueOld); // valueOld, n'existe pas, et est là juste dans le but de montrer qu'on peut mettre plusieurs paramètre
 

Énumération (avantages)
==> Si on ne connaît pas le nom du signal, il suffis simplement de tapez le nom du widget:: et votre IDE affichera la liste des énumérations
==> Ne pèse qu'un simple std::size_t, donc plus performant qu'un string
String (avantages)
==> Rend le codage plus court

ps: je prévois déjà de renommer connect et de le rendre private, et de créer un nouveau connect qui sera templaté (je sais pas si ça se dit...?) et qui s'occupera d'appeler l'ancien connect
En résumer, on garde l'ancien avantage que connect ne soit pas templaté, mais juste la fonction d'appel et on gagne l'avantage de ne plus utiliser slot()
Ainsi on passe à :
button.connect("clicked", game, &Game::start);

ps2: le 2éme paramètre est soit une référence ou un pointeur de l'objet qui doit être exécuter

Voilà, donc si vous avez une idée pour rendre l'utilisation de signaux/slots plus simple et agréable, n'hésitez pas !

3) Préféreriez-vous que les signaux/slots soit automatiquement threadé ?

Je ne sais pas comment vous comptez utiliser vos signaux/slots, si la plus par du temps vous les utiliser pour des fonctions bloquante, il serait surement plus sage de les avoirs threadé par défaut.

4) Ce module de gui, risque d'avoir une dépendance en dehors de SFML, c'est l'utilisation d'une lib XML pour charger vos stylesheet où encore vos gui pré-crée. Donc la qu'elle préféreriez-vous ?

J'ai pensez à coder ma propre lecteur XML, ce qui devrait être assez rapide grâce aux regex...
Mais bon... c'est quand même perdre du temps et je doute que ce soit une sage idée ;D

5) Qu'elle syntaxe/structure utiliser pour le stylesheet ? Pouvez-vous m'aidez à en réaliser un qui soit Simple and Fast ? (c'est mon principal problème)

<?xml version="1.0" encoding="UTF-8"?>
<StyleSheet>

<Widget name="CheckBox|RadioButton" width="125" height="25">
        <Style name="Normal|NormalActive|NormalDisabled|Pressed|PressedActive|PressedDisabled">
                <Couche> <!-- La couche utilise par défaut un layout="honrizontal" -->
                        <LayoutV policyWidth="fixed">
                                <Image path="gui/frameLeftTop.png" />
                                <Image path="gui/frameLeftMiddle.png" />
                                <Image path="gui/frameLeftBottom.png" />
                        </LayoutV>
                        <LayoutV policyWidth="fixed">
                                <Image path="gui/frameMiddleTop.png" />
                                <Image path="gui/frameMiddleMiddle.png" />
                                <Image path="gui/frameMiddleBottom.png" />
                        </LayoutV>
                        <LayoutV policyWidth="fixed">
                                <Image path="gui/frameRightTop.png" />
                                <Image path="gui/frameRightMiddle.png" />
                                <Image path="gui/frameRightBottom.png" />
                        </LayoutV>
                        <Text>Case à cocher (le texte par défaut)</Text> <!-- Text du widget -->
                </Couche>
                <Couche name="Check" layout="float"> <!-- Cette couche n'est afficher que si on demande à afficher Check -->
                        <Image path="gui/check.png" size="25" policy="fixed" x="0" /> <!-- Centrer verticalement, en commencent à gauche -->
                </Couche>
        </Style>
</Widget>
<!-- Ce qui nous donne un cadre extensible en hauteur...
avec le check centrer dans le cadre...
et un texte à droite du cadre qui est extensible -->

</StyleSheet>

L'affichage de chaque widget doit impérativement être entièrement éditable depuis le stylesheet
Là tous à été simplifié, mais la création de style complet me paraît long avec ce système

Si vous avez des amélioration à proposer pour la syntaxe, j'attends avec impatience =)





Voici un exemple de ce que je vise pour mon prototype :
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML Gui");

// Création du Gui Manager
sf::GuiManager gui;

// Chargement des stylesheet (via le constructeur)
sf::StyleSheet ssr("red.xml"), ssg("green.xml"), ssb("blue.xml");
ssg.becomeDefault(); // green devient le style par défaut (jusqu'à sa destruction)

// Chargement de l'interface graphique
gui.loadFromFile("ui.xml");

gui.getButton("red").setStyleSheet(ssr);   // On définie un style obligatoire
gui.getButton("green").setStyleSheet(ssg); // Si le bouton n'existe pas, GuiManager renvoie un faux
gui.getButton("blue").setStyleSheet(ssb);  // Et signal l'erreur sur le stream err

// Connexion des signaux/slots
gui.getButton("red").connect(sf::Button::Clicked, ssr, &sf::StyleSheet::becomeDefault);   // On change le style d'affichage
gui.getButton("green").connect(sf::Button::Clicked, ssg, &sf::StyleSheet::becomeDefault); // Au clic du bouton
gui.getButton("blue").connect(sf::Button::Clicked, ssb, &sf::StyleSheet::becomeDefault);
// Attention, le changement de style peut être plus ou moins long en fonction du nombre de widget
// Il est donc préférable de faire cela dans un thread

gui.getButton("exit").connect(sf::Button::Clicked, window, &sf::RenderWindow::close);

gui.getSlider("slider").connect(sf::Slider::ValueChanged, gui.getProgressBar("progress"), &sf::ProgressBar::setValue);

// Boucle d'affichage
while (window.isOpen())
{
    // Événement
    sf::Event event;
    while (window.pollEvent(event))
    {
        // Exit
        if (event.type == sf::Event::Closed)
            window.close();
        if ((event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Escape))
            window.close();
        // Gui
        gui.event(event);
    }

    // Affichage
    window.clear(sf::Color::Black);
    window.draw(gui);
    window.display();
}

ps: je prévois de publier les sources une fois le stylesheet mis en place, (mais si vous avez besoin de consulter les sources ou juste de certaines class, vous pouvez me mp)

3
Salut, es-ce possible de proposer une meilleur personnalisation de sf::Text pour la prochaine version ?

Du genre rendre gras et rouge du caractère 12 à 18

Je sus pose qu'il n'y a rien de compliquer et qu'il faut juste ajouté un nouvelle attribut à la classe
Par exemple, un tableau trier dans l'ordre croissant et qui contienne le numéro du caractère et la modification a faire, exemple :

12 | Style(Gras + Color:Red)
18 | Style(Normal + Color:Black)
18 | Style(Italique)

Et la fonction qui va avec pour ajouté des styles, et une autre pour vider tous les styles =)

Et dans la fonction updateGeometry(), il suffirait d'ajouter dans la boucle, un if qui s'occupe d'apporter les modifications des styles si on est arrivé à un caractère ou il faut modifier

Bref, j'espère m'être fait comprendre, c'est simple et ça peut être pratique =)

4
Bonjour, voilà, je n'arrive pas à récupérer la largeur des caractères spéciaux (j'entends par là, les lettres accentué) du genre " ã, ä, ë, ... "

    cout << sf::Font::getDefaultFont().getGlyph('a', 30, false).advance << endl; // Résultat: 16
    cout << sf::Font::getDefaultFont().getGlyph('ã', 30, false).advance << endl; // Résultat: 23
    cout << sf::Font::getDefaultFont().getGlyph('ä', 30, false).advance << endl; // Résultat: 23
    cout << sf::Font::getDefaultFont().getGlyph('e', 30, false).advance << endl; // Résultat: 16
    cout << sf::Font::getDefaultFont().getGlyph('é', 30, false).advance << endl; // Résultat: 23
    cout << sf::Font::getDefaultFont().getGlyph('ê', 30, false).advance << endl; // Résultat: 23
    cout << sf::Font::getDefaultFont().getGlyph('ë', 30, false).advance << endl; // Résultat: 23

Je dois surement mal m'y prendre... mais en faisant ainsi, je me prend un jolie décalage du curseur pour mon text edit quand je tape des accents...

5
Graphique / [Résolu] Zone d'affichage (pour sf::Text)
« le: Avril 12, 2012, 11:01:38 pm »
Bonjour, voilà pour ma gui j'ai un soucis

Voilà, maintenant j'ai un TextArea (un edit text en multi ligne)

Mais voilà, quand on fait défiler les scrollbar, sa fait bouger le texte... (sa doit servir à la faire défiler)

Mais le soucis, c'est que je ne sais pas comment faire en sorte de n'affiche que le texte dans la zone du TextArea

Avec Sprite, on a un fonction pour n'afficher qu'une partie du Drawable :
Sprite.SetTextureRect(sf::IntRect(200,200,300,150));

Mais, comment faire avec sf::Text ?

ps: N'existe t'il pas une technique d'afficher une sorte de camera 2D, dans un endroit ?
sf::Camera Camera;
Camera.SetSize(200,200);
Camera.SetPosition(50,50);

// Boucle d'affichage
Camera.Draw(Sprite);
Window.Draw(Camera);

6
Graphique / [résolu] La fonction Origin (est inversé ?)
« le: Avril 01, 2012, 05:20:21 pm »
Par exemple, si j'ai un texte, en position 100,100 (et je veux lui créer un décalage de 50,50) pour qu'il s'affiche en 150,150

Et bien je dois faire : SetOrigin(-50,-50);
Au lieu de : SetOrigin(50,50);

Es-ce normal que sa fonctionne inversement ?

Pages: [1]
anything