iphone - 调试基本 OpenGL 纹理失败? (iPhone)

标签 iphone opengl-es textures

我在 iPhone 上的 GL 中遇到了一个非常基本的纹理贴图问题,我想知道有哪些策略可以调试此类问题。

(坦率地说,仅仅盯着状态机调用并想知道其中是否有错误或顺序错误是不行的 - 有没有工具可以实现这一点?)

我有一个 512x512 PNG 文件,我正在从磁盘加载该文件(未专门打包),创建一个 CGBitmapContext,然后调用 CGContextDrawImage 从中获取字节。 (该代码本质上是从 Apple 示例中窃取的。)我正在尝试将纹理映射到“四边形”,其代码基本上如下所示 - 所有平面 2D 内容,没有什么花哨的:

glEnable(GL_TEXTURE_2D);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);    
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);

GLfloat vertices[8] = {
    viewRect.origin.x, viewRect.size.height,
    viewRect.origin.x, viewRect.origin.y,
    viewRect.size.width, viewRect.origin.y,
    viewRect.size.width, viewRect.size.height        
};    
GLfloat texCoords[8] = {
    0, 1.0,
    0, 0,
    1.0, 0,
    1.0, 1.0
};

glBindTexture(GL_TEXTURE_2D, myTextureRef); // This was previously bound to 
glVertexPointer(2, GL_FLOAT , 0, vertices); 
glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);    

glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_TEXTURE_2D);
  • 我所谓的纹理区域结果只是黑色。
  • 我没有看到用于设置纹理的 CG 调用的调试输出。
  • glGetError 没有报告任何内容。
  • 如果我简化此代码块以仅绘制顶点,但设置纯颜色,则四边形区域将完全按照预期亮起。
  • 如果我事先将整个上下文清除为红色,我就看不到红色——这意味着那里正在渲染某些内容,但不是我的 PNG 的内容。

我可能做错了什么?更重要的是,调试此类事情的正确工具和技术是什么,因为遇到此类问题并且无法以任何有意义的方式在调试器中“单步调试”是一件很糟糕的事情。

谢谢!

最佳答案

glTexParameteri() 及其 friend 控制每个纹理状态,而不是全局 GL 状态。在发出它们之前尝试绑定(bind)您想要更改的纹理。

原样 myTextureRef 最有可能是 incomplete .

关于iphone - 调试基本 OpenGL 纹理失败? (iPhone),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2425943/

相关文章:

iphone - 调整表格 View 大小

java - 如何在 LibGDX 中暂停 Actor 的 Action ?

c++ - OpenGL - 在一个函数中加载多个纹理

java - 根据 ID 在 spritesheet 中显示纹理

graphics - 为什么我们需要纹理过滤(双线性、三线性、各向异性......)

iphone - SFHFKeychainUtilsErrorDomain 错误 -2000

ios - UIView 在呈现其他 View Controller 后重置为初始值

java - Opengl 旋转对象

java - OpenGL ES 2.0 翻译(移动对象)

swift - PHPhotoLibrary 出错,无法保存视频