首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在FrameBuffer中绘制

在FrameBuffer中绘制
EN

Stack Overflow用户
提问于 2013-07-14 04:31:04
回答 1查看 806关注 0票数 1

我使用一个程序绘制一些2D纹理,并使用它们。在这个程序中使用的是libgdx。我在使用FrameBuffer时遇到了一些问题。我尝试在我的FrameBuffer中绘制一些纹理,之后我需要保存更改后的纹理(或绘制),并在此FrameBuffer中使用此纹理更多的时间。我尝试通过以下方式保存纹理

代码语言:javascript
复制
Texture texture = mFrameBuffer.getColorBufferTexture() 

我试着从FrameBuffer绑定纹理

代码语言:javascript
复制
mFilterBuffer.getColorBufferTexture().bind();

对于第一次迭代,所有的工作都很好。但当我尝试在FrameBuffer中使用他的类似ColorBufferTexture的纹理时,我得到的是完全黑色的纹理。代码:

代码语言:javascript
复制
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();
     }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-14 05:55:36

您的代码需要一些重构;)。无论如何,你不能读写同一个FBO,如果这是你的问题。你需要两个FBO(比如A和B)

代码语言:javascript
复制
Draw scene to A,
Bind A's color texture
Draw scene to B (now you can read from A).

请注意,您可以扩展libgdx FBO以使多个纹理与同一FBO相关联。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17633971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档