OpenGL Interoperability with CUDA

Postprocess Effect

Postprocess Effect

In this article I will discuss how you can use OpenGL textures and buffers in a CUDA kernel. I will demonstrate a simple post-process effect that can be applied to off-screen textures and then rendered to the screen using a full-screen quad. I will assume the reader has some basic knowledge of C/C++ programming, OpenGL, and CUDA. If you lack OpenGL knowledge, you can refer to my previous article titled Introduction to OpenGL or if you have never done anything with CUDA, you can follow my previous article titled Introduction to CUDA.

Continue reading

CUDA Memory Model

CUDA Memory Model

CUDA Memory Model

In this article, I will introduce the different types of memory your CUDA program has access to. I will talk about the pros and cons for using each type of memory and I will also introduce a method to maximize your performance by taking advantage of the different kinds of memory.
I will assume that the reader already knows how to setup a project in Microsoft Visual Studio that takes advantage of the CUDA programming API. If you don’t know how to setup a project in Visual Studio that uses CUDA, I recommend you follow my previous article titled [Introduction to CUDA]
Continue reading

CUDA Thread Execution Model

Grid of Thread Blocks

Grid of Thread Blocks

In a previous article, I gave an introduction to programming with CUDA. Now I’d like to go into a little bit more depth about the CUDA thread execution model and the architecture of a CUDA enabled GPU. I assume that the reader has basic knowledge about CUDA and already knows how to setup a project that uses the CUDA runtime API. If you don’t know how to setup a project with CUDA, you can refer to my previous article: Introduction to CUDA.

Continue reading

Introduction to CUDA using Visual Studio 2008

NVIDIA CUDA

NVIDIA CUDA

In this article, I will give a brief introduction to using NVIDIA’s CUDA programming API to perform General Purpose Graphics Processing Unit Programming (or just GPGPU Programming). I will also show how to setup a project in Visual Studio that uses the CUDA runtime API to create a simple CUDA program.
Continue reading

Using Dynamic Link Libraries (DLL) to Create Plug-Ins

Dynamic Linking Library

Dynamic Linking Library

In this article I will describe how to use Dynamic Link Libraries (DLL) in your own projects. I will show an example of how to define a DLL that is statically linked at compile-time to support implicit loading of the DLL at runtime. I will also show how to to use explicit DLL loading to allow your project to support plug-ins that can be dynamically loaded into your main executable at run-time. For this example, I will use Microsoft’s Visual Studio 2008 as the programming IDE.

Continue reading

Website Awesomization

Google Analytics

Google Analytics

In this article I will briefly summarize my own experiences while trying to maximize my website’s search engine presence. I will discuss my experience with choosing a good hosting provider, and getting a website started quickly.

I will also show how you can leverage the power of social media tools like Facebook and Twitter to further your website’s exposure.

If you decide to manage your own website then you will want to know how you can help search engines find and index your site. I will introduce a few tools that you can use on your own sites to ensure you can maximize your page rating so your website comes to the top of the search results.

If you can’t see how much interest your website is generating, then you won’t know if your hard work is paying off. I will also talk about Google’s solution to help you track your web site using Google Analytics.

Continue reading

Projected Shadow Mapping with Cg and OpenGL

Projective Shadow Mapping

Projective Shadow Mapping

In this article, I will show how to implement projective shadow mapping in OpenGL using Cg shaders.
The basis of this post comes from the article titled [Transformation and Lighting in Cg]. I will assume the reader has a basic understanding of OpenGL and already knows how to setup an application that uses OpenGL. If you require a refresher on setting up an application using OpenGL, you can refer to my previous article titled [Introduction to OpenGL for Game Programmers].

I will take advantage of a few OpenGL extensions such as GL_ARB_framebuffer_object to create a offscreen framebuffer to render to and and GL_ARB_texture_border_clamp for clamping to the border color of the projective textures.

Continue reading

Normal Mapping with Cg and OpenGL

NormalMapping

NormalMapping

In this article, I will discuss a technique called normal mapping. Normal mapping is a shader technique that encodes pre-computed surface normals in a texture that can be used to add extra detail to a surface without the requirement of adding extra geometry. Before reading this article, you should have a basic understanding of OpenGL and you should know how to setup a Cg shader. For a review on OpenGL, you can refer to my previous article titled [Introduction to OpenGL for Game Programmers] and to learn how to incorporate Cg shaders in your own applications, you can refer to my article titled [Introduction to Cg Runtime with OpenGL].

Continue reading