Çok eski bir web tarayıcısı kullanıyorsunuz. Bu veya diğer siteleri görüntülemekte sorunlar yaşayabilirsiniz.. Tarayıcınızı güncellemeli veya alternatif bir tarayıcı kullanmalısınız.
Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Arkadaşlar Merhaba Geçenlerde Wİki Sistemini Ekledim Bayada Uzun Sürdü Sistem Görünürde seysrsız ve düzgünçalışıyor ama şöyle bir problemim var.
1. Clienti açıp oyuna giriyorum herhangi bir problem yok sistemde açılıyor herşey çalışıyor yani normal birşekilde.
1. Client açıkken 2. Clienti Açıyorum 1. Client Siyah Ekran Oluyor Kapatamıyorum Öyle Kalıyor.
Wiki sisteminden kaynaklı olduğunu Eski yedeklerimi tek tek yükleyip kontrol ettikten sonra wiki ekledikten sonra bu sorunla karşılaştığımı fark ettim
Bildiğiniz üzere eklemesi çok olan bir sistem şimdi geri söküp takmaya çalışsam çok zaman kaybedeceğim belki bu sorunlar ile karşılaşan ve çözen biri vardır diye konu açayım dedim yada bu konu ile alakalı dosya isimleri nelerdir direk o kısımları bir daha sil baştan eklemeye çalışayım.
Wiki sistemine genel olarak yabancıyım ancak piyasada farklı sürümleri olduğunu biliyorum. Eğer senin wiki sistemin render targetlı ise muhtemelen UAC sonrası cihaz resetlenmiyordur.
Bir tane client aç ve oyuna giriş yap. Sonra masaüstünde herhangi bir uygulamaya sağ tıklayıp yönetici olarak çalıştır de,(açılan evet-hayır ekranında Hayır'a da tıklayabilirsin.) eğer yine metin2 ekranı simsiyah olursa üstteki tahminim doğru demektir. Eğer durum böyleyse PythonApplication.cpp ve GrpDevice.cpp dosyalarını kontrol et söktüğün filesle karşılaştır. Wiki sistemi ile alakalı gözden kaçırdığın kodlar olmalı.
Wiki sistemine genel olarak yabancıyım ancak piyasada farklı sürümleri olduğunu biliyorum. Eğer senin wiki sistemin render targetlı ise muhtemelen UAC sonrası cihaz resetlenmiyordur.
Bir tane client aç ve oyuna giriş yap. Sonra masaüstünde herhangi bir uygulamaya sağ tıklayıp yönetici olarak çalıştır de,(açılan evet-hayır ekranında Hayır'a da tıklayabilirsin.) eğer yine metin2 ekranı simsiyah olursa üstteki tahminim doğru demektir. Eğer durum böyleyse PythonApplication.cpp ve GrpDevice.cpp dosyalarını kontrol et söktüğün filesle karşılaştır. Wiki sistemi ile alakalı gözden kaçırdığın kodlar olmalı.
Hayır Hocam Herhangi Bir Seysser yok Bütün Seysser leri Hatta Kanal Loglarına Kadar Bile Baktm Yok Tertemiz. Debug Mod için İse Clientin donduğu ile alakalı bir veri kaydetmiyor sanki client halen çalışıyormuş gibi davranıyor yani bir problem gözükmüyor. Değerli Yorumunuz İçin Teşekkür Ederim İyiki Varsınız.
Wiki sistemine genel olarak yabancıyım ancak piyasada farklı sürümleri olduğunu biliyorum. Eğer senin wiki sistemin render targetlı ise muhtemelen UAC sonrası cihaz resetlenmiyordur.
Bir tane client aç ve oyuna giriş yap. Sonra masaüstünde herhangi bir uygulamaya sağ tıklayıp yönetici olarak çalıştır de,(açılan evet-hayır ekranında Hayır'a da tıklayabilirsin.) eğer yine metin2 ekranı simsiyah olursa üstteki tahminim doğru demektir. Eğer durum böyleyse PythonApplication.cpp ve GrpDevice.cpp dosyalarını kontrol et söktüğün filesle karşılaştır. Wiki sistemi ile alakalı gözden kaçırdığın kodlar olmalı.
Bunu Denedim Hocam Tahmin Ettiğiniz Gibi Herhangi Başka Bir EXE de Çalışınca Aynı Hatayı Veriyordu. Bununla beraber PythonAplication.cpp Dosyamı tekrardan temizleyip eklemeleri Gpt İle beraber yaptım hatta extra birkaç öneri de verdi eklemeleri ve Gpt Önerilerini de aşağıya bırakacağım belki işine yarayan olur.
Hatta bu önerileri de açıklayabilecek olan varsa açıklarsa çok daha güzel olur. @Kaiser Değerli Yorumunuz İçin Teşekkür Ederim İyiki Varsınız Hocam.
PythonAplication.cpp:
// Bu Kısım İlk Eklediğim Bölüm Burası Zaten Diğer Fileste de Vardı.
bool PERF_CHECKER_RENDER_GAME = false;
void CPythonApplication::RenderGame()
{
if (!PERF_CHECKER_RENDER_GAME)
{
float fAspect=m_kWndMgr.GetAspect();
float fFarClip=m_pyBackground.GetFarClip();
m_pyGraphic.SetPerspective(30.0f, fAspect, 100.0, fFarClip);
CCullingManager::Instance().Process();
m_kChrMgr.Deform();
// INGAME_WIKI: Wiki modellerinin deformasyonu - karakter deformasyonu sonrası çalışır
#if defined(INGAME_WIKI)
if (CPythonWikiRenderTarget::instance().CanRenderWikiModules())
m_pyWikiModelViewManager.DeformModels();
#endif
m_pyBackground.RenderCharacterShadowToTexture();
m_pyGraphic.SetGameRenderState();
m_pyGraphic.PushState();
{
long lx, ly;
m_kWndMgr.GetMousePosition(lx, ly);
m_pyGraphic.SetCursorPosition(lx, ly);
}
m_pyBackground.RenderSky();
m_pyBackground.RenderBeforeLensFlare();
m_pyBackground.RenderCloud();
m_pyBackground.BeginEnvironment();
m_pyBackground.Render();
m_pyBackground.SetCharacterDirLight();
m_kChrMgr.Render();
// INGAME_WIKI: Wiki modellerinin render edilmesi - karakter render sonrası çalışır
#if defined(INGAME_WIKI)
if (CPythonWikiRenderTarget::instance().CanRenderWikiModules())
m_pyWikiModelViewManager.RenderModels();
#endif
m_pyBackground.SetBackgroundDirLight();
m_pyBackground.RenderWater();
m_pyBackground.RenderSnow();
m_pyBackground.RenderEffect();
m_pyBackground.EndEnvironment();
m_kEftMgr.Render();
m_pyItem.Render();
m_FlyingManager.Render();
m_pyBackground.BeginEnvironment();
m_pyBackground.RenderPCBlocker();
m_pyBackground.EndEnvironment();
m_pyBackground.RenderAfterLensFlare();
return;
}
// Bu Kısım İkinci Eklediğim Bölüm Burası Zaten Diğer Fileste de Vardı.
//if (m_isActivateWnd)
{
CScreen s;
float fAspect = UI::CWindowManager::Instance().GetAspect();
float fFarClip = CPythonBackground::Instance().GetFarClip();
s.SetPerspective(30.0f,fAspect, 100.0f, fFarClip);
s.BuildViewFrustum();
}
// INGAME_WIKI: Wiki modellerinin güncellenmesi - her frame'de çalışır
#if defined(INGAME_WIKI)
if (CPythonWikiRenderTarget::instance().CanRenderWikiModules())
m_pyWikiModelViewManager.UpdateModels();
#endif
DWORD t3=ELTimer_GetMSec();
TPixelPosition kPPosMainActor;
m_pyPlayer.NEW_GetMainActorPosition(&kPPosMainActor);
DWORD t4=ELTimer_GetMSec();
m_pyBackground.Update(kPPosMainActor.x, kPPosMainActor.y, kPPosMainActor.z);
DWORD t5=ELTimer_GetMSec();
m_GameEventManager.SetCenterPosition(kPPosMainActor.x, kPPosMainActor.y, kPPosMainActor.z);
m_GameEventManager.Update();
// Bu Kısım Üçüncü Eklediğim Bölüm Burası Zaten Diğer Fileste de Vardı.
if (!s_bFrameSkip)
{
CGrannyMaterial::TranslateSpecularMatrix(g_specularSpd, g_specularSpd, 0.0f);
DWORD dwRenderStartTime = ELTimer_GetMSec();
bool canRender = true;
if (m_isMinimizedWnd)
{
canRender = false;
}
else
{
if (m_pyGraphic.IsLostDevice())
{
CPythonBackground& rkBG = CPythonBackground::Instance();
rkBG.ReleaseCharacterShadowTexture();
// INGAME_WIKI: Device kaybedildiğinde wiki render texture'larını serbest bırak
#if defined(INGAME_WIKI)
CWikiRenderTargetManager::Instance().ReleaseRenderTargetTextures();
#endif
if (m_pyGraphic.RestoreDevice())
{
rkBG.CreateCharacterShadowTexture();
// INGAME_WIKI: Device restore edildiğinde wiki render texture'larını yeniden oluştur
#if defined(INGAME_WIKI)
CWikiRenderTargetManager::Instance().CreateRenderTargetTextures();
#endif
}
else
{
canRender = false;
}
}
}
// Bu Kısım Dördüncü Eklediğim Bölüm GPT nin Önerisi Üzerine Eklediğim Kısımlar.
int CPythonApplication::CheckDeviceState()
{
CGraphicDevice::EDeviceState e_deviceState = m_grpDevice.GetDeviceState();
switch (e_deviceState)
{
case CGraphicDevice::DEVICESTATE_NULL:
return DEVICE_STATE_FALSE;
case CGraphicDevice::DEVICESTATE_BROKEN:
return DEVICE_STATE_SKIP;
case CGraphicDevice::DEVICESTATE_NEEDS_RESET:
// INGAME_WIKI: Device reset öncesi wiki render texture'larını serbest bırak
#if defined(INGAME_WIKI)
CWikiRenderTargetManager::Instance().ReleaseRenderTargetTextures();
#endif
if (!m_grpDevice.Reset())
return DEVICE_STATE_SKIP;
// INGAME_WIKI: Device reset sonrası wiki render texture'larını yeniden oluştur
#if defined(INGAME_WIKI)
CWikiRenderTargetManager::Instance().CreateRenderTargetTextures();
#endif
break;
}
return DEVICE_STATE_OK;
}
NOT: Bende RENDER_TARGET Sistemi Yok. Umarım Bir yanlış Yoktur Aynı Problemi Yaşıyanların İşine Yarar.
Hayır Hocam Herhangi Bir Seysser yok Bütün Seysser leri Hatta Kanal Loglarına Kadar Bile Baktm Yok Tertemiz. Debug Mod için İse Clientin donduğu ile alakalı bir veri kaydetmiyor sanki client halen çalışıyormuş gibi davranıyor yani bir problem gözükmüyor. Değerli Yorumunuz İçin Teşekkür Ederim İyiki Varsınız.
Bu İşlemi Yapmadım Ama Belki İşine Yarayan Olacaktır. Değerli Yorumunuz İçin Teşekkür Ederim İyiki Varsınız.
Bunu Denedim Hocam Tahmin Ettiğiniz Gibi Herhangi Başka Bir EXE de Çalışınca Aynı Hatayı Veriyordu. Bununla beraber PythonAplication.cpp Dosyamı tekrardan temizleyip eklemeleri Gpt İle beraber yaptım hatta extra birkaç öneri de verdi eklemeleri ve Gpt Önerilerini de aşağıya bırakacağım belki işine yarayan olur.
Hatta bu önerileri de açıklayabilecek olan varsa açıklarsa çok daha güzel olur. @Kaiser Değerli Yorumunuz İçin Teşekkür Ederim İyiki Varsınız Hocam.
PythonAplication.cpp:
// Bu Kısım İlk Eklediğim Bölüm Burası Zaten Diğer Fileste de Vardı.
bool PERF_CHECKER_RENDER_GAME = false;
void CPythonApplication::RenderGame()
{
if (!PERF_CHECKER_RENDER_GAME)
{
float fAspect=m_kWndMgr.GetAspect();
float fFarClip=m_pyBackground.GetFarClip();
m_pyGraphic.SetPerspective(30.0f, fAspect, 100.0, fFarClip);
CCullingManager::Instance().Process();
m_kChrMgr.Deform();
// INGAME_WIKI: Wiki modellerinin deformasyonu - karakter deformasyonu sonrası çalışır
#if defined(INGAME_WIKI)
if (CPythonWikiRenderTarget::instance().CanRenderWikiModules())
m_pyWikiModelViewManager.DeformModels();
#endif
m_pyBackground.RenderCharacterShadowToTexture();
m_pyGraphic.SetGameRenderState();
m_pyGraphic.PushState();
{
long lx, ly;
m_kWndMgr.GetMousePosition(lx, ly);
m_pyGraphic.SetCursorPosition(lx, ly);
}
m_pyBackground.RenderSky();
m_pyBackground.RenderBeforeLensFlare();
m_pyBackground.RenderCloud();
m_pyBackground.BeginEnvironment();
m_pyBackground.Render();
m_pyBackground.SetCharacterDirLight();
m_kChrMgr.Render();
// INGAME_WIKI: Wiki modellerinin render edilmesi - karakter render sonrası çalışır
#if defined(INGAME_WIKI)
if (CPythonWikiRenderTarget::instance().CanRenderWikiModules())
m_pyWikiModelViewManager.RenderModels();
#endif
m_pyBackground.SetBackgroundDirLight();
m_pyBackground.RenderWater();
m_pyBackground.RenderSnow();
m_pyBackground.RenderEffect();
m_pyBackground.EndEnvironment();
m_kEftMgr.Render();
m_pyItem.Render();
m_FlyingManager.Render();
m_pyBackground.BeginEnvironment();
m_pyBackground.RenderPCBlocker();
m_pyBackground.EndEnvironment();
m_pyBackground.RenderAfterLensFlare();
return;
}
// Bu Kısım İkinci Eklediğim Bölüm Burası Zaten Diğer Fileste de Vardı.
//if (m_isActivateWnd)
{
CScreen s;
float fAspect = UI::CWindowManager::Instance().GetAspect();
float fFarClip = CPythonBackground::Instance().GetFarClip();
s.SetPerspective(30.0f,fAspect, 100.0f, fFarClip);
s.BuildViewFrustum();
}
// INGAME_WIKI: Wiki modellerinin güncellenmesi - her frame'de çalışır
#if defined(INGAME_WIKI)
if (CPythonWikiRenderTarget::instance().CanRenderWikiModules())
m_pyWikiModelViewManager.UpdateModels();
#endif
DWORD t3=ELTimer_GetMSec();
TPixelPosition kPPosMainActor;
m_pyPlayer.NEW_GetMainActorPosition(&kPPosMainActor);
DWORD t4=ELTimer_GetMSec();
m_pyBackground.Update(kPPosMainActor.x, kPPosMainActor.y, kPPosMainActor.z);
DWORD t5=ELTimer_GetMSec();
m_GameEventManager.SetCenterPosition(kPPosMainActor.x, kPPosMainActor.y, kPPosMainActor.z);
m_GameEventManager.Update();
// Bu Kısım Üçüncü Eklediğim Bölüm Burası Zaten Diğer Fileste de Vardı.
if (!s_bFrameSkip)
{
CGrannyMaterial::TranslateSpecularMatrix(g_specularSpd, g_specularSpd, 0.0f);
DWORD dwRenderStartTime = ELTimer_GetMSec();
bool canRender = true;
if (m_isMinimizedWnd)
{
canRender = false;
}
else
{
if (m_pyGraphic.IsLostDevice())
{
CPythonBackground& rkBG = CPythonBackground::Instance();
rkBG.ReleaseCharacterShadowTexture();
// INGAME_WIKI: Device kaybedildiğinde wiki render texture'larını serbest bırak
#if defined(INGAME_WIKI)
CWikiRenderTargetManager::Instance().ReleaseRenderTargetTextures();
#endif
if (m_pyGraphic.RestoreDevice())
{
rkBG.CreateCharacterShadowTexture();
// INGAME_WIKI: Device restore edildiğinde wiki render texture'larını yeniden oluştur
#if defined(INGAME_WIKI)
CWikiRenderTargetManager::Instance().CreateRenderTargetTextures();
#endif
}
else
{
canRender = false;
}
}
}
// Bu Kısım Dördüncü Eklediğim Bölüm GPT nin Önerisi Üzerine Eklediğim Kısımlar.
int CPythonApplication::CheckDeviceState()
{
CGraphicDevice::EDeviceState e_deviceState = m_grpDevice.GetDeviceState();
switch (e_deviceState)
{
case CGraphicDevice::DEVICESTATE_NULL:
return DEVICE_STATE_FALSE;
case CGraphicDevice::DEVICESTATE_BROKEN:
return DEVICE_STATE_SKIP;
case CGraphicDevice::DEVICESTATE_NEEDS_RESET:
// INGAME_WIKI: Device reset öncesi wiki render texture'larını serbest bırak
#if defined(INGAME_WIKI)
CWikiRenderTargetManager::Instance().ReleaseRenderTargetTextures();
#endif
if (!m_grpDevice.Reset())
return DEVICE_STATE_SKIP;
// INGAME_WIKI: Device reset sonrası wiki render texture'larını yeniden oluştur
#if defined(INGAME_WIKI)
CWikiRenderTargetManager::Instance().CreateRenderTargetTextures();
#endif
break;
}
return DEVICE_STATE_OK;
}
NOT: Bende RENDER_TARGET Sistemi Yok. Umarım Bir yanlış Yoktur Aynı Problemi Yaşıyanların İşine Yarar.
Evet sende render target yok ama wikide var. Ve render target dediğimiz şey, directx cihazı kaybolduğunda veya resetlenme ihtiyacı duyduğunda, diğer tüm kaynaklarla beraber serbest bırakılması gereken bir veridir. Resetten hemen sonra ise tüm kaynaklarla beraber render targetın da tekrar oluşturulması gerekir.
Senin yaşadığın sorunun sebebi muhtemelen şurasıydı:
C++:
case CGraphicDevice::DEVICESTATE_NEEDS_RESET:
// Tüm kaynaklar burada serbest bırakılmalı..
#if defined(INGAME_WIKI)
CWikiRenderTargetManager::Instance().ReleaseRenderTargetTextures();
#endif
....
....
if (!m_grpDevice.Reset()) // cihaz resetleniyor
return DEVICE_STATE_SKIP;
....
......
// reset başarılıysa tüm kaynakları tekrar oluştur..
#if defined(INGAME_WIKI)
CWikiRenderTargetManager::Instance().CreateRenderTargetTextures();
#endif
Eğer resetleme anında kaynaklardan biri veya birkaçı serbest bırakılmazsa resetleme başarısız olur, cihaz kaybolur.
Bu da senin "siyah ekran" dediğin sonucu verir. Çünkü artık bir nevi directx çökmüştür.