GLSL’de içeri / dışarı anahtar kelimeler


46

in/ outAnahtar sözcükleri GLSL’de nasıl kullanacağımı gerçekten anlamıyorum ve google uncharacteristically yararsızdır.

Tam olarak ne yaparlar? Örneğin, köşe başına gölgelendiriciye ayarlanmış değişken bir değişken iletmek istersem bunları nasıl kullanırım?

Kelimenin tam anlamıyla, bulduğum her eğitimde varying/ attributeanahtar sözcüklerini kullanıyor ve bu yardımcı olmuyor.

Yanıtlar:


65

Depolama niteleyicileri inve outaslında ve bunların yerini alan varyingve bunun yerini alan bir amacı vardır attribute. Bunlar değişkenler sırasıyla tanımlamak içinde koyar ve dışarı shader için koyar. Bakınız GLSL 4.2 referans kartı sayfa 7:

  • in: önceki aşamadan itibaren gölgelendiricinin bağlantısı
  • out: bir gölgelendiricinin bir sonraki aşamaya bağlanması
  • attribute: inköşe gölgelendiricisiyle aynı
  • varying: outköşe gölgelendiricisiyle aynı, inparça gölgelendiriciyle aynı (Not: Bunlar yukarıda belirtilen referans kartında yanlış çevrilmişlerdir.)

Yan notta, son ikisinin türünün kullanımdan kaldırılmış olduğu belirtilir: 4.2 çekirdek profilinde yoktur, yalnızca uyumluluk profilinde bulunurlar.


Tam olarak ne yaparlar?

Kullanımda, köşe gölgelendiriciyi An intro'dan modern OpenGL'ye götürün . Bölüm 2.2: Gölgelendiriciler :

#version 110

attribute vec2 position;    
varying vec2 texcoord;

void main()
{
    gl_Position = vec4(position, 0.0, 1.0);
    texcoord = position * vec2(0.5) + vec2(0.5);
}

4.2 çekirdekte şu şekilde yeniden yazılmalıdır:

#version 420

in vec2 position;    
out vec2 texcoord;

void main()
{
    gl_Position = vec4(position, 0.0, 1.0);
    texcoord = position * vec2(0.5) + vec2(0.5);
}

Yardımcı Olmayan Öğreticiler

Sanırım "modası geçmiş" eğitim kodunu bulmanızın ana nedeni, herkesin GLSL 3.3+ uyumlu donanıma erişimi olmamasıdır. Her şeye rağmen, daha iyi ve güncel bir eğitim için, Nicol Bolas'ın Modern 3D Grafik Programlarını Öğrenme Programına yönlendirebilirim .


2
@ NicoBolas Ha! Ben zaten bununla ilgili balık bir şey olduğunu düşündüm. O zaman referans kartında bir hata var. Teşekkürler! :-)
Eric
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.