📅  最后修改于: 2023-12-03 15:30:58.779000             🧑  作者: Mango
GLDrawPixels是OpenGL提供的一个函数,用于将一块CPU内存中的图像数据绘制到屏幕上,可以用来快速显示简单的2D图形或者实时视频帧。
void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const void *data);
参数解释:
下面是一个简单的GLDrawPixels示例代码,它从一个位图文件中读取像素数据,并调用glDrawPixels函数将图像绘制到屏幕上:
#include <GL/glut.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BMP_HEADER_SIZE 54
int width, height;
unsigned char *imageData;
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glRasterPos2i(0, 0);
glDrawPixels(width, height, GL_BGR_EXT, GL_UNSIGNED_BYTE, imageData);
glutSwapBuffers();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutInitWindowSize(640, 480);
glutCreateWindow("GLDrawPixels Example");
glClearColor(0.5, 0.5, 0.5, 1.0);
FILE *fp = fopen("test.bmp", "rb");
if (fp == NULL) {
fprintf(stderr, "Failed to load image.\n");
exit(EXIT_FAILURE);
}
unsigned char header[BMP_HEADER_SIZE];
if (fread(header, 1, BMP_HEADER_SIZE, fp) != BMP_HEADER_SIZE) {
fprintf(stderr, "Invalid BMP file.\n");
fclose(fp);
exit(EXIT_FAILURE);
}
width = *(int*)&header[18];
height = *(int*)&header[22];
int imageSize = width * height * 3; // 3 bytes per pixel
imageData = (unsigned char*)malloc(imageSize);
fseek(fp, BMP_HEADER_SIZE, SEEK_SET);
fread(imageData, 1, imageSize, fp);
fclose(fp);
glutDisplayFunc(display);
glutMainLoop();
free(imageData);
return 0;
}
在该示例代码中,我们使用了glClear函数来清空屏幕,使用glRasterPos2i函数来指定绘制起点,使用glDrawPixels函数来绘制图像。注意,本示例使用的是BMP位图文件,需要在头文件中定义BMP_HEADER_SIZE,以读取文件头。