Форум программистов, компьютерный форум, киберфорум
Наши страницы
DirectX
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
GhostMan
Заблокирован
1

Программа с DirectX виснет при отладке с сообщением...

06.11.2011, 13:07. Просмотров 886. Ответов 13
Метки нет (Все метки)

Здравствуйте! Программ компилируется без ошибок, и сам *.exe запускается без проблем, но во время запуска программы из Visual Studio 2010 в режиме отладки, открывается на весь экран и виснет на черном фоне((
Visual Studio 2010 выдает ошибку:
The variable "msg" is being without initialize
Вот сама программа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>
#include <d3d9.h>
#include <d3dx9.h>
#include <MMSystem.h>
 
#pragma comment (lib, "d3d9.lib")
#pragma comment (lib, "d3dx9.lib")
#pragma comment (lib, "Winmm.lib")
// Global variables
LPDIRECT3D9 pDirect3D                    = NULL;
LPDIRECT3DDEVICE9  pDirect3DDevice       = NULL;
LPDIRECT3DVERTEXBUFFER9  pBufferVershin  = NULL;
LPDIRECT3DINDEXBUFFER9   pBufferIndex    = NULL;
LPDIRECT3DTEXTURE9       pTextura001;
 
struct CUSTOMVERTEX {
    FLOAT x, y, z;
    FLOAT nx, ny, nz;
    FLOAT tu, tv;
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1)
 
// The main window class name.
static TCHAR szWindowClass[] = _T("win32app");
 
// The string that appears in the application's title bar.
static TCHAR szTitle[] = _T("3D program by DirectX");
 
HINSTANCE hInst;
 
// Forward declarations of functions included in this code module:
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
//Initial DirectX
HRESULT InitialDirect3D (HWND hwnd) {
    if (NULL == (pDirect3D = Direct3DCreate9(D3D_SDK_VERSION)))
        return E_FAIL;
 
    D3DDISPLAYMODE Display;
 
    if (FAILED (pDirect3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &Display)))
        return E_FAIL;
 
    D3DPRESENT_PARAMETERS Direct3DParametr;
 
 
    ZeroMemory(&Direct3DParametr, sizeof (Direct3DParametr));
 
    Direct3DParametr.Windowed = false;
    Direct3DParametr.SwapEffect = D3DSWAPEFFECT_DISCARD;
    Direct3DParametr.BackBufferFormat = Display.Format;
    Direct3DParametr.EnableAutoDepthStencil = TRUE;
    Direct3DParametr.AutoDepthStencilFormat = D3DFMT_D16;
    Direct3DParametr.BackBufferWidth = GetSystemMetrics(SM_CXSCREEN);
    Direct3DParametr.BackBufferHeight = GetSystemMetrics(SM_CYSCREEN);
    Direct3DParametr.BackBufferCount = 3;
    Direct3DParametr.FullScreen_RefreshRateInHz = Display.RefreshRate;
 
    if (FAILED (pDirect3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
        hwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING,
        &Direct3DParametr, &pDirect3DDevice)))
        return E_FAIL;
 
    pDirect3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
    //Light off
    pDirect3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
    pDirect3DDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
 
    return S_OK;
}
 
