• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

iphone - GLKBaseEffect prepareToDraw 正在泄漏

[复制链接]
菜鸟教程小白 发表于 2022-12-13 14:14:36 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

似乎每个人都同意这是损坏的,您需要摆脱 GLKBaseEffect 以阻止它泄漏。但是没有人提到你会用什么来代替它。

有人能指出我正确的方向吗?一些示例代码或教程会非常有用!

我正在做一些非常基本的事情,只是绘制 2D Sprite 。除了所有泄漏之外,效果很好:p

我只需要知道 prepareToDraw 正在做什么,并用一些有效的代码替换它。我发现的所有教程似乎都专注于 3D 渲染...

我可以使用 OpenGL ES1 而不是 2 吗?

//---Sprite drawing code ----------------------

effect.transform.modelviewMatrix = viewMatrix;

effect.texture2d0.name = textureInfo.name;
effect.texture2d0.envMode = GLKTextureEnvModeReplace;

// LEAK Here
[effect prepareToDraw];

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 2, GL_FLOAT, GL_FALSE, 0, vertices);

glEnableVertexAttribArray(GLKVertexAttribTexCoord0);
glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, 0, textureVerts);

glDrawArrays(GL_TRIANGLE_FAN, 0, 4);

glDisableVertexAttribArray(GLKVertexAttribPosition);
glDisableVertexAttribArray(GLKVertexAttribTexCoord0);

glDisable(GL_BLEND);



Best Answer-推荐答案


所以...最后我做了其他人必须做的事情并编写了我自己的 GLKBaseEffect 版本。

这很繁琐,但并不难,大约花了一天时间。那里有教程,但没有一个提供我所需要的。最后,我使用 OGL 默认项目作为我的起点,因为它为我提供了框架 - 编译和运行着色器以及所有这些,即使它没有做我想要的。

这是我所做的要点。花了很多迭代才开始工作......

  1. 从默认 OGL 项目中删除所有 GLKBaseEffect(一个立方体使用 GLKBaseEffect 绘制,而另一个使用着色器绘制)
  2. 将投影矩阵更改为 GLKMatrix4MakeOrtho。
  3. 将顶点从立方体更改为二维。让它发挥作用。
  4. 添加纹理。
  5. 让一切顺利。
  6. 将所有 OGL 代码移动到 OpenGLHelper 类中。
  7. 将代码移动到我的项目中并用我的新类替换所有 GLKEffects

最终结果可能不是最好的代码,但它可以工作,并且不再有泄漏。

这是我的着色器

// FRAGMENT SHADER //////////////

precision mediump float;
varying lowp vec2 texCoordOut; 
uniform sampler2D textureUniform; 
uniform float     alphaUniform;
uniform lowp vec4 colorUniform;

void main()
{
    vec4 color  = colorUniform * texture2D(textureUniform, texCoordOut); ;
    gl_FragColor = color; 
}

// VERTEX SHADER ////////////////////

attribute vec4 position;
uniform mat4 projection;
uniform mat4 modelView;

attribute vec2 texCoordIn; 
varying vec2 texCoordOut; 

void main()
{
    gl_Position = projection * modelView * position;
    texCoordOut = texCoordIn; 
}

我很乐意分享其余代码,但这里还有很多内容要放!

关于iphone - GLKBaseEffect prepareToDraw 正在泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11112517/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap