Creacin de intros 4k - PowerPoint PPT Presentation

About This Presentation
Title:

Creacin de intros 4k

Description:

Necesitamos crear todos los contenidos pensando en la limitaci n de 4 kb ... Hablad ahora, o callad para siempre !!!one (o buscadnos en #demoscene en irc-hispano) ... – PowerPoint PPT presentation

Number of Views:47
Avg rating:3.0/5.0
Slides: 29
Provided by: slackCod
Category:

less

Transcript and Presenter's Notes

Title: Creacin de intros 4k


1
Creación de intros 4k
  • Jorge slack Gorbe
  • Bernat shash Muñoz

2
Qué explicaremos
  • Dificultades al crear una 4k
  • Técnicas específicas de Windows
  • Técnicas específicas de Linux
  • Técnicas generales a todas las 4k

3
Qué no explicaremos
  • Intros 100 ensamblador
  • Como programar intros desde cero
  • Creación de sintetizadores o similares
  • Direct3D
  • Otras muchas cosas!

4
Dificultades al crear una 4k
  • No existen herramientas comerciales adecuadas
  • No existen soluciones directas
  • Necesitamos crear todos los contenidos pensando
    en la limitación de 4 kb

5
Contenidos orientados a 4k
  • No podemos tratar los datos como en una demo
  • Cualquier contenido no generado, ocuparía
    demasiado
  • En dos palabras GENERAR TODO
  • Gráficos 2D/3D, música, hasta sincro

6
Programación orientada a 4k
  • Usar ensamblador
  • Más control sobre el código
  • Menos productivo
  • Difícil de optimizar globalmente
  • Ganar a un compilador es difícil

7
Técnicas específicas de Windows
  • Inicialización de la 4k
  • Bucle principal
  • Uso del visualC para ejecutables pequeños

8
Inicialización de la 4k
  • Método estándar
  • Crear y registrar una clase
  • Crear nuestra ventana
  • Iniciar el thread de sonido
  • Iniciar openGL

9
Inicialización de la 4k
  • Método para intros de 4k
  • Crear la ventana usando una clase ya existente
  • Generar todo el sonido durante el loading
  • Iniciar openGL

10
Crear la ventana usando una clase ya existente
  • Usar la clase EDIT que ya está registrada
  • No usar el parámetro de la instancia
  • hWnd CreateWindow("EDIT","EDIT",
  • WS_POPUPWS_VISIBLE,0,0,
  • width,height,0,0,0,0)

11
Generar todo el sonido durante el loading
  • Usemos sintetizador o módulo, podemos pregenerar
    toda la onda
  • Desventajas
  • Loading muy largo
  • Consumo masivo de memoria
  • Ventajas
  • No necesitamos usar un thread
  • Toda la reproduccion de audio se reduce a una
    llamada a PlaySound(...)

12
Bucle principal
  • Como no usamos una clase, no tenemos el WndProc
    (...)
  • No usaremos mensajes
  • Un bucle principal seria
  • while (!GetAsyncKeyState(VK_ESCAPE)) // Salimos
    con ESC
  • RenderIntro ()

13
Compresores
  • Solo vale la pena usar Crinkler
  • Programado pensando en 4k
  • Mejor compresion
  • Mejor compatibilidad
  • Muy lento para comprimir
  • Usa muchisima memoria al descomprimir
  • Necesidad de aprender como comprime

14
Tecnicas para VisualC 2003
  • Al quitar las librerías estándar
  • Tenemos que definir fltused si usamos la FPU
  • extern "C" _fltused 1
  • El WinMain cambia por WinMainCRTStartup
  • extern "C" __declspec(noreturn) void
    WinMainCRTStartup()
  • Tenemos que definir nuestro propio ftol

15
Tecnicas para VisualC 2003
  • Opciones de compilación
  • Usar fastcall como formato de función estandar
    (No siempre comprime mejor)
  • Generar código con optimización por Velocidad o
    Completa
  • Usar optimizaciones globales
  • En la generación de código, deshabilitar
    Comprobación de seguridad de buffer

16
Intros 4k en Linux
  • Técnicas similares a las de Windows
  • Reducir el número de imports al mínimo
    (incluyendo la libc)
  • Escribir código compressor-friendly
  • Gzip-dropping
  • Trucos específicos
  • Funciones built-in (intrinsics)
  • Carga de libs dinámicas a mano
  • sstrip (optimización de cabeceras ELF)

17
libc
  • nostartfiles elimina el código de
    inicialización.
  • Nuevo punto de entrada _start(). Debemos llamar
    a exit() al final.
  • nostdlib evitamos enlazar con la libc.
  • Como ya no tenemos exit(), debemos definir uno
  • define exit(code) \
  • asm(int 0x80a(1),b(code))

18
Gzip-dropping
  • Igual que el CAB-dropping en Windows.
    Aprovechamos que gzip está incluido en el sistema
    base de cualquier distribución.
  • Tamaño del unpacker 56 bytes )
  • a/tmp/a
  • tail n7 0zcatgta
  • chmod x a
  • a
  • rm a
  • exit
  • ejecutable original gzippeado

19
GCC Built-ins
  • Versiones in-line optimizadas de funciones
    habituales
  • Por ejemplo sinf, cosf, memset ...
  • Ejemplo de uso
  • float x __builtin_sinf(angle)
  • -ffast-math !!!
  • Útiles para los que no dominamos el ASM -)

20
Opciones de compilación
  • Optimización
  • -O1, -O2, -O3 velocidad
  • -Os tamaño
  • A veces On genera código más pequeño (o más
    compresible)
  • fastcalls con gcc __attribute__((regparm(n)))
  • Hay una serie de flags que producen resultados
    poco predecibles al comprimir ? brute-forcing con
    gc masher.
  • Probando versiones diferentes de GCC te puedes
    llevar alguna sorpresa.

21
Carga de libs dinámicas
  • Las secciones necesarias en la cabecera ELF para
    importar funciones de libs dinámicas son
    demasiado grandes.
  • Podemos usar dlopen() y dlsym() para cargarlas
    nosotros mismos en tiempo de ejecución.
  • void handledlopen(libGL.so, RTLD_NOW)
  • mi_glEnable dlsym(handle, glEnable)

22
SDL
  • Incluida en la instalación básica de la mayor
    parte de distribuciones (estándar de facto)
  • Nos permite crear intros portables con un poco de
    cuidado.

23
Tecnicas generales openGL
  • Objetivo reducir el número de imports y
    llamadas.
  • No hacer backface cullling
  • glEnable(GL_CULL_FACE)
  • No utilizar glGenTextures glGenLists. Gestiona tú
    mismo los IDs.
  • No usar coordenadas de textura glTexGen

24
Tecnicas generales openGL
  • Si sólo usamos una textura, podemos usar el ID 0
    sin hacer un glBindTexture
  • Si no usamos mipmaps solo hay que definir el modo
    de filtrado para GL_MIN_FILTER.

25
Tecnicas generales
  • Reutilizar cada efecto todo lo que se pueda (si
    puedes usar solo uno mejor)
  • No hacer casts (si no es necesario)
  • Usar inline para las funciones que sólo se llaman
    una vez
  • A veces puede interesar reemplazar parámetros de
    funciones con variables globales.

26
Tecnicas generales
  • No utilizar variables para todo aquello que sea
    constante.
  • No repetir cálculos complejos parecidos
  • Es conveniente igualar constantes con valores
    parecidos (mejora la compresión)

27
Tecnicas generales
  • Links interesantes
  • Código Etram http//collapse.scenesp.org/shash/
    clp_etram_src.rar
  • Código 4ks en linux
  • http//slack.codemaniacs.com
  • Homepage de Fit (más fuentes de 4k en linux)
  • 4k intro kit http//www.northerndragons.ca/mod.ph
    p?moduserpagemenu2227page_id76
  • Hugi Coding Edition http//www.hugi.scene.org/mai
    n.php?pagehugise01

28
Preguntas?
  • Hablad ahora, o callad para siempre !!!one
  • (o buscadnos en demoscene en irc-hispano)
Write a Comment
User Comments (0)
About PowerShow.com