2013-07-18 62 views
0

我正在libGDX中创建一个3D游戏。由于某种原因,我的游戏不断打印LIBGDX不断向终端打印“DefaultShaderProvider:创建新的着色器”

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(); 
} 
} 

回答

2

当您在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方法中实例化modelBatch而不是在render中,我怀疑你只能看到一次输出。如果没有,可能值得提出一个问题,因为它似乎没有必要删除日志语句。