Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by knighthedspi · Aug 01, 2014 at 06:44 AM · androidandroidpluginopengl

Using OpenGL FBO to record game play in Android

I'm developing the Android plugin that record Unity gameplay screen. To achieve this, I used OpenGL FBO. Pseudo Code is so simple like this below :

 // Bind frame buffer as a render target
 mFrameBuffer.bind();
 
 // Render scene to frame buffer
 renderScene();
 
 // Restore rendering target, unbind FBO
 mFrameBuffer.unbind();
 
 // Draw texture into display
 mTexture.draw(mFrameBuffer.getTexture());
 
 // Make video surface a rendering target
 videoCapture.captureFrame(mFrameBuffer.getTexture());

The output video is ok but i had a problem when render to window display using offscreen texture that get from FBO. I checked my code and recognize that the calls to glDrawArray fails with GL_ INVALID_ OPERATION error code .

My render code

 public void draw(int textureId) {
     this.shader.use();
 
     GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
     Log.getPossibleGLError("active texture0");
     GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureId);
     Log.getPossibleGLError("bind texture when redraw");
 
     int uOrientationM = this.shader.getAttributeLocation("uOrientationM");
     Log.getPossibleGLError("get orientation matrix");
     int uTransformM = this.shader.getAttributeLocation("uTransformM");
     Log.getPossibleGLError("get transform matrix");
 
     GLES20.glUniformMatrix4fv(uOrientationM, 1, false, this.orientationMatrix, 0);
 
     Log.getPossibleGLError("set orientation matrix when redraw");
 
     GLES20.glUniformMatrix4fv(uTransformM, 1, false, this.transformMatrix, 0);
 
     Log.getPossibleGLError("set uniform matrix when redraw");
 
     renderQuad(this.shader.getAttributeLocation("aPosition"));
 
     Log.getPossibleGLError("render quad when redraw");
 
     this.shader.unUse();
    }
 
    private void renderQuad(int aPosition) {
       GLES20.glVertexAttribPointer(aPosition, 2, GLES20.GL_BYTE, false, 0, this.fullQuadVertices);
       Log.getPossibleGLError("get vertex attrib pointer");
       GLES20.glEnableVertexAttribArray(aPosition);
       Log.getPossibleGLError("enable vertex array");
       GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
       // error occurs after execute glDrawArrays
       Log.getPossibleGLError("draw array ");
    } 

This code worked fine when render to videoSurface but failed when render to window display. Any solutions for my issue? Any help will be greatly appreciated!

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

0 Replies

· Add your reply
  • Sort: 

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

3 People are following this question.

avatar image avatar image avatar image

Related Questions

Not able to send message from java to Unity using UnityPlayer.UnitySendMessage 0 Answers

Share Button 3 Answers

Rendering Android native view with OpenGL 0 Answers

calling java method from unity c# 1 Answer

float to string c# unity script Android csharp 2 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges