ocornut

Activity

Stars and mentions · Last 30 days, Oct 8 – Nov 6

GitHub stars422
Mentions4
08162432Oct 8Oct 22Nov 6
UTC days · repositories ocornut owns2 repositories

Top repositories

ocornut’s repositories ranked by pull request authors, as on trending.

Loading

Contributes to

Repositories outside ocornut’s account where ocornut opened or reviewed pull requests in the past 365 days.

Who noticed ocornut

Everyone who starred or forked ocornut’s repositories since the archive began in 2011.

Notable accounts

Ordered by the stars their own repositories have received.

Biggest fans

Accounts that starred the most of these repositories.

Breakout weeks

Each repository’s best week of new stars, with the release published around it.

Mentions

4posts
Nov 70 posts
  1. BUI lleva la interfaz de Blender a Rust, Python, JS, C y C++ Un desarrollador identificado como ppmpreetham sacó la interfaz gráfica completa de Blender de su código fuente original y la convirtió en una librería independiente para Rust, Python, JavaScript, C y C++. El proyecto se llama BUI, y su propio repositorio afirma rendir el doble que GPUI, el motor de interfaz que usa el editor Zed. BUI pertenece a una categoría que crece rápido en el desarrollo de software de escritorio: la de la UI acelerada por GPU, frameworks que dibujan cada botón, panel y slider directamente en la tarjeta gráfica en lugar de delegarlo a un motor de navegador o a los widgets nativos del sistema operativo. TL;DR - BUI extrae el código de widgets de Blender y lo expone como librería en Rust, Python, JavaScript, C y C++.- Un núcleo en C (el kit) dibuja los widgets siguiendo el mismo código que usa interface_widgets.cc en Blender.- Las apps de tkinter corren sobre BUI sin cambios, según documenta el propio repositorio del proyecto.- Dear ImGui adopta el tema visual de Blender con un solo flag de compilación, sin tocar la lógica de la app.- La UI acelerada por GPU evita cargar un motor de navegador completo solo para dibujar paneles y botones. ¿Qué es la UI acelerada por GPU? La UI acelerada por GPU es la familia de frameworks de interfaz gráfica que delegan el layout, el dibujo y la composición de cada widget a la tarjeta gráfica en lugar de a un motor de navegador o a los widgets nativos del sistema, lo que reduce memoria y acelera el redibujado. En la práctica, esto significa que la app no abre una ventana del sistema operativo y le pide a Windows, macOS o GTK que dibuje un botón. El framework mantiene su propio árbol de widgets, calcula su geometría y envía triángulos y texturas directamente a la GPU, como lo haría un videojuego. GPUI, el framework que usa el editor Zed, fue de los primeros en popularizar este enfoque fuera de los videojuegos: renderiza el editor de texto completo como una escena GPU, no como texto HTML. BUI sigue una filosofía parecida, pero en vez de diseñar un motor desde cero reutiliza el que Blender ya pulió durante dos décadas. El repositorio de BUI documenta siete pares de bindings distintos para un único núcleo en C. Por qué importa El problema que resuelve un toolkit de UI nativo como este es viejo: construir una interfaz gráfica que se vea bien en Windows, macOS y Linux siempre obligó a elegir entre dos malos tragos. O usabas los widgets nativos de cada sistema, con look consistente pero tres bases de código distintas, o metías Electron y arrastrabas un navegador completo. Electron empaqueta Chromium y Node.js dentro de cada aplicación, lo que explica por qué apps como Slack o VS Code pesan cientos de megabytes y consumen varios cientos de MB de RAM solo para mostrar una ventana con texto y botones. Ese costo no es un detalle menor cuando la app corre en una laptop con 8 GB de RAM compartidos con el resto del sistema. La UI acelerada por GPU ataca ese problema desde otro ángulo. Si el motor ya dibuja directo en la GPU con un núcleo nativo compacto, no hace falta cargar un navegador para pintar un selector de color o una barra deslizante. El resultado son binarios más chicos y arranques más rápidos, al costo de perder el ecosistema enorme de HTML y CSS que trae Electron. Cómo funciona BUI se organiza en dos capas. Abajo está el kit, un núcleo escrito en C que mantiene el árbol completo de widgets, procesa el mouse y el teclado, calcula el layout y dibuja todo siguiendo las reglas de interacción de Blender. Arriba están los bindings: capas finas que traducen Python, Rust, JavaScript, C++ y Dear ImGui al lenguaje que entiende el kit. El núcleo en C El código de dibujo de widgets no es una reinterpretación, es un port directo de interface_widgets.cc, el archivo real de Blender que dibuja cada botón, menú y slider. Eso significa que los detalles que los artistas de Blender ya conocen de memoria, como el campo numérico que se arrastra sin que el cursor toque el borde de la pantalla o el buscador de menús que entiende "ad cu" como "Add Cube", llegan intactos a cualquier lenguaje que use BUI. Los bindings Cada binding expone una sintaxis distinta sobre el mismo kit. El lado de Python y C ofrece una API directa sobre los widgets de Blender. El lado de Rust soporta tanto un builder al estilo GPUI como una sintaxis RSX inspirada en React, y el lado de JavaScript permite escribir componentes en React o Svelte usando HTML y CSS como lenguaje de UI, sin que eso implique un navegador real detrás. Renderizado por daño Como Blender, el kit no redibuja la pantalla completa en cada frame. Calcula qué widgets cambiaron desde el último frame, un valor que se arrastró o un botón que se iluminó al pasar el mouse, y solo envía a la GPU la región dañada. El resto del framebuffer queda intacto, que es la razón principal por la que una app con este motor consume batería distinto a una con animaciones constantes de CSS. flowchart TD A["Tu app en Python, Rust, JS, C o C++"] --> B["Binding del lenguaje"] B --> C["Kit: núcleo en C"] C --> D["Árbol de widgets"] C --> E["Motor de dibujo CPU o GPU"] D --> E E --> F["Ventana en pantalla"] sequenceDiagram participant U as Usuario participant K as Kit en C participant G as GPU U->>K: mueve el mouse sobre un botón K->>K: calcula qué widgets cambiaron K->>G: envía solo la región dañada G-->>K: devuelve el frame compuesto Note over K,G: el resto de la pantalla no se redibuja Ejemplos prácticos El punto de partida más simple es una app de tkinter sin cambios. El propio proyecto documenta que corre "unchanged" sobre el motor de BUI: import tkinter as tk root = tk.Tk() root.title("Hola BUI") etiqueta = tk.Label(root, text="Panel renderizado con el motor de Blender") etiqueta.pack(padx=20, pady=20) root.mainloop() Este código no tiene nada especial, es tkinter puro. La diferencia la pone el backend que BUI conecta por debajo, que sustituye el motor de dibujo nativo del sistema por el del kit. No hay salida de consola porque es una app gráfica: lo que cambia es que la ventana se dibuja con el motor de Blender en lugar del motor nativo de Tk. Un segundo ejemplo, ya con Dear ImGui en C++, muestra el otro extremo: una app que ya corre sobre un motor de interfaz inmediata real y que BUI puede re-vestir con un solo flag de compilación. #include "imgui.h" void DibujarPanelMateriales(float& intensidad) { ImGui::Begin("Materiales"); ImGui::SliderFloat("Intensidad", &intensidad, 0.0f, 1.0f); ImGui::End(); } El código usa la API real de Dear ImGui: Begin, SliderFloat y End no son inventados, son las llamadas estándar de esa librería. Según el repositorio de BUI, activar el flag correspondiente hace que ese mismo panel se dibuje con la paleta y el estilo de Blender en lugar del tema por defecto de ImGui, sin tocar una línea de la lógica de arriba. Blender publicó el código original de interface_widgets.cc bajo licencia GPL antes de que BUI lo convirtiera en librería aparte. Cómo empezar Dependencias antes de tocar nada: git, un compilador de C/C++ (GCC, Clang o MSVC) y CMake. Con eso alcanza para compilar el núcleo: git clone https://github.com/ppmpreetham/BUI.git cd BUI cmake -B build cmake --build build Este bloque es idéntico en Linux y macOS si ya tenés Clang o GCC instalado. En Windows, abrí el comando desde el "Developer Command Prompt for VS" que instala Visual Studio, para que CMake encuentre el compilador sin configuración extra. Esto compila el kit y las bindings que features.cmake detecte disponibles en tu sistema. Para instalar el binding específico de Python, Rust o JavaScript, la guía oficial en bui.preetham.top y el propio repositorio documentan el comando exacto por lenguaje: cloná primero el repo con los comandos de arriba y seguí esa guía para el paso final. Para confirmar que la compilación generó algo usable, revisá que la carpeta build/ tenga binarios y corré uno de los ejemplos de la carpeta examples/ del repositorio. No hay forma directa de verificar desde afuera la cifra "el doble que GPUI" que menciona el proyecto sin correr el benchmark que publican en su carpeta bench/. Casos de uso reales Hay cuatro perfiles de desarrollador a los que este framework de interfaz gráfica les resuelve un problema concreto. - Apps de tkinter envejecidas: equipos con herramientas internas en Python y tkinter que quieren modernizar el look sin reescribir la lógica de negocio.- Herramientas para artistas 3D: software que ya apunta a usuarios de Blender y quiere que paneles, atajos y sliders se sientan familiares desde el primer uso.- Apps en Rust o React sin navegador: equipos que escriben frontend en React o Rust y quieren una ventana de escritorio nativa sin empaquetar un navegador completo.- Proyectos con Dear ImGui: herramientas internas de desarrollo que ya corren sobre ImGui y quieren un tema visual más pulido con un cambio mínimo. Comparativa con alternativas Ninguna de estas opciones es objetivamente mejor: cada una asume un costo distinto a cambio de una ventaja distinta. OpciónCuándo usarlaVentajaLimitaciónBUIQuerés el look y los atajos de Blender en Python, Rust, JS o C++Un solo núcleo en C para varios lenguajes, sin navegadorSin soporte de accesibilidad todavía, según el propio proyectoGPUIConstruís en Rust dentro del ecosistema de ZedRenderizado GPU nativo pensado para edición de texto de alto rendimientoSin bindings oficiales para Python o JavaScriptElectronYa tenés una web app y necesitás una versión de escritorio rápidoEcosistema web completo: HTML, CSS y JS sin aprender nada nuevoCada ventana carga un Chromium completo, con el consumo de RAM que eso implicaQt o GTKQuerés que la app se vea nativa del sistema operativoIntegración total con el SO y toolchains maduros de décadasCada plataforma dibuja distinto; portar el mismo look a los tres SO exige trabajo extra Errores comunes y buenas prácticas - Confundir BUI con Blender: no hace falta tener Blender instalado ni saber modelar para usarlo. El kit es un port del código de widgets, no la suite completa.- Asumir que es un navegador: el lado de Rust y JavaScript usa HTML y CSS como lenguaje para describir la UI, pero no hay motor de navegador, webview ni red de por medio.- Dar por hecho accesibilidad y soporte de IME: el proyecto documenta que todavía no tiene métodos de entrada para otros idiomas ni soporte de accesibilidad.- Mezclar BUI con GPUI por el nombre: son proyectos distintos, de autores distintos, aunque el propio BUI se compare directamente con GPUI en su documentación. > ⚠️ Ojo: BUI documenta que todavía no tiene soporte de accesibilidad ni métodos de entrada para otros idiomas (IME). Es un punto a evaluar antes de llevarlo a producción. Profundizando El diseño de BUI distingue tres "looks" para el mismo árbol de widgets: el modo HTML, con estilos vía CSS para quien viene del frontend web; el modo styled, una capa de theming propia más cercana a un design system; y el modo Blender components, los widgets tal cual se ven en Blender, con su paleta y su tipografía. Los tres looks comparten el mismo motor de layout e interacción, lo que cambia es solo la capa de dibujo final. Otra decisión de diseño relevante son los window hosts: BUI puede alojar su árbol de widgets dentro de una ventana nativa del sistema operativo o dentro de un contexto embebido, por ejemplo un panel dentro de otra app. Esto es lo que permite usar BUI como un overlay de herramientas dentro de un motor de videojuego o de otra aplicación host, en vez de exigir una ventana propia. El manejo de texto y fuentes sigue también el modelo de Blender: un sistema de shaping propio en lugar de delegar en el motor de fuentes del sistema operativo, lo que mantiene el mismo resultado visual de un extremo a otro de Windows, macOS y Linux. Lo mismo pasa con los temas claro y oscuro, que no son una hoja de estilos superpuesta sino parte del mismo motor de dibujo que ya resuelve el daño por región. La capa de renderizado también elige entre CPU y GPU según la plataforma: el mismo motor puede caer a un backend de software cuando no hay una GPU disponible o confiable, algo que los frameworks puramente GPU no siempre contemplan. Esa flexibilidad es parte de por qué BUI se presenta como alternativa a GPUI en vez de como un simple clon, prioriza la compatibilidad con hardware viejo sobre exigir una GPU moderna en todos los casos. > 💭 Clave: el kit de BUI no es un fork de Blender completo, es un port en C de una sola parte de su código, interface_widgets.cc, compilado como librería aparte. 📖 Resumen en Telegram: Ver resumen Tu próximo paso: cloná el repositorio de BUI, compilalo con CMake y corré el ejemplo de tkinter de su carpeta examples/ para ver el motor de Blender dibujando una ventana que no es Blender. Preguntas frecuentes ¿BUI necesita tener Blender instalado para funcionar? No. BUI extrajo el código de dibujo de widgets de Blender y lo compiló como librería aparte, así que no depende de tener Blender instalado ni de conocer su interfaz de modelado 3D. ¿Qué significa UI acelerada por GPU en la práctica? Significa que el framework dibuja botones, paneles y sliders enviando geometría y texturas directo a la tarjeta gráfica, en vez de pedirle ese trabajo a un motor de navegador o a los widgets nativos del sistema operativo. ¿BUI reemplaza a Electron? Solo si tu app no necesita el ecosistema HTML y CSS completo de un navegador. BUI cubre React y Svelte en su binding de JavaScript, pero sin motor de navegador ni Node.js detrás, así que APIs web específicas del DOM no están disponibles. ¿Qué lenguajes soporta el toolkit de UI nativo de BUI? Python, Rust, JavaScript, incluyendo React y Svelte, C, C++ y Dear ImGui, todos sobre el mismo núcleo en C. ¿En qué se diferencia BUI de GPUI? GPUI es el motor de Zed, escrito y pensado para Rust. BUI apunta a ser multilenguaje desde el diseño y reutiliza un motor de 20 años de Blender en vez de construir uno nuevo desde cero. El propio proyecto afirma superarlo en rendimiento, aunque sin publicar las cifras completas en el README. Referencias - GitHub: ppmpreetham/BUI: repositorio y documentación oficial del proyecto.- Electron: documentación oficial sobre su arquitectura basada en Chromium y Node.js.- Zed: sitio del editor que popularizó GPUI como motor de interfaz acelerado por GPU en Rust.- GitHub: ocornut/imgui: repositorio oficial de Dear ImGui, la librería de interfaz inmediata que BUI puede re-vestir con el tema de Blender.- Wikipedia: Immediate mode GUI: contexto sobre el modelo de interfaz inmediata frente al retenido. 📱 ¿Te gusta este contenido? Únete a nuestro canal de Telegram @programacion donde publicamos a diario lo más relevante de tecnología, IA y desarrollo. Resúmenes rápidos, contenido fresco todos los días.

  2. A UI library that feels like magic Dear ImGui is a bloat-free immediate mode graphical user interface library for C++. 🍒 Built by omar ocornut/imgui #opensource #cpp

    1 like
  3. @pld73 For now I have pushed this github.com/ocornut/imgui/commit/c7d17f01cd3e14bbc… let me know if you need to push-back.

    223 views
  4. @ocornut Hopefully this will suffice - imgui#9585

    13 views

Achievements

Awards earned by the repositories ocornut owns. Select an award to embed its badge.

Gold
11st place finishes
Silver
02nd place finishes
Bronze
03rd place finishes
Awarded repositories
1Owned by ocornut now

Repositories

Ordered by gold, then silver, then bronze.

  1. imguiBest: 1st by stars, 483 stars100

Every award

Top-three finishes of these repositories in completed trending days and weeks, newest first.

  1. imgui

A repository earns an award for finishing first, second or third in a completed trending day or week, ranked by new stars, new forks or pull request authors. Awards follow a repository through renames and transfers and count toward its current owner. Weeks run Monday to Sunday, UTC.