# Desktop (Windows/macOS/Linux) con LWJGL3

> El bucle de iteración rápida — ejecutar, título/rotación, crossfly-lib y el truco de macOS.

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

# Desktop (LWJGL3) 🖥️

Empieza **siempre** por el desktop: es el **bucle de iteración rápida**. No hay hot-reload de Java, pero el
*cold start* es de segundos — validas la UI antes de sufrir con los ciclos de build móvil.

## Ejecutar
```bash
gradlew :lwjgl3:run
```
El `Lwjgl3Launcher` crea la aplicación: `new Main(true, getCommandline(args))` — `canStart=true` levanta la
UI de inmediato. `mainClassName` = `dev.crossfly.lwjgl3.Lwjgl3Launcher`.

## Título, tamaño y rotación
```java
Main.setDesktopTitle("Minha App");   // solo tiene efecto en desktop
main.rotate();                        // simula rotación (intercambia width/height) en desktop
```
Las dimensiones y la escala vienen de `Screen` (`Screen.width`/`height`/`scale`/`minSize`).

## ⚠️ Dos prerrequisitos del desktop
- **`crossfly-lib` (JNI)** debe estar en el `java.library.path` — el `Main.create()` llama a
  `SharedLibraryLoader.load("crossfly-lib")` en el arranque (en todos los destinos, **excepto WebGL**).
- **macOS** exige la flag de la JVM **`-XstartOnFirstThread`** (requisito de LWJGL3/GLFW en Mac). Sin ella,
  la app no abre ventana.

## Diagnóstico
- El handler global de excepciones canaliza los fallos (ver [Errores y logging](/docs/best-practices/tratamento-de-erros-e-logging)).
- `Debug.showFPS = true` para ver la tasa de fotogramas.
- Genera capturas de pantalla (doc/tienda): `Main.getScreenShot(true).toPng("prefixo_")`.

## Buenas prácticas
- Desarrolla y valida la UI **en el desktop**; ve al móvil solo cuando la pantalla esté lista.
- Prueba la **rotación** (`rotate()`) y distintos tamaños de ventana para comprobar la responsividad.

## Errores comunes
- Olvidar `-XstartOnFirstThread` en macOS (la ventana no abre).
- `crossfly-lib` fuera del `java.library.path` (falla en el arranque).

## Ver también
- [Build y distribución](/docs/platforms/building-and-releasing) · [Responsividad](/docs/best-practices/responsividade)
