Paylaşım için teşekkürler
Dünya Problemi Çözüldü: Multi-Clientte Oluşan Zemin Sorunu, Düzeltildir!
Üye
Katılım19 Kas 2025
Konular4
Mesajlar54
Elmas Konular0
Başarım0
ZirveCoin
0
Ticaret Puanı
+0
-0
Üye
Katılım09 Mar 2026
Konular4
Mesajlar54
Elmas Konular0
Başarım0
ZirveCoin
0
Ticaret Puanı
+0
-0
Üye
Katılım24 Şub 2026
Konular8
Mesajlar66
Elmas Konular0
Başarım0
ZirveCoin
0
Ticaret Puanı
+0
-0
08.05.2026 00:23
#25
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,
Kod:
Şu şekilde değiştirelim/yorum satırına çekelim.
Kod:
void CStateManager::SetSamplerState(DWORD dwStage, D3DSAMPLERSTATETYPE Type, DWORD dwValue) Fonksiyonu içerisinde aratalım,
Kod:
Şu şekilde değiştirelim/yorum satırına çekelim.
Kod:
Kanıt:


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;
Şu şekilde değiştirelim/yorum satırına çekelim.
Kod:
//if (m_CurrentState.m_TextureStates[dwStage][Type] == dwValue)
// return;
void CStateManager::SetSamplerState(DWORD dwStage, D3DSAMPLERSTATETYPE Type, DWORD dwValue) Fonksiyonu içerisinde aratalım,
Kod:
if (m_CurrentState.m_SamplerStates[dwStage][Type] == dwValue)
return;
Şu şekilde değiştirelim/yorum satırına çekelim.
Kod:
//if (m_CurrentState.m_SamplerStates[dwStage][Type] == dwValue)
// return;
Kanıt:
BEFORE

AFTER

Üye
Katılım24 Şub 2026
Konular8
Mesajlar66
Elmas Konular0
Başarım0
ZirveCoin
0
Ticaret Puanı
+0
-0
Üye
Katılım24 Şub 2026
Konular8
Mesajlar66
Elmas Konular0
Başarım0
ZirveCoin
0
Ticaret Puanı
+0
-0
Üye
Katılım24 Şub 2026
Konular8
Mesajlar66
Elmas Konular0
Başarım0
ZirveCoin
0
Ticaret Puanı
+0
-0
Üye
Katılım17 Nis 2026
Konular8
Mesajlar73
Elmas Konular0
Başarım0
ZirveCoin
0
Ticaret Puanı
+0
-0
Bu konuyu görüntüleyenler
1 misafir
Cevap yazmak için giriş yapın.
Benzer Konular
6 cevap
2K görüntüleme
9 cevap
1.9K görüntüleme
4 cevap
1.9K görüntüleme
9 cevap
1.9K görüntüleme
8 cevap
1.9K görüntüleme


