2012-06-20 2 views
2

누구나 이것이 깨 졌음에 동의하고 GLKaseEffect를 제거하여 누출을 막아야합니다. 그러나 아무도 당신이 그것을 대체 할 것이라고 언급하지 않습니다.GLKBaseEffect prepareToDraw가 새기다

누군가 나를 올바른 방향으로 안내 할 수 있습니까? 일부 샘플 코드 또는 자습서는 놀라 울 정도로 유용 할 것입니다!

저는 2D 스프라이트를 그리는 아주 기본적인 작업을 수행하고 있습니다. 모든 누수와 별개로 작동합니다. p

prepareToDraw가 수행중인 작업을 알고 작동하는 일부 코드로 바꾸면됩니다. 내가 찾은 모든 자습서는 3D 렌더링에 집중하는 것 같습니다 ...

아마도 2 대신 OpenGL ES1을 사용할 수 있습니까?

//---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); 
+0

여기에 같은 문제가 있습니다 ... – Christoph

답변

1

귀하의 질문과 직접적인 관련이 없지만 비슷한 문제가 있습니다. 거친 부분은 누출 된 것이 무엇인지 파악하는 것이 었습니다.

질감을 사용하고있는 것 같습니다. glDeleteTextures으로 전화해야합니다. 그렇지 않으면 textureInfo의 각 업데이트가 유출됩니다. 다른 사람이해야 할 일을했을 및 GLKBaseEffect 내 자신의 버전을 쓴 내가 한 말에 ... Release textures (GLKTextureInfo objects) allocated by GLKTextureLoader

+0

이것은 나를 위해 작동하지 않습니다. –

+0

확인. 필자의 경우, 인스 트루먼 트는 거기서 누수를 보여주었습니다. 셰이더와 GL 2로 작업 한 이후로 걱정하지 않아도됩니다. – lazi74

2

그래서 :

또한이 관련 게시물을 참조하십시오.

힘들지는 않지만 그다지 어렵지는 않습니다. 하루 정도 걸렸습니다. 거기에 튜토리얼이 있지만 아무도 정확히 내가 필요한 것을 제공합니다. 결국 OGL 기본 프로젝트를 시작점으로 사용했기 때문에 셰이더 컴파일 및 실행과 같은 프레임 워크를 제공했습니다.

여기에 내가 한 일의 요지가 있습니다. 그것은 반복의 많은 GLKMatrix4MakeOrtho로 (하나 개의 큐브가 GLKBaseEffect으로 그려되어 있지만 다른 쉐이더 함께)

  1. 은 기본 OGL 프로젝트에서 모든 GLKBaseEffect를 제거 ...
  2. 변경 프로젝션 매트릭스 작업을 진행했다.
  3. 정점을 큐브에서 2D로 변경하십시오. 작동 시키십시오.
  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; 
} 

내 쉐이더하지만 약간은 여기에 넣어 그것의 많은있다!

+0

안녕하세요, David, 당신이 택한 길을 따르고 싶습니다만, XCode의 OpenGL 기본 프로젝트는'GLKBaseEffect'도 사용하고 있습니다. 내가 놓친 게 있니? 소스를 기꺼이 공유 할 의향이 있습니까? – cheeesus

+0

죄송합니다. OGL 기본 프로젝트의 큐브 중 하나가'GLKBaseEffect'없이 렌더링되었다는 의견을 보았습니다. 고맙습니다! – cheeesus

+0

당신을 위해 일한 희망. 그것이 완벽하지 않다는 것을 알지만 도움이된다면 더 많은 코드를 공유하게되어 기쁩니다! –