Home > Articles > Programming > Graphic Programming

Simplifying 3D Graphics Programming for iOS with GLKit

Expert developer Erik Buck, author of Cocoa Design Patterns and the upcoming Learning OpenGL ES for iOS: A Hands-on Guide to Modern 3D Graphics Programming, talks with InformIT Senior Editor Dustin Sullivan and explains how Apple's GLKit can help you design your iOS code for optimal graphics performance with minimal effort and overhead.
Like this article? We recommend

Dustin Sullivan, InformIT: What is GLKit?

Erik Buck: GLKit is a new framework introduced in iOS 5. It's a collection of C functions and Objective-C classes that simplify 3D graphics programming for iOS. To understand the role of GLKit, consider the landscape without it:

iOS supports two largely incompatible libraries for hardware accelerated 3D graphics. The first, OpenGL ES 1.1, is called "fixed-function" because it provides a fixed set of functions for generating 3D graphics. Some of those functions are very powerful and help you get a basic 3D application up and running quickly, but no finite set of functions will ever meet every need. In contrast, OpenGL ES 2.0 is "programmable" in the sense that custom programs written in the "C like" OpenGL ES Shading Language can run directly on the Graphics Processing Unit (GPU) within iOS devices. The problem is that OpenGL ES 2.0 doesn't include most of those powerful functions present in OpenGL ES 1.1. You have to write custom Shading Language programs to get even the most basic graphics output.

Prior to GLKit, iOS application developers faced with a critical decision: Which version of OpenGL ES should be used knowing that porting an application from one version to another is difficult? OpenGL ES 1.1 is the past and OpenGL ES 2.0 is the future, but 1.1 gives you so much capability for free and 2.0 requires huge upfront effort. OpenGL 2.0 has the potential to generate graphics faster than 1.1, but if you are a novice at Shading Language, your custom programs may run slower than the optimized 1.1 functions built and refined over decades by experts.

GLKit works regardless of whether you choose OpenGL ES 1.1 or OpenGL ES 2.0. If you write your code to use GLKit, porting from one to the other is so trivial, you may not need to alter a single line of your code.

IT: Is GLKit a compatibility layer?

EB: GLKit certainly provides a compatibility layer, but it's much more than that. It's a higher level programming interface for 3D graphics. GLKit provide Objective-C classes to make programmers more productive in the same way Cocoa's Objective-C classes make programmers more productive. GLKit contains powerful reusable components. GLKit reduces the amount of code needed to write sophisticated 3D applications for scientific modeling, augmented reality, image processing, and games. I'd say GLKit is on its way to becoming a complete game programming engine.

IT: So, does GLKit work above the level of OpenGL like Cocoa works above the level of Apple's old procedural Carbon frameworks?

EB: In a sense, that's true. Cocoa was originally a collection of cross platform frameworks built on top of the standard C Posix library of functions. Writing a program with Cocoa enabled trivial porting between flavors of Unix like Solaris, HP-UX, and OpenStep as well as Microsoft Windows. That was never the real reason to use Cocoa technology though. The real reason has always been to benefit from a huge improvement in programmer productivity. GLKit is still small and already improves programmer productivity. It's easy to imagine GLKit growing to become the Cocoa of 3D graphics.

IT: How does GLKit do that? How does it raise programmer productivity?

EB: GLKit encapsulates and standardizes many basic features that every 3D iOS application needs. For example, The GLKView class encapsulates all of the code infrastructure needed to integrate 3D graphics. It ties together Cocoa, Core Animation Layers, and OpenGL ES. The GLKViewController class encapsulates all of the code infrastructure needed for timing synchronized to display refresh, automatically manages resources, and provides iOS standard behaviors like orientation changes and suspension when a phone call comes in. Just those two classes eliminate hundreds of lines of code otherwise recreated for every 3D application, but more importantly, they standardize behavior. The alternative is for every developer to recreate expected behaviors, and some will inevitably implement the behaviors sub-optimally or outright wrong.

As another example, GLKit contains a standard math library for 3D graphics. These math functions may be called hundreds of millions of times per second, so it's critical for them to be fast. Anyone can download a free math library from the Internet, but Apple is uniquely positioned to make their library the fastest available on Apple devices. By inclusion in GLKit, Apple's assumes responsibility to debug and optimize the library. That's another few hundred lines of code no longer needed in every 3D application.

Note: GLKView, GLKViewController, and the math library implement features that don't exist in any version of OpenGL ES. GLKit is not just an abstraction layer for OpenGL ES. GLKit includes capabilities above and beyond.

And how could I fail to mention the GLKTextureLoader class? It makes it trivial to load and configure images called "textures" to make modern 3D graphics look realistic. That's another few hundred lines of code you don't have to write. GLKTextureLoader leverages Apple's tried and true Core Graphics framework in its implementation and insulates you from having to know that library too.

IT: You mentioned that GLKit is still small and may grow. How do you see it changing?

EB: For the first release of GLKit, I think Apple focused on making it easy to get a 3D applications up and running on iOS devices. That's particularly important because Apple wants developers to use OpenGL ES 2.0. GLKit eliminates one of the main reasons developers continued to choose the old 1.1 version. GLKit makes it just as easy to get started with OpenGL ES 2.0 as with 1.1.

I can see GLKit migrating to Mac OS X on the desktop. I don't know Apple's plans, but there's no technical reason for GLKit not to work on the desktop. Developers could then share a 3D code between iOS and Mac OS X.

Most of all, Apple is showing us the direction to the future. GLKit classes like GLKReflectionMapEffect and GLKSkyboxEffect provide powerful features long considered to purview of graphics wizards and game engine developers. GLKit implements them at a level high above OpenGL and makes them simple and accessible for anybody. Apple has barely scratched the surface. I imagine a future GLKParticleEffect class, a GLKArticulatedModelEffect class, and a GLKBillboardEffect class. Particles, articulated models, and billboards are all common wizard level 3D graphics components at like reflection maps and skyboxes. In fact, the examples for my new book, Learning OpenGL ES for iOS: A Hands-on Guide to Modern 3D Graphics Programming, include sample implementations of particle effects, articulated models, and billboards. The examples demonstrate graphics concepts explained in the book and implement some of the book's sample mini-games. I hope and suspect the samples foreshadow Apple's intentions. At least to me, they seemed like obvious extensions to GLKit.

IT: Is your new book about GLKit? Does it augment Apple's documentation?

EB: The new book is about modern 3D graphics programming for iOS devices. It's intended for programmers who want to learn 3D graphics starting from basic principles. It isn't really about GLKit, but GLKit is now the most modern and powerful way to use 3D graphics. The book uses GLKit classes and functions as a guided tour through the related 3D programming concepts. Some GLKit features are partially reimplemented in examples to reveal the underlying technology and concepts. After reading the book, I think you will have a thorough understanding of not only how to use GLKit but how to implement it too.

InformIT Promotional Mailings & Special Offers

I would like to receive exclusive offers and hear about products from InformIT and its family of brands. I can unsubscribe at any time.


Pearson Education, Inc., 221 River Street, Hoboken, New Jersey 07030, (Pearson) presents this site to provide information about products and services that can be purchased through this site.

This privacy notice provides an overview of our commitment to privacy and describes how we collect, protect, use and share personal information collected through this site. Please note that other Pearson websites and online products and services have their own separate privacy policies.

Collection and Use of Information

To conduct business and deliver products and services, Pearson collects and uses personal information in several ways in connection with this site, including:

Questions and Inquiries

For inquiries and questions, we collect the inquiry or question, together with name, contact details (email address, phone number and mailing address) and any other additional information voluntarily submitted to us through a Contact Us form or an email. We use this information to address the inquiry and respond to the question.

Online Store

For orders and purchases placed through our online store on this site, we collect order details, name, institution name and address (if applicable), email address, phone number, shipping and billing addresses, credit/debit card information, shipping options and any instructions. We use this information to complete transactions, fulfill orders, communicate with individuals placing orders or visiting the online store, and for related purposes.


Pearson may offer opportunities to provide feedback or participate in surveys, including surveys evaluating Pearson products, services or sites. Participation is voluntary. Pearson collects information requested in the survey questions and uses the information to evaluate, support, maintain and improve products, services or sites, develop new products and services, conduct educational research and for other purposes specified in the survey.

Contests and Drawings

Occasionally, we may sponsor a contest or drawing. Participation is optional. Pearson collects name, contact information and other information specified on the entry form for the contest or drawing to conduct the contest or drawing. Pearson may collect additional personal information from the winners of a contest or drawing in order to award the prize and for tax reporting purposes, as required by law.


If you have elected to receive email newsletters or promotional mailings and special offers but want to unsubscribe, simply email information@informit.com.

Service Announcements

On rare occasions it is necessary to send out a strictly service related announcement. For instance, if our service is temporarily suspended for maintenance we might send users an email. Generally, users may not opt-out of these communications, though they can deactivate their account information. However, these communications are not promotional in nature.

Customer Service

We communicate with users on a regular basis to provide requested services and in regard to issues relating to their account we reply via email or phone in accordance with the users' wishes when a user submits their information through our Contact Us form.

Other Collection and Use of Information

Application and System Logs

