climage.c

00001 #include <cl.h>
00002 
00007 GLuint clImageNumPixels(const CLimage* image)
00008 {
00009     return image->width * image->height;
00010 }
00011 
00012 /* return -1 on error or bitmap (pixel size means nothing for bitmap) */
00013 GLuint clImagePixelSize(const CLimage* image)
00014 {
00015     GLuint pixel_size;
00016     
00017     switch(image->format)
00018     {
00019     case GL_BITMAP:
00020         pixel_size = -1;
00021         break;
00022         
00023     case GL_COLOR_INDEX:
00024         pixel_size = 1;
00025         break;
00026         
00027     case GL_RGB:
00028         pixel_size = 3;
00029         break;
00030         
00031     case GL_RGBA:
00032         pixel_size = 4;
00033         break;
00034         
00035     case GL_RED:
00036         pixel_size = 1;
00037         break;
00038         
00039     case GL_GREEN:
00040         pixel_size = 1;
00041         break;
00042         
00043     case GL_BLUE:
00044         pixel_size = 1;
00045         break;
00046         
00047     case GL_ALPHA:
00048         pixel_size = 1;
00049         break;
00050         
00051     case GL_LUMINANCE:
00052         pixel_size = 1;
00053         break;
00054         
00055     case GL_LUMINANCE_ALPHA:
00056         pixel_size = 2;
00057         break;
00058         
00059     case GL_STENCIL_INDEX:
00060         pixel_size = 1;
00061         break;
00062         
00063     case GL_DEPTH_COMPONENT:
00064         pixel_size = 1;
00065         break;
00066         
00067     default:
00068         CL_ERROR("unknown image format\n");
00069         pixel_size = -1;
00070         break;
00071     }
00072     
00073     return pixel_size;
00074 }
00075 
00076 GLuint clImageNumElements(const CLimage* image)
00077 {
00078     GLuint num_elements;
00079     GLuint num_pixels;
00080     
00081     num_pixels = clImageNumPixels(image);
00082   
00083     if (image->type == GL_BITMAP)
00084     {
00085         num_elements = num_pixels / 8;
00086         if ((num_pixels % 8) > 0)
00087         {
00088             num_elements++;
00089         }
00090     }
00091     else
00092     {
00093         num_elements = num_pixels * clImagePixelSize(image);
00094     }
00095     
00096     return num_elements;
00097 }
00098 
00099 GLuint clImageElementSize(const CLimage* image)
00100 {
00101     GLuint element_size;
00102     
00103     switch(image->type)
00104     {
00105     case GL_UNSIGNED_BYTE:
00106         element_size = sizeof(GLubyte);
00107         break;
00108         
00109     case GL_BYTE:
00110         element_size = sizeof(GLbyte);
00111         break;
00112       
00113     case GL_BITMAP:
00114         element_size = sizeof(GLubyte);
00115         break;
00116         
00117     case GL_UNSIGNED_SHORT:
00118         element_size = sizeof(GLbyte);
00119         break;
00120         
00121     case GL_SHORT:
00122         element_size = sizeof(GLshort);
00123         break;
00124         
00125     case GL_UNSIGNED_INT:
00126         element_size = sizeof(GLuint);
00127         break;
00128         
00129     case GL_INT:
00130         element_size = sizeof(GLint);
00131         break;
00132         
00133     case GL_FLOAT:
00134         element_size = sizeof(GLfloat);
00135         break;
00136         
00137     default:
00138         CL_ERROR("unknown image type\n");       
00139         element_size = -1;
00140         break;
00141     }
00142     
00143     return element_size;
00144 }
00145 
00146 GLuint clImageDataSize(const CLimage* image)
00147 {
00148     /* use element size rather than pixels in case of bitmap */
00149     return clImageNumElements(image) * clImageElementSize(image);  
00150 }

Generated on Thu Dec 27 13:53:41 2007 for CL by  doxygen 1.4.6