From c8aea675057a0ed74193a1673ca054eda58ea394 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Fri, 2 Oct 2015 19:09:43 -0700 Subject: [PATCH] Working on texture compatibility with Shadertoy --- libraries/gpu/src/gpu/Texture.cpp | 19 ++++++++++++++++--- .../procedural/src/procedural/Procedural.cpp | 14 +++++++++++++- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/libraries/gpu/src/gpu/Texture.cpp b/libraries/gpu/src/gpu/Texture.cpp index d358b6431d..ae6f3b740d 100755 --- a/libraries/gpu/src/gpu/Texture.cpp +++ b/libraries/gpu/src/gpu/Texture.cpp @@ -343,9 +343,22 @@ bool Texture::assignStoredMipFace(uint16 level, const Element& format, Size size } uint16 Texture::autoGenerateMips(uint16 maxMip) { - _autoGenerateMips = true; - _maxMip = std::min((uint16) (evalNumMips() - 1), maxMip); - _stamp++; + bool changed = false; + if (!_autoGenerateMips) { + changed = true; + _autoGenerateMips = true; + } + + auto newMaxMip = std::min((uint16)(evalNumMips() - 1), maxMip); + if (newMaxMip != _maxMip) { + changed = true; + _maxMip = newMaxMip;; + } + + if (changed) { + _stamp++; + } + return _maxMip; } diff --git a/libraries/procedural/src/procedural/Procedural.cpp b/libraries/procedural/src/procedural/Procedural.cpp index 18b6765d89..f5448bda5c 100644 --- a/libraries/procedural/src/procedural/Procedural.cpp +++ b/libraries/procedural/src/procedural/Procedural.cpp @@ -223,9 +223,21 @@ void Procedural::prepare(gpu::Batch& batch, const glm::vec3& position, const glm lambda(batch); } + static gpu::Sampler sampler; + static std::once_flag once; + std::call_once(once, [&] { + gpu::Sampler::Desc desc; + desc._filter = gpu::Sampler::FILTER_MIN_MAG_MIP_LINEAR; + }); + for (size_t i = 0; i < MAX_PROCEDURAL_TEXTURE_CHANNELS; ++i) { if (_channels[i] && _channels[i]->isLoaded()) { - batch.setResourceTexture(i, _channels[i]->getGPUTexture()); + auto gpuTexture = _channels[i]->getGPUTexture(); + if (gpuTexture) { + gpuTexture->setSampler(sampler); + gpuTexture->autoGenerateMips(-1); + } + batch.setResourceTexture(i, gpuTexture); } } }