Pearson automatically collects log data to help ensure the delivery, availability and security of this site. Log data may include technical information about how a user or visitor connected to this site, such as browser type, type of computer/device, operating system, internet service provider and IP address. We use this information for support purposes and to monitor the health of the site, identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents and appropriately scale computing resources.

Web Analytics

Pearson may use third party web trend analytical services, including Google Analytics, to collect visitor information, such as IP addresses, browser types, referring pages, pages visited and time spent on a particular site. While these analytical services collect and report information on an anonymous basis, they may use cookies to gather web trend information. The information gathered may enable Pearson (but not the third party web trend services) to link information with application and system log data. Pearson uses this information for system administration and to identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents, appropriately scale computing resources and otherwise support and deliver this site and its services.

Cookies and Related Technologies

This site uses cookies and similar technologies to personalize content, measure traffic patterns, control security, track use and access of information on this site, and provide interest-based messages and advertising. Users can manage and block the use of cookies through their browser. Disabling or blocking certain cookies may limit the functionality of this site.

Do Not Track

This site currently does not respond to Do Not Track signals.


Pearson uses appropriate physical, administrative and technical security measures to protect personal information from unauthorized access, use and disclosure.


This site is not directed to children under the age of 13.


Pearson may send or direct marketing communications to users, provided that

  • Pearson will not use personal information collected or processed as a K-12 school service provider for the purpose of directed or targeted advertising.
  • Such marketing is consistent with applicable law and Pearson's legal obligations.
  • Pearson will not knowingly direct or send marketing communications to an individual who has expressed a preference not to receive marketing.
  • Where required by applicable law, express or implied consent to marketing exists and has not been withdrawn.

Pearson may provide personal information to a third party service provider on a restricted basis to provide marketing solely on behalf of Pearson or an affiliate or customer for whom Pearson is a service provider. Marketing preferences may be changed at any time.

Correcting/Updating Personal Information

If a user's personally identifiable information changes (such as your postal address or email address), we provide a way to correct or update that user's personal data provided to us. This can be done on the Account page. If a user no longer desires our service and desires to delete his or her account, please contact us at customer-service@informit.com and we will process the deletion of a user's account.


Users can always make an informed choice as to whether they should proceed with certain services offered by InformIT. If you choose to remove yourself from our mailing list(s) simply visit the following page and uncheck any communication you no longer want to receive: www.informit.com/u.aspx.

Sale of Personal Information

Pearson does not rent or sell personal information in exchange for any payment of money.

While Pearson does not sell personal information, as defined in Nevada law, Nevada residents may email a request for no sale of their personal information to NevadaDesignatedRequest@pearson.com.

Supplemental Privacy Statement for California Residents

California residents should read our Supplemental privacy statement for California residents in conjunction with this Privacy Notice. The Supplemental privacy statement for California residents explains Pearson's commitment to comply with California law and applies to personal information of California residents collected in connection with this site and the Services.

Sharing and Disclosure

Pearson may disclose personal information, as follows:

  • As required by law.
  • With the consent of the individual (or their parent, if the individual is a minor)
  • In response to a subpoena, court order or legal process, to the extent permitted or required by law
  • To protect the security and safety of individuals, data, assets and systems, consistent with applicable law
  • In connection the sale, joint venture or other transfer of some or all of its company or assets, subject to the provisions of this Privacy Notice
  • To investigate or address actual or suspected fraud or other illegal activities
  • To exercise its legal rights, including enforcement of the Terms of Use for this site or another contract
  • To affiliated Pearson companies and other companies and organizations who perform work for Pearson and are obligated to protect the privacy of personal information consistent with this Privacy Notice
  • To a school, organization, company or government agency, where Pearson collects or processes the personal information in a school setting or on behalf of such organization, company or government agency.


This web site contains links to other sites. Please be aware that we are not responsible for the privacy practices of such other sites. We encourage our users to be aware when they leave our site and to read the privacy statements of each and every web site that collects Personal Information. This privacy statement applies solely to information collected by this web site.

Requests and Contact

Please contact us about this Privacy Notice or if you have any requests or questions relating to the privacy of your personal information.

Changes to this Privacy Notice

We may revise this Privacy Notice through an updated posting. We will identify the effective date of the revision in the posting. Often, updates are made to provide greater clarity or to comply with changes in regulatory requirements. If the updates involve material changes to the collection, protection, use or disclosure of Personal Information, Pearson will provide notice of the change through a conspicuous notice on this site or other appropriate way. Continued use of the site after the effective date of a posted revision evidences acceptance. Please contact us if you have questions or concerns about the Privacy Notice or any objection to any revisions.

Last Update: November 17, 2020