2012-02-14 6 views
2

다른 용도로 사용하여 게임의 바닥을 렌더링하려했습니다. 먼저 텍스처를 만들고 GPU에 업로드합니다.렌더링 할 때 여러 텍스처를 사용하면 낮은 프레임 속도가 발생합니다

void initialize(float width,float height) 
{ 
    for(int i = 0;i < 10;i++) 
    { 
     glActiveTexture(GL_TEXTURE1 + i); 
     GLuint gridTexture; 
     glGenTextures(1, &gridTexture); 
     glBindTexture(GL_TEXTURE_2D, gridTexture); 
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 

     setPngTexture(gameMap->texture); 
     glGenerateMipmap(GL_TEXTURE_2D); 
    } 
} 

그런 다음 모든 프레임에서 렌더링 할 때 텍스처를 사용합니다.

void render() const 
{ 
    for(int i = 0; i < map -> maps.size();i++) 
    { 
     glUniform1i(uniforms.Sampler,i); 
     glBindBuffer(GL_ARRAY_BUFFER, gameMap -> verticesbuffer); 
     glVertexAttribPointer(position, 3, GL_FLOAT, GL_FALSE, stride, 0); 
     glVertexAttribPointer(normal, 3, GL_FLOAT, GL_FALSE, stride, offset); 
     glVertexAttribPointer(texture, 2, GL_FLOAT, GL_FALSE, stride, texCoordOffset); 
     glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, gameMap -> indicesbuffer); 
     glDrawElements(GL_TRIANGLES, gameMap -> indexCount, GL_UNSIGNED_SHORT, 0); 
    } 

} 

아이폰 시뮬레이터에 제대로 코드가 작동하지만이 장치에서 응용 프로그램을 테스트 할 때, 그것은 나에게 매우 낮은 프레임 속도를 제공합니다 2fps합니다. glUniform1i(uniforms.Sampler,i);glUniform1i(uniforms.Sampler,0);으로 변경하면 앱이 정상적으로 작동합니다.

저는 OpenGL ES의 신입생이고 정확한 질감으로 여러 질감을 사용하고 있는지 잘 모르겠습니다. 친절하게이 문제의 원인이 무엇인지 말해 줄 수 있으며 어떻게 해결할 수 있습니까? 고마워요!

+0

많은 문제가있을 수 있습니다. 실제로 문제를 진단 할 수있는 충분한 코드를 제공하지 않습니다 (쉐이더 소스). glUniform1i (uniforms.Sampler, 당신의 루프 밖에서. (현재 기본적으로 uniforms.Sampler를 map.size()에 대한 쉐이더 내부의 n 번째 값에 바인딩하려고 시도하고있다. 나는 귀엽다. 이것은 OpenGL 오류가 많이 발생하고 있습니다 .glUniform1i에 대한 문서를 다시 읽으십시오. – Byron

답변

0

많은 문제가있을 수 있습니다. 문제를 실제로 진단 할 수있는 충분한 코드를 제공하지 않습니다 (쉐이더 소스). 나는 glUniform1i (uniforms.Sampler, i)를 움직이는 것으로 시작할 것입니다; 루프 외부. (현재 기본적으로 uniforms.Sampler를 map.size()에 대한 쉐이더 내부의 n 번째 값에 바인딩하려고 시도하고 있습니다.이 작업은 OpenGL 오류가 많이 발생하고 있음을 확신합니다. - glUniform1i에 대한 문서 읽기

+0

죄송합니다. 루프의 그리기 방법을 건너 뛰었습니다. 셰이더는 매우 간단합니다. – Ning

관련 문제