我有一个固定大小的GLuint数组:
GLuint textures[10];
现在我需要动态设置数组的大小。我写了这样的话:
* H:
GLuint *textures;
* M:
textures = malloc(N * sizeof(GLuint));
其中N - 需要大小。
然后就像这样使用:
glGenTextures(N, &textures[0]);
// load texture from image
-(GLuint)getTexture:(int)index{
return textures[index];
}
我使用了here的答案,但程序在运行时出现了。如何解决这个问题?
程序是在Objective-C上编写的,并使用OpenGL ES。
答案 0 :(得分:1)
我想出了这个问题。
此代码有效,但似乎无效。这个问题在here中有所描述,但并不是那么清楚。
适用于我的解决方案是使用GLuint属性创建单独的类:
@interface Texture : NSObject
GLuint texture;
@end
@property (nonatomic, readwrite) GLuint texture;
然后我们可以创建纹理的NSMutableArray:
NSMutableArray *textures;
在* .m文件中我们应该填充我们的数组:
for(int i=0;i<N;i++){
Texture *t = [[Texture alloc] init];
t.texture = i;
GLuint l = t.texture;
[textures addObject:t];
glGenTextures(1, &l);
}
如果您使用其他具有纹理的数组,则必须移动GLuint索引,例如:
t.texture = i+M;
其中M - 早期使用的GLuint数组的大小。
然后将getTexture改写如下:
-(GLuint)getTexture:(int)index{
return textures[index].texture;
}
我对这种方法并不满意,但这是我工作的单一方法。
答案 1 :(得分:0)
如果将N的值设置为10,则两种方法的行为将完全相同。因此,您应该在不同的地方寻找失败的原因。
答案 2 :(得分:0)
void glGenTextures(GLsizei n, GLuint * textures);
接受一个无符号整数数组,看起来你正在传递一个指向数组中第一个元素的指针,我认为这不是你想做的或函数接受的
也许只是尝试
glGenTextures(N,textures);