Este blog esta em reforma no momento.

Carga de imagens pronta - inciar 2013

Imagem carregada da Internet dentro do jogo
Esse parecia ser um desafio simples, mas se mostrou um problemão mega volumoso!
Tudo porque Lua e OGRE não partilham a mesma thread de execução, na verdade em relação a OGRE nem sei quantas threads ela usa no momento.

Mas agora posso carregar imagens de qualquer servidor web, e até manipula-las, para jogar dentro do jogo. Isso me permite usar banners e noticias, usar avatares de redes-sociais e muito mais.

A parte de carregar a imagem om curl e expor para Lua foi fácil.
Tanto que a classe Lua manipula imagens, aplica filtros e recortes e até trabalha com pixels.
Não foi a implementação mais leve mais foi a mais funcional no sentido de dar recursos de manipulação.

Em Lua a carga que gerou a imagem acima se dá assim:
Código da carga de imagem

Foi preciso usar um evento para avisar ao sistema quando a imagem esta pronta para trabalhar, já que OGRE não usa a mesma thread, evitando FileNotFoundException.

O processo exigiu que eu criasse uma classe só para manipular esses eventos de imagem.
Essa é a declaração:

class WWP_ImagePrepare
{
    public:
        int width;
        int height;
        int dp;
        int scan_width;
        Ogre::String nome;
        Ogre::String group;
        Ogre::PixelFormat format;
        Ogre::TextureType type;
        Ogre::TextureMipmap mip;
        BYTE* bits;
        WWP_iListener* li;
        bool isDescartavel;

    WWP_ImagePrepare();
    ~WWP_ImagePrepare();
    void make();

    static std::vector<WWP_ImagePrepare> elements;
    static pthread_mutex_t mutex;

    static void add( WWP_ImagePrepare& image );
    static void loop();

};


Bom, como nem tudo são flores ainda estou tendo um problema de thread ao liberar memória. Mas por enquanto a classe funciona para o processo de desenvolvimento.

Comentários