目标语言是C/C++,程序只能在Linux上运行,但平台无关的解决方案显然是首选.我可以使用Xorg,XVideo和OpenGL.
在配备英特尔显卡的英特尔酷睿2双核处理器上,我能在1024x768上获得多少FPS?(只有绘图计数,考虑在RAM中准备好阵列;不需要精确预测)
绘制2D三维颜色三元组的最快方法:
使用float(不是 byte,而不是 double)存储.每个三联体由3个浮子组成,每个浮子从0.0到1.0.这是GPU最优化的格式(但是GL_LUMINANCE
当你不需要色调时使用灰度存储 - 要快得多!)
将数组上传到纹理 glTexImage2D
确保将GL_TEXTURE_MIN_FILTER
texture参数设置为GL_NEAREST
将纹理映射到适当的四边形.
这种方法比略快glDrawPixels
(由于某种原因往往是不好实现)和大量的速度比使用平台的本机位图传输.
此外,当您的像素图没有改变时,它为您提供了在没有步骤2的情况下重复执行步骤4的选项,这当然要快得多.
仅提供慢速原生blitting的库包括:
Windows的GDI
X11上的SDL(在Windows上,它在使用HW_SURFACE时提供快速的opengl后端)
Qt的
至于你可以期待的FPS,在带有英特尔显卡的英特尔酷睿2双核处理器上绘制1024x768纹理:如果纹理每帧都改变大约60FPS,如果不改变则大于100FPS.
但是你自己去看看;)
我使用C和OpenGL做了一段时间,通过创建一个全屏大小的四边形,然后使用纹理映射将位图传输到四边形的面上,获得了非常好的性能.
这是一些示例代码,希望您能够使用它.
#include#include #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; }