我有自定义组,由一些演员组成,并在其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
}
绘制了组中的所有actor,但不是自定义着色器。
不确定我是否正确使用。哪里我错了?
答案 0 :(得分:0)
不要进行那些直接的OpenGL调用,因为那些是SpriteBatch为自己管理的GL参数,所以你可能会搞乱其后来绘制的其他actor的默认值。您可以直接设置混合功能并在批处理上启用混合。默认情况下,SpriteBatch已禁用深度测试和屏蔽。
如果要使用该着色器绘制该组的子项,请在设置着色器参数后移动super.draw
。请勿致电shader.begin()
或end()
,因为这些是由批处理的。
但是如果你只是绘制那个自定义网格物体,那么你根本不应该弄乱批处理的着色器是没有意义的。相反,您应该在此方法的开头调用batch.end
(可能在调用super.draw
之后),并在此方法结束时调用batch.begin
。如果没有看到自定义着色器或如何设置网格,则无法确定是否存在阻止您查看网格的其他问题。