diff options
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/state/transforms/TexturePropertyAccessor.java')
-rw-r--r-- | eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/state/transforms/TexturePropertyAccessor.java | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/state/transforms/TexturePropertyAccessor.java b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/state/transforms/TexturePropertyAccessor.java new file mode 100644 index 000000000..10758d819 --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/state/transforms/TexturePropertyAccessor.java @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ide.eclipse.gltrace.state.transforms; + +import com.android.ide.eclipse.gltrace.state.GLIntegerProperty; +import com.android.ide.eclipse.gltrace.state.GLStateType; +import com.android.ide.eclipse.gltrace.state.IGLProperty; + +/** + * The {@link TexturePropertyAccessor} provides the ability to access a + * texture property. Texture properties are accessed by first identifying the active + * texture unit ({@link GLStateType#ACTIVE_TEXTURE_UNIT}), and then identifying the texture + * that is bound to that unit. + */ +public class TexturePropertyAccessor implements IGLPropertyAccessor { + private final int mContextId; + private final GLStateType mTargetUnitType; + private final int mMipmapLevel; + private final GLStateType mTextureType; + private TextureUnitPropertyAccessor mTextureUnitPropertyAccessor; + + public TexturePropertyAccessor(int contextId, GLStateType textureUnitTarget, int level, + GLStateType textureTargetName) { + mContextId = contextId; + mTargetUnitType = textureUnitTarget; + mMipmapLevel = level; + mTextureType = textureTargetName; + mTextureUnitPropertyAccessor = new TextureUnitPropertyAccessor(mContextId, + mTargetUnitType); + } + + public TexturePropertyAccessor(int contextId, GLStateType textureUnitTarget, + GLStateType textureTargetName) { + this(contextId, textureUnitTarget, -1, textureTargetName); + } + + @Override + public IGLProperty getProperty(IGLProperty state) { + // identify the texture that is bound in the current active texture unit + IGLProperty targetTexture = mTextureUnitPropertyAccessor.getProperty(state); + if (!(targetTexture instanceof GLIntegerProperty)) { + return null; + } + Integer textureId = (Integer) targetTexture.getValue(); + + // now extract the required property from the selected texture + IGLPropertyAccessor textureAccessor; + if (mMipmapLevel >= 0) { + textureAccessor = GLPropertyAccessor.makeAccessor(mContextId, + GLStateType.TEXTURE_STATE, + GLStateType.TEXTURES, + textureId, + GLStateType.TEXTURE_MIPMAPS, + Integer.valueOf(mMipmapLevel), + mTextureType); + } else { + textureAccessor = GLPropertyAccessor.makeAccessor(mContextId, + GLStateType.TEXTURE_STATE, + GLStateType.TEXTURES, + textureId, + mTextureType); + } + + return textureAccessor.getProperty(state); + } + + @Override + public String getPath() { + return String.format("TEXTURE_STATE/TEXTURES/${activeTexture}/%s", mTextureType); + } + +} |