GetIntConstant() public method

public GetIntConstant ( int i ) : IntConstantEntry
i int
return IntConstantEntry
Ejemplo n.º 1
0
        public override void BindGpuProgramParameters(GpuProgramType gptype, GpuProgramParameters parms, GpuProgramParameters.GpuParamVariability variability)
        {
            // special case pass iteration
            if (variability == GpuProgramParameters.GpuParamVariability.PassIterationNumber)
            {
                BindGpuProgramPassIterationParameters(gptype);
                return;
            }

            if ((variability & GpuProgramParameters.GpuParamVariability.Global) != 0)
            {
                // D3D9 doesn't support shared constant buffers, so use copy routine
                parms.CopySharedParams();
            }

            switch ( gptype )
            {
                case GpuProgramType.Vertex:
                    activeVertexGpuProgramParameters = parms;

                    if ( parms.HasFloatConstants )
                    {
                        for ( var index = 0; index < parms.FloatConstantCount; index++ )
                        {
                            var entry = parms.GetFloatConstant( index );

                            if ( entry.isSet )
                            {
                                ActiveD3D9Device.SetVertexShaderConstant(index, entry.val, 0, 1);
                            }
                        }
                    }
                    if (parms.HasIntConstants)
                    {
                        for (var index = 0; index < parms.IntConstantCount; index++)
                        {
                            var entry = parms.GetIntConstant(index);

                            if (entry.isSet)
                            {
                                ActiveD3D9Device.SetVertexShaderConstant(index, entry.val, 0, 1);
                            }
                        }
                    }

                    break;

                case GpuProgramType.Fragment:
                    activeFragmentGpuProgramParameters = parms;

                    if (parms.HasFloatConstants)
                    {
                        for (var index = 0; index < parms.FloatConstantCount; index++)
                        {
                            var entry = parms.GetFloatConstant(index);

                            if (entry.isSet)
                            {
                                ActiveD3D9Device.SetPixelShaderConstant(index, entry.val, 0, 1);
                            }
                        }
                    }
                    if ( parms.HasIntConstants )
                    {
                        for ( var index = 0; index < parms.IntConstantCount; index++ )
                        {
                            var entry = parms.GetIntConstant( index );

                            if ( entry.isSet )
                            {
                                ActiveD3D9Device.SetPixelShaderConstant(index, entry.val, 0, 1);
                            }
                        }
                    }

                    
                    break;
            }
        }
 protected bool IntConstantDifferentFromCache(GpuProgramParameters parms, Object[] intConstants, int index)
 {
     GpuProgramParameters.IntConstantEntry e = parms.GetIntConstant(index);
     if (!e.isSet)
         return false;
     int[] c = (int[])intConstants[index];
     return c == null || !(c[0] == e.val[0] && c[1] == e.val[1] && c[2] == e.val[2] && c[3] == e.val[3]);
 }
        public override void BindGpuProgramParameters(GpuProgramType type, GpuProgramParameters parms)
        {
            switch(type) {
            case GpuProgramType.Vertex:
                if(parms.HasIntConstants) {
                    if (cache.useConstantCache) {
                        foreach (IntArrayAndOffset arrayAndOffset in GetIntConstantArrays(parms, cache.intShaderConstants))
                            device.SetVertexShaderConstant(arrayAndOffset.offset, arrayAndOffset.array);
                    }
                    else {
                        for(int index = 0; index < parms.IntConstantCount; index++) {
                            GpuProgramParameters.IntConstantEntry entry = parms.GetIntConstant(index);
                            if(entry.isSet)
                                device.SetVertexShaderConstant(index, entry.val);
                        }
                    }
                }

                if(parms.HasFloatConstants) {
                    if (cache.useConstantCache) {
                        foreach (FloatArrayAndOffset arrayAndOffset in GetFloatConstantArrays(parms, cache.floatShaderConstants))
                            device.SetVertexShaderConstant(arrayAndOffset.offset, arrayAndOffset.array);
                    }
                    else
                        device.SetVertexShaderConstant(0, parms.floatConstantsArray);
                }
                break;

            case GpuProgramType.Fragment:
                if(parms.HasIntConstants) {
                    if (cache.useConstantCache) {
                        foreach (IntArrayAndOffset arrayAndOffset in GetIntConstantArrays(parms, cache.intPixelConstants))
                            device.SetPixelShaderConstant(arrayAndOffset.offset, arrayAndOffset.array);
                    }
                    else {
                        for(int index = 0; index < parms.IntConstantCount; index++) {
                            GpuProgramParameters.IntConstantEntry entry = parms.GetIntConstant(index);
                            if(entry.isSet)
                                device.SetPixelShaderConstant(index, entry.val);
                        }
                    }
                }
                if(parms.HasFloatConstants) {
                    if (cache.useConstantCache) {
                        foreach (FloatArrayAndOffset arrayAndOffset in GetFloatConstantArrays(parms, cache.floatPixelConstants))
                            device.SetPixelShaderConstant(arrayAndOffset.offset, arrayAndOffset.array);
                    }
                    else
                        device.SetPixelShaderConstant(0, parms.floatConstantsArray);
                }
                break;
            }
        }
 protected int[] GetIntConstantArrayStartingWith(GpuProgramParameters parms, Object[] intConstants, int firstIndex, int count)
 {
     int[] array = new int[count * 4];
     for (int i = 0; i < count; i++) {
         GpuProgramParameters.IntConstantEntry e = parms.GetIntConstant(firstIndex + i);
         if (!e.isSet) {
             for (int j=0; j<4; j++)
                 array[i * 4 + j] = 0;
         }
         else {
             for (int j=0; j<4; j++)
                 array[i * 4 + j] = e.val[j];
         }
         int[] cacheConstant = (int[])intConstants[firstIndex + i];
         if (cacheConstant == null) {
             cacheConstant = new int[4];
             intConstants[firstIndex + i] = cacheConstant;
         }
         for (int j=0; j<4; j++)
             cacheConstant[j] = array[i * 4 + j];
     }
     return array;
 }