2013-07-23 31 views
22

OK, więc już wiem, dlaczego potrzebuję GLEW, ale tylko do pewnego momentu.Co robi GLEW i dlaczego go potrzebuję?

Jeśli używam nowoczesnych rzeczy OpenGL, prawdopodobnie od wersji 3.0 i/lub używam Profilu rdzenia, wtedy GLEW jest wymagany, ponieważ bez tego kompilacja spowodowała błąd, taki jak glGenVertexArrays nie został zadeklarowany.

Tak więc GLEW wykonuje pewną pracę w tle, w tym nowoczesne funkcje OpenGL, z których chcielibyśmy skorzystać.

Niezależnie od tego, robi on coś jeszcze? A także, jak to działa.

Na przykład, czy ulepsza kompilację między platformami? (Wymagaj mniejszej modyfikacji kodu, jeśli na przykład przejście z Linuksa na Windows lub OS X?

Czy ulepszyło to również "wieloplatformowość" sprzętu graficznego? Na przykład, mamy dwa identyczne komputery, w tym OS: Program jest kompilowany za pomocą poleceń OpenGL 4.3 w jednym systemie.Jeśli drugi system ma kartę graficzną lub sterownik obsługujący tylko OpenGL 3.3, czy GLEW może w tym pomóc? (Kompilowanie shaderów dla starszej wersji OpenGL, być może?)

więc prawdopodobnie można zobaczyć, że w rzeczywistości nie wie, co czyni GLEW lub jak to robi

ostatni punkt;.? czy ktoś wie, jak używać GLEW z GLFW mogę zakładać, że jako oddzielny kwes w rzeczywistości.

Odpowiedz

11

GLEW nie jest "wymagany", jak to określasz. Możesz użyć nagłówka glcorearb.h lub czegoś podobnego. Jednak jeśli łączysz się z jakąś funkcją - musi istnieć na platformie docelowej lub twój program nie uruchomiłby się. GLEW i inne dokładnie to obsługują - nie łączysz się bezpośrednio z funkcjami GL, ale zamiast tego uzyskujesz wskaźniki funkcji po fazie inicjalizacji. Pozwala sprawdzić w czasie wykonywania, które rozszerzenia są obecne i jakie funkcje mogą być używane.

Jedyną rzeczą, która pomaga w przenoszeniu, jest uzyskiwanie wskaźników funkcyjnych - może to być wglGetProcAddress/glxGetProcAddress, a to jest analogowe dla systemów Apple OS. Więc nie, to nie przypadek. Jednak różnorodność dostępnych rozszerzeń GL jest.

GLEW nie wymaga punktów kontaktu z preferowaną biblioteką inicjalizacyjną GL - wystarczy wywołać glewInit po utworzeniu kontekstu GL.

+0

Jeśli utworzę okno, a następnie zadzwonię do glewInit(), otrzymam błąd segfault? – user3728501

+0

@EdwardBird: Czy utworzyłeś kontekst OpenGL w tym oknie? Czy kontekst OpenGL jest aktywny podczas wywoływania glewInit? – datenwolf

+0

Tak, zrobiłem, ale naprawiłem problem teraz - dzięki i tak (: – user3728501

5

Aby poprawnie startowych glew kontekst OpenGL muszą być tworzone iwglMakeCurrent() musi być wywołana przed wywołaniem glewInit();

chciałbym umieścić to w komentarzach odpowiedzi keltar, ale nie widzę w jaki sposób.

+0

Dzięki za dodanie - przegłosowano – user3728501