- Katılım
- 11 May 2023
- Konular
- 270
- Mesajlar
- 1,141
- Çözüm
- 2
- Online süresi
- 1mo 25d
- Reaksiyon Skoru
- 744
- Altın Konu
- 1
- Başarım Puanı
- 199
- MmoLira
- 1,170
- DevLira
- 381
ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!
cloude gibi yapay zekayı ücretli alınırsa yazılabilir çünkü.Paylaşımda düşünceli olduğun için teşekkürler. DirectX gibi bir oyun motorunu akademik bir geçmişin yoksa veya oyun şirketinde çalışmıyorsan öğrenemezsin, öyle ki desteği kesilmiş Dx8 veya 9 u hiç öğrenemezsin, ayrıca şunun da altını çizerek söylüyorum böyle saçma sapan forumlarda dx8 ile yazılmış bir motoru 9 u geçirecek 1 tane allahın kuluda çıkamaz, öyle ex mex yapıp kimse gelmesin, 3-5 deneyimli kişiler ile 5-6 ayda ancak motor güncellenebilir...
yapay zekanın ücretli verisyonlarında 50 dosya bazı yapay zekalar dosyanın tamamını okuyup kod yazabiliyor.
- Katılım
- 1 Tem 2019
- Konular
- 1,893
- Mesajlar
- 5,201
- Çözüm
- 134
- Online süresi
- 1mo 8d
- Reaksiyon Skoru
- 4,001
- Altın Konu
- 140
- Başarım Puanı
- 339
- MmoLira
- 39,500
- DevLira
- 150
Paylaşım için teşekkürler eline sağlık.
- Katılım
- 8 Nis 2017
- Konular
- 14
- Mesajlar
- 122
- Online süresi
- 8h 40m
- Reaksiyon Skoru
- 62
- Altın Konu
- 0
- TM Yaşı
- 9 Yıl 1 Ay 29 Gün
- Başarım Puanı
- 75
- Yaş
- 26
- MmoLira
- 400
- DevLira
- 0
paylaşım için saol
- Katılım
- 11 May 2023
- Konular
- 270
- Mesajlar
- 1,141
- Çözüm
- 2
- Online süresi
- 1mo 25d
- Reaksiyon Skoru
- 744
- Altın Konu
- 1
- Başarım Puanı
- 199
- MmoLira
- 1,170
- DevLira
- 381
grpdevice.cpp
fonksiyondaki hesaplama dxmath geçirildi
fonksiyondaki hesaplama dxmath geçirildi
Kod:
int CGraphicDevice::Create(HWND hWnd, int iHres, int iVres, bool Windowed, int /*iBit*/, int iReflashRate)
{
int iRet = CREATE_OK;
// Mevcut cihaz varsa önce temizle
Destroy();
ms_iWidth = iHres;
ms_iHeight = iVres;
ms_hWnd = hWnd;
ms_hDC = GetDC(hWnd);
// 1. Direct3D9 Arabirimini Oluştur
ms_lpd3d = Direct3DCreate9(D3D_SDK_VERSION);
if (!ms_lpd3d)
return CREATE_NO_DIRECTX;
// 2. Sistemdeki Ekran Kartlarını ve Modları Tara
// EL3D_ConfirmDevice: Cihaz özelliklerini onaylayan callback fonksiyonunuz
if (!ms_kD3DDetector.Build(*ms_lpd3d, EL3D_ConfirmDevice))
return CREATE_ENUM;
// İstenen çözünürlüğe en uygun modu bul
if (!ms_kD3DDetector.Find(iHres, iVres, 32, Windowed, &ms_iD3DModeInfo, &ms_iD3DDevInfo, &ms_iD3DAdapterInfo))
return CREATE_DETECT;
// Seçilen Adaptör Bilgilerini Al
D3D_CAdapterInfo *pkD3DAdapterInfo = ms_kD3DDetector.GetD3DAdapterInfop(ms_iD3DAdapterInfo);
if (!pkD3DAdapterInfo)
{
SPDLOG_ERROR("adapter {0} is EMPTY", ms_iD3DAdapterInfo);
return CREATE_DETECT;
}
// Seçilen Mod Bilgilerini Al
D3D_SModeInfo *pkD3DModeInfo = pkD3DAdapterInfo->GetD3DModeInfop(ms_iD3DDevInfo, ms_iD3DModeInfo);
if (!pkD3DModeInfo)
{
SPDLOG_ERROR("device {0}, mode {1} is EMPTY", ms_iD3DDevInfo, ms_iD3DModeInfo);
return CREATE_DETECT;
}
// 3. Eski 3dfx Voodoo Kartları İçin Özel Kontrol (Legacy Desteği)
D3DADAPTER_IDENTIFIER9 &rkD3DAdapterId = pkD3DAdapterInfo->GetIdentifier();
if (Windowed && _strnicmp(rkD3DAdapterId.Driver, "3dfx", 4) == 0 &&
22 == pkD3DAdapterInfo->GetDesktopD3DDisplayModer().Format)
{
return CREATE_FORMAT;
}
// Donanım Hızlandırma Kontrolü (T&L)
if (pkD3DModeInfo->m_dwD3DBehavior == D3DCREATE_SOFTWARE_VERTEXPROCESSING)
{
iRet |= CREATE_NO_TNL;
}
int ErrorCorrection = 0;
RETRY:
// 4. Sunum Parametrelerini (Present Parameters) Yapılandır
ZeroMemory(&ms_d3dPresentParameter, sizeof(ms_d3dPresentParameter));
ms_d3dPresentParameter.Windowed = Windowed;
ms_d3dPresentParameter.BackBufferWidth = iHres;
ms_d3dPresentParameter.BackBufferHeight = iVres;
ms_d3dPresentParameter.hDeviceWindow = hWnd;
ms_d3dPresentParameter.BackBufferCount = 1;
ms_d3dPresentParameter.SwapEffect = D3DSWAPEFFECT_DISCARD;
// Derinlik Tamponu (Depth Stencil) - Otomatik En İyi Formatı Seç
ms_d3dPresentParameter.EnableAutoDepthStencil = TRUE;
ms_d3dPresentParameter.AutoDepthStencilFormat = pkD3DModeInfo->m_eD3DFmtDepthStencil;
if (Windowed)
{
ms_d3dPresentParameter.MultiSampleType = D3DMULTISAMPLE_NONE;
// D3DPRESENT yazım hatası düzeltildi
ms_d3dPresentParameter.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
ms_d3dPresentParameter.BackBufferFormat = pkD3DAdapterInfo->GetDesktopD3DDisplayModer().Format;
}
else
{
ms_d3dPresentParameter.MultiSampleType = D3DMULTISAMPLE_2_SAMPLES;
ms_d3dPresentParameter.PresentationInterval = D3DPRESENT_INTERVAL_ONE;
ms_d3dPresentParameter.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
ms_d3dPresentParameter.BackBufferFormat = pkD3DModeInfo->m_eD3DFmtPixel;
}
// 5. Cihazı Oluştur (CreateDevice)
// ÖNEMLİ: DirectXMath ve SSE komutları için FPU_PRESERVE bayrağı eklenmelidir.
ms_dwD3DBehavior = pkD3DModeInfo->m_dwD3DBehavior | D3DCREATE_FPU_PRESERVE;
ms_hLastResult = ms_lpd3d->CreateDevice(ms_iD3DAdapterInfo,
D3DDEVTYPE_HAL,
hWnd,
ms_dwD3DBehavior,
&ms_d3dPresentParameter,
&ms_lpd3dDevice);
if (FAILED(ms_hLastResult))
{
// Hata Yönetimi
switch (ms_hLastResult)
{
case D3DERR_INVALIDCALL:
SPDLOG_ERROR("IDirect3DDevice.CreateDevice - ERROR D3DERR_INVALIDCALL");
break;
case D3DERR_NOTAVAILABLE:
SPDLOG_ERROR("IDirect3DDevice.CreateDevice - ERROR D3DERR_NOTAVAILABLE");
break;
case D3DERR_OUTOFVIDEOMEMORY:
SPDLOG_ERROR("IDirect3DDevice.CreateDevice - ERROR D3DERR_OUTOFVIDEOMEMORY");
break;
default:
SPDLOG_ERROR("IDirect3DDevice.CreateDevice - ERROR {0}", ms_hLastResult);
break;
}
if (ErrorCorrection < 1)
{
ErrorCorrection++;
// Refresh Rate hatası ise tekrar dene
iReflashRate = 0;
goto RETRY;
}
return CREATE_DEVICE;
}
// 6. DXT Doku Sıkıştırma Desteğini Kontrol Et
ms_bSupportDXT = true;
D3DFORMAT aDXTFormats[] = { D3DFMT_DXT1, D3DFMT_DXT3, D3DFMT_DXT5 };
for (D3DFORMAT fmt : aDXTFormats)
{
if (ms_lpd3d->CheckDeviceFormat(ms_iD3DAdapterInfo, D3DDEVTYPE_HAL,
ms_d3dPresentParameter.BackBufferFormat, 0, D3DRTYPE_TEXTURE, fmt) == D3DERR_NOTAVAILABLE)
{
ms_bSupportDXT = false;
}
}
// 7. Cihaz Yeteneklerini ve Viewport'u Al
if (FAILED((ms_hLastResult = ms_lpd3dDevice->GetDeviceCaps(&ms_d3dCaps))))
{
SPDLOG_ERROR("IDirect3DDevice.GetDeviceCaps - ERROR {0}", ms_hLastResult);
return CREATE_GET_DEVICE_CAPS2;
}
if (!Windowed)
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, iHres, iVres, SWP_SHOWWINDOW);
ms_lpd3dDevice->GetViewport(&ms_Viewport);
// 8. State Manager Oluştur
// Bellek sızıntısını önlemek için eskisi varsa sil
if (m_pStateManager) delete m_pStateManager;
m_pStateManager = new CStateManager(ms_lpd3dDevice);
// 9. Matrix Stack Oluştur (Tip Dönüşümü Hatası Düzeltildi)
// C2664 Hatası çözümü: (LPD3DXMATRIXSTACK*) cast işlemi
CreateMatrixStack(0, &ms_lpd3dMatStack);
if (ms_lpd3dMatStack)
ms_lpd3dMatStack->LoadIdentity();
// 10. Matrisleri DirectXMath ile İlklendir (SIMD Optimize)
// Birim Matris (Identity Matrix) oluştur
XMMATRIX matIdentity = XMMatrixIdentity();
// Matrisleri güvenli bir şekilde değişkenlere aktar (XMStoreFloat4x4)
// Not: ms_matIdentity değişkeninizin XMFLOAT4X4 veya uyumlu bir yapı olduğunu varsayıyoruz.
XMStoreFloat4x4((XMFLOAT4X4*)&ms_matIdentity, matIdentity);
XMStoreFloat4x4((XMFLOAT4X4*)&ms_matView, matIdentity);
XMStoreFloat4x4((XMFLOAT4X4*)&ms_matProj, matIdentity);
XMStoreFloat4x4((XMFLOAT4X4*)&ms_matInverseView, matIdentity);
XMStoreFloat4x4((XMFLOAT4X4*)&ms_matInverseViewYAxis, matIdentity);
// Ekran Dönüşüm Matrislerini Hesapla
// Screen0: Y eksenini ters çevir (UI Koordinat sistemi)
XMMATRIX matScreen0 = XMMatrixScaling(1.0f, -1.0f, 1.0f);
// Screen1: Öteleme (Translation)
XMMATRIX matScreen1 = XMMatrixTranslation(1.0f, 1.0f, 0.0f);
// Screen2: Ekran boyutuna göre ölçekleme
XMMATRIX matScreen2 = XMMatrixScaling((float)iHres / 2.0f, (float)iVres / 2.0f, 1.0f);
// Matrisleri kaydet
XMStoreFloat4x4((XMFLOAT4X4*)&ms_matScreen0, matScreen0);
XMStoreFloat4x4((XMFLOAT4X4*)&ms_matScreen1, matScreen1);
XMStoreFloat4x4((XMFLOAT4X4*)&ms_matScreen2, matScreen2);
// 11. Cihaz Varsayılanlarını Ayarla
InitDeviceDefault();
// Ekranı temizle (Siyah)
ms_lpd3dDevice->Clear(0L, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0xff000000, 1.0f, 0);
// Index ve Vertex Buffer Listelerini Oluştur
if (!__CreateDefaultIndexBufferList())
return false;
if (!__CreatePDTVertexBufferList())
return false;
// Texture Address Caps Kontrolü
GRAPHICS_CAPS_CAN_NOT_TEXTURE_ADDRESS_BORDER = (ms_d3dCaps.TextureAddressCaps & D3DPTADDRESSCAPS_BORDER) == 0;
// Paylaşılan Vertex Buffer (Modern C++ Smart Pointer kullanımı)
m_sharedVertexBuffer = std::make_unique<SharedVertexBuffer>(this);
return (iRet);
}
- Katılım
- 6 Şub 2025
- Konular
- 8
- Mesajlar
- 302
- Online süresi
- 19d 49m
- Reaksiyon Skoru
- 118
- Altın Konu
- 0
- Başarım Puanı
- 63
- MmoLira
- 5,234
- DevLira
- 3
Paylaşımda düşünceli olduğun için teşekkürler. DirectX gibi bir oyun motorunu akademik bir geçmişin yoksa veya oyun şirketinde çalışmıyorsan öğrenemezsin, öyle ki desteği kesilmiş Dx8 veya 9 u hiç öğrenemezsin, ayrıca şunun da altını çizerek söylüyorum böyle saçma sapan forumlarda dx8 ile yazılmış bir motoru 9 u geçirecek 1 tane allahın kuluda çıkamaz, öyle ex mex yapıp kimse gelmesin, 3-5 deneyimli kişiler ile 5-6 ayda ancak motor güncellenebilir...
hocam bu radikallık nereden geliyor bilmiyorum ama bu lafların çok keskin ve dediklerine asla katılmıyorum tam aksini ispatlı ve videolu şekilde buraya atabilirim. Bence burada çok fazla radikal konuşmuşsun c++ ve dx9 un konusu oldugu bir yerde bu kadar keskin net cümleyi kimse kuramaz , belki birileri seni birşeylere inandırmıştır diye düşünüyorum.
- directx kapalı bir bilgi değil , microsoftun sdk ları dökümantosyonları yıllardır halka açık.
- akademik geçmiş bir avantajdır ama asla asla şart ve ya zorunlu değildir. 18 yaşında bana diz çöktüren hevesli hobi tarzında bu işlerle uğraşan gençler gördüm ben.
- desteği kesilmiş olan birşeyin öğrenilemez diye bir kuralı da yok.
tamam karmaşıktır , zordur ama bu kimse öğrenemez düşüncesini aklına getirmemeli
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 0
- Görüntüleme
- 15
- Cevaplar
- 1
- Görüntüleme
- 20




