iphone - GLKBaseEffect prepareToDraw 正在泄漏
<p><p>似乎每个人都同意这是损坏的,您需要摆脱 GLKBaseEffect 以阻止它泄漏。但是没有人提到你会用什么来代替它。</p>
<p>有人能指出我正确的方向吗?一些示例代码或教程会非常有用!</p>
<p>我正在做一些非常基本的事情,只是绘制 2DSprite 。除了所有泄漏之外,效果很好:p</p>
<p>我只需要知道 prepareToDraw 正在做什么,并用一些有效的代码替换它。我发现的所有教程似乎都专注于 3D 渲染...</p>
<p>我可以使用 OpenGL ES1 而不是 2 吗?</p>
<pre><code>//---Sprite drawing code ----------------------
effect.transform.modelviewMatrix = viewMatrix;
effect.texture2d0.name = textureInfo.name;
effect.texture2d0.envMode = GLKTextureEnvModeReplace;
// LEAK Here
;
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);
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>所以...最后我做了其他人必须做的事情并编写了我自己的 GLKBaseEffect 版本。 </p>
<p>这很繁琐,但并不难,大约花了一天时间。那里有教程,但没有一个提供我所需要的。最后,我使用 OGL 默认项目作为我的起点,因为它为我提供了框架 - 编译和运行着色器以及所有这些,即使它没有做我想要的。 </p>
<p>这是我所做的要点。花了很多迭代才开始工作......</p>
<ol>
<li>从默认 OGL 项目中删除所有 GLKBaseEffect(一个立方体使用 GLKBaseEffect 绘制,而另一个使用着色器绘制)</li>
<li>将投影矩阵更改为 GLKMatrix4MakeOrtho。</li>
<li>将顶点从立方体更改为二维。让它发挥作用。</li>
<li>添加纹理。</li>
<li>让一切顺利。</li>
<li>将所有 OGL 代码移动到 OpenGLHelper 类中。</li>
<li>将代码移动到我的项目中并用我的新类替换所有 GLKEffects</li>
</ol>
<p>最终结果可能不是最好的代码,但它可以工作,并且不再有泄漏。</p>
<p>这是我的着色器</p>
<pre><code>// 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;
}
</code></pre>
<p>我很乐意分享其余代码,但这里还有很多内容要放!</p></p>
<p style="font-size: 20px;">关于iphone - GLKBaseEffect prepareToDraw 正在泄漏,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/11112517/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/11112517/
</a>
</p>
页:
[1]