Created
November 18, 2021 20:17
-
-
Save gorbatschow/5da8914718c04a18ff7a37343cf0c26d to your computer and use it in GitHub Desktop.
ImGui + GLFW An example of runtime image generation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// An example of runtime image generation using Dear ImGui & GLFW | |
// c++ code by [email protected] | |
// Usage: | |
// RuntimeImage m_image; | |
// m_image.setSize(50, 50); | |
// m_image.setColor(255, 0, 255, 255); | |
// m_image.updateTexture(); | |
// ImGui::Image((void*)(intptr_t)m_image.textureId(), m_image.imageSize()); | |
#pragma once | |
#include <GLFW/glfw3.h> | |
#include <imgui.h> | |
class RuntimeImage | |
{ | |
public: | |
RuntimeImage() { | |
setSize(50, 50); | |
setColor(255, 0, 255, 255); // pink | |
} | |
void setSize(size_t vsize, size_t hsize) | |
{ | |
if ((m_vsize != vsize) || (hsize != hsize)) { | |
if (m_image != nullptr) delete m_image; | |
m_image = new uint32_t[vsize * hsize]; | |
memset(m_image, 0, vsize * hsize * sizeof(uint32_t)); | |
} | |
m_vsize = vsize; | |
m_hsize = hsize; | |
} | |
void setColor(uint32_t red, uint32_t green, uint32_t blue, uint32_t alpha) | |
{ | |
const uint32_t color = (alpha << 24) | (blue << 16) | (green << 8) | red; | |
for (size_t i = 0; i != m_hsize * m_vsize; ++i) { | |
m_image[i] = color; | |
} | |
} | |
void updateTexture() | |
{ | |
glBindTexture(GL_TEXTURE_2D, m_textureId); | |
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); | |
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); | |
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); | |
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, m_hsize, m_vsize, 0, GL_RGBA, GL_UNSIGNED_BYTE, (uint8_t*)m_image); | |
} | |
GLuint textureId() const { return m_textureId; } | |
ImVec2 imageSize() const { return { float(m_vsize), float(m_hsize) }; } | |
private: | |
GLuint m_textureId = 0; | |
uint32_t* m_image = nullptr; | |
GLsizei m_vsize = 0; | |
GLsizei m_hsize = 0; | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment