2014-01-19 1 views
0

단색으로 OpenGL 텍스처를 초기화하거나 재설정하는 방법이 있습니까? 노트북의 Intel HD Graphics 4000을 지원하기 때문에 OpenGL 4.0까지 사용할 수 있습니다.텍스처를 단색으로 재설정하는 OpenGL 함수가 있습니까?

+0

목표는 무엇입니까? – fedab

+0

@fedab 정말 유연한 렌더링 파이프 라인을 만듭니다. 렌더 패스는 즉시 토글하거나 수정할 수 있습니다. 따라서 각 렌더 패스는 패스가 비활성화되었을 때 수행되는 폴백을 지정할 수 있으므로 전체 파이프 라인이 여전히 작동합니다. 이러한 단점에는 단색으로 텍스처를 채우고 수정없이 다른 텍스처를 복사하는 것이 포함됩니다. – danijar

답변

1

아마도 프레임 버퍼를 사용할 수 있습니다. 텍스처와 링크하여 프레임 버퍼에서 원하는 것을 그릴 수 있습니다. 폴백이 실행중인 경우 프레임 버퍼를 원하는 색상으로 지 웁니다.

그리고 나서 프레임 버퍼를 텍스처로 그립니다.

+0

지난 몇 시간 동안 간단한 쉐이더를 사용하여 동일한 방법으로 지우기 및 복사를 구현했습니다. 이제 작동합니다. 단순 조각 쉐이더를 사용하는 것보다 클리어링이 훨씬 빠르다고 생각하십니까? – danijar

+0

@danijar 확실하지 않습니다. 셰이더를 생성하고 실행해야합니다. [OpenGL Wiki] (https://www.opengl.org/wiki/Framebuffer#Buffer_clearing)에 설명되어있는 삭제 방법을 사용합니다. – fedab

0

색 데이터를 glTexSubImage2D을 사용하여 이미 만든 텍스처로 복사하고 전체 텍스처 크기를 지정하면됩니다. 다른 점은 새 버퍼를 만들지 않고 업데이트 만한다는 것입니다.

+0

그래서 각 픽셀에 대해 동일한 색상의 긴 배열을 만들고이를 비디오 카드로 보냅니다. – danijar

+0

@danijar 네, 보통 이미지와 같습니다. 이것이 요구되는 이유는 버퍼 (예를 들어 프레임 버퍼)를 지우려면 버퍼를 잠그고 루프를 통과시켜 각 픽셀을 다시 설정해야한다는 것입니다. 이 작업은 속도가 느리기 때문에 하드웨어에서 구현됩니다. 당신의 경우에 당신은 그 사유가 없습니다. 셰이더를 사용하여 즉석에서 텍스처 개체를 수정할 수 없다면 말입니다. 텍스처 버퍼 오브젝트를 확인하십시오. 그러나 이것에 대해서는 확실하지 않습니다. – concept3d

+0

@danijar FBO를 사용하면 GPU 로의 데이터 전송을 줄일 수 있습니다. 그러나 이것은 더 많은 연구가 필요합니다. – concept3d

1

단위/샘플러 개체에서 텍스처의 바인딩을 해제하면 텍스처 액세스가 모두 흰색이됩니다. 그래서 색상 변조를위한 유니폼을 추가하는 것이 좋습니다. 솔리드 컬러가 필요하면 텍스처를 바인딩 해제하고 원하는 색상으로 균일하게 설정하십시오.

솔직히 말해서, 원하는 효과를 얻기 위해 많은 스위치를 가지고있는 OpenGL 고정 기능 파이프 라인을 다시 구현하려는 것처럼 나에게는 소리가 들립니다. 마침내 그걸 없앴습니다. 이제이 창을 다시 탄생시키고 싶습니까?

+0

내 렌더링 파이프 라인이 아주 잘 설계되었다고 생각합니다. 그러나 나는 그것에 대한 당신의 생각을 듣고 싶습니다. 렌더링 패스는 스크립팅 파일에 정의되며 런타임에 발생하는 대체에 따라 토글 할 수 있습니다. 이것은 내 [현재 파이프 라인 스크립트] (https://github.com/ComputerGame/GraphicsApplication/blob/master/module/renderer/pipeline.js)입니다. 또한 제복은 원본에서 놓일 수있다. 개선 할 수있는 설계상의 실수를 보았습니까? – danijar

+0

고정 함수 파이프 라인의 문제점은 많은 유스 케이스가 적합하지 않다는 것입니다. 그러나 질문자 프로그램의 요구 사항이 고정 기능 파이프 라인의 기능과 정확히 일치하면 어떻게 될까요? – immibis

2

GL 4.0까지 사용할 수 있다고 했는데도 그 답을 얻었지만 여전히 GL 4.4부터 시작하여 glClearTexImage()이라는 점을 지적하고자합니다.

관련 OpenGL 확장은 ARB_clear_texture입니다. Intel HD 4000은 GL4.0을 지원한다고하지만 최신 드라이버의 경우 4.1, 4.2 및 4.3 수준의 확장 기능을 구현하는 확장 기능이 많이 추가되었습니다. 그러나 인텔이 4.4 레벨 기능을 구현하기 시작했다고 주장하는 자료를 아직 찾지 못했습니다. 내가 찾은 최신 소스는이 기능이 아직 지원되지 않음을 보여주는 OpenGL feature matrix from february 2014입니다. 그러나 향후 드라이버 버전에서이 확장이 지원 될 가능성이 매우 높습니다.

+0

인텔 HD 그래픽 드라이버가 확장 기능으로 지원되는지 여부를 알 수 있습니까? – danijar

+0

@danijar : 답변을 업데이트했습니다. – derhass

+0

답변과 도움이되는 자료에 감사드립니다. – danijar