mirror of
https://github.com/overte-org/overte.git
synced 2025-08-07 18:10:37 +02:00
Merge branch 'brown' of github.com:samcake/hifi into tablet-ui
This commit is contained in:
commit
a3fce13a04
9 changed files with 24 additions and 27 deletions
|
@ -8,8 +8,6 @@
|
||||||
|
|
||||||
#include "GLTexture.h"
|
#include "GLTexture.h"
|
||||||
|
|
||||||
#include <NumericalConstants.h>
|
|
||||||
|
|
||||||
#include "GLBackend.h"
|
#include "GLBackend.h"
|
||||||
|
|
||||||
using namespace gpu;
|
using namespace gpu;
|
||||||
|
|
|
@ -72,7 +72,7 @@ GL41Texture::GL41Texture(const std::weak_ptr<GLBackend>& backend, const Texture&
|
||||||
incrementTextureGPUCount();
|
incrementTextureGPUCount();
|
||||||
withPreservedTexture([&] {
|
withPreservedTexture([&] {
|
||||||
GLTexelFormat texelFormat = GLTexelFormat::evalGLTexelFormat(_gpuObject.getTexelFormat(), _gpuObject.getStoredMipFormat());
|
GLTexelFormat texelFormat = GLTexelFormat::evalGLTexelFormat(_gpuObject.getTexelFormat(), _gpuObject.getStoredMipFormat());
|
||||||
auto numMips = _gpuObject.evalNumMips();
|
auto numMips = _gpuObject.getNumMipLevels();
|
||||||
for (uint16_t mipLevel = 0; mipLevel < numMips; ++mipLevel) {
|
for (uint16_t mipLevel = 0; mipLevel < numMips; ++mipLevel) {
|
||||||
// Get the mip level dimensions, accounting for the downgrade level
|
// Get the mip level dimensions, accounting for the downgrade level
|
||||||
Vec3u dimensions = _gpuObject.evalMipDimensions(mipLevel);
|
Vec3u dimensions = _gpuObject.evalMipDimensions(mipLevel);
|
||||||
|
|
|
@ -186,8 +186,10 @@ GL45FixedAllocationTexture::~GL45FixedAllocationTexture() {
|
||||||
void GL45FixedAllocationTexture::allocateStorage() const {
|
void GL45FixedAllocationTexture::allocateStorage() const {
|
||||||
const GLTexelFormat texelFormat = GLTexelFormat::evalGLTexelFormat(_gpuObject.getTexelFormat());
|
const GLTexelFormat texelFormat = GLTexelFormat::evalGLTexelFormat(_gpuObject.getTexelFormat());
|
||||||
const auto dimensions = _gpuObject.getDimensions();
|
const auto dimensions = _gpuObject.getDimensions();
|
||||||
const auto mips = _gpuObject.evalNumMips();
|
const auto mips = _gpuObject.getNumMipLevels();
|
||||||
|
|
||||||
glTextureStorage2D(_id, mips, texelFormat.internalFormat, dimensions.x, dimensions.y);
|
glTextureStorage2D(_id, mips, texelFormat.internalFormat, dimensions.x, dimensions.y);
|
||||||
|
glTextureParameteri(_id, GL_TEXTURE_BASE_LEVEL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GL45FixedAllocationTexture::syncSampler() const {
|
void GL45FixedAllocationTexture::syncSampler() const {
|
||||||
|
@ -214,7 +216,7 @@ GL45AttachmentTexture::~GL45AttachmentTexture() {
|
||||||
using GL45StrictResourceTexture = GL45Backend::GL45StrictResourceTexture;
|
using GL45StrictResourceTexture = GL45Backend::GL45StrictResourceTexture;
|
||||||
|
|
||||||
GL45StrictResourceTexture::GL45StrictResourceTexture(const std::weak_ptr<GLBackend>& backend, const Texture& texture) : GL45FixedAllocationTexture(backend, texture) {
|
GL45StrictResourceTexture::GL45StrictResourceTexture(const std::weak_ptr<GLBackend>& backend, const Texture& texture) : GL45FixedAllocationTexture(backend, texture) {
|
||||||
auto mipLevels = _gpuObject.evalNumMips();
|
auto mipLevels = _gpuObject.getNumMipLevels();
|
||||||
for (uint16_t sourceMip = 0; sourceMip < mipLevels; ++sourceMip) {
|
for (uint16_t sourceMip = 0; sourceMip < mipLevels; ++sourceMip) {
|
||||||
uint16_t targetMip = sourceMip;
|
uint16_t targetMip = sourceMip;
|
||||||
size_t maxFace = GLTexture::getFaceCount(_target);
|
size_t maxFace = GLTexture::getFaceCount(_target);
|
||||||
|
|
|
@ -461,10 +461,10 @@ void GL45ResourceTexture::allocateStorage(uint16 allocatedMip) {
|
||||||
_allocatedMip = allocatedMip;
|
_allocatedMip = allocatedMip;
|
||||||
const GLTexelFormat texelFormat = GLTexelFormat::evalGLTexelFormat(_gpuObject.getTexelFormat());
|
const GLTexelFormat texelFormat = GLTexelFormat::evalGLTexelFormat(_gpuObject.getTexelFormat());
|
||||||
const auto dimensions = _gpuObject.evalMipDimensions(_allocatedMip);
|
const auto dimensions = _gpuObject.evalMipDimensions(_allocatedMip);
|
||||||
const auto totalMips = _gpuObject.evalNumMips();
|
const auto totalMips = _gpuObject.getNumMipLevels();
|
||||||
const auto mips = totalMips - _allocatedMip;
|
const auto mips = totalMips - _allocatedMip;
|
||||||
glTextureStorage2D(_id, mips, texelFormat.internalFormat, dimensions.x, dimensions.y);
|
glTextureStorage2D(_id, mips, texelFormat.internalFormat, dimensions.x, dimensions.y);
|
||||||
auto mipLevels = _gpuObject.evalNumMips();
|
auto mipLevels = _gpuObject.getNumMipLevels();
|
||||||
_size = 0;
|
_size = 0;
|
||||||
for (uint16_t mip = _allocatedMip; mip < mipLevels; ++mip) {
|
for (uint16_t mip = _allocatedMip; mip < mipLevels; ++mip) {
|
||||||
_size += _gpuObject.evalMipSize(mip);
|
_size += _gpuObject.evalMipSize(mip);
|
||||||
|
@ -474,7 +474,7 @@ void GL45ResourceTexture::allocateStorage(uint16 allocatedMip) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void GL45ResourceTexture::copyMipsFromTexture() {
|
void GL45ResourceTexture::copyMipsFromTexture() {
|
||||||
auto mipLevels = _gpuObject.evalNumMips();
|
auto mipLevels = _gpuObject.getNumMipLevels();
|
||||||
size_t maxFace = GLTexture::getFaceCount(_target);
|
size_t maxFace = GLTexture::getFaceCount(_target);
|
||||||
for (uint16_t sourceMip = _populatedMip; sourceMip < mipLevels; ++sourceMip) {
|
for (uint16_t sourceMip = _populatedMip; sourceMip < mipLevels; ++sourceMip) {
|
||||||
uint16_t targetMip = sourceMip - _allocatedMip;
|
uint16_t targetMip = sourceMip - _allocatedMip;
|
||||||
|
@ -499,7 +499,7 @@ void GL45ResourceTexture::promote() {
|
||||||
uint16_t oldAllocatedMip = _allocatedMip;
|
uint16_t oldAllocatedMip = _allocatedMip;
|
||||||
// allocate storage for new level
|
// allocate storage for new level
|
||||||
allocateStorage(_allocatedMip - std::min<uint16_t>(_allocatedMip, 2));
|
allocateStorage(_allocatedMip - std::min<uint16_t>(_allocatedMip, 2));
|
||||||
uint16_t mips = _gpuObject.evalNumMips();
|
uint16_t mips = _gpuObject.getNumMipLevels();
|
||||||
// copy pre-existing mips
|
// copy pre-existing mips
|
||||||
for (uint16_t mip = _populatedMip; mip < mips; ++mip) {
|
for (uint16_t mip = _populatedMip; mip < mips; ++mip) {
|
||||||
auto mipDimensions = _gpuObject.evalMipDimensions(mip);
|
auto mipDimensions = _gpuObject.evalMipDimensions(mip);
|
||||||
|
@ -532,7 +532,7 @@ void GL45ResourceTexture::demote() {
|
||||||
const_cast<GLuint&>(_id) = allocate(_gpuObject);
|
const_cast<GLuint&>(_id) = allocate(_gpuObject);
|
||||||
allocateStorage(_allocatedMip + 1);
|
allocateStorage(_allocatedMip + 1);
|
||||||
_populatedMip = std::max(_populatedMip, _allocatedMip);
|
_populatedMip = std::max(_populatedMip, _allocatedMip);
|
||||||
uint16_t mips = _gpuObject.evalNumMips();
|
uint16_t mips = _gpuObject.getNumMipLevels();
|
||||||
// copy pre-existing mips
|
// copy pre-existing mips
|
||||||
for (uint16_t mip = _populatedMip; mip < mips; ++mip) {
|
for (uint16_t mip = _populatedMip; mip < mips; ++mip) {
|
||||||
auto mipDimensions = _gpuObject.evalMipDimensions(mip);
|
auto mipDimensions = _gpuObject.evalMipDimensions(mip);
|
||||||
|
|
|
@ -418,8 +418,8 @@ public:
|
||||||
|
|
||||||
uint32 evalTotalSize(uint16 startingMip = 0) const {
|
uint32 evalTotalSize(uint16 startingMip = 0) const {
|
||||||
uint32 size = 0;
|
uint32 size = 0;
|
||||||
uint16 minMipLevel = std::max(minMip(), startingMip);
|
uint16 minMipLevel = std::max(getMinMip(), startingMip);
|
||||||
uint16 maxMipLevel = maxMip();
|
uint16 maxMipLevel = getMaxMip();
|
||||||
for (uint16 l = minMipLevel; l <= maxMipLevel; l++) {
|
for (uint16 l = minMipLevel; l <= maxMipLevel; l++) {
|
||||||
size += evalMipSize(l);
|
size += evalMipSize(l);
|
||||||
}
|
}
|
||||||
|
@ -429,12 +429,9 @@ public:
|
||||||
// max mip is in the range [ 0 if no sub mips, log2(max(width, height, depth))]
|
// max mip is in the range [ 0 if no sub mips, log2(max(width, height, depth))]
|
||||||
// if autoGenerateMip is on => will provide the maxMIp level specified
|
// if autoGenerateMip is on => will provide the maxMIp level specified
|
||||||
// else provide the deepest mip level provided through assignMip
|
// else provide the deepest mip level provided through assignMip
|
||||||
uint16 maxMip() const { return _maxMip; }
|
uint16 getMaxMip() const { return _maxMip; }
|
||||||
|
uint16 getMinMip() const { return _minMip; }
|
||||||
uint16 minMip() const { return _minMip; }
|
uint16 getNumMipLevels() const { return _maxMip + 1; }
|
||||||
|
|
||||||
uint16 mipLevels() const { return _maxMip + 1; }
|
|
||||||
|
|
||||||
uint16 usedMipLevels() const { return (_maxMip - _minMip) + 1; }
|
uint16 usedMipLevels() const { return (_maxMip - _minMip) + 1; }
|
||||||
|
|
||||||
const std::string& source() const { return _source; }
|
const std::string& source() const { return _source; }
|
||||||
|
|
|
@ -121,7 +121,7 @@ ktx::KTXUniquePointer Texture::serialize(const Texture& texture) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Number level of mips coming
|
// Number level of mips coming
|
||||||
header.numberOfMipmapLevels = texture.maxMip() + 1;
|
header.numberOfMipmapLevels = texture.getNumMipLevels();
|
||||||
|
|
||||||
ktx::Images images;
|
ktx::Images images;
|
||||||
for (uint32_t level = 0; level < header.numberOfMipmapLevels; level++) {
|
for (uint32_t level = 0; level < header.numberOfMipmapLevels; level++) {
|
||||||
|
|
|
@ -73,12 +73,12 @@ void AmbientOcclusionFramebuffer::allocate() {
|
||||||
|
|
||||||
auto width = _frameSize.x;
|
auto width = _frameSize.x;
|
||||||
auto height = _frameSize.y;
|
auto height = _frameSize.y;
|
||||||
|
|
||||||
_occlusionTexture = gpu::TexturePointer(gpu::Texture::create2D(gpu::Element::COLOR_RGBA_32, width, height, gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_LINEAR_MIP_POINT)));
|
_occlusionTexture = gpu::TexturePointer(gpu::Texture::createRenderBuffer(gpu::Element::COLOR_RGBA_32, width, height, gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_LINEAR_MIP_POINT)));
|
||||||
_occlusionFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create("occlusion"));
|
_occlusionFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create("occlusion"));
|
||||||
_occlusionFramebuffer->setRenderBuffer(0, _occlusionTexture);
|
_occlusionFramebuffer->setRenderBuffer(0, _occlusionTexture);
|
||||||
|
|
||||||
_occlusionBlurredTexture = gpu::TexturePointer(gpu::Texture::create2D(gpu::Element::COLOR_RGBA_32, width, height, gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_LINEAR_MIP_POINT)));
|
_occlusionBlurredTexture = gpu::TexturePointer(gpu::Texture::createRenderBuffer(gpu::Element::COLOR_RGBA_32, width, height, gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_LINEAR_MIP_POINT)));
|
||||||
_occlusionBlurredFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create("occlusionBlurred"));
|
_occlusionBlurredFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create("occlusionBlurred"));
|
||||||
_occlusionBlurredFramebuffer->setRenderBuffer(0, _occlusionBlurredTexture);
|
_occlusionBlurredFramebuffer->setRenderBuffer(0, _occlusionBlurredTexture);
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,18 +72,18 @@ void LinearDepthFramebuffer::allocate() {
|
||||||
auto height = _frameSize.y;
|
auto height = _frameSize.y;
|
||||||
|
|
||||||
// For Linear Depth:
|
// For Linear Depth:
|
||||||
_linearDepthTexture = gpu::TexturePointer(gpu::Texture::createRenderBuffer(gpu::Element(gpu::SCALAR, gpu::FLOAT, gpu::RGB), width, height,
|
_linearDepthTexture = gpu::TexturePointer(gpu::Texture::createRenderBuffer(gpu::Element(gpu::SCALAR, gpu::FLOAT, gpu::RED), width, height,
|
||||||
gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_LINEAR_MIP_POINT)));
|
gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_LINEAR_MIP_POINT)));
|
||||||
_linearDepthFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create("linearDepth"));
|
_linearDepthFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create("linearDepth"));
|
||||||
_linearDepthFramebuffer->setRenderBuffer(0, _linearDepthTexture);
|
_linearDepthFramebuffer->setRenderBuffer(0, _linearDepthTexture);
|
||||||
_linearDepthFramebuffer->setDepthStencilBuffer(_primaryDepthTexture, _primaryDepthTexture->getTexelFormat());
|
_linearDepthFramebuffer->setDepthStencilBuffer(_primaryDepthTexture, _primaryDepthTexture->getTexelFormat());
|
||||||
|
|
||||||
// For Downsampling:
|
// For Downsampling:
|
||||||
_halfLinearDepthTexture = gpu::TexturePointer(gpu::Texture::createRenderBuffer(gpu::Element(gpu::SCALAR, gpu::FLOAT, gpu::RGB), _halfFrameSize.x, _halfFrameSize.y,
|
_halfLinearDepthTexture = gpu::TexturePointer(gpu::Texture::createRenderBuffer(gpu::Element(gpu::SCALAR, gpu::FLOAT, gpu::RED), _halfFrameSize.x, _halfFrameSize.y,
|
||||||
gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_LINEAR_MIP_POINT)));
|
gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_LINEAR_MIP_POINT)));
|
||||||
_halfLinearDepthTexture->autoGenerateMips(5);
|
_halfLinearDepthTexture->autoGenerateMips(5);
|
||||||
|
|
||||||
_halfNormalTexture = gpu::TexturePointer(gpu::Texture::createRenderBuffer(gpu::Element(gpu::VEC3, gpu::NUINT8, gpu::RGB), _halfFrameSize.x, _halfFrameSize.y,
|
_halfNormalTexture = gpu::TexturePointer(gpu::Texture::createRenderBuffer(gpu::Element::COLOR_RGBA_32, _halfFrameSize.x, _halfFrameSize.y,
|
||||||
gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_LINEAR_MIP_POINT)));
|
gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_LINEAR_MIP_POINT)));
|
||||||
|
|
||||||
_downsampleFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create("halfLinearDepth"));
|
_downsampleFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create("halfLinearDepth"));
|
||||||
|
|
|
@ -456,7 +456,7 @@ protected:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto texture = _textures[_currentTextureIndex];
|
auto texture = _textures[_currentTextureIndex];
|
||||||
texture->setMinMip(texture->minMip() + 1);
|
texture->setMinMip(texture->getMinMip() + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void loadTexture() {
|
void loadTexture() {
|
||||||
|
|
Loading…
Reference in a new issue