Sunday, April 21, 2013

glClear GL_COLOR_BUFFER_BIT example c c++ java


Name

glClear — clear buffers to preset values

C Specification

void glClear(GLbitfield mask);

Parameters

mask
Bitwise OR of masks that indicate the buffers to be cleared. The three masks are GL_COLOR_BUFFER_BITGL_DEPTH_BUFFER_BIT, and GL_STENCIL_BUFFER_BIT.

Description

glClear sets the bitplane area of the window to values previously selected by glClearColorglClearDepth, and glClearStencil. Multiple color buffers can be cleared simultaneously by selecting more than one buffer at a time using glDrawBuffer.
The pixel ownership test, the scissor test, dithering, and the buffer writemasks affect the operation of glClear. The scissor box bounds the cleared region. Alpha function, blend function, logical operation, stenciling, texture mapping, and depth-buffering are ignored by glClear.
glClear takes a single argument that is the bitwise OR of several values indicating which buffer is to be cleared.
The values are as follows:
GL_COLOR_BUFFER_BIT
Indicates the buffers currently enabled for color writing.
GL_DEPTH_BUFFER_BIT
Indicates the depth buffer.
GL_STENCIL_BUFFER_BIT
Indicates the stencil buffer.
The value to which each buffer is cleared depends on the setting of the clear value for that buffer.

Notes

If a buffer is not present, then a glClear directed at that buffer has no effect.

Errors

GL_INVALID_VALUE is generated if any bit other than the three defined bits is set in mask.

Associated Gets

glGet with argument GL_DEPTH_CLEAR_VALUE
glGet with argument GL_COLOR_CLEAR_VALUE
glGet with argument GL_STENCIL_CLEAR_VALUE

See Also

glClearColorglClearDepthglClearStencilglColorMaskglDepthMaskglDrawBufferglScissorglStencilMask

Copyright

Copyright © 1991-2006 Silicon Graphics, Inc. This document is licensed under the SGI Free Software B License. For details, see http://oss.sgi.com/projects/FreeB/.


Example of GL_COLOR_BUFFER_BIT


void Render()
{  
    //clear color and depth buffer
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();//load identity matrix
 
    glTranslatef(0.0f,0.0f,-4.0f);//move forward 4 units
 
    glColor3f(0.0f,0.0f,1.0f); //blue color
 
    glBegin(GL_TRIANGLES);//start drawing triangles
      glVertex3f(-1.0f,-0.25f,0.0f);//triangle one first vertex
      glVertex3f(-0.5f,-0.25f,0.0f);//triangle one second vertex
      glVertex3f(-0.75f,0.25f,0.0f);//triangle one third vertex
      //drawing a new triangle
      glVertex3f(0.5f,-0.25f,0.0f);//triangle two first vertex
      glVertex3f(1.0f,-0.25f,0.0f);//triangle two second vertex
      glVertex3f(0.75f,0.25f,0.0f);//triangle two third vertex
    glEnd();//end drawing of triangles
}
------------------------------------------------------------------------
Example 2 of GL_COLOR_BUFFER_BIT

void DrawIt()
{
 unsigned char  *pBuffer = new unsigned char[300*300*4];

 // Drawing OpenGL Geometry.
 //
 glClear(GL_COLOR_BUFFER_BIT);

 //glPushMatrix();

 glScalef(0.5f, 0.5f, 0.5f);
 glBegin(GL_TRIANGLES);
  glColor3f(1.0f, 0.0f, 0.0f);
  glVertex3f(-1.0f, -1.0f, -1.0f);
  glColor3f(0.0f, 1.0f, 0.0f);
  glVertex3f(1.0f, -1.0f, -1.0f);
  glColor3f(0.0f, 0.0f, 1.0f);
  glVertex3f(0.0f, 1.0f, -1.0f);
 glEnd();

 //glPopMatrix();

 SwapBuffers(g_hDC);

 // Read pixels from color buffer.
 //
 memset(pBuffer, 0, 300*300*4);
 glPixelStorei(GL_PACK_ALIGNMENT, 4);
 glPixelStorei(GL_UNPACK_ALIGNMENT, 4);

 // Choose where to read from.
 //
 glReadBuffer(GL_FRONT);
 glReadPixels((GLdouble)300, (GLdouble)300, 30, 30, GL_RGBA, GL_UNSIGNED_BYTE, pBuffer);
 delete[] pBuffer;

 return;
}