GL_RGBA16F_ARB-TEXTURE를 사용할 때는 CRAP 만 포함되지만 오류 메시지가 없습니다.

StackOverflow https://stackoverflow.com/questions/640095

  •  11-07-2019
  •  | 
  •  

문제

나는 다음과 같은 질감을 생성합니다.

GLuint id;

glGenTextures(1, &id);

glBindTexture(GL_TEXTURE_2D, id);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

glTexImage2D(
    GL_TEXTURE_2D, 0,
    GL_RGBA16,
    //GL_RGBA16F_ARB, //< Won't work
    256, 256, 0, GL_RGBA, GL_FLOAT, NULL
);

glBindTexture(GL_TEXTURE_2D, 0);

렌더링을 위해 프레임 버퍼 객체 (FBO)에 부착합니다. 이 모든 것은 내부 형식을 설정할 때 매력처럼 작동합니다. GL_RGBA16. 그러나 나는 더 높은 다이나믹 레인지가 필요하고 GL_RGBA16F_ARB 트릭을 할 수 있습니다.

불행히도, 내가 교체하면 GL_RGBA16 ~와 함께 GL_RGBA16F_ARB 위에 주어진 코드에서 질감은 작동을 멈추는 것 같습니다. FBO/텍스처 스틱에 렌더링하려는 것은 없으며, 텍스처를 사용하면 임의의 쓰레기가 포함되어 있습니다. (많은 자주색, 결과적으로) 잘못된 내용을 암시하는 오류 메시지를 받았다면 이것은 그렇게 실망스럽지 않지만 찾을 수는 없습니다. 다시 말해, glGetError() 보고 0glTexImage2D-Call 및 glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) 보고 GL_FRAMEBUFFER_COMPLETE_EXT 텍스처를 부착했을 때

나는 엉망이되지 않았다 glClampColorARB(...) ... 아직 :)

  1. 내가 생각하지 않은 장소/방식으로 오류를 확인하는 것을 잊었습니까?
  2. 하다 GL_RGBA16F_ARB-텍스트는 내가 제공하지 않은 특별한 대우가 필요합니까?
  3. 다른 잘못된 것이 있습니까?

모든 것이 부드럽게 작동하기 때문에 나는 그루터기가 있습니다 GL_RGBA16... :(

편집하다: 사용할 때 GL_RGBA16F_ARB, 내가 화면으로 렌더링하려는 첫 번째 프레임은 그것을 만들지 않습니다. 어딘가에 오류 메시지를 받고 있어야하는 것 같습니다 ..?

편집하다: Shadowice의 작업 코드 예제를 검사하여 나는 내가 변경하면 문제가 사라 졌다는 것을 알아 냈습니다. 깊이 버퍼 내 fbo에 glRenderBufferStorageEXT(...) GL_DEPTH_COMPONENT24 두 번째 매개 변수로서 GL_DEPTH_COMPONENT16. 나는 모른다 이것은 작동하지만 분명히 작동합니다.

또한, 내가 반대 대체를하면 Shadowice의 코드가 내처럼 끊어집니다.

도움이 되었습니까?

해결책

플로트 텍스처가있는 프레임 버퍼를 설정하기 위해 특별한 일이 없어야합니다. 내가 확인할 몇 가지 사항 :

  1. glcheckframebufferstatusext를 호출하기 전에 FBO 바운드와 드로우/읽기 버퍼가 올바르게 설정되어 있습니까? 또한 그리기 직전에 테스트하십시오.
  2. 특정 명확한 색상의 간단한 글씨를 따르는 텍스처가 괜찮아 보입니까? 그렇다면 셰이더에 문제가있을 수 있습니다 (사용하는 경우) 또는 FBO에 그리는 방식이있을 수 있습니다.
  3. 운전자가 최신 상태입니까? 그리고 다른 하드웨어가 다른 PC에 여전히 문제가 있습니까?
  4. GL_RGBA32F_ARB는 어떻습니까?

편집하다:

  1. 프레임 버퍼와 텍스처의 ID를 점검하고 텍스처 ID가 FBO에 연결된 것과 일치하는지 확인하십시오 (GLGETFRAMEBUFFERATTACHMENTPARAMETERIV 포함). 일반적으로 RGBA 텍스처에서 작동하지만 랜덤 데이터 (특히 자주색)가 텍스처에 기록되지 않았거나 제대로 지우지 않았다는 좋은 신호라고 생각합니다.

효과가 있어야하는 작은 예제 응용 프로그램을 작성했습니다. Windows에서만 테스트 했으므로 Linux의 경우 약간 변경해야 할 수도 있습니다. 링크

다른 팁

gl_half_float_arb는 gl_float 대신 유형으로 작동 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top