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

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

28.09.2016, 19:06. Показов 2480. Ответов 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 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 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 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 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
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 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 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru