Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 2
Регистрация: 11.12.2015
Сообщений: 47

Ошибки линковки при работе с DirectX

28.09.2016, 19:06. Показов 2373. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создал DirectX проект, и решил разбить на файлы, создал render.cpp и main.cpp, они отвечают за разные функции, но стоит подключить к render.cpp хидеры directX, сразу выдает кучу ошибок по типу:
Ошибка 86 error LNK2005: "struct ID3D11Device * g_pd3dDevice" (?g_pd3dDevice@@3PAUID3D11Device@@A) уже определен в r_main.obj c:\My Documents\Visual Studio 2012\Projects\SpeedCarFireNew\RenderEngine\r_render.obj RenderEngine


Как можно собрать приложение и разбить на разные файлы без ошибок?

Предоставлю код, если требуется.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.09.2016, 19:06
Ответы с готовыми решениями:

Ошибки на этапе линковки, при работе с шаблонами (LNK2019)
В качестве учебной задачки начал реализовывать какое-то подобие вектора, но вот столкнулся с проблемой: ...

Ошибки линковки при использовании шаблонного класса
Есть заголовочной файл Utils.h, в котором определены 2 класса String и ArrayList<T>: class String : public Comparable<String> { ...

Исправить ошибки линковки при подключении библиотек Ilu
Здравствуйте подскажите как исправить, уже 2 день пытаюсь и ничего не получается. Подключил библиотеки в вижак, скинул либы в папку либ,...

23
599 / 421 / 136
Регистрация: 02.10.2008
Сообщений: 1,796
Записей в блоге: 1
28.09.2016, 19:41
Походу в обоих обоих файлах объявлена переменная g_pd3dDevice потому линкер и ругается на одно и тоже имя для разных переменных. Что бы детальнее помочь нужен код.

З.Ы. Скорее всего тему перенесут в C++
0
0 / 0 / 2
Регистрация: 11.12.2015
Сообщений: 47
28.09.2016, 19:44  [ТС]
Хм, забыл тему указать...

Подобно и другим файлам объявляется DX
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "global.h"
 
extern void Camera_Update ();
void Render()
{
    // Очистить задний буфер
    float ClearColor[4] = { 0.0f, 0.0f, 0.8f, 1.0f }; 
    g_pImmediateContext->ClearRenderTargetView( g_pRenderTargetView, ClearColor );
    g_pImmediateContext->ClearDepthStencilView( g_pDepthStencilView, D3D11_CLEAR_DEPTH, 1.0f, 0 );
    
    RenderModels();
    g_pSwapChain->Present( 0, 0 );
}

global.h
C++
1
2
3
4
5
#include <windows.h>
#include <d3d11.h>
#include <d3dx11.h>
#include <d3dcompiler.h>   // Добавились новые заголовки
#include <xnamath.h>
0
599 / 421 / 136
Регистрация: 02.10.2008
Сообщений: 1,796
Записей в блоге: 1
29.09.2016, 07:46
А где main.cpp ? Пока я не вижу ни одного упоминания g_pd3dDevice
0
0 / 0 / 2
Регистрация: 11.12.2015
Сообщений: 47
29.09.2016, 10:04  [ТС]
main.h
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
#include "global.h"
#pragma comment (lib, "d3d11.lib")
#pragma comment (lib, "d3dx11.lib")
#pragma comment (lib, "d3dx10.lib")
 
HINSTANCE               g_hInst = NULL;
HWND                    g_hWnd = NULL;
D3D_DRIVER_TYPE         g_driverType = D3D_DRIVER_TYPE_NULL;
D3D_FEATURE_LEVEL       g_featureLevel = D3D_FEATURE_LEVEL_11_0;
ID3D11Device*           g_pd3dDevice = NULL;          // Устройство (для создания объектов)
ID3D11DeviceContext*    g_pImmediateContext = NULL;   // Контекст устройства (рисование)
IDXGISwapChain*         g_pSwapChain = NULL;          // Цепь связи (буфера с экраном)
ID3D11RenderTargetView* g_pRenderTargetView = NULL;   // Объект заднего буфера
ID3D11VertexShader*     g_pVertexShader = NULL;             // Вершинный шейдер
ID3D11PixelShader*      g_pPixelShader = NULL;        // Пиксельный шейдер
ID3D11InputLayout*      g_pVertexLayout = NULL;             // Описание формата вершин
ID3D11Buffer*         g_pVertexBuffer = NULL;         // Буфер вершин
 ID3D11Buffer*           g_pIndexBuffer = NULL;        // Буфер индексов вершин
ID3D11Buffer*           g_pConstantBuffer = NULL;           // Константный буфер
 
XMMATRIX                g_World;                      // Матрица мира
XMMATRIX                g_View;                       // Матрица вида
XMMATRIX                g_Projection;                 // Матрица проекции
 
ID3D11Texture2D*        g_pDepthStencil = NULL;             // Текстура буфера глубин
ID3D11DepthStencilView* g_pDepthStencilView = NULL;          // Объект вида, буфер глубин
 
HRESULT InitWindow( HINSTANCE hInstance, int nCmdShow );  // Создание окна
HRESULT InitDevice();      // Инициализация устройств DirectX
void CleanupDevice();      // Удаление созданнных устройств DirectX
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );       // Функция окна
void Render();      // Функция рисования
HRESULT InitGeometry();    // Инициализация шаблона ввода и буфера вершин
int InitRender(HINSTANCE hInstance, int nCmdShow);
HRESULT InitMatrixes();    // Инициализация матриц
void SetMatrixes(float fAngle); // Обновление матрицы мира
 
 
struct Vertex
{
    XMFLOAT3 Pos;
    XMFLOAT4 Color;
};
 
