예제 #1
0
        void BlendAnimation2D(FChromaSDKSceneEffect effect, FChromaSDKDeviceFrameIndex deviceFrameIndex, int device, Device2D device2D, string animationName,
                              int[] colors, int[] tempColors)
        {
            int size       = GetColorArraySize2D(device2D);
            int frameId    = deviceFrameIndex._mFrameIndex[device];
            int frameCount = ChromaAnimationAPI.GetFrameCountName(animationName);

            if (frameId < frameCount)
            {
                //cout << animationName << ": " << (1 + frameId) << " of " << frameCount << endl;
                float duration;
                int   animationId = ChromaAnimationAPI.GetAnimation(animationName);
                ChromaAnimationAPI.GetFrame(animationId, frameId, out duration, tempColors, size);
                for (int i = 0; i < size; ++i)
                {
                    int color1    = colors[i];                  //target
                    int tempColor = tempColors[i];              //source

                    // BLEND
                    int color2;
                    switch (effect._mBlend)
                    {
                    case EChromaSDKSceneBlend.SB_None:
                        color2 = tempColor;                                 //source
                        break;

                    case EChromaSDKSceneBlend.SB_Invert:
                        if (tempColor != 0)                                 //source
                        {
                            color2 = InvertColor(tempColor);                //source inverted
                        }
                        else
                        {
                            color2 = 0;
                        }
                        break;

                    case EChromaSDKSceneBlend.SB_Threshold:
                        color2 = Thresh(effect._mPrimaryColor, effect._mSecondaryColor, tempColor);                                 //source
                        break;

                    case EChromaSDKSceneBlend.SB_Lerp:
                    default:
                        color2 = MultiplyNonZeroTargetColorLerp(effect._mPrimaryColor, effect._mSecondaryColor, tempColor);                                 //source
                        break;
                    }

                    // MODE
                    switch (effect._mMode)
                    {
                    case EChromaSDKSceneMode.SM_Max:
                        colors[i] = MaxColor(color1, color2);
                        break;

                    case EChromaSDKSceneMode.SM_Min:
                        colors[i] = MinColor(color1, color2);
                        break;

                    case EChromaSDKSceneMode.SM_Average:
                        colors[i] = AverageColor(color1, color2);
                        break;

                    case EChromaSDKSceneMode.SM_Multiply:
                        colors[i] = MultiplyColor(color1, color2);
                        break;

                    case EChromaSDKSceneMode.SM_Add:
                        colors[i] = AddColor(color1, color2);
                        break;

                    case EChromaSDKSceneMode.SM_Subtract:
                        colors[i] = SubtractColor(color1, color2);
                        break;

                    case EChromaSDKSceneMode.SM_Replace:
                    default:
                        if (color2 != 0)
                        {
                            colors[i] = color2;
                        }
                        break;
                    }
                }
                deviceFrameIndex._mFrameIndex[device] = (frameId + frameCount + effect._mSpeed) % frameCount;
            }
        }
예제 #2
0
        public void Start()
        {
            ChromaSDK.APPINFOTYPE appInfo = new APPINFOTYPE();
            appInfo.Title       = "Razer Chroma CSharp Game Loop Sample Application";
            appInfo.Description = "A sample application using Razer Chroma SDK";

            appInfo.Author_Name    = "Razer";
            appInfo.Author_Contact = "https://developer.razer.com/chroma";

            //appInfo.SupportedDevice =
            //    0x01 | // Keyboards
            //    0x02 | // Mice
            //    0x04 | // Headset
            //    0x08 | // Mousepads
            //    0x10 | // Keypads
            //    0x20   // ChromaLink devices
            appInfo.SupportedDevice = (0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20);
            //    0x01 | // Utility. (To specifiy this is an utility application)
            //    0x02   // Game. (To specifiy this is a game);
            appInfo.Category = 1;
            _mResult         = ChromaAnimationAPI.InitSDK(ref appInfo);
            switch (_mResult)
            {
            case RazerErrors.RZRESULT_DLL_NOT_FOUND:
                Console.Error.WriteLine("Chroma DLL is not found! {0}", RazerErrors.GetResultString(_mResult));
                return;

            case RazerErrors.RZRESULT_DLL_INVALID_SIGNATURE:
                Console.Error.WriteLine("Chroma DLL has an invalid signature! {0}", RazerErrors.GetResultString(_mResult));
                return;

            case RazerErrors.RZRESULT_SUCCESS:
                Thread.Sleep(100);
                break;

            default:
                Console.Error.WriteLine("Failed to initialize Chroma! {0}", RazerErrors.GetResultString(_mResult));
                return;
            }

            // setup scene
            _mScene = new FChromaSDKScene();

            FChromaSDKSceneEffect effect = new FChromaSDKSceneEffect();

            effect._mAnimation = "Animations/Landscape";
            effect._mSpeed     = 1;
            effect._mBlend     = EChromaSDKSceneBlend.SB_None;
            effect._mState     = false;
            effect._mMode      = EChromaSDKSceneMode.SM_Add;
            _mScene._mEffects.Add(effect);
            _mIndexLandscape = (int)_mScene._mEffects.Count - 1;

            effect             = new FChromaSDKSceneEffect();
            effect._mAnimation = "Animations/Fire";
            effect._mSpeed     = 1;
            effect._mBlend     = EChromaSDKSceneBlend.SB_None;
            effect._mState     = false;
            effect._mMode      = EChromaSDKSceneMode.SM_Add;
            _mScene._mEffects.Add(effect);
            _mIndexFire = (int)_mScene._mEffects.Count - 1;

            effect             = new FChromaSDKSceneEffect();
            effect._mAnimation = "Animations/Rainbow";
            effect._mSpeed     = 1;
            effect._mBlend     = EChromaSDKSceneBlend.SB_None;
            effect._mState     = false;
            effect._mMode      = EChromaSDKSceneMode.SM_Add;
            _mScene._mEffects.Add(effect);
            _mIndexRainbow = (int)_mScene._mEffects.Count - 1;

            effect             = new FChromaSDKSceneEffect();
            effect._mAnimation = "Animations/Spiral";
            effect._mSpeed     = 1;
            effect._mBlend     = EChromaSDKSceneBlend.SB_None;
            effect._mState     = false;
            effect._mMode      = EChromaSDKSceneMode.SM_Add;
            _mScene._mEffects.Add(effect);
            _mIndexSpiral = (int)_mScene._mEffects.Count - 1;
        }