Преглед на файлове

feat : deferred lighting scene start

Heedong Lee преди 4 години
родител
ревизия
75a625a767

+ 10
- 0
Samples.sln Целия файл

@@ -13,6 +13,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mesh", "Samples\Mesh\Mesh.v
13 13
 EndProject
14 14
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ComputeShader", "Samples\ComputeShader\ComputeShader.vcxproj", "{2EFDB5BA-86ED-4C3A-8473-9CF51719FD82}"
15 15
 EndProject
16
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PBRScene", "Samples\PBRScene\PBRScene.vcxproj", "{A0D955EB-B0BD-4FD1-B383-E965FBDBFFDA}"
17
+EndProject
16 18
 Global
17 19
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
18 20
 		Debug|x64 = Debug|x64
@@ -61,6 +63,14 @@ Global
61 63
 		{2EFDB5BA-86ED-4C3A-8473-9CF51719FD82}.Release|x64.Build.0 = Release|x64
62 64
 		{2EFDB5BA-86ED-4C3A-8473-9CF51719FD82}.Release|x86.ActiveCfg = Release|Win32
63 65
 		{2EFDB5BA-86ED-4C3A-8473-9CF51719FD82}.Release|x86.Build.0 = Release|Win32
66
+		{A0D955EB-B0BD-4FD1-B383-E965FBDBFFDA}.Debug|x64.ActiveCfg = Debug|x64
67
+		{A0D955EB-B0BD-4FD1-B383-E965FBDBFFDA}.Debug|x64.Build.0 = Debug|x64
68
+		{A0D955EB-B0BD-4FD1-B383-E965FBDBFFDA}.Debug|x86.ActiveCfg = Debug|Win32
69
+		{A0D955EB-B0BD-4FD1-B383-E965FBDBFFDA}.Debug|x86.Build.0 = Debug|Win32
70
+		{A0D955EB-B0BD-4FD1-B383-E965FBDBFFDA}.Release|x64.ActiveCfg = Release|x64
71
+		{A0D955EB-B0BD-4FD1-B383-E965FBDBFFDA}.Release|x64.Build.0 = Release|x64
72
+		{A0D955EB-B0BD-4FD1-B383-E965FBDBFFDA}.Release|x86.ActiveCfg = Release|Win32
73
+		{A0D955EB-B0BD-4FD1-B383-E965FBDBFFDA}.Release|x86.Build.0 = Release|Win32
64 74
 	EndGlobalSection
65 75
 	GlobalSection(SolutionProperties) = preSolution
66 76
 		HideSolutionNode = FALSE

+ 468
- 0
Samples/PBRScene/PBRScene.cpp Целия файл

@@ -0,0 +1,468 @@
1
+#include <cstddef>
2
+#include "app.h"
3
+#include "util.h"
4
+
5
+#define TINYOBJLOADER_IMPLMENTATION
6
+#include "tiny_obj_loader.h"
7
+#include <unordered_map>
8
+
9
+
10
+class SampleObjMesh
11
+{
12
+public:
13
+	struct Vertex
14
+	{
15
+		DKVector3 inPos;
16
+		DKVector3 inColor;
17
+		DKVector2 intexCoord;
18
+
19
+		int Compare(const Vertex& Other) const
20
+		{
21
+            const float pp[] = { this->inPos.x, this->inPos.y, this->inPos.z,
22
+                this->inColor.x, this->inColor.y, this->inColor.z,
23
+                this->intexCoord.x, this->intexCoord.y};
24
+            const float rr[] = { Other.inPos.x, Other.inPos.y, Other.inPos.z,
25
+                Other.inColor.x, Other.inColor.y, Other.inColor.z,
26
+                Other.intexCoord.x, Other.intexCoord.y};
27
+
28
+            for (int i = 0; i < std::size(pp); ++i)
29
+            {
30
+                auto k = pp[i] - rr[i];
31
+                if (abs(k) < 0.0001)
32
+                    continue;
33
+                if (k > 0)
34
+                    return 1;
35
+                else if (k < 0)
36
+                    return -1;
37
+            }
38
+            return 0;
39
+		}
40
+
41
+		bool operator > (const Vertex& Other) const
42
+		{
43
+			return Compare(Other) > 0;
44
+		}
45
+
46
+		bool operator < (const Vertex& Other) const
47
+		{
48
+			return Compare(Other) < 0;
49
+		}
50
+	};
51
+
52
+	SampleObjMesh()
53
+	{
54
+		vertices.Reserve(100);
55
+		indices.Reserve(100);
56
+	}
57
+
58
+	void LoadFromObjFile(const char* InPath)
59
+	{
60
+		tinyobj::attrib_t attrib;
61
+		std::vector<tinyobj::shape_t> shapes;
62
+		std::vector<tinyobj::material_t> materials;
63
+		std::string err;
64
+		if (!tinyobj::LoadObj(&attrib, &shapes, &materials, &err, InPath)) {
65
+			throw std::runtime_error(err);
66
+		}
67
+
68
+		DKMap<Vertex, uint32_t> uniqueVertices;
69
+		DKLog("Save to Container");
70
+		for (const auto& shape : shapes)
71
+		{
72
+			for (const auto& index : shape.mesh.indices)
73
+			{
74
+				Vertex vertex = {};
75
+
76
+				vertex.inPos = {
77
+					attrib.vertices[3 * index.vertex_index + 0],
78
+					attrib.vertices[3 * index.vertex_index + 1],
79
+					attrib.vertices[3 * index.vertex_index + 2]
80
+				};
81
+
82
+				if (attrib.texcoords.size())
83
+				{
84
+					vertex.intexCoord = {
85
+					attrib.texcoords[2 * index.texcoord_index + 0],
86
+					1.0f - attrib.texcoords[2 * index.texcoord_index + 1]
87
+					};
88
+				}
89
+
90
+				vertex.inColor = { 1.0f, 1.0f, 1.0f };
91
+
92
+				if (uniqueVertices.Find(vertex) == nullptr)
93
+				{
94
+					uniqueVertices.Insert(vertex, static_cast<uint32_t>(vertices.Count()));
95
+					vertices.Add(vertex);
96
+				}
97
+
98
+				indices.Add(uniqueVertices.Value(vertex));
99
+
100
+                aabb.Expand(vertex.inPos);
101
+			}
102
+		}
103
+	}
104
+
105
+	uint32_t GetVerticesCount() const {
106
+		return static_cast<uint32_t>(vertices.Count()); };
107
+	uint32_t GetIndicesCount() const {
108
+		return static_cast<uint32_t>(indices.Count()); };
109
+	const Vertex* GetVerticesData() const {
110
+		return vertices; }
111
+	const uint32_t* GetIndicesData() const {
112
+		return indices; }
113
+
114
+    DKAabb aabb;
115
+private:
116
+	DKArray<Vertex> vertices;
117
+	DKArray<uint32_t> indices;
118
+	DKSpinLock                  MeshLock;
119
+};
120
+
121
+///// Template Spealization for DKString. (for DKMap, DKSet)
122
+//template <> struct DKMapKeyComparator<SampleObjMesh::Vertex>
123
+//{
124
+//	int operator () (const DKStringW& lhs, const DKStringW& rhs) const
125
+//	{
126
+//		return lhs.Compare(rhs);
127
+//	}
128
+//};
129
+
130
+
131
+class MeshDemo : public SampleApp
132
+{
133
+    DKObject<DKWindow> window;
134
+	DKObject<DKThread> renderThread;
135
+	DKAtomicNumber32 runningRenderThread;
136
+	DKObject<SampleObjMesh> SampleMesh;
137
+
138
+public:
139
+	void LoadMesh()
140
+	{
141
+
142
+		DKLog("Loading Mesh");
143
+        DKString path = resourcePool.ResourceFilePath("meshes/chalet/chalet.obj");
144
+		SampleMesh->LoadFromObjFile(DKStringU8(path));
145
+	}
146
+
147
+    DKObject<DKTexture> LoadTexture2D(DKCommandQueue* queue, DKData* data)
148
+    {
149
+        DKObject<DKImage> image = DKImage::Create(data);
150
+        if (image)
151
+        {
152
+            DKGraphicsDevice* device = queue->Device();
153
+            DKTextureDescriptor texDesc = {};
154
+            texDesc.textureType = DKTexture::Type2D;
155
+            texDesc.pixelFormat = DKPixelFormat::RGBA8Unorm;
156
+            texDesc.width = image->Width();
157
+            texDesc.height = image->Height();
158
+            texDesc.depth = 1;
159
+            texDesc.mipmapLevels = 1;
160
+            texDesc.sampleCount = 1;
161
+            texDesc.arrayLength = 1;
162
+            texDesc.usage = DKTexture::UsageCopyDestination | DKTexture::UsageSampled;
163
+            DKObject<DKTexture> tex = device->CreateTexture(texDesc);
164
+            if (tex)
165
+            {
166
+                size_t bytesPerPixel = image->BytesPerPixel();
167
+                DKASSERT_DESC(bytesPerPixel == DKPixelFormatBytesPerPixel(texDesc.pixelFormat), "BytesPerPixel mismatch!");
168
+
169
+                uint32_t width = image->Width();
170
+                uint32_t height = image->Height();
171
+
172
+                size_t bufferLength = bytesPerPixel * width * height;
173
+                DKObject<DKGpuBuffer> stagingBuffer = device->CreateBuffer(bufferLength, DKGpuBuffer::StorageModeShared, DKCpuCacheModeReadWrite);
174
+
175
+                memcpy(stagingBuffer->Contents(), image->Contents(), bufferLength);
176
+                stagingBuffer->Flush();
177
+
178
+                DKObject<DKCommandBuffer> cb = queue->CreateCommandBuffer();
179
+                DKObject<DKCopyCommandEncoder> encoder = cb->CreateCopyCommandEncoder();
180
+                encoder->CopyFromBufferToTexture(stagingBuffer,
181
+                                                 { 0, width, height },
182
+                                                 tex,
183
+                                                 { 0,0, 0,0,0 },
184
+                                                 { width,height,1 });
185
+                encoder->EndEncoding();
186
+                cb->Commit();
187
+
188
+                DKLog("Texture created!");
189
+                return tex;
190
+            }
191
+        }
192
+        return nullptr;
193
+    }
194
+	void RenderThread(void)
195
+	{
196
+		DKObject<DKData> vertData = resourcePool.LoadResourceData("shaders/mesh.vert.spv");
197
+		DKObject<DKData> fragData = resourcePool.LoadResourceData("shaders/mesh.frag.spv");
198
+		DKShader vertShader(vertData);
199
+		DKShader fragShader(fragData);
200
+
201
+		DKObject<DKGraphicsDevice> device = DKGraphicsDevice::SharedInstance();
202
+        DKObject<DKCommandQueue> queue = device->CreateCommandQueue(DKCommandQueue::Graphics);
203
+
204
+		// create texture
205
+		DKObject<DKTexture> texture = LoadTexture2D(queue, resourcePool.LoadResourceData("meshes/chalet.png"));
206
+		// create sampler
207
+		DKSamplerDescriptor samplerDesc = {};
208
+		samplerDesc.magFilter = DKSamplerDescriptor::MinMagFilterLinear;
209
+		samplerDesc.minFilter = DKSamplerDescriptor::MinMagFilterLinear;
210
+		samplerDesc.addressModeU = DKSamplerDescriptor::AddressModeClampToEdge;
211
+		samplerDesc.addressModeV = DKSamplerDescriptor::AddressModeClampToEdge;
212
+		samplerDesc.addressModeW = DKSamplerDescriptor::AddressModeClampToEdge;
213
+		samplerDesc.maxAnisotropy = 16;
214
+
215
+		DKObject<DKSamplerState> sampler = device->CreateSamplerState(samplerDesc);
216
+
217
+        // create shaders
218
+		DKObject<DKShaderModule> vertShaderModule = device->CreateShaderModule(&vertShader);
219
+		DKObject<DKShaderModule> fragShaderModule = device->CreateShaderModule(&fragShader);
220
+
221
+		DKObject<DKShaderFunction> vertShaderFunction = vertShaderModule->CreateFunction(vertShaderModule->FunctionNames().Value(0));
222
+		DKObject<DKShaderFunction> fragShaderFunction = fragShaderModule->CreateFunction(fragShaderModule->FunctionNames().Value(0));
223
+
224
+		DKObject<DKSwapChain> swapChain = queue->CreateSwapChain(window);
225
+
226
+		DKLog("VertexFunction.VertexAttributes: %d", vertShaderFunction->StageInputAttributes().Count());
227
+		for (int i = 0; i < vertShaderFunction->StageInputAttributes().Count(); ++i)
228
+		{
229
+			const DKShaderAttribute& attr = vertShaderFunction->StageInputAttributes().Value(i);
230
+			DKLog("  --> VertexAttribute[%d]: \"%ls\" (location:%u)", i, (const wchar_t*)attr.name, attr.location);
231
+		}
232
+
233
+
234
+		uint32_t vertexBufferSize = static_cast<uint32_t>(SampleMesh->GetVerticesCount()) * sizeof(SampleObjMesh::Vertex);
235
+		uint32_t indexBufferSize = SampleMesh->GetIndicesCount() * sizeof(uint32_t);
236
+
237
+		DKObject<DKGpuBuffer> vertexBuffer = device->CreateBuffer(vertexBufferSize, DKGpuBuffer::StorageModeShared, DKCpuCacheModeReadWrite);
238
+		memcpy(vertexBuffer->Contents(), SampleMesh->GetVerticesData(), vertexBufferSize);
239
+        vertexBuffer->Flush();
240
+
241
+		DKObject<DKGpuBuffer> indexBuffer = device->CreateBuffer(indexBufferSize, DKGpuBuffer::StorageModeShared, DKCpuCacheModeReadWrite);
242
+		memcpy(indexBuffer->Contents(), SampleMesh->GetIndicesData(), indexBufferSize);
243
+        indexBuffer->Flush();
244
+
245
+		DKRenderPipelineDescriptor pipelineDescriptor;
246
+        // setup shader
247
+		pipelineDescriptor.vertexFunction = vertShaderFunction;
248
+		pipelineDescriptor.fragmentFunction = fragShaderFunction;
249
+        // setup color-attachment render-targets
250
+		pipelineDescriptor.colorAttachments.Resize(1);
251
+		pipelineDescriptor.colorAttachments.Value(0).pixelFormat = swapChain->ColorPixelFormat();
252
+        pipelineDescriptor.colorAttachments.Value(0).blendState.enabled = false;
253
+        pipelineDescriptor.colorAttachments.Value(0).blendState.sourceRGBBlendFactor = DKBlendFactor::SourceAlpha;
254
+        pipelineDescriptor.colorAttachments.Value(0).blendState.destinationRGBBlendFactor = DKBlendFactor::OneMinusSourceAlpha;
255
+        // setup depth-stencil
256
+		pipelineDescriptor.depthStencilAttachmentPixelFormat = DKPixelFormat::D32Float;
257
+        pipelineDescriptor.depthStencilDescriptor.depthWriteEnabled = true;
258
+        pipelineDescriptor.depthStencilDescriptor.depthCompareFunction = DKCompareFunctionLessEqual;
259
+        // setup vertex buffer and attributes
260
+        pipelineDescriptor.vertexDescriptor.attributes = {
261
+			{ DKVertexFormat::Float3, offsetof(SampleObjMesh::Vertex, inPos), 0, 0 },
262
+            { DKVertexFormat::Float3, offsetof(SampleObjMesh::Vertex, inColor), 0, 1 },
263
+			{ DKVertexFormat::Float2, offsetof(SampleObjMesh::Vertex, intexCoord), 0, 2 },
264
+		};
265
+		pipelineDescriptor.vertexDescriptor.layouts = {
266
+			{ DKVertexStepRate::Vertex, sizeof(SampleObjMesh::Vertex), 0 },
267
+		};
268
+        // setup topology and rasterization
269
+		pipelineDescriptor.primitiveTopology = DKPrimitiveType::Triangle;
270
+		pipelineDescriptor.frontFace = DKFrontFace::CCW;
271
+		pipelineDescriptor.triangleFillMode = DKTriangleFillMode::Fill;
272
+		pipelineDescriptor.depthClipMode = DKDepthClipMode::Clip;
273
+		pipelineDescriptor.cullMode = DKCullMode::Back;
274
+		pipelineDescriptor.rasterizationEnabled = true;
275
+
276
+		DKPipelineReflection reflection;
277
+		DKObject<DKRenderPipelineState> pipelineState = device->CreateRenderPipeline(pipelineDescriptor, &reflection);
278
+		if (pipelineState)
279
+		{
280
+            PrintPipelineReflection(&reflection, DKLogCategory::Verbose);
281
+		}
282
+
283
+        DKShaderBindingSetLayout layout;
284
+        if (1)
285
+        {
286
+            DKShaderBinding bindings[2] = {
287
+                {
288
+                    0,
289
+                    DKShader::DescriptorTypeUniformBuffer,
290
+                    1,
291
+                    nullptr
292
+                },
293
+                {
294
+                    1,
295
+                    DKShader::DescriptorTypeTextureSampler,
296
+                    1,
297
+                    nullptr
298
+                },
299
+            };
300
+            layout.bindings.Add(bindings, 2);
301
+        }
302
+        DKObject<DKShaderBindingSet> bindSet = device->CreateShaderBindingSet(layout);
303
+
304
+        struct UBO
305
+        {
306
+            DKMatrix4 projectionMatrix;
307
+            DKMatrix4 modelMatrix;
308
+            DKMatrix4 viewMatrix;
309
+        };
310
+        DKObject<DKGpuBuffer> uboBuffer = device->CreateBuffer(sizeof(UBO), DKGpuBuffer::StorageModeShared, DKCpuCacheModeReadWrite);
311
+        UBO* ubo = nullptr;
312
+        if (bindSet)
313
+        {
314
+            if (uboBuffer)
315
+            {
316
+                ubo = reinterpret_cast<UBO*>(uboBuffer->Contents());
317
+                ubo->projectionMatrix = DKMatrix4::identity;
318
+                ubo->modelMatrix = DKMatrix4::identity;
319
+                ubo->viewMatrix = DKMatrix4::identity;
320
+                uboBuffer->Flush();
321
+
322
+                //DKAffineTransform3 trans;
323
+                //trans.Multiply(DKLinearTransform3().Scale(0.5).Rotate(DKVector3(0,1,0), DKGL_PI * 0.5));
324
+                //ubo.modelMatrix.Multiply(trans.Matrix4());
325
+
326
+                //memcpy(uboBuffer->Contents(), &ubo, sizeof(ubo));
327
+                bindSet->SetBuffer(0, uboBuffer, 0, sizeof(UBO));
328
+            }
329
+
330
+            bindSet->SetTexture(1, texture);
331
+            bindSet->SetSamplerState(1, sampler);
332
+        }
333
+
334
+        DKObject<DKTexture> depthBuffer = nullptr;
335
+
336
+        DKCamera camera;
337
+        DKVector3 cameraPosition = { 0, 5, 10 };
338
+        DKVector3 cameraTartget = { 0, 0, 0 };
339
+
340
+        DKAffineTransform3 tm(DKLinearTransform3().Scale(5).Rotate(DKVector3(-1,0,0), DKGL_PI * 0.5));
341
+
342
+        DKTimer timer;
343
+		timer.Reset();
344
+
345
+		DKLog("Render thread begin");
346
+		while (!runningRenderThread.CompareAndSet(0, 0))
347
+		{
348
+			DKRenderPassDescriptor rpd = swapChain->CurrentRenderPassDescriptor();
349
+			double t = timer.Elapsed();
350
+			double waveT = (cos(t) + 1.0) * 0.5;
351
+			rpd.colorAttachments.Value(0).clearColor = DKColor(waveT, 0.0, 0.0, 0.0);
352
+
353
+            int width = rpd.colorAttachments.Value(0).renderTarget->Width();
354
+            int height = rpd.colorAttachments.Value(0).renderTarget->Height();
355
+            if (depthBuffer)
356
+            {
357
+                if (depthBuffer->Width() !=  width ||
358
+                    depthBuffer->Height() != height )
359
+                    depthBuffer = nullptr;
360
+            }
361
+            if (depthBuffer == nullptr)
362
+            {
363
+                // create depth buffer
364
+                DKTextureDescriptor texDesc = {};
365
+                texDesc.textureType = DKTexture::Type2D;
366
+                texDesc.pixelFormat = DKPixelFormat::D32Float;
367
+                texDesc.width = width;
368
+                texDesc.height = height;
369
+                texDesc.depth = 1;
370
+                texDesc.mipmapLevels = 1;
371
+                texDesc.sampleCount = 1;
372
+                texDesc.arrayLength = 1;
373
+                texDesc.usage = DKTexture::UsageRenderTarget;
374
+                depthBuffer = device->CreateTexture(texDesc);
375
+            }
376
+            rpd.depthStencilAttachment.renderTarget = depthBuffer;
377
+            rpd.depthStencilAttachment.loadAction = DKRenderPassAttachmentDescriptor::LoadActionClear;
378
+            rpd.depthStencilAttachment.storeAction = DKRenderPassAttachmentDescriptor::StoreActionDontCare;
379
+
380
+			DKObject<DKCommandBuffer> buffer = queue->CreateCommandBuffer();
381
+			DKObject<DKRenderCommandEncoder> encoder = buffer->CreateRenderCommandEncoder(rpd);
382
+			if (encoder)
383
+			{
384
+                if (bindSet && ubo)
385
+                {
386
+                    camera.SetView(cameraPosition, cameraTartget - cameraPosition, DKVector3(0, 1, 0));
387
+                    camera.SetPerspective(DKGL_DEGREE_TO_RADIAN(90), float(width)/float(height), 1, 1000);
388
+
389
+                    ubo->projectionMatrix = camera.ProjectionMatrix();
390
+                    ubo->viewMatrix = camera.ViewMatrix();
391
+
392
+                    DKQuaternion quat(DKVector3(0, 1, 0), t);
393
+                    DKAffineTransform3 trans = tm * DKAffineTransform3(quat);
394
+                    ubo->modelMatrix = trans.Matrix4();
395
+                    uboBuffer->Flush();
396
+                    bindSet->SetBuffer(0, uboBuffer, 0, sizeof(UBO));
397
+                }
398
+
399
+				encoder->SetRenderPipelineState(pipelineState);
400
+				encoder->SetVertexBuffer(vertexBuffer, 0, 0);
401
+				encoder->SetIndexBuffer(indexBuffer, 0, DKIndexType::UInt32);
402
+                encoder->SetResources(0, bindSet);
403
+				// draw scene!
404
+				encoder->DrawIndexed(SampleMesh->GetIndicesCount(), 1, 0, 0, 0);
405
+				encoder->EndEncoding();
406
+				buffer->Commit();
407
+				swapChain->Present();
408
+			}
409
+			else
410
+			{
411
+			}
412
+			DKThread::Sleep(0.01);
413
+		}
414
+		DKLog("RenderThread terminating...");
415
+	}
416
+
417
+	void OnInitialize(void) override
418
+	{
419
+        SampleApp::OnInitialize();
420
+		DKLogD("%s", DKGL_FUNCTION_NAME);
421
+
422
+        // create window
423
+        window = DKWindow::Create("DefaultWindow");
424
+        window->SetOrigin({ 0, 0 });
425
+        window->Resize({ 320, 240 });
426
+        window->Activate();
427
+
428
+        window->AddEventHandler(this, DKFunction([this](const DKWindow::WindowEvent& e)
429
+        {
430
+            if (e.type == DKWindow::WindowEvent::WindowClosed)
431
+                DKApplication::Instance()->Terminate(0);
432
+        }), NULL, NULL);
433
+
434
+        SampleMesh = DKOBJECT_NEW SampleObjMesh();
435
+
436
+		LoadMesh();
437
+
438
+		runningRenderThread = 1;
439
+		renderThread = DKThread::Create(DKFunction(this, &MeshDemo::RenderThread)->Invocation());
440
+	}
441
+	void OnTerminate(void) override
442
+	{
443
+		DKLogD("%s", DKGL_FUNCTION_NAME);
444
+
445
+		runningRenderThread = 0;
446
+		renderThread->WaitTerminate();
447
+		renderThread = NULL;
448
+        window = NULL;
449
+
450
+        SampleApp::OnTerminate();
451
+	}
452
+};
453
+
454
+
455
+#ifdef _WIN32
456
+int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
457
+					  _In_opt_ HINSTANCE hPrevInstance,
458
+					  _In_ LPWSTR    lpCmdLine,
459
+					  _In_ int       nCmdShow)
460
+#else
461
+int main(int argc, const char * argv[])
462
+#endif
463
+{
464
+    MeshDemo app;
465
+	DKPropertySet::SystemConfig().SetValue("AppDelegate", "AppDelegate");
466
+	DKPropertySet::SystemConfig().SetValue("GraphicsAPI", "Vulkan");
467
+	return app.Run();
468
+}

