Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2012, 16:31   #1
Trinock
Пользователь
 
Регистрация: 19.09.2011
Сообщений: 21
По умолчанию Не получается сделать полноэкранный режим, DirectX9

Здравствуйте! Делаю все по книжке, но не получается перейти в полноэкранный режим: при запуске приложения оно сразу выключается. Что я делаю не так?
Код:
#include <Windows.h>

#include <d3d9.h>
#include <d3dx9.h>

#define WIDTH 512
#define HEIGHT 512

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE)
struct CUSTOMVERTEX{
	FLOAT x, y, z;
	DWORD color;
};

VOID *pVertices = NULL;
IDirect3DVertexBuffer9 *vBuf;

//Треугольник
CUSTOMVERTEX vertices[3] = {
	{150.0f, 50.0f, 0.5f, D3DCOLOR_XRGB(255, 0, 255)},
	{250.0f, 250.0f, 0.5f, D3DCOLOR_XRGB(0, 255, 0)},
	{50.0f, 250.0f, 0.5f, D3DCOLOR_XRGB(255, 255, 0)}
};

void Render(IDirect3DDevice9 *g_pd3dDevice, IDirect3DSurface9 *mySurface);

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdLine, INT nCmdShow)
{
	//Регистрация класса окна
	WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, WndProc, 0L, 0L, 
		GetModuleHandle(NULL), NULL, NULL, NULL, NULL, 
		TEXT("WindowClass"), NULL};
	RegisterClassEx(&wc);

	//Создание окна приложения
	HWND hWnd = CreateWindow(TEXT("WindowClass"), TEXT("Test"), WS_OVERLAPPEDWINDOW,
		100, 100, WIDTH, HEIGHT, GetDesktopWindow(), NULL, wc.hInstance, NULL);

	ShowWindow(hWnd, nCmdShow);

	//Создание объекта Direct3D 
	IDirect3D9 *g_pD3D = NULL;
	if(NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION))){
		return E_FAIL;
	}

	//Указатель на Direct3Ddevice
	IDirect3DDevice9 *g_pd3dDevice = NULL;

	D3DPRESENT_PARAMETERS d3dpp;
	ZeroMemory(&d3dpp, sizeof(d3dpp));
	d3dpp.Windowed = FALSE;
	d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
	d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
	d3dpp.EnableAutoDepthStencil = TRUE;
	d3dpp.AutoDepthStencilFormat = D3DFMT_D16;

	//Создать Direct3DDevice
	if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING,
		&d3dpp, &g_pd3dDevice))){
			return E_FAIL;
	}
	
	//Создаем поверхность для рисования
	D3DXIMAGE_INFO info;
	D3DXGetImageInfoFromFile(L"C:\lab.jpg", &info);
	IDirect3DSurface9 *mySurface = NULL;
	g_pd3dDevice->CreateOffscreenPlainSurface(WIDTH, HEIGHT, info.Format,D3DPOOL_SYSTEMMEM, &mySurface, NULL);  
	D3DXLoadSurfaceFromFile(mySurface, NULL, NULL, L"C:\lab.jpg", NULL, D3DX_FILTER_NONE, 0, NULL); 

	//Создаем буффер вершин
	g_pd3dDevice->CreateVertexBuffer(sizeof(CUSTOMVERTEX)*3, 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_SYSTEMMEM,
		&vBuf, NULL);
	vBuf->Lock(0, sizeof(vertices), (void**)&pVertices, 0); 
	memcpy(pVertices, vertices, sizeof(vertices));
	vBuf->Unlock();

	MSG msg;
	PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE);
	while(msg.message != WM_QUIT){
		if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
			//Обработать и уничтожить сообщение
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
		else{
			//Если нет сообщений для обработки, то выполняем код игры
			Render(g_pd3dDevice, mySurface);
		}
	}

	g_pD3D->Release();
	g_pd3dDevice->Release();
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
        case WM_CREATE:
            break;

		/*case WM_PAINT:
			break;*/

        case WM_DESTROY:
			PostQuitMessage(0);
			break;

		default:
			 return DefWindowProc(hWnd, uMsg, wParam, lParam);
    }
    return 0;
}

void Render(IDirect3DDevice9 *g_pd3dDevice, IDirect3DSurface9 *mySurface)
{
	g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 
		D3DCOLOR_XRGB(0, 0, 255), 1.0f, 0);

	D3DXMATRIX g_Transform;
	D3DXMatrixIdentity(&g_Transform);
	D3DXMatrixTranslation(&g_Transform, 0.0f, 0.0f, 0.0f);

	g_pd3dDevice->SetTransform(D3DTS_WORLD, &g_Transform);

	//Создаем матрицу камеры
	D3DXMATRIX g_View;
	D3DXVECTOR3 Eye(0.0f, -5.0f, 0.0f);
	D3DXVECTOR3 LookAt(0.0f, -5.0f, 0.0f);
	D3DXVECTOR3 Up(0.0f, 1.0f, 0.0f);

	D3DXMatrixLookAtLH(&g_View, &Eye, &LookAt, &Up);
	g_pd3dDevice->SetTransform(D3DTS_VIEW, &g_View);

	//Создаем матрицу проекций
	D3DXMATRIX Projection;
	FLOAT FOV = D3DX_PI / 4;
	FLOAT Aspect = WIDTH/HEIGHT;

	D3DXMatrixPerspectiveFovLH(&Projection, FOV, Aspect, 1.0f, 500.0f);
	g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &Projection);


	//Начать сцену
	if(SUCCEEDED(g_pd3dDevice->BeginScene())){
		//Рисуем что-нибудь 
		/*IDirect3DSurface9 *BackBuffer = NULL;
		g_pd3dDevice->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &BackBuffer);
		g_pd3dDevice->UpdateSurface(mySurface, NULL, BackBuffer, NULL);*/
		g_pd3dDevice->SetStreamSource(0, vBuf, 0, sizeof(CUSTOMVERTEX));
		g_pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
		g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);

		//Заканчиваем сцену
		g_pd3dDevice->EndScene();
	}

	//Представить содержимое back-буфера на экране
	g_pd3dDevice->Present(NULL, NULL, NULL, NULL);
}
Trinock вне форума Ответить с цитированием
Старый 30.01.2012, 16:55   #2
Warn
Форумчанин
 
Аватар для Warn
 
Регистрация: 03.11.2011
Сообщений: 230
По умолчанию

см пункт. Changing to Fullscreen Mode
Warn вне форума Ответить с цитированием
Старый 30.01.2012, 20:08   #3
Trinock
Пользователь
 
Регистрация: 19.09.2011
Сообщений: 21
По умолчанию

Спасибо, четко и понятно!
Trinock вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
полноэкранный режим candalik Помощь студентам 4 17.12.2010 13:32
Полноэкранный режим Devoto Общие вопросы Delphi 4 05.12.2008 13:42
Полноэкранный режим Кронос Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 26.08.2007 12:17
Полноэкранный режим mishel Общие вопросы Delphi 2 26.01.2007 02:31