Exemple #1
0
DenseSet Router::find_defined() const {
    POMAGMA_INFO("Finding defined obs");
    DenseSet defined(m_carrier.item_dim());
    DenseSet undefined(m_carrier.item_dim());
    undefined = m_carrier.support();

    bool changed = true;
    while (changed) {
        changed = false;

        POMAGMA_DEBUG("accumulating route probabilities");

        undefined -= defined;
        for (auto iter = undefined.iter(); iter.ok(); iter.next()) {
            Ob ob = *iter;
            if (defines(defined, ob)) {
                defined.insert(ob);
                changed = true;
                break;
            }
        }
    }

    return defined;
}
bool ParticleSystemGPU::CompileComputeShader(CPVRTString& errorStr)
{
	CPVRTArray<char> defines("WORKGROUP_SIZE               ", 30);
	sprintf(&defines[15], "%d", m_ui32WorkgroupSize);
	char* defines_buffer = &defines[0];

	if (m_glComputeShader) { glDeleteShader(m_glComputeShader); m_glComputeShader = 0; }
	if (m_glProgram) { glDeleteProgram(m_glProgram); m_glProgram = 0; }

	if (PVRTShaderLoadFromFile(c_szComputeShaderBinFile, c_szComputeShaderSrcFile, GL_COMPUTE_SHADER, GL_SGX_BINARY_IMG, &m_glComputeShader, &errorStr, &m_PVRTContext, &defines_buffer, 1) != PVR_SUCCESS)
	{ errorStr = "Particle Compute Shader : " + errorStr; return false; }

	m_glProgram = glCreateProgram();
	glAttachShader(m_glProgram, m_glComputeShader);
	glLinkProgram(m_glProgram);
	GLint Linked;
	glGetProgramiv(m_glProgram, GL_LINK_STATUS, &Linked);

	if (!Linked)
	{
		int i32InfoLogLength, i32CharsWritten;
		glGetProgramiv(m_glProgram, GL_INFO_LOG_LENGTH, &i32InfoLogLength);
		char* pszInfoLog = new char[i32InfoLogLength];
		glGetProgramInfoLog(m_glProgram, i32InfoLogLength, &i32CharsWritten, pszInfoLog);
		errorStr = CPVRTString("Failed to link compute shader:: ") + pszInfoLog + "\n";
		delete [] pszInfoLog;
		return false;
	}
	return true;
}
Exemple #3
0
int
main(int argc, char **argv)
{
    char *use = "Error: must provide one argument - either 'd', 'i' or 'u'\n";
    if (argc != 2) {
	fputs(use, stderr);
	return 1;
    }
    else if (argv[1][0] == 'd')
	defines();
    else if (argv[1][0] == 'i')
	ids();
    else if (argv[1][0] == 'u')
	units();
    else {
	fputs(use, stderr);
	fprintf(stderr, "(ouch!!!!  that really hurt!  who throws a '%s' anyway? --Austin)\n", argv[1]);
	return 1;
    }
    return 0;
}
Exemple #4
0
 /**
  * Recompiles the shader.
  * The returned shader name should be set with ResetShader later after linking the program succeeded.
  * If the linking failed the program needs to delete the new shader object.
  * @return the new shader object name
  */
 GLuint Shader::RecompileShader() const
 {
     auto shaderDefinition = GetParameters();
     std::vector<std::string> defines(shaderDefinition.begin() + 1, shaderDefinition.end());
     return CompileShader(application->GetConfig().resourceBase + "/" + shaderDefinition[0], defines, type, strType);
 }