I created a quick example in C# to demonstrate how render targets work. I learned a lot of this from [How To] Using render targets by @throwarray and I highly suggest you check out his post.
This was a quick script that I threw together just to demonstrate how to use render targets with the Mugshot sign that your player holds when creating a character in GTA Online.
public Main() { Tick += OnTick; } private async Task OnTick() { if (Game.IsControlJustReleased(1, Control.SelectCharacterFranklin) && API.GetLastInputMethod(17) == true) { DoStuff(); } } private async void DoStuff() { string MaleAnimDict = "mp_character_creation@customise@male_a"; int player = API.GetPlayerPed(-1); API.RequestAnimDict(MaleAnimDict); while (!API.HasAnimDictLoaded(MaleAnimDict)) { await Delay(0); }; API.TaskPlayAnim(player, MaleAnimDict, "loop", 8, -8, -1, 49, 0, false, false, false); int SignObject1 = API.GetHashKey("prop_police_id_board"); int SignObject2 = API.GetHashKey("prop_police_id_text"); int SignProp1 = API.CreateObject(SignObject1, 1, 1, 1, true, true, false); int SignProp2 = API.CreateObject(SignObject2, 1, 1, 1, true, true, false); API.AttachEntityToEntity(SignProp1, player, API.GetPedBoneIndex(API.GetPlayerPed(-1), 58868), 0.12f, 0.24f, 0.0f, 5.0f, 0.0f, 70.0f, true, true, false, false, 2, true); API.AttachEntityToEntity(SignProp2, player, API.GetPedBoneIndex(API.GetPlayerPed(-1), 58868), 0.12f, 0.24f, 0.0f, 5.0f, 0.0f, 70.0f, true, true, false, false, 2, true); int ScaleformHandle = CreateScaleformHandle("ID_Text", SignObject2); int ScaleformMovie = API.RequestScaleformMovie("MUGSHOT_BOARD_01"); while(!API.HasScaleformMovieLoaded(ScaleformMovie)) { await Delay(0); } while(API.HasScaleformMovieLoaded(ScaleformMovie)) { API.PushScaleformMovieFunction(ScaleformMovie, "SET_BOARD"); API.PushScaleformMovieFunctionParameterString("Line 1"); API.PushScaleformMovieFunctionParameterString("Line 3"); API.PushScaleformMovieFunctionParameterString("Line 4"); API.PushScaleformMovieFunctionParameterString("Line 2"); API.PushScaleformMovieFunctionParameterInt(0); // No visible effect API.PushScaleformMovieFunctionParameterInt(5); // GTA Online Character level API.PushScaleformMovieFunctionParameterInt(0); // No visible effect API.PopScaleformMovieFunctionVoid(); API.SetTextRenderId(ScaleformHandle); Function.Call((Hash)0x40332D115A898AF5, ScaleformMovie, true); API.SetUiLayer(4); Function.Call((Hash)0xc6372ecd45d73bcd, ScaleformMovie, true); API.DrawScaleformMovie(ScaleformMovie, 0.4f, 0.35f, 0.8f, 0.75f, 255, 255, 255, 255, 255); API.SetTextRenderId(API.GetDefaultScriptRendertargetRenderId()); Function.Call((Hash)0x40332D115A898AF5, ScaleformMovie, false); await Delay(0); } } // Credits to throwarray converted function in his post from lua to C# private int CreateScaleformHandle(string name, int model) { int handle = 0; if (!API.IsNamedRendertargetRegistered(name)) { API.RegisterNamedRendertarget(name, false); } if (!API.IsNamedRendertargetLinked((uint)model)) { API.LinkNamedRendertarget((uint)model); } if (API.IsNamedRendertargetRegistered(name)) { handle = API.GetNamedRendertargetRenderId(name); } return handle; }