- Home /
Track percentage of screen filled with LineRenderer objects
Hello,
on my 2D mobile application a user can use his finger to draw white lines on a black screen. I would like to find out how much of the screen is white already, best in percentage of screen space covered. This needs to be fast on mobile devices.
For drawing I use the LineRenderer: TouchPhase.Began creates a new LineRenderer and TouchPhase.Moved adds a new Vertex to the renderer.
In order to find out how much is covered with white I currently use OnPostRender on the cam to create a texture2d and count the average color of pixels:
using UnityEngine;
using System.Collections;
public class CountSwished : MonoBehaviour {
private int targetWidth, targetHeight;
private Texture2D tex;
void Awake() {
Camera cam = gameObject.GetComponent<Camera> ();
targetHeight = cam.targetTexture.height;
targetWidth = cam.targetTexture.width;
tex = new Texture2D (targetWidth, targetHeight);
}
void OnPostRender() {
int mipLevel = 5;
tex.ReadPixels(new Rect(0, 0, targetWidth, targetHeight), 0, 0);
tex.Apply();
int count = 0;
float avg = 0;
Color[] pixels = tex.GetPixels(mipLevel);
foreach (Color color in pixels) {
avg+= color.r;
count++;
}
float swished = avg / count;
Debug.Log(swished * 100);
}
}
This outputs percentage of pixels covered in white to console. However it is too slow and drops the framerate from 60fps to something like 15fps. Is there a better way to do this? Going pixel by pixel does not seem to be a good idea - maybe there is some totally different way?
My cameras have static positions. Drawing on a surface that is already white should not increase the computed percentage covered.
Thanks a lot, Martin
Your answer
Follow this Question
Related Questions
Need to find a point in a line using a percentage and a Vector3 list. 1 Answer
Screen brightness on Android 2 Answers
GUI and Screen Resolution 1 Answer
GUI Bloodsplat Screen 1 Answer
How would I keep my player from going past the background? 5 Answers