Che cosa è l’estensione corretta per GLSL shaders?

Sto imparando glsl ombreggiatura e mi sono imbattuto in diversi formati di file. Ho visto persone che danno il loro vertex e fragment shader .vert e .frag estensioni. Ma ho anche visto .vsh e .fsh estensioni, e anche entrambi gli shader insieme in un unico .glsl file. Quindi mi chiedo se c’è un formato di file standard, oppure qual è il ‘corretto’ uno?

  • Per quanto ne so, non hanno “corretto” estensioni, come OpenGL non leggere dal disco comunque.
  • Alcune persone li chiamano .vs e .fs (ed .gs) per rendere esplicito ciò che è all’interno. Ma come zneak detto, non importa, non c’è “corretto” cosa.
  • GEdit utilizza .glslv e .glslf quando si sceglie l’evidenziazione della sintassi. È l’unico posto dove ho visto dove è importante.
InformationsquelleAutor Samssonart | 2011-06-21

 

6 Replies
  1. 83

    Non c’è estensione di file standard per GLSL shaders. I più comuni sono probabilmente .vert e .frag, in quanto queste sono le estensioni 3D Labs utilizzato in alcuni dei loro strumenti. Ma che è su di esso per qualsiasi forma di estensione standard.

    • Non credo .vert|.frag sono buoni nomi delle estensioni per gli shader. L’estensione è qualcosa che identifica la classe generale di un file. Essi dovrebbero probabilmente hanno chiamato loro vertice.glsl e frammento.glsl.
    • Sono rimasto sorpreso troppo, ma non c’è una leggera differenza di sintassi tra vertex e fragment shader, @SandeepDatta? Nello stesso modo che .h e .c potrebbe condividere molte cose in comune, ma sono utilizzati in modi diversi.
    • vs .cpp? .h vs .c? Ci sono più di sintassi e semantica differenze tra vertex e fragment shader che ci sono tra intestazione C/C++ e file di origine.
    • Nemmeno a parlare .cc
    • GLSLang, noto anche come il GLSL di Riferimento Parser o Riferimento del Compilatore, è uno degli strumenti sviluppati da 3Dlabs. È elencato come un SDK strumento sia opengl.org e khronos.org. FILE elenco delle estensioni di file che si aspetta per i file shader: .vert (vertex), .frag (frammento), .tesc (mosaico di controllo), .tese (mosaico di valutazione), .geom (geometria), .comp (di calcolo).
    • Sarebbe bello includere il commento di @TachyonVortex la risposta, quindi abbiamo tutto ciò che informazioni utili proprio qui.

  2. 83

    Non c’è nessuna estensione ufficiale di spec. OpenGL non gestire il caricamento shader da file; basta passare il codice shader come una stringa, quindi non c’è il formato di file specifico.

    Tuttavia, glslang, Khronos di riferimento GLSL compilatore/validator, utilizza le seguenti estensioni per determinare che tipo di shader che il file è per:

    • .vert – un vertex shader
    • .tesc – un mosaico di controllo shader
    • .tese – un mosaico di valutazione shader
    • .geom – un geometry shader
    • .frag – un fragment shader
    • .comp – un compute shader
  3. 17

    Identificazione del tipo di file per estensione, è una cosa specifica per Windows. Tutti gli altri sistemi operativi utilizzano diversi approcci: MacOS X memorizza il tipo di file in una speciale struttura dei metadati nel file di sistema non valide. La maggior parte *nixes identificare i file prova la propria struttura interna contro un database di noto “magie byte”; tuttavia editor di testo usare l’estensione.

    Comunque, GLSL fonti sono proprio come qualsiasi altro programma di file di origine: testo normale, e che il loro tipo di file.

    L’estensione che si può scegliere come si desidera. Io uso la seguente denominazione:

    • ts.glsl
    • gs.glsl
    • vs glsl
    • fs.glsl

    ma la mia scelta e tecnicamente i miei programmi non imporre una qualsiasi denominazione o schema di ampliamento. La denominazione è per gli utenti di leggere e di sapere che cosa è in esso; avere un comune più importante estensione richiede una sintassi highlighing regola per estensione di un solo set.

    • Downvoted perché OS X è stato principalmente mediante l’estensione del file per anni.
    • No, non è così. MacOS X è un sistema Unix e le estensioni dei file non sono mai stati usati non per l’identificazione di cosa. Sì, standard tipi di standard estensioni di file, ma solo un essere umano leggibilità cosa. Forse il Finder può contare su estensioni di file come euristica per alcuni tipi. Ma se è in grado di identificare un file solo dalla sua intestazione o un po ‘ di magia byte, saranno usate. Come qualsiasi Unix sistema.
    • +1 ho un nome per loro come effetto-nome-fs.glsl o effetto-nome-vs glsl.
    • Mi rendo conto che sono due anni di ritardo per l’OS X argomento, ma ho sentito che dovrebbe gettare i miei due centesimi. Tutto quanto sopra il layer UNIX utilizza LaunchServices per determinare le associazioni di file. Ogni file ha un identificatore del tipo come com.stackoverflow.file, che viene memorizzato come metadati. LaunchServices prova a indovinare dal tipo MIME prima, se i metadati esiste. Se non sarà per l’estensione. Se non può competere con essa, cerca un HFS creatore di codice. Se non c’è, si dà in su. LaunchServices mai tenta di identificare un file di intestazione o di magia byte.
    • Questo significa che il modo più comune per determinare il tipo di un file su OS X è la sua estensione. Questo è solo per lo scopo di identificare l’applicazione che deve essere utilizzato per aprire il file, però. Una volta che l’applicazione si apre il file, si può decidere da sé ciò che si vuole fare con esso, anche se l’estensione è corretta per il tipo di contenuto.
    • Grazie per la spiegazione, che spiegherà come macOS può dire la differenza tra un file PDF e documenti di Adobe Illustrator, quando sono in definitiva la stessa di formato…

  4. 7

    Come altri hanno detto non c’è una risposta corretta in senso stretto. Porta di ricordare che Sublime (confermato per v2 e v3) si aspetta anche .vert e .frag per l’evidenziazione della sintassi e la convalida.

    • Credo che questo è vero solo se si dispone di un GLSL libreria installata nel Sublime, ad esempio github.com/WebGLTools/GL-Shader-Validator – il mio difetto Sublime non riconosce le estensioni.
    • Il lib hai linkato è di gran lunga il più popolare (e forse unico?) GLSL lib per il sublime, e l’ho chiamato quello che prevede che la stessa cosa sublime si aspetta. Se si chiama un esagerazione io ti dichiaro colpevole. Ma sì, hai ragione, almeno per quanto sublime che come un buon editor di testo, aprire un qualsiasi testo doc ignorando le estensioni di non conoscere.
    • Oggi sublime-glsl (github.com/euler0/sublime-glsl) è il più popolare GLSL plugin e accetta le seguenti estensioni: vs, fs, gs, vsh, fsh, gsh, vshader, fshader, gshader, vert, frag, geom, tesc, tese, comp, glsl. Quindi c’è una grande varietà tra cui scegliere 🙂
  5. -1

    Ci sono due modi di scrivere shader.

    È possibile memorizzare i vertex shader e fragment shader contenuto in un char * variabile e di compilazione, link e collegare lo shader per un programma.

    Un altro modo è quello di scrivere separata vertex e fragment shader file con qualsiasi estensione e di leggerlo per la compilazione, link e collegare lo shader per il programma.

    Così la convenzione di denominazione, come .vert/.frag, .vsdr/.fsdr, etc. sono tutti validi, come lungo come lei sa come leggerlo…

  6. -2

    Come è già stato trattato da più risposte, non c’è uno standard; spetta a voi di adottare l’approccio che è il più utile per lei.

    Riesco a vedere il vantaggio nell’utilizzo di specifiche per il tipo di shader estensioni, ma la mia preferenza è quella di utilizzare il .glsl estensione per tutti i tipi di shader, poiché è necessario definire le modalità di shell utilizza il file una volta.

    Allo stesso modo, questa è anche una buona opzione se si modifica il tuo shader file in Notepad++, dato che è possibile configurarlo per applicare automaticamente la lingua specifica evidenziazione della sintassi per tutti i tuoi file shader specificando solo un file con estensione.

    Lo svantaggio di questo approccio è che è necessario utilizzare la propria convenzione di denominazione per determinare il tipo di shader da il nome del file ma, per me, i benefici superano i costi.

Lascia un commento