我正在尝试为我的 openGL 项目创建一个 textureLoader 类,但我无法在我的类构造函数中初始化纹理数组,因为该数组不接受任何内容,除非它是一个 const int。
给你画一幅简单的图......
myFunction(NUM)
{
GLuint textures[NUM];
}
我过去的失败
myConstructor(const int& num)
{
GLuint textures[num] //error: expression must have a constant value
}
myConstructor(int num)
{
std::vector <GLuint> textures(num);//works but wait
glGenTextures(num, textures) // <--- doesn't work cause vectors.
}
myConstructor(int num)
{
const int PLEASE_WORK = num;
GLuint textures[PLEASE_WORK]; // doesn't work.
最佳答案
您的第二个选项很接近,您可以通过调用 .data()
myConstructor(int num)
{
std::vector <GLuint> textures(num);
glGenTextures(num, textures.data());
}
假设 glGenTextures
有一个像这样的签名
void glGenTextures(int, GLuint*)
我对这个函数不太了解,但要小心谁拥有那个数组。 vector
将在您的构造函数之后超出范围,因此我希望 glGenTextures
将复制它需要的任何内容。否则如果数组需要持久化
myConstructor(int num)
{
GLuint* textures = new GLuint[num];
glGenTextures(num, textures);
}
但是我不确定应该由谁来清理那段内存。
关于c++ - 将一个 int 传递给一个函数,然后使用该 int 创建一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30856630/