gpt4 book ai didi

iphone - iPhone 上的 OpenGL ES 的 glBindTexture 问题

转载 作者:行者123 更新时间:2023-12-03 21:23:44 25 4
gpt4 key购买 nike

我是 OpenGL 新手,我的纹理有一个奇怪的问题 - 寻找正确方向的插入。

我有一个应用程序,它使用渲染纹理技术来实现某种效果 - 它运行得非常好。每次需要时,我都会绘制到屏幕外缓冲区,并且能够在渲染循环中将其用作纹理。

此纹理仅在必要时更新 - 它像大多数帧一样绘制到屏幕上。

我有一些工具栏,它们也是使用 OpenGL 绘制的,在该表面的顶部使用纹理图集并使用混合。

我最近开始尝试将粒子系统合并到应用程序中,但是每当我尝试渲染粒子系统图形时,我都会“丢失”我在第一步中渲染的纹理 - 即它的内容消失。

我已将其追溯到对绑定(bind)粒子纹理的 glBindTexture 的调用。

编辑:我可以在我的简单工具栏绘图例程中重现这一点,代码如下。这是一个粗略的例程,可以在屏幕上和屏幕外对工具栏图形进行动画处理。

当我取消注释drawToolBar()中的前两行时,我在内存中渲染的纹理消失了,即渲染循环中的drawarrays调用不会在屏幕上渲染任何内容。通过测试,我确定 glBidTexture 调用是触发此事件的原因。 (例如,我可以在纹理上渲染彩色四边形,但不能渲染纹理的四边形)

但是,如果我允许drawToolbar()按如下方式运行,一切都很好 - 唯一的区别是对drawTools()的最终调用被包装在glPush/Pop中,并被翻译。

请注意,工具栏渲染始终有效 - 这里会出现一些意想不到的副作用、后果或错误问题,这会导致我的背景纹理消失。

欢迎任何想法 - 这让我发疯。

代码:

void drawTools()
{
//*Texture Coordinate Stuff Snipped*//

glBindTexture(GL_TEXTURE_2D, _buttontexture);

glEnable(GL_TEXTURE_2D);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);

glVertexPointer (2, GL_FLOAT, 0,bottomToolQuads);
glTexCoordPointer(2, GL_FLOAT, 0,texc);

glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDrawArrays(GL_TRIANGLE_STRIP, 4, 4);
glDrawArrays(GL_TRIANGLE_STRIP, 8, 4);
glDrawArrays(GL_TRIANGLE_STRIP, 12, 4);
glDrawArrays(GL_TRIANGLE_STRIP, 16, 4);
glDrawArrays(GL_TRIANGLE_STRIP, 20, 4);

glDisable(GL_TEXTURE_2D);

}

void drawToolBar()

{

//drawTools();
//return;

if(_toolbarState ==0)
{
drawTools();
}
else if(_toolbarState == 2)//hiding
{
_toolbarVisiblePct -= TOOLINC;

if(_toolbarVisiblePct <= 0.0)
{
_toolbarState = 1;
_toolbarVisiblePct = 0.0;
}
else
{
glPushMatrix();
glTranslatef(0.0, -(1-_toolbarVisiblePct) * 50, 0);
drawTools();
glPopMatrix();
}
}
else if(_toolbarState == 3) //showing
{
_toolbarVisiblePct += TOOLINC;
if(_toolbarVisiblePct >= 1.0)
{
_toolbarState = 0;
_toolbarVisiblePct = 1.0;
drawTools();
}
else
{
glPushMatrix();
glTranslatef(0.0, -(1-_toolbarVisiblePct) * 50, 0);
drawTools();
glPopMatrix();

}
}

}

最佳答案

看起来您在drawTools方法末尾禁用了纹理渲染。 OpenGL 是一个状态机,如果您禁用某个状态,它将保持禁用状态,直到您再次启用它。

关于iphone - iPhone 上的 OpenGL ES 的 glBindTexture 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2477906/

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