<div dir="ltr">There are hundreds of gl functions… I have to rewrite the signatures for all of them??<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Mar 30, 2017 at 11:31 AM, Joe Groff <span dir="ltr">&lt;<a href="mailto:jgroff@apple.com" target="_blank">jgroff@apple.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5"><br>
&gt; On Mar 30, 2017, at 7:47 AM, Kelvin Ma via swift-users &lt;<a href="mailto:swift-users@swift.org">swift-users@swift.org</a>&gt; wrote:<br>
&gt;<br>
&gt; OpenGL functions are loaded at runtime by a function loader (like GLFW). They’re defined in a header but obviously they don’t have definitions at compile time so it causes a slew of linker errors when I try to build<br>
&gt;<br>
&gt;     error: undefined reference to &#39;glEnable&#39;<br>
&gt;     error: undefined reference to &#39;glBlendFunc&#39;<br>
&gt;     error: undefined reference to &#39;glClearColor&#39;<br>
&gt;     clang: error: linker command failed with exit code 1 (use -v to see invocation)<br>
&gt;     ...<br>
&gt;<br>
&gt; How do I build programs that use OpenGL functions?<br>
<br>
</div></div>If the functions are exported by the OpenGL library you&#39;re linking against, then you may need to just use -lGL to link against it. That&#39;s not likely to be portable, though, since implementations vary in what they statically export. The macro metaprogramming used by GLFW and other libraries to dynamically load GL entry points is probably not going to get picked up by Swift&#39;s C importer, so you&#39;d need to roll your own solution. Something like this might work as a start:<br>
<br>
func loadGLFunction&lt;T&gt;(name: String) -&gt; T {<br>
#if os(macOS)<br>
  return unsafeBitCast(dlsym(RTLD_<wbr>DEFAULT, name), to: T.self)<br>
#elseif os(Linux)<br>
  return unsafeBitCast(<wbr>glXGetProcAddress(name), to: T.self)<br>
#elseif os(Windows)<br>
  return unsafeBitCast(<wbr>wglGetProcAddress(name), to: T.self)<br>
#endif<br>
}<br>
<br>
enum GL {<br>
  static let begin: @convention(c) (GLenum) -&gt; Void = loadGLFunction(&quot;glBegin&quot;)<br>
  static let end: @convention(c) () -&gt; Void = loadGLFunction(&quot;glEnd&quot;)<br>
  /*etc*/<br>
}<br>
<span class="HOEnZb"><font color="#888888"><br>
-Joe</font></span></blockquote></div><br></div>