使用Image组件加载图片
使用Image组件加载图片比较简单,但是还是有需要注意的地方
Imgui中使用图片, 我是使用OpenGL的指令生成纹理贴图,进行设置,然后加载图片使用的是SOIL库
我们生成纹理贴图的时候,需要将纹理提前生成好,然后获取纹理的ID,而不是在帧循环里面和窗口渲染一起进行生成纹理,如果将生成纹理的部分放在了帧循环里面,那么纹理在显示一会之后,图片就会黑掉,此时我猜测可能是因为生成的纹理的部分在循环里面,每一帧都回生成一个纹理,那么内存就会爆掉。然后生成纹理就失败了,此时显示不了图片了。
代码里面还使用了一个图片按钮的组件,可以将图片变成一个有响应时间的按钮,但是个人觉得效果不是很好,还不如直接使用普通按钮,然后设置按钮的悬停,点击,正常三种状态的颜色。
首先贴上创建贴图的代码:
通过这个贴图的加载,我们可以获得:MyClass::textureID,里面存储的就是我们之后要使用的贴图ID,我们把这个变量定义成类的静态成员变量。方便之后一直使用
void MyClass::CreateTexture()
{
ImGuiIO& io = ImGui::GetIO();
//unsigned int texture;
int nWidth = 0, nHeight = 0, nChannel = 0;
const char* picture = "C:\\Users\\FSY\\Desktop\\imguiOfNative\\example\\example_glfw_opengl3\\rgba.jpg";
unsigned ch