في OpenGL, نستطيع استخدام الـ function glDrawPixels من اجل رسم سلسلة من الـ pixels على شكل صورة (بمعنى آخر, من اجل رسم الصور). ياخذ طول و عرض المربع (مربع الصورة), و ياخذ ايضا مكونات هذه الصورة على شكل سلسلة "خطية" متواصلة من الـ pixels او النقاط المكونة للصورة. شكل الـ function يبدو هكذا:
void glDrawPixels( GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
R G B A|--------|--------|--------|--------|
#include<GL/glut.h> GLubyte * getPicture( int w, int h ){ int length = w * h * 4; GLubyte * bytes = new GLubyte[length]; for( int i = 0; i < length; i++ ) { bytes[i] = 0; } int m = min(w,h); //draw a line! for( int i = 0; i < m; i++ ) { int p = i*4; p = p+p*w; int pe = p + 4; while( p <= pe ) { bytes[p] = 200; p++; } } return bytes;}void putMyImage( int x, int y, int w, int h ){ glRasterPos2d( x, y ); glDrawPixels( w, h, GL_RGBA, GL_UNSIGNED_BYTE, getPicture( w, h ) );}void myInit(){ glClearColor(0.3,0.3,0.3,0.0); glColor3f(1.0,1.0,0.5); glPointSize(2.0); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0,640.0,0.0,480.0);}void display(){ glClear(GL_COLOR_BUFFER_BIT); glEnd(); putMyImage( 100, 100, 20, 20 ); glFlush(); }int main(int argc, char** argv){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE |GLUT_RGB); glutInitWindowSize(400,400); glutInitWindowPosition(50,50); glutCreateWindow("Draw Polygon"); myInit(); glutDisplayFunc(display); glutMainLoop(); return 0;}
void putMyImage( int x, int y, int w, int h ){ glRasterPos2d( x, y ); glDrawPixels( w, h, GL_RGBA, GL_UNSIGNED_BYTE, getPicture( w, h ) );}