OpenGL (1.2 - 2.0) Code Samples - Page 14

Simple Displacement Mapping Using Cg
 

This sample demonstrates how to perform displacement mapping using Cg. The sample requires support for CG_PROFILE_VP40, which basically means that your card needs to support GL_ARB_vertex_program and GL_NV_vertex_program3.

Relevant Keywords: cgGLIsProfileSupported, cgCreateContext, cgCreateProgramFromFile, cgGLLoadProgram, cgGetNamedParameter, cgGLSetStateMatrixParameter, cgGLSetParameter4fv, cgGLBindProgram, cgGLEnableProfile, cgGLDisableProfile, cgDestroyProgram, cgDestroyContext, CGprofile, CGcontext, CGprogram, CGparameter, GL_NEAREST, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MAG_FILTER, GL_RGBA_FLOAT32_ATI, CG_PROFILE_VP40, CG_SOURCE, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY, POSITION, COLOR0, NORMAL, TEXCOORD0, sampler2D, TEXUNIT1, state.matrix.mvp, main, float4, uniform, float4x4, and mul.

 

Off-screen Rendering Using Frame-Buffer Objects
 

This sample demonstrates how to create dynamic textures  through off-screen rendering. The off-screen rendering step is accomplished using a frame-buffer and render-buffer object, which is created using OpenGL's EXT_framebuffer_object extension.

As a demonstration, a spinning textured cube is rendered to a frame-buffer object, which is in turn, used to create a dynamic texture. The dynamic texture is then used to texture a second spinning cube, which will be rendered to the application's window.

Relevant Keywords: glIsRenderbufferEXT, glBindRenderbufferEXT, glDeleteRenderbuffersEXT, glGenRenderbuffersEXT, glRenderbufferStorageEXT, glGetRenderbufferParameterivEXT, glIsFramebufferEXT, glBindFramebufferEXT, glDeleteFramebuffersEXT, glGenFramebuffersEXT, glCheckFramebufferStatusEXT, glFramebufferTexture1DEXT, glFramebufferTexture2DEXT, glFramebufferTexture3DEXT, glFramebufferRenderbufferEXT, glGetFramebufferAttachmentParameterivEXT, glGenerateMipmapEXT, PFNGLISRENDERBUFFEREXTPROC, PFNGLBINDRENDERBUFFEREXTPROC, PFNGLDELETERENDERBUFFERSEXTPROC, PFNGLGENRENDERBUFFERSEXTPROC, PFNGLRENDERBUFFERSTORAGEEXTPROC, PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC, PFNGLISFRAMEBUFFEREXTPROC, PFNGLBINDFRAMEBUFFEREXTPROC, PFNGLDELETEFRAMEBUFFERSEXTPROC, PFNGLGENFRAMEBUFFERSEXTPROC, PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC, PFNGLFRAMEBUFFERTEXTURE1DEXTPROC, PFNGLFRAMEBUFFERTEXTURE2DEXTPROC, PFNGLFRAMEBUFFERTEXTURE3DEXTPROC, PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC, PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC, PFNGLGENERATEMIPMAPEXTPROC, GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, GL_FRAMEBUFFER_EXT, GL_FRAMEBUFFER_COMPLETE_EXT, GL_FRAMEBUFFER_UNSUPPORTED_EXT, GL_COLOR_ATTACHMENT0_EXT, and GL_DEPTH_ATTACHMENT_EXT.

Note: The EXT_framebuffer_object extension is an excellent replacement for the WGL_ARB_pbuffer and WGL_ARB_render_texture combo which is normally used to create dynamic textures. An example of this older technique can be found here.
 

 

Simple Geometry Shader Using Cg
 

This sample demonstrates how to use a geometry shader to increase the tessellation of simple triangles by subdividing them into four new triangles.

 

Alpha Blending with Multisample Transparency
 

This sample demonstrates how to use multi-sample transparency to skip the typically necessary step of sorting all transparent geometry back to front. See the related sample "ogl_alpha_blending_texture" for the more typical setup which does require sorting.