//Buffer of vertexes
HRESULT InitialObject() {
    CUSTOMVERTEX Vershin[] =
    {
        {1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f}, //A
        {1.0f, 1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f},//B
        {-1.0f, 1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f}, //C
        {-1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f},  //D
 
        {-1.0f, -1.0f, -1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f},//A1
        {-1.0f, 1.0f, -1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f}, //B1
        {-1.0f, 1.0f, 1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f},  //C1
        {-1.0f, -1.0f, 1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f}, //D1
 
        {-1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f},  //A2
        {-1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f}, //B2
        {1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f},  //C2
        {1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f},   //D2
 
        {1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f}, //A3
        {1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f},  //B3
        {1.0f, 1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f},   //C3
        {1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f},  //D3
 
        {1.0f, -1.0f, -1.0f, 0.0f, -1.0f, 0.0f, 1.0f, 1.0f},  //A4
        {-1.0f, -1.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f}, //B4
        {-1.0f, -1.0f, 1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f},//C4
        {1.0f, -1.0f, 1.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f}, //D4
 
        {1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f},  //A5
        {-1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f}, //B5
        {-1.0f, 1.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f},//C5
        {1.0f, 1.0f, -1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f}, //D5
    };
 
    const unsigned short Index[] = {
        0,1,2,        2,3,0,
        4,5,6,        6,7,4,
        8,9,10,       10,11,8,
        12,13,14,     14,15,12,
        16,17,18,     18,19,16,
        20,21,22,     22,23,20,
    };
 
    WCHAR wchr[] = L"texture.jpg";
    if (FAILED(D3DXCreateTextureFromFile(pDirect3DDevice,wchr, &pTextura001)))
        return E_FAIL;
 
    if (FAILED(pDirect3DDevice->CreateVertexBuffer(
        36*sizeof(CUSTOMVERTEX), 0, D3DFVF_CUSTOMVERTEX,
        D3DPOOL_DEFAULT, &pBufferVershin, NULL)))
        return E_FAIL;
 
    VOID* pBV;
 
    if (FAILED (pBufferVershin->Lock(0, sizeof(Vershin), (void**)&pBV, 0)))
        return E_FAIL;
 
    memcpy(pBV, Vershin, sizeof(Vershin));
    pBufferVershin->Unlock();
 
    pDirect3DDevice->CreateIndexBuffer(36 * sizeof(Index), 0,
        D3DFMT_INDEX16, D3DPOOL_DEFAULT, &pBufferIndex, NULL);
 
    VOID* pBI;
    pBufferIndex->Lock(0, sizeof(Index), (void**)&pBI, 0);
    memcpy(pBI, Index, sizeof(Index));
    pBufferIndex->Unlock();
    return S_OK;
}
 
//World matrix, View matrix, Projection matrix
VOID Matrix() {
    D3DXMATRIX MatrixWorld, MatrixWorldX, MatrixWorldY;
    D3DXMATRIX MatrixView;
    D3DXMATRIX MatrixProjection;
 
    //MatrixWorld
    UINT Time = timeGetTime() % 7000;
    FLOAT Angle = Time * (2.0f * D3DX_PI)/7000.0f;
    D3DXMatrixRotationX(&MatrixWorldX, Angle);
    D3DXMatrixRotationY(&MatrixWorldY, Angle);
    D3DXMatrixMultiply(&MatrixWorld, &MatrixWorldX, &MatrixWorldY);
    pDirect3DDevice->SetTransform(D3DTS_WORLD, &MatrixWorld);
 
    //MatrixView
    D3DXMatrixLookAtLH(&MatrixView, &D3DXVECTOR3(0.0f, 0.0f, -8.0f),
        &D3DXVECTOR3(0.0f, 0.0f, 0.0f),
        &D3DXVECTOR3(0.0f, 1.0f, 0.0f));
    pDirect3DDevice->SetTransform(D3DTS_VIEW, &MatrixView);
 
    //MatrixProjection
    D3DXMatrixPerspectiveFovLH(&MatrixProjection,
        D3DX_PI/4, 1.0f, 1.0f, 100.0f);
    pDirect3DDevice->SetTransform(D3DTS_PROJECTION, &MatrixProjection);
}
 
//Light & Material
VOID LightMaterial() {
    D3DMATERIAL9 Material;
    D3DLIGHT9    Light;
    //Set material
    ZeroMemory(&Material, sizeof(D3DMATERIAL9));
    Material.Diffuse.r = Material.Ambient.r = 1.0f;
    Material.Diffuse.g = Material.Ambient.g = 1.0f;
    Material.Diffuse.b = Material.Ambient.b = 0.0f;
    Material.Diffuse.a = Material.Ambient.a = 1.0f;
    pDirect3DDevice->SetMaterial(&Material);
    D3DXVECTOR3 VectorDir;
    //Set light
    ZeroMemory(&Light, sizeof(D3DLIGHT9));
    Light.Type = D3DLIGHT_DIRECTIONAL;
    Light.Diffuse.r = 1.0f;
    Light.Diffuse.g = 1.0f;
    Light.Diffuse.b = 1.0f;
    Light.Range     = 1000.0f;
    //Set normal
    VectorDir = D3DXVECTOR3(0.0f, 0.0f, 1.0f);
    D3DXVec3Normalize((D3DXVECTOR3*)&Light.Direction, &VectorDir);
 
    pDirect3DDevice->SetLight(0, &Light);
    pDirect3DDevice->LightEnable(0, TRUE);
 
    pDirect3DDevice->SetRenderState(D3DRS_LIGHTING, TRUE);
    pDirect3DDevice->SetRenderState(D3DRS_AMBIENT, 0);
}
 