+ 201
- 0
Samples/PBRScene/PBRScene.vcxproj Целия файл

@@ -0,0 +1,201 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+  <ItemGroup Label="ProjectConfigurations">
4
+    <ProjectConfiguration Include="Debug|Win32">
5
+      <Configuration>Debug</Configuration>
6
+      <Platform>Win32</Platform>
7
+    </ProjectConfiguration>
8
+    <ProjectConfiguration Include="Release|Win32">
9
+      <Configuration>Release</Configuration>
10
+      <Platform>Win32</Platform>
11
+    </ProjectConfiguration>
12
+    <ProjectConfiguration Include="Debug|x64">
13
+      <Configuration>Debug</Configuration>
14
+      <Platform>x64</Platform>
15
+    </ProjectConfiguration>
16
+    <ProjectConfiguration Include="Release|x64">
17
+      <Configuration>Release</Configuration>
18
+      <Platform>x64</Platform>
19
+    </ProjectConfiguration>
20
+  </ItemGroup>
21
+  <ItemGroup>
22
+    <ClInclude Include="..\Common\app.h" />
23
+    <ClInclude Include="..\Common\util.h" />
24
+    <ClInclude Include="..\Common\Win32\Resource.h" />
25
+    <ClInclude Include="..\Common\Win32\stdafx.h" />
26
+    <ClInclude Include="..\Common\Win32\targetver.h" />
27
+    <ClInclude Include="..\Libs\tinyobjLoader\tiny_obj_loader.h" />
28
+  </ItemGroup>
29
+  <ItemGroup>
30
+    <Image Include="..\Common\Win32\SampleApp.ico" />
31
+    <Image Include="..\Common\Win32\small.ico" />
32
+  </ItemGroup>
33
+  <ItemGroup>
34
+    <ResourceCompile Include="..\Common\Win32\SampleApp.rc" />
35
+  </ItemGroup>
36
+  <ItemGroup>
37
+    <ClCompile Include="..\Common\dkgl_new.cpp" />
38
+    <ClCompile Include="..\Libs\tinyobjLoader\tiny_obj_loader.cc" />
39
+    <ClCompile Include="PBRScene.cpp" />
40
+  </ItemGroup>
41
+  <ItemGroup>
42
+    <ProjectReference Include="..\..\DK\DK_static.vcxproj">
43
+      <Project>{c7312831-a3f6-4e7d-962b-6786972f0a6a}</Project>
44
+    </ProjectReference>
45
+  </ItemGroup>
46
+  <PropertyGroup Label="Globals">
47
+    <VCProjectVersion>15.0</VCProjectVersion>
48
+    <ProjectGuid>{A0D955EB-B0BD-4FD1-B383-E965FBDBFFDA}</ProjectGuid>
49
+    <Keyword>Win32Proj</Keyword>
50
+    <RootNamespace>Texture</RootNamespace>
51
+    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
52
+  </PropertyGroup>
53
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
54
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
55
+    <ConfigurationType>Application</ConfigurationType>
56
+    <UseDebugLibraries>true</UseDebugLibraries>
57
+    <PlatformToolset>v142</PlatformToolset>
58
+    <CharacterSet>Unicode</CharacterSet>
59
+  </PropertyGroup>
60
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
61
+    <ConfigurationType>Application</ConfigurationType>
62
+    <UseDebugLibraries>false</UseDebugLibraries>
63
+    <PlatformToolset>v142</PlatformToolset>
64
+    <WholeProgramOptimization>true</WholeProgramOptimization>
65
+    <CharacterSet>Unicode</CharacterSet>
66
+  </PropertyGroup>
67
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
68
+    <ConfigurationType>Application</ConfigurationType>
69
+    <UseDebugLibraries>true</UseDebugLibraries>
70
+    <PlatformToolset>v142</PlatformToolset>
71
+    <CharacterSet>Unicode</CharacterSet>
72
+  </PropertyGroup>
73
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
74
+    <ConfigurationType>Application</ConfigurationType>
75
+    <UseDebugLibraries>false</UseDebugLibraries>
76
+    <PlatformToolset>v142</PlatformToolset>
77
+    <WholeProgramOptimization>true</WholeProgramOptimization>
78
+    <CharacterSet>Unicode</CharacterSet>
79
+  </PropertyGroup>
80
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
81
+  <ImportGroup Label="ExtensionSettings">
82
+  </ImportGroup>
83
+  <ImportGroup Label="Shared">
84
+  </ImportGroup>
85
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
86
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
87
+    <Import Project="..\..\Samples.props" />
88
+  </ImportGroup>
89
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
90
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
91
+    <Import Project="..\..\Samples.props" />
92
+  </ImportGroup>
93
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
94
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
95
+    <Import Project="..\..\Samples.props" />
96
+  </ImportGroup>
97
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
98
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
99
+    <Import Project="..\..\Samples.props" />
100
+  </ImportGroup>
101
+  <PropertyGroup Label="UserMacros" />
102
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
103
+    <LinkIncremental>true</LinkIncremental>
104
+  </PropertyGroup>
105
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
106
+    <LinkIncremental>true</LinkIncremental>
107
+  </PropertyGroup>
108
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
109
+    <LinkIncremental>false</LinkIncremental>
110
+  </PropertyGroup>
111
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
112
+    <LinkIncremental>false</LinkIncremental>
113
+  </PropertyGroup>
114
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
115
+    <ClCompile>
116
+      <WarningLevel>Level3</WarningLevel>
117
+      <Optimization>Disabled</Optimization>
118
+      <SDLCheck>true</SDLCheck>
119
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
120
+      <ConformanceMode>true</ConformanceMode>
121
+      <LanguageStandard_C>Default</LanguageStandard_C>
122
+    </ClCompile>
123
+    <Link>
124
+      <SubSystem>Windows</SubSystem>
125
+      <GenerateDebugInformation>true</GenerateDebugInformation>
126
+    </Link>
127
+    <PostBuildEvent>
128
+      <Command>echo Copying Resource Files...
129
+xcopy /Y /D /R /Q /E "$(SolutionDir)Samples\Data" "$(OutDir)Data\"
130
+</Command>
131
+    </PostBuildEvent>
132
+  </ItemDefinitionGroup>
133
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
134
+    <ClCompile>
135
+      <WarningLevel>Level3</WarningLevel>
136
+      <Optimization>Disabled</Optimization>
137
+      <SDLCheck>true</SDLCheck>
138
+      <PreprocessorDefinitions>_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
139
+      <ConformanceMode>true</ConformanceMode>
140
+      <LanguageStandard_C>Default</LanguageStandard_C>
141
+    </ClCompile>
142
+    <Link>
143
+      <SubSystem>Windows</SubSystem>
144
+      <GenerateDebugInformation>true</GenerateDebugInformation>
145
+    </Link>
146
+    <PostBuildEvent>
147
+      <Command>echo Copying Resource Files...
148
+xcopy /Y /D /R /Q /E "$(SolutionDir)Samples\Data" "$(OutDir)Data\"
149
+</Command>
150
+    </PostBuildEvent>
151
+  </ItemDefinitionGroup>
152
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
153
+    <ClCompile>
154
+      <WarningLevel>Level3</WarningLevel>
155
+      <Optimization>MaxSpeed</Optimization>
156
+      <FunctionLevelLinking>true</FunctionLevelLinking>
157
+      <IntrinsicFunctions>true</IntrinsicFunctions>
158
+      <SDLCheck>true</SDLCheck>
159
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
160
+      <ConformanceMode>true</ConformanceMode>
161
+      <LanguageStandard_C>Default</LanguageStandard_C>
162
+    </ClCompile>
163
+    <Link>
164
+      <SubSystem>Windows</SubSystem>
165
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
166
+      <OptimizeReferences>true</OptimizeReferences>
167
+      <GenerateDebugInformation>true</GenerateDebugInformation>
168
+    </Link>
169
+    <PostBuildEvent>
170
+      <Command>echo Copying Resource Files...
171
+xcopy /Y /D /R /Q /E "$(SolutionDir)Samples\Data" "$(OutDir)Data\"
172
+</Command>
173
+    </PostBuildEvent>
174
+  </ItemDefinitionGroup>
175
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
176
+    <ClCompile>
177
+      <WarningLevel>Level3</WarningLevel>
178
+      <Optimization>MaxSpeed</Optimization>
179
+      <FunctionLevelLinking>true</FunctionLevelLinking>
180
+      <IntrinsicFunctions>true</IntrinsicFunctions>
181
+      <SDLCheck>true</SDLCheck>
182
+      <PreprocessorDefinitions>NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
183
+      <ConformanceMode>true</ConformanceMode>
184
+      <LanguageStandard_C>Default</LanguageStandard_C>
185
+    </ClCompile>
186
+    <Link>
187
+      <SubSystem>Windows</SubSystem>
188
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
189
+      <OptimizeReferences>true</OptimizeReferences>
190
+      <GenerateDebugInformation>true</GenerateDebugInformation>
191
+    </Link>
192
+    <PostBuildEvent>
193
+      <Command>echo Copying Resource Files...
194
+xcopy /Y /D /R /Q /E "$(SolutionDir)Samples\Data" "$(OutDir)Data\"
195
+</Command>
196
+    </PostBuildEvent>
197
+  </ItemDefinitionGroup>
198
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
199
+  <ImportGroup Label="ExtensionTargets">
200
+  </ImportGroup>
201
+</Project>

