在OpenGLES 2.0中渲染纹理时的工件不一致

时间:2013-03-18 01:44:14

标签: ios opengl-es opengl-es-2.0

我只是想在iPhone模拟器中在OpenGLES 2.0中渲染一些简单的粒子,有时会有文物,有时候没有,当我尝试运行我的代码时,它几乎就像是硬币翻转。第一个图像应该是它​​的样子,第二个图像是工件,注意底部的线条/条带。相同的图像,相同的代码,不同的结果,让我难过:

http://i.imgur.com/C6LnoWj.png< -no artifacts

http://i.imgur.com/EBj26kG.png< -artifacts

就像我说的,我不知道从哪里开始,它只是一个基本的两个三角形精灵,纹理坐标为(0,0),(0,1),(1,0)和(1,1) 。如果您对我要发布的代码有任何建议,我将不胜感激

编辑:

这是我的纹理加载代码。

CGImageRef image = [UIImage imageNamed:filename].CGImage;
size_t width = CGImageGetWidth(image);
size_t height = CGImageGetHeight(image);
NSUInteger length = width*height*4;
GLubyte *data = (GLubyte*)malloc(length*sizeof(GLubyte));
CGContextRef context = CGBitmapContextCreate(data, width, height, 8, width*4, CGImageGetColorSpace(image), kCGImageAlphaPremultipliedLast);

CGContextTranslateCTM(context, 0, height);
CGContextScaleCTM(context, 1.0, -1.0);

CGContextDrawImage(context, CGRectMake(0, 0, width, height), image);
CGContextRelease(context);

GLuint texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);

我根据建议首先将malloc调用切换到calloc,将内存清零,这似乎修复了它。

0 个答案:

没有答案