GetFloatPointer() public method

public GetFloatPointer ( int physicalIndex ) : float[]
physicalIndex int
return float[]
		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;
					}
				}
			}
		}
Ejemplo n.º 2
0
		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 );
				}
			}
		}
        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 );
                    }
				}
			}
		}
Ejemplo n.º 4
0
		/// <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 );
					}
				}
			}
		}
Ejemplo n.º 5
0
        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;
                        }
                    }
		        }
	        }
		}
Ejemplo n.º 6
0
		/// <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 );
					}
				}
			}
		}