+ 61
- 0
Samples/PBRScene/PBRScene.vcxproj.filters Целия файл

@@ -0,0 +1,61 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+  <ItemGroup>
4
+    <Filter Include="Source Files">
5
+      <UniqueIdentifier>{b5dc83ca-43a3-419d-ad59-977da7f4e408}</UniqueIdentifier>
6
+    </Filter>
7
+    <Filter Include="Common">
8
+      <UniqueIdentifier>{e5e3c3a7-54d9-4bd7-bb17-507ba17c21ff}</UniqueIdentifier>
9
+    </Filter>
10
+    <Filter Include="Common\Win32">
11
+      <UniqueIdentifier>{1e5cf7df-b5b9-4e2b-b747-f1a2d7810117}</UniqueIdentifier>
12
+    </Filter>
13
+    <Filter Include="Libs">
14
+      <UniqueIdentifier>{3ce1a1e3-391f-40d9-97b3-2d6763792f5f}</UniqueIdentifier>
15
+    </Filter>
16
+  </ItemGroup>
17
+  <ItemGroup>
18
+    <ClInclude Include="..\Common\Win32\Resource.h">
19
+      <Filter>Common\Win32</Filter>
20
+    </ClInclude>
21
+    <ClInclude Include="..\Common\Win32\stdafx.h">
22
+      <Filter>Common\Win32</Filter>
23
+    </ClInclude>
24
+    <ClInclude Include="..\Common\Win32\targetver.h">
25
+      <Filter>Common\Win32</Filter>
26
+    </ClInclude>
27
+    <ClInclude Include="..\Common\app.h">
28
+      <Filter>Common</Filter>
29
+    </ClInclude>
30
+    <ClInclude Include="..\Common\util.h">
31
+      <Filter>Common</Filter>
32
+    </ClInclude>
33
+    <ClInclude Include="..\Libs\tinyobjLoader\tiny_obj_loader.h">
34
+      <Filter>Libs</Filter>
35
+    </ClInclude>
36
+  </ItemGroup>
37
+  <ItemGroup>
38
+    <Image Include="..\Common\Win32\SampleApp.ico">
39
+      <Filter>Common\Win32</Filter>
40
+    </Image>
41
+    <Image Include="..\Common\Win32\small.ico">
42
+      <Filter>Common\Win32</Filter>
43
+    </Image>
44
+  </ItemGroup>
45
+  <ItemGroup>
46
+    <ResourceCompile Include="..\Common\Win32\SampleApp.rc">
47
+      <Filter>Common\Win32</Filter>
48
+    </ResourceCompile>
49
+  </ItemGroup>
50
+  <ItemGroup>
51
+    <ClCompile Include="..\Common\dkgl_new.cpp">
52
+      <Filter>Common</Filter>
53
+    </ClCompile>
54
+    <ClCompile Include="..\Libs\tinyobjLoader\tiny_obj_loader.cc">
55
+      <Filter>Libs</Filter>
56
+    </ClCompile>
57
+    <ClCompile Include="PBRScene.cpp">
58
+      <Filter>Source Files</Filter>
59
+    </ClCompile>
60
+  </ItemGroup>
61
+</Project>

+ 587
- 0
Samples/PBRScene/PBRScene.xcodeproj/project.pbxproj Целия файл

@@ -0,0 +1,587 @@
1
+// !$*UTF8*$!
2
+{
3
+	archiveVersion = 1;
4
+	classes = {
5
+	};
6
+	objectVersion = 46;
7
+	objects = {
8
+
9
+/* Begin PBXBuildFile section */
10
+		66DA89941DD3117F00338015 /* Mesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 844A9A801DD0C080007DCC89 /* Mesh.cpp */; };
11
+		66DA89971DD3118000338015 /* Mesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 844A9A801DD0C080007DCC89 /* Mesh.cpp */; };
12
+		8406D1D821E715E400E0EA0F /* libDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8406D1BF21E701FF00E0EA0F /* libDK.a */; };
13
+		8406D1F921E71C5500E0EA0F /* libDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8406D1C121E701FF00E0EA0F /* libDK.a */; };
14
+		841948EB1DDCBE6000E039F0 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 841948E91DDCBE5000E039F0 /* AppDelegate.m */; };
15
+		841948EF1DDCBE7B00E039F0 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 841948ED1DDCBE7500E039F0 /* AppDelegate.m */; };
16
+		8420EE201EE5BA6500A20933 /* Data in Resources */ = {isa = PBXBuildFile; fileRef = 8420EE1F1EE5BA6500A20933 /* Data */; };
17
+		8420EE211EE5BA6500A20933 /* Data in Resources */ = {isa = PBXBuildFile; fileRef = 8420EE1F1EE5BA6500A20933 /* Data */; };
18
+		844A9A851DD0C080007DCC89 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 844A9A781DD0C080007DCC89 /* Assets.xcassets */; };
19
+		844A9A8B1DD0C08F007DCC89 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 844A9A741DD0C080007DCC89 /* Assets.xcassets */; };
20
+		844A9A8D1DD0C08F007DCC89 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 844A9A761DD0C080007DCC89 /* LaunchScreen.storyboard */; };
21
+		84A81E9D226443700060BCBB /* tiny_obj_loader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 84A81E9C226443700060BCBB /* tiny_obj_loader.cc */; };
22
+		84A81E9E226443700060BCBB /* tiny_obj_loader.cc in Sources */ = {isa = PBXBuildFile; fileRef = 84A81E9C226443700060BCBB /* tiny_obj_loader.cc */; };
23
+		84A81EAF22644A7D0060BCBB /* dkgl_new.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B5FE4B20726C3600B52742 /* dkgl_new.cpp */; };
24
+		84A81EB222644A7E0060BCBB /* dkgl_new.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B5FE4B20726C3600B52742 /* dkgl_new.cpp */; };
25
+/* End PBXBuildFile section */
26
+
27
+/* Begin PBXContainerItemProxy section */
28
+		8406D1BE21E701FF00E0EA0F /* PBXContainerItemProxy */ = {
29
+			isa = PBXContainerItemProxy;
30
+			containerPortal = 840D5D3A1DDA07B2009DA369 /* DK.xcodeproj */;
31
+			proxyType = 2;
32
+			remoteGlobalIDString = 84E42A5D13AF8B4200BF31EA;
33
+			remoteInfo = DK_iOS_static;
34
+		};
35
+		8406D1C021E701FF00E0EA0F /* PBXContainerItemProxy */ = {
36
+			isa = PBXContainerItemProxy;
37
+			containerPortal = 840D5D3A1DDA07B2009DA369 /* DK.xcodeproj */;
38
+			proxyType = 2;
39
+			remoteGlobalIDString = 84E42A5C13AF8B4200BF31EA;
40
+			remoteInfo = DK_macOS_static;
41
+		};
42
+		8406D1C221E701FF00E0EA0F /* PBXContainerItemProxy */ = {
43
+			isa = PBXContainerItemProxy;
44
+			containerPortal = 840D5D3A1DDA07B2009DA369 /* DK.xcodeproj */;
45
+			proxyType = 2;
46
+			remoteGlobalIDString = 84798B7119E51CBA009378A6;
47
+			remoteInfo = DK_iOS;
48
+		};
49
+		8406D1C421E701FF00E0EA0F /* PBXContainerItemProxy */ = {
50
+			isa = PBXContainerItemProxy;
51
+			containerPortal = 840D5D3A1DDA07B2009DA369 /* DK.xcodeproj */;
52
+			proxyType = 2;
53
+			remoteGlobalIDString = 840CA4ED1928946800689BB6;
54
+			remoteInfo = DK_macOS;
55
+		};
56
+		8406D1D921E715F400E0EA0F /* PBXContainerItemProxy */ = {
57
+			isa = PBXContainerItemProxy;
58
+			containerPortal = 840D5D3A1DDA07B2009DA369 /* DK.xcodeproj */;
59
+			proxyType = 1;
60
+			remoteGlobalIDString = 84C5F9EC13013FDD005F4449;
61
+			remoteInfo = DK_iOS_static;
62
+		};
63
+		8406D1DB21E715FD00E0EA0F /* PBXContainerItemProxy */ = {
64
+			isa = PBXContainerItemProxy;
65
+			containerPortal = 840D5D3A1DDA07B2009DA369 /* DK.xcodeproj */;
66
+			proxyType = 1;
67
+			remoteGlobalIDString = D2AAC045055464E500DB518D;
68
+			remoteInfo = DK_macOS_static;
69
+		};
70
+/* End PBXContainerItemProxy section */
71
+
72
+/* Begin PBXFileReference section */
73
+		840D5D3A1DDA07B2009DA369 /* DK.xcodeproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "wrapper.pb-project"; name = DK.xcodeproj; path = ../../DK/DK.xcodeproj; sourceTree = "<group>"; };
74
+		841948E81DDCBE5000E039F0 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
75
+		841948E91DDCBE5000E039F0 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
76
+		841948EC1DDCBE7500E039F0 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
77
+		841948ED1DDCBE7500E039F0 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
78
+		8420EE1F1EE5BA6500A20933 /* Data */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Data; path = ../Data; sourceTree = "<group>"; };
79
+		844A9A441DD0BCFD007DCC89 /* Mesh_macOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Mesh_macOS.app; sourceTree = BUILT_PRODUCTS_DIR; };
80
+		844A9A5C1DD0BEDD007DCC89 /* Mesh_iOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Mesh_iOS.app; sourceTree = BUILT_PRODUCTS_DIR; };
81
+		844A9A741DD0C080007DCC89 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
82
+		844A9A751DD0C080007DCC89 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
83
+		844A9A761DD0C080007DCC89 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; };
84
+		844A9A781DD0C080007DCC89 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
85
+		844A9A791DD0C080007DCC89 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
86
+		844A9A7B1DD0C080007DCC89 /* Resource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Resource.h; sourceTree = "<group>"; };
87
+		844A9A7C1DD0C080007DCC89 /* small.ico */ = {isa = PBXFileReference; lastKnownFileType = image.ico; path = small.ico; sourceTree = "<group>"; };
88
+		844A9A7D1DD0C080007DCC89 /* targetver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = targetver.h; sourceTree = "<group>"; };
89
+		844A9A7E1DD0C080007DCC89 /* SampleApp.ico */ = {isa = PBXFileReference; lastKnownFileType = image.ico; path = SampleApp.ico; sourceTree = "<group>"; };
90
+		844A9A7F1DD0C080007DCC89 /* SampleApp.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SampleApp.rc; sourceTree = "<group>"; };
91
+		844A9A801DD0C080007DCC89 /* Mesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Mesh.cpp; sourceTree = "<group>"; };
92
+		84A81E9C226443700060BCBB /* tiny_obj_loader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tiny_obj_loader.cc; path = ../Libs/tinyobjLoader/tiny_obj_loader.cc; sourceTree = "<group>"; };
93
+		84B5FE4B20726C3600B52742 /* dkgl_new.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dkgl_new.cpp; sourceTree = "<group>"; };
94
+		84B81E9021E6FF8400E0C5FF /* app.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = app.h; sourceTree = "<group>"; };
95
+		84B81E9121E6FF8400E0C5FF /* util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = util.h; sourceTree = "<group>"; };
96
+/* End PBXFileReference section */
97
+
98
+/* Begin PBXFrameworksBuildPhase section */
99
+		844A9A411DD0BCFD007DCC89 /* Frameworks */ = {
100
+			isa = PBXFrameworksBuildPhase;
101
+			buildActionMask = 2147483647;
102
+			files = (
103
+				8406D1F921E71C5500E0EA0F /* libDK.a in Frameworks */,
104
+			);
105
+			runOnlyForDeploymentPostprocessing = 0;
106
+		};
107
+		844A9A591DD0BEDD007DCC89 /* Frameworks */ = {
108
+			isa = PBXFrameworksBuildPhase;
109
+			buildActionMask = 2147483647;
110
+			files = (
111
+				8406D1D821E715E400E0EA0F /* libDK.a in Frameworks */,
112
+			);
113
+			runOnlyForDeploymentPostprocessing = 0;
114
+		};
115
+/* End PBXFrameworksBuildPhase section */
116
+
117
+/* Begin PBXGroup section */
118
+		66DA89141DD1887A00338015 /* Frameworks */ = {
119
+			isa = PBXGroup;
120
+			children = (
121
+			);
122
+			name = Frameworks;
123
+			sourceTree = "<group>";
124
+		};
125
+		8406D1B821E701FF00E0EA0F /* Products */ = {
126
+			isa = PBXGroup;
127
+			children = (
128
+				8406D1BF21E701FF00E0EA0F /* libDK.a */,
129
+				8406D1C121E701FF00E0EA0F /* libDK.a */,
130
+				8406D1C321E701FF00E0EA0F /* DK.framework */,
131
+				8406D1C521E701FF00E0EA0F /* DK.framework */,
132
+			);
133
+			name = Products;
134
+			sourceTree = "<group>";
135
+		};
136
+		844A9A3B1DD0BCFD007DCC89 = {
137
+			isa = PBXGroup;
138
+			children = (
139
+				840D5D3A1DDA07B2009DA369 /* DK.xcodeproj */,
140
+				66DA89141DD1887A00338015 /* Frameworks */,
141
+				844A9A451DD0BCFD007DCC89 /* Products */,
142
+				84B81E8F21E6FF4700E0C5FF /* Common */,
143
+				8420EE1F1EE5BA6500A20933 /* Data */,
144
+				844A9A461DD0BCFD007DCC89 /* Source Files */,
145
+			);
146
+			sourceTree = "<group>";
147
+		};
148
+		844A9A451DD0BCFD007DCC89 /* Products */ = {
149
+			isa = PBXGroup;
150
+			children = (
151
+				844A9A441DD0BCFD007DCC89 /* Mesh_macOS.app */,
152
+				844A9A5C1DD0BEDD007DCC89 /* Mesh_iOS.app */,
153
+			);
154
+			name = Products;
155
+			sourceTree = "<group>";
156
+		};
157
+		844A9A461DD0BCFD007DCC89 /* Source Files */ = {
158
+			isa = PBXGroup;
159
+			children = (
160
+				84A81E9C226443700060BCBB /* tiny_obj_loader.cc */,
161
+				844A9A801DD0C080007DCC89 /* Mesh.cpp */,
162
+			);
163
+			name = "Source Files";
164
+			sourceTree = "<group>";
165
+		};
166
+		844A9A731DD0C080007DCC89 /* iOS */ = {
167
+			isa = PBXGroup;
168
+			children = (
169
+				841948E81DDCBE5000E039F0 /* AppDelegate.h */,
170
+				841948E91DDCBE5000E039F0 /* AppDelegate.m */,
171
+				844A9A741DD0C080007DCC89 /* Assets.xcassets */,
172
+				844A9A751DD0C080007DCC89 /* Info.plist */,
173
+				844A9A761DD0C080007DCC89 /* LaunchScreen.storyboard */,
174
+			);
175
+			path = iOS;
176
+			sourceTree = "<group>";
177
+		};
178
+		844A9A771DD0C080007DCC89 /* macOS */ = {
179
+			isa = PBXGroup;
180
+			children = (
181
+				841948EC1DDCBE7500E039F0 /* AppDelegate.h */,
182
+				841948ED1DDCBE7500E039F0 /* AppDelegate.m */,
183
+				844A9A781DD0C080007DCC89 /* Assets.xcassets */,
184
+				844A9A791DD0C080007DCC89 /* Info.plist */,
185
+			);
186
+			path = macOS;
187
+			sourceTree = "<group>";
188
+		};
189
+		844A9A7A1DD0C080007DCC89 /* Win32 */ = {
190
+			isa = PBXGroup;
191
+			children = (
192
+				844A9A7B1DD0C080007DCC89 /* Resource.h */,
193
+				844A9A7E1DD0C080007DCC89 /* SampleApp.ico */,
194
+				844A9A7F1DD0C080007DCC89 /* SampleApp.rc */,
195
+				844A9A7C1DD0C080007DCC89 /* small.ico */,
196
+				844A9A7D1DD0C080007DCC89 /* targetver.h */,
197
+			);
198
+			path = Win32;
199
+			sourceTree = "<group>";
200
+		};
201
+		84B81E8F21E6FF4700E0C5FF /* Common */ = {
202
+			isa = PBXGroup;
203
+			children = (
204
+				84B5FE4B20726C3600B52742 /* dkgl_new.cpp */,
205
+				84B81E9021E6FF8400E0C5FF /* app.h */,
206
+				84B81E9121E6FF8400E0C5FF /* util.h */,
207
+				844A9A731DD0C080007DCC89 /* iOS */,
208
+				844A9A771DD0C080007DCC89 /* macOS */,
209
+				844A9A7A1DD0C080007DCC89 /* Win32 */,
210
+			);
211
+			name = Common;
212
+			path = ../Common;
213
+			sourceTree = "<group>";
214
+		};
215
+/* End PBXGroup section */
216
+
217
+/* Begin PBXNativeTarget section */
218
+		844A9A431DD0BCFD007DCC89 /* Mesh_macOS */ = {
219
+			isa = PBXNativeTarget;
220
+			buildConfigurationList = 844A9A551DD0BCFD007DCC89 /* Build configuration list for PBXNativeTarget "Mesh_macOS" */;
221
+			buildPhases = (
222
+				844A9A401DD0BCFD007DCC89 /* Sources */,
223
+				844A9A411DD0BCFD007DCC89 /* Frameworks */,
224
+				844A9A421DD0BCFD007DCC89 /* Resources */,
225
+			);
226
+			buildRules = (
227
+			);
228
+			dependencies = (
229
+				8406D1DC21E715FD00E0EA0F /* PBXTargetDependency */,
230
+			);
231
+			name = Mesh_macOS;
232
+			productName = TestApp1;
233
+			productReference = 844A9A441DD0BCFD007DCC89 /* Mesh_macOS.app */;
234
+			productType = "com.apple.product-type.application";
235
+		};
236
+		844A9A5B1DD0BEDD007DCC89 /* Mesh_iOS */ = {
237
+			isa = PBXNativeTarget;
238
+			buildConfigurationList = 844A9A701DD0BEDD007DCC89 /* Build configuration list for PBXNativeTarget "Mesh_iOS" */;
239
+			buildPhases = (
240
+				844A9A581DD0BEDD007DCC89 /* Sources */,
241
+				844A9A591DD0BEDD007DCC89 /* Frameworks */,
242
+				844A9A5A1DD0BEDD007DCC89 /* Resources */,
243
+			);
244
+			buildRules = (
245
+			);
246
+			dependencies = (
247
+				8406D1DA21E715F400E0EA0F /* PBXTargetDependency */,
248
+			);
249
+			name = Mesh_iOS;
250
+			productName = TestApp1_iOS;
251
+			productReference = 844A9A5C1DD0BEDD007DCC89 /* Mesh_iOS.app */;
252
+			productType = "com.apple.product-type.application";
253
+		};
254
+/* End PBXNativeTarget section */
255
+
256
+/* Begin PBXProject section */
257
+		844A9A3C1DD0BCFD007DCC89 /* Project object */ = {
258
+			isa = PBXProject;
259
+			attributes = {
260
+				LastUpgradeCheck = 0810;
261
+				ORGANIZATIONNAME = icondb;
262
+				TargetAttributes = {
263
+					844A9A431DD0BCFD007DCC89 = {
264
+						CreatedOnToolsVersion = 8.1;
265
+						ProvisioningStyle = Manual;
266
+					};
267
+					844A9A5B1DD0BEDD007DCC89 = {
268
+						CreatedOnToolsVersion = 8.1;
269
+						DevelopmentTeam = F599L375TZ;
270
+						ProvisioningStyle = Automatic;
271
+					};
272
+				};
273
+			};
274
+			buildConfigurationList = 844A9A3F1DD0BCFD007DCC89 /* Build configuration list for PBXProject "Mesh" */;
275
+			compatibilityVersion = "Xcode 3.2";
276
+			developmentRegion = English;
277
+			hasScannedForEncodings = 0;
278
+			knownRegions = (
279
+				English,
280
+				en,
281
+				Base,
282
+			);
283
+			mainGroup = 844A9A3B1DD0BCFD007DCC89;
284
+			productRefGroup = 844A9A451DD0BCFD007DCC89 /* Products */;
285
+			projectDirPath = "";
286
+			projectReferences = (
287
+				{
288
+					ProductGroup = 8406D1B821E701FF00E0EA0F /* Products */;
289
+					ProjectRef = 840D5D3A1DDA07B2009DA369 /* DK.xcodeproj */;
290
+				},
291
+			);
292
+			projectRoot = "";
293
+			targets = (
294
+				844A9A431DD0BCFD007DCC89 /* Mesh_macOS */,
295
+				844A9A5B1DD0BEDD007DCC89 /* Mesh_iOS */,
296
+			);
297
+		};
298
+/* End PBXProject section */
299
+
300
+/* Begin PBXReferenceProxy section */
301
+		8406D1BF21E701FF00E0EA0F /* libDK.a */ = {
302
+			isa = PBXReferenceProxy;
303
+			fileType = archive.ar;
304
+			path = libDK.a;
305
+			remoteRef = 8406D1BE21E701FF00E0EA0F /* PBXContainerItemProxy */;
306
+			sourceTree = BUILT_PRODUCTS_DIR;
307
+		};
308
+		8406D1C121E701FF00E0EA0F /* libDK.a */ = {
309
+			isa = PBXReferenceProxy;
310
+			fileType = archive.ar;
311
+			path = libDK.a;
312
+			remoteRef = 8406D1C021E701FF00E0EA0F /* PBXContainerItemProxy */;
313
+			sourceTree = BUILT_PRODUCTS_DIR;
314
+		};
315
+		8406D1C321E701FF00E0EA0F /* DK.framework */ = {
316
+			isa = PBXReferenceProxy;
317
+			fileType = wrapper.framework;
318
+			path = DK.framework;
319
+			remoteRef = 8406D1C221E701FF00E0EA0F /* PBXContainerItemProxy */;
320
+			sourceTree = BUILT_PRODUCTS_DIR;
321
+		};
322
+		8406D1C521E701FF00E0EA0F /* DK.framework */ = {
323
+			isa = PBXReferenceProxy;
324
+			fileType = wrapper.framework;
325
+			path = DK.framework;
326
+			remoteRef = 8406D1C421E701FF00E0EA0F /* PBXContainerItemProxy */;
327
+			sourceTree = BUILT_PRODUCTS_DIR;
328
+		};
329
+/* End PBXReferenceProxy section */
330
+
331
+/* Begin PBXResourcesBuildPhase section */
332
+		844A9A421DD0BCFD007DCC89 /* Resources */ = {
333
+			isa = PBXResourcesBuildPhase;
334
+			buildActionMask = 2147483647;
335
+			files = (
336
+				8420EE201EE5BA6500A20933 /* Data in Resources */,
337
+				844A9A851DD0C080007DCC89 /* Assets.xcassets in Resources */,
338
+			);
339
+			runOnlyForDeploymentPostprocessing = 0;
340
+		};
341
+		844A9A5A1DD0BEDD007DCC89 /* Resources */ = {
342
+			isa = PBXResourcesBuildPhase;
343
+			buildActionMask = 2147483647;
344
+			files = (
345
+				844A9A8D1DD0C08F007DCC89 /* LaunchScreen.storyboard in Resources */,
346
+				844A9A8B1DD0C08F007DCC89 /* Assets.xcassets in Resources */,
347
+				8420EE211EE5BA6500A20933 /* Data in Resources */,
348
+			);
349
+			runOnlyForDeploymentPostprocessing = 0;
350
+		};
351
+/* End PBXResourcesBuildPhase section */
352
+
353
+/* Begin PBXSourcesBuildPhase section */
354
+		844A9A401DD0BCFD007DCC89 /* Sources */ = {
355
+			isa = PBXSourcesBuildPhase;
356
+			buildActionMask = 2147483647;
357
+			files = (
358
+				84A81EAF22644A7D0060BCBB /* dkgl_new.cpp in Sources */,
359
+				841948EF1DDCBE7B00E039F0 /* AppDelegate.m in Sources */,
360
+				84A81E9D226443700060BCBB /* tiny_obj_loader.cc in Sources */,
361
+				66DA89941DD3117F00338015 /* Mesh.cpp in Sources */,
362
+			);
363
+			runOnlyForDeploymentPostprocessing = 0;
364
+		};
365
+		844A9A581DD0BEDD007DCC89 /* Sources */ = {
366
+			isa = PBXSourcesBuildPhase;
367
+			buildActionMask = 2147483647;
368
+			files = (
369
+				84A81EB222644A7E0060BCBB /* dkgl_new.cpp in Sources */,
370
+				841948EB1DDCBE6000E039F0 /* AppDelegate.m in Sources */,
371
+				84A81E9E226443700060BCBB /* tiny_obj_loader.cc in Sources */,
372
+				66DA89971DD3118000338015 /* Mesh.cpp in Sources */,
373
+			);
374
+			runOnlyForDeploymentPostprocessing = 0;
375
+		};
376
+/* End PBXSourcesBuildPhase section */
377
+
378
+/* Begin PBXTargetDependency section */
379
+		8406D1DA21E715F400E0EA0F /* PBXTargetDependency */ = {
380
+			isa = PBXTargetDependency;
381
+			name = DK_iOS_static;
382
+			targetProxy = 8406D1D921E715F400E0EA0F /* PBXContainerItemProxy */;
383
+		};
384
+		8406D1DC21E715FD00E0EA0F /* PBXTargetDependency */ = {
385
+			isa = PBXTargetDependency;
386
+			name = DK_macOS_static;
387
+			targetProxy = 8406D1DB21E715FD00E0EA0F /* PBXContainerItemProxy */;
388
+		};
389
+/* End PBXTargetDependency section */
390
+
391
+/* Begin XCBuildConfiguration section */
392
+		844A9A531DD0BCFD007DCC89 /* Debug */ = {
393
+			isa = XCBuildConfiguration;
394
+			buildSettings = {
395
+				ALWAYS_SEARCH_USER_PATHS = NO;
396
+				CLANG_ANALYZER_NONNULL = YES;
397
+				CLANG_CXX_LANGUAGE_STANDARD = "c++17";
398
+				CLANG_CXX_LIBRARY = "libc++";
399
+				CLANG_ENABLE_MODULES = YES;
400
+				CLANG_ENABLE_OBJC_ARC = YES;
401
+				CLANG_WARN_BOOL_CONVERSION = YES;
402
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
403
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
404
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
405
+				CLANG_WARN_EMPTY_BODY = YES;
406
+				CLANG_WARN_ENUM_CONVERSION = YES;
407
+				CLANG_WARN_INFINITE_RECURSION = YES;
408
+				CLANG_WARN_INT_CONVERSION = YES;
409
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
410
+				CLANG_WARN_SUSPICIOUS_MOVES = YES;
411
+				CLANG_WARN_UNREACHABLE_CODE = YES;
412
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
413
+				CODE_SIGN_IDENTITY = "";
414
+				COPY_PHASE_STRIP = NO;
415
+				DEBUG_INFORMATION_FORMAT = dwarf;
416
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
417
+				ENABLE_TESTABILITY = YES;
418
+				GCC_C_LANGUAGE_STANDARD = gnu99;
419
+				GCC_DYNAMIC_NO_PIC = NO;
420
+				GCC_NO_COMMON_BLOCKS = YES;
421
+				GCC_OPTIMIZATION_LEVEL = 0;
422
+				GCC_PREPROCESSOR_DEFINITIONS = (
423
+					DKGL_STATIC,
424
+					"DEBUG=1",
425
+					"$(inherited)",
426
+				);
427
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
428
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
429
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
430
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
431
+				GCC_WARN_UNUSED_FUNCTION = YES;
432
+				GCC_WARN_UNUSED_VARIABLE = YES;
433
+				HEADER_SEARCH_PATHS = (
434
+					../Common,
435
+					../../DK,
436
+				);
437
+				MTL_ENABLE_DEBUG_INFO = YES;
438
+				ONLY_ACTIVE_ARCH = NO;
439
+				SDKROOT = macosx;
440
+			};
441
+			name = Debug;
442
+		};
443
+		844A9A541DD0BCFD007DCC89 /* Release */ = {
444
+			isa = XCBuildConfiguration;
445
+			buildSettings = {
446
+				ALWAYS_SEARCH_USER_PATHS = NO;
447
+				CLANG_ANALYZER_NONNULL = YES;
448
+				CLANG_CXX_LANGUAGE_STANDARD = "c++17";
449
+				CLANG_CXX_LIBRARY = "libc++";
450
+				CLANG_ENABLE_MODULES = YES;
451
+				CLANG_ENABLE_OBJC_ARC = YES;
452
+				CLANG_WARN_BOOL_CONVERSION = YES;
453
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
454
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
455
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
456
+				CLANG_WARN_EMPTY_BODY = YES;
457
+				CLANG_WARN_ENUM_CONVERSION = YES;
458
+				CLANG_WARN_INFINITE_RECURSION = YES;
459
+				CLANG_WARN_INT_CONVERSION = YES;
460
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
461
+				CLANG_WARN_SUSPICIOUS_MOVES = YES;
462
+				CLANG_WARN_UNREACHABLE_CODE = YES;
463
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
464
+				CODE_SIGN_IDENTITY = "";
465
+				COPY_PHASE_STRIP = NO;
466
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
467
+				ENABLE_NS_ASSERTIONS = NO;
468
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
469
+				GCC_C_LANGUAGE_STANDARD = gnu99;
470
+				GCC_NO_COMMON_BLOCKS = YES;
471
+				GCC_PREPROCESSOR_DEFINITIONS = "DKGL_STATIC=1";
472
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
473
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
474
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
475
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
476
+				GCC_WARN_UNUSED_FUNCTION = YES;
477
+				GCC_WARN_UNUSED_VARIABLE = YES;
478
+				HEADER_SEARCH_PATHS = (
479
+					../Common,
480
+					../../DK,
481
+				);
482
+				MTL_ENABLE_DEBUG_INFO = NO;
483
+				SDKROOT = macosx;
484
+			};
485
+			name = Release;
486
+		};
487
+		844A9A561DD0BCFD007DCC89 /* Debug */ = {
488
+			isa = XCBuildConfiguration;
489
+			buildSettings = {
490
+				ARCHS = "$(ARCHS_STANDARD)";
491
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
492
+				COMBINE_HIDPI_IMAGES = YES;
493
+				INFOPLIST_FILE = "$(SRCROOT)/../Common/macOS/Info.plist";
494
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
495
+				PRODUCT_BUNDLE_IDENTIFIER = "com.palcube.triangle-macos";
496
+				PRODUCT_NAME = "$(TARGET_NAME)";
497
+				SDKROOT = macosx;
498
+			};
499
+			name = Debug;
500
+		};
501
+		844A9A571DD0BCFD007DCC89 /* Release */ = {
502
+			isa = XCBuildConfiguration;
503
+			buildSettings = {
504
+				ARCHS = "$(ARCHS_STANDARD)";
505
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
506
+				COMBINE_HIDPI_IMAGES = YES;
507
+				INFOPLIST_FILE = "$(SRCROOT)/../Common/macOS/Info.plist";
508
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
509
+				PRODUCT_BUNDLE_IDENTIFIER = "com.palcube.triangle-macos";
510
+				PRODUCT_NAME = "$(TARGET_NAME)";
511
+				SDKROOT = macosx;
512
+			};
513
+			name = Release;
514
+		};
515
+		844A9A711DD0BEDD007DCC89 /* Debug */ = {
516
+			isa = XCBuildConfiguration;
517
+			buildSettings = {
518
+				ARCHS = "$(ARCHS_STANDARD)";
519
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
520
+				CODE_SIGN_IDENTITY = "iPhone Developer";
521
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
522
+				CODE_SIGN_STYLE = Automatic;
523
+				DEVELOPMENT_TEAM = F599L375TZ;
524
+				INFOPLIST_FILE = "$(SRCROOT)/../Common/iOS/Info.plist";
525
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
526
+				PRODUCT_BUNDLE_IDENTIFIER = "com.palcube.triangle-iOS";
527
+				PRODUCT_NAME = "$(TARGET_NAME)";
528
+				PROVISIONING_PROFILE_SPECIFIER = "";
529
+				SDKROOT = iphoneos;
530
+				TARGETED_DEVICE_FAMILY = "1,2";
531
+			};
532
+			name = Debug;
533
+		};
534
+		844A9A721DD0BEDD007DCC89 /* Release */ = {
535
+			isa = XCBuildConfiguration;
536
+			buildSettings = {
537
+				ARCHS = "$(ARCHS_STANDARD)";
538
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
539
+				CODE_SIGN_IDENTITY = "iPhone Developer";
540
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
541
+				CODE_SIGN_STYLE = Automatic;
542
+				DEVELOPMENT_TEAM = F599L375TZ;
543
+				INFOPLIST_FILE = "$(SRCROOT)/../Common/iOS/Info.plist";
544
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
545
+				PRODUCT_BUNDLE_IDENTIFIER = "com.palcube.triangle-iOS";
546
+				PRODUCT_NAME = "$(TARGET_NAME)";
547
+				PROVISIONING_PROFILE_SPECIFIER = "";
548
+				SDKROOT = iphoneos;
549
+				TARGETED_DEVICE_FAMILY = "1,2";
550
+				VALIDATE_PRODUCT = YES;
551
+			};
552
+			name = Release;
553
+		};
554
+/* End XCBuildConfiguration section */
555
+
556
+/* Begin XCConfigurationList section */
557
+		844A9A3F1DD0BCFD007DCC89 /* Build configuration list for PBXProject "Mesh" */ = {
558
+			isa = XCConfigurationList;
559
+			buildConfigurations = (
560
+				844A9A531DD0BCFD007DCC89 /* Debug */,
561
+				844A9A541DD0BCFD007DCC89 /* Release */,
562
+			);
563
+			defaultConfigurationIsVisible = 0;
564
+			defaultConfigurationName = Release;
565
+		};
566
+		844A9A551DD0BCFD007DCC89 /* Build configuration list for PBXNativeTarget "Mesh_macOS" */ = {
567
+			isa = XCConfigurationList;
568
+			buildConfigurations = (
569
+				844A9A561DD0BCFD007DCC89 /* Debug */,
570
+				844A9A571DD0BCFD007DCC89 /* Release */,
571
+			);
572
+			defaultConfigurationIsVisible = 0;
573
+			defaultConfigurationName = Release;
574
+		};
575
+		844A9A701DD0BEDD007DCC89 /* Build configuration list for PBXNativeTarget "Mesh_iOS" */ = {
576
+			isa = XCConfigurationList;
577
+			buildConfigurations = (
578
+				844A9A711DD0BEDD007DCC89 /* Debug */,
579
+				844A9A721DD0BEDD007DCC89 /* Release */,
580
+			);
581
+			defaultConfigurationIsVisible = 0;
582
+			defaultConfigurationName = Release;
583
+		};
584
+/* End XCConfigurationList section */
585
+	};
586
+	rootObject = 844A9A3C1DD0BCFD007DCC89 /* Project object */;
587
+}

+ 0
- 0
Samples/PBRScene/SampleLevel.cpp Целия файл


+ 0
- 0
Samples/PBRScene/SampleLevel.h Целия файл