Сворачиваю программу ALT + TAB. Открываю снова и меши исчезают.
Код начала сцены.
Код
void D3DstartRendering(){
if(Device->TestCooperativeLevel() == D3DERR_DEVICENOTRESET && Device != NULL) //Востанавливаем устройство при потере
Device->Reset(&Param);
if (Device != NULL) {
Device->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
ClearColor, 1.0f, 0);
// Начало сцены, здесь происходит прорисовка сцены
Device->BeginScene();
}
}
Код
Класс для работы с мешами.
#include "stdafx.h"
#include "Xmesh.h"
using namespace System;
using namespace System::Runtime::InteropServices;
namespace GearX {
Mesh MyMesh;
LPDIRECT3DDEVICE9 device;
Xmesh::Xmesh(String^ filename)
{
l_FileName = filename;
}
void Xmesh::Xload(D3D^ d3d) {
D3DXLoadMeshFromXA((char*)Marshal::StringToHGlobalAnsi(l_FileName).ToPointer(), D3DXMESH_SYSTEMMEM,
*d3d->D3DgetDevice(), NULL, &MyMesh.pMeshBuffer, NULL,
&MyMesh.dwNumber, &MyMesh.pMesh);
// Мы должны извлечь материальные свойства и названия{имена} структуры от
// pD3DXMtrlBuffer
D3DXMATERIAL* D3DXMeshMaterials = (D3DXMATERIAL *)MyMesh.pMeshBuffer->GetBufferPointer();
MyMesh.pMeshMaterials = new D3DMATERIAL9[MyMesh.dwNumber];
MyMesh.pMeshTextura = new LPDIRECT3DTEXTURE9[MyMesh.dwNumber];
for (DWORD i = 0; i<MyMesh.dwNumber; i++)
{
// Копируем материал
MyMesh.pMeshMaterials[i] = D3DXMeshMaterials[i].MatD3D;
// Установить окружающего свет
MyMesh.pMeshMaterials[i].Ambient = MyMesh.pMeshMaterials[i].Diffuse;
// Загружаем текстуру
if (FAILED(D3DXCreateTextureFromFileA(*d3d->D3DgetDevice(),
D3DXMeshMaterials[i].pTextureFilename,
&MyMesh.pMeshTextura[i])))
MyMesh.pMeshTextura[i] = NULL;
}
// Уничтожаем материальный буфер
MyMesh.pMeshBuffer->Release();
device = *d3d->D3DgetDevice();
}
void Xmesh::Xdraw()
{
for (DWORD i = 0; i<MyMesh.dwNumber; i++)
{
// Устанавливаем материал и текстуру
device->SetMaterial(&MyMesh.pMeshMaterials[i]);
device->SetTexture(0, MyMesh.pMeshTextura[i]);
// Рисуем Меш
MyMesh.pMesh->DrawSubset(i);
}
}
}
В чём причина ?