Sign in to follow this  

OpenGL GLUT or native window?

This topic is 1806 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

GLUT creates native windows, but for several platforms. And there isn't really any best. GLUT gives you cross-platform and might be a bit easier to use.

Share this post


Link to post
Share on other sites
I find GLUT limiting and manually creating a native window annoying. Some other options are using SDL or SFML to handle the windowing for you.

Share this post


Link to post
Share on other sites
Personally, on BSD/Linux, I use a native window (via glx) but for Windows and Mac OS X I am quite happy with glut.

Glut is a C library which does annoy a few C++ developers but I personally prefer it (Even with C++).

Creating a native window in Windows is a little messy so GLFW or *glut is probably going to be better for you.

Some other full GUI library alternatives are...

wxWidgets - wxGLCanvas
Gtk - gtkglext

Share this post


Link to post
Share on other sites

Performance wise - Programming with the native libraries is probably the best bet. Glut has several issues such as not being able to control your main loop and how it exits. As well as some licensing issues that require the use of Freeglut. SDL/SFML/GLFW is probably the best bet if you want to make a cross platform window as these all give you control and some nice extra features. Personally i use SFML 2.0. Windows programming is very messy and un-intuitive, not to mention not cross platform (Obviously) and so i generally avoid it. I don't belive Glut has been updated in a long time either but i may be wrong. I'm quite sure that the window has little effect performance wise. It's more to do with how you develop your application. Just use whatever library you feel most comfortable with and allows you to get your applications running fast.

Share this post


Link to post
Share on other sites

I recommend neither.  The truth is that either is just fine for the basic task of creating a window; if you want to do anything else with that window (like recieve input into it or generate sound from it) then GLUT will give you a simple (and simplistic) way of doing some of that, going native will give you more comprehensive (but more complex) capabilities.

 

Performance?  It doesn't matter a damn.  This is just creating a window; once that's been done your OpenGL driver and graphics hardware take over for all rendering tasks.  The determinator of performance will be your OpenGL driver and graphics hardware, not how you created your window.

Share this post


Link to post
Share on other sites

Native on windows is a bit messy for me. I use GLFW, similar to GLUT but much nicer to use. Less features than SDL though, but that's fine with my uses.

Share this post


Link to post
Share on other sites
Personally I like GLFW is a minimalist platform independent way of opening a window and creating an OpenGL context and having a very permissive license. Out of the box, it works on "Windows, Mac OS X and many Unix-like systems using the X Window System, such as Linux and FreeBSD". My experience with the Raspberry Pi is limited, but shouldn't it fall under "X Window System"?

That said, I would advise against writing your own window manager library. Even for one platform, correct window management and OpenGL context creation is tedious. Not interesting, or important or "something you should be doing", just very tedious. Doing that on multiple platforms just makes something already annoying even more so and whatever you write will probably look very much like GLFW anyway (or simply worse).

There are scenarios where the minimalist approach is not enough, but if cross platform is still a requirement I would rather investigate SFML or even Qt if things go more in the direction of a full-scale application. Both are more heavyweight and feature-rich (much, much more in case of Qt).

Share this post


Link to post
Share on other sites

Hi, i'm starting this topic to ask what is best GLUT or native window to use with OpenGL?

 

GLUT. Its easier, its cross platform. Believe me, if WinAPI is something you can handle with MSDN opened, X11 is hell.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Similar Content

    • By _OskaR
      Hi,
      I have an OpenGL application but without possibility to wite own shaders.
      I need to perform small VS modification - is possible to do it in an alternative way? Do we have apps or driver modifictions which will catch the shader sent to GPU and override it?
    • By xhcao
      Does sync be needed to read texture content after access texture image in compute shader?
      My simple code is as below,
      glUseProgram(program.get());
      glBindImageTexture(0, texture[0], 0, GL_FALSE, 3, GL_READ_ONLY, GL_R32UI);
      glBindImageTexture(1, texture[1], 0, GL_FALSE, 4, GL_WRITE_ONLY, GL_R32UI);
      glDispatchCompute(1, 1, 1);
      // Does sync be needed here?
      glUseProgram(0);
      glBindFramebuffer(GL_READ_FRAMEBUFFER, framebuffer);
      glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
                                     GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, texture[1], 0);
      glReadPixels(0, 0, kWidth, kHeight, GL_RED_INTEGER, GL_UNSIGNED_INT, outputValues);
       
      Compute shader is very simple, imageLoad content from texture[0], and imageStore content to texture[1]. Does need to sync after dispatchCompute?
    • By Jonathan2006
      My question: is it possible to transform multiple angular velocities so that they can be reinserted as one? My research is below:
      // This works quat quaternion1 = GEQuaternionFromAngleRadians(angleRadiansVector1); quat quaternion2 = GEMultiplyQuaternions(quaternion1, GEQuaternionFromAngleRadians(angleRadiansVector2)); quat quaternion3 = GEMultiplyQuaternions(quaternion2, GEQuaternionFromAngleRadians(angleRadiansVector3)); glMultMatrixf(GEMat4FromQuaternion(quaternion3).array); // The first two work fine but not the third. Why? quat quaternion1 = GEQuaternionFromAngleRadians(angleRadiansVector1); vec3 vector1 = GETransformQuaternionAndVector(quaternion1, angularVelocity1); quat quaternion2 = GEQuaternionFromAngleRadians(angleRadiansVector2); vec3 vector2 = GETransformQuaternionAndVector(quaternion2, angularVelocity2); // This doesn't work //quat quaternion3 = GEQuaternionFromAngleRadians(angleRadiansVector3); //vec3 vector3 = GETransformQuaternionAndVector(quaternion3, angularVelocity3); vec3 angleVelocity = GEAddVectors(vector1, vector2); // Does not work: vec3 angleVelocity = GEAddVectors(vector1, GEAddVectors(vector2, vector3)); static vec3 angleRadiansVector; vec3 angularAcceleration = GESetVector(0.0, 0.0, 0.0); // Sending it through one angular velocity later in my motion engine angleVelocity = GEAddVectors(angleVelocity, GEMultiplyVectorAndScalar(angularAcceleration, timeStep)); angleRadiansVector = GEAddVectors(angleRadiansVector, GEMultiplyVectorAndScalar(angleVelocity, timeStep)); glMultMatrixf(GEMat4FromEulerAngle(angleRadiansVector).array); Also how do I combine multiple angularAcceleration variables? Is there an easier way to transform the angular values?
    • By dpadam450
      I have this code below in both my vertex and fragment shader, however when I request glGetUniformLocation("Lights[0].diffuse") or "Lights[0].attenuation", it returns -1. It will only give me a valid uniform location if I actually use the diffuse/attenuation variables in the VERTEX shader. Because I use position in the vertex shader, it always returns a valid uniform location. I've read that I can share uniforms across both vertex and fragment, but I'm confused what this is even compiling to if this is the case.
       
      #define NUM_LIGHTS 2
      struct Light
      {
          vec3 position;
          vec3 diffuse;
          float attenuation;
      };
      uniform Light Lights[NUM_LIGHTS];
       
       
    • By pr033r
      Hello,
      I have a Bachelor project on topic "Implenet 3D Boid's algorithm in OpenGL". All OpenGL issues works fine for me, all rendering etc. But when I started implement the boid's algorithm it was getting worse and worse. I read article (http://natureofcode.com/book/chapter-6-autonomous-agents/) inspirate from another code (here: https://github.com/jyanar/Boids/tree/master/src) but it still doesn't work like in tutorials and videos. For example the main problem: when I apply Cohesion (one of three main laws of boids) it makes some "cycling knot". Second, when some flock touch to another it scary change the coordination or respawn in origin (x: 0, y:0. z:0). Just some streng things. 
      I followed many tutorials, change a try everything but it isn't so smooth, without lags like in another videos. I really need your help. 
      My code (optimalizing branch): https://github.com/pr033r/BachelorProject/tree/Optimalizing
      Exe file (if you want to look) and models folder (for those who will download the sources):
      http://leteckaposta.cz/367190436
      Thanks for any help...

  • Popular Now