public IntPtr GetBufferForWriting(Vector2I size) { unsafe { if (this.size != size) { Clear(); this.size = size; if (size != Vector2I.Zero) { //create buffer buffer = NativeUtility.Alloc(NativeUtility.MemoryAllocationType.SoundAndVideo, size.X * size.Y * 4); byte *pBuffer = (byte *)buffer; int z = 0; for (int n = 0; n < size.X * size.Y; n++) { pBuffer[z + 0] = 0; pBuffer[z + 1] = 0; pBuffer[z + 2] = 0; pBuffer[z + 3] = 255; z += 4; } } } needUpdateTexture = true; return(buffer); } }
// public bool Init() { try { texture = ComponentUtility.CreateComponent <Component_Image>(null, true, false); texture.CreateType = Component_Image.TypeEnum._2D; texture.CreateSize = new Vector2I(imageSizeRender, imageSizeRender); texture.CreateMipmaps = false; texture.CreateFormat = imageFormat; texture.CreateUsage = Component_Image.Usages.RenderTarget; texture.CreateFSAA = 0; texture.Enabled = true; var renderTexture = texture.Result.GetRenderTarget(0, 0); viewport = renderTexture.AddViewport(false, true); viewport.AllowRenderScreenLabels = false; viewport.UpdateBegin += Viewport_UpdateBegin; textureRead = ComponentUtility.CreateComponent <Component_Image>(null, true, false); textureRead.CreateType = Component_Image.TypeEnum._2D; textureRead.CreateSize = texture.CreateSize; textureRead.CreateMipmaps = false; textureRead.CreateFormat = texture.CreateFormat; textureRead.CreateUsage = Component_Image.Usages.ReadBack | Component_Image.Usages.BlitDestination; textureRead.CreateFSAA = 0; textureRead.Enabled = true; //!!!! textureRead.Result.PrepareNativeObject(); var imageDataBytes = PixelFormatUtility.GetNumElemBytes(imageFormat) * imageSizeRender * imageSizeRender; imageData = NativeUtility.Alloc(NativeUtility.MemoryAllocationType.Utility, imageDataBytes); } catch (Exception e) { Log.Warning(e.Message); return(false); } return(true); }
internal unsafe bool Init() { GUID devGuid = deviceGuid; void */*IDirectInputDevice8*/ directInputDeviceTemp = null; int hr = IDirectInput.CreateDevice( WindowsInputDeviceManager.Instance.DirectInput, ref devGuid, out directInputDeviceTemp, null); if (Wrapper.FAILED(hr)) { Log.Warning("DirectInputJoystickDevice: Cannot create device \"{0}\" ({1}).", Name, DInput.GetOutString(DInput.DXGetErrorStringW(hr))); return(false); } directInputDevice = (IDirectInputDevice8 *)directInputDeviceTemp; // get capabilities DIDEVCAPS caps = new DIDEVCAPS(); caps.dwSize = (uint)sizeof(DIDEVCAPS); hr = IDirectInputDevice8.GetCapabilities(directInputDevice, ref caps); if (Wrapper.FAILED(hr)) { Log.Warning("DirectInputJoystickDevice: Cannot get device capabilities \"{0}\".", Name); return(false); } //buttons Button[] buttons = new Button[caps.dwButtons]; for (int n = 0; n < buttons.Length; n++) { buttons[n] = new Button((JoystickButtons)n, n); } //povs POV[] povs = new POV[caps.dwPOVs]; for (int n = 0; n < povs.Length; n++) { povs[n] = new JoystickInputDevice.POV((JoystickPOVs)n); } // setup hr = IDirectInputDevice8.SetDataFormat(directInputDevice, DInput.Get_c_dfDIJoystick2()); if (Wrapper.FAILED(hr)) { Log.Warning("DirectInputJoystickDevice: Cannot set device data format \"{0}\".", Name); return(false); } hr = IDirectInputDevice8.SetCooperativeLevel(directInputDevice, WindowsInputDeviceManager.Instance.WindowHandle, DInput.DISCL_EXCLUSIVE | DInput.DISCL_FOREGROUND); if (Wrapper.FAILED(hr)) { Log.Warning("DirectInputJoystickDevice: Cannot set device " + "cooperative level \"{0}\".", Name); return(false); } //------------------------------------------------------------------- // setup size for buffered input DIPROPDWORD dibuf = new DIPROPDWORD(); dibuf.diph.dwSize = (uint)sizeof(DIPROPDWORD); dibuf.diph.dwHeaderSize = (uint)sizeof(DIPROPHEADER); dibuf.diph.dwHow = DInput.DIPH_DEVICE; dibuf.diph.dwObj = 0; dibuf.dwData = BufferSize; GUID *bufferSizeGuid = (GUID *)DInput.getDIPROP_BUFFERSIZE(); hr = IDirectInputDevice8.SetProperty(directInputDevice, bufferSizeGuid, ref dibuf.diph); if (Wrapper.FAILED(hr)) { Log.Warning("DirectInputJoystickDevice: Cannot set device buffer size \"{0}\".", Name); return(false); } deviceDataBuffer = NativeUtility.Alloc(NativeUtility.MemoryAllocationType.Utility, sizeof(DIDEVICEOBJECTDATA) * BufferSize); //-------------------------------------------------------------------- temporarySliderCount = 0; temporaryAxisList = new List <JoystickInputDevice.Axis>(); tempDeviceForEnumerate = this; hr = IDirectInputDevice8.EnumObjects(directInputDevice, EnumDeviceObjectsHandler, null, DInput.DIDFT_ALL); tempDeviceForEnumerate = null; if (Wrapper.FAILED(hr)) { Log.Warning("DirectInputJoystickDevice: Cannot enumerate device objects \"{0}\".", Name); return(false); } //axes Axis[] axes = temporaryAxisList.ToArray(); temporaryAxisList = null; //sliders Slider[] sliders = new Slider[temporarySliderCount]; for (int n = 0; n < sliders.Length; n++) { sliders[n] = new JoystickInputDevice.Slider((JoystickSliders)n); } //forceFeedbackController ForceFeedbackController forceFeedbackController = null; if ((caps.dwFlags & DInput.DIDC_FORCEFEEDBACK) != 0) { forceFeedbackController = new DirectInputForceFeedbackController(directInputDevice, this); } //initialize data InitDeviceData(buttons, axes, povs, sliders, forceFeedbackController); return(true); }
unsafe internal protected override void PostAttachVirtualChannel() { OpenALSoundWorld.criticalSection.Enter(); currentSound = (OpenALSound)CurrentVirtualChannel.Sound; OpenALSampleSound sampleSound = currentSound as OpenALSampleSound; OpenALDataBufferSound streamSound = null; OpenALFileStreamSound fileStreamSound = null; OpenALDataStreamSound dataStreamSound = null; if (sampleSound == null) { streamSound = currentSound as OpenALDataBufferSound; fileStreamSound = currentSound as OpenALFileStreamSound; dataStreamSound = currentSound as OpenALDataStreamSound; } //create streamBuffer if (fileStreamSound != null) { var stream = OpenALSoundWorld.CreateFileStream2(currentSound.Name); if (stream == null) { //Log.Warning( string.Format( "Creating sound \"{0}\" failed.", currentSound.Name ) ); PreDetachVirtualChannel(); OpenALSoundWorld.criticalSection.Leave(); return; } fileStreamVorbisFile = new VorbisFile.File(); fileStreamVorbisFileReader = new VorbisFileReader(stream, true); if (!fileStreamVorbisFileReader.OpenVorbisFile(fileStreamVorbisFile)) { //Log.Warning( string.Format( "Creating sound \"{0}\" failed.", currentSound.Name ) ); PreDetachVirtualChannel(); OpenALSoundWorld.criticalSection.Leave(); return; } int numSamples = (int)fileStreamVorbisFile.pcm_total(-1); fileStreamVorbisFile.get_info(-1, out var channels, out var frequency); //int numSamples = (int)fileStreamSound.vorbisFile.pcm_total( -1 ); //fileStreamSound.vorbisFile.get_info( -1, out var channels, out var rate ); if (fileStreamSound.needConvertToMono) { channels = 1; } int sizeInBytes = numSamples * channels * 2; int bufferSize = sizeInBytes / 2; if (bufferSize > 65536 * 4) { bufferSize = 65536 * 4; } streamBufferSize = bufferSize; streamBuffer = (byte *)NativeUtility.Alloc(NativeUtility.MemoryAllocationType.SoundAndVideo, streamBufferSize); } if (dataStreamSound != null) { streamBufferSize = dataStreamSound.bufferSize; streamBuffer = (byte *)NativeUtility.Alloc(NativeUtility.MemoryAllocationType.SoundAndVideo, streamBufferSize); } //create al data buffers if (fileStreamSound != null || dataStreamSound != null) { if (streamAlDataBuffers == null) { streamAlDataBuffers = new int[2]; fixed(int *pAlDataBuffers = streamAlDataBuffers) Al.alGenBuffers(streamAlDataBuffers.Length, pAlDataBuffers); if (OpenALSoundWorld.CheckError()) { streamAlDataBuffers = null; PreDetachVirtualChannel(); OpenALSoundWorld.criticalSection.Leave(); return; } } } //init source bool mode3d = (currentSound.Mode & SoundModes.Mode3D) != 0; bool loop = (currentSound.Mode & SoundModes.Loop) != 0; if (alSource == 0) { Al.alGenSources(1, out alSource); if (OpenALSoundWorld.CheckError()) { PreDetachVirtualChannel(); OpenALSoundWorld.criticalSection.Leave(); return; } } if (sampleSound != null) { //no stream sound Al.alSourcei(alSource, Al.AL_BUFFER, sampleSound.alBuffer); if (OpenALSoundWorld.CheckError()) { PreDetachVirtualChannel(); OpenALSoundWorld.criticalSection.Leave(); return; } } if (fileStreamSound != null) { FileStreamStartPlay(); } if (dataStreamSound != null) { DataStreamStartPlay(); } Al.alSourcei(alSource, Al.AL_SOURCE_RELATIVE, mode3d ? Al.AL_FALSE : Al.AL_TRUE); //update parameters if (mode3d) { UpdatePosition2(); UpdateVelocity2(); } else { UpdatePan2(); } UpdatePitch2(); UpdateVolume2(); if (sampleSound != null) { Al.alSourcei(alSource, Al.AL_LOOPING, loop ? Al.AL_TRUE : Al.AL_FALSE); } else { Al.alSourcei(alSource, Al.AL_LOOPING, Al.AL_FALSE); } if (OpenALSoundWorld.CheckError()) { PreDetachVirtualChannel(); OpenALSoundWorld.criticalSection.Leave(); return; } UpdateTime2(); //unpause Al.alSourcePlay(alSource); OpenALSoundWorld.CheckError(); //add to fileStreamChannels if (fileStreamSound != null) { OpenALSoundWorld.fileStreamRealChannels.Add(this); } OpenALSoundWorld.criticalSection.Leave(); }