我只是想在 iPhone Simulator 的 OpenGLES 2.0 中渲染一些简单的粒子,有时会有伪影,有时没有,当我尝试运行我的代码时,几乎就像是抛硬币一样。第一个图像是它应该看起来的样子,第二个图像是伪影,注意底部的线条/条带。相同的图像,相同的代码,不同的结果,这让我很难过:
http://i.imgur.com/C6LnoWj.png <-没有文物
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 ,这似乎已经修复了它。