romegames 1
romegames
Krutzo 1
Krutzo
shrpnl 1
shrpnl
Best Studio 1
Best Studio
D 1
delimuratt
Aliyldrim 1
Aliyldrim
Mt2Hizmet 1
Mt2Hizmet
noisiv 1
noisiv
Manwe Work 1
Manwe Work
melankolıa18 1
melankolıa18
Agora Metin2 1
Agora Metin2
Cannn6161 1
Cannn6161
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

DirectXMath DirectXTex DirectXTK

  • Konuyu başlatan Konuyu başlatan apikomt2
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 26
  • Görüntüleme Görüntüleme 1K

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!

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...
cloude gibi yapay zekayı ücretli alınırsa yazılabilir çünkü.
yapay zekanın ücretli verisyonlarında 50 dosya bazı yapay zekalar dosyanın tamamını okuyup kod yazabiliyor.
 
Paylaşım için teşekkürler eline sağlık.
 
paylaşım için saol
 
grpdevice.cpp
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);
}
 
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)

Geri
Üst