古いです
孟
A
そこ態度
プログラマ
ユニフォーム
変数はGLSLユニフォームタイプ修飾子は、均一な変数定義された値を読み取り専用で、シェーダで変更することができない、唯一均一に塗布を通過することができます。
次のように均一な変数グローバル共有変数は、定義されたすべてのシェーダ、均一に取得することができます。
uniform float uTexPos;
均一な変数は、通常、GPU「定常領域」が格納されるメモリ領域が制限され、従って均一な限界の数があるが、複数の属性よりもはるかため、OpenGLのは、OpenGL ES 2.0 ISOは少なくとも128の頂点に均一な支持を所定所定16フラグメント(断片)均一。
頂点均一なコードの最大数をサポートしています次のとおりです。
fun getMaxVertexUniformNum(): Int {
var count = IntArray(1)
GLES20.glGetIntegerv(GLES20.GL_MAX_VERTEX_UNIFORM_VECTORS, count, 0)
return count[0]
}
次のようにコードがサポートされているセグメントの均一な最大の数を得ることです。
fun getMaxFragmentUniformNum(): Int {
var count = IntArray(1)
GLES20.glGetIntegerv(GLES20.GL_MAX_FRAGMENT_UNIFORM_VECTORS, count, 0)
return count[0]
}
均一な変数の値を設定します
次のように均一なプロパティハンドラのコードを取得します:
GLES20.glGetUniformLocation(programHandle, uniformName)
プログラムハンドルの代わりにprogramHandle、uniformNameは、均一な特性の名前です。
次のようにメソッドの設定値は、アンドロイドでより均一です。
GLES20.glUniform1f(location,x)
GLES20.glUniform2f(location,x,y)
GLES20.glUniform3f(location,x,y,z)
GLES20.glUniform4f(location,x,y,z,w)
セットfloat型のデータ、位置はX、Y、Z、値wは、パラメータ(X)/(X、Y)/(X、Y、Z)/(X、Y、Zに続いて、ハンドルの均一性を表します)W対応VEC2 / vec3 / vec4型均一。
次のように変数の提供VECタイプを使用することができます。
GLES20.glUniform2fv()
以下の方法を使用して設定int型のデータ:
GLES20.glUniform1i(location,x)
マットの種類を使用する方法を提供。
GLES20.glUniformMatrix2fv()
変
GLSLのみシェーダ間で転送される定義された変数を変化させる、変化する修飾子、頂点シェーダ(頂点シェーダ)出力、フラグメントシェーダ(フラグメントシェーダ)入力、シェーダ型宣言と一貫性です。
次のように変化する形式が定義されます。
varying float color;
次のように頂点シェーダとセットvec4(1,0,0,1)で定義された変数を変化させる、コードは次のとおりです。
attribute vec4 vPosition;
varying vec4 color;
void main() {
color= vec4(1,0,0,1);
gl_Position = vPosition;
}
フラグメントシェーダは、次のコードを使用して、カラー値を取得します。
precision mediump float;
varying vec4 color;
void main()
{
gl_FragColor = color;
}
属性で均一ように、変化量、のOpenGL ES 2.0サポートは、最大数の変化コードを得る、少なくとも8存在する以下の通りであります:
fun getMaxSupportNum(): Int {
var count = IntArray(1)
GLES20.glGetIntegerv(GLES20.GL_MAX_VARYING_VECTORS, count, 0)
return count[0]
}
限られた数だけでなく、サイズの制限を変更すること、変化する可変データ32、または8 vec4又は2 MAT4マトリックスに浮上渡すことができます。
続きを読みます: