TerraForge3D  2.3.1
3D Terrain And Landscape Generator

◆ Generate()

void GPUNoiseLayerGenerator::Generate ( ComputeKernel kernels)
virtual

Definition at line 20 of file GPUNoiseLayerGenerator.cpp.

21{
22 START_PROFILER();
23 kernels->CreateBuffer("noise_layers", CL_MEM_READ_WRITE, sizeof(GPUNoiseLayer) * noiseLayers.size() );
24 kernels->WriteBuffer("noise_layers", true, sizeof(GPUNoiseLayer) * noiseLayers.size(), noiseLayers.data());
25 int tmp = noiseLayers.size();
26 kernels->WriteBuffer("noise_layers_size", true, sizeof(int), &tmp);
27
28 if (appState->mode == ApplicationMode::TERRAIN)
29 {
30 kernels->SetKernelArg("noise_layer_terrain", 0, "mesh");
31 kernels->SetKernelArg("noise_layer_terrain", 1, "noise_layers");
32 kernels->SetKernelArg("noise_layer_terrain", 2, "noise_layers_size");
33 vc = appState->models.coreTerrain->mesh->vertexCount;
34 int ls = localSize;
35
36 while(ls > 0 && vc % ls != 0)
37 {
38 ls = ls / 2;
39 }
40
41 if(ls==0)
42 {
43 ls = 1;
44 }
45
46 kernels->ExecuteKernel("noise_layer_terrain", cl::NDRange(ls), cl::NDRange(vc));
47 }
48
49 else if (appState->mode == ApplicationMode::CUSTOM_BASE)
50 {
51 kernels->SetKernelArg("noise_layer_custom_base", 0, "mesh");
52 kernels->SetKernelArg("noise_layer_custom_base", 1, "mesh_copy");
53 kernels->SetKernelArg("noise_layer_custom_base", 2, "noise_layers");
54 kernels->SetKernelArg("noise_layer_custom_base", 3, "noise_layers_size");
55 vc = appState->models.customBase->mesh->vertexCount;
56 int ls = localSize;
57
58 while(ls > 0 && vc % ls != 0)
59 {
60 ls = ls / 2;
61 }
62
63 if(ls==0)
64 {
65 ls = 1;
66 }
67
68 kernels->ExecuteKernel("noise_layer_custom_base", cl::NDRange(ls), cl::NDRange(vc));
69 }
70
71 END_PROFILER(time);
72}