# Desktop (Windows/macOS/Linux) com LWJGL3

> O loop de iteração rápida — rodar, título/rotação, crossfly-lib e a pegadinha do macOS.

Source: https://crossfly.dev/pt/docs/platforms/desktop-lwjgl3 — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# Desktop (LWJGL3) 🖥️

Comece **sempre** pelo desktop: é o **loop de iteração rápida**. Não há hot-reload de Java, mas o
*cold start* é de segundos — você valida a UI antes de sofrer com ciclos de build mobile.

## Rodar
```bash
gradlew :lwjgl3:run
```
O `Lwjgl3Launcher` cria a aplicação: `new Main(true, getCommandline(args))` — `canStart=true` sobe a
UI imediatamente. `mainClassName` = `dev.crossfly.lwjgl3.Lwjgl3Launcher`.

## Título, tamanho e rotação
```java
Main.setDesktopTitle("Minha App");   // só tem efeito no desktop
main.rotate();                        // simula rotação (troca width/height) no desktop
```
Dimensões e escala vêm de `Screen` (`Screen.width`/`height`/`scale`/`minSize`).

## ⚠️ Dois pré-requisitos do desktop
- **`crossfly-lib` (JNI)** precisa estar no `java.library.path` — o `Main.create()` chama
  `SharedLibraryLoader.load("crossfly-lib")` no arranque (em todos os alvos, **exceto WebGL**).
- **macOS** exige a flag da JVM **`-XstartOnFirstThread`** (requisito do LWJGL3/GLFW no Mac). Sem ela,
  o app não abre janela.

## Diagnóstico
- O handler global de exceções canaliza falhas (ver [Erros e logging](/docs/best-practices/tratamento-de-erros-e-logging)).
- `Debug.showFPS = true` para ver a taxa de quadros.
- Gere screenshots (doc/loja): `Main.getScreenShot(true).toPng("prefixo_")`.

## Boas práticas
- Desenvolva e valide a UI **no desktop**; só vá ao mobile quando a tela estiver pronta.
- Teste **rotação** (`rotate()`) e diferentes tamanhos de janela para checar responsividade.

## Erros comuns
- Esquecer `-XstartOnFirstThread` no macOS (janela não abre).
- `crossfly-lib` fora do `java.library.path` (falha no arranque).

## Veja também
- [Build e distribuição](/docs/platforms/building-and-releasing) · [Responsividade](/docs/best-practices/responsividade)
