簡體   English   中英

如何使用 opengl 從字節數組加載 ImGui 圖像?

[英]How to load ImGui image from byte array with opengl?

我正在嘗試在我的 c++ ImGui 菜單中渲染圖像; 我相信最終代碼會類似於ImGui::Image(ImTextureID, ImVec2(X, Y)); . 我已經有一個字節數組,其中包含我要渲染的圖像,但不知道如何 go 將其加載到正在傳入的 ImTextureID 中。我已經找到了如何使用 Direct X 使用D3DXCreateTextureFromFileInMemoryEx但需要知道opengl 等效於執行此操作。

ImGui::Image 中的“ImTextureID”只是一個 int,其值對應於在圖形環境(DirectX 或 OpenGL)中生成的紋理。

在 OpenGL 中這樣做的一種方法如下(我不熟悉 DirectX,但我敢打賭 'D3DXCreateTextureFromFileInMemoryEx' 幾乎相同):

  1. 使用 glGenTextures() 生成紋理名稱(這個“名稱”只是一個 integer,它是 ImGui 用作 ImTextureID 的 integer)
  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 的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM