blob: c08a72283a9e745b482fe08dd50672d9fe2953ed [file] [log] [blame]
/*
* Copyright (C) 2011 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.scenegraph;
import java.lang.Math;
import java.util.ArrayList;
import android.content.res.Resources;
import android.renderscript.Allocation;
import android.renderscript.Element;
import android.renderscript.Matrix4f;
import android.renderscript.ProgramFragment;
import android.renderscript.ProgramRaster;
import android.renderscript.ProgramStore;
import android.renderscript.ProgramVertex;
import android.renderscript.RSRuntimeException;
import android.renderscript.RenderScript;
import android.renderscript.RenderScriptGL;
import android.util.Log;
/**
* @hide
*/
public class RenderState extends SceneGraphBase {
VertexShader mVertex;
FragmentShader mFragment;
ProgramStore mStore;
ProgramRaster mRaster;
ScriptField_RenderState_s mField;
public RenderState(VertexShader pv,
FragmentShader pf,
ProgramStore ps,
ProgramRaster pr) {
mVertex = pv;
mFragment = pf;
mStore = ps;
mRaster = pr;
}
public RenderState(RenderState r) {
mVertex = r.mVertex;
mFragment = r.mFragment;
mStore = r.mStore;
mRaster = r.mRaster;
}
public void setProgramVertex(VertexShader pv) {
mVertex = pv;
updateRSData();
}
public void setProgramFragment(FragmentShader pf) {
mFragment = pf;
updateRSData();
}
public void setProgramStore(ProgramStore ps) {
mStore = ps;
updateRSData();
}
public void setProgramRaster(ProgramRaster pr) {
mRaster = pr;
updateRSData();
}
void updateRSData() {
if (mField == null) {
return;
}
ScriptField_RenderState_s.Item item = new ScriptField_RenderState_s.Item();
item.pv = mVertex.getRSData().getAllocation();
item.pf = mFragment.getRSData().getAllocation();
item.ps = mStore;
item.pr = mRaster;
mField.set(item, 0, true);
}
public ScriptField_RenderState_s getRSData() {
if (mField != null) {
return mField;
}
RenderScriptGL rs = SceneManager.getRS();
if (rs == null) {
return null;
}
mField = new ScriptField_RenderState_s(rs, 1);
updateRSData();
return mField;
}
}