Skip to content

Instantly share code, notes, and snippets.

@GUIEEN
Forked from v3n/ogl_osx.md
Created June 8, 2022 06:55
Show Gist options
  • Save GUIEEN/b410334235aeb0233ee5b1ae58efa135 to your computer and use it in GitHub Desktop.
Save GUIEEN/b410334235aeb0233ee5b1ae58efa135 to your computer and use it in GitHub Desktop.
GLFW on OS X starting guide

OpenGL Development on OS X

While it's possible to download packages and install them manually, it's such a hassle. Fortunately for us, OS X has an unofficial package manager called http://brew.sh Let's install it. Open you Terminal and paste the following code:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Great. Homebrew will automatically install packages to /usr/local. Conveniently, that directory is already in your include and link paths.

Now, some bad news. Freeglut will not run properly on OS X. It attempts to run through the X-Windows server. Unfortunately for us, X11/XQuartz (the X-Windows emulations on OS X) will not support an OpenGL context past OpenGL 1.3. So we will have to use a newer library, called GLFW. Let's install that now.

In Terminal:

brew install glfw

GLFW3 should now be installed. Here's a substitute tutorial file with GLFW instead of freeglut.

/* Ask for an OpenGL Core Context */
#define GLFW_INCLUDE_GLCOREARB
#include <GLFW/glfw3.h>

#define BUFFER_OFFSET(i) ((char *)NULL + (i))

int main(int argc, char** argv)
{
  GLFWwindow* window;

  /* Initialize the library */
  if ( !glfwInit() )
  {
     return -1;
  }

#ifdef __APPLE__
  /* We need to explicitly ask for a 3.2 context on OS X */
  glfwWindowHint (GLFW_CONTEXT_VERSION_MAJOR, 3);
  glfwWindowHint (GLFW_CONTEXT_VERSION_MINOR, 2);
  glfwWindowHint (GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
  glfwWindowHint (GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
#endif

  /* Create a windowed mode window and its OpenGL context */
  window = glfwCreateWindow( 1280, 720, "Hello World", NULL, NULL );
  if (!window)
  {
     glfwTerminate();
     return -1;
  }

  /* Make the window's context current */
  glfwMakeContextCurrent(window);

  /* Loop until the user closes the window */
  while (!glfwWindowShouldClose(window))
  {
    /* Render here */
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear the buffers

    /* Swap front and back buffers */
    glfwSwapBuffers(window);

    /* Poll for and process events */
    glfwPollEvents();
  }

  glfwTerminate();
  return 0;
}

Now we need to compile this code. GLFW needs to link against several OS X library. Here's the compiler invokation to compile this code sample properly.

clang++ -std=c++11 -stdlib=libc++ -lglfw3 -framework CoreVideo -framework OpenGL -framework IOKit -framework Cocoa -framework Carbon </path/to/cpp/file>

You can run the resulting file by typing ./a.out

Congratulations! You've completed your first OS X OpenGL project.

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