Skip to content

GlDrawPixels

glDrawPixels or glCopyPixels 속도향상 시키기

glDrawPixels 함수를 사용해보니, 컴퓨터의 하드웨어 스펙(그래픽카드)에 따라 속도가 차이가 나더군요. 이유는 glDrawPixels 함수를 호출시 마다 인자로 넘어온 픽셀정보를 메모리로 읽어들인후, 다시 비디오카드로 출력하는 방식이라서 그런다고 하더군요. (내부적으로 그래픽버퍼등에 캐쉬등이 되지는 않는듯 하고...) 구글을 검색해보니 아래와 같은 팁이 있는데 실제로 해보니 속도향상은 잘못느끼겠네요.

/*
 * Disable stuff that's likely to slow down
 * glDrawPixels.(Omit as much of this as possible,
 * when you know in advance that the OpenGL state is
 * already set correctly.)
 */
glDisable(GL_ALPHA_TEST);
glDisable(GL_BLEND);
glDisable(GL_DEPTH_TEST);
glDisable(GL_DITHER);
glDisable(GL_FOG);
glDisable(GL_LIGHTING);
glDisable(GL_LOGIC_OP);
glDisable(GL_STENCIL_TEST);
glDisable(GL_TEXTURE_1D);
glDisable(GL_TEXTURE_2D);
glPixelTransferi(GL_MAP_COLOR, GL_FALSE);
glPixelTransferi(GL_RED_SCALE, 1);
glPixelTransferi(GL_RED_BIAS, 0);
glPixelTransferi(GL_GREEN_SCALE, 1);
glPixelTransferi(GL_GREEN_BIAS, 0);
glPixelTransferi(GL_BLUE_SCALE, 1);
glPixelTransferi(GL_BLUE_BIAS, 0);
glPixelTransferi(GL_ALPHA_SCALE, 1);
glPixelTransferi(GL_ALPHA_BIAS, 0);
/*
 * Disable extensions that could slow down
 * glDrawPixels.(Actually, you should check for the
 * presence of the proper extension before making
 * these calls.I omitted that code for simplicity.)
 */
#if GL_SGI_index_func
glDisable(GL_INDEX_TEST_SGI);
#endif

See also