c++ - OpenGL:使用 2500*2500 像素的纹理是否可以接受?

标签 c++ memory opengl textures

当然,纹理在屏幕上不会完全可见。我可以让它始终只绘制可见部分(使用 glTexCoord2f 然后使用 glVertex2f)。 (这是一个大的“水平”图像,我必须为滑动相机移动它)。请注意,此渲染在我的游戏中必须是实时的(游戏是用 C++ 编写的)。

简短的计算:

2,500 * 2,500 = 6,250,000 pixels
6,250,000 pixels * 4 bytes / pixel = 25,000,000 bytes
25,000,000 bytes = 23.8 MiB

那么,对于跨平台商业游戏来说,23.8 MiB 是不是太多了?知道人们可以拥有各种图形卡。

最佳答案

对于一个纹理来说这已经很多了。如果显卡有足够的内存(至少 32MB,而且如果你的游戏中没有其他东西的话!128MB 实际上更合理),那么应该不会有太大的问题,但如果没有的话只要屏幕上有每一帧,系统就必须将这些位推送到视频卡。这可能会导致速度大幅放缓。

如果你可以把纹理变小,我强烈推荐它。如果可能的话,由于它不会同时全部可见,您可以尝试将其分成几部分 - 只有可见的部分必须位于视频内存中,这意味着如果您在右侧将其分解,则使用的内存会更少地点。

关于c++ - OpenGL:使用 2500*2500 像素的纹理是否可以接受?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3512413/

相关文章:

c++ - 基本的 C 风格字符串内存分配

java - 准确测量物体尺寸

c++ - GLSL法线贴图问题

c++ - glReadPixels() 设置 GL_INVALID_OPERATION 错误

c++ - 能否将位置属性存储在除 0 之外的属性号中

指向临时变量的 C++ 引用?

C++在函数中使用指向结构的指针

c++ - 将 float 分配给字符串引用是可行的——为什么?

C++ 调试;我看不到错误 :(

multithreading - 可以从Scala的子线程中更改局部变量