From bb1e9e09f2b99d8b45c47b6f0d4ba74cc38e7569 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Tue, 16 Feb 2010 23:41:31 +1300 Subject: [PATCH] killed homebrew AL interop; using Tao.OpenAL now instead --- OpenRa.Game/Game.cs | 2 ++ OpenRa.Game/Graphics/Renderer.cs | 24 ++++++++++++------- OpenRa.Game/OpenRa.Game.csproj | 2 +- OpenRa.Game/Sound.cs | 41 ++++++++++++++++---------------- 4 files changed, 40 insertions(+), 29 deletions(-) diff --git a/OpenRa.Game/Game.cs b/OpenRa.Game/Game.cs index 992c7ed510..a76a79e135 100644 --- a/OpenRa.Game/Game.cs +++ b/OpenRa.Game/Game.cs @@ -124,6 +124,7 @@ namespace OpenRa Sound.Initialize(); PerfHistory.items["render"].hasNormalTick = false; PerfHistory.items["batches"].hasNormalTick = false; + PerfHistory.items["text"].hasNormalTick = false; Game.controller = controller; ChangeMap(mapName); @@ -193,6 +194,7 @@ namespace OpenRa PerfHistory.items["render"].Tick(); PerfHistory.items["batches"].Tick(); + PerfHistory.items["text"].Tick(); } public static void SyncLobbyInfo(string data) diff --git a/OpenRa.Game/Graphics/Renderer.cs b/OpenRa.Game/Graphics/Renderer.cs index cbc34ea389..7968a5f927 100644 --- a/OpenRa.Game/Graphics/Renderer.cs +++ b/OpenRa.Game/Graphics/Renderer.cs @@ -146,18 +146,26 @@ namespace OpenRa.Graphics public void DrawText(string text, int2 pos, Color c) { - Bitmap b = RenderTextToBitmap(text, fDebug, c); - textSheet.Texture.SetData(b); - rgbaRenderer.DrawSprite(textSprite, pos.ToFloat2(), "chrome"); - rgbaRenderer.Flush(); + using (new PerfSample("text")) + { + var size = MeasureText(text); + Bitmap b = RenderTextToBitmap(text, fDebug, c); + textSheet.Texture.SetData(b); + rgbaRenderer.DrawSprite(textSprite, pos.ToFloat2(), "chrome"); + rgbaRenderer.Flush(); + } } public void DrawText2(string text, int2 pos, Color c) { - Bitmap b = RenderTextToBitmap(text, fTitle, c); - textSheet.Texture.SetData(b); - rgbaRenderer.DrawSprite(textSprite, pos.ToFloat2(), "chrome"); - rgbaRenderer.Flush(); + using (new PerfSample("text")) + { + var size = MeasureText2(text); + Bitmap b = RenderTextToBitmap(text, fTitle, c); + textSheet.Texture.SetData(b); + rgbaRenderer.DrawSprite(textSprite, pos.ToFloat2(), "chrome"); + rgbaRenderer.Flush(); + } } public int2 MeasureText(string text) diff --git a/OpenRa.Game/OpenRa.Game.csproj b/OpenRa.Game/OpenRa.Game.csproj index 9dd7c954b3..da75c2cd7b 100644 --- a/OpenRa.Game/OpenRa.Game.csproj +++ b/OpenRa.Game/OpenRa.Game.csproj @@ -63,6 +63,7 @@ + @@ -105,7 +106,6 @@ - diff --git a/OpenRa.Game/Sound.cs b/OpenRa.Game/Sound.cs index 441cd95456..2da679626e 100644 --- a/OpenRa.Game/Sound.cs +++ b/OpenRa.Game/Sound.cs @@ -23,6 +23,7 @@ using System.Collections.Generic; using OpenRa.FileFormats; using OpenRa.Support; using OpenRa.Traits; +using Tao.OpenAl; namespace OpenRa { @@ -160,19 +161,19 @@ namespace OpenRa public OpenAlSoundEngine() { //var str = Alc.alcGetString(IntPtr.Zero, Alc.ALC_DEFAULT_DEVICE_SPECIFIER); - var dev = OpenAlInterop.alcOpenDevice(IntPtr.Zero); + var dev = Alc.alcOpenDevice(null); if (dev == IntPtr.Zero) throw new InvalidOperationException("Can't create OpenAL device"); - var ctx = OpenAlInterop.alcCreateContext(dev, IntPtr.Zero); + var ctx = Alc.alcCreateContext(dev, IntPtr.Zero); if (ctx == IntPtr.Zero) throw new InvalidOperationException("Can't create OpenAL context"); - OpenAlInterop.alcMakeContextCurrent(ctx); + Alc.alcMakeContextCurrent(ctx); for (var i = 0; i < POOL_SIZE; i++) { var source = 0; - OpenAlInterop.alGenSources(1, out source); - if (0 != OpenAlInterop.alGetError()) + Al.alGenSources(1, out source); + if (0 != Al.alGetError()) throw new InvalidOperationException("failed generating source {0}".F(i)); sourcePool.Add(source, false); } @@ -193,8 +194,8 @@ namespace OpenRa foreach (int key in sourcePool.Keys) { int state; - OpenAlInterop.alGetSourcei(key, OpenAlInterop.AL_SOURCE_STATE, out state); - if (state != OpenAlInterop.AL_PLAYING) + Al.alGetSourcei(key, Al.AL_SOURCE_STATE, out state); + if (state != Al.AL_PLAYING) freeSources.Add(key); } @@ -223,7 +224,7 @@ namespace OpenRa public float Volume { get { return volume; } - set { OpenAlInterop.alListenerf(OpenAlInterop.AL_GAIN, volume = value); } + set { Al.alListenerf(Al.AL_GAIN, volume = value); } } } @@ -234,15 +235,15 @@ namespace OpenRa static int MakeALFormat(int channels, int bits) { if (channels == 1) - return bits == 16 ? OpenAlInterop.AL_FORMAT_MONO16 : OpenAlInterop.AL_FORMAT_MONO8; + return bits == 16 ? Al.AL_FORMAT_MONO16 : Al.AL_FORMAT_MONO8; else - return bits == 16 ? OpenAlInterop.AL_FORMAT_STEREO16 : OpenAlInterop.AL_FORMAT_STEREO8; + return bits == 16 ? Al.AL_FORMAT_STEREO16 : Al.AL_FORMAT_STEREO8; } public OpenAlSoundSource(byte[] data, int channels, int sampleBits, int sampleRate) { - OpenAlInterop.alGenBuffers(1, out buffer); - OpenAlInterop.alBufferData(buffer, MakeALFormat(channels, sampleBits), data, data.Length, sampleRate); + Al.alGenBuffers(1, out buffer); + Al.alBufferData(buffer, MakeALFormat(channels, sampleBits), data, data.Length, sampleRate); } } @@ -255,13 +256,13 @@ namespace OpenRa { if (source == -1) return; this.source = source; - OpenAlInterop.alSourcef(source, OpenAlInterop.AL_PITCH, 1f); - OpenAlInterop.alSourcef(source, OpenAlInterop.AL_GAIN, 1f); - OpenAlInterop.alSource3f(source, OpenAlInterop.AL_POSITION, 0f, 0f, 0f); - OpenAlInterop.alSource3f(source, OpenAlInterop.AL_VELOCITY, 0f, 0f, 0f); - OpenAlInterop.alSourcei(source, OpenAlInterop.AL_BUFFER, buffer); - OpenAlInterop.alSourcei(source, OpenAlInterop.AL_LOOPING, looping ? OpenAlInterop.AL_TRUE : OpenAlInterop.AL_FALSE); - OpenAlInterop.alSourcePlay(source); + Al.alSourcef(source, Al.AL_PITCH, 1f); + Al.alSourcef(source, Al.AL_GAIN, 1f); + Al.alSource3f(source, Al.AL_POSITION, 0f, 0f, 0f); + Al.alSource3f(source, Al.AL_VELOCITY, 0f, 0f, 0f); + Al.alSourcei(source, Al.AL_BUFFER, buffer); + Al.alSourcei(source, Al.AL_LOOPING, looping ? Al.AL_TRUE : Al.AL_FALSE); + Al.alSourcePlay(source); } public float Volume @@ -270,7 +271,7 @@ namespace OpenRa set { if (source != -1) - OpenAlInterop.alSourcef(source, OpenAlInterop.AL_GAIN, volume = value); + Al.alSourcef(source, Al.AL_GAIN, volume = value); } } }