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; } }
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; }