From e19ade38ab864c00d37119ddd57c0091edec2774 Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Sun, 28 Jul 2013 17:20:24 -0300 Subject: [PATCH] Added support for BC4 (aka 3Dc+) compressed textures --- src/modules/graphics/opengl/Image.cpp | 6 ++++++ src/modules/graphics/opengl/VertexBuffer.cpp | 4 ++-- src/modules/image/CompressedData.cpp | 2 ++ src/modules/image/CompressedData.h | 2 ++ src/modules/image/magpie/ddsHandler.cpp | 4 ++++ 5 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/modules/graphics/opengl/Image.cpp b/src/modules/graphics/opengl/Image.cpp index cb8f64fc4..4151b8ea8 100644 --- a/src/modules/graphics/opengl/Image.cpp +++ b/src/modules/graphics/opengl/Image.cpp @@ -615,6 +615,10 @@ GLenum Image::getCompressedFormat(image::CompressedData::TextureType type) const return GL_COMPRESSED_RGBA_S3TC_DXT3_EXT; case image::CompressedData::TYPE_DXT5: return GL_COMPRESSED_RGBA_S3TC_DXT5_EXT; + case image::CompressedData::TYPE_BC4: + return GL_COMPRESSED_RED_RGTC1; + case image::CompressedData::TYPE_BC4s: + return GL_COMPRESSED_SIGNED_RED_RGTC1; case image::CompressedData::TYPE_BC5: return GL_COMPRESSED_RG_RGTC2; case image::CompressedData::TYPE_BC5s: @@ -660,6 +664,8 @@ bool Image::hasCompressedTextureSupport(image::CompressedData::TextureType type) case image::CompressedData::TYPE_DXT3: case image::CompressedData::TYPE_DXT5: return GLEE_EXT_texture_compression_s3tc; + case image::CompressedData::TYPE_BC4: + case image::CompressedData::TYPE_BC4s: case image::CompressedData::TYPE_BC5: case image::CompressedData::TYPE_BC5s: return (GLEE_VERSION_3_0 || GLEE_ARB_texture_compression_rgtc || GLEE_EXT_texture_compression_rgtc); diff --git a/src/modules/graphics/opengl/VertexBuffer.cpp b/src/modules/graphics/opengl/VertexBuffer.cpp index c33371ea6..ffb94da1d 100644 --- a/src/modules/graphics/opengl/VertexBuffer.cpp +++ b/src/modules/graphics/opengl/VertexBuffer.cpp @@ -219,7 +219,7 @@ void VBO::fill(size_t offset, size_t size, const void *data) } else if (GLEE_APPLE_flush_buffer_range) { - void *mapdata = glMapBuffer(getTarget(), GL_WRITE_ONLY); + void *mapdata = glMapBufferARB(getTarget(), GL_WRITE_ONLY); if (mapdata) { @@ -230,7 +230,7 @@ void VBO::fill(size_t offset, size_t size, const void *data) glFlushMappedBufferRangeAPPLE(getTarget(), offset, size); } - glUnmapBuffer(getTarget()); + glUnmapBufferARB(getTarget()); } else { diff --git a/src/modules/image/CompressedData.cpp b/src/modules/image/CompressedData.cpp index c54cdfe72..fb0d63072 100644 --- a/src/modules/image/CompressedData.cpp +++ b/src/modules/image/CompressedData.cpp @@ -115,6 +115,8 @@ StringMap::Entry Com {"dxt1", CompressedData::TYPE_DXT1}, {"dxt3", CompressedData::TYPE_DXT3}, {"dxt5", CompressedData::TYPE_DXT5}, + {"bc4", CompressedData::TYPE_BC4}, + {"bc4s", CompressedData::TYPE_BC4s}, {"bc5", CompressedData::TYPE_BC5}, {"bc5s", CompressedData::TYPE_BC5s}, }; diff --git a/src/modules/image/CompressedData.h b/src/modules/image/CompressedData.h index 35cdff95c..f659d858a 100644 --- a/src/modules/image/CompressedData.h +++ b/src/modules/image/CompressedData.h @@ -50,6 +50,8 @@ public: TYPE_DXT1, TYPE_DXT3, TYPE_DXT5, + TYPE_BC4, + TYPE_BC4s, TYPE_BC5, TYPE_BC5s, TYPE_MAX_ENUM diff --git a/src/modules/image/magpie/ddsHandler.cpp b/src/modules/image/magpie/ddsHandler.cpp index 8966b94ca..8050fdf77 100644 --- a/src/modules/image/magpie/ddsHandler.cpp +++ b/src/modules/image/magpie/ddsHandler.cpp @@ -101,6 +101,10 @@ CompressedData::TextureType ddsHandler::convertFormat(dds::Format ddsformat) return CompressedData::TYPE_DXT3; case dds::FORMAT_DXT5: return CompressedData::TYPE_DXT5; + case dds::FORMAT_BC4: + return CompressedData::TYPE_BC4; + case dds::FORMAT_BC4s: + return CompressedData::TYPE_BC4s; case dds::FORMAT_BC5: return CompressedData::TYPE_BC5; case dds::FORMAT_BC5s: