방금 랩톱으로 렌더링 코드를 옮겼으며 OpenGL 및 glsl에 문제가 있습니다.ATI glsl 포인트 스프라이트 문제
uniform float tile_size;
void main(void) {
gl_PointSize = tile_size;
// gl_PointSize = 12;
}
과 텍스처를 읽고 단편 색상 설정 gl_Pointcoord 사용 프래그먼트 쉐이더 :
는 I 이런 정점 셰이더 (단순화 된)을 갖는다. 다음과 같이 내 C++ 프로그램에서 내가 tile_size 결합 노력하고있어 :
glEnable(GL_TEXTURE_2D);
glEnable(GL_POINT_SPRITE);
glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
GLint unif_tilesize = glGetUniformLocation(*shader program*, "tile_size");
glUniform1f(unif_tilesize, 12);
(그냥 같이 glUseProgram를 사용하는 프로그램이 특정 일정에 대한 단지 조각이다 내가 설정 이미했습니다 명확하게) 이제는 이런 식으로 하나의 픽셀 포인트를 얻었고 opengl이 unif_tilesize를 바인딩하지 못한다는 것을 발견했습니다 (-1로 설정 됨).
내 버텍스 쉐이더에서 의견을 교환하면 12px 포인트 스프라이트가 잘됩니다.
특히 정확한 다른 컴퓨터의 동일한 코드는 절대 작동합니다. 내 랩톱의 OpenGL 버전은 2.1.8304이고 ATI radeon x1200 (내 데스크탑의 nvidia 8800gt cf) (관련이있는 경우 ...)이 실행 중입니다.
수정 문제를 더 잘 반영하기 위해 질문 제목이 변경되었습니다.
두 번째 문제는 관련된 것일 수 있습니다. 이벤트는 12px 포인트 스프라이트 렌더링 (vertex 쉐이더에서 gl_pointsize = 12 사용) 일 때 gl_PointCoord가 각 스프라이트에서 달라지는 것 같지 않습니다. – user1483596
확인 했습니까? 프로그램이 성공적으로 컴파일되고 glValidateProgram과 glGetProgramiv에 의해 링크 된 경우? 너는 단 하나 위치를 위해 항상 -1을 얻는가? 컴파일러가 코드를 최적화하고 사용되지 않는 유니폼, 즉'gl_PointSize = tile_size;'행에 주석을 달 때 제외하는 것은 정상입니다. GLSL 파일의 시작 부분에 버전을 설정하려 했습니까? 또한 다른 컴퓨터 (드라이버)가 GL_PROGRAM_POINT_SIZE를 지원하는지 확인하십시오. 나는 당신과 비슷한 한때 문제가있었습니다. 밖으로 나왔어, 난 그냥 GL_PROGRAM_POINT_SIZE에 _EXT 추가 필요 :) 또한, "정의 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _합니다 _ –
제안을 주셔서 감사합니다, 프로그램을 컴파일하고 잘 연결됩니다. tile_size 균일 한 위치에 대해 항상 -1을 얻습니다. 다른 유니폼 (float과 sampler2D)과 속성은 잘 묶는다. 나는 버전 번호가 없지만 변경없이 추가했다. glEnable GL_PROGRAM_POINT_SIZE, GL_PR ... _ SIZE_EXT, GL_VERTEX_PROGRAM_POINT_SIZE 및 그 조합을 시도했지만 아무 것도 작동하지 않는 것 같습니다. – user1483596