2012-05-04 1 views
1

현재 응용 프로그램에서 색상 피킹을 사용하고 있습니다. 이것은 PC에서 작동하지만 다양한 장치에서 작동하도록하는 데 문제가 있습니다.픽셀 색상이 정확하지 않습니다.

이것은 아마도 장치에 따라 컨텍스트가 다르게 설정 되었기 때문일 수 있습니다. 예를 들어, 내가 아는 한 PC는 888 색으로 설정되어 있지만 장치는 565로 기본 설정 될 수 있습니다.

OpenGL에서 현재 픽셀/색상 형식을 얻는 방법이 있는지 궁금 해서요. 그래서 색 데이터를 올바르게 검색 할 수 있습니까?

이있는 PC에서 잘 작동 내가 사용 기능 :

inline void ProcessColourPick(GLubyte *out, KDfloat32 x, KDfloat32 y) 
{ 
    GLint viewport[4]; 
    GLubyte pixel[3]; 

    glGetIntegerv(GL_VIEWPORT,viewport); 

    //Read colour of pixel at a specific point in the framebuffer 

    glReadPixels(x,viewport[3]-y,1,1, 
     GL_RGB,GL_UNSIGNED_BYTE,(void *)pixel); 

    out[0] = pixel[0]; 
    out[1] = pixel[1]; 
    out[2] = pixel[2]; 
} 

어떤 아이디어?

답변

1

네,하지만 다소 복잡합니다.

현재 프레임 버퍼의 비트 심도를 쿼리하는 것은 ES 2.0에서 매우 쉽습니다 (참고 : 데스크톱 GL에서도 유효하지만 GL 3.1 코어에서는이 기능이 제거되었습니다. 호환성 프로파일에서는 여전히 액세스 할 수 있습니다). 각 색상 구성 요소의 비트 심도를 얻어야합니다.

GLint bitdepth; glGetIntegerv (GL_x_DEPTH, & bitdepth); X는 RED 하나, GREEN, BLUE 또는 ALPHA이다

.

비트 디드가 있으면 565인지 테스트하고 적절한 픽셀 전송 매개 변수와 색상 값을 사용할 수 있습니다.

0

glReadPixels의 매개 변수는 GL_RGBA (항상 지원됨) 또는 GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES (다른 장치에서 다름) 중 하나 여야합니다. 그것은 OpenGL ES 제한입니다.