FileDocCategorySizeDatePackage
ShaderParam.javaAPI DocAndroid 5.1 API5535Thu Mar 12 22:22:44 GMT 2015com.android.scenegraph

ShaderParam

public abstract class ShaderParam extends SceneGraphBase
hide

Fields Summary
static final String
cameraPos
static final String
cameraDir
static final String
lightColor
static final String
lightPos
static final String
lightDir
static final String
view
static final String
proj
static final String
viewProj
static final String
model
static final String
modelView
static final String
modelViewProj
static final long
sMaxTimeStamp
ScriptField_ShaderParamData_s.Item
mData
ScriptField_ShaderParamData_s
mField
String
mParamName
Camera
mCamera
Constructors Summary
public ShaderParam(String name)

        mParamName = name;
        mData = new ScriptField_ShaderParamData_s.Item();
    
Methods Summary
static ScriptField_ShaderParam_sfillInParams(android.renderscript.Element constantElem, java.util.HashMap sourceParams, com.android.scenegraph.Transform transform)


       
                                                    
                                                    
        RenderScriptGL rs = SceneManager.getRS();
        ArrayList<ScriptField_ShaderParam_s.Item> paramList;
        paramList = new ArrayList<ScriptField_ShaderParam_s.Item>();

        int subElemCount = constantElem.getSubElementCount();
        for (int i = 0; i < subElemCount; i ++) {
            String inputName = constantElem.getSubElementName(i);
            int offset = constantElem.getSubElementOffsetBytes(i);

            ShaderParam matchingParam = sourceParams.get(inputName);
            Element subElem = constantElem.getSubElement(i);
            // Make one if it's not there
            if (matchingParam == null) {
                if (subElem.getDataType() == Element.DataType.FLOAT_32) {
                    matchingParam = new Float4Param(inputName, 0.5f, 0.5f, 0.5f, 0.5f);
                } else if (subElem.getDataType() == Element.DataType.MATRIX_4X4) {
                    TransformParam trParam = new TransformParam(inputName);
                    trParam.setTransform(transform);
                    matchingParam = trParam;
                }
            }
            ScriptField_ShaderParam_s.Item paramRS = new ScriptField_ShaderParam_s.Item();
            paramRS.bufferOffset = offset;
            paramRS.transformTimestamp = 0;
            paramRS.dataTimestamp = 0;
            paramRS.data = matchingParam.getRSData().getAllocation();
            if (subElem.getDataType() == Element.DataType.FLOAT_32) {
                paramRS.float_vecSize = subElem.getVectorSize();
            }

            paramList.add(paramRS);
        }

        ScriptField_ShaderParam_s rsParams = null;
        int paramCount = paramList.size();
        if (paramCount != 0) {
            rsParams = new ScriptField_ShaderParam_s(rs, paramCount);
            for (int i = 0; i < paramCount; i++) {
                rsParams.set(paramList.get(i), i, false);
            }
            rsParams.copyAll();
        }
        return rsParams;
    
public java.lang.StringgetParamName()

        return mParamName;
    
public ScriptField_ShaderParamData_sgetRSData()

        if (mField != null) {
            return mField;
        }

        RenderScriptGL rs = SceneManager.getRS();
        mField = new ScriptField_ShaderParamData_s(rs, 1);

        if (mParamName != null) {
            mData.paramName = SceneManager.getCachedAlloc(mParamName);
            if (mData.paramName == null) {
                mData.paramName = SceneManager.getStringAsAllocation(rs, mParamName);
                SceneManager.cacheAlloc(mParamName, mData.paramName);
            }
        }
        initLocalData();
        mData.timestamp = 1;

        mField.set(mData, 0, true);
        return mField;
    
protected voidincTimestamp()

        if (mField != null) {
            mData.timestamp ++;
            mData.timestamp %= sMaxTimeStamp;
            mField.set_timestamp(0, mData.timestamp, true);
        }
    
abstract voidinitLocalData()

public voidsetCamera(Camera c)

        mCamera = c;
        if (mField != null) {
            mData.camera = mCamera.getRSData().getAllocation();
            mField.set_camera(0, mData.camera, true);
        }