Skocz do zawartości

Zablokowane Dynamic-Link Library OpenGL do Game maker


DRIVER3x2

Rekomendowane odpowiedzi

Witam serdecznie,

Od jakiegoś czasu czę się OpenGL i przy okazji pomagam koledze przy tworzeniu gry w Game Makerze, chciałbym w tym wykorzystać wiedzę którą posiadam o OpenGL.

Najchętniej bym to zrobił korzystając z bibliotek .dll (pisząc bibliotekę w c++ kompilować do .dll i używać funkcji z tej biblioteki z użyciem Game Makera)

Ale niestety nie wiem jak się za to zabrać, potrafię tworzyć biblioteki .dll dla Game Maker bo już kilka zrobiłem, lecz nie używałem nigdy do tego OpenGL.

Uprzejmie proszę Was żebyście mi pokazali jakiś malutki przykład np. wyświetlenie jakiegoś kwadratu 2D. Kod źródłowy biblioteki .dll i w którym miejscu użyć funkcji z biblioteki w Game Makerze.

 

Pozdrawiam

Odnośnik do komentarza
Udostępnij na innych stronach

Dziękuje Konrad za odpowiedź lecz jak dla mnie jest ona zbyt ogólna.

Szczeże mówiąc spodziewałem się że szybko ktoś mi pomożę bo na forum wiem że kilka osób korzysta z takich rozwiązań.

Może żeby było prościej pokaże wam jak ja to robię i proszę o wskazanie błędów:

Przykładowy kod źródłowy .dll (tworzenie kwadratu):

 

     #include "dll.h"
     #include <windows.h>     
     #include <gl\gl.h>           
     #include <gl\glu.h>           
     #include <gl\glaux.h>        
     #define export extern "C" __declspec(dllexport)

     export char *Fquads(void)                                    
     {
         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);   
         glLoadIdentity();                                    
         glTranslatef(-1.5f,0.0f,-6.0f);
         
         glBegin(GL_QUADS);
             glVertex3f(-1.0f, 1.0f, 0.0f);         // górny lewy
             glVertex3f( 1.0f, 1.0f, 0.0f);         // górny prawy
             glVertex3f( 1.0f,-1.0f, 0.0f);         // dolny prawy
             glVertex3f(-1.0f,-1.0f, 0.0f);         // dolny lewy    
         glEnd();
     }

 

Kod wywołania w Game Maker w "ciele" obiektu:

GML
Fquads = external_define( 'Projekt1.dll', 'Fquads', dll_stdcall, ty_string, 0);

external_call(Fquads);

external_free('Projekt1.dll')

Proszę o szybką analize :)

Odnośnik do komentarza
Udostępnij na innych stronach

1. Tworzysz kontekst OpenGL dla okna GM (pobierając jego uchwyt funkcją: window_handle()), odpowiedni pixel format oraz render target po którym będzie rysować. Dodatkowo wywołujesz: set_automatic_draw(false)

2. ładujesz rozszerzenia (bo na nich bazują zaawansowane opcje OpenGL), o ile z nich korzystasz.

3. Rysujesz co chcesz i zamieniasz bufory (SwapBuffer)

4. Zwalniasz render target oraz kontekst OpenGL

 

Poza tym broń boże przed tym typem char* który tam dałeś, liczby zwracaj jako double, tekst jako char*, a gdy nic nie zwracasz to i tak dla bezpieczeństwa daj double.

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...