O documento descreve a API gráfica Metal da Apple para iOS, apresentando seus principais conceitos e componentes como Device, Command Queue, Command Buffer, Buffers, Textures e Pipelines. Explica como criar um projeto simples usando Metal para renderizar um triângulo de cores variadas na tela.
O documento apresenta conceitos sobre desenvolvimento para iOS. Ele discute sobre a plataforma iOS, pré-requisitos, ferramentas e recursos para desenvolvedores como Xcode, Interface Builder, UIKit e Objective-C. Imagens, elementos de controle como botões, sliders e segmentos são apresentados com ênfase na interface gráfica.
O documento discute a sobrecarga de operadores em C++. Ele explica que sobrecarregar um operador permite aplicá-lo a tipos de dados definidos pelo usuário como classes e estruturas. Em seguida, apresenta exemplos de sobrecarga de operadores unários, binários e de acesso a elementos de vetores e matrizes.
The document discusses computer graphics hardware and GPU computing. It explains that GPUs have thousands of smaller cores that are optimized for parallel processing compared to CPUs which have a few cores for serial processing. GPU computing uses both the CPU and GPU together, with serial code running on the CPU and parallel code on the GPU. The document also covers topics like the CUDA platform, GPU specifications, raster displays, frame buffers, double buffering, 3D graphics pipelines, and the different types of transformations involved in 3D rendering like model, view and projection transforms.
Presenting on CATiledLayer at Melbourne Cocoaheds February 2012.
JCMultimedia blog post: http://blog.jcmultimedia.com.au/2012/02/jctiledscrollview.html
Demo code is available here: https://github.com/jessedc/JCTiledScrollView
This document discusses GPU programming with GPUImage and Metal frameworks. It provides an overview of GPUs and how they are suited for parallel processing compared to CPUs. It also summarizes the history and evolution of OpenGL and OpenGL ES graphics APIs. Key frameworks for graphics programming on iOS like Core Animation, GLKit and SpriteKit are hardware accelerated. The document demonstrates GPUImage for image processing and introduces Metal as a new low-level graphics framework from Apple promising improved performance. While Metal requires deeper hardware understanding, it could be a potential game changer for parallel programming.
Core Image is an image processing framework that provides fast and efficient filters. It encapsulates low-level graphics processing to apply effects like monochrome, vignette, and face detection. Filters can be chained and applied to images from photos, video, or GL textures. Core Image renders processing to the GPU or CPU and has a simple Objective-C API. It is portable across iOS and OS X with some differences in creation methods and built-in filters.
This document introduces the GPUImage framework, an open source iOS library for GPU-based image and video processing. It provides advantages over Core Image such as improved performance for real-time previews through OpenGL ES shader code and greater customization abilities. The framework uses frame buffer objects and textures to process video frames on the GPU, applying filters through shader programs before saving results back to the CPU. It employs Grand Central Dispatch for multi-threaded processing across CPU and GPU.
O documento apresenta conceitos sobre desenvolvimento para iOS. Ele discute sobre a plataforma iOS, pré-requisitos, ferramentas e recursos para desenvolvedores como Xcode, Interface Builder, UIKit e Objective-C. Imagens, elementos de controle como botões, sliders e segmentos são apresentados com ênfase na interface gráfica.
O documento discute a sobrecarga de operadores em C++. Ele explica que sobrecarregar um operador permite aplicá-lo a tipos de dados definidos pelo usuário como classes e estruturas. Em seguida, apresenta exemplos de sobrecarga de operadores unários, binários e de acesso a elementos de vetores e matrizes.
The document discusses computer graphics hardware and GPU computing. It explains that GPUs have thousands of smaller cores that are optimized for parallel processing compared to CPUs which have a few cores for serial processing. GPU computing uses both the CPU and GPU together, with serial code running on the CPU and parallel code on the GPU. The document also covers topics like the CUDA platform, GPU specifications, raster displays, frame buffers, double buffering, 3D graphics pipelines, and the different types of transformations involved in 3D rendering like model, view and projection transforms.
Presenting on CATiledLayer at Melbourne Cocoaheds February 2012.
JCMultimedia blog post: http://blog.jcmultimedia.com.au/2012/02/jctiledscrollview.html
Demo code is available here: https://github.com/jessedc/JCTiledScrollView
This document discusses GPU programming with GPUImage and Metal frameworks. It provides an overview of GPUs and how they are suited for parallel processing compared to CPUs. It also summarizes the history and evolution of OpenGL and OpenGL ES graphics APIs. Key frameworks for graphics programming on iOS like Core Animation, GLKit and SpriteKit are hardware accelerated. The document demonstrates GPUImage for image processing and introduces Metal as a new low-level graphics framework from Apple promising improved performance. While Metal requires deeper hardware understanding, it could be a potential game changer for parallel programming.
Core Image is an image processing framework that provides fast and efficient filters. It encapsulates low-level graphics processing to apply effects like monochrome, vignette, and face detection. Filters can be chained and applied to images from photos, video, or GL textures. Core Image renders processing to the GPU or CPU and has a simple Objective-C API. It is portable across iOS and OS X with some differences in creation methods and built-in filters.
This document introduces the GPUImage framework, an open source iOS library for GPU-based image and video processing. It provides advantages over Core Image such as improved performance for real-time previews through OpenGL ES shader code and greater customization abilities. The framework uses frame buffer objects and textures to process video frames on the GPU, applying filters through shader programs before saving results back to the CPU. It employs Grand Central Dispatch for multi-threaded processing across CPU and GPU.
An overview of Apple's game development technologies, followed up by tips and techniques for using UIKit for game development. The later third of the talk is an overview of games I've worked on in UIKit.
Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014Chris Adamson
Graphics on iOS and OS X isn't just about stroking shapes and paths in Core Graphics and trying to figure out OpenGL. The Core Image framework gives you access to about 100 built-in filters, providing everything from photographic effects and color manipulation to face-finding and QR Code generation. It can leverage the power of the GPU to provide performance fast enough to perform complex effects work on real-time video capture. But even if you're not writing the next Final Cut Pro or Photoshop, it's easy to call in Core Image for simple tasks, like putting a blur in part of your UI for transitions or privacy reasons. In this session, we'll explore the many ways Core Image can make your app sizzle
Gpu Programming With GPUImage and MetalJanie Clayton
GPUs are specialized processors that can perform parallel floating point math operations quickly. This allows GPUs to efficiently process graphics. Metal is a new graphics framework from Apple that promises improved performance over OpenGL ES by reducing expensive CPU tasks like shader compilation. By precompiling shaders and validating state once at load time rather than per draw call, Metal allows more draw calls to be processed per frame. GPUImage is an existing library that provides efficient image processing by utilizing OpenGL ES and serial dispatch queues to minimize CPU overhead. While OpenGL ES will still be supported, Metal offers performance benefits for tasks involving many independent objects by further reducing CPU workload.
O documento discute simulação de física em games, abordando fenômenos físicos, engines de física, simulação de partículas, corpos rígidos, constraints, colisões e alguns engines populares.
Curso "Desenvolvendo aplicações de uso geral para GPU com CUDA".Filipo Mór
Este documento apresenta um mini-curso sobre desenvolvimento de aplicações para GPU com CUDA. O documento discute brevemente a história das GPUs, o que é uma GPU, programação GPU com CUDA e exemplos de implementação.
O documento descreve a linguagem assembly, incluindo:
1) Assembly é uma abstração simbólica da linguagem de máquina, mapeada diretamente em instruções de hardware.
2) Cada comando em assembly corresponde a uma instrução de máquina e permite acesso a todas as características do hardware.
3) Assembly é usado quando é necessário alto desempenho ou acesso direto ao hardware, como em drivers e partes críticas de aplicações.
WANs e Roteadores Cap. 3 Configurando um Roteador - CCNA 3.1 Wellington Pinto...Wellington Oliveira
O documento discute os comandos de configuração de roteadores Cisco, incluindo como configurar nomes, senhas, interfaces e descrições de interface. Também aborda backups de configuração e resolução de nomes de hosts.
O documento discute conjuntos de instruções e como programas são traduzidos para a linguagem de máquina. Explica que instruções são palavras na linguagem da máquina e que conjuntos de instruções diferem entre arquiteturas. Também descreve os níveis de abstração entre linguagens de programação, montagem e máquina.
A biblioteca OpenCV é uma biblioteca de visão computacional de código aberto que fornece funções para processamento de imagem em tempo real. Ela possui interfaces para C/C++, Python e Java e suporte para Windows, Linux, Android e Mac OS. O documento explica como instalar e usar a biblioteca para carregar, processar e analisar imagens.
Funcionamento interno do node.js e boas práticasKirmayr tomaz
- O documento apresenta os principais conceitos do funcionamento interno do Node.js, incluindo a estrutura, dependências e ferramentas.
- As partes fundamentais são o V8 para interpretar JavaScript e o Libuv para I/O assíncrono.
- O event loop é responsável por manter o código assíncrono executando de forma não bloqueante através da fila de tarefas e microtarefas.
Este documento apresenta o framework Nest para construção de APIs com Node e TypeScript. Cobre tópicos como estrutura de projeto, controllers, rotas, parâmetros, services e injeção de dependência. O objetivo é consolidar conhecimentos em APIs e aplicar padrões de mercado como o modelo do Angular.
Este documento apresenta o framework Play! e discute seus principais conceitos e componentes. Em 3 frases:
O Play! é um framework web full-stack para Java e Scala que utiliza arquitetura MVC e convenção sobre configuração. Ele possui componentes como rotas, controladores, modelos e views para construir aplicações web. O documento demonstra como criar um projeto Play! simples para gerenciar tarefas utilizando esses componentes.
Fevereiro de 1998
Objectivo da apresentação:
- introduzir o VRML 2.0 como linguagem de especificação de cenas 3D
Pre-requisitos
- conhecimento de princípios de programação
- conhecimento do paradigma de programação orientada a objectos
- conhecimentos básicos de geometria analítica
- conhecimentos básicos sobre a Internet e HTML
O documento fornece uma introdução sobre registradores em sistemas x86, descrevendo os principais registradores de uso geral e especiais, como EAX, EBX, EIP e EFLAGS. Explica a organização dos registradores e diferenças entre as sintaxes AT&T e Intel.
O documento discute a geração de código objeto, que é a última fase de um compilador. Ele explica que o gerador de código objeto recebe a representação intermediária do compilador e produz um código objeto semanticamente equivalente para a máquina-alvo. Alguns conceitos importantes incluem a seleção de instruções, alocação de registradores e escalonamento de instruções.
As bases de dados ficam alojadas no servidor onde está instalado o MySQL/MariaDB. Normalmente encontram-se na pasta "data" dentro da instalação do MySQL/MariaDB.
Por exemplo, numa instalação padrão do MySQL no Linux, as bases de dados ficam na pasta "/var/lib/mysql/". Já no Windows, a pasta padrão é "C:\Program Files\MySQL\MySQL Server x.x\data\".
Portanto, resumindo, as bases de dados ficam fisicamente alojadas no servidor MySQL/MariaDB, na pasta de dados da sua instalação. O phpMyAdmin é
Criando sua própria linguagem de programaçãoronaldoferraz
O documento discute a criação de uma nova linguagem de programação chamada Mirror. Apresenta os conceitos-chave de linguagens de programação como sintaxe, semântica e gramáticas formais. Descreve elementos da linguagem Mirror como slots, contextos e mensagens. Explica como a linguagem é interpretada usando um parser, AST, bytecodes e máquina virtual.
O documento apresenta um sistema de monitoramento chamado Prometheus. Ele discute a arquitetura do Prometheus, incluindo o servidor Prometheus, exportadores, AlertManager e Grafana. Também aborda conceitos como métricas, bancos de dados timeseries, instrumentação de código, push gateway e alertas.
Este documento discute SQL e o uso de bancos de dados relacionais. Ele fornece uma introdução aos principais conceitos de SQL como DDL, DML, consultas, funções agregadas e operadores relacionais. Também apresenta exemplos de como criar e manipular tabelas, banco de dados e consultas em SQL.
O documento descreve uma linguagem de programação chamada Pascal. O Pascal foi criado em 1971 por Niklaus Wirth para promover o uso de código estruturado. O Pascal foi muito popular na década de 1980 e é frequentemente usado para ensinar conceitos básicos de programação. O documento explica elementos-chave do Pascal como variáveis, constantes, operadores, estruturas de decisão e repetição.
An overview of Apple's game development technologies, followed up by tips and techniques for using UIKit for game development. The later third of the talk is an overview of games I've worked on in UIKit.
Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014Chris Adamson
Graphics on iOS and OS X isn't just about stroking shapes and paths in Core Graphics and trying to figure out OpenGL. The Core Image framework gives you access to about 100 built-in filters, providing everything from photographic effects and color manipulation to face-finding and QR Code generation. It can leverage the power of the GPU to provide performance fast enough to perform complex effects work on real-time video capture. But even if you're not writing the next Final Cut Pro or Photoshop, it's easy to call in Core Image for simple tasks, like putting a blur in part of your UI for transitions or privacy reasons. In this session, we'll explore the many ways Core Image can make your app sizzle
Gpu Programming With GPUImage and MetalJanie Clayton
GPUs are specialized processors that can perform parallel floating point math operations quickly. This allows GPUs to efficiently process graphics. Metal is a new graphics framework from Apple that promises improved performance over OpenGL ES by reducing expensive CPU tasks like shader compilation. By precompiling shaders and validating state once at load time rather than per draw call, Metal allows more draw calls to be processed per frame. GPUImage is an existing library that provides efficient image processing by utilizing OpenGL ES and serial dispatch queues to minimize CPU overhead. While OpenGL ES will still be supported, Metal offers performance benefits for tasks involving many independent objects by further reducing CPU workload.
O documento discute simulação de física em games, abordando fenômenos físicos, engines de física, simulação de partículas, corpos rígidos, constraints, colisões e alguns engines populares.
Curso "Desenvolvendo aplicações de uso geral para GPU com CUDA".Filipo Mór
Este documento apresenta um mini-curso sobre desenvolvimento de aplicações para GPU com CUDA. O documento discute brevemente a história das GPUs, o que é uma GPU, programação GPU com CUDA e exemplos de implementação.
O documento descreve a linguagem assembly, incluindo:
1) Assembly é uma abstração simbólica da linguagem de máquina, mapeada diretamente em instruções de hardware.
2) Cada comando em assembly corresponde a uma instrução de máquina e permite acesso a todas as características do hardware.
3) Assembly é usado quando é necessário alto desempenho ou acesso direto ao hardware, como em drivers e partes críticas de aplicações.
WANs e Roteadores Cap. 3 Configurando um Roteador - CCNA 3.1 Wellington Pinto...Wellington Oliveira
O documento discute os comandos de configuração de roteadores Cisco, incluindo como configurar nomes, senhas, interfaces e descrições de interface. Também aborda backups de configuração e resolução de nomes de hosts.
O documento discute conjuntos de instruções e como programas são traduzidos para a linguagem de máquina. Explica que instruções são palavras na linguagem da máquina e que conjuntos de instruções diferem entre arquiteturas. Também descreve os níveis de abstração entre linguagens de programação, montagem e máquina.
A biblioteca OpenCV é uma biblioteca de visão computacional de código aberto que fornece funções para processamento de imagem em tempo real. Ela possui interfaces para C/C++, Python e Java e suporte para Windows, Linux, Android e Mac OS. O documento explica como instalar e usar a biblioteca para carregar, processar e analisar imagens.
Funcionamento interno do node.js e boas práticasKirmayr tomaz
- O documento apresenta os principais conceitos do funcionamento interno do Node.js, incluindo a estrutura, dependências e ferramentas.
- As partes fundamentais são o V8 para interpretar JavaScript e o Libuv para I/O assíncrono.
- O event loop é responsável por manter o código assíncrono executando de forma não bloqueante através da fila de tarefas e microtarefas.
Este documento apresenta o framework Nest para construção de APIs com Node e TypeScript. Cobre tópicos como estrutura de projeto, controllers, rotas, parâmetros, services e injeção de dependência. O objetivo é consolidar conhecimentos em APIs e aplicar padrões de mercado como o modelo do Angular.
Este documento apresenta o framework Play! e discute seus principais conceitos e componentes. Em 3 frases:
O Play! é um framework web full-stack para Java e Scala que utiliza arquitetura MVC e convenção sobre configuração. Ele possui componentes como rotas, controladores, modelos e views para construir aplicações web. O documento demonstra como criar um projeto Play! simples para gerenciar tarefas utilizando esses componentes.
Fevereiro de 1998
Objectivo da apresentação:
- introduzir o VRML 2.0 como linguagem de especificação de cenas 3D
Pre-requisitos
- conhecimento de princípios de programação
- conhecimento do paradigma de programação orientada a objectos
- conhecimentos básicos de geometria analítica
- conhecimentos básicos sobre a Internet e HTML
O documento fornece uma introdução sobre registradores em sistemas x86, descrevendo os principais registradores de uso geral e especiais, como EAX, EBX, EIP e EFLAGS. Explica a organização dos registradores e diferenças entre as sintaxes AT&T e Intel.
O documento discute a geração de código objeto, que é a última fase de um compilador. Ele explica que o gerador de código objeto recebe a representação intermediária do compilador e produz um código objeto semanticamente equivalente para a máquina-alvo. Alguns conceitos importantes incluem a seleção de instruções, alocação de registradores e escalonamento de instruções.
As bases de dados ficam alojadas no servidor onde está instalado o MySQL/MariaDB. Normalmente encontram-se na pasta "data" dentro da instalação do MySQL/MariaDB.
Por exemplo, numa instalação padrão do MySQL no Linux, as bases de dados ficam na pasta "/var/lib/mysql/". Já no Windows, a pasta padrão é "C:\Program Files\MySQL\MySQL Server x.x\data\".
Portanto, resumindo, as bases de dados ficam fisicamente alojadas no servidor MySQL/MariaDB, na pasta de dados da sua instalação. O phpMyAdmin é
Criando sua própria linguagem de programaçãoronaldoferraz
O documento discute a criação de uma nova linguagem de programação chamada Mirror. Apresenta os conceitos-chave de linguagens de programação como sintaxe, semântica e gramáticas formais. Descreve elementos da linguagem Mirror como slots, contextos e mensagens. Explica como a linguagem é interpretada usando um parser, AST, bytecodes e máquina virtual.
O documento apresenta um sistema de monitoramento chamado Prometheus. Ele discute a arquitetura do Prometheus, incluindo o servidor Prometheus, exportadores, AlertManager e Grafana. Também aborda conceitos como métricas, bancos de dados timeseries, instrumentação de código, push gateway e alertas.
Este documento discute SQL e o uso de bancos de dados relacionais. Ele fornece uma introdução aos principais conceitos de SQL como DDL, DML, consultas, funções agregadas e operadores relacionais. Também apresenta exemplos de como criar e manipular tabelas, banco de dados e consultas em SQL.
O documento descreve uma linguagem de programação chamada Pascal. O Pascal foi criado em 1971 por Niklaus Wirth para promover o uso de código estruturado. O Pascal foi muito popular na década de 1980 e é frequentemente usado para ensinar conceitos básicos de programação. O documento explica elementos-chave do Pascal como variáveis, constantes, operadores, estruturas de decisão e repetição.
Este documento resume as principais etapas da geração de código em compiladores: 1) geração de código intermediário, que produz um código mais próximo da linguagem da máquina antes da tradução final; 2) otimização desse código intermediário para produzir um código objeto mais eficiente; e 3) geração do código objeto final na linguagem da máquina alvo.
Como desenvolver com um sistema com um front-end colossal?Mozart Diniz
Essa apresentação conta a nossa saga pra conseguir construir, manter, performar e garantir a qualidade de um sistema com uma camada enorme de JavaScript, aqui falamos de vários dos problemas enfrentados e suas soluções.
1. O documento descreve o conjunto de instruções MIPS e suas características. 2. As instruções MIPS possuem três operandos fixos e operam apenas em registradores. 3. É necessário transferir dados entre registradores e memória usando instruções de load e store.
O documento descreve o desenvolvimento de um software de análise estrutural chamado LESM usando o MATLAB. O LESM permite a modelagem, análise e visualização de resultados de modelos estruturais reticulados 2D e 3D através de uma interface gráfica desenvolvida no GUIDE. O código é orientado a objetos e bem documentado para fins didáticos, e pode ser executado como aplicativo independente do MATLAB.
As classes de modelagem podem ser comparadas a moldes ou
formas que definem as características e os comportamentos dos
objetos criados a partir delas. Vale traçar um paralelo com o projeto de
um automóvel. Os engenheiros definem as medidas, a quantidade de
portas, a potência do motor, a localização do estepe, dentre outras
descrições necessárias para a fabricação de um veículo
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...Faga1939
Este artigo tem por objetivo apresentar como ocorreu a evolução do consumo e da produção de energia desde a pré-história até os tempos atuais, bem como propor o futuro da energia requerido para o mundo. Da pré-história até o século XVIII predominou o uso de fontes renováveis de energia como a madeira, o vento e a energia hidráulica. Do século XVIII até a era contemporânea, os combustíveis fósseis predominaram com o carvão e o petróleo, mas seu uso chegará ao fim provavelmente a partir do século XXI para evitar a mudança climática catastrófica global resultante de sua utilização ao emitir gases do efeito estufa responsáveis pelo aquecimento global. Com o fim da era dos combustíveis fósseis virá a era das fontes renováveis de energia quando prevalecerá a utilização da energia hidrelétrica, energia solar, energia eólica, energia das marés, energia das ondas, energia geotérmica, energia da biomassa e energia do hidrogênio. Não existem dúvidas de que as atividades humanas sobre a Terra provocam alterações no meio ambiente em que vivemos. Muitos destes impactos ambientais são provenientes da geração, manuseio e uso da energia com o uso de combustíveis fósseis. A principal razão para a existência desses impactos ambientais reside no fato de que o consumo mundial de energia primária proveniente de fontes não renováveis (petróleo, carvão, gás natural e nuclear) corresponde a aproximadamente 88% do total, cabendo apenas 12% às fontes renováveis. Independentemente das várias soluções que venham a ser adotadas para eliminar ou mitigar as causas do efeito estufa, a mais importante ação é, sem dúvidas, a adoção de medidas que contribuam para a eliminação ou redução do consumo de combustíveis fósseis na produção de energia, bem como para seu uso mais eficiente nos transportes, na indústria, na agropecuária e nas cidades (residências e comércio), haja vista que o uso e a produção de energia são responsáveis por 57% dos gases de estufa emitidos pela atividade humana. Neste sentido, é imprescindível a implantação de um sistema de energia sustentável no mundo. Em um sistema de energia sustentável, a matriz energética mundial só deveria contar com fontes de energia limpa e renováveis (hidroelétrica, solar, eólica, hidrogênio, geotérmica, das marés, das ondas e biomassa), não devendo contar, portanto, com o uso dos combustíveis fósseis (petróleo, carvão e gás natural).
Este certificado confirma que Gabriel de Mattos Faustino concluiu com sucesso um curso de 42 horas de Gestão Estratégica de TI - ITIL na Escola Virtual entre 19 de fevereiro de 2014 a 20 de fevereiro de 2014.
Em um mundo cada vez mais digital, a segurança da informação tornou-se essencial para proteger dados pessoais e empresariais contra ameaças cibernéticas. Nesta apresentação, abordaremos os principais conceitos e práticas de segurança digital, incluindo o reconhecimento de ameaças comuns, como malware e phishing, e a implementação de medidas de proteção e mitigação para vazamento de senhas.
2. Nilson Souto
xissburg
Venha bater um papo com a
galera no IRC @ freenode ;)
#iphonedev
#iphonedev-chat
#swift-lang
##OpenGL
…
3. Metal?
• API gráfica de baixo nível que apresenta uma
abstração muito próxima à arquitetura das GPUs
• “bare metal access”
• “close to the metal”
• Substitui o OpenGL ES
• Camada mais fina entre o software e o hardware
4. Metal?
• Outras tecnologias semelhantes:
• AMD Mantle
• Microsoft DirectX 12
• OpenGL Next
• A ideia é produzir APIs diretamente compatíveis com
as arquiteturas das GPUs modernas
• Descartar APIs criadas há mais de 20 anos
6. Device
• Representa a GPU
• Funciona como uma factory para criar command
queues, buffers, texturas, etc
• Utilizamos a função
MTLCreateSystemDefaultDevice para criar uma
instância
7. Command Queue
• Fila de comandos a serem executados pela GPU
• Através dela podemos criar command buffers,
depois configurá-los e por fim submetê-los para
execução
8. Command Buffer
• Armazena comandos para serem executados pela
GPU
• Em geral, utilizamos um command buffer para
desenhar um frame de uma animação
• Possível enfileirar mais que um comando para fazer
uma renderização em múltiplos passos
• Podemos ser notificados através de blocos quando
o comando terminar sua execução
9. Command Encoder
• Configura um comando para um command buffer
• Podemos criar 4 tipos de comandos:
• Render: um passo de renderização, para desenhar algo na
tela ou numa textura
• Compute: permite usar a GPU para fazer cálculos de
propósito geral (GPGPU)
• Blit: operações de cópia de memória entre buffers e texturas
• Parallel: permite codificar vários comandos em múltiplas
threads
10. Buffer
• Representa um buffer de memória que pode ser
usado pela GPU
• Pode conter qualquer coisa
• Por exemplo, utilizamos buffers para armazenar
vértices (vertex buffers) que formam os triângulos
que queremos desenhar, matrizes de
transformação, e dados de iluminação
11. Texture
• Representa uma imagem que pode ser utilizada
pela GPU
• Pode ser usada para desenhar o conteúdo da
imagem na tela ou como destino para o resultado
de uma renderização (render to target)
• Pode ter uma, duas ou três dimensões
12. Function
• Representa um shader
• Vertex shader
• Fragment shader
• Compute kernel
• Função que é executada diretamente na GPU
(programmable pipeline)
• Deve ser escrita usando a Metal Shading Language,
linguagem baseada no C++11
13. Pipeline
• Configura as partes fixas do pipeline gráfico, e.g.
blending e antialiasing
• Especifica quais functions devem ser usadas
• Descreve o formato de dados dos vértices
• Um command encoder deve especificar o pipeline
que deve ser utilizado em sua execução
20. Codificando…
• Renomeie o arquivo ViewController.m para
ViewController.mm para que o compilador o
interprete como um arquivo do tipo Objective-C++
• Assim podemos utilizar o simd.h que possui
definições de tipos de dados vetoriais como float2,
float3, float4, float3x3…
• Bastante útil para declarar a estrutura de dados
dos vértices e fazer cálculos comuns em
computação gráfica
22. Codificando…
• Cada um dos nossos 3 vértices devem ter uma
posição (x, y) e uma cor (r, g, b, a)
!
typedef struct {
simd::float2 position;
simd::float4 color;
} Vertex;
24. Codificando…
• O CADisplayLink é utilizado para chamar nosso
método de desenho várias vezes por segundo
• O CAMetalLayer é um CALayer capaz de
apresentar o conteúdo desenhado pela GPU na
tela do dispositivo
25. Codificando…
• Criando o device e o metalLayer no viewDidLoad
self.device = MTLCreateSystemDefaultDevice();
!
self.metalLayer = [CAMetalLayer layer];!
self.metalLayer.device = self.device;!
self.metalLayer.pixelFormat =
MTLPixelFormatBGRA8Unorm;!
self.metalLayer.framebufferOnly = YES;!
self.metalLayer.frame = self.view.bounds;!
[self.view.layer addSublayer:self.metalLayer];
32. Codificando…
• Agora é só renderizar…
• Em nosso método render, primeiro obtemos o
drawable do nosso layer que servirá como alvo da
renderização
- (void)render
{
id<CAMetalDrawable> drawable = [self.metalLayer
nextDrawable];
33. Codificando…
• Configuramos um render pass descriptor que será
usado para criar um command encoder
MTLRenderPassDescriptor *renderPassDescriptor =
[[MTLRenderPassDescriptor alloc] init];
MTLRenderPassColorAttachmentDescriptor
*colorAttachment =
[renderPassDescriptor.colorAttachments
objectAtIndexedSubscript:0];
colorAttachment.texture = drawable.texture;
colorAttachment.loadAction = MTLLoadActionClear;
colorAttachment.clearColor = MTLClearColorMake(0,
0.4, 0.02, 1);
34. Codificando…
• Criamos um command buffer e em seguida um
command encoder…
id<MTLCommandBuffer> commandBuffer =
[self.commandQueue commandBuffer];
id<MTLRenderCommandEncoder> commandEncoder =
[commandBuffer
renderCommandEncoderWithDescriptor:renderPassDescri
ptor];
36. Codificando…
• E finalizamos submetendo o command buffer para
execução
[commandBuffer presentDrawable:drawable];
[commandBuffer commit];
37. Codificando…
• Mas ainda faltam os shaders!
#include <metal_stdlib>
using namespace metal;
!
struct VertexInput {
float2 position [[attribute(0)]];
float4 color [[attribute(1)]];
};
!
struct VertexOutput {
float4 position [[position]];
float4 color;
};
41. Ferramentas
• O Xcode 6 possui poderosas ferramentas de
debugging para o Metal
• Permite capturar um frame da app e analisar cada
buffer, textura, comando, etc
• Facilita encontrar o que pode estar causando
problemas obscuros como obter uma tela vazia
após desenhar vários objetos
49. Conclusões
• O Metal apresenta uma API concisa e
relativamente fácil de usar
• Permite maior controle sobre a GPU
• Maior performance, low-overhead
• Compatibilidade ainda limitada
• Dificulta desenvolvimento cross-platform
50. Referências
• Metal Programming Guide - developer.apple.com
• Metal Shading Language Guide -
developer.apple.com
• http://metalbyexample.com
• iOS 8 Metal Tutorial with Swift: Getting Started -
raywenderlich.com
51. Referências
• Things that drive me nuts about OpenGL - Rich
Geldreich's Tech Blog
• OpenGL 4.5 released, next-gen OpenGL unveiled:
Cross-platform Mantle killer, DX12 competitor