Replaced gli with libktx for terrain tessellation height map loading
This commit is contained in:
parent
803ccd0cf4
commit
85f0e9f6b7
2 changed files with 29 additions and 16 deletions
|
|
@ -1,18 +1,19 @@
|
||||||
/*
|
/*
|
||||||
* Heightmap terrain generator
|
* Heightmap terrain generator
|
||||||
*
|
*
|
||||||
* Copyright (C) 2016 by Sascha Willems - www.saschawillems.de
|
* Copyright (C) by Sascha Willems - www.saschawillems.de
|
||||||
*
|
*
|
||||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <glm/glm.hpp>
|
#include <glm/glm.hpp>
|
||||||
#include <glm/glm.hpp>
|
#include <glm/glm.hpp>
|
||||||
#include <gli/gli.hpp>
|
|
||||||
|
|
||||||
#include "vulkan/vulkan.h"
|
#include "vulkan/vulkan.h"
|
||||||
#include "VulkanDevice.hpp"
|
#include "VulkanDevice.hpp"
|
||||||
#include "VulkanBuffer.hpp"
|
#include "VulkanBuffer.hpp"
|
||||||
|
#include <ktx.h>
|
||||||
|
#include <ktxvulkan.h>
|
||||||
|
|
||||||
namespace vks
|
namespace vks
|
||||||
{
|
{
|
||||||
|
|
@ -75,27 +76,31 @@ namespace vks
|
||||||
assert(device);
|
assert(device);
|
||||||
assert(copyQueue != VK_NULL_HANDLE);
|
assert(copyQueue != VK_NULL_HANDLE);
|
||||||
|
|
||||||
|
ktxResult result;
|
||||||
|
ktxTexture* ktxTexture;
|
||||||
#if defined(__ANDROID__)
|
#if defined(__ANDROID__)
|
||||||
AAsset* asset = AAssetManager_open(assetManager, filename.c_str(), AASSET_MODE_STREAMING);
|
AAsset* asset = AAssetManager_open(androidApp->activity->assetManager, filename.c_str(), AASSET_MODE_STREAMING);
|
||||||
assert(asset);
|
assert(asset);
|
||||||
size_t size = AAsset_getLength(asset);
|
size_t size = AAsset_getLength(asset);
|
||||||
assert(size > 0);
|
assert(size > 0);
|
||||||
void *textureData = malloc(size);
|
void *textureData = malloc(size);
|
||||||
AAsset_read(asset, textureData, size);
|
AAsset_read(asset, textureData, size);
|
||||||
AAsset_close(asset);
|
AAsset_close(asset);
|
||||||
gli::texture2d heightTex(gli::load((const char*)textureData, size));
|
result = ktxTexture_CreateFromMemory(textureData, size, KTX_TEXTURE_CREATE_LOAD_IMAGE_DATA_BIT, target);
|
||||||
free(textureData);
|
free(textureData);
|
||||||
#else
|
#else
|
||||||
gli::texture2d heightTex(gli::load(filename));
|
result = ktxTexture_CreateFromNamedFile(filename.c_str(), KTX_TEXTURE_CREATE_LOAD_IMAGE_DATA_BIT, &ktxTexture);
|
||||||
#endif
|
#endif
|
||||||
dim = static_cast<uint32_t>(heightTex.extent().x);
|
assert(result == KTX_SUCCESS);
|
||||||
|
ktx_size_t ktxSize = ktxTexture_GetImageSize(ktxTexture, 0);
|
||||||
|
ktx_uint8_t* ktxImage = ktxTexture_GetData(ktxTexture);
|
||||||
|
dim = ktxTexture->baseWidth;
|
||||||
heightdata = new uint16_t[dim * dim];
|
heightdata = new uint16_t[dim * dim];
|
||||||
memcpy(heightdata, heightTex.data(), heightTex.size());
|
memcpy(heightdata, ktxImage, ktxSize);
|
||||||
this->scale = dim / patchsize;
|
this->scale = dim / patchsize;
|
||||||
this->heightScale = scale.y;
|
ktxTexture_Destroy(ktxTexture);
|
||||||
|
|
||||||
// Generate vertices
|
// Generate vertices
|
||||||
|
|
||||||
Vertex * vertices = new Vertex[patchsize * patchsize * 4];
|
Vertex * vertices = new Vertex[patchsize * patchsize * 4];
|
||||||
|
|
||||||
const float wx = 2.0f;
|
const float wx = 2.0f;
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,6 @@
|
||||||
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
|
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
|
||||||
#include <glm/glm.hpp>
|
#include <glm/glm.hpp>
|
||||||
#include <glm/gtc/matrix_transform.hpp>
|
#include <glm/gtc/matrix_transform.hpp>
|
||||||
#include <gli/gli.hpp>
|
|
||||||
|
|
||||||
#include <vulkan/vulkan.h>
|
#include <vulkan/vulkan.h>
|
||||||
#include "vulkanexamplebase.h"
|
#include "vulkanexamplebase.h"
|
||||||
|
|
@ -25,6 +24,8 @@
|
||||||
#include "VulkanTexture.hpp"
|
#include "VulkanTexture.hpp"
|
||||||
#include "VulkanModel.hpp"
|
#include "VulkanModel.hpp"
|
||||||
#include "frustum.hpp"
|
#include "frustum.hpp"
|
||||||
|
#include <ktx.h>
|
||||||
|
#include <ktxvulkan.h>
|
||||||
|
|
||||||
#define VERTEX_BUFFER_BIND_ID 0
|
#define VERTEX_BUFFER_BIND_ID 0
|
||||||
#define ENABLE_VALIDATION false
|
#define ENABLE_VALIDATION false
|
||||||
|
|
@ -396,25 +397,32 @@ public:
|
||||||
HeightMap(std::string filename, uint32_t patchsize, AAssetManager* assetManager)
|
HeightMap(std::string filename, uint32_t patchsize, AAssetManager* assetManager)
|
||||||
#else
|
#else
|
||||||
HeightMap(std::string filename, uint32_t patchsize)
|
HeightMap(std::string filename, uint32_t patchsize)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
ktxResult result;
|
||||||
|
ktxTexture* ktxTexture;
|
||||||
#if defined(__ANDROID__)
|
#if defined(__ANDROID__)
|
||||||
AAsset* asset = AAssetManager_open(assetManager, filename.c_str(), AASSET_MODE_STREAMING);
|
AAsset* asset = AAssetManager_open(androidApp->activity->assetManager, filename.c_str(), AASSET_MODE_STREAMING);
|
||||||
assert(asset);
|
assert(asset);
|
||||||
size_t size = AAsset_getLength(asset);
|
size_t size = AAsset_getLength(asset);
|
||||||
assert(size > 0);
|
assert(size > 0);
|
||||||
void *textureData = malloc(size);
|
void *textureData = malloc(size);
|
||||||
AAsset_read(asset, textureData, size);
|
AAsset_read(asset, textureData, size);
|
||||||
AAsset_close(asset);
|
AAsset_close(asset);
|
||||||
gli::texture2d heightTex(gli::load((const char*)textureData, size));
|
result = ktxTexture_CreateFromMemory(textureData, size, KTX_TEXTURE_CREATE_LOAD_IMAGE_DATA_BIT, target);
|
||||||
free(textureData);
|
free(textureData);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
gli::texture2d heightTex(gli::load(filename));
|
result = ktxTexture_CreateFromNamedFile(filename.c_str(), KTX_TEXTURE_CREATE_LOAD_IMAGE_DATA_BIT, &ktxTexture);
|
||||||
#endif
|
#endif
|
||||||
dim = static_cast<uint32_t>(heightTex.extent().x);
|
assert(result == KTX_SUCCESS);
|
||||||
|
ktx_size_t ktxSize = ktxTexture_GetImageSize(ktxTexture, 0);
|
||||||
|
ktx_uint8_t* ktxImage = ktxTexture_GetData(ktxTexture);
|
||||||
|
dim = ktxTexture->baseWidth;
|
||||||
heightdata = new uint16_t[dim * dim];
|
heightdata = new uint16_t[dim * dim];
|
||||||
memcpy(heightdata, heightTex.data(), heightTex.size());
|
memcpy(heightdata, ktxImage, ktxSize);
|
||||||
this->scale = dim / patchsize;
|
this->scale = dim / patchsize;
|
||||||
|
ktxTexture_Destroy(ktxTexture);
|
||||||
};
|
};
|
||||||
|
|
||||||
~HeightMap()
|
~HeightMap()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue