目标语言是C / C ++,程序只能在Linux上运行,但平台无关的解决方案显然是首选。我可以使用Xorg,XVideo和OpenGL。
英特尔酷睿2双核英特尔显卡在1024x768上可以获得多少FPS? (只有绘图计数,考虑在RAM中准备好阵列;不需要精确预测)
答案 0 :(得分:9)
绘制二维彩色三联体阵列的最快方法:
GL_LUMINANCE
存储 - 速度更快!)glTexImage2D
GL_TEXTURE_MIN_FILTER
纹理参数设置为GL_NEAREST
这种方法比glDrawPixels
略快(由于某种原因往往被严重执行)和很多比使用平台的原生blitting更快。
此外,当您的像素图没有改变时,它可以让您选择在没有步骤2的情况下重复执行步骤4,这当然要快得多。
仅提供慢速原生blitting的库包括:
至于FPS,你可以期待在英特尔酷睿2双核处理器上使用英特尔图形绘制1024x768纹理:如果纹理每帧都改变大约60FPS,如果不改变则大于100FPS。
但是你自己去看看吧。)
答案 1 :(得分:6)
我使用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;
}
答案 2 :(得分:1)
如果您尝试将像素转储到屏幕,则可能需要使用sdl's '表面'设施。为获得最佳性能,请尝试安排输入数据与输出表面的布局类似。如果可能的话,避免在表面上一次设置一个像素。
SDL本身不是硬件接口,而是一个可在许多其他显示层(包括DirectX,OpenGL,DirectFB和xlib)上运行良好的可移植层,因此您可以获得非常好的可移植性,并且在这些技术之上的非常薄的层,所以你在这些技术之上支付很少的性能开销。
答案 3 :(得分:1)
除SDL之外的其他选项(如上所述)
我的建议
答案 4 :(得分:1)
“我能期待多少fps”问题无法得到认真回答。即使你给那个做处理器布局的人的爷爷起了个名字。它取决于太多的变量。
这可以永远持续下去,答案绝对取决于你的算法。如果您坚持使用opengl方法,您也可以尝试不同的扩展(例如http://www.opengl.org/registry/specs/NV/pixel_data_range.txt),以确定它是否更符合您的需求;虽然已经提到的glTexSubImage()方法非常快。
答案 5 :(得分:0)
在1024x768上我可以期待多少FPS?
这个问题的答案取决于许多无法分辨的因素。