我使用繪製一些2D紋理並與它們一起工作的程序。在這個程序中使用了libgdx。我在使用FrameBuffer時遇到了一些問題。我嘗試在我的FrameBuffer中繪製一些紋理,然後我需要保存更改的紋理(或繪製),並在此FrameBuffer中使用此紋理更多時間。我試着通過在FrameBuffer中繪製
Texture texture = mFrameBuffer.getColorBufferTexture()
保存質地和我儘量只綁定紋理通過FrameBuffer
mFilterBuffer.getColorBufferTexture().bind();
對於第一次迭代的所有工作良好。但是當我嘗試在FrameBuffer中使用他的ColorBufferTexture紋理時,我的紋理完全是黑色的。 代碼:
public void process(MySprite psObject, float startX, float startY,
float endX, float endY, int mWidth, int mHeight) {
boolean frst = false;
if(psObject.getFrameBuffer() == null){
psObject.setFrameBuffer(new FrameBuffer(Pixmap.Format.RGBA8888, psObject.getTexture().getWidth(), psObject.getTexture().getHeight(), true));
}
if(pSprite == null || pSprite != psObject){
mFrameBuffer = psObject.getFrameBuffer();
frst = true;
pSprite = psObject;
}
mFrameBuffer.begin();
Gdx.gl.glViewport(0, 0, psObject.getTexture().getWidth(), psObject.getTexture().getHeight());
Gdx.graphics.getGL20().glClearColor(0f, 0f, 0f, 1f);
Gdx.graphics.getGL20().glClear(GL20.GL_COLOR_BUFFER_BIT);
ShaderProgram shader = MyUtils.newInstance().getCurrentShader();
if(!shader.isCompiled()){
Log.i("ERROR", "SHERROR " + shader.getLog());
}
if(shader != null){
if(frst){
psObject.getTexture().bind();
}else{
mFrameBuffer.getColorBufferTexture().bind();
}
shader.begin();
Matrix4 matrix = new Matrix4();
matrix.setToRotation(1, 0, 0, 180);
matrix.scale(scaleSizeInFilterProcessor, scaleSizeInFilterProcessor, 1);
shader.setUniformMatrix("u_worldView", matrix);
shader.setUniformi("u_texture", 0);
float [] start = new float[]{0f,0};
float [] end = new float[]{1f,1f};
MyUtils.newInstance().getShaderData(shader, start, end, mWidth, mHeight);
psObject.getMesh().render(shader, GL20.GL_TRIANGLES);
shader.end();
}
mFrameBuffer.end();
}
你多久打一次「過程」功能?當你在程序中第一次調用函數時,你對「pSprite」有什麼價值?什麼是着色器源代碼?即使沒有發生任何錯誤,着色器仍然可能負責黑屏。你是否使用白色紋理或類似的東西來測試你想渲染的場景?還有一些關於你的問題的問題... – TheWhiteLlama