OpenGL에서 큰 이미지를 보여주는 선호하는 방법은 무엇입니까?
문제
이 문제가 몇 번있었습니다. Splash-Screen 또는 OpenGL 컨텍스트에 무언가를 표시하고 싶다고 가정 해 봅시다 (또는 그 문제에 대한 Directx, 개념적 일이 더 많음), 이제 2048x2048 텍스처를로드하고 그래픽 카드가 대처할 수 있기를 바랍니다. (대부분은 내가 생각하는 대부분의 것이 될 것입니다), 그러나 구식 그래픽 카드로 자라고 있습니다. 나는이 나쁜 양심이 나를 기대고 있으며, 나는 질감을 크게 사용해서는 안된다고 말합니다.
요즘 선호하는 방법은 무엇입니까? 그 물건을 비디오 메모리에 넣거나 타일을 타거나 CPU가 작동하고 GldrawPixels를 수행하게하는 것이 있습니까? 아니면 더 정교한 것이 있습니까?
해결책
이것이 애니메이션이없는 단일 프레임 스플래시 이미지라면 사용에 해를 끼치 지 않습니다. glDrawPixels
. 성능이 중요하고 텍스처를 사용해야하는 경우, 올바른 방법은 프록시 텍스처를 사용하여 최대 지원 텍스처 크기 인 런타임에 결정하는 것입니다.
GLint width = 0;
while ( 0 == width ) { /* use a better condition to prevent possible endless loop */
glTexImage2D(GL_PROXY_TEXTURE_2D,
0, /* mip map level */
GL_RGBA, /* internal format */
desiredWidth, /* width of image */
desiredHeight, /* height of image */
0, /* texture border */
GL_RGBA /* pixel data format, */
GL_UNSIGNED_BYTE, /* pixel data type */
NULL /* null pointer because this a proxy texture */
);
/* the queried width will NOT be 0, if the texture format is supported */
glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);
desiredWidth /= 2; desiredHeight /= 2;
}
시스템의 OpenGL 드라이버에서 지원하는 최대 텍스처 크기를 알면 이미지가 맞지 않으면 두 가지 옵션이 있습니다.
- 이미지 타일: 이미지를 더 작은 지원 청크로 분할 한 후 여러 쿼드를 사용하십시오. 스플래시 화면과 같은 이미지 타일링은 너무 까다로워서는 안됩니다. 당신이 사용할 수있는 glpixelstorei'에스
GL_PACK_ROW_LENGTH
더 큰 이미지의 섹션을 텍스처로로드하는 매개 변수. - 이미지 크기 조정: 지원되는 최대 텍스처 크기에 맞게 이미지를 크기를 조정하십시오. 당신을 위해 이것을하는 GLU 도우미 기능도 있습니다. Gluscaleimage.
제휴하지 않습니다 StackOverflow