Command Buffer Structure
9/8/2008
A reserva de comando é uma fila de símbolos de comando que mantém a Middleware Microsoft® Direct3D® Mobile. Cada token representa um único comando para o driver para analisar e executar. O driver deve ler tokens a reserva Comando em seqüência e em seqüência executar cada comando. Se o driver executa os símbolos out of seqüência, ele pode processar alguns pixels incorretamente.
Aplicativo mais chamadas para a Middleware Mobile Driect3D que pretendem para alteração de estado do driver ou desenhar no resultado Tela em tokens de escrita de middleware para a reserva de comando.
Normalmente, a Middleware envia os comandos na reserva para o driver e, em seguida, limpa a reserva quando os pixels afetados por símbolos de comando são exigido na Tela ou quando a comando reserva está cheio. Geralmente esse processo é conhecido como liberar a reserva de comando. Outras ocasiões onde a Middleware será liberado a reserva de comando durante bloqueios e durante chamadas para D3DM_GetInfo. Para obter mais informações, consulte Surface Locks in Direct3D Mobile
Para manter desempenho, o driver deve processo tokens comando imediatamente. Uma exceção a isso é o token gerado por IDirect3DMobileDevice::Present. Esse token pode exigir o driver para aguardar até que um em branco vertical intervalo período antes de ele pode ser executado. Esse token só é encontrado no final de uma reserva de comando; Ele permite que o driver para retornar de um chamar para D3DM_DrawPrimitive Enquanto o final Presente chamar ainda está pendente.
A Middleware Mobile Direct3D libera seu reserva Comando por chamado do driver D3DM_DrawPrimitive método com uma estrutura D3DM_DRAWPRIMITIVE_DATA.
Cada comando consiste de uma estrutura cabeçalho, D3DM_COMMAND, seguido por alguns contagem de estruturas Command-specific. O cabeçalho para cada comando segue imediatamente final dos dados de comando para o comando antes dele. Como comando buffers são sempre 32 - bit alinhado, o cabeçalho comando estrutura e todas as estruturas dados comando são alguns múltiplo de 32 bits. Conseqüentemente, aritmético ponteiro todos os envolvidos na análise uma reserva de comando deve ser 32bit alinhado.
Métodos que controle a trabalhar Gerenciador recurso imediatamente; Eles não são armazenada em buffer na reserva de comando.
Buffer de comando padrão
Quando a Middleware Mobile Direct3D cria um novo contexto COM do o driver D3DM_CreateContext função, ela prepara uma reserva Comando usar como padrão que ela passa para do o driver D3DM_DrawPrimitive função imediatamente após a criação de contexto. A seguinte lista descreve esses casos.
- A Middleware determina qual formato número enviar para o driver com símbolos D3DMOP_TRANSFORM para D3DMTS_VIEW, D3DMTS_PROJECTION, D3DMTS_WORLD e D3DMTS_TEXTUREn transformações, consulte D3DM_OPERATION e D3DMTRANSFORMSTATETYPE.
- A Middleware determina o número de com suporte textura testa e, em seguida, restringe os símbolos D3DMOP_TEXTURESTAGESTATE no comando usar como padrão-reserva apenas com um estágio que com suporte, o driver.
Normalmente, a reserva Comando usar como padrão seja adequada para os bits funcionalidade que expõe o driver. Ele inicializa todos os vários estado variáveis no driver para valores usar como padrão. Como esse processo inicializa todas as variáveis, variáveis podem ser inicializadas para recursos de driver não suporte. O driver pode ignorar essas estado valores.
Valores padrão do driver estado
O estado driver usar como padrão inclui matrizes transformação. Transformação Todas as matrizes são definidas como matriz de identidade. O formato de dados das matrizes depende se o driver anuncia próprio como fixo ou nativo FLOAT, conforme descrito por bit de funcionalidade D3DMDEVCAPS_NATIVEFLOAT, consulte D3DMDEVCAPS Values. As matrizes incluem todos os coordenar do estágio 4 textura matrizes transformação, mesmo se o driver não transformação de textura suporte, ou dá suporte a menor que 4 estágios.
O estado driver usar como padrão também inclui a porta de visualização. A porta de visualização usar como padrão é a área cliente inteiro da janela de dispositivo. Se o nível cooperativas estiver definido para Total-Tela, em seguida, a porta de visualização usar como padrão é a Tela inteira. O valor mínimo z usar como padrão para a porta de visualização é definida como 0 e o máximo é definido como 1.
O material inicial é definido como simple preto. Todos os parâmetros cor estiverem definidos como preto (0,0,0,0) e a energia especulares é definida como 0.
Também inclui o estado driver usar como padrão NULL índice e símbolos de comando reserva vértice.
Por padrão, não as texturas estão ligado porque não existe nada quando o driver é inicializado. Há um conjunto usar como padrão de textura estados do estágio que são carregados na todos os valores para todos os estágios possíveis 4. O driver pode ignorar quaisquer valores que não aplicar aos recursos ele oferece suporte.
A seguinte tabela mostra o estado do estágio de textura usar como padrão valores.
Estado do estágio textura | Padrão |
---|---|
D3DMTSS_ADDRESSU |
D3DMTADDRESS_WRAP |
D3DMTSS_ADDRESSV |
D3DMTADDRESS_WRAP |
D3DMTSS_ADDRESSW |
D3DMTADDRESS_WRAP |
D3DMTSS_ALPHAARG0 |
D3DMTA_CURRENT |
D3DMTSS_ALPHAARG1 |
D3DMTA_TEXTURE |
D3DMTSS_ALPHAARG2 |
D3DMTA_CURRENT |
D3DMTSS_ALPHAOP |
D3DMTOP_SELECTARG1 de estágio 0 D3DMTOP_DISABLE para outras etapas |
D3DMTSS_BORDERCOLOR |
0 (preto) |
D3DMTSS_COLORARG0 |
D3DMTA_CURRENT |
D3DMTSS_COLORARG1 |
D3DMTA_TEXTURE |
D3DMTSS_COLORARG2 |
D3DMTA_CURRENT |
D3DMTSS_COLOROP |
D3DMTOP_MODULATE de estágio 0 D3DMTOP_DISABLE para outras etapas |
D3DMTSS_MAGFILTER |
D3DMTEXF_POINT |
D3DMTSS_MAXANISOTROPY |
1 |
D3DMTSS_MAXMIPLEVEL |
0 |
D3DMTSS_MINFILTER |
D3DMTEXF_POINT |
D3DMTSS_MIPFILTER |
D3DMTEXF_NONE |
D3DMTSS_MIPMAPLODBIAS |
0 |
D3DMTSS_RESULTARG |
D3DMTA_CURRENT |
D3DMTSS_TEXCOORDINDEX |
0 |
D3DMTSS_TEXTURETRANSFORMFLAGS |
D3DMTTFF_DISABLE |
A seguinte tabela mostra o estado processar usar como padrão valores.
Estado de Processamento | Valor padrão |
---|---|
D3DMRS_ALPHABLENDENABLE |
FALSE |
D3DMRS_ALPHAFUNC |
D3DMCMP_ALWAYS |
D3DMRS_ALPHAREF |
0 |
D3DMRS_ALPHATESTENABLE |
FALSE |
D3DMRS_AMBIENT |
0 (Preto) |
D3DMRS_AMBIENTMATERIALSOURCE |
D3DMMCS_MATERIAL |
D3DMRS_BLENDOP |
D3DMBLENDOP_ADD |
D3DMRS_CLIPPING |
TRUE |
D3DMRS_COLORVERTEX |
TRUE |
D3DMRS_COLORWRITEENABLE |
D3DMCOLORWRITEENABLE_ALL |
D3DMRS_CULLMODE |
D3DMCULL_CCW |
D3DMRS_DEPTHBIAS |
0 |
D3DMRS_DESTBLEND |
D3DMBLEND_ZERO |
D3DMRS_DIFFUSEMATERIALSOURCE |
D3DMMCS_COLOR1 |
D3DMRS_DITHERENABLE |
FALSE |
D3DMRS_FILLMODE |
D3DMFILL_SOLID |
D3DMRS_FOGCOLOR |
0 |
D3DMRS_FOGDENSITY |
0 |
D3DMRS_FOGENABLE |
FALSE |
D3DMRS_FOGEND |
0 |
D3DMRS_FOGSTART |
0 |
D3DMRS_FOGTABLEMODE |
D3DMFOG_NONE |
D3DMRS_FOGVERTEXMODE |
D3DMFOG_NONE |
D3DMRS_LASTPIXEL |
TRUE |
D3DMRS_LIGHTING |
TRUE |
D3DMRS_LOCALVIEWER |
TRUE |
D3DMRS_NORMALIZENORMALS |
FALSE |
D3DMRS_RANGEFOGENABLE |
FALSE |
D3DMRS_SHADEMODE |
D3DMSHADE_GOURAUD |
D3DMRS_SLOPESCALEDEPTHBIAS |
0 |
D3DMRS_SPECULARENABLE |
FALSE |
D3DMRS_SPECULARMATERIALSOURCE |
D3DMMCS_COLOR2 |
D3DMRS_SRCBLEND |
D3DMBLEND_ONE |
D3DMRS_STENCILENABLE |
FALSE |
D3DMRS_STENCILFAIL |
D3DMSTENCILOP_KEEP |
D3DMRS_STENCILFUNC |
D3DMCMP_ALWAYS |
D3DMRS_STENCILMASK |
0xFFFFFFFF |
D3DMRS_STENCILPASS |
D3DMSTENCILOP_KEEP |
D3DMRS_STENCILREF |
0 |
D3DMRS_STENCILWRITEMASK |
0xFFFFFFFF |
D3DMRS_STENCILZFAIL |
D3DMSTENCILOP_KEEP |
D3DMRS_TEXTUREFACTOR |
0xFFFFFFFF (branco) |
D3DMRS_TEXTUREPERSPECTIVE |
FALSE |
D3DMRS_WRAP0 |
0 |
D3DMRS_WRAP1 |
0 |
D3DMRS_WRAP2 |
0 |
D3DMRS_WRAP3 |
0 |
D3DMRS_ZENABLE |
TRUE (D3DMZB_TRUE) se D3DMPRESENT_PARAMETERS.EnableAutoDepthStencil foi definido para TRUE, FALSE caso contrário. |
D3DMRS_ZFUNC |
D3DMCMP_LESSEQUAL |
D3DMRS_ZWRITEENABLE |
TRUE se o EnableAutoDepthStencil membro de D3DMPRESENT_PARAMETERS é TRUE FALSE caso contrário. |