我试图用GLFW设置一个窗口图标,这要求我将GLFWimage作为函数参数。我想使用OpenGL Image (GLI)将.png文件加载到内存中,然后以某种方式将其转换为GLFW图像。但是,经过深入研究后,我一直无法找到解决方法。我知道你可以用SOIL加载图像数据:
GLFWimage icons[1];
icons[0].pixels = SOIL_load_image("icon.png", &icons[0].width, &icons[0].height, 0, SOIL_LOAD_RGBA);
然后使用glfwSetWindowIcon
glfwSetWindowIcon(window.window, 1, icons);
但我很难在GLI中找到与SOIL_load_image
类似的功能。
我已尝试使用gli::texture
将图片加载到内存中,但我不确定这是否是正确的方法,因为我还没有找到任何可以转换{的函数{1}} gli::texture
可用的任何内容(例如GLFWimage
)。
简而言之:如何使用GLI将图像加载到OpenGL中以用作GLFW的窗口图标?
编辑:我已尝试过以下内容:const char*
抱怨"不兼容的指针类型' unsigned char *'和' const char *'"。所以我尝试将它转换为unsigned char:
GLFWimage icons[1];
icons[0].pixels = static_cast< const char* >( gli::convert( gli::load("img.png"), gli::format::FORMAT_RGBA8_UINT_PACK8 ).data() );
以及我的IDE很高兴的icons[0].pixels = (unsigned char *) static_cast< const char* >( gli::convert(gli::load("img.png"), gli::format::FORMAT_RGBA8_UINT_PACK8 ).data() );
和static_cast< unsigned char* >
,但是给了我以下编译器错误:
static_cast< const unsigned char* >
EDIT2:我发现使用此方法纹理实际上并未转换为其他类型。它保持C:/Users/Lars/CLionProjects/FluidSim/include/GLI/texture.hpp:231:66: error: invalid static_cast from type 'glm::vec<3, int, (glm::qualifier)0>' to type 'std::size_t {aka unsigned int}'
GLI_ASSERT(static_cast<size_t>(gli::levels(Storage.extent(0))) < this->ImageMemorySize.size());
^
,不能投放到gli::texture
,但这仍然无法解决问题。