Ho cercato il problema che ho e non riesco a capirlo abbastanza bene da risolverlo, quindi ho pensato che avrei potuto buttarlo lì e il gruppo intelligente potrebbe avere qualche idea . : PGLKit's GLKBaseEffect e shader personalizzati
Fondamentalmente ho lavorato su un progetto iPhone per un po ', dove ho il lusso di usare tutti i più recenti framework e target 5.1. Quindi ho usato GLKit e GLKBaseEffect che funzionano bene per me. Il motivo per cui ho iniziato con GLKBaseEffect piuttosto che scrivere i miei shader è che non lo so bene. Tuttavia i requisiti sono diventati più precisi e l'effetto base non sembra più interromperlo.
Dato che sto già facendo tutte le mie trasformazioni usando l'effetto di base, preferirei mantenere il mio effetto di base intatto ma aggiungere ombreggiatori di tipo glsl in alto se questo ha senso.
Il mio vecchio approccio ha un aspetto simile a questo (questo è in un ciclo che esegue il rendering di tutti gli oggetti, in cui un oggetto contiene cose come trasformazioni, una mesh e alcune altre cose meno importanti per questo problema, come trame, materiali e così via)
ObjectBase *obj = [ResourceManager.shared getObjectNamed:name inScene:sceneName];
GLKMatrix4 modelview = effect.transform.modelviewMatrix;
effect.transform.modelviewMatrix = GLKMatrix4Multiply(effect.transform.modelviewMatrix, obj.transform);
[effect prepareToDraw];
[obj render];
effect.transform.modelviewMatrix = modelView;
Qui recuperare un oggetto per rendere e trasformare (cioè traslare, ruotare e scala) l'oggetto allora rendiamo esso, dove la rendendosi recupera la maglia per l'oggetto, legano i buffer e rendere.
Fin qui tutto bene.
Quello che vorrei fare è che durante la chiamata [obj render];
vorrei che l'oggetto faccia anche qualcosa come glUseProgram(someProgram);
aggiungendo altro codice shader specializzato.
Immagino che si possa sostenere che sto cercando di usare l'effetto di base per i vertex shader e voglio usare shader "normali" per i miei shader di frammenti. Almeno questo è quello che penso di voler fare.
Ho provato alcune cose.
Ho provato a creare solo gli shader di frammenti e glUseProgram
su di esso, tuttavia ha detto che ho bisogno di un vertice e di uno shader di frammenti durante l'impostazione e la compilazione. Ho anche provato a creare uno shader vertex vuoto, che non è risultato molto buono, non so cosa succederà con questo, ma suppongo che prevale sull'effetto base.
Sono propenso a, alla fine, accettare che è probabilmente meglio gettare gli effetti di base e scrivere solo i miei stessi shader fino in fondo. Mi sembra che sia un sacco di lavoro fuori dalla finestra, quindi volevo vedere quanto posso risparmiare.
Capisco che la mia comprensione degli shader sia la parte che mi dà più problemi, quindi per favore sii paziente di questo fatto.
Mi sembra di aver completamente dimenticato di dire in realtà grazie ai link che hai fornito ho davvero ampliato la mia comprensione. Sono contento di averlo chiesto anche se, mentre chiedevo, sentivo che non avevo idea di cosa volessi veramente chiedere ... così buon lavoro a comprenderlo;) Grazie. – qrikko
Grazie mille. Ero frustrato dal fatto che i miei ombreggiatori stessero compilando e collegando, ma non emettendo nulla. Rimozione della chiamata il prepareToDraw ha fatto il trucco. La vita è bella! – VaporwareWolf