Aracılığıyla paylaş


Input-Assembler Aşamasını Kullanmaya Başlama

Giriş derleyicisi (IA) aşamasını başlatmak için gereken birkaç adım vardır. Örneğin, işlem hattının ihtiyaç duyduğu köşe verileriyle arabellek kaynakları oluşturmanız, IA aşamasına arabelleklerin nerede olduğunu ve ne tür veriler içerdiğini bildirmeniz ve verilerden birleştirilmesi gereken temel öğe türünü belirtmeniz gerekir.

Aşağıdaki tabloda gösterilen IA aşamasının ayarlanmasında yer alan temel adımlar bu konuda ele alınmıştır.

Adım Açıklama
Giriş Arabellekleri Oluşturma Giriş köşesi verileriyle giriş arabellekleri oluşturun ve başlatın.
Input-Layout Nesnesi oluştur Giriş düzeni nesnesi kullanarak köşe arabellek verilerinin IA aşamasına nasıl akışla aktarılacağını tanımlayın.
Nesneleri Input-Assembler Sahneye Bağla Oluşturulan nesneleri (giriş arabellekleri ve giriş düzeni nesnesi) IA aşamasına bağlayın.
Temel Tür Belirle Köşelerin ilkel öğeler halinde nasıl bir araya getirileceğini belirleyin.
Çizim Yöntemlerini Çağır İşlem hattı aracılığıyla IA aşamasına bağlı verileri gönderin.

 

Bu adımları anladıktan sonra System-Generated Değerleri Kullanarakbölümüne geçin.

Giriş Arabellekleri Oluşturma

İki tür giriş arabelleği vardır: köşe arabellekleri ve dizin arabellekleri. Köşe arabellekleri, IA aşamasına köşe verileri sağlar. Dizin arabellekleri isteğe bağlıdır; köşe arabelleğinden köşelere dizinler sağlar. Bir veya daha fazla köşe arabelleği ve isteğe bağlı olarak bir dizin arabelleği oluşturabilirsiniz.

Arabellek kaynaklarını oluşturduktan sonra, veri düzenini IA aşamasına açıklamak için bir giriş düzeni nesnesi oluşturmanız ve ardından arabellek kaynaklarını IA aşamasına bağlamanız gerekir. Gölgelendiricileriniz arabellek kullanmıyorsa arabellek oluşturma ve bağlama gerekli değildir. Tek bir üçgen çizen basit bir tepe ve piksel gölgelendiricisi örneği için bkz. Arabellekler Olmadan Input-Assembler Aşamasını Kullanma.

Köşe arabelleği oluşturma konusunda yardım için bkz. Nasıl yapılır: Köşe arabelleği oluşturma. Dizin arabelleği oluşturma konusunda yardım için bkz. Nasıl yapılır: dizin arabelleği oluşturma.

Input-Layout Nesnesi Oluşturma

Giriş düzeni nesnesi, IA aşamasının giriş durumunu kapsüller. Bu, IA aşamasına bağlı giriş verilerinin açıklamasını içerir. Veriler bellekten, bir veya daha fazla köşe arabelleğinden IA aşamasına akışla aktarılır. Açıklama, bir veya daha fazla köşe arabelleğinden bağlanan giriş verilerini tanımlar ve çalışma zamanına giriş veri türlerini gölgelendirici giriş parametre türlerine karşı denetleme olanağı verir. Bu tür denetimi, yalnızca türlerin uyumlu olduğunu değil, aynı zamanda gölgelendiricinin ihtiyaç duyduğu her bir öğenin arabellek kaynaklarında mevcut olduğunu doğrular.

Giriş düzeni nesnesi, girdi öğesi açıklamaları dizisinden ve derlenmiş gölgelendiriciye yönelik bir işaretçiden oluşturulur (bkz. ID3D11Device::CreateInputLayout). Dizi, bir veya daha fazla giriş öğesi içerir; her bir giriş öğesi, tek bir köşe verisi tamponundan tek bir köşe verisi öğesini açıklar. Giriş öğesi açıklama kümesinin tamamı, IA aşamasına bağlanacak tüm köşe arabelleklerinden tüm köşe-veri öğelerini açıklar.

Aşağıdaki yerleşim açıklaması, üç köşe veri öğesi içeren bir tek köşe arabelleğini açıklamaktadır.

D3D11_INPUT_ELEMENT_DESC layout[] =
{
    { L"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, 
          D3D11_INPUT_PER_VERTEX_DATA, 0 },
    { L"TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, 
          D3D11_INPUT_PER_VERTEX_DATA, 0 },
    { L"NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 20, 
          D3D11_INPUT_PER_VERTEX_DATA, 0 },
};

Giriş öğesi açıklaması, boyut, tür, konum ve amaç gibi köşe arabelleğindeki tek bir köşenin içerdiği her öğeyi açıklar. Her satır semantik, semantik dizin ve veri biçimini kullanarak veri türünü tanımlar. semantik, verilerin nasıl kullanılacağını tanımlayan bir metin dizesidir. Bu örnekte, ilk satır 3 bileşenli konum verilerini tanımlar (örneğinxyz); ikinci satır 2 bileşenli doku verilerini tanımlar (örneğin,UV); ve üçüncü satır normal verileri tanımlar.

Bu giriş öğesi açıklaması örneğinde, semantik dizin (ikinci parametredir) üç satır için de sıfır olarak ayarlanır. Semantik dizin, aynı semantiği kullanan iki satırı birbirinden ayırmaya yardımcı olur. Bu örnekte benzer bir semantik olmadığından, semantik dizin varsayılan değeri olan sıfır olarak ayarlanabilir.

Üçüncü parametre, biçimidir. biçimi (bkz. DXGI_FORMAT), öğe başına bileşen sayısını ve her öğe için verilerin boyutunu tanımlayan veri türünü belirtir. Biçim, kaynak oluşturma sırasında tam olarak yazılabilir veya bir öğedeki bileşen sayısını tanımlayan ancak veri türünü tanımsız bırakan bir DXGI_FORMATkullanarak kaynak oluşturabilirsiniz.

Giriş Yuvaları

Veriler IA aşamasına, aşağıdaki çizimde gösterildiği gibi giriş yuvaları adı verilen girişler aracılığıyla girer. IA aşamasında, n giriş yuvası vardır ve bunlar, giriş verilerini sağlayan en fazla n köşe arabelleğini barındıracak şekilde tasarlanmıştır. Her köşe arabelleği farklı bir yuvaya atanmalıdır; bu bilgiler, input-layout nesnesi oluşturulduğunda input-layout bildiriminde depolanır. Ayrıca, her arabelleğin başından okunacak arabellekteki ilk öğeye bir uzaklık belirtebilirsiniz.

ia aşamasıçizimi

Sonraki iki parametre giriş yuvası ve giriş uzaklığı. Birden çok arabellek kullandığınızda, bunları bir veya daha fazla giriş yuvasına bağlayabilirsiniz. Giriş uzaklığı, arabelleğin başlangıcı ile verilerin başlangıcı arasındaki bayt sayısıdır.

Input-Layout Nesnelerini Yeniden Kullanma

Her giriş düzeni nesnesi bir gölgelendirici imzası temel alınarak oluşturulur; Bu, API'nin türlerin ve semantiğin tam eşleşmesi olduğundan emin olmak için input-layout-object öğelerini shader-input imzasına göre doğrulamasını sağlar. Birçok gölgelendirici için, tüm gölgelendirici giriş imzaları tam olarak eşleştiği sürece, tek bir giriş düzeni nesnesi oluşturabilirsiniz.

Nesneleri Input-Assembler Aşamasına Bağlama

Köşe arabellek kaynaklarını ve giriş düzeni nesnesini oluşturduktan sonra, ID3D11DeviceContext::IASetVertexBuffers ve ID3D11DeviceContext::IASetInputLayoutçağırarak bunları IA aşamasına bağlayabilirsiniz. Aşağıdaki örnekte tek bir köşe arabelleğinin ve giriş düzeni nesnesinin IA aşamasına bağlanması gösterilmektedir:

UINT stride = sizeof( SimpleVertex );
UINT offset = 0;
g_pd3dDevice->IASetVertexBuffers( 
    0,                // the first input slot for binding
    1,                // the number of buffers in the array
    &g_pVertexBuffer, // the array of vertex buffers
    &stride,          // array of stride values, one for each buffer
    &offset );        // array of offset values, one for each buffer

// Set the input layout
g_pd3dDevice->IASetInputLayout( g_pVertexLayout );

Giriş düzeni nesnesini bağlamak için yalnızca nesneye yönelik bir işaretçi gerekir.

Yukarıdaki örnekte tek bir köşe arabelleği bağlanmıştır; ancak, birden çok köşe arabelleği ID3D11DeviceContext::IASetVertexBufferstek bir çağrıyla bağlanabilir ve aşağıdaki kod, üç köşe arabelleğini bağlamak için böyle bir çağrının nasıl yapıldığını gösterir.

UINT strides[3];
strides[0] = sizeof(SimpleVertex1);
strides[1] = sizeof(SimpleVertex2);
strides[2] = sizeof(SimpleVertex3);
UINT offsets[3] = { 0, 0, 0 };
g_pd3dDevice->IASetVertexBuffers( 
    0,                 //first input slot for binding
    3,                 //number of buffers in the array
    &g_pVertexBuffers, //array of three vertex buffers
    &strides,          //array of stride values, one for each buffer
    &offsets );        //array of offset values, one for each buffer

Dizin arabelleği, ID3D11DeviceContext::IASetIndexBufferçağrılarak IA aşamasına bağlanır.

İlkel Türü Belirtme

Giriş arabellekleri bağlandıktan sonra IA aşamasına köşelerin ilkel öğeler halinde nasıl birleştirileceği anlatılmalıdır. Bu, ID3D11DeviceContext::IASetPrimitiveTopologyçağrılarak temel türü belirtilerek yapılır; Aşağıdaki kod, bitişiklik olmadan verileri üçgen liste olarak tanımlamak için bu işlevi çağırır:

g_pd3dDevice->IASetPrimitiveTopology( D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST );

temel türlerin geri kalanı D3D_PRIMITIVE_TOPOLOGYiçinde listelenir.

Çizim Metotlarını Çağırma

Giriş kaynakları işlem hattına bağlandıktan sonra, bir uygulama ilkelleri işlemek için bir draw yöntemi çağırır. Aşağıdaki tabloda gösterilen birkaç çizim yöntemi vardır; bazıları dizin arabelleklerini, bazıları örnek verilerini, bazıları ise akış-çıkış aşamasındaki verileri giriş-assembler aşamasına giriş olarak yeniden kullanır.

Çizim Yöntemleri Açıklama
ID3D11DeviceContext::Draw Dizine alınmamış, örneklenmemiş primitifler çizin.
ID3D11DeviceContext::DrawInstanced Dizine alınamayan, örneklenmiş temel öğeler çizin.
ID3D11DeviceContext::DrawIndexed Dizine alınmış, örneklenmemiş temel öğeler çizin.
ID3D11DeviceContext::DrawIndexedInstanced Dizine alınmış, örneklenmiş temel öğeler çizin.
ID3D11DeviceContext::DrawAuto Akış çıkış aşamasından gelen giriş verilerinden dizine alınamayan, örneklenmemiş temel öğeler çizin.

 

Her çizim yöntemi tek bir topoloji türünü işler. İşleme sırasında, tamamlanmamış ilkel öğeler (yeterli köşesi olmayanlar, dizinleri eksik olanlar, kısmi ilkel öğeler vb.) sessizce atılır.

Input-Assembler Aşama