OpenGL

Important: Gotchas

Local

External


Context Sharing


Reference


Gotchas

See Also: 3D Programming | Gotchas


Default Settings info


Stride

?? Is Intertwined better ??

Used to interleave values in an array of values. This lets data like the following be used in gl*Pointer(); funcs


GLfloat vals[] = {
// r    g    b        x      y      z
  1.0, 0.0, 1.0,     100.0, 200.0, 300.0,
  1.0, 0.0, 1.0,     100.0, 200.0, 300.0,  
};

Backface Stuff


// GL_FRONT, GL_BACK, GL_FRONT_AND_BACK
// GL_FILL, GL_LINE, GL_POINT
glPolygonMode(GL_FRONT, GL_FILL);
glPolygonMode(GL_BACK, GL_LINE);

NeHe

#NameMore
1Setting Up An OpenGL Window
02Your First Polygon
3Adding Color
4Rotation
53D Shapes
6Texture Mapping
7Texture Filters, Lighting & Keyboard Control
8Blending
9Moving Bitmaps In 3D Space
10Loading And Moving Through A 3D World
11Flag Effect (Waving Texture)
12Display Lists
13 Bitmap FontsFont
14 Outline FontsFont
15Texture Mapped Outline FontsFont
16Cool Looking Fog
17 2D Texture FontFont
18Quadrics
19Particle Engine Using Triangle Strips
20Masking
21Lines, Antialiasing, Timing, Ortho View And Simple Sounds
22Bump-Mapping, Multi-Texturing & Extensions
23Sphere Mapping Quadrics In OpenGL
24Tokens, Extensions, Scissor Testing And TGA Loading
25Morphing & Loading Objects From A File
26Clipping & Reflections Using The Stencil Buffer
27Shadows
28Bezier Patches / Fullscreen Fix
29Blitter Function, RAW Texture Loading
30Collision Detection
31Model Loading
32Picking, Alpha Blending, Alpha Testing, Sorting
33Loading Compressed And Uncompressed TGA's
34Beautiful Landscapes By Means Of Height Mapping
35Playing AVI Files In OpenGL
36Radial Blur & Rendering To A Texture
37Cel-Shading
38Loading Textures From A Resource File & Texturing Triangles
39Introduction to Physical Simulations
40Rope Physics
41Volumetric Fog & IPicture Image Loading
42Multiple Viewports
43FreeType Fonts in OpenGLFont
443D Lens Flare With Occlusion Testing
45Vertex Buffer Objects
46Fullscreen AntiAliasing
47CG Vertex Shader
48ArcBall Rotation

API

void glBegin( GLenum mode); GL_POINTS
GL_LINES
GL_LINE_LOOP
GL_LINE_STRIP
GL_TRIANGLES
GL_TRIANGLE_STRIP
GL_TRIANGLE_FAN
GL_QUADS
GL_QUAD_STRIP
GL_POLYGON

Use only these in it:

glVertex*();
glColor*();
glIndex*();
glNormal*();
glTexCoord*();
glMultiTexCoord*ARB();
glEdgeFlag*();
glMaterial*();
glArrayElement();
glEvalCoord*()
glEvalPoint*();
glCallList();
glCallLists();
??? void glCallLists( GLsizei n, GLenum type, GLvoid *lists);
void glClear( GLbitfield mask);GL_COLOR_BUFFER_BIT
GL_DEPTH_BUFFER_BIT
GL_ACCUM_BUFFER_BIT
GL_STENCIL_BUFFER_BIT
void glClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
void glColor{34}{sfid}( TYPE red, TYPE green, TYPE blue {, TYPE alpha});
void glColor{34}{sfid}v( TYPE *v);
??? glCopyTexImage()
??? glCopyTexSubImage()
void glCullFace( GLenum mode);GL_FRONT
GL_BACK
GL_FRONT_AND_BACK
??? void glDeleteLists();
void glDisable( GLenum cap);See glEnable();
void glEdgeFlag[v]( GLboolean [*]flag);GL_TRUE
GL_FALSE
void glEnable( GLenum cap); GL_BLEND
GL_DEPTH_TEST
GL_FOG
GL_LINE_STIPPLE
GL_POLYGON_STIPPLE
void glEnd();
void glFinish();Like glFlush(); but waits until drawing is done.
void glFlush();Force commands to start executing (like XFlush();)
void glFrontFace( GLenum front);GL_CCW
GL_CW
??? GLuint glGenLists( GLsizei range);
void glGetBooleanv( GLenum pname, TYPE *vVals);
void glGetIntegerv( GLenum pname, TYPE *vVals);
void glGetFloatv( GLenum pname, TYPE *vVals);
void glGetDoublev( GLenum pname, TYPE *vVals);
void glGetPointerv( GLenum pname, TYPE *vVals);
GL_CURRENT_COLOR
??? glGetTexImage()
void glLineStipple( GLint scaleFactor, GLushort pattern);glEnable(GL_LINE_STIPPLE);
void glLineWidth( GLfloat size);
??? void glListBase();
void glMatrixMode( GLenum mode);GL_PROJECTION
void glNormal3{bsidf}[v]( TYPE [*]vals);b, s, and i versions scale paras t0 [-1.0, 1.0]

glEnable(GL_NORMALIZE);
glEnable(GL_RESCALE_NORMALIZE);
??? void glPixelStore??? GL_UNPACK*
void glPointSize( GLfloat size);
void glPolygonMode( GLenum face, GLenum mode);face:

GL_FRONT
GL_BACK
GL_FRONT_AND_BACK

mode:

GL_FILL
GL_LINE
GL_POINT
void glPolygonStipple( Glubyte *mask);32 ushorts
glEnable(GL_POLYGON_STIPPLE);
void glPopAttrib();
void glPopClientAttrib();
void glPushAttrib( GLbitfield mask);GL_ACCUM_BUFFER_BIT
GL_ALL_ATTRIB_BITS
void glPushClientAttrib( GLbitfield mask);GL_CLIENT_PIXEL_STORE_BIT
GL_CLIENT_VERTEX_ARRAY_BIT
GL_ALL_CLIENT_ATTRIB_BITS
void glRect{sfid}( TYPE x1, TYPE y1, TYPE x2, TYPE y2);
void glRect{sfid}v( TYPE* v1, TYPE *v2);
??? glTexImage()
??? glTexSubImage()
void glViewPort( GLint x, GLinty, GLsizei width, GLsizei height);Clip box drawing will occur in (doesn't affect clearing though).
void glVertex{234}{sifd}[v]( TYPE [*]coords);

Raster Methods

void glBitmap( GLsizei width, GLsizei height, GLfloat xbo, GLfloat ybo, GLfloat xbi, GLfloat ybi, GLubyte *bitmap);(xbo,ybo) bitmap origin (this is drawn at the raster position)

(xbi,ybi) raster position increments added after this draw
void glCopyPixels( GLint x, GLint y, GLsizei width, GLsizei height, GLenum buffer);GL_COLOR
GL_STENCIL
GL_DEPTH

! glReadPixels()
! glDrawPixels()
void glDrawPixels( GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);format and type info, see glReadPixels()

at current Raster position

!! glDrawBuffer()
void glPixelTransfer{if}( GLenum pname, TYPE param);pname:

GL_MAP_COLOR
GL_MAP_STENCIL
GL_INDEX_SHIFT
void glPixelMap{ui us f}v( GLenum map, GLint mapsize, TYPE *values);
void glPixelStore{if}( GLenum pname, TYPE param);pname:

GL_UNPACK_SWAP_BYTES
GL_PACK_SWAP_BYTES
GL_UNPACK_LDB_FIRST
GL_PACK_LSB_FIRST
GL_UNPACK_ROW_LENGTH
GL_PACK_ROW_LENGTH
GL_UNPACK_SKIP_ROWS
GL_PACK_SKIP_ROWS


void glPixelZoom( GLfloat xZoom, GLfloat yZoom);
void glRasterPos{234}{sifd}[v]( TYPE [*]coordsXYZW);Lower left of next draw

glGetFloatv -> GL_CURRENT_RASTER_POSITION
glGetBooleanv -> GL_CURRENT_RASTER_POSITION_VALID

!! Locks in color from last glColor*()
void glReadPixels( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);format:

GL_COLOR_INDEX
GL_RGB
GL_RGBA
GL_BGR
GL_BGRA
GL_RED
GL_GREEN
GL_BLUE
GL_ALPHA
GL_LUMINANCE
GL_LUMINANCE_ALPHA
GLSTENCIL_INDEX
GL_DEPTH_COMPONENT

type:

GL_UNSIGNED_BYTE
GL_BYTE
GL_BITMAP
GL_UNSIGNED_SHORT
GL_SHORT
GL_UNSIGNED_INT
GL_INT
GL_FLOAT
GL_UNSIGNED_BYTE_3_3_2
GL_UNSIGNED_BYTE_2_3_3_REV
GL_UNSIGNED_SHORT_5_6_5
GL_UNSIGNED_SHORT_5_6_5_REV
GL_UNSIGNED_SHORT_4_4_4_4
GL_UNSIGNED_SHORT_4_4_4_4_REV


See also: glReadBuffer();

Array Methods

void glArrayElement( GLint index);Selects data at [index] from all active Arrays
void glColorPointer( GLint size, GLenum type, GLsizei stride, GLvoid* pointer);size:

GL_BYTE
GL_UNSIGNED_BYTE
GL_SHORT
GL_UNSIGNED_SHORT
GL_INT
GL_UNSIGNED_INT
GL_FLOAT
GL_DOUBLE
void glDisableClientState( GLenum array);See glEnableClientState();
void glDrawArrays( GLenum mode, GLint first, GLsizei count);
void glDrawElements( GLenum mode, GLsizei count, GLenum type, void *indices);mode:

GL_POINTS
GL_LINES
GL_LINE_LOOP
GL_LINE_STRIP
GL_TRIANGLES
GL_TRIANGLE_STRIP
GL_TRIANGLE_FAN
GL_QUADS
GL_QUAD_STRIP
GL_POLYGON

type:

UNSIGNED_BYTE
UNSIGNED_SHORT
UNSIGNED_INT
void glDrawRangeElements(
   GLenum mode, GLint start, GLint end, GLsizei count, GLenum type, void *indices
);
start and end let you just do a subset of the values.

See: glDrawElements(); for other paras.
void glEdgeFlagPointer( GLsizei stride, GLvoid* pointer);
void glEnableClientState( GLenum array);GL_VERTEX_ARRAY
GL_COLOR_ARRAY
GL_INDEX_ARRAY
GL_NORMAL_ARRAY
GL_TEXTURE_COORD_ARRAY
GL_EDGE_FLAG_ARRAY
void glIndexPointer( GLenum type, GLsizei stride, GLvoid* pointer);size:

GL_BYTE
GL_UNSIGNED_BYTE
GL_SHORT
GL_INT
GL_FLOAT
GL_DOUBLE
??? void glInterleavedArrays();Complex, uses predefined 'structures'
void glINormalPointer( GLenum type, GLsizei stride, GLvoid* pointer);size:

GL_BYTE
GL_SHORT
GL_INT
GL_FLOAT
GL_DOUBLE
void glTexCoordPointer( GLint size, GLenum type, GLsizei stride, GLvoid* pointer);size:

GL_SHORT
GL_INT
GL_FLOAT
GL_DOUBLE
void glVertexPointer( GLint size, GLenum type, GLsizei stride, GLvoid* pointer);size:

GL_SHORT
GL_INT
GL_FLOAT
GL_DOUBLE