OpenGL Image ( GLI ) 是一个用于图形软件的仅有头文件的 C++ 图像库。
GLI提供类和函数来加载图像文件( KTX和DDS )、促进图形 API 纹理创建、比较纹理、访问纹理像素、采样纹理、转换纹理、生成 mipmap 等。
该库与OpenGL或Vulkan完美配合,但它还确保与其他第三方库和 SDK 的互操作性。它是软件渲染(光线跟踪/光栅化)、图像处理、基于图像的软件测试或任何需要简单方便的图像库的开发环境的良好候选者。
GLI是用 C++11 编写的。它是一个独立于平台的库,没有依赖性,它支持以下编译器:
- Apple Clang 6.0 及更高版本
- GCC 4.7 及更高版本
- 英特尔 C++ Composer XE 2013 及更高版本
- LLVM 3.4 及更高版本
- Visual C++ 2013 及更高版本
- 任何 C++11 编译器
有关GLI的更多信息,请查看手册和 API 参考文档。源代码和文档根据 Happy Bunny 许可证(修改版 MIT)或 MIT 许可证获得许可。
感谢您通过提交拉取请求为该项目做出贡献。
# include < gli/gli.hpp >
GLuint CreateTexture ( char const * Filename)
{
gli::texture Texture = gli::load (Filename);
if (Texture. empty ())
return 0 ;
gli::gl GL (gli::gl::PROFILE_GL33);
gli::gl::format const Format = GL. translate (Texture. format (), Texture. swizzles ());
GLenum Target = GL. translate (Texture. target ());
assert ( gli::is_compressed (Texture. format ()) && Target == gli::TARGET_2D);
GLuint TextureName = 0 ;
glGenTextures ( 1 , &TextureName);
glBindTexture (Target, TextureName);
glTexParameteri (Target, GL_TEXTURE_BASE_LEVEL, 0 );
glTexParameteri (Target, GL_TEXTURE_MAX_LEVEL, static_cast <GLint>(Texture. levels () - 1 ));
glTexParameteriv (Target, GL_TEXTURE_SWIZZLE_RGBA, &Format. Swizzles [ 0 ]);
glTexStorage2D (Target, static_cast <GLint>(Texture. levels ()), Format. Internal , Extent. x , Extent. y );
for (std:: size_t Level = 0 ; Level < Texture. levels (); ++Level)
{
glm::tvec3<GLsizei> Extent (Texture. extent (Level));
glCompressedTexSubImage2D (
Target, static_cast <GLint>(Level), 0 , 0 , Extent. x , Extent. y ,
Format. Internal , static_cast <GLsizei>(Texture. size (Level)), Texture. data ( 0 , 0 , Level));
}
return TextureName;
}
最新发布
健康项目
服务 | 系统 | 编译器 | 地位 |
---|
特拉维斯·西尔 | Linux 64 位 | 铿锵 3.9、铿锵 7、铿锵 9、铿锵 10、GCC 4.8、GCC 7.4、GCC 9、GCC 10 | |
应用程序载体 | Windows 32 和 64 | 视觉工作室2013 | |
发行说明
GLI 0.8.3.0 - 2017-XX-XX
特征:
- 添加了 DXT1、DXT3、DXT5、ATI1N 和 ATI2N 的解压和采样 #110 #119
- 添加了深度和模板格式查询#119
- 向采样器添加了texture_grad
修复:
GLI 0.8.2.0 - 2016-11-13
特征:
- 扩展 S3TC 压缩纹理的 Flip() #94
- 添加了格式属性查询 #102
改进:
修复:
- 修复了 ATI2N swizzle 参数 #121
GLI 0.8.1.1 - 2016-09-11
改进:
修复:
- 修复了 KTX 立方体贴图保存问题
- 固定纹理::清晰构建
GLI 0.8.1.0 - 2016-03-16
特征:
- 添加纹理复制,不涉及分配,仅传输
- 添加了子图像副本
- 添加非会员清除
- 添加了 make_texture* 辅助函数
改进:
- 添加了压缩 npot 纹理支持 #73
- 向通用纹理添加了图像访问缓存
- 通过 RG swizzling 添加了亮度 alpha 格式转换到 OpenGL 3.3+。第93章
- 改进了使用 mipmap 采样时的性能
- 使用texture_lod性能改进了无边框的最近过滤器(使用texture2d时速度提高约2.5倍)
- 改进的纹理::data()(使用立方体数组时约为 18 倍,使用 2D 时约为 68 倍)
- 改进的texture::size()(使用立方体数组时约为 3.1 倍,使用 2D 时约为 3.9 倍)
- 改进了同时进行的texture::size()和texture::extent()调用(使用立方体数组时~2.1x,使用2D时~2.3x)
修复:
- 修复了 DX10 DDS 保存 3D 纹理的问题 #91
- 修复了 PROFILE_GL33 配置文件的 BGRX 翻译 #92
- 修复了 DDS9 加载 3D 纹理检测为 2D 纹理的问题 #93
GLI 0.8.0.0 - 2016-02-16
特征:
- 添加了纹理混合支持#79
- 添加了纹理内存混合支持
- 添加了从任何未压缩格式到任何未压缩格式的纹理转换
- 添加了纹理 lod
- 添加了未压缩格式的纹理 mipmap 生成
- 添加了对加载和存储的支持
- 添加了对许多新格式的支持
- 添加了采样器 1D、2D、3D、数组和立方体贴图
- 添加了采样器纹素提取和纹素写入
- 添加了采样器清除
- 添加了变换算法来计算纹素之间的算术
- 添加了减少算法来比较图像中的所有纹理像素
改进:
- 重新排序格式以匹配 Vulkan 格式
- 改进了多个配置文件的 OpenGL 转换:KTX、ES2.0、ES3.0、GL3.2 和 GL3.3
- 改进的 Doxygen 文档
修复:
- 修复了 PVRTC2 支持
- 修复了 OpenGL 的亮度和 Alpha 转换 #56
- 修复了 DXGI_FORMAT_B8G8R8X8_UNORM_SRGB 支持 #59
- 修复了使用 DDPF_RGBA 模式加载 FORMAT_RGBA8_UNORM DDS #60
- 修复了 DDS DDPF_ALPHAPIXELS 的处理 #68
- 修复图像,更好地匹配名称和格式 #78 #81 #80
- 修复了 MS DDS 加载程序生成的 BC4U 和 BC5U 文件 #82
正在进行的工作:
GLI 0.7.0.0 - 2015-09-01
- 添加KTX加载和保存
- 添加了 gli::load 用于加载通用文件,DDS 或 KTX 文件取决于文件扩展名
- 添加了 gli::save 用于保存通用文件,DDS 或 KTX 文件取决于文件扩展名
- 添加了使用不同纹理格式的纹理视图,包括压缩纹理格式
- 添加的细粒度包括
- 改进的 API 文档
- 更快的纹理比较并不是最佳情况。 (在英特尔 IVB 上测得速度快约 21 倍)
- 显式处理纹理目标:修复了立方体贴图和纹理数组无法使用 DDS 加载的各种情况
- 修复了 GCC 构建
- 修复警告
- 修复了 #52 上保存的 DDS 标头大小
GLI 0.6.1.1 - 2015-07-18
GLI 0.6.1.0 - 2015-07-18
- 修复了界面不一致的问题
- 使用缓存改进了clear()、data()和size()性能
- 删除了对 std::fstream 的内部依赖
- 添加了 FORMAT_BGRX8_UNORM 和 FORMAT_BGRX8_SRGB 支持 #48、#43
- 改进了 FORMAT_RGB8_UNORM 加载
GLI 0.6.0.0 - 2015-06-28
- 大型重构
- 添加了从内存加载DDS
- 添加将DDS保存到内存
- 改进了 R、RG、RGB 和 RGBA 格式的 DDS 覆盖范围
- 添加了 DDS ASTC、PVRTC、ATC 和 ETC 支持
- 添加了 DDS alpha、亮度和 alpha 亮度支持
- 添加了 PVRTC2、ETC2 和 EAC 格式
GLI 0.5.1.1 - 2014-01-20
- 修复了读回 DDS 时混合的 RGB 通道
- 修复了 getMask* 链接错误
GLI 0.5.1.0 - 2014-01-18
- 新增翻转功能
- 添加level_count函数
- 修复了与 std::map 的交互(#33)
- 添加了 texelFetch 和 texelWrite 函数
GLI 0.5.0.0 - 2013-11-24
- 本质上是对库的重写
- 添加显式副本
- 为每个纹理存储添加了单个内存分配
- 添加纹理视图
- 添加纹理副本
- 添加了比较运算符
- 添加清除
GLI 0.4.1.0: 2013-03-10
- 添加DDS保存
- 修复了 GCC 构建
- 修复了 XCode 构建
GLI 0.4.0.0: 2013-01-28
- 大型API重构
- 加载时的性能改进:调试时提高 50 倍,发布版本提高 50%
- 添加了texture2DArray
- 添加了textureCube和textureCubeArray
- 添加了纹理3D
- 添加了texture1D和texture1DArray
- 改进的 DDS 加载支持
GLI 0.3.0.3: 2011-04-05
GLI 0.3.0.2: 2011-02-08
GLI 0.3.0.1: 2010-10-15
GLI 0.3.0.0: 2010-10-01
- 添加了 DDS10 加载和存储 (BC1 - BC7)
- 新增扩展系统
- 添加了从文件自动创建 OpenGL 纹理对象
GLI 0.2.2.0: 2010-09-07
GLI 0.2.1.1: 2010-05-12
GLI 0.2.1.0: 2010-02-15
- 添加 texelWrite 函数
- 修复了 Visual Studio 2010 警告
- 添加了readme.txt和copying.txt
GLI 0.2.0.0: 2010-01-10
GLI 0.1.1.0: 2009-09-18
- 固定DDS加载器
- 将 RGB8 添加到 DDS 加载程序
- 添加了组件混合操作
- 添加了 32 位整数组件支持
- 修复了纹素获取
GLI 0.1.0.0: 2009-03-28
- 添加了 TGA 加载程序
- 添加了 DDS 加载程序
- 添加了重复、裁剪、部分副本
- 添加了 mipmap 生成。