如何使用opengl从字节数组加载ImGui图像?

问题描述 投票:0回答:2

我正在尝试在我的 c++ ImGui 菜单中渲染图像;我相信最终代码会类似于

ImGui::Image(ImTextureID, ImVec2(X, Y));
。我已经有一个字节数组,其中包含我想要渲染的图像,但不知道如何将其加载到正在传入的 ImTextureID 中。我已经找到了如何使用
D3DXCreateTextureFromFileInMemoryEx
使用 Direct X 来完成此操作,但需要了解执行此操作的 opengl 等效项。

c++ windows image opengl imgui
2个回答
0
投票

ImGui::Image 中的“ImTextureID”只是一个 int,其值对应于图形环境(DirectX 或 OpenGL)中生成的纹理。

在 OpenGL 中执行此操作的方法如下(我不熟悉 DirectX,但我敢打赌“D3DXCreateTextureFromFileInMemoryEx”的作用几乎相同):

  1. 使用glGenTextures()生成纹理名称(这个'名称'只是一个整数,它是ImGui用作ImTextureID的整数)
  2. 使用glTexParameteri()为新生成的纹理设置UV采样参数
  3. 使用 glBindTexture() 将纹理绑定到当前活动的纹理单元
  4. 使用glTexImage2D()上传像素数据到GPU

通常看起来像这样:

int textureID;
glGenTextures(GL_TEXTURE_2D, 1, &textureID);
glTextureParameteri(textureID, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTextureParameteri(textureID, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTextureParameteri(textureID, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
glTextureParameteri(textureID, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, [width of your texture], [height of your texture], false, GL_RGBA, GL_FLOAT, [pointer to first element in array of texture pixel values]);

自从我用 C++ 做这个已经有一段时间了,所以我可能在一些细节上是错误的。但文档非常好,最好还是阅读它,以了解如何使纹理与您打算输入的纹理数据类型兼容:https://www.khronos.org/registry/OpenGL-Refpages/ gl4/html/glTexImage2D.xhtml

一旦像这样设置了纹理,您就可以在 ImGui Image 调用中使用textureID 的值。


0
投票

[在此处输入图像描述][1]

TELIGRAM 频道 LOFAR 作弊 https://i.stack.imgur.com/XZJz9.png

© www.soinside.com 2019 - 2024. All rights reserved.