gpt4 book ai didi

opengl - 在 OpenGL 中显示大图像的首选方式是什么

转载 作者:行者123 更新时间:2023-12-02 07:14:33 24 4
gpt4 key购买 nike

这个问题我已经遇到过好几次了。假设我想在 OpenGL 上下文(或 DirectX,这更多是概念性的东西)中显示启动屏幕或其他内容,现在,我可以只加载 2048x2048 纹理并希望显卡能够处理它(我想现在大多数人都会这样做),但是随着老式显卡的成长,我有一种愧疚感告诉我我不应该使用那么大的纹理。

现在首选的方式是什么?是把那个东西塞进视频内存,平铺它,还是让CPU来做工作和glDrawPixels?或者更复杂的东西?

最佳答案

如果这是没有动画的单帧启动图像,那么使用 glDrawPixels 没有什么坏处。如果性能至关重要并且您需要使用纹理,那么正确的方法是使用代理纹理在运行时确定支持的最大纹理大小。

GLint width = 0;
while ( 0 == width ) { /* use a better condition to prevent possible endless loop */
glTexImage2D(GL_PROXY_TEXTURE_2D,
0, /* mip map level */
GL_RGBA, /* internal format */
desiredWidth, /* width of image */
desiredHeight, /* height of image */
0, /* texture border */
GL_RGBA /* pixel data format, */
GL_UNSIGNED_BYTE, /* pixel data type */
NULL /* null pointer because this a proxy texture */
);

/* the queried width will NOT be 0, if the texture format is supported */
glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);

desiredWidth /= 2; desiredHeight /= 2;
}

一旦您知道系统 OpenGL 驱动程序支持的最大纹理尺寸,如果您的图像不适合,您至少有两个选择:

  • 图像平铺:将图像分割成更小的支持 block 后使用多个四边形。像闪屏这样的图像平铺应该不会太棘手。您可以使用glPixelStoreiGL_PACK_ROW_LENGTH 参数将较大图像的部分加载到纹理中。
  • 调整图像大小:调整图像大小以适应支持的最大纹理尺寸。甚至还有一个 GLU 辅助函数可以为您执行此操作,gluScaleImage .

关于opengl - 在 OpenGL 中显示大图像的首选方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/425401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com