Özel Surface Verileri (Direct3D 9)
Uygulamaya özgü her türlü veriyi bir yüzeyle depolayabilirsiniz. Örneğin, bir oyundaki haritayı temsil eden bir yüzey arazi hakkında bilgi içerebilir.
Bir yüzey birden fazla özel veri arabelleğine sahip olabilir. Her arabellek, verileri yüzeye eklerken sağladığınız bir GUID ile tanımlanır.
Özel yüzey verilerini depolamak için SetPrivateData'yı kullanarak kaynak arabelleğe bir işaretçi, verilerin boyutu ve veriler için uygulama tanımlı bir GUID geçirin. İsteğe bağlı olarak, kaynak veriler COM nesnesi biçiminde bulunabilir; Bu durumda, nesnenin IUnknown arabirim işaretçisine bir işaretçi geçirir ve D3DSPD_IUNKNOWNPOINTER bayrağını ayarlarsınız.
SetPrivateData veriler için bir iç arabellek ayırır ve kopyalar. Daha sonra kaynak arabelleği veya nesneyi güvenli bir şekilde serbest ekleyebilirsiniz. İç arabellek veya arabirim başvurusu, FreePrivateData çağrıldığında serbest bırakılır. Bu, yüzey serbest olduğunda otomatik olarak gerçekleşir.
Bir yüzeyin özel verilerini almak için doğru boyutta bir arabellek ayırmanız ve sonra verilere atanan GUID'yi geçirerek GetPrivateData yöntemini çağırmanız gerekir. Bu arabellek için kullandığınız tüm dinamik belleği boşaltmaktan siz sorumlusunuz. Veriler bir COM nesnesiyse, bu yöntem IUnknown işaretçisini alır.
Ne kadar büyük bir arabellek ayırabileceğinizi bilmiyorsanız, önce pSizeOfData'da sıfır ile GetPrivateData'yı çağırabilirsiniz. yöntem D3DERR_MOREDATA ile başarısız olursa, arabellek için gerekli bayt sayısını döndürür.
İlgili konular