mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 03:29:04 +02:00
Disable use of DSA to load cubemaps
This commit is contained in:
parent
44e2037e15
commit
a01f115357
2 changed files with 17 additions and 66 deletions
|
@ -33,6 +33,7 @@ class GL45Backend : public GLBackend {
|
||||||
friend class Context;
|
friend class Context;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
static const GLint RESOURCE_TRANSFER_TEX_UNIT { 32 };
|
||||||
static GLint MAX_COMBINED_SHADER_STORAGE_BLOCKS;
|
static GLint MAX_COMBINED_SHADER_STORAGE_BLOCKS;
|
||||||
static GLint MAX_UNIFORM_LOCATIONS;
|
static GLint MAX_UNIFORM_LOCATIONS;
|
||||||
#if GPU_BINDLESS_TEXTURES
|
#if GPU_BINDLESS_TEXTURES
|
||||||
|
|
|
@ -226,81 +226,31 @@ void GL45Texture::generateMips() const {
|
||||||
|
|
||||||
Size GL45Texture::copyMipFaceLinesFromTexture(uint16_t mip, uint8_t face, const uvec3& size, uint32_t yOffset, GLenum internalFormat, GLenum format, GLenum type, Size sourceSize, const void* sourcePointer) const {
|
Size GL45Texture::copyMipFaceLinesFromTexture(uint16_t mip, uint8_t face, const uvec3& size, uint32_t yOffset, GLenum internalFormat, GLenum format, GLenum type, Size sourceSize, const void* sourcePointer) const {
|
||||||
Size amountCopied = sourceSize;
|
Size amountCopied = sourceSize;
|
||||||
|
bool compressed = GLTexelFormat::isCompressed(internalFormat);
|
||||||
if (GL_TEXTURE_2D == _target) {
|
if (GL_TEXTURE_2D == _target) {
|
||||||
switch (internalFormat) {
|
if (compressed) {
|
||||||
case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
|
glCompressedTextureSubImage2D(_id, mip, 0, yOffset, size.x, size.y, internalFormat,
|
||||||
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
|
static_cast<GLsizei>(sourceSize), sourcePointer);
|
||||||
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
|
} else {
|
||||||
case GL_COMPRESSED_RED_RGTC1:
|
glTextureSubImage2D(_id, mip, 0, yOffset, size.x, size.y, format, type, sourcePointer);
|
||||||
case GL_COMPRESSED_RG_RGTC2:
|
|
||||||
case GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM:
|
|
||||||
case GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT:
|
|
||||||
case GL_COMPRESSED_RGB8_ETC2:
|
|
||||||
case GL_COMPRESSED_SRGB8_ETC2:
|
|
||||||
case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
|
|
||||||
case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
|
|
||||||
case GL_COMPRESSED_RGBA8_ETC2_EAC:
|
|
||||||
case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
|
|
||||||
case GL_COMPRESSED_R11_EAC:
|
|
||||||
case GL_COMPRESSED_SIGNED_R11_EAC:
|
|
||||||
case GL_COMPRESSED_RG11_EAC:
|
|
||||||
case GL_COMPRESSED_SIGNED_RG11_EAC:
|
|
||||||
glCompressedTextureSubImage2D(_id, mip, 0, yOffset, size.x, size.y, internalFormat,
|
|
||||||
static_cast<GLsizei>(sourceSize), sourcePointer);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
glTextureSubImage2D(_id, mip, 0, yOffset, size.x, size.y, format, type, sourcePointer);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
} else if (GL_TEXTURE_CUBE_MAP == _target) {
|
} else if (GL_TEXTURE_CUBE_MAP == _target) {
|
||||||
switch (internalFormat) {
|
// DSA and cubemap functions are notoriously buggy. use the 4.1 compatible pathway
|
||||||
case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
|
glActiveTexture(GL_TEXTURE0 + GL45Backend::RESOURCE_TRANSFER_TEX_UNIT);
|
||||||
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
|
glBindTexture(_target, _texture);
|
||||||
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
|
auto target = GLTexture::CUBE_FACE_LAYOUT[face];
|
||||||
case GL_COMPRESSED_RED_RGTC1:
|
if (compressed) {
|
||||||
case GL_COMPRESSED_RG_RGTC2:
|
glCompressedTexSubImage2D(target, mip, 0, yOffset, size.x, size.y, internalFormat,
|
||||||
case GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM:
|
static_cast<GLsizei>(sourceSize), sourcePointer);
|
||||||
case GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT:
|
} else {
|
||||||
case GL_COMPRESSED_RGB8_ETC2:
|
glTexSubImage2D(target, mip, 0, yOffset, size.x, size.y, format, type, sourcePointer);
|
||||||
case GL_COMPRESSED_SRGB8_ETC2:
|
|
||||||
case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
|
|
||||||
case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
|
|
||||||
case GL_COMPRESSED_RGBA8_ETC2_EAC:
|
|
||||||
case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
|
|
||||||
case GL_COMPRESSED_R11_EAC:
|
|
||||||
case GL_COMPRESSED_SIGNED_R11_EAC:
|
|
||||||
case GL_COMPRESSED_RG11_EAC:
|
|
||||||
case GL_COMPRESSED_SIGNED_RG11_EAC:
|
|
||||||
#if AMD_CUBE_MAP_EXT_WORKAROUND
|
|
||||||
if (glCompressedTextureSubImage2DEXT) {
|
|
||||||
auto target = GLTexture::CUBE_FACE_LAYOUT[face];
|
|
||||||
glCompressedTextureSubImage2DEXT(_id, target, mip, 0, yOffset, size.x, size.y, internalFormat,
|
|
||||||
static_cast<GLsizei>(sourceSize), sourcePointer);
|
|
||||||
} else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
glCompressedTextureSubImage3D(_id, mip, 0, yOffset, face, size.x, size.y, 1, internalFormat,
|
|
||||||
static_cast<GLsizei>(sourceSize), sourcePointer);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
#if AMD_CUBE_MAP_EXT_WORKAROUND
|
|
||||||
if (glTextureSubImage2DEXT) {
|
|
||||||
auto target = GLTexture::CUBE_FACE_LAYOUT[face];
|
|
||||||
glTextureSubImage2DEXT(_id, target, mip, 0, yOffset, size.x, size.y, format, type, sourcePointer);
|
|
||||||
} else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
glTextureSubImage3D(_id, mip, 0, yOffset, face, size.x, size.y, 1, format, type, sourcePointer);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
glBindTexture(_target, 0);
|
||||||
} else {
|
} else {
|
||||||
assert(false);
|
assert(false);
|
||||||
amountCopied = 0;
|
amountCopied = 0;
|
||||||
}
|
}
|
||||||
(void)CHECK_GL_ERROR();
|
(void)CHECK_GL_ERROR();
|
||||||
|
|
||||||
return amountCopied;
|
return amountCopied;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue