Em 2009, José Antônio Leal de Farias[7], um membro ativo da comunidade XNA, iniciou um projeto de código aberto chamado XNA Touch com o objetivo de portar jogos XNA 2D simples para dispositivos móveis. Ele começou com o SilverSprite de Bill Reiss e alguns elementos do Mono.XNA. Em dezembro de 2009, o primeiro lançamento, que suportava apenas o iPhone, foi postado no Codeplex. Durante o ano de 2010, vários jogos para iPhone que utilizavam o XNA Touch começaram a aparecer na Apple App Store.
Em março de 2011 o projeto foi renomeado para MonoGame e foi movido para o GitHub. No mesmo ano foi adicionado o suporte para Android, Mac OS, Linux e OpenGL para Windows.[8]Dominique Louis, que entrou no projeto em 2009, assumiu como o líder em tempo integral.
No início de 2012, foi adicionado suporte para DirectX 11 e Windows 8, fornecendo a primeira e atualmente única maneira de portar jogos XNA para a Windows Store. Posteriormente, isso resultou no suporte para o Windows Phone 8 e uma nova plataforma de desktop do Windows. Neste mesmo ano, a equipe do MonoGame foi convidada para falar no evento //Build 2012/ da Microsoft.[9]
No início de 2014, a administração do projeto MonoGame foi entregue a Tom Spilman e Steve Williams, que atualmente lideram o projeto.
Filosofia
MonoGame é um framework que adota a filosofia de "traga suas próprias ferramentas", o que significa que fornece os componentes essenciais para construir sua própria engine e ferramentas, mas não se configura como uma engine completa. Ao contrário de outras soluções, como o Unity ou o Unreal, o MonoGame não possui um editor de cenas.[10]
Destinado a programadores que apreciam compreender o funcionamento interno dos sistemas. Ele é desenvolvido com foco na liberdade de personalização e na possibilidade de compreender profundamente os processos subjacentes.
Versões
O MonoGame lançou várias versões importantes ao longo dos anos, cada uma trazendo mudanças significativas ao framework. Abaixo, você encontrará uma lista contendo as principais versões lançadas até o momento, contendo detalhes e informações relevantes sobre suas alterações e atualizações no projeto. Todas as informações foram retiradas da página oficial de registro de alterações no site do MonoGame.[11]
XnaTouch 0.7
No dia 2 de dezembro de 2009, foi lançada oficialmente a versão 0.7 do MonoGame[12], que inicialmente recebeu o nome de XnaTouch 0.7. Essa versão representou um marco importante, sendo a primeira versão estável do framework, e foi desenvolvida com foco exclusivo no suporte ao iPhone. Suas principais funcionalidades incluíam recursos de renderização 2D, reprodução de áudio, capacidades de rede e suporte parcial para interações multitouch. Além disso, havia suporte parcial para aproveitar os recursos do acelerômetro do dispositivo.
MonoGame 2.0
Em 28 de outubro de 2011, foi lançada a versão 2.0 do MonoGame[13], trazendo consigo importantes mudanças. Nessa atualização, o projeto foi renomeado para MonoGame e passou a ser hospedado no GitHub, o que trouxe maior acessibilidade e possibilitou uma colaboração mais ampla com a comunidade de desenvolvedores. Além disso, o suporte foi expandido além do iPhone, incluindo agora plataformas como Linux e Mac. Essa atualização permitiu que um número maior de desenvolvedores utilizasse o framework em diferentes sistemas operacionais e se beneficiasse das funcionalidades oferecidas pelo MonoGame.
MonoGame 2.1
No dia 28 de outubro de 2011, foi lançada a versão 2.1 do MonoGame[14], trazendo consigo várias melhorias e adições para várias plataformas suportadas pelo framework. Diversas características foram aprimoradas, como a reescrita do gerenciador de conteúdo, que passou a utilizar classes parciais e as implementações em cache, que resultaram em uma redução significativa no uso de memória. Além disso, foram feitas melhorias na classe ContentReader e no suporte de áudio XACT. Além disso, também havia sido adicionado suporte para gamepads e joysticks, com planos para melhorias futuras nas integrações.
No iOS, ocorreram melhorias no suporte a gestos e na transição entre os modos retrato e paisagem. O suporte à WaveBank também foi aprimorado, e a funcionalidade Guia estava disponível exclusivamente para o iOS nessa versão.
No Android, foi feita uma atualização para oferecer suporte ao Mono para Android 4.0. Também houve melhorias no suporte de orientação e o sistema de som foi alterado para utilizar o SoundPool. Além disso, o suporte a gestos de toque e toque duplo foi adicionado.
No MacOS X, foram realizados diversos aprimoramentos e correções relacionados ao modo de tela cheia e ao controle em janela. Também foram implementadas várias propriedades e eventos para controle de atividade e eventos no dispositivo. As funções de renderização, como DrawPrimitives, DrawUserPrimitives e DrawIndexedPrimitives, também receberam melhorias significativas. Além dessas mudanças, o suporte à WaveBank foi aprimorado.
Nos sistemas Linux e Windows, foram adicionadas novas implementações que compartilhavam grande parte do código com o MacOS X. Além disso, foi acrescentado suporte a shaders no Linux.
MonoGame 2.5
No dia 29 de março de 2012, foi lançada a versão 2.5 do MonoGame[15], trazendo diversas correções e adições para diferentes plataformas suportadas pelo framework. Essas mudanças visavam melhorar a estabilidade e a confiabilidade em busca de jogos, além de aprimorar a funcionalidade geral do MonoGame.
Algumas das alterações realizadas incluíram correções na pilha de rede para aprimorar a busca por jogos e garantir uma experiência mais confiável. Além disso, foram realizadas atualizações nos códigos de renderização e no código do jogo para que estivessem em conformidade com o XNA 4.0 e para garantir uma compatibilidade adequada.
MonoGame 3.0
No dia 1º de janeiro de 2013, foi lançada a versão 3.0 do MonoGame[16], trazendo consigo diversas melhorias e adições ao projeto. Essa atualização expandiu o suporte para novas plataformas, incluindo Windows 8, Windows Phone 8, OUYA e PlayStation Mobile, incluindo o Vita.
Uma das principais novidades dessa versão foi a introdução de efeitos personalizados, que permitiam aos desenvolvedores criar efeitos visuais exclusivos para seus jogos. Além disso, foi adicionado suporte PVRTC para iOS, o que resultou em melhor desempenho e qualidade gráfica em dispositivos Apple. O iOS também passou a suportar músicas compactadas, reduzindo o tamanho dos arquivos de áudio sem comprometer significativamente a qualidade.
Também houve melhorias na compatibilidade com o XNA 4, tornando o MonoGame mais semelhante ao comportamento dessa versão e facilitando a transição para os desenvolvedores familiarizados com o Microsoft XNA 4 Framework.
MonoGame 3.2
No dia 7 de abril de 2014, foi lançada a versão 3.2 do MonoGame[17], trazendo uma série de melhorias e adições significativas. Essa atualização trouxe o suporte oficial ao Visual Studio 2013 para modelos MonoGame e melhorias no desempenho do XInput no Windows/Windows 8.
Em relação a recursos e compatibilidade, essa versão trouxe suporte para texturas DXT/S3TC no Android, melhorias no suporte a toque em jogos de desktop do Windows, aprimoramentos no renderizador 3D e melhorias no gamepad OUYA. Internamente, o MonoGame passou por atualizações para reduzir a geração de lixo em seu sistema.
Outras melhorias incluíram suporte automático para recarga de conteúdo no currículo para Android, suporte para TextureCube, Texture3D e RenderTargetCube no DirectX, e aprimoramento de TitleContainer.SupportRetina para carregar conteúdo em alta resolução.
Além disso, a versão 3.2 trouxe várias correções e melhorias em áreas diversas do framework, como em operações de matemática, renderização, áudio e mídia. Além dessas, foram feitas outras correções externas específicas para o iOS, Windows Phone e PSM (PlayStation Mobile).
E por último, uma nova plataforma desktop para Windows havia sido introduzida, utilizando DirectX/XAudio, e o projeto antigo do Windows ela foi renomeada para WindowsGL.
MonoGame 3.3
No dia 16 de março de 2015, foi lançada a versão 3.3 do MonoGame[18], trazendo uma série de melhorias e novos recursos. Nessa atualização, foram adicionados sistemas modernos para a manipulação de inputs do teclado, além de mais validação para desenhar chamadas e renderizar elementos. Também foi introduzido o suporte para busca de textura de vértice no Windows.
Foram realizadas otimizações, como a redução de chamadas OpenGL redundantes, aprimoramentos nos cálculos de zona morta do gamepad e a utilização do FFmpeg para construção de conteúdo de áudio. Além disso, foram feitas várias correções e melhorias específicas para Android, iOS, Windows Phone e Windows Store. O pipeline de conteúdo também foi aprimorado com o suporte opcional de compactação de conteúdo.
Outras atualizações incluíram a criação de todas as ferramentas e pipeline de conteúdo para 64 bits. Houve correções para PSM e adição de suporte Protobuild para geração de projetos. Também foi realizada uma refatoração interna para uma melhor separação do código específico da plataforma, além da adição da ferramenta de linha de comando MGCB ao instalador do Windows pertencente ao MonoGame.
MonoGame 3.4
No dia 29 de abril de 2015, foi lançada a versão 3.4 do MonoGame[19], trazendo diversas melhorias e correções ao framework. Nessa atualização, as extensões de pipeline de conteúdo antigas do XNA foram removidas e substituídas por novos tipos que foram adicionados ao projeto para preencher as lacunas existentes.
Uma das melhorias significativas foi feita na documentação de referência, proporcionando um melhor entendimento e acesso às informações sobre o framework. Além disso, foram realizadas melhorias nas versões Mac, Linux e Windows da ferramenta Pipeline GUI, aprimorando sua usabilidade e funcionalidade.
MonoGame 3.5
Em 17 de março de 2016, foi lançada a versão 3.5 do MonoGame[20], trazendo consigo uma série de melhorias e novos recursos. Uma das principais novidades foi a integração do pipeline de conteúdo com o Xamarin Studio e o MonoDevelop no Mac e no Linux, tornando mais fácil e automático incluir os arquivos XNB no projeto final nessas plataformas.
Uma refatoração significativa no suporte a texturas no pipeline de conteúdo foi realizada, visando melhorar a eficiência e a qualidade do processamento. Além disso, foram adicionados 151 novos testes de unidade, garantindo uma maior estabilidade e confiabilidade do framework. Foram feitas melhorias significativas no processamento de modelos FBX, bem como correções para a serializaçãoXML.
Uma adição importante foi a implementação da MediaLibrary para plataformas Windows, proporcionando aos desenvolvedores uma maneira fácil de gerenciar e acessar arquivos de mídia. A plataforma PlayStation Mobile foi removida nessa versão. Também foi introduzido um projeto de modelo de extensão para o pipeline de conteúdo.
Com a versão 3.5, é possível vincular vários buffers de vértice em uma única chamada de desenho, otimizando o desempenho da renderização.
MonoGame 3.6
MonoGame 3.6, lançado em 28 de fevereiro de 2017, trouxe uma série de modificações e atualizações significativas para o framework. Nesta versão, foram adicionados novos recursos, como suporte para definições arbitrárias passadas para o compilador Effect, permitindo aos desenvolvedores personalizar e estender ainda mais os efeitos gráficos em seus jogos. Além disso, foi adicionado suporte para filtragem de comparação, oferecendo maior controle sobre a filtragem de texturas.
O desempenho do MonoGame também foi aprimorado com diversas otimizações. Foi implementada uma compressão de texturas personalizada para ao gerenciador e elementos relacionados a texto e fontes textuais, reduzindo o uso de memória e melhorando a eficiência do carregamento e renderização de fontes. A renderização de texto recebeu melhorias de desempenho, tornando-a muita mais rápida. Além disso, foi implementada a descarga de todos os recursos gráficos nos testes de unidade, garantindo que os recursos sejam liberados corretamente e evitando vazamentos de memória.
Outras melhorias e correções foram feitas em diferentes áreas do framework. Isso incluiu melhorias no processamento de áudio e texturas, aprimoramentos em suporte a diferentes plataformas e ferramentas, como a implementação do SDL2 para plataformas GL de desktop, que melhorou a compatibilidade e o desempenho em sistemas operacionais como Linux e macOS. Também houve aprimoramento da extensibilidade da plataforma interna e a refatoração de várias classes e recursos para melhorar a organização e manutenção do código.
Essas modificações e atualizações contribuíram para melhorar a estabilidade, o desempenho e a funcionalidade geral do MonoGame, tornando-o uma opção ainda mais robusta para o desenvolvimento de jogos multiplataforma.
Nesta versão, algumas funcionalidades foram removidas, como a plataforma OUYA, que deixou de ser suportada.
MonoGame 3.7
A versão 3.7 do MonoGame, lançada em 23 de setembro de 2018[21], trouxe várias melhorias e correções para a estrutura de desenvolvimento de jogos multiplataforma.
Uma das principais alterações foi a remoção das propriedades de Escala e Rotação da matriz, o que exigiu ajustes no código existente para lidar com essas transformações de maneira diferente. Além disso, a plataforma Nintendo Switch foi adicionada como uma nova plataforma suportada, permitindo o desenvolvimento de jogos MonoGame para essa plataforma.
Outras melhorias incluíram atualizações no SDL Gamepad DB, que melhoraram o suporte a gamepads e correções para eventos da roda de rolagem no Windows, solucionando problemas específicos nessa plataforma.
Diversas correções foram feitas para resolver problemas específicos em diferentes áreas do MonoGame. Por exemplo, melhorias foram feitas no VideoPlayer para Desktop DirectX, corrigindo possíveis problemas de reprodução de vídeo. A função Texture2D.FromStream no Windows DirectX também recebeu correções para garantir o carregamento correto de texturas a partir de fluxos. Além disso, a atualização do back buffer do DirectX foi corrigida para melhorar a renderização gráfica. Também foram feitas melhorias no desempenho de funções importantes, como SpriteFont.MeasureString() e SpriteBatch.DrawString(), visando tornar essas operações mais eficientes.
A versão 3.7 também trouxe muitas melhorias relacionadas as ferramentas que compõe o ambiente MonoGame. A ferramenta Pipeline foi atualizada com novas opções e recursos, fornecendo aos desenvolvedores mais controle sobre o processo de compilação e gerenciamento de conteúdo. Uma página de manual do MGCB (MonoGame Content Builder) foi incluída para usuários de Linux, fornecendo documentação adicional sobre essa ferramenta. Além disso, os ícones do modelo e do Mac Info.plist foram atualizados para melhorar a aparência e a consistência dos aplicativos MonoGame nessas plataformas. Também foram realizadas atualizações nas dependências do MonoGame, incluindo a atualização para o SharpDX 4.0.1 e a versão mais recente do Assimp, uma biblioteca para importação de modelos 3D.
MonoGame 3.8 (Atual)
A versão 3.8 do MonoGame foi lançada em 10 de agosto de 2020[22], trazendo uma série de adições, mudanças e correções. Esta atualização trouxe melhorias específicas para diversas plataformas, visando tornar a experiência mais acessível e eficiente para os desenvolvedores.
Foram adicionadas várias funcionalidades e aprimoramentos importantes. Agora é possível pesquisar fontes no HKEY_CURRENT_USER no Windows, além de contar com eventos KeyDown e KeyUp no GameWindow. O suporte ao formato de textura Etc2 e à plataforma Google Stadia também foi implementado, ampliando as opções disponíveis para os desenvolvedores.
Além das novas funcionalidades, a equipe do MonoGame também se dedicou a aprimorar o desempenho e corrigir problemas. Foram realizadas melhorias no sistema de som, otimizações para joysticks e aprimoramentos básicos de desempenho para Texture2D no DirectX. Também houve redução de lixo em métodos específicos do Direct X, melhorias no estado do mouse e do teclado, entre outros ajustes.
Nessa versão, algumas funcionalidades foram removidas para simplificar e otimizar a experiência. A biblioteca MonoGame.Framework.Net e as classes internas de utilitários PNG deixaram de fazer parte do conjunto de recursos disponíveis.
Além das adições e mudanças mencionadas, a versão 3.8 do MonoGame trouxe correções para diversos problemas identificados. Agora há suporte a arrays com mais de 255 elementos em shaders, foram corrigidos problemas no carregamento de bibliotecas nativas em diferentes plataformas e solucionadas falhas e problemas de inicialização em diversos dispositivos e sistemas operacionais. Essas correções contribuem para uma experiência mais estável e confiável ao utilizar o MonoGame.
Ferramentas
O MonoGame implementa seu próprio pipeline de conteúdo, que é responsável por transformar os recursos não otimizados em conteúdo otimizado para a plataforma de destino. Esse processo é fundamental para garantir que o jogo seja executado de forma eficiente, levando em consideração as restrições de recursos. Além disso, o MonoGame também disponibiliza ferramentas para auxiliar na criação e gerenciamento desse conteúdo.
Essas ferramentas são fornecidas como componentes .NET e são instaladas automaticamente quando se utiliza os modelos do MonoGame. As instruções detalhadas para utilização dessas ferramentas podem ser encontradas abaixo:
Editor MGCB: o Editor MonoGame Content Builder (MGCB) é uma interface gráfica para a edição dos arquivos mgcb.
Existem diversas implementações do MonoGame, conhecidas como plataformas de destino, que são compatíveis com diferentes sistemas. Cada plataforma é direcionada principalmente a um sistema específico, embora algumas delas possam oferecer suporte a vários sistemas. Por exemplo, a plataforma "DesktopGL" pode ser utilizada para criar jogos que serão executados no Windows, macOS e Linux, utilizando o mesmo código-base e projeto.
A seguir, apresenta-se uma lista das principais plataformas do MonoGame, juntamente com uma breve explicação sobre cada uma:
WindowsDX: Essa plataforma é destinada à criação de jogos para o sistema Windows utilizando o DirectX como backend gráfico.
DesktopGL: Essa plataforma é voltada para a criação de jogos multiplataforma, com suporte para Windows, macOS e Linux. Ela utiliza o OpenGL como backend gráfico.
Plataforma Universal do Windows: Essa plataforma permite criar jogos para o ecossistema Universal do Windows, incluindo dispositivos Windows 10, Xbox One e Windows Mixed Reality.
Android: Essa plataforma é destinada ao desenvolvimento de jogos para dispositivos Android, como smartphones e tablets.
iOS: Essa plataforma possibilita a criação de jogos para dispositivos iOS, incluindo iPhone e iPad.
Detalhes das plataformas
WindowsDX
A plataforma WindowsDX utiliza a biblioteca WinForms para gerenciar a janela do jogo no sistema Windows. Ela utiliza o DirectX (versão 9.0c ou mais recente) para renderização gráfica e o XAudio para reprodução de áudio.
É importante ressaltar que o WindowsDX requer a instalação da runtime do DirectX de junho de 2010 para compilar e executar os jogos. Certifique-se de que os jogadores tenham essa versão do DirectX instalada em seus sistemas. Caso contrário, pode haver limitações no suporte a áudio e ao uso de gamepads.
DesktopGL
A plataforma DesktopGL utiliza a biblioteca SDL para gerenciar as janelas do jogo em diversas plataformas. Ela faz uso do OpenGL para renderização gráfica e do OpenAL-Soft para áudio. Esta plataforma é compatível com os sistemas operacionais Windows (versão 8.1 e superior), macOS (Catalina 10.15 e superior) e Linux (apenas 64 bits).
Essa plataforma é uma solução prática para a publicação de compilações de jogos para Windows, macOS e Linux a partir de um único projeto e código-fonte. Além disso, é possível realizar a compilação cruzada de qualquer uma dessas plataformas a partir de um sistema operacional diferente (por exemplo, é possível criar um jogo para Linux a partir do Windows).
Windows Universal
A plataforma Windows Universal é executada na Plataforma Universal do Windows (UWP). O Windows Universal utiliza o DirectX para gráficos e o XAudio para áudio, assim como a plataforma WindowsDX.
A UWP possui duas versões, cada uma com seu próprio modelo de projeto:
Modelo de aplicativo XAML: um aplicativo no qual o jogo é hospedado em uma página XAML. Essa opção é útil quando se deseja oferecer uma experiência UWP mais complexa, com várias páginas ou controles XAML.
Modelo de aplicativo principal: um aplicativo bruto sem XAML, mais direto, adequado quando não há necessidade de controles XAML.
Esta plataforma é destinada à publicação de jogos na Windows Store, tanto para Windows quanto para Xbox (por meio do Xbox Live Creators Program).
Android
A plataforma Android utiliza o Xamarin.Android. O OpenGL é utilizado para gráficos e o OpenAL para áudio.
iOS
A plataforma iOS utiliza o Xamarin.iOS. O OpenGL é utilizado para gráficos e o OpenAL para áudio.
Mostruário
Existem inúmeros jogos, bibliotecas e ferramentas criados usando o MonoGame ao longo dos anos. Abaixo estão listadas pequenas amostras desses títulos, que incluem desde grandes sucessos até pequenas joias escondidas. Grande parcela dos jogos listados abaixo foram retirados do site oficial do MonoGame, na página de showcase.[23]
Atualmente, o MonoGame está sob a Licença Pública da Microsoft, conhecida como Microsoft Public License (Ms-PL). Essa licença é aplicada ao software e governa o seu uso. A Ms-PL concede uma licença de direitos autorais não exclusiva, mundial e livre de royalties para reproduzir, criar obras derivadas e distribuir o software ou quaisquer obras derivadas criadas a partir dele.[24]
Além disso, a Ms-PL também inclui uma licença de patente não exclusiva, mundial e livre de royalties que permite fazer, usar, vender, importar e/ou dispor de contribuições patenteadas em software ou obras derivadas criadas a partir dele. É importante destacar que a licença não concede direitos de uso de nomes, logotipos ou marcas registradas dos contribuidores.
A licença estabelece algumas condições e limitações, como a obrigação de reter todos os avisos de direitos autorais, patentes, marcas registradas e atribuições presentes no software distribuído. Se uma reivindicação de patente for feita contra algum contribuidor devido a supostas violações de patente pelo software, a licença de patente concedida automaticamente pelo contribuidor ao software será encerrada. Além disso, a licença declara que o software é fornecido "como está", ou seja, sem garantias expressas dos contribuidores.