博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenGL3.x,4.x中使用FreeImage显示图片的BUG-黑色,或颜色分量顺序错乱
阅读量:6682 次
发布时间:2019-06-25

本文共 1637 字,大约阅读时间需要 5 分钟。

1 //参照FreeImage官网给出的CTextrueManager写的加载函数 2 //官方给的例子是用opengl3.0以下的旧GL写的,没有使用glGenerateMipmap(GL_TEXTURE_2D)来产生mipmap 3 //在GL3.0以后,渲染时默认是开启了MIPMAP的,如果不调用glGenerateMipmap来生成MIPMAP,则渲染出的贴图一片黑色   //另外要注意freeimage的颜色分量顺序是gbr,不知为什么,故这里fmt应传GL_BGR  4 GLuint CResMgr::LoadTextrue(const char* texFile, GLenum fmt, GLuint ifmt, GLuint level, GLuint border) { 5     FREE_IMAGE_FORMAT fifmt = FreeImage_GetFileType(texFile, 0); 6     if (fifmt == FIF_UNKNOWN) { 7         fifmt = FreeImage_GetFIFFromFilename(texFile); 8         if (fifmt == FIF_UNKNOWN) { 9             xsMsg(texFile, "图片加载失败:未知的格式", MB_ICONERROR);10             return 0;11         }12     }13 14     if (!FreeImage_FIFSupportsReading(fifmt)) {15         xMsg(texFile, "freeImage不支持该文件格式的读取", MB_ICONERROR);16         return 0;17     }18 19     FIBITMAP* dib = FreeImage_Load(fifmt, texFile);20     if (!dib) {21         xMsg(texFile, "freeImage_load失败", MB_ICONERROR);22         return 0;23     }24 25     BYTE* bits = FreeImage_GetBits(dib);26     GLuint width = FreeImage_GetWidth(dib);27     GLuint height = FreeImage_GetHeight(dib);28 29     if (!bits || width == 0 || height == 0) {30         xMsg(texFile, "freeImage_getbits, getwidth, getheight-failed", MB_ICONERROR);31         return 0;32     }33 34     GLuint texId;35     glGenTextures(1, &texId);36     glBindTexture(GL_TEXTURE_2D, texId);37     glTexImage2D(GL_TEXTURE_2D, level, ifmt, width, height, border, fmt, GL_UNSIGNED_BYTE, bits);38     39     glGenerateMipmap(GL_TEXTURE_2D); //注意,不加这句渲染出的贴图是一片黑色,40     FreeImage_Unload(dib);41     return texId;42 }

 

转载于:https://www.cnblogs.com/timeObjserver/p/8451516.html

你可能感兴趣的文章
iptables实现NAT(网络搜索整理)
查看>>
关于ip地址
查看>>
ASP.NET自定义404和500错误页面
查看>>
OpenGL学习(七)纹理映射
查看>>
一些必不可少的Sublime Text 2插件
查看>>
<進階&高級>ADT線上視頻&PPT課件
查看>>
iOS md5加密
查看>>
测试项目
查看>>
第一章ASP.NET SignalR简介
查看>>
SSH
查看>>
使用python3来生成安全的随机密码
查看>>
41-50(UIApplication和delegate,UIApplicationMain,UIWindow,程序启动的完整过程,控制器view的延迟加载)...
查看>>
HTTP服务器实现
查看>>
2017.03
查看>>
95Cloud 可信云计算管理系统(IaaS) ———持续数据保护(CDP)简介
查看>>
锁等待分析处理
查看>>
未能加载文件或程序集“System.Data.SQLite”或它的某一个依赖项
查看>>
傻瓜式操作Nagios
查看>>
Spring task配置,及解决加载两次的方法
查看>>
仿淘宝套餐选择插件 基于jQuery(原创)
查看>>