Carga de imagens pronta - inciar 2013
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:
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.
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:
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
Postar um comentário
Como fiquei sabendo que um pobre blogueiro foi processado por um comentário anonimo esses dias, so me resta me precaver contra a ineficácia da legislação em tratar o meio online. Mas eu prometo que libero rapido ^_~