本文整理汇总了C++中HighLevelGpuProgramPtr类的典型用法代码示例。如果您正苦于以下问题:C++ HighLevelGpuProgramPtr类的具体用法?C++ HighLevelGpuProgramPtr怎么用?C++ HighLevelGpuProgramPtr使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了HighLevelGpuProgramPtr类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: while
//.........这里部分代码省略.........
" float factorX = params.z; \n"
" float factorY = params.w; \n"
" vec4 tmpPos = gl_Vertex; \n"
/*
2 different methods are used to for the sin calculation :
- the first one gives a better effect but at the cost of a few fps because of the 2 sines
- the second one uses less ressources but is a bit less realistic
a sin approximation could be use to optimize performances
*/
#if 1
" tmpPos.y += sin(time + originPos.z + tmpPos.y + tmpPos.x) * radiusCoeff * radiusCoeff * factorY; \n"
" tmpPos.x += sin(time + originPos.z ) * heightCoeff * heightCoeff * factorX; \n"
#else
" float sinval = sin(time + originPos.z ); \n"
" tmpPos.y += sinval * radiusCoeff * radiusCoeff * factorY; \n"
" tmpPos.x += sinval * heightCoeff * heightCoeff * factorX; \n"
#endif
" gl_Position = gl_ModelViewProjectionMatrix * tmpPos; \n"
" gl_FogFragCoord = gl_Position.z; \n"
"}";
}
// test for shader source
//std::ofstream shaderOutput;
//shaderOutput.open((vertexProgName+std::string(".cg")).c_str());
//shaderOutput << vertexProgSource;
//shaderOutput.close();
// end test for shader source
HighLevelGpuProgramPtr vertexShader = HighLevelGpuProgramManager::getSingleton().createProgram(
vertexProgName,
ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
shaderLanguage, GPT_VERTEX_PROGRAM);
vertexShader->setSource(vertexProgSource);
if (shaderLanguage == "hlsl")
{
vertexShader->setParameter("target", "vs_1_1");
vertexShader->setParameter("entry_point", "main");
}
else if(shaderLanguage == "cg")
{
vertexShader->setParameter("profiles", "vs_1_1 arbvp1");
vertexShader->setParameter("entry_point", "main");
}
// GLSL can only have one entry point "main".
vertexShader->load();
}
//Now that the shader is ready to be applied, apply it
StringUtil::StrStreamType materialSignature;
materialSignature << "BatchMat|";
materialSignature << ptrMat->getName() << "|";
if (m_bFadeEnabled)
{
materialSignature << m_fVisibleDist << "|";
materialSignature << m_fInvisibleDist << "|";
}
//Search for the desired material
示例2: ShaderHelperCg
//---------------------------------------------------------------------
void TerrainMaterialGeneratorC::SM2Profile::addTechnique(
const MaterialPtr& mat, const Terrain* terrain, TechniqueType tt)
{
Technique* tech = mat->createTechnique();
tech->setSchemeName("GBuffer");
// Only supporting one pass
Pass* pass = tech->createPass();
//pass->setName("NO_DEFERRED");
GpuProgramManager& gmgr = GpuProgramManager::getSingleton();
HighLevelGpuProgramManager& hmgr = HighLevelGpuProgramManager::getSingleton();
if (!mShaderGen)
{
if (hmgr.isLanguageSupported("cg"))
mShaderGen = OGRE_NEW ShaderHelperCg();
else
{
// todo
}
// check SM3 features
mSM3Available = GpuProgramManager::getSingleton().isSyntaxSupported("ps_3_0");
mSM4Available = GpuProgramManager::getSingleton().isSyntaxSupported("ps_4_0");
}
HighLevelGpuProgramPtr vprog = mShaderGen->generateVertexProgram(this, terrain, tt);
HighLevelGpuProgramPtr fprog = mShaderGen->generateFragmentProgram(this, terrain, tt);
pass->setVertexProgram(vprog->getName());
pass->setFragmentProgram(fprog->getName());
if (tt == HIGH_LOD || tt == RENDER_COMPOSITE_MAP)
{
// global normal map
TextureUnitState* tu = pass->createTextureUnitState();
tu->setTextureName(terrain->getTerrainNormalMap()->getName());
tu->setTextureAddressingMode(TextureUnitState::TAM_CLAMP);
// global colour map
if (terrain->getGlobalColourMapEnabled() && isGlobalColourMapEnabled())
{
tu = pass->createTextureUnitState(terrain->getGlobalColourMap()->getName());
tu->setTextureAddressingMode(TextureUnitState::TAM_CLAMP);
}
// light map
if (isLightmapEnabled())
{
tu = pass->createTextureUnitState(terrain->getLightmap()->getName());
tu->setTextureAddressingMode(TextureUnitState::TAM_CLAMP);
}
// blend maps
uint maxLayers = getMaxLayers(terrain);
uint numBlendTextures = std::min(terrain->getBlendTextureCount(maxLayers), terrain->getBlendTextureCount());
uint numLayers = std::min(maxLayers, static_cast<uint>(terrain->getLayerCount()));
for (uint i = 0; i < numBlendTextures; ++i)
{
tu = pass->createTextureUnitState(terrain->getBlendTextureName(i));
tu->setTextureAddressingMode(TextureUnitState::TAM_CLAMP);
}
// layer textures
for (uint i = 0; i < numLayers; ++i)
{
// diffuse / specular
pass->createTextureUnitState(terrain->getLayerTextureName(i, 0));
// normal / height
pass->createTextureUnitState(terrain->getLayerTextureName(i, 1));
}
}
else
{
// LOW_LOD textures
// composite map
TextureUnitState* tu = pass->createTextureUnitState();
tu->setTextureName(terrain->getCompositeMap()->getName());
tu->setTextureAddressingMode(TextureUnitState::TAM_CLAMP);
// That's it!
}
}
示例3: while
//.........这里部分代码省略.........
else
{
vertexProgSource += " gl_FrontColor = vec4(1.0, 1.0, 1.0, 1.0); \n";
}
}
if (fadeEnabled)
{
vertexProgSource +=
//Fade out in the distance
" float dist = distance(camPos.xz, gl_Vertex.xz); \n"
" gl_FrontColor.a *= (invisibleDist - dist) / fadeGap; \n";
}
unsigned texNum = 0;
for (unsigned short i = 0; i < subBatch->vertexData->vertexDeclaration->getElementCount(); ++i)
{
const VertexElement *el = subBatch->vertexData->vertexDeclaration->getElement(i);
if (el->getSemantic() == VES_TEXTURE_COORDINATES)
{
vertexProgSource +=
" gl_TexCoord[" + StringConverter::toString(texNum) + "] = gl_MultiTexCoord" + StringConverter::toString(texNum) + "; \n";
++texNum;
}
}
vertexProgSource +=
" gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; \n"
" gl_FogFragCoord = gl_Position.z; \n"
"}";
}
HighLevelGpuProgramPtr vertexShader = HighLevelGpuProgramManager::getSingleton().createProgram(
vertexProgName,
ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
shaderLanguage, GPT_VERTEX_PROGRAM);
vertexShader->setSource(vertexProgSource);
if (shaderLanguage == "hlsl")
{
vertexShader->setParameter("target", "vs_1_1");
vertexShader->setParameter("entry_point", "main");
}
else if(shaderLanguage == "cg")
{
vertexShader->setParameter("profiles", "vs_1_1 arbvp1");
vertexShader->setParameter("entry_point", "main");
}
// GLSL can only have one entry point "main".
vertexShader->load();
}
//Now that the shader is ready to be applied, apply it
StringUtil::StrStreamType materialSignature;
materialSignature << "BatchMat|";
materialSignature << mat->getName() << "|";
if (fadeEnabled){
materialSignature << visibleDist << "|";
materialSignature << invisibleDist << "|";
}
//Search for the desired material
MaterialPtr generatedMaterial = MaterialManager::getSingleton().getByName(materialSignature.str());
示例4:
//---------------------------------------------------------------------
void TerrainMaterialGeneratorA::SM2Profile::ShaderHelper::defaultFpParams(
const SM2Profile* prof, const Terrain* terrain, TechniqueType tt, const HighLevelGpuProgramPtr& prog)
{
GpuProgramParametersSharedPtr params = prog->getDefaultParameters();
params->setIgnoreMissingParams(true);
params->setNamedAutoConstant("ambient", GpuProgramParameters::ACT_AMBIENT_LIGHT_COLOUR);
params->setNamedAutoConstant("lightPosObjSpace", GpuProgramParameters::ACT_LIGHT_POSITION_OBJECT_SPACE, 0);
params->setNamedAutoConstant("lightDiffuseColour", GpuProgramParameters::ACT_LIGHT_DIFFUSE_COLOUR, 0);
params->setNamedAutoConstant("lightSpecularColour", GpuProgramParameters::ACT_LIGHT_SPECULAR_COLOUR, 0);
params->setNamedAutoConstant("eyePosObjSpace", GpuProgramParameters::ACT_CAMERA_POSITION_OBJECT_SPACE);
params->setNamedAutoConstant("fogColour", GpuProgramParameters::ACT_FOG_COLOUR);
if (prof->isShadowingEnabled(tt, terrain))
{
uint numTextures = 1;
if (prof->getReceiveDynamicShadowsPSSM())
{
PSSMShadowCameraSetup* pssm = prof->getReceiveDynamicShadowsPSSM();
numTextures = (uint)pssm->getSplitCount();
Vector4 splitPoints;
const PSSMShadowCameraSetup::SplitPointList& splitPointList = pssm->getSplitPoints();
// Populate from split point 1, not 0, since split 0 isn't useful (usually 0)
for (uint i = 1; i < numTextures; ++i)
{
splitPoints[i-1] = splitPointList[i];
}
params->setNamedConstant("pssmSplitPoints", splitPoints);
}
if (prof->getReceiveDynamicShadowsDepth())
{
size_t samplerOffset = (tt == HIGH_LOD) ? mShadowSamplerStartHi : mShadowSamplerStartLo;
for (uint i = 0; i < numTextures; ++i)
{
params->setNamedAutoConstant("inverseShadowmapSize" + StringConverter::toString(i),
GpuProgramParameters::ACT_INVERSE_TEXTURE_SIZE, i + samplerOffset);
}
}
}
// Explicitly bind samplers for GLSL
if ((prof->_getShaderLanguage() == "glsl") || (prof->_getShaderLanguage() == "glsles"))
{
int numSamplers = 0;
if (tt == LOW_LOD)
{
params->setNamedConstant("compositeMap", (int)numSamplers++);
}
else
{
params->setNamedConstant("globalNormal", (int)numSamplers++);
if (terrain->getGlobalColourMapEnabled() && prof->isGlobalColourMapEnabled())
{
params->setNamedConstant("globalColourMap", (int)numSamplers++);
}
if (prof->isLightmapEnabled())
{
params->setNamedConstant("lightMap", (int)numSamplers++);
}
uint maxLayers = prof->getMaxLayers(terrain);
uint numBlendTextures = std::min(terrain->getBlendTextureCount(maxLayers), terrain->getBlendTextureCount());
uint numLayers = std::min(maxLayers, static_cast<uint>(terrain->getLayerCount()));
// Blend textures - sampler definitions
for (uint i = 0; i < numBlendTextures; ++i)
{
params->setNamedConstant("blendTex" + StringConverter::toString(i), (int)numSamplers++);
}
// Layer textures - sampler definitions & UV multipliers
for (uint i = 0; i < numLayers; ++i)
{
params->setNamedConstant("difftex" + StringConverter::toString(i), (int)numSamplers++);
params->setNamedConstant("normtex" + StringConverter::toString(i), (int)numSamplers++);
}
uint numShadowTextures = 1;
if (prof->getReceiveDynamicShadowsPSSM())
numShadowTextures = (uint)prof->getReceiveDynamicShadowsPSSM()->getSplitCount();
for (uint i = 0; i < numShadowTextures; ++i)
{
if (prof->isShadowingEnabled(tt, terrain))
params->setNamedConstant("shadowMap" + StringConverter::toString(i), (int)numSamplers++);
}
}
}
}
示例5: bindSubShaders
//-----------------------------------------------------------------------------
void GLSLProgramProcessor::bindSubShaders(Program* program, GpuProgramPtr pGpuProgram)
{
if (program->getDependencyCount() > 0)
{
// Get all attached shaders so we do not attach shaders twice.
// maybe GLSLProgram should take care of that ( prevent add duplicate shaders )
String attachedShaders = pGpuProgram->getParameter("attach");
String subShaderDef = "";
for (unsigned int i=0; i < program->getDependencyCount(); ++i)
{
// Here we append _VS and _FS to the library shaders (so max each lib shader
// is compiled twice once as vertex and once as fragment shader)
String subShaderName = program->getDependency(i);
if (program->getType() == GPT_VERTEX_PROGRAM)
{
subShaderName += "_VS";
}
else
{
subShaderName += "_FS";
}
// Check if the library shader already compiled
if(!HighLevelGpuProgramManager::getSingleton().resourceExists(subShaderName))
{
// Create the library shader
HighLevelGpuProgramPtr pSubGpuProgram = HighLevelGpuProgramManager::getSingleton().createProgram(subShaderName,
ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, TargetLanguage, program->getType());
// Set the source name
String sourceName = program->getDependency(i) + "." + TargetLanguage;
pSubGpuProgram->setSourceFile(sourceName);
pSubGpuProgram->load();
// Prepend the current GLSL version
String versionLine = "#version " + StringConverter::toString(Root::getSingleton().getRenderSystem()->getNativeShadingLanguageVersion()) + "\n";
pSubGpuProgram->setSource(versionLine + pSubGpuProgram->getSource());
// If we have compile errors than stop processing
if (pSubGpuProgram->hasCompileError())
{
OGRE_EXCEPT(Exception::ERR_INTERNAL_ERROR,
"Could not compile shader library from the source file: " + sourceName,
"GLSLProgramProcessor::bindSubShaders" );
}
mLibraryPrograms.push_back(subShaderName);
}
// Check if the lib shader already attached to this shader
if (attachedShaders.find(subShaderName) == String::npos)
{
// Append the shader name to subShaders
subShaderDef += subShaderName + " ";
}
}
// Check if we have something to attach
if (subShaderDef.length() > 0)
{
pGpuProgram->setParameter("attach", subShaderDef);
}
}
}
示例6: generateHash
//-----------------------------------------------------------------------------
GpuProgramPtr ProgramManager::createGpuProgram(Program* shaderProgram,
ProgramWriter* programWriter,
const String& language,
const String& profiles,
const StringVector& profilesList,
const String& cachePath)
{
stringstream sourceCodeStringStream;
// Generate source code.
programWriter->writeSourceCode(sourceCodeStringStream, shaderProgram);
String source = sourceCodeStringStream.str();
// Generate program name.
String programName = generateHash(source);
if (shaderProgram->getType() == GPT_VERTEX_PROGRAM)
{
programName += "_VS";
}
else if (shaderProgram->getType() == GPT_FRAGMENT_PROGRAM)
{
programName += "_FS";
}
// Try to get program by name.
HighLevelGpuProgramPtr pGpuProgram =
HighLevelGpuProgramManager::getSingleton().getByName(
programName, ResourceGroupManager::INTERNAL_RESOURCE_GROUP_NAME);
if(pGpuProgram) {
return static_pointer_cast<GpuProgram>(pGpuProgram);
}
// Case the program doesn't exist yet.
// Create new GPU program.
pGpuProgram = HighLevelGpuProgramManager::getSingleton().createProgram(programName,
ResourceGroupManager::INTERNAL_RESOURCE_GROUP_NAME, language, shaderProgram->getType());
// Case cache directory specified -> create program from file.
if (!cachePath.empty())
{
const String programFullName = programName + "." + language;
const String programFileName = cachePath + programFullName;
std::ifstream programFile;
// Check if program file already exist.
programFile.open(programFileName.c_str());
// Case we have to write the program to a file.
if (!programFile)
{
std::ofstream outFile(programFileName.c_str());
if (!outFile)
return GpuProgramPtr();
outFile << source;
outFile.close();
}
else
{
// use program file version
StringStream buffer;
programFile >> buffer.rdbuf();
source = buffer.str();
}
}
pGpuProgram->setSource(source);
pGpuProgram->setParameter("entry_point", shaderProgram->getEntryPointFunction()->getName());
if (language == "hlsl")
{
// HLSL program requires specific target profile settings - we have to split the profile string.
StringVector::const_iterator it = profilesList.begin();
StringVector::const_iterator itEnd = profilesList.end();
for (; it != itEnd; ++it)
{
if (GpuProgramManager::getSingleton().isSyntaxSupported(*it))
{
pGpuProgram->setParameter("target", *it);
break;
}
}
pGpuProgram->setParameter("enable_backwards_compatibility", "true");
pGpuProgram->setParameter("column_major_matrices", StringConverter::toString(shaderProgram->getUseColumnMajorMatrices()));
}
pGpuProgram->setParameter("profiles", profiles);
pGpuProgram->load();
// Case an error occurred.
if (pGpuProgram->hasCompileError())
{
//! [debug_break]
//.........这里部分代码省略.........
示例7: main
GpuProgramPtr GBufferMaterialGeneratorImpl::generateVertexShader(MaterialGenerator::Perm permutation)
{
StringStream ss;
if(mIsGLSL)
{
ss << "#version 150" << std::endl;
ss << "in vec4 vertex;" << std::endl;
ss << "in vec3 normal;" << std::endl;
uint32 numTexCoords = (permutation & GBufferMaterialGenerator::GBP_TEXCOORD_MASK) >> 8;
for (uint32 i=0; i<numTexCoords; i++)
{
ss << "in vec2 uv" << i << ';' << std::endl;
}
if (permutation & GBufferMaterialGenerator::GBP_NORMAL_MAP)
{
ss << "in vec3 tangent;" << std::endl;
}
//TODO : Skinning inputs
ss << std::endl;
#ifdef WRITE_LINEAR_DEPTH
ss << "out vec3 oViewPos;" << std::endl;
#else
ss << "out float oDepth;" << std::endl;
#endif
ss << "out vec3 oNormal;" << std::endl;
if (permutation & GBufferMaterialGenerator::GBP_NORMAL_MAP)
{
ss << "out vec3 oTangent;" << std::endl;
ss << "out vec3 oBiNormal;" << std::endl;
}
for (uint32 i=0; i<numTexCoords; i++)
{
ss << "out vec2 oUv" << i << ";" << std::endl;
}
ss << std::endl;
ss << "uniform mat4 cWorldViewProj;" << std::endl;
ss << "uniform mat4 cWorldView;" << std::endl;
ss << "void main()" << std::endl;
ss << "{" << std::endl;
ss << " gl_Position = cWorldViewProj * vertex;" << std::endl;
ss << " oNormal = (cWorldView * vec4(normal,0)).xyz;" << std::endl;
if (permutation & GBufferMaterialGenerator::GBP_NORMAL_MAP)
{
ss << " oTangent = (cWorldView * vec4(tangent,0)).xyz;" << std::endl;
ss << " oBiNormal = cross(oNormal, oTangent);" << std::endl;
}
#ifdef WRITE_LINEAR_DEPTH
ss << " oViewPos = (cWorldView * vertex).xyz;" << std::endl;
#else
ss << " oDepth = gl_Position.w;" << std::endl;
#endif
for (uint32 i=0; i<numTexCoords; i++) {
ss << " oUv" << i << " = uv" << i << ';' << std::endl;
}
ss << "}" << std::endl;
String programSource = ss.str();
String programName = mBaseName + "VP_" + StringConverter::toString(permutation);
#if OGRE_DEBUG_MODE
LogManager::getSingleton().getDefaultLog()->logMessage(programSource);
#endif
// Create shader object
HighLevelGpuProgramPtr ptrProgram = HighLevelGpuProgramManager::getSingleton().createProgram(programName,
ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
"glsl", GPT_VERTEX_PROGRAM);
ptrProgram->setSource(programSource);
ptrProgram->setParameter("syntax", "glsl150");
const GpuProgramParametersSharedPtr& params = ptrProgram->getDefaultParameters();
params->setNamedAutoConstant("cWorldViewProj", GpuProgramParameters::ACT_WORLDVIEWPROJ_MATRIX);
params->setNamedAutoConstant("cWorldView", GpuProgramParameters::ACT_WORLDVIEW_MATRIX);
ptrProgram->load();
return GpuProgramPtr(ptrProgram);
}
else
{
示例8: if
void Shader::prepare()
{
// determining shader level and generating a part of the level string
std::string levelString = "_basic";
if (shaderLevel == LEVEL_INTERMEDIATE) {
levelString = "_intermediate";
} else if (shaderLevel == LEVEL_ADVANCED) {
levelString = "_advanced";
}
std::string vertexString;
std::string geometryString;
std::string fragmentString;
// trying to use actual shader level, choosing basic as default/backup
if (ResourceGroupManager::getSingleton()
.resourceExistsInAnyGroup(shaderName + levelString + ".vert")) {
vertexString = shaderName + levelString + ".vert";
} else {
vertexString = shaderName + "_basic.vert";
}
if (ResourceGroupManager::getSingleton()
.resourceExistsInAnyGroup(shaderName + levelString + ".geom")) {
geometryString = shaderName + levelString + ".geom";
} else {
geometryString = shaderName + "_basic.geom";
}
if (ResourceGroupManager::getSingleton()
.resourceExistsInAnyGroup(shaderName + levelString + ".frag")) {
fragmentString = shaderName + levelString + ".frag";
} else {
fragmentString = shaderName + "_basic.frag";
}
// creating new material
material = MaterialManager::getSingletonPtr()->create(materialName + shaderName,
ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
pass = material->getTechnique(0)->getPass(0);
// with dynamic lighting only geometry with normals will be displayed
pass->setLightingEnabled(true);
material->setReceiveShadows(true);
// loading vertex shader if there is one
if (ResourceGroupManager::getSingleton()
.resourceExistsInAnyGroup(vertexString)) {
HighLevelGpuProgramPtr vertex =
HighLevelGpuProgramManager::getSingletonPtr()->createProgram(
shaderName + "_v",
ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
"glsl", GpuProgramType::GPT_VERTEX_PROGRAM);
vertex->setSourceFile(vertexString);
pass->setVertexProgram(vertex->getName());
}
// loading geometry shader if there is one
if (ResourceGroupManager::getSingleton()
.resourceExistsInAnyGroup(geometryString)) {
geometry = HighLevelGpuProgramManager::getSingletonPtr()->createProgram(
shaderName + "_g",
ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, "glsl",
GpuProgramType::GPT_GEOMETRY_PROGRAM);
geometry->setSourceFile(geometryString);
pass->setGeometryProgram(geometry->getName());
}
// loading fragment shader if there is one
if (ResourceGroupManager::getSingleton()
.resourceExistsInAnyGroup(fragmentString)) {
HighLevelGpuProgramPtr fragment =
HighLevelGpuProgramManager::
getSingletonPtr()->createProgram(shaderName + "_f",
ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
"glsl", GpuProgramType::GPT_FRAGMENT_PROGRAM);
fragment->setSourceFile(fragmentString);
pass->setFragmentProgram(fragment->getName());
}
entity->getOgreEntity()->setMaterialName(material->getName());
}
示例9: mpFallbackBillboardSet
//.........这里部分代码省略.........
" oUv.y += vScroll; \n"
//Fog
" oFog = oPosition.z; \n"
"}";
}
else // OpenGL GLSL
{
vertexProg =
"uniform float uScroll; \n"
"uniform float vScroll; \n"
"uniform vec4 preRotatedQuad[4]; \n"
"void main() { \n"
//Face the camera
" vec4 vCenter = vec4( gl_Vertex.x, gl_Vertex.y, gl_Vertex.z, 1.0 ); \n"
" vec4 vScale = vec4( gl_Normal.x, gl_Normal.y, gl_Normal.x , 1.0 ); \n"
" gl_Position = gl_ModelViewProjectionMatrix * (vCenter + (preRotatedQuad[int(gl_Normal.z)] * vScale) ); \n"
//Color
" gl_FrontColor = gl_Color; \n"
//UV Scroll
" gl_TexCoord[0] = gl_MultiTexCoord0; \n"
" gl_TexCoord[0].x += uScroll; \n"
" gl_TexCoord[0].y += vScroll; \n"
//Fog
" gl_FogFragCoord = gl_Position.z; \n"
"}";
}
#if OGRE_VERSION_MAJOR <= 1
#if OGRE_VERSION_MINOR <= 8
HighLevelGpuProgramPtr vertexShader = HighLevelGpuProgramManager::getSingleton().getByName("Sprite_vp");
#else
HighLevelGpuProgramPtr vertexShader = HighLevelGpuProgramManager::getSingleton().getByName("Sprite_vp").staticCast<HighLevelGpuProgram>();
#endif
#endif
assert(vertexShader.isNull() && "Sprite_vp already exist");
vertexShader = HighLevelGpuProgramManager::getSingleton().createProgram(
"Sprite_vp", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, shaderLanguage, GPT_VERTEX_PROGRAM);
vertexShader->setSource(vertexProg);
// Set entry point for vertex program. GLSL can only have one entry point "main".
if (!s_isGLSL)
{
if (shaderLanguage == "hlsl")
{
vertexShader->setParameter("target", "vs_1_1");
vertexShader->setParameter("entry_point", "Sprite_vp");
}
else if(shaderLanguage == "cg")
{
vertexShader->setParameter("profiles", "vs_1_1 arbvp1");
vertexShader->setParameter("entry_point", "Sprite_vp");
}
else
{
assert(false && "Unknown shader language");
}
}
// compile vertex shader
vertexShader->load();
示例10: main_vp
void BillboardObject::init(const String& textureName,
const float initialSize,
const Vector3& position,
SceneNode* rootNode)
{
SceneManager* sceneMgr = rootNode->getCreator();
Vector3 finalPosition = position.normalisedCopy() * 1000.f;
static unsigned int bodyCount=0;
/// \todo These billboards are not 100% correct, might want to revisit them later
mBBSet = sceneMgr->createBillboardSet("SkyBillboardSet"+StringConverter::toString(bodyCount), 1);
mBBSet->setDefaultDimensions(550.f*initialSize, 550.f*initialSize);
mBBSet->setBillboardType(BBT_PERPENDICULAR_COMMON);
mBBSet->setCommonDirection( -position.normalisedCopy() );
mBBSet->setVisibilityFlags(RV_Sky);
mNode = rootNode->createChildSceneNode();
mNode->setPosition(finalPosition);
mNode->attachObject(mBBSet);
mBBSet->createBillboard(0,0,0);
mBBSet->setCastShadows(false);
mMaterial = MaterialManager::getSingleton().create("BillboardMaterial"+StringConverter::toString(bodyCount), ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
mMaterial->removeAllTechniques();
Pass* p = mMaterial->createTechnique()->createPass();
p->setSceneBlending(SBT_TRANSPARENT_ALPHA);
p->setDepthCheckEnabled(false);
p->setDepthWriteEnabled(false);
p->setSelfIllumination(1.0,1.0,1.0);
p->setDiffuse(0.0,0.0,0.0,1.0);
p->setAmbient(0.0,0.0,0.0);
p->setPolygonModeOverrideable(false);
p->createTextureUnitState(textureName);
mBBSet->setMaterialName("BillboardMaterial"+StringConverter::toString(bodyCount));
HighLevelGpuProgramManager& mgr = HighLevelGpuProgramManager::getSingleton();
HighLevelGpuProgramPtr vshader;
if (mgr.resourceExists("BBO_VP"))
vshader = mgr.getByName("BBO_VP");
else
vshader = mgr.createProgram("BBO_VP", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, "cg", GPT_VERTEX_PROGRAM);
vshader->setParameter("profiles", "vs_2_x arbvp1");
vshader->setParameter("entry_point", "main_vp");
StringUtil::StrStreamType outStream;
outStream <<
"void main_vp( \n"
" float4 position : POSITION, \n"
" in float2 uv : TEXCOORD0, \n"
" out float2 oUV : TEXCOORD0, \n"
" out float4 oPosition : POSITION, \n"
" uniform float4x4 worldViewProj \n"
") \n"
"{ \n"
" oUV = uv; \n"
" oPosition = mul( worldViewProj, position ); \n"
"}";
vshader->setSource(outStream.str());
vshader->load();
vshader->getDefaultParameters()->setNamedAutoConstant("worldViewProj", GpuProgramParameters::ACT_WORLDVIEWPROJ_MATRIX);
mMaterial->getTechnique(0)->getPass(0)->setVertexProgram(vshader->getName());
HighLevelGpuProgramPtr fshader;
if (mgr.resourceExists("BBO_FP"))
fshader = mgr.getByName("BBO_FP");
else
fshader = mgr.createProgram("BBO_FP", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, "cg", GPT_FRAGMENT_PROGRAM);
fshader->setParameter("profiles", "ps_2_x arbfp1");
fshader->setParameter("entry_point", "main_fp");
StringUtil::StrStreamType outStream2;
outStream2 <<
"void main_fp( \n"
" in float2 uv : TEXCOORD0, \n"
" out float4 oColor : COLOR, \n";
if (RenderingManager::useMRT()) outStream2 <<
" out float4 oColor1 : COLOR1, \n";
outStream2 <<
" uniform sampler2D texture : TEXUNIT0, \n"
" uniform float4 diffuse, \n"
" uniform float4 emissive \n"
") \n"
"{ \n"
" float4 tex = tex2D(texture, uv); \n"
" oColor = float4(emissive.xyz,1) * tex * float4(1,1,1,diffuse.a); \n";
if (RenderingManager::useMRT()) outStream2 <<
" oColor1 = float4(1, 0, 0, 1); \n";
outStream2 <<
"}";
fshader->setSource(outStream2.str());
fshader->load();
fshader->getDefaultParameters()->setNamedAutoConstant("diffuse", GpuProgramParameters::ACT_SURFACE_DIFFUSE_COLOUR);
fshader->getDefaultParameters()->setNamedAutoConstant("emissive", GpuProgramParameters::ACT_SURFACE_EMISSIVE_COLOUR);
mMaterial->getTechnique(0)->getPass(0)->setFragmentProgram(fshader->getName());
bodyCount++;
}
示例11: ColourValue
void SkyManager::create()
{
/// \todo preload all the textures and meshes that are used for sky rendering
// Create overlay used for thunderstorm
MaterialPtr material = MaterialManager::getSingleton().create( "ThunderMaterial", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME );
Pass* pass = material->getTechnique(0)->getPass(0);
pass->setSceneBlending(SBT_TRANSPARENT_ALPHA);
mThunderTextureUnit = pass->createTextureUnitState();
mThunderTextureUnit->setColourOperationEx(LBX_SOURCE1, LBS_MANUAL, LBS_CURRENT, ColourValue(1.f, 1.f, 1.f));
mThunderTextureUnit->setAlphaOperation(LBX_SOURCE1, LBS_MANUAL, LBS_CURRENT, 0.5f);
OverlayManager& ovm = OverlayManager::getSingleton();
mThunderOverlay = ovm.create( "ThunderOverlay" );
OverlayContainer* overlay_panel;
overlay_panel = (OverlayContainer*)ovm.createOverlayElement("Panel", "ThunderPanel");
overlay_panel->_setPosition(0, 0);
overlay_panel->_setDimensions(1, 1);
overlay_panel->setMaterialName( "ThunderMaterial" );
overlay_panel->show();
mThunderOverlay->add2D(overlay_panel);
mThunderOverlay->hide();
mSecunda = new Moon("textures\\tx_secunda_full.dds", 0.5, Vector3(-0.4, 0.4, 0.5), mRootNode);
mSecunda->setType(Moon::Type_Secunda);
mSecunda->setRenderQueue(RQG_SkiesEarly+4);
mMasser = new Moon("textures\\tx_masser_full.dds", 0.75, Vector3(-0.4, 0.4, 0.5), mRootNode);
mMasser->setRenderQueue(RQG_SkiesEarly+3);
mMasser->setType(Moon::Type_Masser);
mSun = new BillboardObject("textures\\tx_sun_05.dds", 1, Vector3(0.4, 0.4, 0.4), mRootNode);
mSun->setRenderQueue(RQG_SkiesEarly+4);
mSunGlare = new BillboardObject("textures\\tx_sun_flash_grey_05.dds", 3, Vector3(0.4, 0.4, 0.4), mRootNode);
mSunGlare->setRenderQueue(RQG_SkiesLate);
mSunGlare->setVisibilityFlags(RV_Glare);
HighLevelGpuProgramManager& mgr = HighLevelGpuProgramManager::getSingleton();
// Stars
/// \todo sky_night_02.nif (available in Bloodmoon)
MeshPtr mesh = NifOgre::NIFLoader::load("meshes\\sky_night_01.nif");
Entity* night1_ent = mSceneMgr->createEntity("meshes\\sky_night_01.nif");
night1_ent->setRenderQueueGroup(RQG_SkiesEarly+1);
night1_ent->setVisibilityFlags(RV_Sky);
night1_ent->setCastShadows(false);
mAtmosphereNight = mRootNode->createChildSceneNode();
mAtmosphereNight->attachObject(night1_ent);
// Stars vertex shader
HighLevelGpuProgramPtr stars_vp = mgr.createProgram("Stars_VP", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
"cg", GPT_VERTEX_PROGRAM);
stars_vp->setParameter("profiles", "vs_2_x arbvp1");
stars_vp->setParameter("entry_point", "main_vp");
StringUtil::StrStreamType outStream4;
outStream4 <<
"void main_vp( \n"
" float4 position : POSITION, \n"
" in float2 uv : TEXCOORD0, \n"
" out float2 oUV : TEXCOORD0, \n"
" out float oFade : TEXCOORD1, \n"
" out float4 oPosition : POSITION, \n"
" uniform float4x4 worldViewProj \n"
") \n"
"{ \n"
" oUV = uv; \n"
" oFade = (position.z > 50) ? 1.f : 0.f; \n"
" oPosition = mul( worldViewProj, position ); \n"
"}";
stars_vp->setSource(outStream4.str());
stars_vp->load();
stars_vp->getDefaultParameters()->setNamedAutoConstant("worldViewProj", GpuProgramParameters::ACT_WORLDVIEWPROJ_MATRIX);
// Stars fragment shader
HighLevelGpuProgramPtr stars_fp = mgr.createProgram("Stars_FP", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
"cg", GPT_FRAGMENT_PROGRAM);
stars_fp->setParameter("profiles", "ps_2_x arbfp1");
stars_fp->setParameter("entry_point", "main_fp");
StringUtil::StrStreamType outStream5;
outStream5 <<
"void main_fp( \n"
" in float2 uv : TEXCOORD0, \n"
" out float4 oColor : COLOR, \n";
if (RenderingManager::useMRT()) outStream5 <<
" out float4 oColor1 : COLOR1, \n";
outStream5 <<
" in float fade : TEXCOORD1, \n"
" uniform sampler2D texture : TEXUNIT0, \n"
" uniform float opacity, \n"
" uniform float4 diffuse, \n"
" uniform float4 emissive \n"
") \n"
"{ \n"
" oColor = tex2D(texture, uv) * float4(emissive.xyz, 1) * float4(1,1,1,fade*diffuse.a); \n";
if (RenderingManager::useMRT()) outStream5 <<
" oColor1 = float4(1, 0, 0, 1); \n";
outStream5 <<
"}";
stars_fp->setSource(outStream5.str());
//.........这里部分代码省略.........
示例12: init
Moon::Moon( const String& textureName,
const float initialSize,
const Vector3& position,
SceneNode* rootNode)
{
init(textureName, initialSize, position, rootNode);
HighLevelGpuProgramManager& mgr = HighLevelGpuProgramManager::getSingleton();
HighLevelGpuProgramPtr vshader;
if (mgr.resourceExists("Moon_VP"))
vshader = mgr.getByName("Moon_VP");
else
vshader = mgr.createProgram("Moon_VP", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, "cg", GPT_VERTEX_PROGRAM);
vshader->setParameter("profiles", "vs_2_x arbvp1");
vshader->setParameter("entry_point", "main_vp");
StringUtil::StrStreamType outStream;
outStream <<
"void main_vp( \n"
" float4 position : POSITION, \n"
" in float2 uv : TEXCOORD0, \n"
" out float2 oUV : TEXCOORD0, \n"
" out float4 oPosition : POSITION, \n"
" uniform float4x4 worldViewProj \n"
") \n"
"{ \n"
" oUV = uv; \n"
" oPosition = mul( worldViewProj, position ); \n"
"}";
vshader->setSource(outStream.str());
vshader->load();
vshader->getDefaultParameters()->setNamedAutoConstant("worldViewProj", GpuProgramParameters::ACT_WORLDVIEWPROJ_MATRIX);
mMaterial->getTechnique(0)->getPass(0)->setVertexProgram(vshader->getName());
HighLevelGpuProgramPtr fshader;
if (mgr.resourceExists("Moon_FP"))
fshader = mgr.getByName("Moon_FP");
else
fshader = mgr.createProgram("Moon_FP", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, "cg", GPT_FRAGMENT_PROGRAM);
fshader->setParameter("profiles", "ps_2_x arbfp1");
fshader->setParameter("entry_point", "main_fp");
StringUtil::StrStreamType outStream2;
outStream2 <<
"void main_fp( \n"
" in float2 uv : TEXCOORD0, \n"
" out float4 oColor : COLOR, \n";
if (RenderingManager::useMRT()) outStream2 <<
" out float4 oColor1 : COLOR1, \n";
outStream2 <<
" uniform sampler2D texture : TEXUNIT0, \n"
" uniform float4 skyColour, \n"
" uniform float4 diffuse, \n"
" uniform float4 emissive \n"
") \n"
"{ \n"
" float4 tex = tex2D(texture, uv); \n"
" oColor = float4(emissive.xyz,1) * tex; \n";
if (RenderingManager::useMRT()) outStream2 <<
" oColor1 = float4(1, 0, 0, 1); \n";
outStream2 <<
// use a circle for the alpha (compute UV distance to center)
// looks a bit bad because its not filtered on the edges,
// but it's cheaper than a seperate alpha texture.
" float sqrUVdist = pow(uv.x-0.5,2) + pow(uv.y-0.5, 2); \n"
" oColor.a = diffuse.a * (sqrUVdist >= 0.24 ? 0 : 1); \n"
" oColor.rgb += (1-tex.a) * oColor.a * skyColour.rgb; \n"//fill dark side of moon with skycolour
" oColor.rgb += (1-diffuse.a) * skyColour.rgb; \n"//fade bump
"}";
fshader->setSource(outStream2.str());
fshader->load();
fshader->getDefaultParameters()->setNamedAutoConstant("diffuse", GpuProgramParameters::ACT_SURFACE_DIFFUSE_COLOUR);
fshader->getDefaultParameters()->setNamedAutoConstant("emissive", GpuProgramParameters::ACT_SURFACE_EMISSIVE_COLOUR);
mMaterial->getTechnique(0)->getPass(0)->setFragmentProgram(fshader->getName());
setVisibility(1.0);
mPhase = Moon::Phase_Full;
}
示例13: GpuProgramUsage
//---------------------------------------------------------------------
FixedFuncPrograms * FixedFuncEmuShaderManager::_createShaderPrograms( const String & generatorName,
const VertexBufferDeclaration & vertexBufferDeclaration, FixedFuncState & fixedFuncState )
{
const String vertexProgramName = "VS";
const String fragmentProgramName = "FP";
FixedFuncEmuShaderGenerator * fixedFuncEmuShaderGenerator = mFixedFuncEmuShaderGeneratorMap[generatorName];
String shaderSource = fixedFuncEmuShaderGenerator->getShaderSource(
vertexProgramName,
fragmentProgramName,
vertexBufferDeclaration,
fixedFuncState
);
// Vertex program details
GpuProgramUsage * vertexProgramUsage = new GpuProgramUsage(GPT_VERTEX_PROGRAM);
// Fragment program details
GpuProgramUsage * fragmentProgramUsage = new GpuProgramUsage(GPT_FRAGMENT_PROGRAM);
HighLevelGpuProgramPtr vs;
HighLevelGpuProgramPtr fs;
class LoadFromSourceGpuProgram : public HighLevelGpuProgram
{
public:
void doLoadFromSource(void)
{
loadFromSource();
};
};
static size_t shaderCount = 0;
shaderCount++;
vs = HighLevelGpuProgramManager::getSingleton().
createProgram("VS_" + StringConverter::toString(shaderCount), ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
fixedFuncEmuShaderGenerator->getLanguageName(), GPT_VERTEX_PROGRAM);
vs->setSource(shaderSource);
vs->setParameter("entry_point",vertexProgramName);
vs->setParameter("target",fixedFuncEmuShaderGenerator->getVpTarget());
static_cast<LoadFromSourceGpuProgram *>(vs.get())->doLoadFromSource();
vertexProgramUsage->setProgram(GpuProgramPtr(vs));
vertexProgramUsage->setParameters(vs->createParameters());
fs = HighLevelGpuProgramManager::getSingleton().
createProgram("FS_" + StringConverter::toString(shaderCount), ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
fixedFuncEmuShaderGenerator->getLanguageName(), GPT_FRAGMENT_PROGRAM);
fs->setSource(shaderSource);
fs->setParameter("entry_point",fragmentProgramName);
fs->setParameter("target",fixedFuncEmuShaderGenerator->getFpTarget());
static_cast<LoadFromSourceGpuProgram *>(fs.get())->doLoadFromSource();
fragmentProgramUsage->setProgram(GpuProgramPtr(fs));
fragmentProgramUsage->setParameters(fs->createParameters());
FixedFuncPrograms * newPrograms = fixedFuncEmuShaderGenerator->createFixedFuncPrograms();
mLanguage2State2Declaration2ProgramsMap[generatorName][fixedFuncState][vertexBufferDeclaration] = newPrograms;
newPrograms->setVertexProgramUsage(vertexProgramUsage);
newPrograms->setFragmentProgramUsage(fragmentProgramUsage);
newPrograms->setFixedFuncState(fixedFuncState);
mProgramsToDeleteAtTheEnd.push_back(newPrograms);
return newPrograms;
}
示例14: if
//-----------------------------------------------------------------------------
GpuProgramPtr ProgramManager::createGpuProgram(Program* shaderProgram,
ProgramWriter* programWriter,
const String& language,
const String& profiles,
const StringVector& profilesList,
const String& cachePath)
{
#if OGRE_PLATFORM == OGRE_PLATFORM_ANDROID
Ogre::StringSerialiser sourceCodeStringStream;
#else
std::stringstream sourceCodeStringStream;
#endif
_StringHash stringHash;
uint32 programHashCode;
String programName;
// Generate source code.
programWriter->writeSourceCode(sourceCodeStringStream, shaderProgram);
// Generate program hash code.
programHashCode = static_cast<uint32>(stringHash(sourceCodeStringStream.str()));
// Generate program name.
programName = StringConverter::toString(programHashCode);
if (shaderProgram->getType() == GPT_VERTEX_PROGRAM)
{
programName += "_VS";
}
else if (shaderProgram->getType() == GPT_FRAGMENT_PROGRAM)
{
programName += "_FS";
}
HighLevelGpuProgramPtr pGpuProgram;
// Try to get program by name.
pGpuProgram = HighLevelGpuProgramManager::getSingleton().getByName(programName);
// Case the program doesn't exist yet.
if (pGpuProgram.isNull())
{
// Create new GPU program.
pGpuProgram = HighLevelGpuProgramManager::getSingleton().createProgram(programName,
ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, language, shaderProgram->getType());
// Case cache directory specified -> create program from file.
if (cachePath.empty() == false)
{
const String programFullName = programName + "." + language;
const String programFileName = cachePath + programFullName;
std::ifstream programFile;
bool writeFile = true;
// Check if program file already exist.
programFile.open(programFileName.c_str());
// Case no matching file found -> we have to write it.
if (!programFile)
{
writeFile = true;
}
else
{
writeFile = false;
programFile.close();
}
// Case we have to write the program to a file.
if (writeFile)
{
std::ofstream outFile(programFileName.c_str());
if (!outFile)
return GpuProgramPtr();
outFile << sourceCodeStringStream.str();
outFile.close();
}
pGpuProgram->setSourceFile(programFullName);
}
// No cache directory specified -> create program from system memory.
else
{
pGpuProgram->setSource(sourceCodeStringStream.str());
}
pGpuProgram->setParameter("entry_point", shaderProgram->getEntryPointFunction()->getName());
// HLSL program requires specific target profile settings - we have to split the profile string.
if (language == "hlsl")
{
StringVector::const_iterator it = profilesList.begin();
//.........这里部分代码省略.........
示例15: if
//---------------------------------------------------------------------
//---------------------------------------------------------------------
void ShadowVolumeExtrudeProgram::initialise(void)
{
if (!mInitialised)
{
String syntax;
bool vertexProgramFinite[OGRE_NUM_SHADOW_EXTRUDER_PROGRAMS] =
{
false, false, false, false,
true, true, true, true
};
bool vertexProgramDebug[OGRE_NUM_SHADOW_EXTRUDER_PROGRAMS] =
{
false, true, false, true,
false, true, false, true
};
Light::LightTypes vertexProgramLightTypes[OGRE_NUM_SHADOW_EXTRUDER_PROGRAMS] =
{
Light::LT_POINT, Light::LT_POINT,
Light::LT_DIRECTIONAL, Light::LT_DIRECTIONAL,
Light::LT_POINT, Light::LT_POINT,
Light::LT_DIRECTIONAL, Light::LT_DIRECTIONAL
};
// load hardware extrusion programs for point & dir lights
if (GpuProgramManager::getSingleton().isSyntaxSupported("arbvp1"))
{
// ARBvp1
syntax = "arbvp1";
}
else if (GpuProgramManager::getSingleton().isSyntaxSupported("vs_1_1"))
{
syntax = "vs_1_1";
}
else if (GpuProgramManager::getSingleton().isSyntaxSupported("vs_4_0"))
{
syntax = "vs_4_0";
}
else
{
OGRE_EXCEPT(Exception::ERR_INTERNAL_ERROR,
"Vertex programs are supposedly supported, but neither "
"arbvp1, vs_1_1 nor vs_4_0 syntaxes are present.",
"SceneManager::initShadowVolumeMaterials");
}
// Create all programs
for (unsigned short v = 0; v < OGRE_NUM_SHADOW_EXTRUDER_PROGRAMS; ++v)
{
// Create debug extruders
if (GpuProgramManager::getSingleton().getByName(
programNames[v]).isNull())
{
if (syntax == "vs_4_0")
{
HighLevelGpuProgramPtr vp =
HighLevelGpuProgramManager::getSingleton().createProgram(
programNames[v], ResourceGroupManager::INTERNAL_RESOURCE_GROUP_NAME,
"hlsl", GPT_VERTEX_PROGRAM);
vp->setSource(ShadowVolumeExtrudeProgram::getProgramSource(
vertexProgramLightTypes[v], syntax,
vertexProgramFinite[v], vertexProgramDebug[v]));
vp->setParameter("target", syntax);
vp->setParameter("entry_point", "vs_main");
vp->load();
if (frgProgramName.empty())
{
frgProgramName = "Ogre/ShadowFrgProgram";
HighLevelGpuProgramPtr fp =
HighLevelGpuProgramManager::getSingleton().createProgram(
frgProgramName, ResourceGroupManager::INTERNAL_RESOURCE_GROUP_NAME,
"hlsl", GPT_FRAGMENT_PROGRAM);
fp->setSource(mGeneralFs_4_0);
fp->setParameter("target", "ps_4_0");
fp->setParameter("entry_point", "fs_main");
fp->load();
}
}
else
{
GpuProgramPtr vp =
GpuProgramManager::getSingleton().createProgramFromString(
programNames[v], ResourceGroupManager::INTERNAL_RESOURCE_GROUP_NAME,
ShadowVolumeExtrudeProgram::getProgramSource(
vertexProgramLightTypes[v], syntax,
vertexProgramFinite[v], vertexProgramDebug[v]),
GPT_VERTEX_PROGRAM, syntax);
vp->load();
}
}
}
mInitialised = true;
}
}