使用For循环从内存中释放纹理
Using For-loop to Free Textures from Memory
我加载了23个纹理,并将它们命名为t1, t2, ... , t23,
我有一个释放所有纹理的函数,但我希望它能更高效(或使用更少的代码)来释放所有纹理。
目前,它这样做:
FreeTexture(t1);
FreeTexture(t2);
.
.
.
FreeTexture(t23);
所以我试着做这样的事情:
for (int i=1; i< 23; i++){
//i int-to-string
//concatenate 't' + 'i_string'
FreeTexture(ti);
}
但我不确定实现这样的东西的最佳方式。
或者,将所有纹理放在一个数组中并迭代数组会更容易?t[i]
?
更新
我已将代码更改为:
int numberOfTextures = 23;
std::vector<GLuint> v(numberOfTextures);
v[1] = LoadTexture("resources/RoadTex1.raw", 512, 512);
v[2] = LoadTexture("resources/RoadTex2.raw", 512, 512);
.
.
.
void freeTiles(){
for (int i=1; i<=numberOfTextures; i++){
FreeTexture(v[i]);
}
}
Texture *t[NUM_TEXTURES];
for(int i=0;i<NUM_TEXTURES;i++) {
FreeTexture(t[i]);
}
创建一个纹理指针数组,在数组上迭代。这是直C版。在C++中,您可以从头到尾使用向量和迭代器。
很抱歉,我错过了C++请求:
#include <vector>
std::vector<Texture *> t;
for(std::vector<Texture *>::iterator i = t.begin(); i!= t.end(); ++i) {
FreeTexture(*i);
}
存储在std::vector中是个好主意,,并且for循环足够好。但正如@user2278777所说,更好的方法是使用迭代器。另一种有效的方法是使用foreach
// for_each example
#include <iostream> // std::cout
#include <algorithm> // std::for_each
#include <vector> // std::vector
void myfunction (int i) { // function:
std::cout << ' ' << i;
}
struct myclass { // function object type:
void operator() (int i) {std::cout << ' ' << i;}
} myobject;
int main () {
std::vector<int> myvector;
myvector.push_back(10);
myvector.push_back(20);
myvector.push_back(30);
std::cout << "myvector contains:";
for_each (myvector.begin(), myvector.end(), myfunction);
std::cout << 'n';
// or:
std::cout << "myvector contains:";
for_each (myvector.begin(), myvector.end(), myobject);
std::cout << 'n';
return 0;
}
输出myvector包含:10 20 30myvector包含:10 20 30
相关文章:
- 释放错误后堆使用
- OpenInventor从9.8升级到10.4.2后,GLSL纹理返回零
- G锁定铸造到基础上会释放模拟行为
- 在将变量声明为引用时,堆在释放后使用
- SFML纹理像播放器
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- OpenGL大的3D纹理(>2GB)非常慢
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 着色器纹理值与创建纹理时写入的值不同
- OpenGL将纹理四边形渲染为(0,0)
- 宽度为奇数的16位纹理为片状
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- C++双重释放或损坏(out)
- 如何在c++中释放内存
- 使用全局声明的向量时,C++双重释放错误/损坏
- 使用 CUDA 和纹理进行图像减法
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 为什么瓦尔格林德在不释放恶意内存后没有报告任何问题?
- DirectX释放函数与纹理(c++)
- 使用For循环从内存中释放纹理