[英]libgdx shader in actor
我有一個自定義組,它由一些角色組成,並且還在其draw()
使用了自定義着色器
看起來像:
override fun draw(batch: Batch, parentAlpha: Float) {
super.draw(batch, parentAlpha)
Gdx.gl.glDepthMask(false)
Gdx.gl.glEnable(GL20.GL_BLEND)
Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA)
val sh = stage.batch.shader // Save current shader
stage.batch.shader = shader // Set custom shader
shader.begin()
shader.setUniformMatrix("u_projTrans", stage.camera.combined)
shader.setUniformf("u_color", color)
shader.setUniformf("u_scale", scale)
shader.setUniformf("u_radius", radius)
shader.setUniformf("u_pos_center", v)
mesh.render(shader, GL20.GL_TRIANGLES, 0, 6)
shader.end()
stage.batch.shader = sh // Restore default shader
}
繪制組中的所有角色,但不繪制自定義着色器。
不知道我做對了。 我哪里錯了?
不要進行直接的OpenGL調用,因為這些是SpriteBatch自己管理的GL參數,因此您可能會弄混它稍后繪制的其他角色的默認值。 您可以設置混合功能並直接在批次上啟用混合。 默認情況下,SpriteBatch已禁用深度測試和遮罩。
如果要使用該着色器繪制該組的子super.draw
,請在設置着色器參數后將super.draw
移至。 不要調用shader.begin()
或end()
,因為這些將由批處理為您處理。
但是,如果您僅繪制該自定義網格,那么完全搞砸了批處理的着色器就沒有任何意義。 相反,你應該叫batch.end
這個方法(可能調用后開始super.draw
),並調用batch.begin
在這個方法結束。 如果不查看自定義着色器或如何設置網格,就無法確定是否還有其他問題阻止您看到網格。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.