OpenGL3.x,4.x中使用FreeImage显示图片的BUG-黑色,或颜色分量顺序错乱
生活随笔
收集整理的這篇文章主要介紹了
OpenGL3.x,4.x中使用FreeImage显示图片的BUG-黑色,或颜色分量顺序错乱
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
OpenGL3.x,4.x中使用FreeImage顯示圖片的BUG-黑色,或顏色分量順序錯亂
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 }
?
posted on 2018-02-17 11:26 時空觀察者9號 閱讀(...) 評論(...) 編輯 收藏
總結
以上是生活随笔為你收集整理的OpenGL3.x,4.x中使用FreeImage显示图片的BUG-黑色,或颜色分量顺序错乱的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++风格与C风格文件读写效率测试-vs
- 下一篇: VS 配置外部DLL的引用路径【可执行文