팀원들과 함께 작은 타일 / 스프라이트 기반 PC 게임을하고 있는데 성능 문제가 있습니다. OpenGL을 마지막으로 사용한 시간은 2004 년경 이었으므로 핵심 프로필을 사용하는 방법을 스스로 가르쳐 왔으며 약간 혼란스러워하고 있습니다.
250-750 48x48 타일 근처에 매 프레임마다 화면에 그리고 약 50 개의 스프라이트를 그려야합니다. 타일은 새 레벨이로드 될 때만 변경되며 스프라이트는 항상 변경됩니다. 타일 중 일부는 4 개의 24x24 조각으로 구성되며 대부분의 스프라이트는 타일과 크기가 같습니다. 많은 타일과 스프라이트는 알파 블렌딩을 사용합니다.
지금은이 모든 작업을 즉각적인 모드로 수행하고 있는데, 이는 나쁜 생각입니다. 마찬가지로 우리 팀원 중 한 명이이를 실행하려고하면 프레임 속도가 매우 약해 (~ 20-30fps), 타일이 많을수록, 특히 타일이 많을수록 더 나빠집니다. 조각으로 잘립니다. 이로 인해 문제가 발생하는 횟수가 문제라고 생각합니다.
나는 이것에 대한 몇 가지 가능한 해결책을 생각했지만, 내가 말하는 것에 대해 알고있는 사람들이 솔루션을 실행하고 싶었 기 때문에 바보 같은 것에 시간을 낭비하지 않았습니다.
타일 :
- 레벨이로드되면 모든 타일을 한 번 큰 honking 텍스처에 연결된 프레임 버퍼에 한 번 그리고 프레임마다 그 텍스처로 큰 사각형을 그립니다.
- 레벨이로드 될 때 모든 타일을 정적 정점 버퍼에 넣고 그런 식으로 그립니다. glDrawElements를 한 번만 호출하여 다른 질감의 객체를 그리는 방법이 있는지, 심지어 내가하고 싶은 일인지 모르겠습니다. 어쩌면 모든 타일을 큰 거대한 텍스처에 넣고 VBO에서 재미있는 텍스처 좌표를 사용합니까?
SPRITES :
- glDrawElements를 별도로 호출하여 각 스프라이트를 그립니다. 이것은 많은 텍스처 전환과 관련이있는 것 같습니다. 여기서 텍스처 배열이 유용할까요?
- 어떻게 든 동적 VBO를 사용하십시오. 위의 2 번과 동일한 질감 질문.
- 포인트 스프라이트? 이것은 아마도 바보입니다.
이 아이디어 중 어떤 것이 합리적입니까? 내가 볼 수있는 좋은 구현이 있습니까?