DirectX - Text Draw.

0

Witam mam pytanko - w jaki sposób miałbym zmodyfikować tak aby po przyłączeniu dllki do ekranu d3d ekran nie migał wtedy kiedy renderuje się tekst.

Tutaj zamieszczam kodzik


#include <windows.h>
#include <process.h>
#include <string>
#include <d3d9.h>
#include <d3dx9.h>
#include <time.h>

IDirect3D9              *pD3D = 0;
IDirect3DDevice9        *pD3DDevice = 0;
ID3DXFont               *pD3DFont       = 0;
HRESULT hr;
HWND hWnd;

void __cdecl MainTheard(void * Args);
int initD3D(HWND hWnd);

BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) 
{
      if(fdwReason==DLL_PROCESS_ATTACH) 
      { 
         _beginthread( MainTheard, 0, NULL );                                                             
        // MessageBox(0,TEXT("Cheat zainjectowany!"),TEXT("Done"),0);                                                                 
      }

 return TRUE;
}

void __cdecl MainTheard(void * Args){

    hWnd = FindWindow(NULL, TEXT("Test D3D9 window"));
    if(!hWnd){MessageBox(0,TEXT("pOSZLo"),TEXT("Done"),0);}
    initD3D(hWnd);

        hr=D3DXCreateFont(pD3DDevice, //D3D Device
            30, //Wielkość czcionki
            0,  //Szerokość czcionki
            FW_NORMAL,          
            1,              
            false,                  
            DEFAULT_CHARSET,        
            OUT_DEFAULT_PRECIS,     
            DEFAULT_QUALITY, //Jakość czcionki
            DEFAULT_PITCH|FF_DONTCARE,
            L"Arial", //Nazwa czcionki 
            &pD3DFont); // zdefiniowana "nowa" czcionka

        D3DCOLOR fontColor = D3DCOLOR_ARGB(255,0,0,255); // Kolor tekstu  

        RECT rct;
        rct.top        = 9;
        rct.left       = 30;
        rct.bottom     = 110;
        rct.right      = 400;
        pD3DDevice->BeginScene();
    for(;;){

        //pD3DDevice->BeginScene();
        //pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_ARGB(0,0,0,0), 1.0f, 0);

        pD3DFont->DrawTextA(NULL, "Blabla test", -1, &rct, 0, fontColor);
        //pD3DFont->Release();

        pD3DDevice->EndScene();
        pD3DDevice->Present(NULL, NULL, NULL, NULL);

        //}

    }

}

int initD3D(HWND hwnd)
{
    pD3D = Direct3DCreate9(D3D_SDK_VERSION);
    if (pD3D == NULL)
    {
        MessageBox(hwnd, TEXT("An Error has been occured when creating the ChatBox\n the error may come from your DirectX\n try to reinstall it or re-try to open again."), TEXT("Error"), MB_OK);
        return 0;
    }
    D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory(&d3dpp, sizeof(d3dpp));
    d3dpp.Windowed = TRUE;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
    pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &pD3DDevice);
    if (pD3DDevice == NULL)
    {
        MessageBox(hwnd, TEXT("An Error has been occured when creating the ChatBox\n the error may come from your DirectX\n try to reinstall it or re-try to open again."), TEXT("Error"), MB_OK);
        return 0;
    }
    srand(time(NULL));
    return 1;

}
0

Dobra panowie po problemie. W skrócie 'zaje*****' źle rozumiałem to co chciałem osiągnąć. Trzeba było podpiąć się pod istniejący d3ddevice pod endscene a nie tworzyć nowy i renderować dwa na raz w 1 oknie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0