当前位置:  开发笔记 > 运维 > 正文

在屏幕上绘制2D三维颜色三元组的最快方法是什么?

如何解决《在屏幕上绘制2D三维颜色三元组的最快方法是什么?》经验,为你挑选了2个好方法。

目标语言是C/C++,程序只能在Linux上运行,但平台无关的解决方案显然是首选.我可以使用Xorg,XVideo和OpenGL.

在配备英特尔显卡的英特尔酷睿2双核处理器上,我能在1024x768上获得多少FPS?(只有绘图计数,考虑在RAM中准备好阵列;不需要精确预测)



1> 小智..:

绘制2D三维颜色三元组的最快方法:

    使用float(不是 byte,而不是 double)存储.每个三联体由3个浮子组成,每个浮子从0.0到1.0.这是GPU最优化的格式(但是GL_LUMINANCE当你不需要色调时使用灰度存储 - 要快得多!)

    将数组上传到纹理 glTexImage2D

    确保将GL_TEXTURE_MIN_FILTERtexture参数设置为GL_NEAREST

    将纹理映射到适当的四边形.

这种方法比略快glDrawPixels(由于某种原因往往是不好实现)和大量的速度比使用平台的本机位图传输.

此外,当您的像素图没有改变时,它为您提供了在没有步骤2的情况下重复执行步骤4的选项,这当然要快得多.

仅提供慢速原生blitting的库包括:

Windows的GDI

X11上的SDL(在Windows上,它在使用HW_SURFACE时提供快速的opengl后端)

Qt的

至于你可以期待的FPS,在带有英特尔显卡的英特尔酷睿2双核处理器上绘制1024x768纹理:如果纹理每帧都改变大约60FPS,如果不改变则大于100FPS.

但是你自己去看看;)



2> jandersson..:

我使用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;
}

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有