현재 여러 개의 응용 프로그램을 SDL2 렌더링 (내부적으로 OpenGL 사용)에서 "순수한"OpenGL 렌더링으로 마이그레이션하는 중입니다. 이 작업을하는 동안 텍스처를 GPU에 업로드하는 방법을 알아 냈고 모든 텍스처에 인덱스가 있음을 알았습니다.OpenGL + SDL_TTF : 텍스처 인덱스 재활용
텍스트를 렌더링하려면 기본적으로 일부 텍스트를 묘사 한 GPU에 텍스처를 업로드 할 수있는 SDL_TTF 함수를 사용합니다. 마이그레이션하는 대부분의 응용 프로그램은 텍스트가 무겁지는 않지만 가능한 문제점을 발견했습니다.
사용자 텍스트 입력을 허용하고 화면에 넣는 응용 프로그램을 상상해보십시오. 각 키 입력은 모든 텍스트가 입력 된 새로운 텍스처를 생성합니다 (동일한 기능과 관련된 다른 이전 텍스처는 삭제됩니다). 따라서 "Hello"를 쓰려면 "H", "He", "Hel", "Hell"그리고 마침내 "Hello"다섯 가지 텍스처를 얻을 수 있습니다. 마찬가지로, 모든 "이전"텍스처 (이 경우 "H"에서 "Hell"로)가 삭제되고 "Hello"에 대한 메모리 만 남아 있습니다.
텍스트 무거운 응용 프로그램 (예 : 게임의 점수를 매기는 데이 방법을 사용하면 각 프레임에 대해 새 텍스처를 생성 할 정도로 심하게 수행) 많은 텍스처가 업로드되고 삭제되며 텍스처 색인은 계속 성장할 것입니다.
내 주요 질문은 다음과 같습니다. OpenGL에서 이러한 인덱스를 재활용하겠습니까? 그렇지 않으면 숫자가 고갈되고 충돌이 발생합니까?
추신 : 나는 모든 TTF 캐릭터를 아틀라스에 포장하고 필요한 문자를 얻을 가능성을 알고 있습니다. 나는 현재의 접근 방식이 위험하지 않는 한, 지금은 그 모습을보고 싶지 않다. (이 아틀라스는 오래된 비트 맵 글꼴 같은 느낌이다.)
PS2 : 텍스처를 끊임없이 바꿔도 GPU가 현저하게 성능이 저하되는 것은 아니지만 이러한 응용 프로그램은 구형 시스템에서 그래픽 작업에 능숙하지 않고 우수한 성능을 제공합니다.
걱정되는 경우 텍스처 ID/이름을 다시 만들지 않고 텍스처 데이터를 바꾸는 것이 가장 좋은 이유는 무엇입니까? 나는. 'glTexImage'를 다시 사용하거나 나중에 큰 텍스처를 할당하고 나중에 데이터의 일부를 대체 할 수 있습니다. – keltar
예, 예, 그게 내가 앞으로 할 계획입니다. :). 예를 들어, 게임이나 힌트 상자에서 전술 한 스코어 마커와 같이 변경 될 수있는 모든 텍스트는 리소스의 삭제를 관리하는 클래스에 캡슐화됩니다 (일반적으로 수명이 길며 많은 인덱스가 소비되지 않습니다).나는 현재 텍스쳐를 "대체"하기 위해 그것들을 확장 할 수 있었지만 나는 거짓말을하고있는 일부 레거시 코드에 대해 확신 할 수 없었다. 고마워. –