小智 9
绘制2D三维颜色三元组的最快方法:
GL_LUMINANCE当你不需要色调时使用灰度存储 - 要快得多!)glTexImage2DGL_TEXTURE_MIN_FILTERtexture参数设置为GL_NEAREST这种方法比略快glDrawPixels(由于某种原因往往是不好实现)和大量的速度比使用平台的本机位图传输.
此外,当您的像素图没有改变时,它为您提供了在没有步骤2的情况下重复执行步骤4的选项,这当然要快得多.
仅提供慢速原生blitting的库包括:
至于你可以期待的FPS,在带有英特尔显卡的英特尔酷睿2双核处理器上绘制1024x768纹理:如果纹理每帧都改变大约60FPS,如果不改变则大于100FPS.
但是你自己去看看;)
我使用C和OpenGL做了一段时间,通过创建一个全屏大小的四边形,然后使用纹理映射将位图传输到四边形的面上,获得了非常好的性能.
这是一些示例代码,希望您能够使用它.
#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;
}
Run Code Online (Sandbox Code Playgroud)