struct ConstantBuffer
{
    XMMATRIX mWorld;              // Матрица мира
    XMMATRIX mView;        // Матрица вида
    XMMATRIX mProjection;  // Матрица проекции
};
main.cpp
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
#include "main.h"
 
HRESULT CompileShaderFromFile( LPCSTR szFileName, LPCSTR szEntryPoint, LPCSTR szShaderModel, ID3DBlob** ppBlobOut )
{
    HRESULT hr = S_OK;
    DWORD dwShaderFlags = D3DCOMPILE_ENABLE_STRICTNESS;
    ID3DBlob* pErrorBlob;
    hr = D3DX11CompileFromFile( szFileName, NULL, NULL, szEntryPoint, szShaderModel,
        dwShaderFlags, 0, NULL, ppBlobOut, &pErrorBlob, NULL );
    if( FAILED(hr) )
    {
        if( pErrorBlob != NULL )
            OutputDebugStringA( (char*)pErrorBlob->GetBufferPointer() );
        if( pErrorBlob ) pErrorBlob->Release();
        return hr;
    }
    if( pErrorBlob ) pErrorBlob->Release();
 
    return S_OK;
}
 
 
 
 
 
 void CleanupDevice()
{
 // Сначала отключим контекст устройства
    if( g_pImmediateContext ) g_pImmediateContext->ClearState();
    // Потом удалим объекты
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
29.09.2016, 10:09
main.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//...
extern HINSTANCE               g_hInst = NULL;
extern HWND                    g_hWnd = NULL;
extern D3D_DRIVER_TYPE         g_driverType = D3D_DRIVER_TYPE_NULL;
extern D3D_FEATURE_LEVEL       g_featureLevel = D3D_FEATURE_LEVEL_11_0;
extern ID3D11Device*           g_pd3dDevice = NULL;          // Устройство (для создания объектов)
extern ID3D11DeviceContext*    g_pImmediateContext = NULL;   // Контекст устройства (рисование)
extern IDXGISwapChain*         g_pSwapChain = NULL;          // Цепь связи (буфера с экраном)
extern ID3D11RenderTargetView* g_pRenderTargetView = NULL;   // Объект заднего буфера
extern ID3D11VertexShader*     g_pVertexShader = NULL;             // Вершинный шейдер
extern ID3D11PixelShader*      g_pPixelShader = NULL;        // Пиксельный шейдер
extern ID3D11InputLayout*      g_pVertexLayout = NULL;             // Описание формата вершин
extern ID3D11Buffer*         g_pVertexBuffer = NULL;         // Буфер вершин
extern ID3D11Buffer*           g_pIndexBuffer = NULL;        // Буфер индексов вершин
extern ID3D11Buffer*           g_pConstantBuffer = NULL;           // Константный буфер
 
extern XMMATRIX                g_World;                      // Матрица мира
extern XMMATRIX                g_View;                       // Матрица вида
extern XMMATRIX                g_Projection;                 // Матрица проекции
 
extern ID3D11Texture2D*        g_pDepthStencil = NULL;             // Текстура буфера глубин
extern ID3D11DepthStencilView* g_pDepthStencilView = NULL;          // Объект вида, буфер глубин
//...
В одном каком-то cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//...
HINSTANCE               g_hInst = NULL;
HWND                    g_hWnd = NULL;
D3D_DRIVER_TYPE         g_driverType = D3D_DRIVER_TYPE_NULL;
D3D_FEATURE_LEVEL       g_featureLevel = D3D_FEATURE_LEVEL_11_0;
ID3D11Device*           g_pd3dDevice = NULL;          // Устройство (для создания объектов)
ID3D11DeviceContext*    g_pImmediateContext = NULL;   // Контекст устройства (рисование)
IDXGISwapChain*         g_pSwapChain = NULL;          // Цепь связи (буфера с экраном)
ID3D11RenderTargetView* g_pRenderTargetView = NULL;   // Объект заднего буфера
ID3D11VertexShader*     g_pVertexShader = NULL;             // Вершинный шейдер
ID3D11PixelShader*      g_pPixelShader = NULL;        // Пиксельный шейдер
ID3D11InputLayout*      g_pVertexLayout = NULL;             // Описание формата вершин
ID3D11Buffer*         g_pVertexBuffer = NULL;         // Буфер вершин
 ID3D11Buffer*           g_pIndexBuffer = NULL;        // Буфер индексов вершин
ID3D11Buffer*           g_pConstantBuffer = NULL;           // Константный буфер
 
XMMATRIX                g_World;                      // Матрица мира
XMMATRIX                g_View;                       // Матрица вида
XMMATRIX                g_Projection;                 // Матрица проекции
 
ID3D11Texture2D*        g_pDepthStencil = NULL;             // Текстура буфера глубин
ID3D11DepthStencilView* g_pDepthStencilView = NULL;          // Объект вида, буфер глубин
//...
0
0 / 0 / 2
Регистрация: 11.12.2015
Сообщений: 47
29.09.2016, 10:20  [ТС]
Те же самые ошибки
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
29.09.2016, 10:28
Цитата Сообщение от elektro-volk Посмотреть сообщение
Те же самые ошибки
В main.h инициализацию убери.
0
0 / 0 / 2
Регистрация: 11.12.2015
Сообщений: 47
29.09.2016, 10:33  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "global.h"
#pragma comment (lib, "d3d11.lib")
#pragma comment (lib, "d3dx11.lib")
#pragma comment (lib, "d3dx10.lib")
 
 
 
 
struct Vertex
{
    XMFLOAT3 Pos;
    XMFLOAT4 Color;
};
 
struct ConstantBuffer
{
    XMMATRIX mWorld;              // Матрица мира
    XMMATRIX mView;        // Матрица вида
    XMMATRIX mProjection;  // Матрица проекции
};
Даже так?
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
29.09.2016, 10:38
Цитата Сообщение от nd2 Посмотреть сообщение
В main.h инициализацию убери.
Не так:
Цитата Сообщение от Croessmah Посмотреть сообщение
extern HINSTANCE g_hInst = NULL;
А так:
C++
1
extern HINSTANCE  g_hInst;
и т.д.
0
599 / 421 / 136
Регистрация: 02.10.2008
Сообщений: 1,796
Записей в блоге: 1
29.09.2016, 10:43
Согласен.
extern переменные инициализируются при реализации (например в *.cpp файле) и только один раз.
Во всех заголовочниках *.h должны быть только extern объявления.

Например,
1.h:
C++
1
extern int A;
2.h:
C++
1
2
3
extern int A;
 
void any_function(void);
1.cpp:
C++
1
2
#include "1.h"
int A=12; /*если не будет инициализации компилер может засыпать предупреждениями*/
2.cpp:
C++
1
2
3
4
5
6
7
8
9
#include "2.h"
/*если разкоментировать строку ниже то вылезет именно Ваша ошибка*/
//int A=12; 
 
void any_function(void)
{
 A++; // А вот так использовать переменную можно(она объявлена в 2.h)
 std::cout<<"Incremented value: "<<A<<std::endl;
}
main.cpp:
C++
1
2
3
4
5
#include "2.h"
int main(void)
{
 return any_function();
}
0
0 / 0 / 2
Регистрация: 11.12.2015
Сообщений: 47
29.09.2016, 10:45  [ТС]
Возможно вы не поняли проблему, подключив DirectX

C++
1
2
3
4
#include <windows.h>
#include <d3d11.h>
#include <d3dx11.h>
#include <xnamath.h>
В двух файлах, меня засыпает ошибками, а если не подключать, то много ошибок про неизвестные символы...
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
29.09.2016, 10:50
Цитата Сообщение от elektro-volk Посмотреть сообщение
Возможно вы не поняли проблему,
Это рекомендации по поводу таких ошибок (множественное определение):
Цитата Сообщение от elektro-volk Посмотреть сообщение
по типу:
Ошибка 86 error LNK2005: "struct ID3D11Device * g_pd3dDevice" (?g_pd3dDevice@@3PAUID3D11Device@@A) уже определен в r_main.obj c:\My Documents\Visual Studio 2012\Projects\SpeedCarFireNew\RenderEngi ne\r_render.obj RenderEngine
Добавлено через 1 минуту
Не нужно делать определения в заголовочных файлах. Сначала сделай, как советуют, потом - дальше.
0
0 / 0 / 2
Регистрация: 11.12.2015
Сообщений: 47
29.09.2016, 10:51  [ТС]
Ошибка 30 error LNK2005: "struct ID3D11PixelShader * g_pPixelShader" (?g_pPixelShader@@3PAUID3D11PixelShader@@A) уже определен в r_main.obj c:\My Documents\Visual Studio 2012\Projects\SpeedCarFireNew\RenderEngine\r_render.obj RenderEngine


Подключение DX в двух файлах -_-
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
29.09.2016, 10:55
В main.h сделал так?
C++
1
extern ID3D11PixelShader*     g_pPixelShader;
0
0 / 0 / 2
Регистрация: 11.12.2015
Сообщений: 47
29.09.2016, 10:56  [ТС]
Он теперь пустой
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
29.09.2016, 11:00
Цитата Сообщение от elektro-volk Посмотреть сообщение
Он теперь пустой
В main.cpp что подключаешь? Или что там определяешь? Коды показывай, ясновидящих тут нет.

Добавлено через 1 минуту
Линкер пишет, что у тебя определение g_pPixelShade в двух файлах. В каких - читай в тексте ошибки. Подключенный .h считается частью .cpp.
0
0 / 0 / 2
Регистрация: 11.12.2015
Сообщений: 47
29.09.2016, 11:03  [ТС]
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
#include "global.h"
#pragma comment (lib, "d3d11.lib")
#pragma comment (lib, "d3dx11.lib")
#pragma comment (lib, "d3dx10.lib")
 
 
#include "main.h"
 
HINSTANCE g_hInst;
HWND                    g_hWnd = NULL;
D3D_DRIVER_TYPE         g_driverType = D3D_DRIVER_TYPE_NULL;
D3D_FEATURE_LEVEL       g_featureLevel = D3D_FEATURE_LEVEL_11_0;
ID3D11Device*           g_pd3dDevice = NULL;          // Устройство (для создания объектов)
ID3D11DeviceContext*    g_pImmediateContext = NULL;   // Контекст устройства (рисование)
IDXGISwapChain*         g_pSwapChain = NULL;          // Цепь связи (буфера с экраном)
ID3D11RenderTargetView* g_pRenderTargetView = NULL;   // Объект заднего буфера
ID3D11VertexShader*     g_pVertexShader = NULL;             // Вершинный шейдер
ID3D11PixelShader*      g_pPixelShader = NULL;        // Пиксельный шейдер
ID3D11InputLayout*      g_pVertexLayout = NULL;             // Описание формата вершин
ID3D11Buffer*         g_pVertexBuffer = NULL;         // Буфер вершин
 ID3D11Buffer*           g_pIndexBuffer = NULL;        // Буфер индексов вершин
ID3D11Buffer*           g_pConstantBuffer = NULL;           // Константный буфер
 
XMMATRIX                g_World;                      // Матрица мира
XMMATRIX                g_View;                       // Матрица вида
XMMATRIX                g_Projection;                 // Матрица проекции
 
ID3D11Texture2D*        g_pDepthStencil = NULL;             // Текстура буфера глубин
ID3D11DepthStencilView* g_pDepthStencilView = NULL;          // Объект вида, буфер глубин
 
HRESULT InitWindow( HINSTANCE hInstance, int nCmdShow );  // Создание окна
HRESULT InitDevice();      // Инициализация устройств DirectX
void CleanupDevice();      // Удаление созданнных устройств DirectX
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );       // Функция окна
void Render();      // Функция рисования
HRESULT InitGeometry();    // Инициализация шаблона ввода и буфера вершин
int InitRender(HINSTANCE hInstance, int nCmdShow);
HRESULT InitMatrixes();    // Инициализация матриц
void SetMatrixes(float fAngle); // Обновление матрицы мира
 
struct Vertex
{
    XMFLOAT3 Pos;
    XMFLOAT4 Color;
};
 
struct ConstantBuffer
{
    XMMATRIX mWorld;              // Матрица мира
    XMMATRIX mView;        // Матрица вида
    XMMATRIX mProjection;  // Матрица проекции
};
 
 
HRESULT CompileShaderFromFile( LPCSTR szFileName, LPCSTR szEntryPoint, LPCSTR szShaderModel, ID3DBlob** ppBlobOut )
{
    HRESULT hr = S_OK;
    DWORD dwShaderFlags = D3DCOMPILE_ENABLE_STRICTNESS;
    ID3DBlob* pErrorBlob;
    hr = D3DX11CompileFromFile( szFileName, NULL, NULL, szEntryPoint, szShaderModel,
        dwShaderFlags, 0, NULL, ppBlobOut, &pErrorBlob, NULL );
    if( FAILED(hr) )
    {
        if( pErrorBlob != NULL )
            OutputDebugStringA( (char*)pErrorBlob->GetBufferPointer() );
        if( pErrorBlob ) pErrorBlob->Release();
        return hr;
    }
    if( pErrorBlob ) pErrorBlob->Release();
 
    return S_OK;
}
 
 
 
 
 
 void CleanupDevice()
{
 // Сначала отключим контекст устройства
    if( g_pImmediateContext ) g_pImmediateContext->ClearState();
    // Потом удалим объекты
    if( g_pConstantBuffer ) g_pConstantBuffer->Release();
    if( g_pVertexBuffer ) g_pVertexBuffer->Release();
    if( g_pIndexBuffer ) g_pIndexBuffer->Release();
    if( g_pVertexLayout ) g_pVertexLayout->Release();
    if( g_pVertexShader ) g_pVertexShader->Release();
    if( g_pPixelShader ) g_pPixelShader->Release();
    if( g_pRenderTargetView ) g_pRenderTargetView->Release();
    if( g_pSwapChain ) g_pSwapChain->Release();
    if( g_pImmediateContext ) g_pImmediateContext->Release();
    if( g_pd3dDevice ) g_pd3dDevice->Release();
    if( g_pDepthStencil ) g_pDepthStencil->Release();
    if( g_pDepthStencilView ) g_pDepthStencilView->Release();
}
 
 int InitRender(HINSTANCE hInstance, int nCmdShow){
     if (FAILED(InitWindow(hInstance, nCmdShow)))
        return 0;
 
    if (FAILED(InitDevice()))
    {
        CleanupDevice();
        return 0;
    }
 
        // Создание шейдеров и буфера вершин
    if( FAILED( InitGeometry() ) )
    {
        CleanupDevice();
        return 0;
    }
 
     // Инициализация матриц
    if( FAILED( InitMatrixes() ) )
    {
        CleanupDevice();
        return 0;
    }
    return 1;
 }
 
 
 HRESULT InitWindow( HINSTANCE hInstance, int nCmdShow )
{
    // Регистрация класса
    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 = NULL;
    wcex.hCursor = LoadCursor (NULL, IDC_ARROW);
    wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    wcex.lpszMenuName = NULL;
    wcex.lpszClassName = "EGGIN";
    wcex.hIconSm=NULL;
    if (!RegisterClassEx(&wcex))
        return E_FAIL;
 
    // Создание окна
    g_hInst = hInstance;
    RECT rc = { 0, 0, 640, 480 };
    AdjustWindowRect (&rc, WS_OVERLAPPEDWINDOW, FALSE);
    g_hWnd = CreateWindow ("EGGIN", "Speed Car Fire New", WS_OVERLAPPEDWINDOW,
                           CW_USEDEFAULT, CW_USEDEFAULT, rc.right - rc.left, rc.bottom - rc.top, NULL, NULL, hInstance, NULL );
    if (!g_hWnd)
        return E_FAIL;
 
    ShowWindow (g_hWnd, nCmdShow);
    return S_OK;
}
 
 
 LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
    PAINTSTRUCT ps;
    HDC hdc;
 
    switch( message )
    {
        case WM_PAINT:
            hdc = BeginPaint( hWnd, &ps );
            EndPaint( hWnd, &ps );
            break;
 
        case WM_DESTROY:
            PostQuitMessage( 0 );
            break;
 
        default:
            return DefWindowProc( hWnd, message, wParam, lParam );
    }
 
    return 0;
}
 
 HRESULT InitDevice()
{
    HRESULT hr = S_OK;
 
    RECT rc;
    GetClientRect( g_hWnd, &rc );
    UINT width = rc.right - rc.left;           // получаем ширину
    UINT height = rc.bottom - rc.top;   // и высоту окна
    UINT createDeviceFlags = 0;
 
    D3D_DRIVER_TYPE driverTypes[] =
    {
        D3D_DRIVER_TYPE_HARDWARE,
        D3D_DRIVER_TYPE_WARP,
        D3D_DRIVER_TYPE_REFERENCE,
    };
    UINT numDriverTypes = ARRAYSIZE( driverTypes );
     // Тут мы создаем список поддерживаемых версий DirectX
    D3D_FEATURE_LEVEL featureLevels[] =
    {
        D3D_FEATURE_LEVEL_11_0,
        D3D_FEATURE_LEVEL_10_1,
        D3D_FEATURE_LEVEL_10_0,
    };
    UINT numFeatureLevels = ARRAYSIZE( featureLevels );
 
       // Сейчас мы создадим устройства DirectX. Для начала заполним структуру,
       // которая описывает свойства переднего буфера и привязывает его к нашему окну.
    DXGI_SWAP_CHAIN_DESC sd;            // Структура, описывающая цепь связи (Swap Chain)
    ZeroMemory( &sd, sizeof( sd ) );    // очищаем ее
    sd.BufferCount = 1;                               // у нас один задний буфер
    sd.BufferDesc.Width = width;                     // ширина буфера
    sd.BufferDesc.Height = height;                          // высота буфера
    sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;      // формат пикселя в буфере
    sd.BufferDesc.RefreshRate.Numerator = 75;         // частота обновления экрана
    sd.BufferDesc.RefreshRate.Denominator = 1;
    sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; // назначение буфера - задний буфер
    sd.OutputWindow = g_hWnd;                               // привязываем к нашему окну
    sd.SampleDesc.Count = 1;
    sd.SampleDesc.Quality = 0;
    sd.Windowed = TRUE;                               // не полноэкранный режим
    for( UINT driverTypeIndex = 0; driverTypeIndex < numDriverTypes; driverTypeIndex++ )
    {
        g_driverType = driverTypes[driverTypeIndex];
        hr = D3D11CreateDeviceAndSwapChain ( NULL, g_driverType, NULL, createDeviceFlags, featureLevels, numFeatureLevels, D3D11_SDK_VERSION, &sd, &g_pSwapChain, &g_pd3dDevice, &g_featureLevel, &g_pImmediateContext );
        if (SUCCEEDED(hr)) // Если устройства созданы успешно, то выходим из цикла
            break;
    }
    if (FAILED(hr)) return hr;
        // Теперь создаем задний буфер. Обратите внимание, в SDK
    // RenderTargetOutput - это передний буфер, а RenderTargetView - задний.
    ID3D11Texture2D* pBackBuffer = NULL;
    hr = g_pSwapChain->GetBuffer( 0, __uuidof(ID3D11Texture2D), (LPVOID*)&pBackBuffer );
    if (FAILED(hr)) return hr;
 
    // Я уже упоминал, что интерфейс g_pd3dDevice будет
    // использоваться для создания остальных объектов
    hr = g_pd3dDevice->CreateRenderTargetView( pBackBuffer, NULL, &g_pRenderTargetView );
    pBackBuffer->Release();
    if (FAILED(hr)) return hr;
    // Переходим к созданию буфера глубин
    // Создаем текстуру-описание буфера глубин
    D3D11_TEXTURE2D_DESC descDepth;     // Структура с параметрами
Создается только в main.cpp, в render.h @extern@
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
29.09.2016, 11:07
Цитата Сообщение от elektro-volk Посмотреть сообщение
#include "main.h"
Это убери, раз он пустой.
render.h показывай.
0
0 / 0 / 2
Регистрация: 11.12.2015
Сообщений: 47
29.09.2016, 11:08  [ТС]
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
#include <windows.h>
#include <d3d11.h>
#include <d3dx11.h>
#include <xnamath.h>
 
extern ID3D11Device*           g_pd3dDevice = NULL;          // Устройство (для создания объектов)
extern ID3D11DeviceContext*    g_pImmediateContext = NULL;   // Контекст устройства (рисование)
extern IDXGISwapChain*         g_pSwapChain = NULL;          // Цепь связи (буфера с экраном)
extern ID3D11RenderTargetView* g_pRenderTargetView = NULL;   // Объект заднего буфера
extern ID3D11VertexShader*     g_pVertexShader = NULL;             // Вершинный шейдер
extern ID3D11PixelShader*      g_pPixelShader = NULL;        // Пиксельный шейдер
extern ID3D11InputLayout*      g_pVertexLayout = NULL;             // Описание формата вершин
extern ID3D11Buffer*         g_pVertexBuffer = NULL;         // Буфер вершин
extern ID3D11Buffer*           g_pIndexBuffer = NULL;        // Буфер индексов вершин
extern ID3D11Buffer*           g_pConstantBuffer = NULL;           // Константный буфер
 
extern XMMATRIX                g_World;                      // Матрица мира
extern XMMATRIX                g_View;                       // Матрица вида
extern XMMATRIX                g_Projection;                 // Матрица проекции
 
extern ID3D11Texture2D*        g_pDepthStencil = NULL;             // Текстура буфера глубин
extern ID3D11DepthStencilView* g_pDepthStencilView = NULL;          // Объект вида, буфер глубин
 
void RenderModels();
Видно не судьба мне в с++)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.09.2016, 11:08
Помогаю со студенческими работами здесь

Ошибка при работе с видеофайлами посредством DirectX
Доброго времени суток! помогите пожалусйта исправить ошибку. Вот код using Microsoft.DirectX; using...

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

ошибки линковки с++(...
помогите пожалуйста!! справится с ошибками линковки масив.obj : error LNK2001: unresolved external symbol &quot;void __cdecl obr(int...

Ошибки линковки
Нужна помощь! Как исправить эти ошибки при компиляции! Все либы и заголовки дополнительные указаны он вроде их не требует! Я даже не...

Ошибки линковки glut
Что я сделал: 1. Скачал glut по ссылке с opengl.org(http://user.xmission.com/~nate/glut.html) 2. Распоковал 3. Создал проект...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru