- Katılım
- 6 Kas 2021
- Mesajlar
- 3,998
- Tepkime puanı
- 5,414
- Puanları
- 113
- Yaş
- 31
- Konum
- Türkiye
- Dc
- fatihbulut
Merhaba arkadaşlar,
Başlıktaki gibi, filesinizi DirectX8'den DirectX9'a yükselttikten sonra, 2. clienti açtığınızda, ilk clientin zemin dokuları bozuluyor. Bunun sebebi, ikinci bir DX9 oyun penceresi (client) açıldığında, Windows arka plandaki diğer oyunun grafik filtreleme ("Sampler State" & "TextureStageState") ayarlarını varsayılana sıfırlar. Ancak oyunun içerisindeki CStateManager modülü (önbellekleme yaptığı için) bu değişikliğin farkına varmaz ve ayarları yeniden ekran kartına göndermez. Sonuç olarak zeminlerin yüksek çözünürlüklü dokuları bozulur ve zemin dokusu çok kalitesiz/pikselli görünmeye başlar.
Çözümümüz:
Source/Client/source/EterLib/StateManager.cpp dosyasında bulunan SetSamplerState ve SetTextureStageState fonksiyonlarındaki önbellekleme (cache control) denetimlerini yorum satırı haline getireceğiz.
Source/Client/source/EterLib/StateManager.cpp Dosyasını açalım
void CStateManager::SetTextureStageState(DWORD dwStage, D3DTEXTURESTAGESTATETYPE Type, DWORD dwValue) İçerisinde aratalım,
Şu şekilde değiştirelim/yorum satırına çekelim.
void CStateManager::SetSamplerState(DWORD dwStage, D3DSAMPLERSTATETYPE Type, DWORD dwValue) Fonksiyonu içerisinde aratalım,
Şu şekilde değiştirelim/yorum satırına çekelim.
ÖNCESİ
SONRASI
Başlıktaki gibi, filesinizi DirectX8'den DirectX9'a yükselttikten sonra, 2. clienti açtığınızda, ilk clientin zemin dokuları bozuluyor. Bunun sebebi, ikinci bir DX9 oyun penceresi (client) açıldığında, Windows arka plandaki diğer oyunun grafik filtreleme ("Sampler State" & "TextureStageState") ayarlarını varsayılana sıfırlar. Ancak oyunun içerisindeki CStateManager modülü (önbellekleme yaptığı için) bu değişikliğin farkına varmaz ve ayarları yeniden ekran kartına göndermez. Sonuç olarak zeminlerin yüksek çözünürlüklü dokuları bozulur ve zemin dokusu çok kalitesiz/pikselli görünmeye başlar.
Çözümümüz:
Source/Client/source/EterLib/StateManager.cpp dosyasında bulunan SetSamplerState ve SetTextureStageState fonksiyonlarındaki önbellekleme (cache control) denetimlerini yorum satırı haline getireceğiz.
Source/Client/source/EterLib/StateManager.cpp Dosyasını açalım
void CStateManager::SetTextureStageState(DWORD dwStage, D3DTEXTURESTAGESTATETYPE Type, DWORD dwValue) İçerisinde aratalım,
Kod:
if (m_CurrentState.m_TextureStates[dwStage][Type] == dwValue)
return;
Kod:
//if (m_CurrentState.m_TextureStates[dwStage][Type] == dwValue)
// return;
Kod:
if (m_CurrentState.m_SamplerStates[dwStage][Type] == dwValue)
return;
Kod:
//if (m_CurrentState.m_SamplerStates[dwStage][Type] == dwValue)
// return;
ÖNCESİ
SONRASI
