Пример #1
0
void eDeferredRenderer::_loadShaders()
{
    m_psRefraction  = eShaderManager::loadPixelShader(ePS(refraction));
    m_psNoLight     = eShaderManager::loadPixelShader(ePS(nolight));
    m_psForwLight   = eShaderManager::loadPixelShader(ePS(forward_light));
    m_psDefAmbient  = eShaderManager::loadPixelShader(ePS(deferred_ambient));
    m_psDefEnv      = eShaderManager::loadPixelShader(ePS(deferred_env));
    m_psDefGeo      = eShaderManager::loadPixelShader(ePS(deferred_geo));
    m_psDefLight    = eShaderManager::loadPixelShader(ePS(deferred_light));
    m_psDistance    = eShaderManager::loadPixelShader(ePS(distance));
    m_psShadow      = eShaderManager::loadPixelShader(ePS(shadow));
    m_psQuad        = eShaderManager::loadPixelShader(ePS(quad));
    m_psParticles   = eShaderManager::loadPixelShader(ePS(particles));

    m_vsNoLight     = eShaderManager::loadVertexShader(eVS(nolight));
    m_vsInstGeo     = eShaderManager::loadVertexShader(eVS(instanced_geo));
    m_vsDistance    = eShaderManager::loadVertexShader(eVS(distance));
    m_vsShadow      = eShaderManager::loadVertexShader(eVS(shadow));
    m_vsQuad        = eShaderManager::loadVertexShader(eVS(quad));
    m_vsParticles   = eShaderManager::loadVertexShader(eVS(particles));
}
Пример #2
0
void omxLISRELExpectation::studyExoPred() // compare with similar function for RAM
{
	if (data->defVars.size() == 0 || !TY || !TY->isSimple() || !PS->isSimple()) return;

	Eigen::VectorXd estSave;
	copyParamToModelFake1(currentState, estSave);
	omxRecompute(PS, 0);
	omxRecompute(LY, 0);
	omxRecompute(BE, 0);

	EigenMatrixAdaptor ePS(PS);  // latent covariance
	EigenMatrixAdaptor eLY(LY);  // to manifest loading
	EigenMatrixAdaptor eBE(BE);  // to latent loading
	Eigen::VectorXd hasVariance = ePS.diagonal().array().abs().matrix();

	int found = 0;
	std::vector<int> exoDataCol(PS->rows, -1);
	int alNum = ~AL->matrixNumber;
	for (int k=0; k < int(data->defVars.size()); ++k) {
		omxDefinitionVar &dv = data->defVars[k];
		if (dv.matrix == alNum && hasVariance[ dv.row ] == 0.0) {
			for (int cx=0; cx < eBE.rows(); ++cx) {
				if (eBE(cx, dv.row) == 0.0) continue;
				mxThrow("%s: latent exogenous variables are not supported (%s -> %s)", name,
					 PS->rownames[dv.row], BE->rownames[cx]);
			}
			if (eLY.col(dv.row).array().abs().sum() == 0.) continue;
			exoDataCol[dv.row] = dv.column;
			found += 1;
			dv.loadData(currentState, 0.);
			if (verbose >= 1) {
				mxLog("%s: set defvar '%s' for latent '%s' to exogenous mode",
				      name, data->columnName(dv.column), PS->rownames[dv.row]);
			}
			data->defVars.erase(data->defVars.begin() + k--);
		}
	}

	copyParamToModelRestore(currentState, estSave);

	if (!found) return;

	slope = omxInitMatrix(LY->rows, found, currentState);
	EigenMatrixAdaptor eSl(slope);
	eSl.setZero();

	for (int cx=0, ex=0; cx < PS->rows; ++cx) {
		if (exoDataCol[cx] == -1) continue;
		exoDataColumns.push_back(exoDataCol[cx]);
		for (int rx=0; rx < LY->rows; ++rx) {
			slope->addPopulate(LY, rx, cx, rx, ex);
		}
		ex += 1;
	}

	exoPredMean.resize(exoDataColumns.size());
	for (int cx=0; cx < int(exoDataColumns.size()); ++cx) {
		auto &e1 = data->rawCols[ exoDataColumns[cx] ];
		Eigen::Map< Eigen::VectorXd > vec(e1.ptr.realData, data->numRawRows());
		exoPredMean[cx] = vec.mean();
	}
}