4

私は OpenGL のチュートリアルに従っています (WebGL チュートリアルはまれであるため)。ここでは、複数のパラメーターに次の構文を使用します。

#version 330

layout (location = 0) in vec4 position;
layout (location = 1) in vec4 color;

smooth out vec4 theColor;

void main()
{
    gl_Position = position;
    theColor = color;
}

しかし、このlayout (location = #)構文は WebGL では機能しません。これに代わるものは何ですか?

4

1 に答える 1

10

このシェーダーを WebGL で使用する場合、いくつかの問題があります。

まず、WebGL は、120 から派生した GLSL のバージョンを使用する OpenGL ES 2.0 に基づいています。

あなたの#versionディレクティブは WebGL では無効です。inout、またはsmoothを頂点属性または可変変数に使用することはできません。レイアウト修飾子はありません。


これにより、シェーダーを修正する方法の一部が得られます。

#version 100

attribute vec4 position;
attribute vec4 color;

varying vec4 theColor;

void main()
{
    gl_Position = position;
    theColor    = color;
}

positionただし、コードのおよびコード内で属性の場所をバインドする必要もありcolorます (シェーダーをリンクする前に - を参照してくださいglBindAttribLocation (...))。WebGL / ESSL のチュートリアルが見つからない場合は、GLSL バージョン 120 以前用に作成された多くの OpenGL チュートリアルを再利用できます。

OpenGL ES 2.0 の GLSL (ESSL) の公式仕様は、こちらで読むことができます。少なくとも、導入セクションには多くの有用な情報が含まれているため、参照してください。

于 2013-09-14T01:35:39.983 に答える