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 - blackmetal

Pages: [1]
1
Graphique / Problème avec la fonction loadFromMemory [Résolu]
« le: Novembre 07, 2014, 08:12:48 pm »
Bonjour,

J'ai remarqué que la fonction loadFromMemory provoquait des erreurs que la fonction loadFromFile ne provoquait pas. Voici un exemple ce code dans lequel le chargement d'une font par la mémoire ne fonctionne pas alors que le chargement de la même font directement à partir du fichier fonctionne.

Je suis sur Windows 7, avec Code::Blocks 13.12. J'utilise SFML 2.1 que j'ai recompilé sur mon ordi.

#include <iostream>
#include <SFML/Graphics.hpp>

int main()
{
    sf::Texture texture;
    if (!texture.loadFromFile("data/cursor_icon.png"))
        std::cout << "LoadFromFile failed" << std::endl;
    else
        std::cout << "LoadFromFile success" << std::endl;

        std::ifstream file;
    file.open("data/cursor_icon.png");
    std::vector<char> buffer_;
    std::streampos length;
        if (file.is_open())
    {
        file.seekg(0,std::ios::end);
        length = file.tellg();
        file.seekg(0,std::ios::beg);
        buffer_.resize((unsigned)length);
        file.read(&buffer_[0],length);

                file.close();
    }

    sf::Texture texture2;
    if (!texture2.loadFromMemory(&buffer_[0], (unsigned)length))
        std::cout << "LoadFromMemory failed" << std::endl;
    else
        std::cout << "LoadFromMemory success" << std::endl;
}

La sortie de console est la suivante:

LoadFromFile success
Failed to load image from memory. Reason : Image not of any known type, or corrupt
LoadFromMemory failed

Est-ce moi qui fait n'importe quoi? Ou est-ce cette fonction qui ne fait pas ce qu'elle devrait?

Merci d'avance pour votre réponse

2
Bonjour,

J'ai crée une bibliothèque dynamique à l'aide de Code::Blocks et SFML 2.1. A la base, le code était dans un projet console classique et il compile et fonctionne correctement.
J'ai tenté de le passer en bibliothèque dynamique. J'ai donc utilisé l'utilitaire de Code::Blocks pour le faire. J'ai une bibliothèque qui contient des fichiers .h, .hxx (templates) et un fichier .cc
J'ai correctement ajouté le DLL_EXPORT devant chacune des fonctions du .cc que je voulais pouvoir utiliser.
La compilation et le linkage fonctionne correctement. Un .dll, .a et .def sont créés au bon endroit.
J'ai compilé avec le flag SFML_STATIC ainsi que toutes les libs sfml-xxx-s ou -s-d selon Debug/Release.

J'ai crée un second projet console dans lequel j'utilise la bibliothèque que j'ai fabriquée. Pour ca, je définie le lien des includes et des libs puis je défini quelles libs je veux utiliser: la mienne donc qui s'appelle: "libinterface_engine.a"

Dans ce second projet, si je ne fais qu'include le code de ma bibliothèque, la compilation se passe bien et le programme se lance. Par contre, quand je tente d'utiliser ce code, voici le message d'erreur que j'obtiens:
||=== Build: Release in interface_test (compiler: GNU GCC Compiler) ===|
obj\Release\src\FormNothing.o:FormNothing.cpp|| undefined reference to `vtable for Interface::Form::FormNothing'|
obj\Release\src\FormNothing.o:FormNothing.cpp:(.text$_ZN12LibInterface7Element5IFormIN9Interface4Form11FormNothingEE4DrawEPN2sf12RenderWindowE[__ZN12LibInterface7Element5IFormIN9Interface4Form11FormNothingEE4DrawEPN2sf12RenderWindowE]+0x17)||undefined reference to `_imp___ZN2sf12RenderStates7DefaultE'
|
obj\Release\src\FormNothing.o:FormNothing.cpp:(.text$_ZN12LibInterface7Element5IFormIN9Interface4Form11FormNothingEE4DrawEPN2sf12RenderWindowE[__ZN12LibInterface7Element5IFormIN9Interface4Form11FormNothingEE4DrawEPN2sf12RenderWindowE]+0x24)||undefined reference to `_imp___ZN2sf12RenderTarget4drawERKNS_8DrawableERKNS_12RenderStatesE'|
||=== Build failed: 3 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|

Je ne comprends pas l'erreur car ce même code avec les mêmes includes fonctionne parfaitement si je ne fais pas de bibliothèque et que je met tout dans le même projet.
Pour info: J'utilise Code::Blocks 13.12, je compile SFML en static (GCC 4.7 TDM (SJLJ) - 32 bits).
J'ai joint à ce post les images de mon arborescence sous Code::Blocks. Ma lib s'appelle interface_engine et mon programme interface_test.

Auriez vous une idée?

PS: Si besoin, je peux fournir mon projet complet Code::Blocks avec les sources dedans pour que vous puissiez m'aider.

3
Bonjour,

J'ai pu remarquer qu'il est impossible de récuperer des inputs tels que '&' ou encore 'é'.
En effet, la valeur du sf::Event.Key vaut 0.
Tout d'abord, ces valeurs n'étant pas accessibles, la totalité du clavier n'est pas recouverte et pour développer un jeu c'est problématique.
Ensuite, la valeur 1 qui est composée par 'shift + Num1' sur un AZERTY n'est pas représentée de la même manière que sur un QWERTY (elle vaut 'Num1'). Il est donc diffiçile de faire une gestion des inputs générique.
Une modification est-elle prévue pour la version 2.0 dans le but de corriger ce problème?

Merci d'avance pour la réponse.

Pages: [1]