Objective-C:如何分配GLuint数组

时间:2010-06-09 08:47:09

标签: iphone arrays opengl-es

我有一个固定大小的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。

3 个答案:

答案 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);