summaryrefslogtreecommitdiff
path: root/Documentation/HACKING_ES
blob: 475e49cb726cb2d5fec3153ddd844379803620b4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
Tips and pointers (*berylhackingtips):

*Una diminuta porción de Beryl es la magia actual del OpenGL, la 
mayoría del trabajo; es él manipulamiento de los "datos principales 
estructurados", (CompScreen, CompWindow)... el trabajo con Callbacks, (hmm...él 
núcleo es una bestia diferente). El estructuramiento de datos 
apropiadamente, es mucho más relevante que algoritmos 
impresionantes.

*IPCS puede ser usado para la intercomunicación entre los plugins, 
veáse: beryl-core/src/ipcs.c, y Cube/Rotate son dos buenos ejemplos. 
Evite el uso de esto, ya que es lento y ata los plugins de maneras no 
deseadas, y no esperadas.

*La raíz de toda maldad es la optimización prematura, use profile 
preferentemente, esto le ahorrará tiempo de pérdida en optimización. 
Para hacer profile de beryl lo puede compilar con -pg (CFLAGS="-pg" 
./configure; make; blah blah), cuando beryl se cerrará; arrojará en él 
directorio de trabajo 'gmon.out' . Desde ese directorio ejecute gprof 
/destino/de/beryl/ejecutable > berylprof, luego puede ver el profile en 
un editor de texto, o en una herramienta de profile como kprof 
(altamente recomendado).

* WRAP/UNWRAP trabaja un poco mejor como stack de sorts, examine un 
backtrace del gdb para hacer las cosas claras. Esto es relativamente 
inflexible y las ideas para mejoras posteriores a 0.2.0 son bienvenidas.

* Beryl puede ser debugeado sin colgar el sistema, compile con simbolos 
debugging (-g) y ejecutelo en tty con gdb beryl, configure breakpoints 
con 'break function' ejecute con 'run'; cuando X se cuelgue debido al 
break use alt+sysrq+r luego ctrl+alt+f1 para obtener al tty, examine 
cosas, y continue con la ejecucion.

* Enlazar iteraciones o sentencias (o lo que sea) desde; un-unos plugins, 
seteos de núcleo, seteos de plugins 
individuales, o seteos de intervalo, etc..> hacia otros',  es malo y debe 
ser evitado. 
'Escriba (programas) para hacer una cosa y para hacerla bien'.

* Como regla evite los pixel shaders ya que no estan expuestos en la versión 
actual AIGLX . A' la water.

* Los plugins deberán trabajar dentro del núcleo, al mismo tiempo... los 
cambios al núcleo pueden hacerse para acomodar ventajas específicas; como 
por ejemplo el cubo transparente.

A HACER:
*Las optimizaciones son siempre bienvenidas, el benchmark no es 
horrorosamente preciso, pero sin embargo, si usted nota constantemente 
una mejora de ~10-20 FPS , o un decremento en picos de lag , o algo que 
no es más de '1 FPS al rotar el cubo a la izquierda publiquelo,
en el peor de los casos será revertido.

* Enlace de tecla para reemplazar ventanas (que corra a través del 
algóritmo placement ), sería fácil de implementar y una característica 
muy útil. Puntos extra en el caso de que la ventana vuele hacia la nueva 
posición.     

* ¡Comentar el código! no solamente ayuda a todos en sus tareas, te ayuda 
a ti a entender los lineamientos de código.

* Permitir al plugin anotar (anotate), dibujar directamente sobre la 
textura de la ventana. Esto debería involucrar procing drawWindowTexture 
en beryl-plugins/src/neg.c , y bindings en contexto de renderización 
opengl hacia la ventana GLXPixmap, más allá de esto, es muy similar al 
resto de annotate.

* Mejorar las descripciones cortas (short descriptions), probablemente 
involucre (long descriptions), será mas valorado debido a que son 
movidos a tooltips.

* Sabes de alguna manera de agilizar IPCS??

* Refractar algunos de los códigos en su lugar, (es un código spaghetti 
de momento).

* Contribuir al I18N

* Trabajar en kberylsettings, sobre PyQT settings manager en los 
branches.

* Un arreglo de tiempo de retraso a  Opacify, para que no 
dispare el efecto de inmediato. Ver el ejemplo 
beryl-plugins/src/plane.c, parte funcional CompTimeoutHandle...es bastante 
simple, void * closure es pasado al callback. Hacer esto configurable.

* Agregar CompOptionFont a los settings

* Busca funciones a las que se les pueda agregar entrelíneas... 
usar __attribute__((always_inline)) para forzar interlineado,
 inclusive sin la función:  -finline-functions

* Exonerar! ventanas especifícas como parte del menú esmerald de 
decoraciones de ventana . ¿Te acuerdas de esta configuración de 
ventanas? fijate en todo kwin.

* Fijate al usar, macros DESEADAS/NODESEADAS para los argumentos if/else 
en bucles anidados, con una alta discriminación hacia uno o lo otro. Usa 
Profile para encontrar dichas áreas, ¡optimizar prematuramente es malo!	 

* Participar, discurriendo y planeando en IRC, es invaluable. Hagesé 
parte de la comunidad de desarrolladores de beryl, no sea un perro 
vagabundo!

* ¡Y mas cosas/cosillas/demases aquí!

nota de traducc.: si usted no ve las tildes donde corresponde agrege la sig.
línea al archivo de configuración consolefont:
CONSOLETRANSLATION="8859-1_to_uni"