我正在 libGDX 中创建 3d 游戏。由于某种原因,我的游戏不断打印
DefaultShaderProvider: Creating new shader
在终端中。这让我完全发疯,因为由于该行的垃圾邮件,我无法使用终端调试我的程序。我检查了我的代码是否有任何可以打印此内容的内容,但我找不到任何可以打印此内容的内容。
谁能告诉我为什么会发生这种情况?
这是我的代码:
public class puppetDemo implements ApplicationListener {
public PerspectiveCamera camera;
public ModelBatch modelBatch;
public ModelInstance box;
public ModelInstance sphere;
public Array<ModelInstance> instances = new Array<ModelInstance>();
public AssetManager assets;
public Lights lights;
public CameraInputController camController;
public boolean loading = true;
@Override
public void create() {
camera = new PerspectiveCamera(67, Gdx.graphics.getWidth(),
Gdx.graphics.getHeight());
camera.position.set(10f, 0f, -100f);
camera.lookAt(0, 0, 0);
camera.near = 0.1f;
camera.far = 300f;
camera.update();
lights = new Lights();
lights.ambientLight.set(0.4f, 0.4f, 0.4f, 1f);
lights.add(new DirectionalLight().set(0.8f, 0.8f, 0.8f, -1f, -0.8f,
-0.2f));
assets = new AssetManager();
assets.load("data/box.obj", Model.class);
assets.load("data/sphere.obj", Model.class);
}
@Override
public void resize(int width, int height) {
}
@Override
public void render() {
Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(),
Gdx.graphics.getHeight());
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
modelBatch = new ModelBatch();
modelBatch.begin(camera);// Begin Rendering
modelBatch.render(instances, lights);
modelBatch.end();// End Rendering
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void dispose() {
modelBatch.dispose();
}
}
最佳答案
当您在 render
方法中调用 new ModelBatch()
时,这将创建 DefaultShaderProvider
的新实例:
public ModelBatch() {
this(new RenderContext(new DefaultTextureBinder(DefaultTextureBinder.ROUNDROBIN, 1)),
new DefaultShaderProvider(),
new DefaultRenderableSorter());
}
查看 DefaultShaderProvider
的源代码,您会注意到 createShader
方法中的日志输出:
@Override
protected Shader createShader(final Renderable renderable) {
Gdx.app.log("DefaultShaderProvider", "Creating new shader");
// ...
}
在 create
方法中而不是在 render
中实例化 modelBatch
,我怀疑您只会看到一次输出。如果没有,可能值得提出一个问题来删除日志语句,因为这似乎没有必要。
关于java - LIBGDX 不断向终端打印 "DefaultShaderProvider: Creating new shader",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17732022/