00001 #include <cl.h>
00002
00007 GLuint clImageNumPixels(const CLimage* image)
00008 {
00009 return image->width * image->height;
00010 }
00011
00012
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
00149 return clImageNumElements(image) * clImageElementSize(image);
00150 }