Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

example_glfw_opengl3 doesn't display imgui content on OpenGL3.0 #1938

Closed
linaran opened this issue Jul 10, 2018 · 12 comments
Closed

example_glfw_opengl3 doesn't display imgui content on OpenGL3.0 #1938

linaran opened this issue Jul 10, 2018 · 12 comments

Comments

@linaran
Copy link

linaran commented Jul 10, 2018

Version/Branch of Dear ImGui:

1.62 release

Back-end file/Renderer/OS:

Trying to use GLFW with OpenGL3 on Linaro Linux release 16.02. Dragonboard 410c came with that OS. Supported OpenGL by the driver is "OpenGL version string: 3.0 Mesa 18.0.3" (output from glxinfo).

My Issue/Question:

In short I don't see any imgui content (no window it's just simple blue color) when I run the example_glfw_opengl3 sample. Note that I modified the main.cpp. I changed the minor version to 0 (since my driver supports OpenGL3.0) and removed the glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE) line since OpenGL3.0 doesn't support profiles.

OpenGL2 examples and it's integration with my own code works fine. I'm just not having any luck with OpenGL3.0 (can't try OpenGL3.2). I read the documentation and searched through the issues and googled this issue but didn't find anything helpful. If this is a duplicate question I'll see to removing it.

Standalone, minimal, complete and verifiable example:
I marked the changes within main.cpp with 3 excalamation marks (!!!). Everything else is vanilla.

int main(int, char**)
{
    // Setup window
    glfwSetErrorCallback(glfw_error_callback);
    if (!glfwInit())
        return 1;
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); // Changed to 0!!!
//    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); Commented out!!!
#if __APPLE__
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
#endif
    GLFWwindow* window = glfwCreateWindow(1280, 720, "ImGui GLFW+OpenGL3 example", NULL, NULL);
    glfwMakeContextCurrent(window);
    glfwSwapInterval(1); // Enable vsync
    gl3wInit();
@ocornut
Copy link
Owner

ocornut commented Jul 10, 2018

Could you try changing the GLSL version to #130 and/or querying the shader compilation steps for errors?
I will/should add more error handling to this example, will try to do so now..

@ebachard
Copy link

ebachard commented Jul 10, 2018

Hello,

@linaran : can you please comment the #if APPLE ... #endif in main.cpp ? Looks like you need the line

 glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);

FYI, I got Linux (x86_64, Intel) here too. My new machine is OpenGL 4.5 capable, but I got the same issue when using 3.0. And commenting the lines above (#ifdef / #endif) makes it work as expected.

HTH

@ocornut
Copy link
Owner

ocornut commented Jul 10, 2018

I have pushed a change to report shader compile and link error (I wonder how it is reported in this situation).

We ought to fix those recurring problem, perhaps lock the version GL/GLSL version on Mac and use lower one on other platforms?

Also linking to #1900, #1513, #1466, #1116 etc.

@linaran
Copy link
Author

linaran commented Jul 10, 2018

@ocornut
I'm sort of still learning OpenGL but I was under the impression that OpenGL3.0 came with GLSL1.30 by default (didn't know you can change GLSL versions)? I'll build the example with your changes and report errors.

@ebachard
I tried commenting out those lines and nothing changed.

@ocornut
Copy link
Owner

ocornut commented Jul 10, 2018

You can call `ImGui_ImplOpenGL3_Init("#version 130") to build with a different version.
Try updating to latest/master so you'll also benefit from the error reporting code I have just pushed.

@ebachard
Copy link

ebachard commented Jul 10, 2018

@linaran

Let's start with at the begining. Can you post the full output of :

glxinfo -B  

-B option gives a summary of the most important information returned by your graphic card driver.

This will tell us what exactly you can expect with your machine.

@linaran
Copy link
Author

linaran commented Jul 10, 2018

Okay I just cloned the latest commit from master.

@ebachard
Since I'm working on 2 computers and the linux one has a limited number of usb ports direct copy paste from the terminal is cumbersome (doing it over SD card).

name of display: :0
display: :0  screen: 0
direct rendering: Yes
Extended renderer info (GLX_MESA_query_renderer):
    Vendor: freedreno (0x5143)
    Device: FD307 (0xffffffff)
    Version: 18.0.3
    Accelerated: yes
    Video memory: 10MB
    Unified memory: yes
    Preferred profile: core (0x1)
    Max core profile version: 3.1
    Max compat profile version: 3.0
    Max GLES1 profile version: 1.1
    Max GLES[23] profile version: 3.0
OpenGL vendor string: freedreno
OpenGL renderer string: FD307
OpenGL core profile version string: 3.1 (Core Profile) Mesa 18.0.3
OpenGL core profile shading language version string: 1.40
OpenGL core profile context flags: (none)

OpenGL version string: 3.0 Mesa 18.0.3
OpenGL shading language version string: 1.30
OpenGL context flags: (none)

OpenGL ES profile version string: OpenGL ES 3.0 Mesa 18.0.3
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.00

@ocornut
I pulled the latest commit from master, implemented the changes to OpenGL3.0 and these are the errros I got.

ERROR: ImGui_ImplOpenGL3_CreateDeviceObjects: failed to compile vertex sahder!
0:1(10): error: GLSL 1.50 is not supported. Supported versions are: 1.10, 1.20, 1.30 and 1.00 ES

The same goes for the fragment shader and the linker failed as expected. I will be changing the version to GLSL1.30 per your instructions.

@linaran
Copy link
Author

linaran commented Jul 10, 2018

@ocornut
Changing the GLSL to 1.30 did the trick 👍
Thanks :)

@ocornut
Copy link
Owner

ocornut commented Jul 10, 2018

Thanks for the confirmation @linaran.

I noticed that the shader works with 130 140 150 with the same context here,
If I change the Texture() call to Texture2D() is also work with 100 (with warnings) and 120.
I'll put a few changes soon.

What's unclear to me is how good GL drivers are honoring compatibility with older GLSL versions than the one desired by the context..

ocornut added a commit that referenced this issue Jul 10, 2018
…mple app default to GL 3.0 + GLSL 130 (instead of GL 3.2 + GLSL 150) unless on Mac. (#1938, #1900, #1513, #1466, etc.)
@ocornut
Copy link
Owner

ocornut commented Jul 10, 2018

I have pushed changes to the Examples+Bindings now. @linaran if you have a chance could you confirm that the unmodified repository now works with your configuration? Thanks!

@linaran
Copy link
Author

linaran commented Jul 11, 2018

@ocornut I'm confirming that the unmodified repository works. Cheers!

@ocornut
Copy link
Owner

ocornut commented Jul 11, 2018

Excellent, closing this issue then!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants