Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fast way to set byte array to unity texture2d

Tags:

c#

unity3d

shader

In unity3d I get image from camera (color camera device) as byte array from a plugin , and I want show image in real-time in screen .

If i use Texture2D.SetPixels32 for making a texture, it decrease fps dramatically ( from 80 to 10).

//First convert byte[] to color[]
  colorr = GetColor(imageBuffer);

  imageColor.SetPixels32(colorr);
  imageColor.Apply();   // fps reduced here

I guess I need to do this with a shader on GPU .

So what is solution to do this faster ? If answer is using shader , can give a sample .

Thx.

like image 379
mX64 Avatar asked Nov 13 '12 09:11

mX64


1 Answers

I have done it with using openGL. Just write a plugin for unity and get Texture2D NativeID from unity and send that to the plugin then use openGL to set bytes to the texture ! It was amazing ! FPS increased from 10 to 50 !!! also you need to know that you have to run games in OpenGL mode, with "-force-opengl" to use opengl functions.

like image 75
mX64 Avatar answered Nov 14 '22 21:11

mX64