//Draw function
VOID RenderingDirect3D() {
    if (pDirect3DDevice == NULL) //search errors
        return;
    pDirect3DDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
 
    pDirect3DDevice->BeginScene();
    LightMaterial();
    Matrix();
    //Scene drawing
    pDirect3DDevice->SetStreamSource(0, pBufferVershin, 0, sizeof(CUSTOMVERTEX));
    pDirect3DDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
    pDirect3DDevice->SetIndices(pBufferIndex);
    pDirect3DDevice->SetTexture(0, pTextura001);
    pDirect3DDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
    pDirect3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
    //output of object
    pDirect3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 36, 0, 12);
    pDirect3DDevice->EndScene();
    pDirect3DDevice->Present(NULL, NULL, NULL, NULL);
}
 
//Delete of resoureses (in invert order)
VOID DeleteDirect3D() {
    if (pTextura001 != NULL)
        pTextura001->Release();
    if (pBufferIndex != NULL)
        pBufferIndex->Release();
 
    if (pBufferVershin != NULL)
        pBufferVershin->Release();
 
    if (pDirect3DDevice != NULL)
        pDirect3DDevice->Release();
 
    if (pDirect3D != NULL)
        pDirect3D->Release();
}
 
 
int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nCmdShow)
{
    MSG msg;
    WNDCLASSEX wcex;
 
    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = WndProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInstance;
    wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName   = NULL;
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
 
    if (!RegisterClassEx(&wcex))
    {
        MessageBox(NULL,
            _T("Call to RegisterClassEx failed!"),
            _T("Win32 Guided Tour"),
            NULL);
 
        return 1;
    }
 
    hInst = hInstance; // Store instance handle in our global variable
 
    // The parameters to CreateWindow explained:
    // szWindowClass: the name of the application
    // szTitle: the text that appears in the title bar
    // WS_OVERLAPPEDWINDOW: the type of window to create
    // CW_USEDEFAULT, CW_USEDEFAULT: initial position (x, y)
    // 500, 100: initial size (width, length)
    // NULL: the parent of this window
    // NULL: this application does not have a menu bar
    // hInstance: the first parameter from WinMain
    // NULL: not used in this application
    HWND hWnd = CreateWindow(
        szWindowClass,
        szTitle,
        WS_OVERLAPPEDWINDOW,
        0, 0,
        500, 500,
        NULL,
        NULL,
        hInstance,
        NULL
    );
 
    if (SUCCEEDED (InitialDirect3D(hWnd))) {
        if (SUCCEEDED(InitialObject())) {
            ShowWindow(hWnd, SW_SHOWDEFAULT);
            UpdateWindow(hWnd);
            ZeroMemory(&msg, sizeof(msg));
            // Main message loop:
            while (msg.message != WM_QUIT) {
                if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
                    TranslateMessage(&msg);
                    DispatchMessage(&msg);
                }
                else
                    RenderingDirect3D();
            }
        }
    }
 
    if (!hWnd)
    {
        MessageBox(NULL,
            _T("Call to CreateWindow failed!"),
            _T("Using of DirectX by ConteDevel Corp."),
            NULL);
 
        return 1;
    }
 
    // The parameters to ShowWindow explained:
    // hWnd: the value returned from CreateWindow
    // nCmdShow: the fourth parameter from WinMain
 
 
 
    return (int) msg.wParam;
}
 
//
//  FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  PURPOSE:  Processes messages for the main window.
//
//  WM_PAINT    - Paint the main window
//  WM_DESTROY  - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT ps;
    HDC hdc;
    switch (message)
    {
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
 
        // Here your application is laid out.
        // For this introduction, we just print out "Hello, World!"
        // in the top left corner.
        // End application-specific layout section.
        RenderingDirect3D();
        ValidateRect(hWnd, NULL);
 
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        DeleteDirect3D();
        PostQuitMessage(0);
        break;
    case WM_KEYDOWN:
        if (wParam == VK_ESCAPE)
            PostQuitMessage(0);
        return 0;
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
        break;
    }
 
    return 0;
}
Текстура:
0
Изображения
 
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2011, 13:07
Ответы с готовыми решениями:

Реализовать DirectX. Или разобраться в том, как программисту наладить работу DirectX у клиента под Windows
Здравствуйте Программисты. Заплачу за решение моего вопроса! 25-50 тыс....

При загрузке DirectX ошибка
При загрузке любого DirectX.Ошибка. Нет доверия к CAB-файлу, необходимому для...

Ошибка при компилировании с DirectX
Всем привет. Проблема заключается в следующем: при компилировании вот этого...

Delphi + DirectX (Ошибка при запуске программы)
Здравствуйте! Скачал вот хорошую книгу DirectX + Delphi! Вот только есть...

DirectX при компиляции в release пропадают цвета
Доброго времени суток. У меня следующая проблема: работаю в связке direct3d +...

13
GhostMan
Заблокирован
06.11.2011, 13:08  [ТС] 2
В чем ошибка?

Библиотеки и заголовочные файлы подключены...
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
06.11.2011, 13:21 3
Строка 297 или 298 завершилась неудачно. При выходе из программы используется не инициализированная переменная msg.

Добавлено через 1 минуту
Скорее всего текстуру ищет не в той папке, где она лежит. Поставь прерывание в 296 строке и убедись в моей правоте.)

Добавлено через 52 секунды
Кстати, это называется не "виснет", а прерывает выполнение. Просто Ф5 нажми для продолжения отладки и закрытия приложения.
1
GhostMan
Заблокирован
06.11.2011, 13:43  [ТС] 4
Цитата Сообщение от Deviaphan Посмотреть сообщение
Строка 297 или 298 завершилась неудачно. При выходе из программы используется не инициализированная переменная msg.

Добавлено через 1 минуту
Скорее всего текстуру ищет не в той папке, где она лежит. Поставь прерывание в 296 строке и убедись в моей правоте.)

Добавлено через 52 секунды
Кстати, это называется не "виснет", а прерывает выполнение. Просто Ф5 нажми для продолжения отладки и закрытия приложения.
Я текстуру кинул в папку с откомпилированной прогой и в папку исходнико, а результат тот же. Что я не так делаю?
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
06.11.2011, 13:50 5
Про текстуру я предположил. У меня не стоит DirectX SDK, и в код вчитываться нет желания. Самую очевидную проблему я описал.
Поставь прерывание в начале программы и трассируй до обнаружения ошибки. Где-то что-то не правильно. То, что можно было определить по сообщению об ошибке, я показал.
1
GhostMan
Заблокирован
06.11.2011, 13:54  [ТС] 6
Цитата Сообщение от Deviaphan Посмотреть сообщение
Про текстуру я предположил. У меня не стоит DirectX SDK, и в код вчитываться нет желания. Самую очевидную проблему я описал.
Поставь прерывание в начале программы и трассируй до обнаружения ошибки. Где-то что-то не правильно. То, что можно было определить по сообщению об ошибке, я показал.
Пробовал... не получается, иначе не писал бы на форум
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
06.11.2011, 13:57 7
Под отладчиком запустил? До строки 301 дошло?

Добавлено через 45 секунд
"Запустить под отладчиком" не значит нажать Ф5 и ждать чуда. Подразумевается пошаговая трассировка проблемного участка.
1
GhostMan
Заблокирован
06.11.2011, 14:01  [ТС] 8
Цитата Сообщение от Deviaphan Посмотреть сообщение
Под отладчиком запустил? До строки 301 дошло?

Добавлено через 45 секунд
"Запустить под отладчиком" не значит нажать Ф5 и ждать чуда. Подразумевается пошаговая трассировка проблемного участка.
Выскочила ошибка, описанная в начале( Visual Studio потом только после перезапуска, начинает работать.
Та же прога без текстуры работает нормально(
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
06.11.2011, 14:03 9
Указанная ошибка могла выскочить только если управление не было передано в строку 301, т.е. упала инициализация. Трассируй где конкретно она падает.
1
GhostMan
Заблокирован
06.11.2011, 14:13  [ТС] 10
Цитата Сообщение от Deviaphan Посмотреть сообщение
Указанная ошибка могла выскочить только если управление не было передано в строку 301, т.е. упала инициализация. Трассируй где конкретно она падает.
Где-то здесь:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
HRESULT InitialDirect3D (HWND hwnd) {
    if (NULL == (pDirect3D = Direct3DCreate9(D3D_SDK_VERSION)))
        return E_FAIL;
 
    D3DDISPLAYMODE Display;
 
    if (FAILED (pDirect3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &Display)))
        return E_FAIL;
 
    D3DPRESENT_PARAMETERS Direct3DParametr;
 
 
    ZeroMemory(&Direct3DParametr, sizeof (Direct3DParametr));
 
    Direct3DParametr.Windowed = false;
    Direct3DParametr.SwapEffect = D3DSWAPEFFECT_DISCARD;
    Direct3DParametr.BackBufferFormat = Display.Format;
    Direct3DParametr.EnableAutoDepthStencil = TRUE;
    Direct3DParametr.AutoDepthStencilFormat = D3DFMT_D16;
    Direct3DParametr.BackBufferWidth = GetSystemMetrics(SM_CXSCREEN);
    Direct3DParametr.BackBufferHeight = GetSystemMetrics(SM_CYSCREEN);
    Direct3DParametr.BackBufferCount = 3;
    Direct3DParametr.FullScreen_RefreshRateInHz = Display.RefreshRate;
        
[B] if (FAILED (pDirect3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
        hwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING,
        &Direct3DParametr, &pDirect3DDevice)))
//здесь прога виснет
        return E_FAIL;[/B]
 
    pDirect3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
    //Light off
    pDirect3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
    pDirect3DDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
 
    return S_OK;
}
Но я только изучаю directX, и не могу понять, где ошибка.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
06.11.2011, 14:16 11
Заходишь в функцию (прерывание в начале её поставь) и потом F10 до обнаружения строки 25. А потом уже думай, почему из-за флага D3DDEVTYPE_HAL у тебя инициализация падает...
1
GhostMan
Заблокирован
06.11.2011, 14:21  [ТС] 12
Цитата Сообщение от Deviaphan Посмотреть сообщение
Указанная ошибка могла выскочить только если управление не было передано в строку 301, т.е. упала инициализация. Трассируй где конкретно она падает.
Ошибку устранил, программа запустилась, но для этого пришлось указать полный адрес. Почему нельзя указать имя файла, чтоб он загружался из папки проекта? К тому же такой вариант описан в книге, по которой изучаю DirectX?
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
06.11.2011, 14:25 13
Рабочая директория по умолчанию отличается от директории, в которую помещается ехе файл. По умолчанию используется директория с файлом sln. Пути считаются относительно него.
Как вариант, начинать путь с символов ".\"

Добавлено через 1 минуту
Цитата Сообщение от GhostMan Посмотреть сообщение
Ошибку устранил
Т.е. проблема была не в функции InitialDirect3D .) Срочно изучай использование отладчика.)
1
GhostMan
Заблокирован
06.11.2011, 14:27  [ТС] 14
Цитата Сообщение от Deviaphan Посмотреть сообщение
Рабочая директория по умолчанию отличается от директории, в которую помещается ехе файл. По умолчанию используется директория с файлом sln. Пути считаются относительно него.
Как вариант, начинать путь с символов ".\"

Добавлено через 1 минуту

Т.е. проблема была не в функции InitialDirect3D .) Срочно изучай использование отладчика.)
Нужно будет Ошибка, как раз там и происходила, когда он устройство пытался создать с параметрами, где вместо текстуры бог знает что загружалось
0
06.11.2011, 14:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2011, 14:27

Понимание роли d3dDevice при программировании в DirectX на VC++
Всем привет! Только недавно начал изучать DirectX. Начал с DirectX 9. Понял,...

Ошибки DEP6100, DEP6200 при запуске приложения DirectX 11
Пытаюсь запустить стандартный приложения DirectX 11 шаблон в Visual Studio 2015...

Исчезание текста при его выводе с использованием DirectX!
Здравствуйте, я изучаю directX по книге Горнакова, дошёл до вывода текста на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru