diff options
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/state/transforms/TextureUnitPropertyAccessor.java')
-rw-r--r-- | eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/state/transforms/TextureUnitPropertyAccessor.java | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/state/transforms/TextureUnitPropertyAccessor.java b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/state/transforms/TextureUnitPropertyAccessor.java new file mode 100644 index 000000000..2489e14db --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/state/transforms/TextureUnitPropertyAccessor.java @@ -0,0 +1,64 @@ +/* + * 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 TextureUnitPropertyAccessor} provides the ability to access a + * texture unit property that is indexed based on the run time value of the + * {@link GLStateType#ACTIVE_TEXTURE_UNIT} property. + */ +public class TextureUnitPropertyAccessor implements IGLPropertyAccessor { + private final int mContextId; + private final IGLPropertyAccessor mActiveTextureAccessor; + private final GLStateType mTargetType; + + public TextureUnitPropertyAccessor(int contextId, GLStateType targetPropertyType) { + mContextId = contextId; + mTargetType = targetPropertyType; + + mActiveTextureAccessor = GLPropertyAccessor.makeAccessor(mContextId, + GLStateType.TEXTURE_STATE, + GLStateType.ACTIVE_TEXTURE_UNIT); + } + + @Override + public IGLProperty getProperty(IGLProperty state) { + // first extract the current active texture unit + IGLProperty activeTextureProperty = mActiveTextureAccessor.getProperty(state); + if (!(activeTextureProperty instanceof GLIntegerProperty)) { + return null; + } + Integer activeTexture = (Integer) activeTextureProperty.getValue(); + + // extract the required property for the current texture unit + IGLPropertyAccessor targetAccessor = GLPropertyAccessor.makeAccessor(mContextId, + GLStateType.TEXTURE_STATE, + GLStateType.TEXTURE_UNITS, + activeTexture, + mTargetType); + return targetAccessor.getProperty(state); + } + + @Override + public String getPath() { + return String.format("TEXTURE_STATE/TEXTURE_UNITS/${activeTextureUnit}/%s", mTargetType); + } +} |