Tôi đã làm điều này một khi trở lại sử dụng C và OpenGL, và có hiệu suất rất tốt bằng cách tạo ra một toàn màn hình có kích thước quad, và sau đó sử dụng bản đồ kết cấu để chuyển bitmap lên mặt của quad.
Dưới đây là một số mã ví dụ, hy vọng bạn có thể sử dụng nó.
#include <GL/glut.h>
#include <GL/glut.h>
#define WIDTH 1024
#define HEIGHT 768
unsigned char texture[WIDTH][HEIGHT][3];
void renderScene() {
// render the texture here
glEnable (GL_TEXTURE_2D);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D (
GL_TEXTURE_2D,
0,
GL_RGB,
WIDTH,
HEIGHT,
0,
GL_RGB,
GL_UNSIGNED_BYTE,
&texture[0][0][0]
);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex2f(-1.0, -1.0);
glTexCoord2f(1.0f, 0.0f); glVertex2f(1.0, -1.0);
glTexCoord2f(1.0f, 1.0f); glVertex2f(1.0, 1.0);
glTexCoord2f(0.0f, 1.0f); glVertex2f(-1.0, 1.0);
glEnd();
glFlush();
glutSwapBuffers();
}
int main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowPosition(100, 100);
glutInitWindowSize(WIDTH, HEIGHT);
glutCreateWindow(" ");
glutDisplayFunc(renderScene);
glutMainLoop();
return 0;
}
"Mảng ba màu 2D" là gì? Một máy tính hiện đại đẹp, với một số tăng tốc phần cứng sẽ có thể đặt khá một vài hình tam giác trên một màn hình với tốc độ hơn 30 khung hình/giây, mà không lưu trữ bất cứ thứ gì trong VRAM. Tuy nhiên, việc sử dụng VRAM dễ sử dụng và sẽ tăng tốc độ đó thậm chí cao hơn. –
một bộ ba RGB. Đối với mỗi pixel tôi có 3 giá trị (một màu đỏ, một màu xanh lá cây và một màu xanh dương) –
Phiên bản SDL http: // stackoverflow.com/questions/28279242/how-to-render-a-pixel-array-hiệu quả nhất-to-a-cửa sổ-trong-c –