簡體   English   中英

演員中的libgdx着色器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM