| /* |
| * 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); |
| } |
| } |