Autor Wątek: Jak pobrać wskaźniki funkcji z rozszerzeń OpenGL?  (Przeczytany 1773 razy)

Offline NPS

  • Użytkownik

# Wrzesień 24, 2009, 13:49:04
Najwyraźniej nie umiem szukać, ale już od wczoraj szukam na google jakiegoś kompletnego przykładu, jak zdobyć i użyć wskaźnika do jakiejś funkcji z rozszerzenia OpenGL, ale bezowocnie. Możecie mi pomóc? Konkretnie chciałbym umieć użyć shaderów w programie.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Esidar

  • Użytkownik

# Wrzesień 24, 2009, 13:53:06

Offline Kuba D.

  • Użytkownik

# Wrzesień 24, 2009, 13:53:59
Dla ułatwienia sobie sprawy używaj GLEE lub GLEW. I nie będziesz musiał zawracać sobie głowy rozszerzeniami.

Offline .:NOXY:.

  • Użytkownik
    • Profil

# Wrzesień 24, 2009, 14:01:20
a ja bede gnojem ktorego wnerwia ciagle odsylanie ludzi do Google.pl mendrcy siwata sie znalezli tak was boli mu pokazac jakto sie robi? :]

prosze o to pelny kod ladowania rozszerzen z OGL:

np:// tutaj zawarte jak zaladowac pare rozszerzen textur, VBO , FBO itp
glee to osobna biblioteka do ladowania rozszerzen karty mozna sciagnac z internetu bardzo fajne ale nie ze wszystkim dziala

link do kodu: www.noxy.ovh.org/temp/extensionload.zip



Offline skoti

  • Użytkownik

# Wrzesień 24, 2009, 14:45:11
Najwyraźniej nie umiem szukać, ale już od wczoraj szukam na google jakiegoś kompletnego przykładu, jak zdobyć i użyć wskaźnika do jakiejś funkcji z rozszerzenia OpenGL, ale bezowocnie. Możecie mi pomóc? Konkretnie chciałbym umieć użyć shaderów w programie.
Ręcznie w Windowsie lub SDL np.:
glBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC) wglGetProcAddress("glBindRenderbufferEXT");
lub
glBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC) SDL_GL_GetProcAddress("glBindRenderbufferEXT");
glBindRenderbufferEXT to nazwa funkcji PFNGLBINDRENDERBUFFEREXTPROC to typ, który sobie znajdziesz w glext.h
Jeśli nie chcesz pobierać ręcznie to GLEW.

Offline Avaj

  • Użytkownik

# Wrzesień 24, 2009, 14:52:59
Najwyraźniej nie umiem szukać, ale już od wczoraj szukam na google jakiegoś kompletnego przykładu, jak zdobyć i użyć wskaźnika do jakiejś funkcji z rozszerzenia OpenGL, ale bezowocnie. Możecie mi pomóc? Konkretnie chciałbym umieć użyć shaderów w programie.
Ręcznie w Windowsie lub SDL np.:
glBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC) wglGetProcAddress("glBindRenderbufferEXT");
lub
glBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC) SDL_GL_GetProcAddress("glBindRenderbufferEXT");
glBindRenderbufferEXT to nazwa funkcji PFNGLBINDRENDERBUFFEREXTPROC to typ, który sobie znajdziesz w glext.h
Jeśli nie chcesz pobierać ręcznie to GLEW.
I jeśli robisz to ręcznie to upewnij się, że GetProcAddress jest uruchamiane już po utworzeniu kontekstu OGLa :)

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Wrzesień 24, 2009, 14:53:23
Alternatywnie: AllegroGL. :)

Offline skoti

  • Użytkownik

# Wrzesień 24, 2009, 15:06:30
I jeśli robisz to ręcznie to upewnij się, że GetProcAddress jest uruchamiane już po utworzeniu kontekstu OGLa :)
Jeśli dobrze pamiętam to jak automatycznie (glewInit()) to też trzeba się upewnić ;p.

Offline Avaj

  • Użytkownik

# Wrzesień 24, 2009, 15:18:16
I jeśli robisz to ręcznie to upewnij się, że GetProcAddress jest uruchamiane już po utworzeniu kontekstu OGLa :)
Jeśli dobrze pamiętam to jak automatycznie (glewInit()) to też trzeba się upewnić ;p.
glee sam wie kiedy się inicjalizować, ale można też wymusić

Offline NPS

  • Użytkownik

# Wrzesień 24, 2009, 15:32:50
Dziękuję za pomoc. Wszystkim z wyjątkiem Esidara. :P

Kontekst OpenGL to HGLRC?

wine

  • Gość
# Wrzesień 24, 2009, 15:42:00
Kontekst OpenGL to HGLRC?
Tak.

Offline Avaj

  • Użytkownik

# Wrzesień 24, 2009, 15:51:26
Dziękuję za pomoc. Wszystkim z wyjątkiem Esidara. :P

Kontekst OpenGL to HGLRC?
Co jak co, ale GLEW/GLee to jest naprawdę dobry pomysł ;P

Offline NPS

  • Użytkownik

# Wrzesień 24, 2009, 16:00:23
Jeśli dobrze zrozumiałem, to jedyna różnica (w uproszczeniu między np. OGL 1.1 a 3.0) to dodanie tylu linijek kodu, z ilu funkcji z rozszerzeń chcę korzystać, i to tyle? 1 - Czy dobrze zrozumiałem? 2 - Jeśli dobrze zrozumiałem, to co mi daje GLEW/GLEE? Te parę linijek kodu mniej? Czy coś jeszcze?

Offline Kuba D.

  • Użytkownik

# Wrzesień 24, 2009, 16:08:59
Przy GLEW piszesz podczas inicjalizacji openGL tylko glewInit() i już masz wszystkie rozszerzenia dostępne i nie musisz samemu pobierać wskaźników itp.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Wrzesień 24, 2009, 16:18:14
Cytuj
Jeśli dobrze zrozumiałem, to jedyna różnica (w uproszczeniu między np. OGL 1.1 a 3.0) to dodanie tylu linijek kodu, z ilu funkcji z rozszerzeń chcę korzystać, i to tyle?
Pod Windowsem funkcje OpenGL wyższego niż 1.1 musisz ładować identycznie jak rozszerzenia. Powinieneś dodatkowo wziąć pod uwagę fakt, że funkcje pojawiają się jako rozszerzenie dużo wcześniej, niż pojawiają się w "numerowanym" OpenGL, więc sprzęt może obsługiwać wszystko czego potrzebujesz, ale może z jakichś innych względów nie mieć odpowiedniego numerka OpenGL.