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