本文整理汇总了C#中Axiom.Graphics.GpuProgramParameters.GetFloatPointer方法的典型用法代码示例。如果您正苦于以下问题:C# GpuProgramParameters.GetFloatPointer方法的具体用法?C# GpuProgramParameters.GetFloatPointer怎么用?C# GpuProgramParameters.GetFloatPointer使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Axiom.Graphics.GpuProgramParameters
的用法示例。
在下文中一共展示了GpuProgramParameters.GetFloatPointer方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: BindProgramParameters
public override void BindProgramParameters( GpuProgramParameters parms, GpuProgramParameters.GpuParamVariability mask )
{
// only supports float constants
var floatStruct = parms.FloatLogicalBufferStruct;
foreach ( var i in floatStruct.Map )
{
if ( ( i.Value.Variability & mask ) != 0 )
{
var logicalIndex = i.Key;
var pFloat = parms.GetFloatPointer( i.Value.PhysicalIndex ).Pointer;
// Iterate over the params, set in 4-float chunks (low-level)
for ( var j = 0; j < i.Value.CurrentSize; j += 4 )
{
Gl.glSetFragmentShaderConstantATI( Gl.GL_CON_0_ATI + logicalIndex, pFloat.Pin() );
pFloat.UnPin();
pFloat += 4;
++logicalIndex;
}
}
}
}
示例2: CopyMatchingNamedConstantsFrom
public void CopyMatchingNamedConstantsFrom( GpuProgramParameters source )
{
if ( this._namedConstants == null || source == null )
{
return;
}
var srcToDestNamedMap = new Dictionary<int, string>();
foreach ( var i in source._namedConstants.Map )
{
var paramName = i.Key;
var olddef = i.Value;
var newdef = FindNamedConstantDefinition( paramName, false );
if ( newdef == null )
{
continue;
}
// Copy data across, based on smallest common definition size
var srcsz = olddef.ElementSize*olddef.ArraySize;
var destsz = newdef.ElementSize*newdef.ArraySize;
var sz = Utility.Min( srcsz, destsz );
if ( newdef.IsFloat )
{
Memory.Copy( source.GetFloatPointer( olddef.PhysicalIndex ).Pointer,
GetFloatPointer( newdef.PhysicalIndex ).Pointer, sz*sizeof ( float ) );
}
else
{
Memory.Copy( source.GetIntPointer( olddef.PhysicalIndex ).Pointer, GetIntPointer( newdef.PhysicalIndex ).Pointer,
sz*sizeof ( int ) );
}
// we'll use this map to resolve autos later
// ignore the [0] aliases
if ( !paramName.EndsWith( "[0]" ) )
{
srcToDestNamedMap.Add( olddef.PhysicalIndex, paramName );
}
}
foreach ( var i in source.autoConstants )
{
var autoEntry = i;
// find dest physical index
if ( srcToDestNamedMap.ContainsKey( autoEntry.PhysicalIndex ) )
{
var miSecond = srcToDestNamedMap[ autoEntry.PhysicalIndex ];
if ( autoEntry.FData != 0 )
{
SetNamedAutoConstantReal( miSecond, autoEntry.Type, autoEntry.FData );
}
else
{
SetNamedAutoConstant( miSecond, autoEntry.Type, autoEntry.Data );
}
}
}
// Copy shared param sets
foreach ( var usage in source._sharedParamSets )
{
if ( !IsUsingSharedParameters( usage.Name ) )
{
AddSharedParameters( usage.SharedParameters );
}
}
}
示例3: BindProgramParameters
public override void BindProgramParameters(GpuProgramParameters parms, GpuProgramParameters.GpuParamVariability mask)
{
// program constants done internally by compiler for local
if ( parms.HasFloatConstants )
{
for ( int index = 0; index < parms.FloatConstantCount; index++ )
{
using (var entry = parms.GetFloatPointer(index))
{
// send the params 4 at a time
throw new AxiomException( "Update this!" );
Gl.glSetFragmentShaderConstantATI( Gl.GL_CON_0_ATI + index, entry.Pointer );
}
}
}
}
示例4: BindProgramParameters
/// <summary>
/// Called to pass parameters to the Nvparse program.
/// </summary>
/// <param name="parms"></param>
public override void BindProgramParameters(GpuProgramParameters parms, GpuProgramParameters.GpuParamVariability mask)
{
// Register combiners uses 2 constants per texture stage (0 and 1)
// We have stored these as (stage * 2) + const_index
if ( parms.HasFloatConstants )
{
for ( int index = 0; index < parms.FloatConstantCount; index++ )
{
var entry = parms.GetFloatPointer( index );
{
int combinerStage = Gl.GL_COMBINER0_NV + ( index / 2 );
int pname = Gl.GL_CONSTANT_COLOR0_NV + ( index % 2 );
// send the params 4 at a time
throw new AxiomException("Update this!");
Gl.glCombinerStageParameterfvNV( combinerStage, pname, entry.Pointer );
}
}
}
}
示例5: BindProgramParameters
public override void BindProgramParameters(GpuProgramParameters parms, GpuProgramParameters.GpuParamVariability mask)
{
var type = programType;
// only supports float constants
var floatStruct = parms.FloatLogicalBufferStruct;
foreach (var i in floatStruct.Map)
{
if ((i.Value.Variability & mask) != 0)
{
var logicalIndex = i.Key;
var pFloat = parms.GetFloatPointer();
var ptr = i.Value.PhysicalIndex;
{
for (var j = 0; j < i.Value.CurrentSize; j += 4)
{
var x = pFloat[ ptr + j ];
var y = pFloat[ ptr + j + 1 ];
var z = pFloat[ ptr + j + 2 ];
var w = pFloat[ ptr + j + 3 ];
Gl.glProgramLocalParameter4fARB( type, logicalIndex, x, y, z, w );
++logicalIndex;
}
}
}
}
}
示例6: BindProgramParameters
/// <summary>
/// Binds params by index to the vp30 program.
/// </summary>
/// <param name="parms"></param>
public override void BindProgramParameters(GpuProgramParameters parms, GpuProgramParameters.GpuParamVariability mask)
{
if ( parms.HasFloatConstants )
{
for ( int index = 0; index < parms.FloatConstantCount; index++ )
{
using (var entry = parms.GetFloatPointer( index ))
{
// send the params 4 at a time
throw new AxiomException( "Update this!" );
Gl.glProgramParameter4fvNV( programType, index, entry.Pointer );
}
}
}
}