Curso completo de DirectX 9 com C\C++
Gameprog - Escola de programação de jogos digitais
Contato: gameprog.br@gmail.com
Fase 02-1

index << >>


02.1 Investigando o adaptador gráfico

1.1 Visão geral
O objeto g_Direct3d produzido pela interface IDirect3D9 possui métodos que permitem investigar as capacidades do adaptador gráfico. Geralmente essa investigação sobre a placa de vídeo ocorre no início da aplicação para determinar se a placa de vídeo oferece suporte para as capacidades ou configurações específicas pretendidas. Caso a capacidade ou configuração investigada não tenha suporte do hardware deve-se tomar caminhos alternativos ou encerrar graciosamente a aplicação. Um dos caminhos alternativos, especialmente para aplicações de testes é utilizar o dispositivo de referência criado pela opção D3DDEVTYPE_REF durante a criação do dispositivo renderizador g_device. Alistamos abaixo alguns métodos de verificação do dispositivo que serão testados por esta aplicação.
Método Descrição
CheckDeviceType() Verifica se determinada configuração de dispositivo acelerado por hardware pode ser utilizada com o adaptador especificado.
GetAdapterModeCount() Retorna o número de modos de vídeo disponíveis no adaptador para o formato especificado. A função EnumAdapterModes() é utilizada para acessar a configuração particular de cada modo de vídeo disponível.
EnumAdapterModes() Esse método é utilizado em um loop para recuperar cada item de uma lista de modos de vídeo disponíveis dentro um formato específico.
GetAdapterCount() Retorna o número de adaptadores no sistema.
GetAdapterDisplayMode() Retorna informação do modo de vídeo corrente do adaptador.
GetAdapterIdentifier() Obtém uma descrição geral do adaptador gráfico.
GetDeviceCaps() Recupera informações específicas sobre as capacidades do adaptador gráfico
1.2 Estrutura principal da aplicação
Arquivo: entrada.cpp
adaptador_exibirInfoGeral() testa as funções: GetAdapterIdentifier() GetAdapterCount() verificar_dispositivo() testa a função CheckDeviceType() mostrarcaps() testa a função GetDeviceCaps() adaptador_exibirVideoCorrente() testa a função GetAdapterDisplayMode() adaptador_exibirListaVideoOk() testa as funções: GetAdapterModeCount() EnumAdapterModes() esperar() aplica uma pausa para leitura do conteúdo da janela config_Janela() faz a configuração inicial da janela de console main() inicializa o objeto Direct3d chama todas as funções alistadas acima para verificar algumas capacidades do adaptador gráfico.
2.1 Aspectos globais - Arquivo: entrada.cpp
// Projeto: prj_Adaptador - Arquivo: entrada.cpp // Essa aplicação exemplifica como investigar as capacidades // do adaptador gráfico. By www.gameprog.com.br #include <windows.h> #include <wincon.h> #include <stdio.h> #include <stdlib.h> #include "d3d9.h" #include "d3dx9.h" // Bibliotecas do directx #pragma comment (lib, "d3d9.lib") #pragma comment (lib, "d3dx9.lib") // Exibe informações gerais do adaptador gráfico void adaptador_exibirInfoGeral(void); // Exibe modo de vídeo corrente void adaptador_exibirVideoCorrente(void); // Exibe a lista de modos de vídeo disponíveis para o formato // apresentado void adaptador_exibirListaVideoOk(void); // Exibe algumas capacidades do dispositivo gráfico void mostrarcaps(void); // Verifica a possibilidade de uma configuração específica do dispositivo void verificar_dispositivo(void); // Faz a configuração inicial da janela void config_Janela(void); // Pausa para leitura da tela void esperar(void); // Variáveis globais // Representa o dispositivo D3D LPDIRECT3D9 g_Direct3d = NULL; // Variáveis para coletar o tamanho da resolução corrente UINT g_xtela, g_ytela; // Formato de vídeo D3DFORMAT g_formato; // Adaptador default(0) UINT adaptador_default = D3DADAPTER_DEFAULT; // Coleta de informação de erro do directx HRESULT g_hr;
#include <wincon.h> Esse arquivo de cabeçalho permite o uso de funções que manipulam a janela de console. void adaptador_exibirInfoGeral(void); Esta função exibe informações gerais do adaptador de vídeo usando a função GetAdapterIdentifier(). void adaptador_exibirVideoCorrente(void); Essa função exibe informações do modo de vídeo corrente utilizando a função GetAdapterDisplayMode(). void adaptador_exibirListaVideoOk(void); Esta função exibe uma lista de modos de vídeo disponíveis dentro de um formato especificado utilizando em conjunto as funções GetAdapterModeCount() e EnumAdapterModes(). void mostrarcaps(void); Esta função mostra algumas capacidades do adaptador de vídeo; isso envolve o uso da função GetDeviceCaps(). void verificar_dispositivo(void); Essa função verifica se é possível uma dada configuração do dispositivo renderizador a ser criado. Essa verificação é feita com a função CheckDeviceType(). void config_Janela(void); Essa função utiliza algumas funções do arquivo wincon.h para configurar algumas características da janela de console tais como tamanho da memória interna (buffer) e o tamanho da janela. void esperar(void); Esta função adiciona uma pausa no programa para a leitura da tela. A pausa é feita com a função getchar() que aguarda a entrada de dados do teclado. UINT g_xtela, g_ytela; D3DFORMAT g_formato; UINT adaptador_default = D3DADAPTER_DEFAULT; Estas variáveis são usadas para coletar informações sobre o adaptador de vídeo tais como resolução do modo de vídeo entre outras informações. 2.2 A função main() Segue abaixo a listagem da função main(). As funções chamadas por ela foram descritas acima de maneira geral e são melhor detalhadas nos subtópicos que estão adiante.
int main(void) { // Cria o objeto Direct3D g_Direct3d = Direct3DCreate9( D3D_SDK_VERSION); // Verifica se objeto Direct3D foi criado if(g_Direct3d == NULL) { MessageBox (NULL, "Falha na inialização do Direct3D", "main()", MB_OK); return E_FAIL; } // endif // Configura a janela config_Janela(); // Exibe informações gerais do adaptador adaptador_exibirInfoGeral(); // Exibe o modo de vídeo corrente adaptador_exibirVideoCorrente(); // Exibe uma lista de modos de vídeo disponíveis para o formato // apresentado. adaptador_exibirListaVideoOk(); // Mostra algumas capacidades do dispositivo mostrarcaps(); // Testa uma possibilidade de configuração para o dispositivo verificar_dispositivo(); // Finaliza a aplicação esperar(); g_Direct3d->Release(); } // main().fim
2.3 Descrição geral do adaptador gráfico
void adaptador_exibirInfoGeral(void) { // Estrutura para coletar informações gerais do adaptador gráfico D3DADAPTER_IDENTIFIER9 placaVideo; // Coleta informações sobre o adaptador g_hr = g_Direct3d->GetAdapterIdentifier( adaptador_default, 0, &placaVideo); // Espaços em branco para manter a boa estética do console printf("\n"); // Mostra descrição e o arquivo de driver de vídeo printf(" %s \n", placaVideo.Description); printf(" %s \n", placaVideo.Driver); // Verifica a quantidade de adaptadores no sistema UINT nAdaptadores = 0; nAdaptadores = g_Direct3d->GetAdapterCount(); printf (" Número de adaptadores de vídeo: %i \n", nAdaptadores); } // adaptador_exibirInfoGeral().fim
D3DADAPTER_IDENTIFIER9 placaVideo; Esta estrutura agrega elementos que descrevem de forma geral um adaptador de vídeo com informações tais como descrição (Description) e dll do driver (Driver) entre outras. g_hr = g_Direct3d->GetAdapterIdentifier( adaptador_default, 0, &placaVideo); Esta função preenche a estrutura D3DADAPTER_IDENTIFIER9 descrita acima com informações gerais do adaptador de vídeo. // Mostra descrição e o arquivo de driver de vídeo printf(" %s \n", placaVideo.Description); printf(" %s \n", placaVideo.Driver); Aqui mostramos as informações coletadas. UINT nAdaptadores = 0; nAdaptadores = g_Direct3d->GetAdapterCount(); printf (" Número de adaptadores de vídeo: %i \n", nAdaptadores); Aqui verificamos e mostramos a quantidade de adaptadores de vídeo instalados no sistema. Pode ocorrer de um computador apresentar duas placas de vídeo ou ter uma placa de vídeo com circuitos independentes para controlar dois monitores. 2.4 Informações do modo de vídeo corrente
void adaptador_exibirVideoCorrente(void) { // Estrutura para a coleta de informações sobre o modo de vídeo // corrente D3DDISPLAYMODE video; // Coleta informações sobre o modo de vídeo g_Direct3d->GetAdapterDisplayMode (adaptador_default, &video); // Transfere essas informações para as variáveis g_xtela = video.Width; g_ytela = video.Height; g_formato = video.Format; // Exibe as informações printf(" Modo de video corrente: (%i, %i) Formato: %i \n", g_xtela, g_ytela, g_formato); } // adaptador_exibirVideoCorrente().fim
D3DDISPLAYMODE video; Esta estrutura agrega elementos que descrevem um modo de vídeo tais como largura (width), altura (height) e formato da composição do pixel. g_Direct3d->GetAdapterDisplayMode (adaptador_default, &video); Essa função preenche a estrutura D3DDISPLAYMODE (&video) com informação do modo de vídeo corrente. g_xtela = video.Width; g_ytela = video.Height; g_formato = video.Format; Aqui transferimos as informações do modo de vídeo corrente para as variáveis de trabalho. printf(" Modo de video corrente: (%i, %i) Formato: %i \n", g_xtela, g_ytela, g_formato); Aqui mostramos as informações do modo de vídeo corrente. 2.5 Lista de modos de video disponíveis para um formato
void adaptador_exibirListaVideoOk(void) { // Variável para guardar a quantidade de modos de vídeo // disponíveis dentro de um formato UINT nQtd = 0; // Estrutura com informações básica do modo de vídeo D3DDISPLAYMODE video; // Obtém a quantidade de modos de vídeo no formato apresentado nQtd = g_Direct3d->GetAdapterModeCount( adaptador_default, g_formato); // Esta linha exibe o valor numérico do formato apresentado. printf(" \n\n Modos de video disponivel no formato %i \n", g_formato); // Mostra as informações dos modos de vídeo disponíveis no formato for (UINT ncx=0; ncx < nQtd; ncx++) { // Obtém informação do modo de vídeo apontado por ncx g_hr = g_Direct3d->EnumAdapterModes(adaptador_default, g_formato, ncx, &video); //Transfere as informações para as variáveis g_xtela = video.Width; g_ytela = video.Height; g_formato = video.Format; // Exibe a informação printf(" %i x %i \n", g_xtela, g_ytela); } // endfor } // adaptador_exibirListaVideoOk().fim
UINT nQtd = 0; Esta variável é usada para guardar a quantidade de modos de vídeo disponíveis dentro de um formato especificado na função GetAdapterModeCount(). // Estrutura com informações básica do modo de vídeo D3DDISPLAYMODE video; Esta estrutura agrega elementos que descrevem um modo de vídeo tais como largura (width), altura (height) e formato da composição do pixel ( format ). nQtd = g_Direct3d->GetAdapterModeCount( adaptador_default, g_formato); Esta linha obtém a quantidade de modos de vídeo no formato apresentado.
// Mostra as informações dos modos de vídeo disponíveis no formato for (UINT ncx=0; ncx < nQtd; ncx++) { // Obtém informação do modo de vídeo apontado por ncx g_hr = g_Direct3d->EnumAdapterModes(adaptador_default, g_formato, ncx, &video); //Transfere as informações para as variáveis g_xtela = video.Width; g_ytela = video.Height; g_formato = video.Format; // Exibe a informação printf(" %i x %i \n", g_xtela, g_ytela); } // endfor
Este bloco de código perpassa por todos os modos de vídeo disponíveis localizados para o formato apresentado e exibe a configuração de cada um deles. 2.6 Configuração de criação do dispositivo renderizador
void verificar_dispositivo(void) { // Resultado da vericação bool resultado = false; // Argumentos de trabalho do método CheckDeviceType() D3DDEVTYPE tipo_hardware = D3DDEVTYPE_HAL; D3DFORMAT videoFormato = D3DFMT_X8R8G8B8; D3DFORMAT backbufferFormato = videoFormato; // Vai ter janela? sim (true) ou não(false). bool telaCheia = false; // Verifica se a configuração passada é possível g_hr = g_Direct3d->CheckDeviceType( adaptador_default, tipo_hardware, videoFormato, backbufferFormato, telaCheia ); // Verifica o resultado retornado if(SUCCEEDED(g_hr) ) resultado = true; if(FAILED (g_hr) ) resultado = false; // Exibe resultado printf("\n"); if (resultado) printf(" Aplicação em tela cheia Ok para o formato X8R8G8B8 no hardware!"); if (!resultado) printf(" Configuração impraticável \n"); return; } // verificar_dispositivo().fim
// Resultado da vericação bool resultado = false; O valor final desta variável vai espelhar o resultado positivo ou negativo da verificação da configuração do dispositivo renderizador dada na função CheckDeviceType(). D3DDEVTYPE tipo_hardware = D3DDEVTYPE_HAL; D3DFORMAT videoFormato = D3DFMT_X8R8G8B8; D3DFORMAT backbufferFormato = videoFormato; // Vai ter janela? sim (true) ou não(false). bool telaCheia = false; Estas variáveis representam os argumentos de criação do dispositivo renderizador como já vimos nos tópicos anteriores. Neste caso aqui é a configuração particular que vai ser testada se é possível ou não no adaptador gráfico default (0). g_hr = g_Direct3d->CheckDeviceType( adaptador_default, tipo_hardware, videoFormato, backbufferFormato, telaCheia ); Aqui a função CheckDeviceType() faz o trabalho de verificar se configuração passada é possível ou não. if(SUCCEEDED(g_hr) ) resultado = true; if(FAILED (g_hr) ) resultado = false; Aqui verificamos o resultado retornado e configuramos apropriadamente a variável resultado. if (resultado) printf(" Aplicação em tela cheia Ok para o formato X8R8G8B8 no hardware!"); if (!resultado) printf(" Configuração impraticável \n"); Exibimos na sequência o resultado. 2.7 Capacidades específicas do adaptador gráfico
void mostrarcaps(void) { printf("\n"); // Estrutura que alista as capacidades possíveis de um // adaptador gráfico. D3DCAPS9 caps; // Limpa a estrutura ZeroMemory(&caps, sizeof (D3DCAPS9) ); // Obtém as capacidades do adaptador gráfico g_hr = g_Direct3d->GetDeviceCaps(adaptador_default, D3DDEVTYPE_HAL, &caps); // Verifica se ocorreu alguma falha no processo... if( FAILED(g_hr)) { MessageBox (NULL, "Falha no processo", "mostrarcaps()", MB_OK); return; } // endif // Mostra a versão do pixelshader e do vertexshader printf (" VertexShaderVersion: %X \n", caps.VertexShaderVersion); printf (" PixelShaderVersion : %X \n", caps.PixelShaderVersion); // Quantidade máxima de luzes ativas simultaneamente printf (" MaxActiveLights : %i \n", caps.MaxActiveLights); printf("\n"); // Mostra algumas capacidades sobre linhas DWORD linecaps = caps.LineCaps; printf(" LineCaps %X: \n", linecaps); if((linecaps & D3DLINECAPS_ANTIALIAS) > 0) printf(" D3DLINECAPS_ANTIALIAS Ok \n"); if((linecaps & D3DLINECAPS_BLEND) > 0) printf(" D3DLINECAPS_BLEND Ok \n"); if((linecaps & D3DLINECAPS_TEXTURE) > 0) printf(" D3DLINECAPS_TEXTURE Ok \n"); } // mostrarcaps().fim
D3DCAPS9 caps; Esta estrutura é gigantesca e agrega elementos que descrevem todas as capacidades e característias possíveis em um adaptador gráfico. ZeroMemory(&caps, sizeof (D3DCAPS9) ); Limpamos a estrutura. g_hr = g_Direct3d->GetDeviceCaps(adaptador_default, D3DDEVTYPE_HAL, &caps); Aqui a função GetDeviceCaps() preenche a estrutura caps com as capacidades e características do adaptador gráfico default (0). printf (" VertexShaderVersion: %X \n", caps.VertexShaderVersion); printf (" PixelShaderVersion : %X \n", caps.PixelShaderVersion); Aqui verificamos a versão do VertexShader e do PixelShader da placa de vídeo. O vertexshader e o pixelshader são chamados de shaders em conjunto e representam o aspecto programável da placa de vídeo que definem a posição final do vértice e a cor final do pixel na tela. A partir do directx9 os shaders são produzidos na linguagem HLSL que tem uma grande semelhança com a linguagem C. printf (" MaxActiveLights : %i \n", caps.MaxActiveLights); Aqui é relatado a quantidade máxima de luzes que podem estar ativas simultaneamente na cena. DWORD linecaps = caps.LineCaps; printf(" LineCaps %X: \n", linecaps); if((linecaps & D3DLINECAPS_ANTIALIAS) > 0) printf(" D3DLINECAPS_ANTIALIAS Ok \n"); if((linecaps & D3DLINECAPS_BLEND) > 0) printf(" D3DLINECAPS_BLEND Ok \n"); if((linecaps & D3DLINECAPS_TEXTURE) > 0) printf(" D3DLINECAPS_TEXTURE Ok \n"); Aqui é exibido algumas capacidades sobre a produção de linhas. 2.8 Configuração inicial da janela
void config_Janela(void) { // Configura cor e título da janela system("color f1"); SetConsoleTitle ("prj_Adaptador"); // Obtém o handle de escrita do console. HANDLE hJanela = GetStdHandle(STD_OUTPUT_HANDLE); // Configura tamanho do buffer do console COORD bufferTam = {80, 90}; SetConsoleScreenBufferSize( hJanela, bufferTam); // Configura tamanho da janela SMALL_RECT janelaTam = { 0, 0, 79, 29 }; SetConsoleWindowInfo(hJanela, TRUE, &janelaTam); // Permite a boa acentuação em português. SetConsoleOutputCP(1252); printf("\n"); } // config_Janela().fim
system("color f1"); Configura a cor da tela em branco (f) para o fundo e azul (1) para a frente. SetConsoleTitle ("prj_Adaptador"); Configura a barra de título da janela. HANDLE hJanela = GetStdHandle(STD_OUTPUT_HANDLE); Aqui é obtido o handle de escrita da janela que é argumento de várias funções que alteram as características de funcionamento da janela de console. COORD bufferTam = {80, 90}; Esta estrutura traz a quantidade de colunas (80) e linhas (90) para a configuração da memória interna (buffer) da janela de console. Esses valores estão expressos em quantidade de caracteres que cabem na tela, ou seja 90 linhas com 80 caracteres horizontais. SetConsoleScreenBufferSize( hJanela, bufferTam); Aqui o tamanho do buffer da janela de console é configurado de fato com a estrutura bufferTam. SMALL_RECT janelaTam = {0, 0, 79, 29 }; Esta estrutura traz a quantidade de colunas (79) e linhas (29) que definem conjuntamente a largura e altura final da janela de console. É importante destacar que o tamanho da janela deve ser menor que o tamanho do buffer em pelo menos 1 carácter tanto na largura como na altura. SetConsoleWindowInfo(hJanela, TRUE, &janelaTam); Aqui de fato o tamanho da janela é configurada. SetConsoleOutputCP(1252); Esta função configura a página de caracteres que permite a utilização de caracteres acentuados. 3. Código fonte do projeto de exemplo: prj_Adaptador
// Projeto: prj_Adaptador - Arquivo: entrada.cpp // Essa aplicação exemplifica como investigar as capacidades // do adaptador gráfico. By www.gameprog.com.br #include <windows.h> #include <wincon.h> #include <stdio.h> #include <stdlib.h> #include "d3d9.h" #include "d3dx9.h" // Bibliotecas do directx #pragma comment (lib, "d3d9.lib") #pragma comment (lib, "d3dx9.lib") // Exibe informações gerais do adaptador gráfico void adaptador_exibirInfoGeral(void); // Exibe modo de vídeo corrente void adaptador_exibirVideoCorrente(void); // Exibe a lista de modos de vídeo disponíveis para o formato // apresentado void adaptador_exibirListaVideoOk(void); // Exibe algumas capacidades do dispositivo gráfico void mostrarcaps(void); // Verifica a possibilidade de uma configuração específica do dispositivo void verificar_dispositivo(void); // Faz a configuração inicial da janela void config_Janela(void); // Pausa para leitura da tela void esperar(void); // Variáveis globais // Representa o dispositivo D3D LPDIRECT3D9 g_Direct3d = NULL; // Variáveis para coletar o tamanho da resolução corrente UINT g_xtela, g_ytela; // Formato de vídeo D3DFORMAT g_formato; // Adaptador default(0) UINT adaptador_default = D3DADAPTER_DEFAULT; // Coleta de informação de erro do directx HRESULT g_hr; int main(void) { // Cria o objeto Direct3D g_Direct3d = Direct3DCreate9( D3D_SDK_VERSION); // Verifica se ocorreu alguma falha no processo... if(g_Direct3d == NULL) { MessageBox (NULL, "Falha na inialização do Direct3D", "main()", MB_OK); return E_FAIL; } // endif // Configura a janela config_Janela(); // Exibe informações gerais do adaptador adaptador_exibirInfoGeral(); // Exibe o modo de vídeo corrente adaptador_exibirVideoCorrente(); // Exibe uma lista de modos de vídeo disponíveis para o formato // apresentado. adaptador_exibirListaVideoOk(); // Mostra algumas capacidades do dispositivo mostrarcaps(); // Testa uma possibilidade de configuração para o dispositivo verificar_dispositivo(); // Finaliza a aplicação esperar(); g_Direct3d->Release(); } // main().fim void adaptador_exibirInfoGeral(void) { // Estrutura para coletar informações gerais do adaptador gráfico D3DADAPTER_IDENTIFIER9 placaVideo; // Coleta informações sobre o adaptador g_hr = g_Direct3d->GetAdapterIdentifier( adaptador_default, 0, &placaVideo); // Espaços em branco para manter a boa estética do console printf("\n"); // Mostra descrição e o arquivo de driver de vídeo printf(" %s \n", placaVideo.Description); printf(" %s \n", placaVideo.Driver); // Verifica a quantidade de adaptadores no sistema UINT nAdaptadores = 0; nAdaptadores = g_Direct3d->GetAdapterCount(); printf (" Número de adaptadores de vídeo: %i \n", nAdaptadores); } // adaptador_exibirInfoGeral().fim void adaptador_exibirVideoCorrente(void) { // Estrutura para a coleta de informações sobre o modo de vídeo // corrente D3DDISPLAYMODE video; // Coleta informações sobre o modo de vídeo g_Direct3d->GetAdapterDisplayMode (adaptador_default, &video); // Transfere essas informações para as variáveis g_xtela = video.Width; g_ytela = video.Height; g_formato = video.Format; // Exibe as informações printf(" Modo de video corrente: (%i, %i) Formato: %i \n", g_xtela, g_ytela, g_formato); } // adaptador_exibirVideoCorrente().fim void adaptador_exibirListaVideoOk(void) { // Variável para guardar a quantidade de modos de vídeo // disponíveis dentro de um formato UINT nQtd = 0; // Estrutura com informações básica do modo de vídeo D3DDISPLAYMODE video; // Obtém a quantidade de modos de vídeo no formato apresentado nQtd = g_Direct3d->GetAdapterModeCount( adaptador_default, g_formato); // Esta linha exibe o valor numérico do formato apresentado. printf(" \n\n Modos de video disponivel no formato %i \n", g_formato); // Mostra as informações dos modos de vídeo disponíveis no formato for (UINT ncx=0; ncx < nQtd; ncx++) { // Obtém informação do modo de vídeo apontado por ncx g_hr = g_Direct3d->EnumAdapterModes(adaptador_default, g_formato, ncx, &video); //Transfere as informações para as variáveis g_xtela = video.Width; g_ytela = video.Height; g_formato = video.Format; // Exibe a informação printf(" %i x %i \n", g_xtela, g_ytela); } // endfor } // adaptador_exibirListaVideoOk().fim void verificar_dispositivo(void) { // Resultado da vericação bool resultado = false; // Argumentos de trabalho do método CheckDeviceType() D3DDEVTYPE tipo_hardware = D3DDEVTYPE_HAL; D3DFORMAT videoFormato = D3DFMT_X8R8G8B8; D3DFORMAT backbufferFormato = videoFormato; // Vai ter janela? sim (true) ou não(false). bool telaCheia = false; // Verifica se a configuração passada é possível g_hr = g_Direct3d->CheckDeviceType( adaptador_default, tipo_hardware, videoFormato, backbufferFormato, telaCheia ); // Verifica o resultado retornado if(SUCCEEDED(g_hr) ) resultado = true; if(FAILED (g_hr) ) resultado = false; // Exibe resultado printf("\n"); if (resultado) printf(" Aplicação em tela cheia Ok para o formato X8R8G8B8 no hardware!"); if (!resultado) printf(" Configuração impraticável \n"); return; } // verificar_dispositivo().fim void mostrarcaps(void) { printf("\n"); // Estrutura que alista as capacidades possíveis de um // adaptador gráfico. D3DCAPS9 caps; // Limpa a estrutura ZeroMemory(&caps, sizeof (D3DCAPS9) ); // Obtém as capacidades do adaptador gráfico g_hr = g_Direct3d->GetDeviceCaps(adaptador_default, D3DDEVTYPE_HAL, &caps); // Verifica se ocorreu alguma falha no processo... if( FAILED(g_hr)) { MessageBox (NULL, "Falha no processo", "mostrarcaps()", MB_OK); return; } // endif // Mostra a versão do pixelshader e do vertexshader printf (" VertexShaderVersion: %X \n", caps.VertexShaderVersion); printf (" PixelShaderVersion : %X \n", caps.PixelShaderVersion); // Quantidade máxima de luzes ativas simultaneamente printf (" MaxActiveLights : %i \n", caps.MaxActiveLights); printf("\n"); // Mostra algumas capacidades sobre linhas DWORD linecaps = caps.LineCaps; printf(" LineCaps %X: \n", linecaps); if((linecaps & D3DLINECAPS_ANTIALIAS) > 0) printf(" D3DLINECAPS_ANTIALIAS Ok \n"); if((linecaps & D3DLINECAPS_BLEND) > 0) printf(" D3DLINECAPS_BLEND Ok \n"); if((linecaps & D3DLINECAPS_TEXTURE) > 0) printf(" D3DLINECAPS_TEXTURE Ok \n"); } // mostrarcaps().fim void esperar(void) { // Aguarda o pressionamento da tecla ENTER para continuar printf("\n\n"); printf(" Pressione ENTER para continuar \n"); getchar(); } // esperar().fim void config_Janela(void) { // Configura cor e título da janela system("color f1"); SetConsoleTitle ("prj_Adaptador"); // Obtém o handle de escrita do console. HANDLE hJanela = GetStdHandle(STD_OUTPUT_HANDLE); // Configura tamanho do buffer do console COORD bufferTam = {80, 90}; SetConsoleScreenBufferSize( hJanela, bufferTam); // Configura tamanho da janela SMALL_RECT janelaTam = { 0, 0, 79, 29 }; SetConsoleWindowInfo(hJanela, TRUE, &janelaTam); // Permite a boa acentuação em português. SetConsoleOutputCP(1252); printf("\n"); } // config_Janela().fim

index << >>

Produzido por Gameprog: Jair Pereira - Agosto/2014 © gameprog.br@gmail.com http://www.gameprog.com.br