Back to project page min3d.
The source code is released under:
MIT License
If you think the Android project min3d listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package com.min3d.lib.core; /*from w w w . j av a 2 s . co m*/ import android.util.Log; import com.min3d.lib.Min3d; import com.min3d.lib.vos.Light; import java.util.ArrayList; import java.util.HashMap; public class ManagedLightList { // List of Light objects private ArrayList<Light> _lights; // Map Light objects to GL_LIGHT indices private HashMap<Light, Integer> _lightToGlIndex; // 'Pool' of available GL_LIGHT id's private ArrayList<Integer> _availGlIndices; // Array of which GL_LIGHTS are enabled, where index corresponds to // GL_LIGHT[index] private boolean[] _glIndexEnabled; // Array of dirty flags, where index corresponds to GL_LIGHT[index] private boolean[] _glIndexEnabledDirty; // "GL index" here means an int from 0 to 8 that corresponds to // the int constants GL10.GL_LIGHT0 to GL10.GL_LIGHT7 public ManagedLightList() { reset(); } public void reset() { Log.i(Min3d.TAG, "ManagedLightList.reset()"); _availGlIndices = new ArrayList<Integer>(); for (int i = 0; i < Renderer.NUM_GLLIGHTS; i++) { _availGlIndices.add(i); } _lightToGlIndex = new HashMap<Light, Integer>(); _glIndexEnabled = new boolean[Renderer.NUM_GLLIGHTS]; _glIndexEnabledDirty = new boolean[Renderer.NUM_GLLIGHTS]; for (int i = 0; i < Renderer.NUM_GLLIGHTS; i++) { _glIndexEnabled[i] = false; _glIndexEnabledDirty[i] = true; } _lights = new ArrayList<Light>(); } public boolean add(Light $light) { if (_lights.contains($light)) { return false; } if (_lights.size() > Renderer.NUM_GLLIGHTS) throw new Error("Exceeded maximum number of Lights"); boolean result = _lights.add($light); int glIndex = _availGlIndices.remove(0); _lightToGlIndex.put($light, glIndex); _glIndexEnabled[glIndex] = true; _glIndexEnabledDirty[glIndex] = true; return result; } public void remove(Light $light) { boolean result = _lights.remove($light); if (!result) return; int glIndex = _lightToGlIndex.get($light); _availGlIndices.add(glIndex); _glIndexEnabled[glIndex] = false; _glIndexEnabledDirty[glIndex] = true; } public void removeAll() { reset(); } public int size() { return _lights.size(); } public Light get(int $index) { return _lights.get($index); } public Light[] toArray() { return (Light[]) _lights.toArray(new Light[_lights.size()]); } /** * Used by Renderer */ int getGlIndexByLight(Light $light) /* package-private */ { return _lightToGlIndex.get($light); } /** * Used by Renderer */ Light getLightByGlIndex(int $glIndex) /* package-private */ { for (int i = 0; i < _lights.size(); i++) { Light light = _lights.get(i); if (_lightToGlIndex.get(light) == $glIndex) return light; } return null; } /** * Used by Renderer */ boolean[] glIndexEnabledDirty() /* package-private */ { return _glIndexEnabledDirty; } /** * Used by Renderer */ boolean[] glIndexEnabled() /* package-private */ { return _glIndexEnabled; } }