Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

HEELP Direct3D9 не создаётся устройство

75K
19 октября 2011 года
Danich1998
3 / / 19.10.2011
Вот блин бзаю DX и написал инициализацию

когда было всё в 1 файле то работало перенёс по нескольким но при запуске _d3ddev = NULL

чё за :confused:

[CODE=Main.cpp]
#include "IncludeFiles.h"
#include "ConstAndVars.h"
#include "D3D.h"


LRESULT _stdcall WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
void RAD();

int _stdcall WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
WNDCLASS wc;
wc.cbClsExtra = NULL;
wc.cbWndExtra = NULL;
wc.hbrBackground = (HBRUSH)(GRAY_BRUSH);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.lpszClassName = CLASSNAME;
wc.hInstance = hInstance;
wc.lpszMenuName = NULL;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC)WndProc;

RegisterClass(&wc);

hwnd = CreateWindow(CLASSNAME, L"Direct3D lesson 1", WS_EX_TOPMOST | WS_VISIBLE, 0,
0, WIDTH,HEIGHT, NULL, NULL, hInstance, NULL);

ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);

if(!d3d::InitD3D(hwnd, true, _d3ddev, _d3d, HEIGHT, WIDTH))
{
MessageBox(hwnd, L"Ошибка инициализации Direct3D", L"Ошибка", MB_OK);
exit(0);
}

ZeroMemory(&msg, sizeof(MSG));
while(msg.message != WM_QUIT)
{
if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}else
{
d3d::Rendering(_d3ddev);
}
}
RAD();
return 0;
}


LRESULT _stdcall WndProc(HWND hwnd,
UINT msg,
WPARAM wParam,
LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
PostQuitMessage(0);
case WM_KEYDOWN:
if(wParam == VK_ESCAPE)//при нажатии на escape выход
{
RAD();
DestroyWindow(hwnd);
}
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}

void RAD() //ето как бы ReleaseAndDelete
{
d3d::Release(_d3d);
d3d::Release(_d3ddev);
}
[/CODE]
[CODE=D3D.h]
#ifndef _D3D_H_

#define _D3D_H_

#include "IncludeFiles.h"

namespace d3d
{
bool InitD3D(HWND hwnd, bool windowed, IDirect3DDevice9* _d3ddev,
IDirect3D9* _d3d, int HEIGHT, int WIDTH);
void Rendering(IDirect3DDevice9* _d3ddev);

template<class TEMPLATE>
void Release(TEMPLATE t)
{
if(t)
{
t->Release();
t = NULL;
}
}

template<class TEMPLATE>
void Delete(TEMPLATE t)
{
if(t)
{
delete [] t;
t = NULL;
}
}
}

#endif
[/CODE]
[CODE=D3D.cpp]
#include "D3D.h"

bool d3d::InitD3D(HWND hwnd, bool windowed, IDirect3DDevice9* _d3ddev, IDirect3D9* _d3d, int HEIGHT, int WIDTH)
{
if(NULL ==(_d3d = Direct3DCreate9(D3D_SDK_VERSION)))
return false;
D3DPRESENT_PARAMETERS _d3dpp;

_d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8;
_d3dpp.BackBufferCount = 1;
_d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
_d3dpp.BackBufferHeight = (UINT)HEIGHT;
_d3dpp.BackBufferWidth = (UINT)WIDTH;
_d3dpp.EnableAutoDepthStencil = true;
_d3dpp.Flags = NULL;
_d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
_d3dpp.hDeviceWindow = hwnd;
_d3dpp.MultiSampleQuality = NULL;
_d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
_d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
_d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
_d3dpp.Windowed = windowed;

if(FAILED(_d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&_d3dpp, &_d3ddev)))
return false;
if(_d3ddev)
return false;
return true;
}


void d3d::Rendering(IDirect3DDevice9* _d3ddev)
{
if(!_d3ddev)
return;
_d3ddev->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0x00000000, 1.0f, 0);
_d3ddev->Present(0, 0, 0, 0);
}
[/CODE]

[CODE=ConstAndVars.h]
#ifndef _CONSTANDVARS_H_
#define _CONSTANDVARS_H_

#include "includeFiles.h"

#define CLASSNAME "wndclass"
#define WIDTH 800
#define HEIGHT 600

HWND hwnd;
MSG msg;

IDirect3D9* _d3d;
IDirect3DDevice9* _d3ddev;

#endif
[/CODE]

[CODE=IncludeFiles.h]
#ifndef _INCLUDEFILES_H_

#define _INCLUDEFILES_H_


#include <windows.h>
#include <d3d9.h>

#endif
[/CODE]

я даже пробовал использовать флаг D3DCREATE_SOFTWARE_VERTEXPROCESSING
эффекта NULL
14
19 октября 2011 года
Phodopus
3.3K / / 19.06.2008
ну во-первых переменная объявлена в заголовочном файле
во вторых передана по значению
75K
20 октября 2011 года
Danich1998
3 / / 19.10.2011
а как её не передавать то? если подключать в D3D.h то вылазят ошибки LNK2005 хотя всё вроде норм #define ами всё сделано в Main.cpp всё отключено?
277
20 октября 2011 года
arrjj
1.7K / / 26.01.2011
bool InitD3D(HWND hwnd, bool windowed, IDirect3DDevice9** _d3ddev,IDirect3D9** _d3d, int HEIGHT, int WIDTH);

if(!d3d::InitD3D(hwnd, true, &_d3ddev, &_d3d, HEIGHT, WIDTH))

ну и там D3D.cpp немного поправить.
75K
20 октября 2011 года
Danich1998
3 / / 19.10.2011
Спасибо огромнейшее но я уже всё решил с extern повозился и всё
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог