gpt4 book ai didi

iphone - GLKBaseEffect prepareToDraw 正在泄漏

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:15:10 28 4
gpt4 key购买 nike

似乎每个人都同意这有问题,您需要摆脱 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);

最佳答案

所以...最后我做了其他人必须做的事情并编写了我自己的 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/

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