Browse Source

Added support for BC4 (aka 3Dc+) compressed textures

Alex Szpakowski 12 years ago
parent
commit
e19ade38ab

+ 6 - 0
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);

+ 2 - 2
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
 		{

+ 2 - 0
src/modules/image/CompressedData.cpp

@@ -115,6 +115,8 @@ StringMap<CompressedData::TextureType, CompressedData::TYPE_MAX_ENUM>::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},
 };

+ 2 - 0
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

+ 4 - 0
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: