Skocz do zawartości

Zablokowane Dynamic-Link Library OpenGL do Game maker


Rekomendowane odpowiedzi

Opublikowano

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

Opublikowano

O ile mi wiadomo, jak i w DXie jest potrzebny uchwyt do okna. Można go uzyskać po przez window_handle(); ( w GM )

Z resztą powinieneś już sobie poradzić ;)

 

Btw. Musisz jeszcze dezaktywować rysowanie po przez GMa

Opublikowano

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 :)

Opublikowano

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.

Opublikowano
PsichiX a miał byś chwilkę żeby podać mi prosty przykład chociażby te rysowanie kwadratu, zajmie ci to chwileczkę a ja będę bardzo wdzięczny, bo niby rozumiem to co napisałeś, ale nie wiem co i gdzie. Proszę :)
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ę...