gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 20:26:50 24 4
gpt4 key购买 nike

我在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com