OpenGL 3.2에서는 쉐이더를 사용하고 있어야하며,이 시점에서는 gl_SecondaryColor
과 같은 레거시 기능을 피해야합니다. 셰이더 기반 엔진에서 2 차 색상을 적절하게 대체하는 것은 단순히 추가 일반 정점 속성입니다. OpenGL ES 2.0과 관련된 very similar question을 설명했는데, 제 대답이 도움이 될 수 있습니다.
즉, glVertexPointer (...)
, glColorPointer (...)
, glSecondaryColorPointer{EXT} (...)
은 모두 OpenGL 3.0에서 사용되지 않습니다. 3.2 핵심 컨텍스트에서는이를 전혀 사용할 수 없습니다. 따라서 셰이더와 glVertexAttribPointer (...)
을 배워야합니다.
같은 것을 보일 것이다 코어 GL 3.2에서 "차"와 "보조"버텍스 컬러를 사용하는 버텍스 쉐이더 : 당신은 사용 glVertexAttribPointer (...)
를 사용하여 vtx_pos, vtx_color1 및 vtx_color2에 데이터를 제공 할
#version 150 core
uniform mat4 mvp;
in vec4 vtx_pos;
in vec4 vtx_color1;
in vec4 vtx_color2;
out vec4 color;
void main (void) {
gl_Position = mvp * vtx_pos;
color = vtx_color1 * vtx_color2; // It is up to you to decide what to do
// with the primary and secondary
// colors, this is just for show...
}
을 GLSL 버텍스 쉐이더에서 쿼리 된 속성 위치 (링크 후). 그리고이 모든 것이 완전히 glSecondaryColorPointerEXT (...)
에 대한 필요성을 없애줍니다.
즉, 레거시 코드를 번역하고 몇 가지 레거시 기능을 수정하는 대신 전체 내용을 다시 작성해야합니다. 대부분의 비디오 카드가 지원하지만 버전 4는 지원하지 않기 때문에 3.2 코어를 선택했습니다. 스릴 넘치는 대답은 아닙니다 ( – Jay
@Jay : 3.2 코어 사용 안 함 :) 3.2 호환성 프로파일에서 대부분의 3.2 기능에 액세스 할 수 있습니다. 이렇게하면 쉐이더를 사용할 필요가 없습니다. 그것은 현대 OpenGL에 접근하는 가장 좋은 방법은 아닙니다.하지만 기존 코드베이스를 다루는 경우 이것이 유일한 전환 옵션 일 수 있습니다. 이것이 호환성 프로파일이 디자인 한 것이며 업그레이드 프로세스가 쉬워집니다. –
@ 제이 : 저는 Qt 전문가가 아니지만 [QOpenGLFunctions_3_2_Compatibility'] (http://qt-project.org/doc/qt-5.1/qtgui/qopenglfunctions-3-3)를 찾으려면 몇 초 밖에 걸리지 않았습니다. 2-compatibility.html)을 참조하십시오. 이것은 당신이 사용하기를 원하는 것입니다. 이것을 사용하면 EXT 접미어가없는'glSecondaryColorPointer (...) '에 액세스 할 수 있습니다. OpenGL 3.2와 호환되며 확장이 필요 없기 때문입니다. –