zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    hdu4725 The Shortest Path in Nya Graph
    poj2679 Adventurous Driving 最短路
    线段树完全版【代码集合
    LCS!LCS!
    bzoj2763: [JLOI2011]飞行路线
    bzoj3389: [Usaco2004 Dec]Cleaning Shifts安排值班
    [ 浙江大学 数据库系统原理 ] [ MiniSQL ]课程设计
    [ 浙江大学 程序设计专题 ] 四个专题代码 报告 PPT共享
    [ C语言 ] 迷宫 迷宫生成器 [ 递归与搜索 ]
    [ C语言版 ] 数独计算器 [ 搜索剪枝法 ]
  • 原文地址:https://www.cnblogs.com/timeObjserver/p/8451516.html
Copyright © 2011-2022 走看看