Visão Geral da Arquitetura do Software
O CGPDI.StudyLab foi arquitetado seguindo o padrão de Engenharia de Software em Camadas (Layered Architecture), separando os cálculos matemáticos puros da exibição na tela e dos controles de interface.
1. Diagrama Arquitetural em Camadas
graph TB subgraph UI_Layer ["Camada de Interface de Usuario - WPF"] MainWindowXAML["MainWindow.xaml - Layout, Sliders, Controles e Viewport3D"] MainWindowCS["MainWindow.xaml.cs - Controlador de Eventos e Cronometro"] end
subgraph Service_Layer ["Camada de Algoritmos e Processamento"] PDI["ImageProcessing - Point, Filters, Morphology, Geometry, Frequency"] G2D["Graphics2D - Matrix2D e Rasterizer2D"] G3D["Graphics3D - Math3D, SoftwareRenderer3D, Raytracer3D, HierarchicalModeling"] end
subgraph Core_Layer ["Camada Nucleo de Alta Performance"] DirectBitmap["DirectBitmap.cs - unsafe byte*, Bgra32, Stride, Lock e Unlock"] ColorSpaces["ColorSpaces.cs - RGB, HSV, YCbCr, CMYK, BT.709 e BT.601"] SampleGen["ImageSampleGenerator.cs - Padroes de Teste Otico"] end
subgraph Hardware_Layer ["Camada de Hardware"] DirectX["DirectX 9/11 e Driver de GPU - Exibicao na Tela"] MultiCore["CPU Multi-Core SIMD - Parallel.For"] end
MainWindowXAML --> MainWindowCS MainWindowCS --> Service_Layer Service_Layer --> Core_Layer Core_Layer --> MultiCore Core_Layer --> DirectX2. Fluxo de Execução de um Algoritmo
Quando você aciona um botão na interface (por exemplo, aplicar o filtro Gaussiano ou renderizar uma Cena 3D):
- Disparo do Evento: O usuário interage com um botão ou slider no
MainWindow.xaml. - Coleta de Parâmetros: O método no
MainWindow.xaml.csobtém os valores dos controles (como ou raio ). - Início do Cronômetro: Um cronômetro de alta precisão (
System.Diagnostics.Stopwatch) é acionado. - Processamento Paralelo em Memória:
- O algoritmo correspondente (ex:
SpatialFilters.ApplyGaussianBlur) é chamado. - O buffer do
DirectBitmapé bloqueado com.Lock(). - O comando
Parallel.Fordistribui as linhas horizontais da imagem entre todos os núcleos da CPU. - Não há alocação desnecessária de objetos dentro dos laços, mantendo o Garbage Collector ocioso.
- O algoritmo correspondente (ex:
- Notificação de Redesenho: O método
DirectBitmap.Unlock(markDirty: true)sinaliza ao WPF que a área da imagem foi alterada viaAddDirtyRect. - Aceleração por DirectX: O WPF envia o buffer
Bgra32para a placa de vídeo para exibição instantânea. - Exibição do Tempo: O cronômetro é encerrado e a interface exibe o tempo em milissegundos (ex:
1.2 ms - 833 FPS).
3. Pilares de Desempenho
Três decisões de engenharia garantem taxas elevadas de quadros por segundo:
- Ponteiros Não Gerenciados (
unsafe byte*): Elimina o custo de chamadas intermediárias a cada pixel. - Localidade de Cache da CPU: O percurso da memória é linear (horizontal), maximizando o acerto no cache L1/L2/L3.
- Alocação Zero no Laço Crítico: Os cálculos utilizam apenas variáveis primitivas na pilha de execução (Stack).
📚 Referências Oficiais Microsoft Learn
Conceitos fundamentais da arquitetura de aplicações de alto desempenho no ecossistema .NET:
- Visão Geral da Arquitetura do WPF — Entenda como o PresentationCore, MediaContext e o subsistema milcore/DirectX interagem.
- Níveis de Renderização de Gráficos (Graphics Tiers) — Como o WPF gerencia aceleração por hardware (Tier 0, 1 e 2).
- Diretrizes de Design do Framework .NET — Padrões arquiteturais para desacoplamento e manutenibilidade.
👉 Próximo Passo: Explore a Estrutura Detalhada de Pastas e Arquivos.