Форум программистов, компьютерный форум, киберфорум
Наши страницы

Пишу игровой движок на C++. 002

Войти
Регистрация
Восстановить пароль
Сайт движка - gost.imsoftworks.info
Исходные коды движка - https://github.com/532235/GoST
Документация
Примеры кода программ - https://github.com/532235/GoST/wiki

Другой хобби-проект в группе в вк https://vk.com/club154291467
Оценить эту запись

Пишу игровой движок на C++. 002

Запись от 532235 размещена 31.10.2017 в 00:05

Использую Visual Studio Community 2015

Создаю шаблонный DLL проект.

В папке с проектом нужно создать папку include - там будут все заголовки движка. В параметрах проекта нужно сразу указать эту директорию.

Можно создать фильтр в VS(в Solution explorer), и туда скидывать(drag-n-drop) новые .h файлы

В папке include создаю файл gost.h (в проводнике, создать текстовый файл, потом переименование), и перекину в Solution explorer

В файле gost.h будут указываться все остальные include файлы.

Visual Studio автоматически создал stdafx.h Оставлю его, если же его нет, то можно самому создать подобный. ОН БУДЕТ ОБЩИМ ДЛЯ ВСЕХ .cpp ФАЙЛОВ ПРОЕКТА

#include "stdafx.h" будет указываться в каждом .cpp файле.

В gost.h можно сразу добавить
C++
1
2
3
4
//  C++
#include <fstream>
#include <string>
#include <vector>
Создам файл gtInfo.h там будет информация о компиляторе, архитектуре и т.д., ну и ещё всякая мелочь.

Нужно добавить #include <gtInfo.h> в gost.h

Содержание gtInfo.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
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
#pragma once
#ifndef __GT_INFO_H__
#define __GT_INFO_H__
 
/*
    Тут получаем информацию о компиляторах, архитектуре и прочее. Зачем нужно? Пригодиться, может в будущем двиг будет для других платформ хз.
*/
 
namespace gost{
 
    //  Компилятор
    #if defined(__clang__)
    #   define GT_COMPILER_CLANG
    #elif defined(__SNC__)
    #   define GT_COMPILER_SNC
    #elif defined(__GNUC__) || defined(__CC_ARM) || defined(__ARMCC__) || defined(__ghs__)
    #   define GT_COMPILER_GCC
    #if defined(__CC_ARM) || defined(__ARMCC__)
    #   define GT_COMPILER_ARMCC
    #elif defined(__ghs__)
    #   define GT_COMPILER_GHS
    #endif
    #elif defined(_MSC_VER)
    #   define GT_COMPILER_MSVC
    #elif defined(__MWERKS__)
    #   define GT_COMPILER_MWERKS
    #else
    #   error Компилятор не поддерживается
    #endif
 
    //  Архитектура
    #if defined(__i386__) || defined(_M_IX86)
    #   define  GT_ARCH_IA32
    #   define  GT_ARCH_INTEL
    #   define  GT_ENDIAN_LITTLE    1
    #   define  GT_ENDIAN_BIG       0
    #   define  GT_POINTER_SIZE     4
    #   define  GT_NUM_SIMD_REGISTERS 8
    #elif defined(_M_AMD64) || defined(_M_X64) || defined(__amd64) || defined(__x86_64)
    #   define  GT_ARCH_X64
    #   define  GT_ARCH_INTEL
    #   define  GT_ENDIAN_LITTLE    1
    #   define  GT_ENDIAN_BIG       0
    #   define  GT_POINTER_SIZE     8
    #   define  GT_ARCH_SUPPORTS_INT64
    #   define  GT_NUM_SIMD_REGISTERS 16
    #elif defined(_PPC_) || defined(__POWERPC__) || defined(_M_PPC) || defined(_M_PPCBE) || defined(GEKKO) || defined(EPPC)
    #   define  GT_ARCH_PPC
    #   define  GT_ENDIAN_LITTLE    0
    #   define  GT_ENDIAN_BIG       1
    #   define  GT_POINTER_SIZE     4
    #   define  GT_ARCH_SUPPORTS_INT64
    #   define  GT_NUM_SIMD_REGISTERS 8
    #elif defined(__PPU__) && defined(__CELLOS_LV2__)
    #   define  GT_ARCH_PS3
    #   define  GT_ENDIAN_LITTLE    0
    #   define  GT_ENDIAN_BIG       1
    #   define  GT_POINTER_SIZE     4
    #   define  GT_ARCH_SUPPORTS_INT64
    #   define  GT_NUM_SIMD_REGISTERS 32
    #elif defined(__SPU__) && defined(__CELLOS_LV2__)
    #   define  GT_ARCH_PS3SPU
    #   define  GT_ENDIAN_LITTLE    0
    #   define  GT_ENDIAN_BIG       1
    #   define  GT_POINTER_SIZE     4
    #   define  GT_NUM_SIMD_REGISTERS 128
    #elif defined(arm) || defined(__arm__) || defined(_M_ARM)
    #   define  GT_ARCH_ARM
    #   if defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__)  || ( defined(_M_ARM) && (_M_ARM >= 7) )
    #   define  GT_ARCH_ARM_V7      1
    #   elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK) || defined(__ARM_ARCH_6T2__) || defined(NN_PROCESSOR_ARM) || defined(NN_PROCESSOR_ARM_V6) || ( defined(_M_ARM) && (_M_ARM < 7) )
    #   define  GT_ARCH_ARM_V6      1
    #   else
    #   error   Эта ARM архитектура не поддерживается
    #   endif
    #   if defined(__ARMEB__)
    #   define  GT_ENDIAN_LITTLE    0
    #   define  GT_ENDIAN_BIG       1
    #   else
    #   define  GT_ENDIAN_LITTLE    1
    #   define  GT_ENDIAN_BIG       0
    #   endif
    #   define  GT_POINTER_SIZE     4
    #   define  GT_NATIVE_ALIGN_CHECK 0x7
    #   define  GT_NUM_SIMD_REGISTERS 8
    #   else
    #   error   Невозможно определить архитектуру
    #endif
 
    #ifndef GT_NATIVE_ALIGN_CHECK 
    #define GT_NATIVE_ALIGN_CHECK 0xf
    #endif
 
    //  Платформа
    #if defined(__ORBIS__)
    #   define  GT_PLATFORM_PS4
    #   define  GT_PLATFORM_IS_CONSOLE  1
    #elif defined(__APPLE_CC__)
    #   include <TargetConditionals.h>
    #   if  defined(GT_ARCH_IA32)
    #       if  defined(TARGET_IPHONE_SIMULATOR) && TARGET_IPHONE_SIMULATOR
    #           define  GT_PLATFORM_IS_CONSOLE  1
    #           define  GT_PLATFORM_IOS
    #           define  GT_PLATFORM_IOS_SIM
    #       else
    #           define  GT_PLATFORM_IS_CONSOLE  0
    #           define  GT_PLATFORM_MAC386
    #       endif
    #   elif    defined(GT_ARCH_PPC)
    #           define  GT_PLATFORM_MACPPC
    #           define  GT_PLATFORM_IS_CONSOLE  0
    #   elif    defined(GT_ARCH_ARM)
    #           define  GT_PLATFORM_IOS
    #           define  GT_PLATFORM_IS_CONSOLE  1
    #           if  defined(__ARM_NEON__) && efined(GT_ARCH_ARM_V7) && !defined(GT_DISABLE_NEON)
    #               define  GT_COMPILER_HAS_INTRINSICS_NEON
    #           endif
    #   else
    #           error   Данная Mac платформа не поддерживается
    #   endif
    #elif defined(_WIN32)
    #       define  GT_PLATFORM_WIN32
    #       if  defined(_WIN64)
    #           define  GT_PLATFORM_X64
    #       endif
    #ifndef WINAPI_FAMILY_APP
    #   define  WINAPI_FAMILY_APP           0x1
    #   define  WINAPI_FAMILY_DESKTOP_APP   0x2
    #   define  WINAPI_FAMILY_PHONE_APP     0x3
    #   define  ___UNDEF_FAMILY             1
    #endif
    #   if  defined(WINAPI_FAMILY)  &&  ((WINAPI_FAMILY==WINAPI_FAMILY_APP) || (WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP))
    #       define  GT_PLATFORM_WINRT
    #       if WINAPI_FAMILY == WINAPI_FAMILY_APP
    #           define  GT_PLATFORM_METRO   1
    #       elif WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
    #           define  GT_PLATFORM_IS_CONSOLE  1
    #       endif
    #   elif defined(_DURANGO)
    #           define  GT_PLATFORM_DURANGO
    #           define  GT_PLATFORM_IS_CONSOLE  1
    #   endif
    #   ifdef   ___UNDEF_FAMILY
    #       undef   WINAPI_FAMILY_APP
    #       undef   WINAPI_FAMILY_DESKTOP_APP
    #       undef   WINAPI_FAMILY_PHONE_APP
    #       undef   ___UNDEF_FAMILY
    #   endif
    #   ifndef  GT_PLATFORM_IS_CONSOLE
    #       define  GT_PLATFORM_IS_CONSOLE  0
    #   endif
    #elif defined(ANDROID_NDK) || defined(ANDROID) || defined(NDK) || defined(__ANDROID_API__)
    #   define  GT_PLATFORM_ANDROID
    #   define  GT_PLATFORM_IS_CONSOLE  1
    #   if defined(GT_ARCH_ARM_V7)  &&  !defined(GT_DISABLE_NEON)
    #       define  GT_COMPILER_HAS_INTRINSICS_NEON 1
    #   endif
    #elif defined(GT_PLATFORM_TIZEN) || defined(__tizen__) || defined(TIZEN)
    #       define  GT_PLATFORM_TIZEN
    #       define  GT_PLATFORM_IS_CONSOLE  1
    #elif (defined(__unix__) || defined(__linux__))
    #   define  GT_PLATFORM_LINUX
    #   define  GT_PLATFORM_IS_CONSOLE  0
    #   if defined(__native_client__) || defined(__nacl__) || defined(NACL)
    #       define  GT_PLATFORM_NACL
    #       undef   GT_POINTER_SIZE
    #       define  GT_POINTER_SIZE 4
    #   endif
    #elif defined(CAFE) || defined(GT_COMPILER_GHS)
    #   include <cafe.h>
    #   include <ppc_ghs.h>
    #   define  GT_PLATFORM_WIIU
    #   if !defined(GT_ENABLE_PAIRED_SINGLE_OPTS)
    #   define  GT_ENABLE_PAIRED_SINGLE_OPTS
    #   endif
    #   define  GT_VECTOR_PARTS_MUST_BE_VALID
    #   define  GT_PLATORM_IS_CONSOLE   1
    #elif defined(GEKKO) || defined(__PPCGEKKO__)
    #   define  GT_PLATFORM_GC
    #   if defined(RVL_OS)
    #       if !defined(GT_ENABLE_PAIRED_SINGLE_OPTS)
    #           define  GT_ENABLE_PAIRED_SINGLE_OPTS
    #       endif
    #       define  GT_PLATFORM_RVL
    #   endif
    #   define  GT_PLATFORM_IS_CONSOLE  1
    #elif defined(__PPU__) && defined(__CELLOS_LV2__)
    #   define  GT_EXPENSIVE_LHS
    #   define  GT_EXPENSIVE_FLOAT_IF
    #   define  GT_PLATFORM_PS3
    #   define  GT_PLATFORM_PS3_PPU
    #   define  GT_PLATFORM_IS_CONSOLE  1
    #elif defined(__SPU__) && defined(__CELLOS_LV2__)
    #   define  GT_PLATFORM_PS3
    #   define  GT_PLATFORM_PS3_SPU
    #   define  GT_PLATFORM_SPU
    #   define  GT_PLATFORM_IS_CONSOLE  1
    #elif defined(__CTR__) || defined(NN_PLATFORM_CTR)
    #   define  GT_PLATFORM_CTR
    #   define  GT_PLATFORM_IS_CONSOLE  1
    #elif (defined(GT_ARCH_ARM) && defined(GT_COMPILER_SNC))
    #   define  GT_PLATFORM_PSVITA  1
    #   define  GT_PLATFORM_IS_CONSOLE  1
    #   define  GT_COMPILER_HAS_INTRINSICS_NEON 1
    #else
    #endif
 
    #if defined(GT_COMPILER_MSVC) || defined(GT_COMPILER_INTEL)
    #   define  GT_ALIGN_OF(T)  __alignof(T)
    #elif defined(GT_COMPILER_GCC) || defined(GT_COMPILER_SNC) || defined(GT_COMPILER_CLANG)
    #   define  GT_ALIGN_OF(T)  __alignof__(T)
    #elif defined(GT_COMPILER_MWERKS)
    #   define  GT_ALIGN_OF(T)  __builtin_align(T)
    #endif
 
    #if defined(GT_ARCH_IA32) || defined(GT_ARCH_X64)
    #   if defined(GT_COMPILER_MSVC)
    #       define GT_BREAKPOINT(ID) __debugbreak();
    #   elif defined(GT_PLATFORM_NACL)
    #       define GT_BREAKPOINT(ID) ((*((int*)0)) = ID);
    #   elif defined(GT_COMPILER_GCC) || defined(GT_COMPILER_CLANG)
    #       define GT_BREAKPOINT(ID) asm("int $3")
    #   else
    //# error
    #   endif
    #elif defined(GT_PLATFORM_LRB)
    #   include <unistd.h>
    #   include <signal.h>
    #   define GT_BREAKPOINT(ID) signal(SIGSTOP, 0 );
    #elif defined(GT_PLATFORM_PS3_PPU)
    #       define  GT_BREAKPOINT(ID) __asm__ volatile ( "tw 31,1,1" )
    #elif defined(GT_PLATFORM_PS3_SPU)
    #   define GT_BREAKPOINT(ID) __asm__ volatile ("ilhu $0, %0\n\tiohl $0, %1\n\tstopd $0,$0,$0" : : "i"(ID>>16), "i"(ID&0xFFFF) ); 
    #elif defined(GT_PLATFORM_XBOX360)
    #   define GT_BREAKPOINT(ID) __debugbreak();
    #elif defined(GT_PLATFORM_WIIU)
    #   define GT_BREAKPOINT(ID) OSDebug();
    #elif defined(GT_PLATFORM_GC)
    #   define GT_BREAKPOINT(ID) 
    #elif defined(GT_PLATFORM_CTR)
    #   include <nn/dbg.h>
    #   define GT_BREAKPOINT(ID) ::nn::dbg::Break(nn::dbg::BREAK_REASON_ASSERT);
    #elif defined(GT_ARCH_ARM)
    #   if defined(GT_COMPILER_MSVC) 
    #       define GT_BREAKPOINT(ID) __debugbreak();
    #   elif defined(GT_COMPILER_SNC) 
    #       define GT_BREAKPOINT(ID) __breakpoint(0);
    #   else
    #       define GT_BREAKPOINT(ID) asm("bkpt 0"); 
    #   endif
    #else
    #   define GT_BREAKPOINT(ID) ((*((int*)0)) = ID);
    #endif
 
    #if __cplusplus >= 201103
    #   define GT_OVERRIDE override
    #   define GT_FINAL final
    #   define GT_FINAL_OVERRIDE final override
    #elif defined (GT_COMPILER_MSVC)
    #   if (_MSC_VER >= 1800)
    #       define GT_OVERRIDE override
    #       define GT_FINAL final
    #       define GT_FINAL_OVERRIDE final override
    #   elif (_MSC_VER >= 1600)
    #       define GT_OVERRIDE override
    #       define GT_FINAL sealed
    #       define GT_FINAL_OVERRIDE sealed override
    #   elif (_MSC_VER >=1400)
    #       define GT_OVERRIDE override
    #       define GT_FINAL
    #       define GT_FINAL_OVERRIDE override
    #   else
    #       define GT_OVERRIDE 
    #       define GT_FINAL 
    #       define GT_FINAL_OVERRIDE
    #   endif
    #else
    #   define GT_OVERRIDE 
    #   define GT_FINAL 
    #   define GT_FINAL_OVERRIDE
    #endif
}
 
 
 
#endif
Теперь нужно создать типы, которые будут использоваться в движке.

Для типов создам gtTypes.h, добавлю его в gost.h

C++
1
2
3
//  GOST
#include <gtInfo.h>
#include <gtTypes.h>
Содержание gtTypes.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
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
#pragma once
#ifndef __GT_TYPES_H__
#define __GT_TYPES_H__
 
/*
    Тут переопределяются типы, определяются полезные макросы.
*/
 
namespace gost{
 
 
    #if defined(_WIN32)
    #   define  GT_IMPORT __declspec(dllimport)
    #   define  GT_EXPORT __declspec(dllexport)
    #if (_MSC_VER > 1700 )
    #   define  GT_TYPE( x, y ) using x = y
    #else
    #   define  GT_TYPE( x, y ) typedef (y) (x)
    #endif
    #   define  GT_SPRINTF sprintf_s
    #   define  GT_CDECL __cdecl
    #elif defined(__linux) // особо не сидел в линуксе, но пусть будет пока так
    #   define  GT_IMPORT
    #   define  GT_EXPORT
    #   define  GT_TYPE( x, y ) typedef y x
    #   define  GT_CDECL
    #   define  GT_SPRINTF sprintf
    #endif
 
    //  Движок (сам проект) включает #define GT_EXPORTS для экспорта функций
    #ifdef GT_EXPORTS
    #   define GT_API GT_EXPORT
    #else
    #   define GT_API GT_IMPORT
    #endif
 
 
    #if defined(_MSC_VER) || ((__BORLANDC__ >= 0x530) && !defined(__STRICT_ANSI__))
    #   define GT_UCHAR      unsigned   __int8
    #   define GT_CHAR                  __int8
    #   define GT_USHORT     unsigned   __int16
    #   define GT_SHORT                 __int16
    #   define GT_UINT       unsigned   __int32
    #   define GT_INT                   __int32
    #   define GT_ULONGLONG  unsigned   __int64
    #   define GT_LONGLONG              __int64
    #else
    #   define GT_UCHAR      unsigned   char
    #   define GT_CHAR                  char
    #   define GT_USHORT     unsigned   short
    #   define GT_SHORT                 short
    #   define GT_UINT       unsigned   int
    #   define GT_INT                   int
    #   define GT_ULONGLONG  unsigned   long long
    #   define GT_LONGLONG              long long
    #endif
 
    //  для краткости записи
    GT_TYPE( c8,    char );
    GT_TYPE( word,  unsigned short );
    GT_TYPE( dword, unsigned int );
    GT_TYPE( uint,  unsigned int );
    GT_TYPE( ulong, unsigned long );
 
    //  имена подобны irrlicht
    GT_TYPE( u8,  GT_UCHAR );
    GT_TYPE( s8,  GT_CHAR );
    GT_TYPE( u16, GT_USHORT );
    GT_TYPE( s16, GT_SHORT );
    GT_TYPE( u32, GT_UINT );
    GT_TYPE( s32, GT_INT );
    GT_TYPE( u64, GT_ULONGLONG );
    GT_TYPE( s64, GT_LONGLONG );
    GT_TYPE( f32, float );
    GT_TYPE( f64, double );
 
    #if defined(GT_REAL_64)
    GT_TYPE( gtReal, f64 );
    #else
    GT_TYPE( gtReal, f32 );
    #endif
 
//не знаю почему, но VS требует ещё 1 > в следующих строках(в конце перед ;)
    //  gtString str(u"Text");
    GT_TYPE( gtString, std::basic_string<char16_t, std::char_traits<char16_t>, std::allocator<char16_t> >)>;
 
    //  gtString32 str(U"Text");
    GT_TYPE( gtString32, std::basic_string<char32_t, std::char_traits<char32_t>, std::allocator<char32_t> >)>;
    GT_TYPE( gtStringA, std::string );
 
    //  из буста только это
    #if defined(USE_BOOST)
    #define gtArray boost::container::vector
    #else
    #define gtArray std::vector
    #endif
 
    #define GT_FUNCTION __FUNCTION__
    #define GT_FILE    __FILE__
    #define GT_LINE    __LINE__
 
    #if defined(DEBUG) || defined(_DEBUG)
    #   define  GT_DEBUG
    #endif
 
    #if defined(__GNUC__) && (__GNUC__ >= 3)
    GT_TYPE( gt_va_list, __builtin_va_list );
    #elif defined(GT_COMPILER_ARMCC)
    #include <stdarg.h>
    GT_TYPE( gt_va_list, va_list );
    #else
    GT_TYPE( gt_va_list, void* );
    #endif
 
    #if defined(GT_PLATFORM_PS4)
    #   define GT_FORCE_INLINE inline __attribute__((always_inline)) 
    #elif defined(GT_COMPILER_MWERKS)
    #   define GT_FORCE_INLINE inline
    #elil defined(GT_COMPILER_INTEL)
    #   define GT_FORCE_INLINE inline
    #elif defined(GT_COMPILER_MSVC)
    #   define GT_FORCE_INLINE __forceinline
    #elif
    #   define GT_FORCE_INLINE inline
    #endif
}
 
 
 
#endif
Пока хватит. Хотел добавить ещё файл с содержанием всяких ошибок assert и прочее, но появилась кое какая идея. лучше запилю отдельный пост
Размещено в Игровой движок
Просмотров 358 Комментарии 0
Всего комментариев 0

Комментарии

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