[SOLVED] CEGUI with DX9

For help with general CEGUI usage:
- Questions about the usage of CEGUI and its features, if not explained in the documentation.
- Problems with the CMAKE configuration or problems occuring during the build process/compilation.
- Errors or unexpected behaviour.

Moderators: CEGUI MVP, CEGUI Team

JonLord
Just popping in
Just popping in
Posts: 9
Joined: Wed Nov 06, 2013 03:11

[SOLVED] CEGUI with DX9

Postby JonLord » Thu Mar 06, 2014 14:08

i'm trying render the gui on direct device 9. The CEGUI render is okey!, but when i draw the 3d terrain(with texture), it don't show!, however, a simple figure (a cube) draw successful.

Photo of rendering without cegui:
Image

With CEGUI:
Image

The init function:

Code: Select all

cGui::cGui(LPDIRECT3DDEVICE9 d3ddev)
{
   CEGUI::Direct3D9Renderer* myRenderer = NULL;
   
   try{
      myRenderer = &CEGUI::Direct3D9Renderer::bootstrapSystem(d3ddev);
   }catch(CEGUI::Exception &e){
      std::stringstream s;
      s << "File :" << e.getFileName().c_str() << std::endl;
      s << "Message :" << e.getMessage().c_str() << std::endl;

      mApp->logError(s.str());
   }

   set_CEGUI_paths() ;

   SchemeManager::getSingleton().create("TaharezLook.scheme") ;
   System::getSingleton().setDefaultMouseCursor("TaharezLook", "MouseArrow" ) ;

   create_gui(WindowManager::getSingleton());
   return ;
}


The render function:

Code: Select all

   d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
    d3ddev->Clear(0, NULL, D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);

    d3ddev->BeginScene();
      mTime->refresh();
      mInput->refresh();
      mCamera->getCamera(&cam);
      mCamera->update();

      mTerrain->render();

            v.X = 4.0f;
            v.Y = 1.0f;
            v.Z = 4.0f;

            d3ddev->SetTexture(0, NULL);
            d3ddev->SetFVF(LINEFVF);
            
            d3ddev->SetStreamSource(0, v_cube, 0, sizeof(LINEVERTEX));
            d3ddev->SetIndices(i_cube);

            D3DXMATRIX matWorld,matScale,matOut;
            D3DXMatrixIdentity(&matWorld);
            D3DXMatrixTranslation(&matWorld, v.X, v.Y, v.Z);
            D3DXMatrixScaling(&matScale, 0.2f,0.2f,0.2f);

            D3DXMatrixMultiply(&matOut, &matScale, &matWorld);
            d3ddev->SetTransform(D3DTS_WORLD, &matOut);

            for (int i = 0; i < 6; i++) {
               d3ddev->DrawIndexedPrimitive(
                     D3DPT_TRIANGLESTRIP,
                     0,
                     0,
                     8,
                     i*4,
                     2);
            }

            
            D3DXMatrixIdentity(&matWorld);
            d3ddev->SetTransform(D3DTS_WORLD, &matWorld);
            
      mGui->render(); //LOOK : comment this line when i want render the 3d terrain.
    d3ddev->EndScene();

    d3ddev->Present(NULL, NULL, NULL, NULL);

User avatar
Ident
CEGUI Team
Posts: 1998
Joined: Sat Oct 31, 2009 13:57
Location: Austria

Re: CEGUI with DX9

Postby Ident » Thu Mar 06, 2014 14:47

set the texture,the shader program, and all other states to the correct options every time you start to render your stuff, after cegui has been rendered. CEGUI might change certain global states, you must reset them to whatever you need.
CrazyEddie: "I don't like GUIs"

JonLord
Just popping in
Just popping in
Posts: 9
Joined: Wed Nov 06, 2013 03:11

Re: CEGUI with DX9

Postby JonLord » Thu Mar 06, 2014 15:51

thanks , i suppose that! so I made a backup of each renderstates that CEGUI modifies CEGUI but still no go :(

The functions that get and set the renderstates.

Code: Select all

void cApp::getRenderStates(){
    d3ddev->GetRenderState(D3DRS_LIGHTING, (DWORD*)&m_saveLighting);
    d3ddev->GetRenderState(D3DRS_FOGENABLE, (DWORD*)&m_saveFogenable);
    d3ddev->GetRenderState(D3DRS_ZENABLE, (DWORD*)&m_saveZenable);
    d3ddev->GetRenderState(D3DRS_ALPHATESTENABLE, (DWORD*)&m_saveAlphatestenable);
    d3ddev->GetRenderState(D3DRS_CULLMODE, (DWORD*)&m_saveCullmode);
    d3ddev->GetRenderState(D3DRS_FILLMODE, (DWORD*)&m_saveFillmode);
    d3ddev->GetRenderState(D3DRS_SCISSORTESTENABLE, (DWORD*)&m_saveScissortestenable);
    d3ddev->GetRenderState(D3DRS_ZWRITEENABLE, (DWORD*)&m_saveZwriteenable);

    d3ddev->GetSamplerState(0, D3DSAMP_ADDRESSU, (DWORD*)&m_saveAddressu);
    d3ddev->GetSamplerState(0, D3DSAMP_ADDRESSV, (DWORD*)&m_saveAddressv);

    // setup colour calculations
    d3ddev->GetTextureStageState(0, D3DTSS_COLORARG1, (DWORD*)&m_saveColorarg1);
    d3ddev->GetTextureStageState(0, D3DTSS_COLORARG2, (DWORD*)&m_saveColorarg2);
    d3ddev->GetTextureStageState(0, D3DTSS_COLOROP, (DWORD*)&m_saveColorop);


    d3ddev->GetTextureStageState(0, D3DTSS_ALPHAARG1, (DWORD*)&m_saveAlphaarg1);
    d3ddev->GetTextureStageState(0, D3DTSS_ALPHAARG2, (DWORD*)&m_saveAlphaarg2);
    d3ddev->GetTextureStageState(0, D3DTSS_ALPHAOP, (DWORD*)&m_saveAlphaop);


    d3ddev->GetSamplerState(0, D3DSAMP_MINFILTER, (DWORD*)&m_saveMinfilter);
    d3ddev->GetSamplerState(0, D3DSAMP_MAGFILTER, (DWORD*)&m_saveMagfilter);


    d3ddev->GetTextureStageState(1, D3DTSS_COLOROP, (DWORD*)&m_saveColorop1);

    d3ddev->GetRenderState(D3DRS_ALPHABLENDENABLE, (DWORD*)&m_saveAlphablendenable);
   
}

void cApp::setRenderStates(){
    d3ddev->SetRenderState(D3DRS_LIGHTING, static_cast<DWORD>(m_saveLighting));
    d3ddev->SetRenderState(D3DRS_FOGENABLE, static_cast<DWORD>(m_saveFogenable));
    d3ddev->SetRenderState(D3DRS_ZENABLE, static_cast<DWORD>(m_saveZenable));
    d3ddev->SetRenderState(D3DRS_ALPHATESTENABLE, static_cast<DWORD>(m_saveAlphatestenable));
    d3ddev->SetRenderState(D3DRS_CULLMODE, static_cast<DWORD>(m_saveCullmode));
    d3ddev->SetRenderState(D3DRS_FILLMODE, static_cast<DWORD>(m_saveFillmode));
    d3ddev->SetRenderState(D3DRS_SCISSORTESTENABLE, static_cast<DWORD>(m_saveScissortestenable));
    d3ddev->SetRenderState(D3DRS_ZWRITEENABLE, static_cast<DWORD>(m_saveZwriteenable));

    d3ddev->SetSamplerState(0, D3DSAMP_ADDRESSU, static_cast<DWORD>(m_saveAddressu));
    d3ddev->SetSamplerState(0, D3DSAMP_ADDRESSV, static_cast<DWORD>(m_saveAddressv));

    d3ddev->SetTextureStageState(0, D3DTSS_COLORARG1, static_cast<DWORD>(m_saveColorarg1));
    d3ddev->SetTextureStageState(0, D3DTSS_COLORARG2, static_cast<DWORD>(m_saveColorarg2));
    d3ddev->SetTextureStageState(0, D3DTSS_COLOROP, static_cast<DWORD>(m_saveColorop));

    d3ddev->SetTextureStageState(0, D3DTSS_ALPHAARG1, static_cast<DWORD>(m_saveAlphaarg1));
    d3ddev->SetTextureStageState(0, D3DTSS_ALPHAARG2, static_cast<DWORD>(m_saveAlphaarg2));
    d3ddev->SetTextureStageState(0, D3DTSS_ALPHAOP, static_cast<DWORD>(m_saveAlphaop));

    d3ddev->SetSamplerState(0, D3DSAMP_MINFILTER, static_cast<DWORD>(m_saveMinfilter));
    d3ddev->SetSamplerState(0, D3DSAMP_MAGFILTER, static_cast<DWORD>(m_saveMagfilter));

    d3ddev->SetTextureStageState(1, D3DTSS_COLOROP, static_cast<DWORD>(m_saveColorop1));

    d3ddev->SetRenderState(D3DRS_ALPHABLENDENABLE, static_cast<DWORD>(m_saveAlphablendenable));
}


The renderterrain's function

Code: Select all

void cTerrain::render(){
   d3ddev->SetFVF(TERRAINFVF);
   d3ddev->SetStreamSource( 0, v_terrain,0, sizeof(TERRAINVERTEX) );
   d3ddev->SetIndices(i_terrain);
   d3ddev->SetTexture(0, m_texture);

   d3ddev->DrawIndexedPrimitive(D3DPT_TRIANGLESTRIP, 0, 0, nv_terrain, 0, np_terrain);
}


I make the backup after my settings.

Code: Select all

d3d->CreateDevice(D3DADAPTER_DEFAULT,
                      D3DDEVTYPE_HAL,
                      hWnd,
                      D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                      &d3dpp,
                      &d3ddev);


    d3ddev->SetRenderState(D3DRS_LIGHTING, FALSE);    // turn on the 3D lighting
    d3ddev->SetRenderState(D3DRS_ZENABLE, TRUE);
    //d3ddev->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
    //d3ddev->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);
   
   getRenderStates();


And a set the backup before render terrain.

Code: Select all

    d3ddev->BeginScene();
      mTime->refresh();
      mInput->refresh();
      mCamera->getCamera(&cam);
      mCamera->update();

      setRenderStates();
      mTerrain->render();

User avatar
Ident
CEGUI Team
Posts: 1998
Joined: Sat Oct 31, 2009 13:57
Location: Austria

Re: CEGUI with DX9

Postby Ident » Thu Mar 06, 2014 15:56

Should the box be rotated the same in both pictures because in the 2nd it has a different rotation so maybe something about the model matrix is wrong?
Also you could try to change the clear colour to something like red. If you then notice that your terrain is rendered black we can be sure it has to do with the texture..
CrazyEddie: "I don't like GUIs"

JonLord
Just popping in
Just popping in
Posts: 9
Joined: Wed Nov 06, 2013 03:11

Re: CEGUI with DX9

Postby JonLord » Thu Mar 06, 2014 16:09

THANKSSSSS. Now it's running!!

The world matrix was corrupt :) i loaded identity and the problem dissapeared :D

A image
Image

User avatar
Ident
CEGUI Team
Posts: 1998
Joined: Sat Oct 31, 2009 13:57
Location: Austria

Re: CEGUI with DX9

Postby Ident » Thu Mar 06, 2014 16:14

Then good that my eagle eyes spotted that suble rotation 8)

...those years of studying computer graphics and looking at tons of anti-aliased or non anti-aliased renderings finally paid off. Or something like that..
CrazyEddie: "I don't like GUIs"

JonLord
Just popping in
Just popping in
Posts: 9
Joined: Wed Nov 06, 2013 03:11

Re: CEGUI with DX9

Postby JonLord » Thu Mar 06, 2014 16:27

i dont understand english very good, but thanks, i hope that this thread result be a help for newbies people like me!

pd: i neither speak english very good jaja


Return to “Help”

Who is online

Users browsing this forum: Bing [Bot] and 17 guests