Come si progetterà un layer generico per finestre OpenGL a cui non interessa come appare il programma sottostante?

2

Il tipo di finestre OpenGL a cui mi riferisco è come GLFW, GLUT, SDL, ecc.

Immagina tre programmi C ++: (ignora la sintassi)

Gioco A:

class Game
    resize()
    keyEvent()

Gioco B:

resize()
keyEvent()

Gioco C:

class Key
    event()
class Display
    resize()

In A, tutto è in una classe, in B niente è in una classe, e in C i due eventi hanno le loro classi. Un altro che non viene mostrato è la sottoclasse di una classe "Game" fornita che ha sovraccarico le funzioni predefinite.

Mi piacerebbe qualsiasi mezzo ragionevole che permetta alla libreria principale di delegare a ciascuno di questi tre casi. La soluzione non dovrebbe richiedere la memorizzazione separata di un parametro "this".

Ho pensato ad un paio di idee, una è un modo di mappare la funzione in un funtore. Un altro era lambda. Lambdas non va bene, perché non sono ancora ampiamente implementati. (I compilatori di scelta sono VC 2010, gcc (ultima versione stabile) e il clang di Apple).

Qualsiasi nuova funzionalità di C ++ 2011 ampiamente implementata è ragionevole.

Un signore dell'università locale ha suggerito qualcosa di simile al funtore, ma non ricordo la funzione di cui stava parlando.

    
posta Jeffrey Drake 05.10.2011 - 00:58
fonte

2 risposte

2

I have thought of a couple of ideas, one is a way of mapping the function in a functor.

std::function - > problema risolto. Se hai un compilatore che non supporta std::function , usa boost::function . Lambdas non ha nulla a che fare con questo, se stai usando un compilatore che li supporta, puoi farlo, altrimenti usa boost::bind .

    
risposta data 01.01.2012 - 19:30
fonte
0

Non è molto chiaro quale sia la tua vera intenzione. Tuttavia, descrivendoti in base ad alcune ipotesi.

Prima di pensare a un metodo, devi definire l'astrazione degli oggetti principali, come Windows, le superfici, la tela e il livello del dispositivo che eseguono il rendering. Credo che anche gli input (come tastiera e mouse) siano oggetti. Una buona parte del lavoro è rappresentata dall'hardware - e mentre molti stanno tentando di farlo, non è quella cosa universale.

Se vuoi creare un framework di tipo GUI piuttosto che ci saranno gerarchie di oggetti intere come pulsanti ed elementi di form ecc. Se intendi fare questo per la classe di rendering (a cui in realtà si intende openGL) hai rappresentazioni di livello superiore di Square and Triangles e come disegnare Textures su di loro!

Una volta risolto questo problema, devi definire il loro comportamento degli input e degli output che prenderanno e definire quali altri oggetti gestiranno usando l'altra API.

    
risposta data 02.11.2011 - 18:10
fonte

Leggi altre domande sui tag