Subversion Repositories AndroidProjects

Rev

Blame | Last modification | View Log | RSS feed

package com.gebauz.pingK.common.framework.renderstates;

import java.nio.IntBuffer;

import javax.microedition.khronos.opengles.GL10;

import com.gebauz.pingK.common.framework.GLUtil;
import com.gebauz.pingK.common.framework.Texture;

public class TextureStage
{
        private RenderStates mRenderStates = null;
        private Texture mBoundTexture = null;
        private int mIndex = 0;
       
        static int mMaxTextureUnits = -1;
       
        public TextureStage(RenderStates renderStates, int index)
        {              
                mIndex = index;
                mRenderStates = renderStates;          
        }
       
        void initialize()
        {
                GL10 gl = GLUtil.getGL();
               
                if (mMaxTextureUnits == -1)
                {
                        int num[] = {0};
                        IntBuffer numBuf = IntBuffer.wrap(num);
                        gl.glGetIntegerv(GL10.GL_MAX_TEXTURE_UNITS, numBuf);
                        mMaxTextureUnits = numBuf.get(0);
                }
               
                if (mIndex >= mMaxTextureUnits)
                        return;
               
                gl.glActiveTexture(GL10.GL_TEXTURE0 + mIndex);
               
                gl.glEnable(GL10.GL_TEXTURE_2D);
                //gl.Disable(GL10.GL_TEXTURE_CUBE_MAP);
                gl.glBindTexture(GL10.GL_TEXTURE_2D, 0);
                //gl.glBindTexture(GL10.GL_TEXTURE_CUBE_MAP);
               
                //mBoundTarget = GL_TEXTURE_2D;
                mBoundTexture = null;
        }
       
        public void bindTexture(Texture texture)
        {
                bindTexture(texture, false);
        }
       
        public void bindTexture(Texture texture, boolean force)
        {
                if (mIndex >= mMaxTextureUnits)
                        return;
               
                GL10 gl = GLUtil.getGL();
               
                gl.glActiveTexture(GL10.GL_TEXTURE0 + mIndex);

                if ((mBoundTexture != texture) || (force))
                {
                        // Update the currently bound texture.
                        mBoundTexture = texture;
                       
                        // Upload texture settings to GPU.
                        gl.glEnable(GL10.GL_TEXTURE_2D);

                        if (mBoundTexture != null)
                        {
                                gl.glBindTexture(GL10.GL_TEXTURE_2D, mBoundTexture.getHandle());
                        }
                        else
                        {
                                gl.glBindTexture(GL10.GL_TEXTURE_2D, 0);                               
                        }
                }
        }
       
        public final RenderStates getRenderStates()
        {
                return mRenderStates;
        }
               

}