Beispiel #1
0
        private unsafe SC_message_object_jitter[][] _FrameVRTWO(jitter_sc[] jitter_sc, SC_message_object_jitter[][] _sc_jitter_tasks)
        {
            for (int i = 0; i < 3;)
            {
                _failed_screen_capture = 0;
                try
                {
                    _desktopFrame = _desktopDupe.ScreenCapture(0);
                }
                catch (Exception ex)
                {
                    _desktopDupe           = new SC_SharpDX_ScreenCapture(0, 0, D3D.device);
                    _failed_screen_capture = 1;
                }
                i++;
                if (_failed_screen_capture == 0)
                {
                    break;
                }
            }


            /*Matrix tempmat = hmd_matrix * rotatingMatrixForPelvis * hmdmatrixRot;
             *
             * Quaternion otherQuat;
             * Quaternion.RotationMatrix(ref tempmat, out otherQuat);
             *
             *
             * Vector3 direction_feet_forward;
             * Vector3 direction_feet_right;
             * Vector3 direction_feet_up;
             *
             * direction_feet_forward = sc_maths._getDirection(Vector3.ForwardRH, otherQuat);
             * direction_feet_right = sc_maths._getDirection(Vector3.Right, otherQuat);
             * direction_feet_up = sc_maths._getDirection(Vector3.Up, otherQuat);
             *
             * if (thumbStickLeft[0].X > 0.15f)
             * {
             *  movePos += direction_feet_right * speedPos * thumbStickLeft[0].X;
             * }
             * else if (thumbStickLeft[0].X < -0.15f)
             * {
             *  movePos -= direction_feet_right * speedPos * -thumbStickLeft[0].X;
             * }
             *
             * if (thumbStickLeft[0].Y > 0.15f)
             * {
             *  movePos += direction_feet_forward * speedPos * thumbStickLeft[0].Y;
             * }
             * else if (thumbStickLeft[0].Y < -0.15f)
             * {
             *  movePos -= direction_feet_forward * speedPos * -thumbStickLeft[0].Y;
             * }
             *
             * //Vector3 resulter;
             * //Vector3.TransformCoordinate(ref _hmdPoser, ref WorldMatrix, out resulter);
             * //var someMatrix = hmd_matrix * finalRotationMatrix;
             *
             * OFFSETPOS = originPos + movePos;// + _hmdPoser; //_hmdPoser
             * //OFFSETPOS.Y += _hmdPoser.Y;*/



            //START OF PHYSICS ENGINE STEPS
            if (_start_background_worker_01 == 0)
            {
                if (_can_work_physics == 1)
                {
                    var main_thread_update = new Thread(() =>
                    {
                        try
                        {
                            //MainWindow.MessageBox((IntPtr)0, "threadstart succes", "sc core systems message", 0);
                            Stopwatch _this_thread_ticks_01 = new Stopwatch();
                            _this_thread_ticks_01.Start();

                            _thread_looper:

                            for (int xx = 0; xx < MainWindow._physics_engine_instance_x; xx++)
                            {
                                for (int yy = 0; yy < MainWindow._physics_engine_instance_y; yy++)
                                {
                                    for (int zz = 0; zz < MainWindow._physics_engine_instance_z; zz++)
                                    {
                                        var indexer0 = xx + MainWindow._physics_engine_instance_x * (yy + MainWindow._physics_engine_instance_y * zz);

                                        try
                                        {
                                            for (int x = 0; x < MainWindow.world_width; x++)
                                            {
                                                for (int y = 0; y < MainWindow.world_height; y++)
                                                {
                                                    for (int z = 0; z < MainWindow.world_depth; z++)
                                                    {
                                                        var indexer1         = x + MainWindow.world_width * (y + MainWindow.world_height * z);
                                                        object _some_data_00 = (object)_sc_jitter_tasks[indexer0][indexer1]._world_data[0];
                                                        World _jitter_world  = (World)_some_data_00;

                                                        if (_jitter_world != null)
                                                        {
                                                            /*if (deltaTime > 1.0f * 0.0075f)
                                                             * {
                                                             *  deltaTime = 1.0f * 0.0075f;
                                                             * }
                                                             * else if (deltaTime < 1.0f * 0.005f)
                                                             * {
                                                             *  deltaTime = 1.0f * 0.005f;
                                                             * }*/
                                                            if (deltaTime > 1.0f * 0.01f)
                                                            {
                                                                deltaTime = 1.0f * 0.01f;
                                                            }

                                                            _jitter_world.Step(deltaTime, true);
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                        catch
                                        {
                                        }
                                    }
                                }
                            }
                            //MessageBox((IntPtr)0, _this_thread_ticks.ElapsedTicks + "", "sc core systems message", 0);
                            //Console.WriteLine("ticks: " + _this_thread_ticks.ElapsedTicks);
                            Thread.Sleep(1);
                            goto _thread_looper;
                        }
                        catch (Exception ex)
                        {
                        }
                    }, 0);

                    main_thread_update.IsBackground = true;
                    //main_thread_update.SetApartmentState(ApartmentState.STA);
                    main_thread_update.Start();



                    /*
                     * var tasker = new Task(() =>
                     * {
                     *
                     * });
                     * tasker.Start();*/



                    /*BackgroundWorker_00 = new BackgroundWorker();
                     * BackgroundWorker_00.DoWork += (object sender, DoWorkEventArgs argers) =>
                     * {
                     *
                     * };
                     *
                     * BackgroundWorker_00.RunWorkerCompleted += delegate (object sender, RunWorkerCompletedEventArgs argers)
                     * {
                     *
                     * };
                     *
                     * BackgroundWorker_00.RunWorkerAsync();*/



                    BackgroundWorker_00         = new BackgroundWorker();
                    BackgroundWorker_00.DoWork += (object sender, DoWorkEventArgs argers) =>
                    {
                        //MainWindow.MessageBox((IntPtr)0, "threadstart succes", "sc core systems message", 0);
                        Stopwatch _this_thread_ticks_01 = new Stopwatch();
                        _this_thread_ticks_01.Start();

_thread_looper:

                        //_sc_jitter_tasks = _graphics_sec.loop_worlds(_sc_jitter_tasks, originRot, rotatingMatrix, hmdmatrixRot, hmd_matrix, rotatingMatrixForPelvis, _rightTouchMatrix, _leftTouchMatrix);
                        _sc_jitter_tasks = _graphics_sec.loop_worlds(_sc_jitter_tasks, originRot, rotatingMatrix, hmdmatrixRot, Matrix.Identity, rotatingMatrixForPelvis, Matrix.Identity, Matrix.Identity);

                        //_ticks_watch.Restart();

                        //Console.WriteLine(_ticks_watch.Elapsed.Ticks);
                        Thread.Sleep(1);
                        goto _thread_looper;
                    };

                    BackgroundWorker_00.RunWorkerCompleted += delegate(object sender, RunWorkerCompletedEventArgs argers)
                    {
                    };

                    BackgroundWorker_00.RunWorkerAsync();



                    _start_background_worker_01 = 1;
                }
            }
            //END OF PHYSICS ENGINE STEPS



            try
            {
                if (_can_work_physics == 1)
                {
                    _sc_jitter_tasks = _graphics_sec.sc_write_to_buffer(_sc_jitter_tasks);
                }
            }
            catch (Exception ex)
            {
                MainWindow.MessageBox((IntPtr)0, "" + ex.ToString(), "sc core systems message", 0);
            }



            /*if (writetobuffer == 0)
             * {
             *  if (_can_work_physics == 1)
             *  {
             *
             *  }
             *
             *  writetobuffer = 1;
             * }*/


            /*
             * D3D.result = D3D.OVR.SubmitFrame(D3D.sessionPtr, 0L, IntPtr.Zero, ref D3D.layerEyeFov);
             * D3D.WriteErrorDetails(D3D.OVR, D3D.result, "Failed to submit the frame of the current layers.");
             * D3D.DeviceContext.CopyResource(D3D.mirrorTextureD3D, D3D.BackBuffer);
             * //D3D.SwapChain.Present(0, PresentFlags.None); //crap visuals returning to only spheroids.
             */



            //###SC start physics on frame 1 instead of 0
            _can_work_physics         = 1;
            _can_work_physics_objects = 1;
            //###SC start physics on frame 1 instead of 0
            return(_sc_jitter_tasks);
        }
Beispiel #2
0
        protected override SC_message_object_jitter[][] init_update_variables(SC_message_object_jitter[][] _sc_jitter_tasks, sccsVD4VE_LightNWithoutVr.sc_core.sc_system_configuration configuration, IntPtr hwnd, sc_console.sc_console_writer _writer)
        {
            try
            {
                startTime = DateTime.Now;


                HWND = hwnd;

                _configuration = configuration;

                _currentWriter = _writer;


                //ReadKeyboard();
                //Camera = new DCamera();

                //swtch_for_last_pos = new int[MainWindow._physics_engine_instance_x * MainWindow._physics_engine_instance_y * MainWindow._physics_engine_instance_z][];

                //RAYCAST STUFF
                //_some_reset_for_applying_force = new int[MainWindow._physics_engine_instance_x * MainWindow._physics_engine_instance_y * MainWindow._physics_engine_instance_z][];
                //_some_last_frame_vector = new JVector[MainWindow._physics_engine_instance_x * MainWindow._physics_engine_instance_y * MainWindow._physics_engine_instance_z][][];
                //_some_last_frame_rigibodies = new RigidBody[MainWindow._physics_engine_instance_x * MainWindow._physics_engine_instance_y * MainWindow._physics_engine_instance_z][][];



                Thread main_thread_update = new Thread(() =>
                {
                    _thread_looper:

                    try
                    {
                        DoWork(0);
                    }
                    catch (Exception ex)
                    {
                    }
                    Thread.Sleep(1);
                    goto _thread_looper;

                    //ShutDown();
                    //ShutDownGraphics();
                }, 0);

                main_thread_update.IsBackground = true;
                main_thread_update.SetApartmentState(ApartmentState.STA);
                main_thread_update.Start();

                Camera = new _sc_camera();

                _shaderManager = new SC_ShaderManager();
                _shaderManager.Initialize(D3D.Device, HWND);

                _desktopDupe = new SC_SharpDX_ScreenCapture(0, 0, D3D.device);

                _graphics_sec    = new sc_graphics_sec();
                _sc_jitter_tasks = _graphics_sec._sc_create_world_objects(_sc_jitter_tasks);
            }
            catch
            {
            }
            return(_sc_jitter_tasks);
        }