Posiadałem kod 3D, który, jak zauważyłem, nie wyświetlał się w ścisłym profilu podstawowym, ale dobrze w "normalnym" (nie jawnie żądanym as-core-only) kontekście profilu. Aby wyizolować problem, napisałem najmniejszej najprostszy rysunek programowanego OpenGL tylko trójkąt i prostokąt:Jak zrobić ten prosty kod OpenGL (działa w "łagodnym" profilu 3.3 i 4.2) działa w ścisłym profilu podstawowym 3.2 i 4.2?
Pisałem, że OpenGL programu as a Gist here.
Z useStrictCoreProfile zmiennej ustawiona na false, program wyświetla żadnych komunikatów o błędach do konsoli i rysuje quad i trójkąt jak na powyższym zrzucie ekranu, zarówno na Intel HD OpenGL 3.3 oraz GeForce z OpenGL 4.2 .
Jednak, z useStrictCoreProfile wartość true, to usuwa kolor tła, ale nie wyciągnąć tri & quad, wyjście konsoli to:
GLCONN: OpenGL 3.2.0 @ NVIDIA Corporation GeForce GT 640M LE/PCIe/SSE2 (GLSL: 1.50 NVIDIA via Cg compiler)
LASTERR: OpenGL error at step 'render.VertexAttribPointer()': GL_INVALID_OPERATION
LASTERR: OpenGL error at step 'render.DrawArrays()': GL_INVALID_OPERATION
LASTERR: OpenGL error at step 'render.VertexAttribPointer()': GL_INVALID_OPERATION
LASTERR: OpenGL error at step 'render.DrawArrays()': GL_INVALID_OPERATION
LASTERR: OpenGL error at step '(post loop)': GL_INVALID_OPERATION
EXIT
... jeśli o 4,2 ścisłym rdzeniu profil jest wymagany zamiast 3.2, ten sam problem. Dotyczy 3 różnych procesorów graficznych nvidia, więc zakładam, że nie pasuję do ścisłego profilu rdzenia. Co robiłem źle i jak mogę to naprawić?
Uwaga, nie znajdzie glEnableVertexAttribArray połączenia w powyższym Gist, jak to inside the glutil package jestem importowania - ale to nie nazywa się jako ostatni krok w GIST za compileShaders() func.
Czy próbowałeś używając rozszerzenia GL_ARB_debug_output aby uzyskać bardziej użyteczne niż komunikaty o błędach „GL_INVALID_OPERATION”? To trochę kłopotliwe w konfiguracji, ale absolutnie tego warte. – postgoodism
+1 za udostępnienie przykładu najmniejszego, najprostszego możliwego programu OpenGL dla Go – ANisus
Cóż uczciwie, to nie * tak naprawdę * "najmniejszy najprostszy możliwy program OpenGL dla Go", by być sprawiedliwym ... można by go wyciąć ;) – metaleap