University of Minnesota
Master of Science in Software Engineering
/

You are here

SENG Topics: A Survey of Graphic Card Programming Techniques

The purpose of this course is to expose you to a range of programming techniques that will allow you, as a software engineer, to take full advantage of the graphics processors that are available today on most desktop workstations, laptops, tablet computers and smart phones. Graphics processors produce and display the images that are shown on these devices, and their processing power and memory have increased dramatically over the last ten years. Applications that make heavy use of this computational capability include computer aided design, painting and drawing, image manipulation, scientific computation, and video games. Today even the user interface for the operating system makes use of the graphics processing capability that is available on every type of computer manufactured today.

The goal of this course is to make you aware of the variety of different ways in which you can harness the power of a graphics card when you develop software for a computer. We will survey four different types of application programmer interfaces (API) that have been created to exploit the capabilities of contemporary graphics processors. This will not be a computer graphics class per se, but you will learn enough about graphics to understand what each function in the API is intended to accomplish. As software engineers you will have sufficient knowledge to be consumers of the software package but not developers of the next generation of this type of API. The following are the four categories of graphics card software that we will survey in this class:

basic graphics
- This is the traditional graphics API that allows you to generate and interact with pictures of two and three dimensional objects. By making calls to these types of routines one can model the shape and color appearance of an object, establish the position and characteristics of a camera, and create a perspective projection. Examples of this type of API include OpenGL 2.0 and Direct3D.
graphics engine
- This is a layer of software that sits above the basic graphics API described above and allows the programmer to quickly create applications that include the movement and interaction of complex three dimensional objects. This is the API that is commonly used in conjunction with a physics engine to create contemporary video games. Examples of this type of API include OGRE, G3D, Irrlicht Engine, Unity, Source, Unreal Engine, and id Tech.
pixel shaders
- This is a layer of software which sits below the basic graphics API and provides the capability to write a small inner loop program which executes very quickly on the graphics card every time a pixel is drawn. The original goal was to allow complex surface reflection effects, but shaders have been creatively used to accomplish a wide variety of new computer graphics effects. Examples of this type of API include GLSL, Cg, and HLSL.
parallel programming
- This is a non-graphics API which was developed to exploit the parallel processing capability of a graphics card. While not originally intended to provide this type of computing to the end user, graphics cards must operate in parallel to update all regions of the screen fast enough to provide continuous motion. Applications that require significant computer horsepower, such as scientific and engineering simulations, are being written using this API. Examples of this type of API include CUDA, OpenCL, and DirectCompute.

As you study each type of graphics card API you will write a computer program that makes use of a representative public domain example of that type of API. There will also be a final project for the course in which you can delve deeper into the type of graphics card API that is of the most interest to you.

Gary Meyer: meyer@cs.umn.edu
Information on Gary (http://www-users.cs.umn.edu/~meyer/)

Course ID: 
SENG Topics
Complete Name of the Course: 
A Survey of Graphic Card Programming Techniques
Intended Semester: 
elective