AGL unter Carbon

Dieses Thema im Forum "Mac OS X Entwickler, Programmierer" wurde erstellt von Einfachkrank, 23.08.2005.

  1. Einfachkrank

    Einfachkrank Thread Starter MacUser Mitglied

    Beiträge:
    27
    Zustimmungen:
    0
    MacUser seit:
    12.06.2005
    Moin,

    ich hab ein Beispiel zu AGL unter Carbon gefunden und ausprobiert, welches prinzipiell funktioniert, nur das Anwendungsfenster ist irgendwie passiv geschaltet. Man kann es nicht verschieben, ist nie im Vordergrund und reagiert auf keine Tastatureingabe...
    Hier mein Code:
    Code:
    int main(void)
    {
    	SetRect(&bounds, 10, 50, width, height);
    	
    	win = NewWindow(NULL, &bounds, "\pMyAGLWindow", true, documentProc, NULL, true, 0);
    	
    	ShowWindow(win);
    	
    	GLint attrib[] = {AGL_DEPTH_SIZE, 16, AGL_RGBA, AGL_DOUBLEBUFFER, AGL_NONE };
    	
    	fmt = aglChoosePixelFormat(NULL, 0, attrib);
    	
    	if(!fmt) return 0;
    	
    	ctx = aglCreateContext(fmt, NULL);
    	
    	if(!ctx) return 0;
    	
    	if(!aglSetDrawable(ctx, (AGLDrawable)GetWindowPort(win))) return 0;
    	
    	if(!aglSetCurrentContext(ctx)) return 0;
    	
    	aglDestroyPixelFormat(fmt);
    	
    	aglEnable(ctx, AGL_SWAP_INTERVAL);
    	
    	long interval = 1;
    	
    	aglSetInteger(ctx, AGL_SWAP_INTERVAL, &interval);
    	
    	InitGL();
    	
    	
    	while(!isDone)
    	{
    		if(WaitNextEvent(everyEvent, &event, 0, NULL))
    		{
    			switch(event.what)
    			{
    			case updateEvt:
    				BeginUpdate((WindowPtr)event.message);
    				EndUpdate((WindowPtr)event.message);
    				break;
    				
    			case keyDown:
    			case autoKey:
    				switch(event.message & charCodeMask)
    				{
    				case 'q':
    					if(event.modifiers & cmdKey)
    						isDone = true;
    					break;
    					
    				default: break;
    				} break;
    				
    			case mouseDown:
    				break;
    				
    			case mouseUp:
    				break;
    			
    			default: break;
    			}
    		}	
    		
    		Render();
    	}
    	
    	
    	aglSetCurrentContext(ctx);	
    	aglSetDrawable(ctx, NULL);
    	aglDestroyContext(ctx);
    	
    	DisposeWindow(win);
    
    	return 0;
    }
    
    Habt ihr Tipps für mich dazu?

    Dann hab ich noch eine weiter Frage: Gibt es ein spezielles Input System, mit dem arbeiten kann? Unter Windows habe ich immer mit DirectInput von DirectX für meine Minispiele gearbeitet...

    MfG Einfachkrank
     
  2. Theome

    Theome MacUser Mitglied

    Beiträge:
    55
    Zustimmungen:
    3
    MacUser seit:
    03.09.2004
    Zur weiteren Frage:

    Sieh dir mal GLUT an. Das bietet dir ein sehr einfach zu handhabendes OpenGL-Fenster und schöne Funktionen zur Abfrage von Maus- und Tastatureingaben. Eignet sich prima um OpenGL zu lernen, zu vertiefen oder kleine Tools und Spiele zu schreiben.

    Mit Google lassen sich recht schnell Beispiele finden, ich empfehle dir, auch auf der ADC-seite oder im lokalen Developer-Verzeichnis nachzusehen, sowie auf nehe.gamedev.net (links die opengl-tutorials)
     
  3. Einfachkrank

    Einfachkrank Thread Starter MacUser Mitglied

    Beiträge:
    27
    Zustimmungen:
    0
    MacUser seit:
    12.06.2005
    Ja, GLUT kenn ich schon... OpenGL hab ich schon drauf ;-)

    Hab vorher unter Windows mit VC++ DirectX, OpenGL, SDL, FMOD, GLUT, OpenAL programmiert und hab schon ein zwei kleine Spielchen geschrieben. Geht jetzt nur drum, auf Mac umzusteigen...

    Suche halt direkten Ersatz für DirectInput und möchte meine Anwendungen auch schön übersichtlich halten - in Windows hab ich es gehasst mit MFC zu arbeiten und hab auch immer alles "per Hand" initialisiert...

    Und wie gesagt, das passive Fenster muss lebendig werden ;-) ...
     
  4. oneOeight

    oneOeight MacUser Mitglied

    Beiträge:
    46.831
    Zustimmungen:
    3.633
    MacUser seit:
    23.11.2004
    dazu musst du wohl in deinem event loop das entsprechende handling rein proggen...

    oder mach halt mit dem fenster einen dialog, damit das OS das handling übernimmt...
     
  5. Theome

    Theome MacUser Mitglied

    Beiträge:
    55
    Zustimmungen:
    3
    MacUser seit:
    03.09.2004
    Wenn du gerade auf den Mac umsteigst, warum nimmst du dann nicht ein Cocoa-Fenster, packst ein NSOpenGLView rein und lässt Cocoa auch das ganze Event Handling übernehmen?

    Konkret erstellst du eine Subclass von NSOpenGLView und überschreibst darin die Methoden
    -(void)keyDown:(NSEvent *)theEvent
    -(void)mouseDown:(NSEvent *)theEvent
    -(void)mouseMoved:(NSEvent *)theEvent
    usw. Ist ziemlich leicht und du musst nicht selbst event-loops schreiben.
     
  6. pdr2002

    pdr2002 MacUser Mitglied

    Beiträge:
    6.937
    Zustimmungen:
    239
    MacUser seit:
    28.01.2004
    Vielleicht, weil er erst offensichtlich ziemlich fit ist in C++ und überhaupt ersteinmal ins Mac-Programmieren reinkommen will? :rolleyes:
     
  7. pdr2002

    pdr2002 MacUser Mitglied

    Beiträge:
    6.937
    Zustimmungen:
    239
    MacUser seit:
    28.01.2004
    Vielleicht kann Dir sonst auch hier weitergeholfen werden. :cool:
     
  8. Theome

    Theome MacUser Mitglied

    Beiträge:
    55
    Zustimmungen:
    3
    MacUser seit:
    03.09.2004
    Warum verdrehst denn da gleich die Augen... es ist doch wirklich nicht schwer sich in die Syntax von Objective-C reinzulesen wenn man C++ beherrscht?
     
  9. oneOeight

    oneOeight MacUser Mitglied

    Beiträge:
    46.831
    Zustimmungen:
    3.633
    MacUser seit:
    23.11.2004
    also ich finde es ist gerade schwer, wenn man vorher C/C++ gemacht hat ;)
     
  10. Einfachkrank

    Einfachkrank Thread Starter MacUser Mitglied

    Beiträge:
    27
    Zustimmungen:
    0
    MacUser seit:
    12.06.2005
    Ja, das ist eigentlich genau der Grund, warum mir Carbon sympathischer war als Cocoa... hab kein Plan von Objective-C
    Und in mein C++ bin ich noch schwer verliebt und sehe grad keinen Grund, warum ich diese Beziehung aufgeben sollte :)

    @oneOeight
    Wie läuft das genau mit dem Handling?
     
    Zuletzt bearbeitet: 26.08.2005

Diese Seite empfehlen