Androidの頂点シェーダに線を引き、次のとおりです。
attribute vec4 vPosition;
void main() {
gl_Position = vPosition;
}
アプリケーションによって渡されたvPosition頂点、。
フラグメントシェーダコードは次のとおりです。
precision mediump float;
uniform vec4 u_color;
void main()
{
gl_FragColor = u_color;
}
アプリケーションによって渡されるu_colorカラーライン、。
プログラムを作成します。
fun createProgram() {
var vertexCode =
AssetsUtils.readAssetsTxt(
context = context,
filePath = "glsl/line_vs.glsl"
)
var fragmentCode =
AssetsUtils.readAssetsTxt(
context = context,
filePath = "glsl/line_fs.glsl"
)
mProgramHandle = GLTools.createAndLinkProgram(vertexCode, fragmentCode)
}
line_vs.glsl頂点シェーダとline_fs.glsl資産/ GLSLディレクトリ、ファイルを読むためにreadAssetsTxt資産ディレクトリの一般的な方法で保存されたフラグメントシェーダとファイルを表します。
ハンドルパラメータを取得します。
vPositionLoc = GLES20.glGetAttribLocation(mProgramHandle, "vPosition")
uColorLoc = GLES20.glGetUniformLocation(mProgramHandle, "u_color")
頂点データの初期化ラインコード次の通りであります:
val vertexBuffer = GLTools.array2Buffer(
floatArrayOf(
-0.5F, 0.5F, 0F,
0.5F, 0.5F, 0F,
0.5F, -0.5F, 0F,
-0.5F, -0.5F, 0F
)
)
色データの初期化ラインコード次の通りであります:
val colorBuffer = GLTools.array2Buffer(
floatArrayOf(
//r,g,b,a
1F, 0F, 0F, 1F
)
)
描画:
override fun onDrawFrame(gl: GL10?) {
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
GLES20.glUseProgram(mProgramHandle)
vertexBuffer.position(0)
GLES20.glEnableVertexAttribArray(vPositionLoc)
GLES20.glVertexAttribPointer(vPositionLoc, 3, GLES20.GL_FLOAT, false, 0, vertexBuffer)
GLES20.glUniform4fv(uColorLoc, 1, colorBuffer)
GLES20.glDrawArrays(GLES20.GL_LINES, 0, 4)
}
色データと頂点データ、線を描画GLES20.GL_LINES表現を設定します。
3通りの方法で描かれた行があります。
- GL_LINES:線は、4点以上の、例えば、2つの2からなるビット数が奇数である場合に1と2は、直線からなる直線、3及び4から成る、4番号付けされ、最後の点それは放棄されます。
- GL_LINE_STRIP:4点以上、1と2,2と3,3と4は、それぞれ直線で構成されています。
- GL_LINE_LOOP:とGL_LINE_STRIP接続点と最初の点よりも長持ちするように比べ。
次のような効果があります