Vous êtes sur la page 1sur 5

ESTUDO COMPARATIVO DE BIBLIOTECAS GRFICAS I TEGRADAS COM OPE GL

Francisco Tiago Avelar, Vitor Conrado F. Gomes, Cesar Tadeu Pozzer Universidade Federal de Santa Maria UFSM Curso de Cincia da Computao Santa Maria - RS avelar@inf.ufsm.br, vconrado@inf.ufsm.br, pozzer@inf.ufsm.br

Resumo. Este trabalho envolve um estudo de bibliotecas grficas para o desenvolvimento de aplicaes baseadas em janelas incorporados com OpenGL. Em funo disso, ser feito um panorama e um comparativo das principais APIs escritas em C/C++. Da mesma forma, sero utilizados alguns critrios, como o suporte a sistemas operacionais Windows e Linux, disponibilidade de documentao e facilidade de uso. Outros fatores levados em conta incluem simplicidade quanto compilao e as dependncias de pacotes, alm de outros aspectos. Ao final ser realizada uma concluso de quais bibliotecas grficas apresentam as melhores caractersticas para criao de programas grficos. Palavras-chave: API, OpenGL, C++.

1. I TRODUO A evoluo das interfaces das aplicaes acompanha de perto a evoluo da computao. Interfaces textuais, como as existentes em sistemas operacionais, como o MS-DOS e UNIX, deram lugar a interfaces grficas orientadas a janelas. Cada sistema possui peculiaridades que so nativas, tornando especfica a programao para cada plataforma. Neste aspecto, a linguagem Java surgiu como unificao entre aplicaes grficas independentes de plataforma de execuo, permitindo que o cdigo possa ser executado

em qualquer ambiente sem que sejam realizadas alteraes. So exemplos os pacotes grficos Java AWT e Java Swing. Por meio desses, pode-se criar interfaces grficas que oferecem recursos de interao com eventos e componentes grficos. Apesar da grande utilizao, a linguagem Java possui limitaes de desempenho pelo fato de ser interpretada, pois no oferece acesso direto aos recursos nativos, apontando o uso de linguagens compiladas, como C++. Em funo dessa tendncia, a portabilidade de aplicativos passa a ser prejudicada, pois exige o conhecimento de complexas APIs de sistemas operacionais. Este artigo apresenta um estudo de caso envolvendo a escolha de APIs grficas que utilizam a linguagem C++ de programao para gerao de interfaces em ambiente multiplataforma. A organizao do trabalho foi feita expondo o problema definido como foco da pesquisa. A seguir, um levantamento das principais APIs grficas foi estabelecido ressaltando as funcionalidades de cada uma separadamente. A partir de ento, uma comparao entre as APIs envolvendo aspectos positivos e negativos passou a ser determinado para que, ao final, fosse possvel concluir quais bibliotecas grficas possuem as melhores funcionalidades para o desenvolvimento de aplicaes grficas baseadas em janelas. 2. DESCRIO DO PROBLEMA

Em se tratando de aplicaes em Computao Grfica para criao de rotinas grficas de modelagem, manipulao de objetos e exibio tridimensional, a biblioteca OpenGL tornou padro para linguagens de programao como C/C++. Alm disso, foi projetada para ser independente do sistema de janelas e sistema operacional. Deste modo, no possui comandos para abertura de janelas e leitura de eventos do teclado e mouse. Para associar uma aplicao grfica em OpenGL com eventos e sistema de janelas do sistema operacional, existe outra API, chamada GLUT (GL Utility Toolkit) cuja funo realizar a integrao com o sistema local, alm oferecer algumas primitivas grficas 3D, proporcionando noes simples para criao de aplicativos grficos. Apesar dessas funcionalidades, a GLUT limitada em comparao com outras APIs envolvendo aplicaes modernas que utilizam botes, barra de tarefas, deslizadores, menus, etc. A partir da simplicidade da GLUT, uma pesquisa envolvendo o levantamento de caractersticas das principais APIs grficas passou a ser definido. O propsito integrar aplicaes em OpenGL com janelas grficas aprimoradas envolvendo componentes GUI modernamente empregados nos sistemas operacionais amplamente utilizados, como Windows e Linux, e que as APIs sejam bem documentadas de modo a facilitar a compreenso no nvel de hierarquia de classes e reutilizao de componentes. Seguindo esses itens, quatro nomes foram identificados como sendo as principais: wxWidgets, Qt, Fox e Gtk+. Aps esse levantamento primrio, demais critrios passaram a ser estabelecidos no intuito de realizar uma escolha de duas APIs que melhor se enquadram para implementao de aplicativos aprimorados com OpenGL. Em se tratando do mbito em nvel de aprendizado acadmico, mais especificamente relacionado ao curso de Computao Grfica, fatores decisivos levaram a uma anlise mais detalhada das

quatro APIs identificadas, focando mais especificamente no nvel de compreenso do cdigo-fonte e nas diretivas de compilao utilizando o compilador padro g++. No que compete ao sistema operacional, foi necessrio avaliar a viabilidade mnima de requisitos envolvendo pacotes necessrios como dependncias de sistema para compilao e execuo de programas utilizando componentes das APIs grficas. Alm disso, diretamente relacionado documentao e a legibilidade de cdigo, foi verificado a confiabilidade de forma a representar o tempo de desenvolvimento do programador, assim como a utilizao das bibliotecas grficas em aplicaes com maior impacto a nvel industrial no desenvolvimento de solues em computao. 3. ASPECTOS DAS BIBLIOTECAS GRFICAS Atravs do levantamento realizado sobre as APIs grficas e a escolha de quatro com as melhores caractersticas, uma descrio envolvendo funcionalidades passa a ser estabelecida de forma a explorar o aspecto do desenvolvimento de aplicativos integrados com OpenGL. O panorama remete as principais caractersticas envolvendo o diferencial de cada biblioteca grfica, de modo a ressaltar as potencialidades na criao de programas principalmente voltado criao de componentes grficos e ao tratamento de eventos de usurio. 3.1 Gtk+ A API GTK+ [1] foi criada para ser usada pelo GIMP e por isso chamado de GIMP Toolkit. Essa API integra o projeto GNU, sendo escrita em C com design orientado a objetos. Para este trabalho foi utilizada a GTKMM que sua interface para C++. Nessa API, o tratamento de eventos realizado atravs da emisso de sinais pelo componente que sofreu interao. O tratador

de sinais responsvel por chamar a funo apropriada. A conexo dos tratadores de sinais com os componentes feita atravs de mtodos especficos, por exemplo, no caso dos botes pelos mtodos signal_pressed, signal_released, entre outros. organizada atravs da utilizao de namespaces, que fazem o agrupamento lgico dos componentes por categoria. Apesar de Gtk ser multiplataforma, as aplicaes no possuem a aparncia nativa de cada sistema, sendo nica para todos. importante observar que esta API no possui suporte a OpenGL, sendo esse suprido pela utilizao da biblioteca gtkglextmm que se integra perfeitamente ao GTKMM. 3.2 WxWidgets A wxWidgets [2] possui como importante caracterstica o seu funcionamento como uma abstrao para o cdigo nativo de manipulao de janelas para cada sistema operacional. Isso permite, com um nico cdigo fonte, obter-se verses do programa para sistemas diferentes e com a prpria aparncia do ambiente. A API faz notavelmente o uso do recurso de macros C++ para facilitar a codificao dos programas. Um exemplo a ausncia explcita da funo main em programas que utilizam a wxWidgets, explicado pelo uso da macro IMPLEMENT_APP, a qual indica API como criar uma instncia da aplicao. Alm disso, para a vinculao de eventos aos componentes grficos so criadas tabelas de associaes de funes e identificadores totalmente implementadas atravs do uso de macros. A simplificao para a criao dos componentes grficos, que pode ser feito atravs da definio de uma instncia da classe correspondente, permite que programas que utilizem esta API possam ter um cdigo legvel e de fcil implementao. Essa API desenvolvida sobre a GTK+ para a sua utilizao em sistemas Linux, caracterizando ainda mais sua caracterstica de camada sobre a interface grfica.

3.3 Qt A API grfica Qt [3] apresenta uma vasta coleo de classes e suporte a OpenGL. Para fazer emprego mnimo de macros em C++, Qt faz uso de uma extenso que vincula uma classe com eventos de usurio. Em funo disso, o cabealho de cada classe, alm de possuir o prottipo para os eventos da classe, deve incluir obrigatoriamente a macro Q_OBJECT especificada por Qt. Atravs do utilitrio MOC [4], cada cabealho contendo a macro lida com o propsito de gerar um metacdigo em C++ contendo componentes especficos de Qt para mapear as classes com seus eventos. A partir disso, a fonte criada por MOC passa a ser compilada e ligada com o restante da implementao usual de classe. Apesar do mecanismo interno de templates em C++, a justificativa [5] de Qt em utilizar esse programa intermedirio para mapeamento das classes com seus eventos est voltada a oferecer ao desenvolvedor uma maneira simplificada de programar atravs de uma sintaxe clara para criao e manuteno de cdigo. Alm disso, muitos compiladores da linguagem C++ apresentam problemas com templates avanados para ambientes multiplataforma e nem todas as questes pertinentes envolvendo interfaces grficas podem ser resolvidas. Um vetor genrico facilmente expressvel mesmo com a especializao parcial de tipos ponteiros. Por outro lado, uma funomembro que constri uma interface grfica baseada num descritor XML dado como uma cadeia de caracteres no simplesmente tratada utilizando templates. 3.4 Fox A API Fox [6] foi inicialmente desenvolvida para Linux, mas as verses mais recentes esto voltadas para executar em modo multiplataforma. Possui uma grande quantidade de componentes grficos

e apresenta uma forma simplificada de associao de classes com seus eventos atravs de identificadores por enumerao. Uma das caractersticas principais a abordagem simplificada para construo de interfaces grficas atravs da forma concisa na criao de componentes. Atravs de uma nica linha de cdigo na instncia de uma classe, Fox auxilia na criao de muitos componentes grficos. Para que essa caracterstica seja possvel, a funcionalidade da atribuio padro de parmetros para argumentos em C++ extensivamente utilizada, resultando na reduo no emprego de vrios mtodos que manipulam um nico componente, evitando a presena de vrias linhas de cdigo no cumprimento de uma mesma especificao. 4. A LISE E TRE AS BIBLIOTECAS GRFICAS A partir da descrio envolvendo as caractersticas e recursos relativos a cada biblioteca grfica, o prximo passo foi realizar um confronto ressaltando as propriedades relacionadas aos critrios adotados na pesquisa de acordo com os fatores decisivos especificados na descrio do problema. Atravs da criao de aplicaes demonstrativas utilizando cada API grfica, um maior contato com o desenvolvimento de programas grficos com cada biblioteca grfica foi possvel de modo a trazer mais prximo do uso prtico. Uma das grandes vantagens de Qt a excelente documentao contendo exemplos na utilizao de diversas classes. A API wxWidgets compartilha dessa caracterstica facilitando a criao de componentes e eventos de forma rpida e simplificada. Em contrapartida, o ncleo de Qt ocupa maior espao em disco devido grande hierarquia de classes. Em se tratando de chamadas para compilao, o utilitrio Qmake includo como componente de Qt para automatizar a criao de Makefile. Embora esse encapsulamento na criao das diretivas de compilao possa oferecer uma comodidade

ao programador, a dependncia passa a ser maior na compilao de aplicativos grficos. Esse aspecto contraria o ideal de aplicar diretivas simples de compilao atravs do entendimento claro do uso das bibliotecas de Qt com as dependncias do sistema operacional, pois o Makefile criado de forma automtica por Qmake complexo, principalmente devido organizao interna de Qt e a integrao do meta-cdigo gerado pelo utilitrio MOC para vinculao de classes com tratamento de eventos. Nesse aspecto, Qt classificado como uma exceo de complexidade, pois as demais bibliotecas grficas apresentam comportamento satisfatrio para criao de Makefile simplificados. A wxWidgets possui uma notvel vantagem em relao GTK+ devido simplicidade na criao dos componentes grficos, permitindo, atravs da instncia da classe, tenha-se um componente j funcional. Essa propriedade tambm explorada extensivamente em Fox e Qt, assim o caso de utilizar atribuies padro no construtor de classe para criao de componentes grficos facilita o emprego de menos linhas para criao de um cdigo mais condensado. Para a implementao de alguns recursos, como a vinculao de eventos a componentes, wxWidgets faz o uso intensivo de macros do C++, acarretando em simplicidade na codificao. Apesar desse emprego reunindo rotinas em forma de macros, a legibilidade de cdigo passa a ser comprometida de forma a no oferecer uma forma mais transparente para o programador. Em contrapartida, o aspecto positivo a inexistncia de um utilitrio prprio para associar uma classe com tratamento de eventos, fato que no ocorre em Qt, oferecendo maior entendimento na compilao de programas. Pelo fato de Gtk+ ser mais difundida em ambiente Linux, principalmente atravs do propsito de ter sido criada inicialmente para o aplicativo GIMP de edio de imagens; e Fox ter sido desenvolvida inicialmente para esse sistema, as dependncias so menores,

contribuindo na reduo de espao adicional em memria secundria, diferentemente de wxWidgets, cujo espao passa a ser maior devido a incluir uma biblioteca prpria de abstrao para acesso de rotinas utilizando componentes Gtk+. Entretanto, em se tratando execuo em ambiente Windows, GTK+ exige, alm de maior espao de armazenamento em disco, uma camada de execuo adicional responsvel pela renderizao de janelas de modo a desempenhar um papel de simular um ambiente prprio de forma a ser compatvel com o sistema grfico nativo. Esta caracterstica singular dentre as APIs analisadas faz com que os programas que utilizam Gtk+ tenham o mesmo visual em todas as plataformas, apresentando comportamento diferenciado das demais APIs, nas quais a aparncia nativa do sistema operacional. 5. CO SIDERAES FI AIS Tendo em posse a descrio e comparao das quatro bibliotecas grficas, a escolha de duas que apresentaram as melhores caractersticas para criao de aplicativos grficos integrados com OpenGL fica melhor constatado, em se tratando do domnio do curso de Computao Grfica. Dessa forma, as bibliotecas grficas que melhor apontam caractersticas positivas so wxWidgets e Qt. Apesar dos aspectos observados sobre as caractersticas das duas APIs escolhidas, possvel afirmar que ambas possuem vantagens no ponto de vista da existncia de uma documentao bastante completa e explicativa, facilitando o desenvolvimento de programas. Embora a dificuldade existente em Qt para criar chamadas simples para compilao, a estratgia foi isolar os pacotes de ncleo em Qt de modo a compor uma forma explcita de chamada de Makefile, desvinculando o uso de Qmake pelo programador. Seguindo o mesmo propsito, wxWidgets mais simplificado para desenvolvimento de programas, pois

possui pacotes de ncleo com menor tamanho de armazenamento em disco, alm de oferecer maior autonomia para criao em chamadas de compilao. O ideal estabelecido foi trabalhar em dois alicerces, ou seja, fazer uso de Qt que emprega menor quantidade de macros, muito embora utilize um utilitrio externo MOC no padro de C++ para vincular classes com tratamento de eventos, ao passo da adoo de wxWidgets como abordagem mais independente de utilitrios incorporados por API, mesmo existindo maior emprego de macros no desenvolvimento de aplicao grfica. A partir deste trabalho, o prximo passo ser disponibilizar, atravs da Internet, tutoriais explicativos envolvendo a utilizao das APIs grficas escolhidas contendo exemplos demonstrativos prticos. Dessa forma, passa a ser melhor aplicvel no mbito do curso de Computao Grfica no desenvolvimento mais facilitado de aplicaes grficas integradas com OpenGL. REFER CIAS [1] GTK+ - the GIMP Toolkit, Disponvel em: <http://www.gtk.org>. Acesso em 14 ago. 2007. [2] wxWidgets, Disponvel em: <http://www.wxwidgets.org>. Acesso em 16 ago. 2007. [3] Website biblioteca grfica Qt. Disponvel em <http://trolltech.com/products/qt>. Acesso em 15 ago. 2007. [4] Utilizando o Meta-object Compiler (MOC). Disponvel em <http://doc.trolltech.com/4.0/moc.html>. Acesso em 15 ago. 2007. [5] Aspectos de Qt para tratar classes com eventos. Disponvel em <http://doc.trolltech.com/4.0/templates.html >. Acesso em 15 ago. 2007. [6] Website biblioteca grfica Fox. Disponvel em <http://www.foxtoolkit.org/>. Acesso em 16 ago. 2007.

Vous aimerez peut-être aussi