Aracılığıyla paylaş


Genişlik ve Aralık karşılaştırması (Direct3D 9)

Genişlik ve perde terimleri genellikle resmi olmayan bir şekilde kullanılmış olsa da, çok önemli ve birbirinden ayrı anlamlara sahiptir. Sonuç olarak, her birinin anlamlarını ve Direct3D'nin bunları açıklamak için kullandığı değerleri nasıl yorumlayacağınızı anlamanız gerekir.

Direct3D, bir yüzeyi açıklayan bilgileri taşımak için D3DSURFACE_DESC yapısını kullanır. Diğer şeylerin yanı sıra, bu yapı bir yüzeyin boyutları ve bu boyutların bellekte nasıl temsil edildikleriyle ilgili bilgiler içerecek şekilde tanımlanır. Yapı, yüzeyin mantıksal boyutlarını açıklamak için Yükseklik ve Genişlik üyelerini kullanır. Her iki üye de piksel cinsinden ölçülür. Bu nedenle 640 x 480 yüzey için Yükseklik ve Genişlik değerleri, ister 8 bit yüzey ister 24 bit RGB yüzey olsun aynıdır.

IDirect3DSurface9::LockRect yöntemini kullanarak bir yüzeyi kilitlediğinizde, yöntem yüzeyin perdesini ve kilitli bitlerin işaretçisini içeren bir D3DLOCKED_RECT yapısını doldurur. Pitch üyesindeki değer, yüzeyin adım olarak da adlandırılan bellek perdesini açıklar. Aralık, bir bit eşlem çizgisinin başlangıcını ve sonraki bit eşlem çizgisinin başlangıcını temsil eden iki bellek adresi arasındaki bayt cinsinden uzaklıktır. Perde piksel yerine bayt cinsinden ölçüldiğinden, 640x480x8 yüzey aynı boyutlara ancak farklı bir piksel biçimine sahip bir yüzeyden çok farklı bir aralık değerine sahiptir. Ayrıca, aralık değeri bazen Direct3D'nin önbellek olarak ayırdığı baytları yansıtır, bu nedenle perdenin yalnızca piksel başına bayt sayısıyla çarpılan genişlik olduğunu varsaymak güvenli değildir. Bunun yerine, aşağıdaki diyagramda gösterildiği gibi genişlik ve aralık arasındaki farkı görselleştirin.

Aynı ön arabellek, arka arabellek ve önbellekdiyagramı

Bu diyagramda ön arabellek ve arka arabellek hem 640x480x8 hem de önbellek 384x480x8'dir.

Yüzeylere doğrudan erişirken, yüzeyin boyutları için ayrılan bellekte kalmaya ve önbellek için ayrılmış belleklerden uzak kalmaya dikkat edin. Ayrıca, bir yüzeyin yalnızca bir bölümünü kilitlediğinizde, yüzeyi kilitlerken belirttiğiniz dikdörtgenin içinde kalmalısınız. Bu yönergelerin izlenememesi öngörülemeyen sonuçlara neden olur. Doğrudan surface belleğine işlenirken her zaman IDirect3DSurface9::LockRect yöntemi tarafından döndürülen perdeyi kullanın. Yalnızca ekran modunu temel alan bir sunum varsaymayın. Uygulamanız bazı görüntü bağdaştırıcılarında çalışıyorsa ancak diğerlerinde bozuk görünüyorsa, sorunun nedeni bu olabilir.

Daha fazla bilgi için bkz. Surface Belleğe Doğrudan Erişme (Direct3D 9).

Direct3D Surfaces