Applied changes to submit texture references to dear imgui
parent
60acd12d94
commit
e1f5b0fa0f
|
@ -244,6 +244,36 @@ void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data)
|
||||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, g_ElementsHandle);
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, g_ElementsHandle);
|
||||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)cmd_list->IdxBuffer.Size * sizeof(ImDrawIdx), (const GLvoid*)cmd_list->IdxBuffer.Data, GL_STREAM_DRAW);
|
glBufferData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)cmd_list->IdxBuffer.Size * sizeof(ImDrawIdx), (const GLvoid*)cmd_list->IdxBuffer.Data, GL_STREAM_DRAW);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++)
|
||||||
|
{
|
||||||
|
const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i];
|
||||||
|
if (pcmd->UserCallback)
|
||||||
|
{
|
||||||
|
pcmd->UserCallback(cmd_list, pcmd);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
intptr_t ptr = (intptr_t)pcmd->TextureId;
|
||||||
|
|
||||||
|
// MOD START (martin), 2018-03-09: support texture references that point to an address of a texture id
|
||||||
|
if (ptr > 1024 * 1024)
|
||||||
|
{
|
||||||
|
GLTextureRef* texture_ref = (GLTextureRef*)pcmd->TextureId;
|
||||||
|
GLuint* texture_ptr = (GLuint*) texture_ref->mTextureIdPtr;
|
||||||
|
glBindTexture(GL_TEXTURE_2D, *texture_ptr);
|
||||||
|
} else {
|
||||||
|
glBindTexture(GL_TEXTURE_2D, (GLuint)(intptr_t)pcmd->TextureId);
|
||||||
|
}
|
||||||
|
// MOD END (martin), 2018-03-09: support texture references that point to an address of a texture id
|
||||||
|
glScissor((int)pcmd->ClipRect.x, (int)(fb_height - pcmd->ClipRect.w), (int)(pcmd->ClipRect.z - pcmd->ClipRect.x), (int)(pcmd->ClipRect.w - pcmd->ClipRect.y));
|
||||||
|
glDrawElements(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, idx_buffer_offset);
|
||||||
|
}
|
||||||
|
idx_buffer_offset += pcmd->ElemCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++)
|
for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++)
|
||||||
{
|
{
|
||||||
const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i];
|
const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i];
|
||||||
|
@ -263,9 +293,18 @@ void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data)
|
||||||
else
|
else
|
||||||
glScissor((int)clip_rect.x, (int)clip_rect.y, (int)clip_rect.z, (int)clip_rect.w); // Support for GL 4.5's glClipControl(GL_UPPER_LEFT)
|
glScissor((int)clip_rect.x, (int)clip_rect.y, (int)clip_rect.z, (int)clip_rect.w); // Support for GL 4.5's glClipControl(GL_UPPER_LEFT)
|
||||||
|
|
||||||
// Bind texture, Draw
|
// MOD START (martin), 2018-03-09: support texture references that point to an address of a texture id
|
||||||
glBindTexture(GL_TEXTURE_2D, (GLuint)(intptr_t)pcmd->TextureId);
|
intptr_t ptr = (intptr_t)pcmd->TextureId;
|
||||||
glDrawElements(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, idx_buffer_offset);
|
if (ptr > 1024 * 1024)
|
||||||
|
{
|
||||||
|
GLTextureRef* texture_ref = (GLTextureRef*)pcmd->TextureId;
|
||||||
|
GLuint* texture_ptr = (GLuint*) texture_ref->mTextureIdPtr;
|
||||||
|
glBindTexture(GL_TEXTURE_2D, *texture_ptr);
|
||||||
|
} else {
|
||||||
|
glBindTexture(GL_TEXTURE_2D, (GLuint)(intptr_t)pcmd->TextureId);
|
||||||
|
}
|
||||||
|
// MOD END (martin), 2018-03-09: support texture references that point to an address of a texture id
|
||||||
|
glDrawElements(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, idx_buffer_offset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
idx_buffer_offset += pcmd->ElemCount;
|
idx_buffer_offset += pcmd->ElemCount;
|
||||||
|
|
|
@ -30,6 +30,16 @@
|
||||||
#define IMGUI_IMPL_OPENGL_LOADER_GL3W
|
#define IMGUI_IMPL_OPENGL_LOADER_GL3W
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// MOD START (martin), 2018-03-09: support texture references that point to an address of a texture id
|
||||||
|
union GLTextureRef {
|
||||||
|
int mTextureId;
|
||||||
|
struct {
|
||||||
|
int magic;
|
||||||
|
unsigned int* mTextureIdPtr;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
// MOD END (martin), 2018-03-09: support texture references that point to an address of a texture id
|
||||||
|
|
||||||
IMGUI_IMPL_API bool ImGui_ImplOpenGL3_Init(const char* glsl_version = NULL);
|
IMGUI_IMPL_API bool ImGui_ImplOpenGL3_Init(const char* glsl_version = NULL);
|
||||||
IMGUI_IMPL_API void ImGui_ImplOpenGL3_Shutdown();
|
IMGUI_IMPL_API void ImGui_ImplOpenGL3_Shutdown();
|
||||||
IMGUI_IMPL_API void ImGui_ImplOpenGL3_NewFrame();
|
IMGUI_IMPL_API void ImGui_ImplOpenGL3_NewFrame();
|
||||||
|
|
Loading…
Reference in New Issue