Avatar de Usuario
Por Tocinillo
Administrador
Autor del hilo
#80440
Imagen


Ahora que estamos a punto de terminar el GSCO 2017, hemos invitado a nuestro desarrolladores estudiantes a escribir sobre sus avances en el mundo de Kodi. Para los despistados, los tres proyectos de este año están implementando el soporte de shaders en Retroplayer, actualizando Kodi a Python3 para su soporte en addons, y haciendo que Kodi soporte de forma nativa Wayland (para sistemas Linux).

Empezaremos con la actualización de Nick en el tema del soporte de Shaders y os explicaremos las otras actualizaciones a lo largo de la semana.

Soporte de Shaders - Vel0cityX

Mi proyecto iniciar era sobre la implementación de shaders en Retroplayer, pero no solo centrándose en uno en concreto, si no que fuera capaz de soportar varios modos y métodos.

Sin embargo, rápidamente se me ocurrió algo más ambicioso: implementar la misma especificación que los shader de libretro usan. Esta especificación introduce un shader "preset" en los archivos. Éstos, simplemente son archivos de configuración que permiten múltiples opciones de shaders para lograr el filtrado deseado (o varios combinados), sin tener que usar el código de forma manual en todo el proyecto. Tienen otras características también, pero esa es su principal característica y por la que me animé a implementarlo. La mayor ventaja de implementarlo, es que ya hay mucho soporte y comunidad y por lo tanto hace años que está funcionando tanto para OpenGL (ES) como para Direct3D.

Por lo tanto, cambié mi proyecto inicial y me puse manos a la obra.

Para introducir un poco el tema, es importante mencionar que RetroPlayer no tiene su propio renderizador; Nunca lo tuvo. Toda su representación depende enteramente de VideoPlayer (el backend y renderizador utilizado al reproducir cualquier tipo de video en Kodi). Por lo tanto, estaba claro desde el principio que tendría que sortear este problema de una manera u otra.

Junio

El primer mes estuve muy ocupado con los exámenes universitarios, así que desafortunadamente mi tiempo dedicado a esto fue menos de lo que me hubiera gustado.

Nunca había trabajado en Kodi antes, así que al principio mi tiempo se dedicó a crear un entorno de desarrollo listo para programar (me encontré con muchos problemas en este punto), así como familiarizarme con algunas de las partes relevantes de la base de código.

A principios de junio, empecé a usar RetroPlayer por primera vez. Al instante noté algo que no me gustaba mucho: el escalado. Aparentemente, el renderizador de Windows no soportaba el escalado Nearest Neighbor, así que la primera cosa (productiva) que hice fue implementar dicho método en Windows. Tal vez no era algo directamente relacionado con mi proyecto, pero me facilitó la familiarización con una buena parte de la base del código, algo que me sería esencial para las próximas semanas.

Ya hacia mediados de junio y principios de julio, empecé a trabajar en un nuevo renderizador para RetroPlayer, que como os decía antes, tenía que estar basado en VideoPlayer si o si.

Julio

Tras la primera toma de contacto en junio, necesitaba que los preajustes del shader se cargaran. Tras un poco de ayuda de Garrett, decidí usar un addon binario que usa la implementación de RetroArch mediante la carga de archivos .cgp.

El inicio del mes de julio se dedicó a bucear en el mundo loco del desarrollo de addons binarios, creando un nuevo tipo de éstos, construyendo una API básica para él y haciendo que funcione desde dentro de Kodi. Todavía hay mucho trabajo por hacer al respecto, pero todo el marco está configurado ya y... ¡funciona!.

Hay cerca de 6 capas de abstracción entre el addon y lo que Kodi ve (!), Así que desafortunadamente cambiar la API es bastante tedioso (también depende del número de capas).

Sin embargo, era necesario, ya que el código de de RetroArch (el tema de carga de archivos .cgp) no era compatible con Kodi....hasta ahora.

Después de conseguir que funcionara, los cambios de Fernet en VideoPlayer causaron que mi renderizador fuera bastante inútil y necesitara una reescritura por completo. ¡Vaya por dios!

Sin embargo ya no tenía más tiempo para dedicarle al mismo tema, ya que suficiente tenía con mi proyecto inicial, así que decidí darle al tema un enfoque radicalmente distinto.

Sin entrar en tecnicismos, con el nuevo enfoque que le di al proyecto, RetroPlayer sigue siendo dependiente de VideoPlayer, pero menos. Bastante menos. Sin embargo, esta solución rápida, ha provocado que ahora no sea compatible con los nuevos cambios introducidos en VideoPlayer.

Hacerlo de forma limpia me obligaría a rehacer el renderizador copiando VideoPlayer de nuevo, es decir, empezar de 0 otra vez. Así que prefiero centrarme en tener el soporte de Retroarch en mi "versión" y cuando todo funcione perfectamente, hacerlo ya limpio en la versión final.

Si hay tiempo, trabajaré en ello, pero conseguir un MVP es mi máxima prioridad en este momento.

El Futuro

He empezado a trabajar en la parte central de mi proyecto desde la semana pasada. He empezado en la parte del núcleo, refiriéndome a la implementación de shaders para ser renderizados. Eso supuso avanzar en el tema de librerías, en concreto en DirectX 11.

El último problema que al que me enfrenté tenía que ver con el hecho de que todos los shader de libretro que pensaba que se compilarían fácilmente con OpenGL...no lo hicieron.

Sin entrar en demasiados detalles, estos shaders fueron escritos en un lenguaje de sombreado ligeramente diferente (Cg) que el que utiliza D3D (HLSL).

Probablemente podría terminar el backend e implementar un montón de shaders preestablecidos para que los usuarios lo usen, pero no quería que todos los shaders estuvieran "preestablecidos" sobre todo teniendo en cuenta el esfuerzo que he puesto en el proyecto.

Así que, envié un correo electrónico al desarrollador principal de libretro y charlamos un rato, luego me invitó a su canal de IRC y llegamos a las siguientes conclusiones:

- Ambos proyectos se beneficiarían enormemente al portar estos shaders a Direct3D. Cg está ya en desuso y los desarrolladores de Libretro querrían deshacerse de éste y pasarse a D3D.

- Hay alrededor de 600 shaders que necesitan portar, que se utilizan en combinaciones diferentes en más de 500 presets de shader. Eso es un montón de trabajo para mí para hacer en un mes, además de que también tengo que hacer (recordemos) el backend para D3D y OGL. Así que, accedieron a ayudar con el portado de los shaders. Esto sólo podría aumentar la popularidad de libretro después de todo, por lo que ambos proyectos se benefician.

- En el backend, estoy haciendo un progreso rápido, pero es un montón de trabajo, así que no estoy seguro de cuanto tiempo me llevará todo, sobre todo porque, como he mencionado, D3D11 y OpenGL (ES) requieren implementaciones diferentes.

- Afortunadamente muchos shaders no utilizan características muy avanzadas de la especificación, por lo que serán compatibles. Por supuesto, intentaré poner en práctica todo lo que pueda -si no todo-, para hacer uso de tantos shaders preexistentes como sea posible.

Si no me enfrentara a tantos problemas inesperados (y no hubiera perdido casi un mes debido a los exámenes) las cosas podrían haber sido diferentes, pero ¿qué puedes hacer? estas cosas pasan en el mundo de la programación

En definitiva, tengo esperanzas puestas en agosto. No hay duda de que será muy intenso ya que es el tramo final... ¡pero estoy listo para darle caña!

Fuente original: https://kodi.tv/article/gsoc-2017-update-shader-support
speedmoska le gusta esto

Temas similares
Temas Estadísticas Último mensaje
Actualización GSOC 2017: Soporte para Wayland
por Tocinillo  - 14 Ago 2017, 12:12 En Noticias
0 Respuestas
516 Vistas
por Tocinillo
14 Ago 2017, 12:12
Soporte HDMI 2.2
por shinzonito  - 08 Sep 2017, 12:31 En Hardware
13 Respuestas
866 Vistas
por Tocinillo
06 Oct 2017, 17:52
HDMI 2.1 anunciado oficialmente, con soporte de resolución 8K y HDR dinámico
por Malavida  - 05 Ene 2017, 10:13 En Audio y Vídeo
3 Respuestas
704 Vistas
por SUPERSTRAT08
05 Ene 2017, 16:06
Okja (2017)
por speedmoska  - 02 Jul 2017, 19:18 En Movie Fanart (Películas)
0 Respuestas
241 Vistas
por speedmoska
02 Jul 2017, 19:18
antivirus 2017
por amos  - 20 Oct 2017, 10:12 En Software
1 Respuestas
190 Vistas
por Zeoka
20 Oct 2017, 10:36