move GL20 object into GraphicsDevice object

This commit is contained in:
Gered 2013-08-22 19:43:31 -04:00
parent ec724c78e5
commit bd55407132
17 changed files with 205 additions and 193 deletions

View file

@ -46,7 +46,8 @@ namespace Blarg.GameFramework
{ {
Logger.Info(LOG_TAG, "Initializing application objects."); Logger.Info(LOG_TAG, "Initializing application objects.");
Services = new ServiceContainer(); Services = new ServiceContainer();
GraphicsDevice = new GraphicsDevice(); GraphicsDevice = new GraphicsDevice(GL);
GraphicsDevice.OnInit();
} }
protected void OnShutdown() protected void OnShutdown()

View file

@ -102,14 +102,14 @@ namespace Blarg.GameFramework.Graphics
} }
if (_providedRenderState != null) if (_providedRenderState != null)
_providedRenderState.Apply(); _providedRenderState.Apply(GraphicsDevice);
else else
_defaultRenderState.Apply(); _defaultRenderState.Apply(GraphicsDevice);
if (_providedBlendState != null) if (_providedBlendState != null)
_providedBlendState.Apply(); _providedBlendState.Apply(GraphicsDevice);
else else
_defaultBlendState.Apply(); _defaultBlendState.Apply(GraphicsDevice);
GraphicsDevice.BindShader(_shader); GraphicsDevice.BindShader(_shader);
_shader.SetModelViewMatrix(GraphicsDevice.ViewContext.ModelViewMatrix); _shader.SetModelViewMatrix(GraphicsDevice.ViewContext.ModelViewMatrix);

View file

@ -50,11 +50,14 @@ namespace Blarg.GameFramework.Graphics
DestinationBlendFactor = destinationFactor; DestinationBlendFactor = destinationFactor;
} }
public void Apply() public void Apply(GraphicsDevice graphicsDevice)
{ {
if (graphicsDevice == null)
throw new ArgumentNullException("graphicsDevice");
if (Blending) if (Blending)
{ {
Platform.GL.glEnable(GL20.GL_BLEND); graphicsDevice.GL.glEnable(GL20.GL_BLEND);
var source = GL20.GL_ONE; var source = GL20.GL_ONE;
var dest = GL20.GL_ZERO; var dest = GL20.GL_ZERO;
@ -95,10 +98,10 @@ namespace Blarg.GameFramework.Graphics
case BlendFactor.ConstantColor: dest = GL20.GL_CONSTANT_COLOR; break; case BlendFactor.ConstantColor: dest = GL20.GL_CONSTANT_COLOR; break;
} }
Platform.GL.glBlendFunc(source, dest); graphicsDevice.GL.glBlendFunc(source, dest);
} }
else else
Platform.GL.glDisable(GL20.GL_BLEND); graphicsDevice.GL.glDisable(GL20.GL_BLEND);
} }
private void Init() private void Init()

View file

@ -106,7 +106,7 @@ namespace Blarg.GameFramework.Graphics
var usage = GLUsageHint; var usage = GLUsageHint;
var target = GLTarget; var target = GLTarget;
Platform.GL.glBindBuffer(target, ID); Platform.GraphicsDevice.GL.glBindBuffer(target, ID);
if (SizeInBytes != currentSizeInBytes) if (SizeInBytes != currentSizeInBytes)
{ {
@ -115,7 +115,7 @@ namespace Blarg.GameFramework.Graphics
SizeInBytes = currentSizeInBytes; SizeInBytes = currentSizeInBytes;
// and then allocate + update // and then allocate + update
Platform.GL.glBufferData<T>(target, SizeInBytes, Data, usage); Platform.GraphicsDevice.GL.glBufferData<T>(target, SizeInBytes, Data, usage);
} }
else else
{ {
@ -124,18 +124,18 @@ namespace Blarg.GameFramework.Graphics
// previous contents allowing it to do some extra optimizations which is // previous contents allowing it to do some extra optimizations which is
// fine since our glBufferSubData call is going to completely replace // fine since our glBufferSubData call is going to completely replace
// the contents anyway // the contents anyway
Platform.GL.glBufferData(target, SizeInBytes, IntPtr.Zero, usage); Platform.GraphicsDevice.GL.glBufferData(target, SizeInBytes, IntPtr.Zero, usage);
Platform.GL.glBufferSubData<T>(target, 0, SizeInBytes, Data); Platform.GraphicsDevice.GL.glBufferSubData<T>(target, 0, SizeInBytes, Data);
} }
Platform.GL.glBindBuffer(target, 0); Platform.GraphicsDevice.GL.glBindBuffer(target, 0);
IsDirty = false; IsDirty = false;
} }
protected void CreateBufferObject() protected void CreateBufferObject()
{ {
ID = Platform.GL.glGenBuffers(); ID = Platform.GraphicsDevice.GL.glGenBuffers();
SizeBufferObject(); SizeBufferObject();
@ -148,7 +148,7 @@ namespace Blarg.GameFramework.Graphics
if (IsInvalidated) if (IsInvalidated)
throw new InvalidOperationException(); throw new InvalidOperationException();
Platform.GL.glDeleteBuffers(ID); Platform.GraphicsDevice.GL.glDeleteBuffers(ID);
ID = -1; ID = -1;
IsClientSide = true; IsClientSide = true;
@ -171,9 +171,9 @@ namespace Blarg.GameFramework.Graphics
SizeInBytes = NumElements * ElementWidthInBytes; SizeInBytes = NumElements * ElementWidthInBytes;
// resize the buffer object without initializing it's data // resize the buffer object without initializing it's data
Platform.GL.glBindBuffer(target, ID); Platform.GraphicsDevice.GL.glBindBuffer(target, ID);
Platform.GL.glBufferData(target, SizeInBytes, IntPtr.Zero, usage); Platform.GraphicsDevice.GL.glBufferData(target, SizeInBytes, IntPtr.Zero, usage);
Platform.GL.glBindBuffer(target, 0); Platform.GraphicsDevice.GL.glBindBuffer(target, 0);
IsDirty = true; IsDirty = true;
} }

View file

@ -85,7 +85,7 @@ namespace Blarg.GameFramework.Graphics
if (!IsInvalidated) if (!IsInvalidated)
throw new InvalidOperationException(); throw new InvalidOperationException();
ID = Platform.GL.glGenFramebuffers(); ID = GraphicsDevice.GL.glGenFramebuffers();
_fixedWidth = width; _fixedWidth = width;
_fixedHeight = height; _fixedHeight = height;
@ -103,7 +103,7 @@ namespace Blarg.GameFramework.Graphics
texture.Value.Dispose(); texture.Value.Dispose();
_attachedTextures.Clear(); _attachedTextures.Clear();
Platform.GL.glDeleteFramebuffers(ID); GraphicsDevice.GL.glDeleteFramebuffers(ID);
ID = -1; ID = -1;
} }
if (GraphicsDevice.ViewContext == _attachedViewContext) if (GraphicsDevice.ViewContext == _attachedViewContext)
@ -180,7 +180,7 @@ namespace Blarg.GameFramework.Graphics
GraphicsDevice.UnregisterManagedResource(texture); GraphicsDevice.UnregisterManagedResource(texture);
GraphicsDevice.BindFramebuffer(this); GraphicsDevice.BindFramebuffer(this);
Platform.GL.glFramebufferTexture2D(GL20.GL_FRAMEBUFFER, attachmentType, GL20.GL_TEXTURE_2D, texture.ID, 0); GraphicsDevice.GL.glFramebufferTexture2D(GL20.GL_FRAMEBUFFER, attachmentType, GL20.GL_TEXTURE_2D, texture.ID, 0);
GraphicsDevice.UnbindFramebuffer(this); GraphicsDevice.UnbindFramebuffer(this);
_attachedTextures.Add(format, texture); _attachedTextures.Add(format, texture);
@ -238,7 +238,7 @@ namespace Blarg.GameFramework.Graphics
GraphicsDevice.UnregisterManagedResource(renderbuffer); GraphicsDevice.UnregisterManagedResource(renderbuffer);
GraphicsDevice.BindFramebuffer(this); GraphicsDevice.BindFramebuffer(this);
Platform.GL.glFramebufferRenderbuffer(GL20.GL_FRAMEBUFFER, attachmentType,GL20.GL_RENDERBUFFER, renderbuffer.ID); GraphicsDevice.GL.glFramebufferRenderbuffer(GL20.GL_FRAMEBUFFER, attachmentType,GL20.GL_RENDERBUFFER, renderbuffer.ID);
GraphicsDevice.UnbindFramebuffer(this); GraphicsDevice.UnbindFramebuffer(this);
_attachedRenderbuffers.Add(format, renderbuffer); _attachedRenderbuffers.Add(format, renderbuffer);
@ -282,7 +282,7 @@ namespace Blarg.GameFramework.Graphics
} }
GraphicsDevice.BindFramebuffer(this); GraphicsDevice.BindFramebuffer(this);
Platform.GL.glFramebufferTexture2D(GL20.GL_FRAMEBUFFER, attachmentType, GL20.GL_TEXTURE_2D, 0, 0); GraphicsDevice.GL.glFramebufferTexture2D(GL20.GL_FRAMEBUFFER, attachmentType, GL20.GL_TEXTURE_2D, 0, 0);
GraphicsDevice.UnbindFramebuffer(this); GraphicsDevice.UnbindFramebuffer(this);
_attachedTextures.Remove(format); _attachedTextures.Remove(format);
@ -310,7 +310,7 @@ namespace Blarg.GameFramework.Graphics
} }
GraphicsDevice.BindFramebuffer(this); GraphicsDevice.BindFramebuffer(this);
Platform.GL.glFramebufferRenderbuffer(GL20.GL_FRAMEBUFFER, attachmentType, GL20.GL_RENDERBUFFER, 0); GraphicsDevice.GL.glFramebufferRenderbuffer(GL20.GL_FRAMEBUFFER, attachmentType, GL20.GL_RENDERBUFFER, 0);
GraphicsDevice.UnbindFramebuffer(this); GraphicsDevice.UnbindFramebuffer(this);
_attachedRenderbuffers.Remove(format); _attachedRenderbuffers.Remove(format);
@ -357,7 +357,7 @@ namespace Blarg.GameFramework.Graphics
GraphicsDevice.UnregisterManagedResource(newTexture); GraphicsDevice.UnregisterManagedResource(newTexture);
GraphicsDevice.BindFramebuffer(this); GraphicsDevice.BindFramebuffer(this);
Platform.GL.glFramebufferTexture2D(GL20.GL_FRAMEBUFFER, attachmentType, GL20.GL_TEXTURE_2D, newTexture.ID, 0); GraphicsDevice.GL.glFramebufferTexture2D(GL20.GL_FRAMEBUFFER, attachmentType, GL20.GL_TEXTURE_2D, newTexture.ID, 0);
GraphicsDevice.UnbindFramebuffer(this); GraphicsDevice.UnbindFramebuffer(this);
_attachedTextures[key] = newTexture; _attachedTextures[key] = newTexture;
@ -395,7 +395,7 @@ namespace Blarg.GameFramework.Graphics
GraphicsDevice.UnregisterManagedResource(newRenderbuffer); GraphicsDevice.UnregisterManagedResource(newRenderbuffer);
GraphicsDevice.BindFramebuffer(this); GraphicsDevice.BindFramebuffer(this);
Platform.GL.glFramebufferRenderbuffer(GL20.GL_FRAMEBUFFER, attachmentType, GL20.GL_RENDERBUFFER, newRenderbuffer.ID); GraphicsDevice.GL.glFramebufferRenderbuffer(GL20.GL_FRAMEBUFFER, attachmentType, GL20.GL_RENDERBUFFER, newRenderbuffer.ID);
GraphicsDevice.UnbindFramebuffer(this); GraphicsDevice.UnbindFramebuffer(this);
_attachedRenderbuffers[key] = newRenderbuffer; _attachedRenderbuffers[key] = newRenderbuffer;

View file

@ -69,7 +69,7 @@ namespace Blarg.GameFramework.Graphics
shader.SetModelViewMatrix(ref modelView); shader.SetModelViewMatrix(ref modelView);
shader.SetProjectionMatrix(ref projection); shader.SetProjectionMatrix(ref projection);
_renderState.Apply(); _renderState.Apply(GraphicsDevice);
GraphicsDevice.BindVertexBuffer(_vertices); GraphicsDevice.BindVertexBuffer(_vertices);
GraphicsDevice.RenderLines(0, numLinesToRender); GraphicsDevice.RenderLines(0, numLinesToRender);

View file

@ -17,6 +17,8 @@ namespace Blarg.GameFramework.Graphics
const int SolidColorTextureWidth = 8; const int SolidColorTextureWidth = 8;
const int SolidColorTextureHeight = 8; const int SolidColorTextureHeight = 8;
public readonly GL20 GL;
List<GraphicsContextResource> _managedResources; List<GraphicsContextResource> _managedResources;
Dictionary<int, Texture> _solidColorTextures; Dictionary<int, Texture> _solidColorTextures;
VertexBuffer _boundVertexBuffer; VertexBuffer _boundVertexBuffer;
@ -72,18 +74,46 @@ namespace Blarg.GameFramework.Graphics
} }
} }
public GraphicsDevice() public GraphicsDevice(GL20 gl)
{ {
ScreenOrientation = ScreenOrientation.Rotation0; if (gl == null)
throw new ArgumentNullException("gl");
GL = gl;
ScreenOrientation = ScreenOrientation.Rotation0;
}
private void LoadStandardShaders()
{
DebugShader = new DebugShader(this);
SimpleColorShader = new SimpleColorShader(this);
SimpleColorTextureShader = new SimpleColorTextureShader(this);
SimpleTextureShader = new SimpleTextureShader(this);
SimpleTextureVertexLerpShader = new SimpleTextureVertexLerpShader(this);
SimpleTextureVertexSkinningShader = new SimpleTextureVertexSkinningShader(this);
Sprite2DShader = new Sprite2DShader(this);
Sprite3DShader = new Sprite3DShader(this);
}
private void LoadStandardFonts()
{
var sansSerifFontStream = ResourceUtils.GetResource("Blarg.GameFramework.Resources.Fonts.Vera.ttf");
SansSerifFont = SpriteFontTrueTypeLoader.Load(this, sansSerifFontStream, 16, SansSerifFont);
var monospaceFontStream = ResourceUtils.GetResource("Blarg.GameFramework.Resources.Fonts.VeraMono.ttf");
MonospaceFont = SpriteFontTrueTypeLoader.Load(this, monospaceFontStream, 16, MonospaceFont);
}
public void OnInit()
{
_boundTextures = new Texture[MaxTextureUnits]; _boundTextures = new Texture[MaxTextureUnits];
_enabledVertexAttribIndices = new Stack<int>(MaxGpuAttributeSlots); _enabledVertexAttribIndices = new Stack<int>(MaxGpuAttributeSlots);
string vendor = Platform.GL.glGetString(GL20.GL_VENDOR); string vendor = GL.glGetString(GL20.GL_VENDOR);
string renderer = Platform.GL.glGetString(GL20.GL_RENDERER); string renderer = GL.glGetString(GL20.GL_RENDERER);
string version = Platform.GL.glGetString(GL20.GL_VERSION); string version = GL.glGetString(GL20.GL_VERSION);
string extensions = Platform.GL.glGetString(GL20.GL_EXTENSIONS); string extensions = GL.glGetString(GL20.GL_EXTENSIONS);
string shadingLangVersion = Platform.GL.glGetString(GL20.GL_SHADING_LANGUAGE_VERSION); string shadingLangVersion = GL.glGetString(GL20.GL_SHADING_LANGUAGE_VERSION);
Platform.Logger.Info(LOG_TAG, "GL_VENDOR = {0}", vendor); Platform.Logger.Info(LOG_TAG, "GL_VENDOR = {0}", vendor);
Platform.Logger.Info(LOG_TAG, "GL_RENDERER = {0}", renderer); Platform.Logger.Info(LOG_TAG, "GL_RENDERER = {0}", renderer);
@ -119,27 +149,6 @@ namespace Blarg.GameFramework.Graphics
DebugRenderer = new GeometryDebugRenderer(this); DebugRenderer = new GeometryDebugRenderer(this);
} }
private void LoadStandardShaders()
{
DebugShader = new DebugShader(this);
SimpleColorShader = new SimpleColorShader(this);
SimpleColorTextureShader = new SimpleColorTextureShader(this);
SimpleTextureShader = new SimpleTextureShader(this);
SimpleTextureVertexLerpShader = new SimpleTextureVertexLerpShader(this);
SimpleTextureVertexSkinningShader = new SimpleTextureVertexSkinningShader(this);
Sprite2DShader = new Sprite2DShader(this);
Sprite3DShader = new Sprite3DShader(this);
}
private void LoadStandardFonts()
{
var sansSerifFontStream = ResourceUtils.GetResource("Blarg.GameFramework.Resources.Fonts.Vera.ttf");
SansSerifFont = SpriteFontTrueTypeLoader.Load(this, sansSerifFontStream, 16, SansSerifFont);
var monospaceFontStream = ResourceUtils.GetResource("Blarg.GameFramework.Resources.Fonts.VeraMono.ttf");
MonospaceFont = SpriteFontTrueTypeLoader.Load(this, monospaceFontStream, 16, MonospaceFont);
}
public void OnLostContext() public void OnLostContext()
{ {
Platform.Logger.Info(LOG_TAG, "Cleaning up objects/state specific to the lost OpenGL context."); Platform.Logger.Info(LOG_TAG, "Cleaning up objects/state specific to the lost OpenGL context.");
@ -160,8 +169,8 @@ namespace Blarg.GameFramework.Graphics
_activeViewContext.OnNewContext(); _activeViewContext.OnNewContext();
RenderState.Default.Apply(); RenderState.Default.Apply(this);
BlendState.Default.Apply(); BlendState.Default.Apply(this);
UnbindVertexBuffer(); UnbindVertexBuffer();
UnbindIndexBuffer(); UnbindIndexBuffer();
@ -203,14 +212,14 @@ namespace Blarg.GameFramework.Graphics
public void OnRender(float delta) public void OnRender(float delta)
{ {
int error = Platform.GL.glGetError(); int error = GL.glGetError();
System.Diagnostics.Debug.Assert(error == GL20.GL_NO_ERROR); System.Diagnostics.Debug.Assert(error == GL20.GL_NO_ERROR);
if (error != GL20.GL_NO_ERROR) if (error != GL20.GL_NO_ERROR)
{ {
Platform.Logger.Error("OPENGL", "OpenGL error \"{0}\"", error.ToString()); Platform.Logger.Error("OPENGL", "OpenGL error \"{0}\"", error.ToString());
// keep checking for and reporting errors until there are no more left // keep checking for and reporting errors until there are no more left
while ((error = Platform.GL.glGetError()) != GL20.GL_NO_ERROR) while ((error = GL.glGetError()) != GL20.GL_NO_ERROR)
Platform.Logger.Error("OPENGL", "OpenGL error \"{0}\"", error.ToString()); Platform.Logger.Error("OPENGL", "OpenGL error \"{0}\"", error.ToString());
} }
@ -231,7 +240,7 @@ namespace Blarg.GameFramework.Graphics
{ {
var color = new Color(r, g, b, a); var color = new Color(r, g, b, a);
Clear(ref color); Clear(ref color);
Platform.GL.glClearColor(r, g, b, a); GL.glClearColor(r, g, b, a);
} }
public void Clear(Color color) public void Clear(Color color)
@ -241,8 +250,8 @@ namespace Blarg.GameFramework.Graphics
public void Clear(ref Color color) public void Clear(ref Color color)
{ {
Platform.GL.glClearColor(color.R, color.G, color.B, color.A); GL.glClearColor(color.R, color.G, color.B, color.A);
Platform.GL.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT); GL.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
} }
public void SetTextureParameters(TextureParameters parameters) public void SetTextureParameters(TextureParameters parameters)
@ -315,8 +324,8 @@ namespace Blarg.GameFramework.Graphics
if (texture != _boundTextures[unit]) if (texture != _boundTextures[unit])
{ {
Platform.GL.glActiveTexture(GL20.GL_TEXTURE0 + unit); GL.glActiveTexture(GL20.GL_TEXTURE0 + unit);
Platform.GL.glBindTexture(GL20.GL_TEXTURE_2D, texture.ID); GL.glBindTexture(GL20.GL_TEXTURE_2D, texture.ID);
_boundTextures[unit] = texture; _boundTextures[unit] = texture;
} }
@ -327,8 +336,8 @@ namespace Blarg.GameFramework.Graphics
if (unit < 0 || unit >= MaxTextureUnits) if (unit < 0 || unit >= MaxTextureUnits)
throw new ArgumentOutOfRangeException("unit"); throw new ArgumentOutOfRangeException("unit");
Platform.GL.glActiveTexture(GL20.GL_TEXTURE0 + unit); GL.glActiveTexture(GL20.GL_TEXTURE0 + unit);
Platform.GL.glBindTexture(GL20.GL_TEXTURE_2D, 0); GL.glBindTexture(GL20.GL_TEXTURE_2D, 0);
_boundTextures[unit] = null; _boundTextures[unit] = null;
} }
@ -352,14 +361,14 @@ namespace Blarg.GameFramework.Graphics
if (_boundRenderbuffer != renderbuffer) if (_boundRenderbuffer != renderbuffer)
{ {
Platform.GL.glBindRenderbuffer(GL20.GL_RENDERBUFFER, renderbuffer.ID); GL.glBindRenderbuffer(GL20.GL_RENDERBUFFER, renderbuffer.ID);
_boundRenderbuffer = renderbuffer; _boundRenderbuffer = renderbuffer;
} }
} }
public void UnbindRenderbuffer() public void UnbindRenderbuffer()
{ {
Platform.GL.glBindRenderbuffer(GL20.GL_RENDERBUFFER, 0); GL.glBindRenderbuffer(GL20.GL_RENDERBUFFER, 0);
_boundRenderbuffer = null; _boundRenderbuffer = null;
} }
@ -379,14 +388,14 @@ namespace Blarg.GameFramework.Graphics
if (_boundFramebuffer != framebuffer) if (_boundFramebuffer != framebuffer)
{ {
Platform.GL.glBindFramebuffer(GL20.GL_FRAMEBUFFER, framebuffer.ID); GL.glBindFramebuffer(GL20.GL_FRAMEBUFFER, framebuffer.ID);
_boundFramebuffer = framebuffer; _boundFramebuffer = framebuffer;
} }
} }
public void UnbindFramebuffer() public void UnbindFramebuffer()
{ {
Platform.GL.glBindFramebuffer(GL20.GL_FRAMEBUFFER, 0); GL.glBindFramebuffer(GL20.GL_FRAMEBUFFER, 0);
_boundFramebuffer = null; _boundFramebuffer = null;
} }
@ -422,7 +431,7 @@ namespace Blarg.GameFramework.Graphics
public void UnbindVertexBuffer() public void UnbindVertexBuffer()
{ {
Platform.GL.glBindBuffer(GL20.GL_ARRAY_BUFFER, 0); GL.glBindBuffer(GL20.GL_ARRAY_BUFFER, 0);
_boundVertexBuffer = null; _boundVertexBuffer = null;
if (_isShaderVertexAttribsSet) if (_isShaderVertexAttribsSet)
@ -434,12 +443,12 @@ namespace Blarg.GameFramework.Graphics
if (buffer.IsDirty) if (buffer.IsDirty)
buffer.Update(); buffer.Update();
Platform.GL.glBindBuffer(GL20.GL_ARRAY_BUFFER, buffer.ID); GL.glBindBuffer(GL20.GL_ARRAY_BUFFER, buffer.ID);
} }
private void BindVertexClientArrays(VertexBuffer buffer) private void BindVertexClientArrays(VertexBuffer buffer)
{ {
Platform.GL.glBindBuffer(GL20.GL_ARRAY_BUFFER, 0); GL.glBindBuffer(GL20.GL_ARRAY_BUFFER, 0);
} }
public void BindIndexBuffer(IndexBuffer buffer) public void BindIndexBuffer(IndexBuffer buffer)
@ -462,7 +471,7 @@ namespace Blarg.GameFramework.Graphics
public void UnbindIndexBuffer() public void UnbindIndexBuffer()
{ {
Platform.GL.glBindBuffer(GL20.GL_ELEMENT_ARRAY_BUFFER, 0); GL.glBindBuffer(GL20.GL_ELEMENT_ARRAY_BUFFER, 0);
_boundIndexBuffer = null; _boundIndexBuffer = null;
} }
@ -471,12 +480,12 @@ namespace Blarg.GameFramework.Graphics
if (buffer.IsDirty) if (buffer.IsDirty)
buffer.Update(); buffer.Update();
Platform.GL.glBindBuffer(GL20.GL_ELEMENT_ARRAY_BUFFER, buffer.ID); GL.glBindBuffer(GL20.GL_ELEMENT_ARRAY_BUFFER, buffer.ID);
} }
private void BindIndexClientArray(IndexBuffer buffer) private void BindIndexClientArray(IndexBuffer buffer)
{ {
Platform.GL.glBindBuffer(GL20.GL_ELEMENT_ARRAY_BUFFER, 0); GL.glBindBuffer(GL20.GL_ELEMENT_ARRAY_BUFFER, 0);
} }
public void BindShader(Shader shader) public void BindShader(Shader shader)
@ -486,7 +495,7 @@ namespace Blarg.GameFramework.Graphics
if (!shader.IsReadyForUse) if (!shader.IsReadyForUse)
throw new InvalidOperationException("Shader hasn't been compiled and linked."); throw new InvalidOperationException("Shader hasn't been compiled and linked.");
Platform.GL.glUseProgram(shader.ProgramID); GL.glUseProgram(shader.ProgramID);
_boundShader = shader; _boundShader = shader;
if (_isShaderVertexAttribsSet) if (_isShaderVertexAttribsSet)
@ -497,7 +506,7 @@ namespace Blarg.GameFramework.Graphics
public void UnbindShader() public void UnbindShader()
{ {
Platform.GL.glUseProgram(0); GL.glUseProgram(0);
if (_boundShader != null) if (_boundShader != null)
_boundShader.OnUnbind(); _boundShader.OnUnbind();
@ -537,7 +546,7 @@ namespace Blarg.GameFramework.Graphics
offset = _boundVertexBuffer.GetAttributeOffset(bufferAttribIndex); offset = _boundVertexBuffer.GetAttributeOffset(bufferAttribIndex);
size = _boundVertexBuffer.GetAttributeSize(bufferAttribIndex); size = _boundVertexBuffer.GetAttributeSize(bufferAttribIndex);
Platform.GL.glEnableVertexAttribArray(i); GL.glEnableVertexAttribArray(i);
if (_boundVertexBuffer.IsClientSide) if (_boundVertexBuffer.IsClientSide)
{ {
// pass reference to the first vertex and the first float within that vertex that is for this attribute // pass reference to the first vertex and the first float within that vertex that is for this attribute
@ -546,14 +555,14 @@ namespace Blarg.GameFramework.Graphics
fixed (float *p = _boundVertexBuffer.Data) fixed (float *p = _boundVertexBuffer.Data)
{ {
float *src = p + offset; float *src = p + offset;
Platform.GL.glVertexAttribPointer(i, size, GL20.GL_FLOAT, false, _boundVertexBuffer.ElementWidthInBytes, new IntPtr((long)src)); GL.glVertexAttribPointer(i, size, GL20.GL_FLOAT, false, _boundVertexBuffer.ElementWidthInBytes, new IntPtr((long)src));
} }
} }
} }
else else
// pass offset in bytes (starting from zero) that corresponds with the start of this attribute // pass offset in bytes (starting from zero) that corresponds with the start of this attribute
Platform.GL.glVertexAttribPointer(i, size, GL20.GL_FLOAT, false, _boundVertexBuffer.ElementWidthInBytes, (IntPtr)(offset * sizeof(float))); GL.glVertexAttribPointer(i, size, GL20.GL_FLOAT, false, _boundVertexBuffer.ElementWidthInBytes, (IntPtr)(offset * sizeof(float)));
_enabledVertexAttribIndices.Push(i); _enabledVertexAttribIndices.Push(i);
} }
@ -566,7 +575,7 @@ namespace Blarg.GameFramework.Graphics
while (_enabledVertexAttribIndices.Count > 0) while (_enabledVertexAttribIndices.Count > 0)
{ {
int index = _enabledVertexAttribIndices.Pop(); int index = _enabledVertexAttribIndices.Pop();
Platform.GL.glDisableVertexAttribArray(index); GL.glDisableVertexAttribArray(index);
} }
_isShaderVertexAttribsSet = false; _isShaderVertexAttribsSet = false;
@ -605,7 +614,7 @@ namespace Blarg.GameFramework.Graphics
if (numVertices % 3 != 0) if (numVertices % 3 != 0)
throw new InvalidOperationException("Number of elements in index buffer do not perfectly make up a set of triangles."); throw new InvalidOperationException("Number of elements in index buffer do not perfectly make up a set of triangles.");
Platform.GL.glDrawElements(GL20.GL_TRIANGLES, numVertices, GL20.GL_UNSIGNED_SHORT, buffer.Data); GL.glDrawElements(GL20.GL_TRIANGLES, numVertices, GL20.GL_UNSIGNED_SHORT, buffer.Data);
} }
public void RenderTriangles() public void RenderTriangles()
@ -624,9 +633,9 @@ namespace Blarg.GameFramework.Graphics
throw new InvalidOperationException("Number of elements in bound index buffer do not perfectly make up a set of triangles."); throw new InvalidOperationException("Number of elements in bound index buffer do not perfectly make up a set of triangles.");
if (_boundIndexBuffer.IsClientSide) if (_boundIndexBuffer.IsClientSide)
Platform.GL.glDrawElements(GL20.GL_TRIANGLES, numVertices, GL20.GL_UNSIGNED_SHORT, _boundIndexBuffer.Data); GL.glDrawElements(GL20.GL_TRIANGLES, numVertices, GL20.GL_UNSIGNED_SHORT, _boundIndexBuffer.Data);
else else
Platform.GL.glDrawElements(GL20.GL_TRIANGLES, numVertices, GL20.GL_UNSIGNED_SHORT, (IntPtr)0); GL.glDrawElements(GL20.GL_TRIANGLES, numVertices, GL20.GL_UNSIGNED_SHORT, (IntPtr)0);
} }
else else
{ {
@ -635,7 +644,7 @@ namespace Blarg.GameFramework.Graphics
if (numVertices % 3 != 0) if (numVertices % 3 != 0)
throw new InvalidOperationException("Number of vertices in bound vertex buffer do not perfectly make up a set of triangles."); throw new InvalidOperationException("Number of vertices in bound vertex buffer do not perfectly make up a set of triangles.");
Platform.GL.glDrawArrays(GL20.GL_TRIANGLES, 0, numVertices); GL.glDrawArrays(GL20.GL_TRIANGLES, 0, numVertices);
} }
} }
@ -662,7 +671,7 @@ namespace Blarg.GameFramework.Graphics
fixed (ushort *p = _boundIndexBuffer.Data) fixed (ushort *p = _boundIndexBuffer.Data)
{ {
ushort *src = p + startVertex; ushort *src = p + startVertex;
Platform.GL.glDrawElements(GL20.GL_TRIANGLES, numVertices, GL20.GL_UNSIGNED_SHORT, new IntPtr((long)src)); GL.glDrawElements(GL20.GL_TRIANGLES, numVertices, GL20.GL_UNSIGNED_SHORT, new IntPtr((long)src));
} }
} }
} }
@ -670,7 +679,7 @@ namespace Blarg.GameFramework.Graphics
{ {
// this offset needs to be in terms of bytes // this offset needs to be in terms of bytes
int offset = startVertex * _boundIndexBuffer.ElementWidthInBytes; int offset = startVertex * _boundIndexBuffer.ElementWidthInBytes;
Platform.GL.glDrawElements(GL20.GL_TRIANGLES, numVertices, GL20.GL_UNSIGNED_SHORT, (IntPtr)offset); GL.glDrawElements(GL20.GL_TRIANGLES, numVertices, GL20.GL_UNSIGNED_SHORT, (IntPtr)offset);
} }
} }
else else
@ -679,7 +688,7 @@ namespace Blarg.GameFramework.Graphics
if ((_boundVertexBuffer.NumElements - startVertex) < numVertices) if ((_boundVertexBuffer.NumElements - startVertex) < numVertices)
throw new InvalidOperationException("Bound vertex buffer does not contain enough vertices."); throw new InvalidOperationException("Bound vertex buffer does not contain enough vertices.");
Platform.GL.glDrawArrays(GL20.GL_TRIANGLES, startVertex, numVertices); GL.glDrawArrays(GL20.GL_TRIANGLES, startVertex, numVertices);
} }
} }
@ -701,7 +710,7 @@ namespace Blarg.GameFramework.Graphics
if (numVertices % 2 != 0) if (numVertices % 2 != 0)
throw new InvalidOperationException("Number of elements in index buffer do not perfectly make up a set of lines."); throw new InvalidOperationException("Number of elements in index buffer do not perfectly make up a set of lines.");
Platform.GL.glDrawElements(GL20.GL_LINES, numVertices, GL20.GL_UNSIGNED_SHORT, buffer.Data); GL.glDrawElements(GL20.GL_LINES, numVertices, GL20.GL_UNSIGNED_SHORT, buffer.Data);
} }
public void RenderLines() public void RenderLines()
@ -720,9 +729,9 @@ namespace Blarg.GameFramework.Graphics
throw new InvalidOperationException("Number of elements in bound index buffer do not perfectly make up a set of lines."); throw new InvalidOperationException("Number of elements in bound index buffer do not perfectly make up a set of lines.");
if (_boundIndexBuffer.IsClientSide) if (_boundIndexBuffer.IsClientSide)
Platform.GL.glDrawElements(GL20.GL_LINES, numVertices, GL20.GL_UNSIGNED_SHORT, _boundIndexBuffer.Data); GL.glDrawElements(GL20.GL_LINES, numVertices, GL20.GL_UNSIGNED_SHORT, _boundIndexBuffer.Data);
else else
Platform.GL.glDrawElements(GL20.GL_LINES, numVertices, GL20.GL_UNSIGNED_SHORT, (IntPtr)0); GL.glDrawElements(GL20.GL_LINES, numVertices, GL20.GL_UNSIGNED_SHORT, (IntPtr)0);
} }
else else
{ {
@ -731,7 +740,7 @@ namespace Blarg.GameFramework.Graphics
if (numVertices % 2 != 0) if (numVertices % 2 != 0)
throw new InvalidOperationException("Number of vertices in bound vertex buffer do not perfectly make up a set of lines."); throw new InvalidOperationException("Number of vertices in bound vertex buffer do not perfectly make up a set of lines.");
Platform.GL.glDrawArrays(GL20.GL_LINES, 0, numVertices); GL.glDrawArrays(GL20.GL_LINES, 0, numVertices);
} }
} }
@ -758,7 +767,7 @@ namespace Blarg.GameFramework.Graphics
fixed (ushort *p = _boundIndexBuffer.Data) fixed (ushort *p = _boundIndexBuffer.Data)
{ {
ushort *src = p + startVertex; ushort *src = p + startVertex;
Platform.GL.glDrawElements(GL20.GL_LINES, numVertices, GL20.GL_UNSIGNED_SHORT, new IntPtr((long)src)); GL.glDrawElements(GL20.GL_LINES, numVertices, GL20.GL_UNSIGNED_SHORT, new IntPtr((long)src));
} }
} }
} }
@ -766,7 +775,7 @@ namespace Blarg.GameFramework.Graphics
{ {
// this offset needs to be in terms of bytes // this offset needs to be in terms of bytes
int offset = startVertex * _boundIndexBuffer.ElementWidthInBytes; int offset = startVertex * _boundIndexBuffer.ElementWidthInBytes;
Platform.GL.glDrawElements(GL20.GL_LINES, numVertices, GL20.GL_UNSIGNED_SHORT, (IntPtr)offset); GL.glDrawElements(GL20.GL_LINES, numVertices, GL20.GL_UNSIGNED_SHORT, (IntPtr)offset);
} }
} }
else else
@ -775,7 +784,7 @@ namespace Blarg.GameFramework.Graphics
if ((_boundVertexBuffer.NumElements - startVertex) < numVertices) if ((_boundVertexBuffer.NumElements - startVertex) < numVertices)
throw new InvalidOperationException("Bound vertex buffer does not contain enough vertices."); throw new InvalidOperationException("Bound vertex buffer does not contain enough vertices.");
Platform.GL.glDrawArrays(GL20.GL_LINES, startVertex, numVertices); GL.glDrawArrays(GL20.GL_LINES, startVertex, numVertices);
} }
} }
@ -795,7 +804,7 @@ namespace Blarg.GameFramework.Graphics
int numVertices = buffer.NumElements; int numVertices = buffer.NumElements;
Platform.GL.glDrawElements(GL20.GL_POINTS, numVertices, GL20.GL_UNSIGNED_SHORT, buffer.Data); GL.glDrawElements(GL20.GL_POINTS, numVertices, GL20.GL_UNSIGNED_SHORT, buffer.Data);
} }
public void RenderPoints() public void RenderPoints()
@ -812,16 +821,16 @@ namespace Blarg.GameFramework.Graphics
int numVertices = _boundIndexBuffer.NumElements; int numVertices = _boundIndexBuffer.NumElements;
if (_boundIndexBuffer.IsClientSide) if (_boundIndexBuffer.IsClientSide)
Platform.GL.glDrawElements(GL20.GL_POINTS, numVertices, GL20.GL_UNSIGNED_SHORT, _boundIndexBuffer.Data); GL.glDrawElements(GL20.GL_POINTS, numVertices, GL20.GL_UNSIGNED_SHORT, _boundIndexBuffer.Data);
else else
Platform.GL.glDrawElements(GL20.GL_POINTS, numVertices, GL20.GL_UNSIGNED_SHORT, (IntPtr)0); GL.glDrawElements(GL20.GL_POINTS, numVertices, GL20.GL_UNSIGNED_SHORT, (IntPtr)0);
} }
else else
{ {
// no index buffer, just render the whole vertex buffer // no index buffer, just render the whole vertex buffer
int numVertices = _boundVertexBuffer.NumElements; int numVertices = _boundVertexBuffer.NumElements;
Platform.GL.glDrawArrays(GL20.GL_POINTS, 0, numVertices); GL.glDrawArrays(GL20.GL_POINTS, 0, numVertices);
} }
} }
@ -846,7 +855,7 @@ namespace Blarg.GameFramework.Graphics
fixed (ushort *p = _boundIndexBuffer.Data) fixed (ushort *p = _boundIndexBuffer.Data)
{ {
ushort *src = p + startVertex; ushort *src = p + startVertex;
Platform.GL.glDrawElements(GL20.GL_POINTS, numPoints, GL20.GL_UNSIGNED_SHORT, new IntPtr((long)src)); GL.glDrawElements(GL20.GL_POINTS, numPoints, GL20.GL_UNSIGNED_SHORT, new IntPtr((long)src));
} }
} }
} }
@ -854,7 +863,7 @@ namespace Blarg.GameFramework.Graphics
{ {
// this offset needs to be in terms of bytes // this offset needs to be in terms of bytes
int offset = startVertex * _boundIndexBuffer.ElementWidthInBytes; int offset = startVertex * _boundIndexBuffer.ElementWidthInBytes;
Platform.GL.glDrawElements(GL20.GL_POINTS, numPoints, GL20.GL_UNSIGNED_SHORT, (IntPtr)offset); GL.glDrawElements(GL20.GL_POINTS, numPoints, GL20.GL_UNSIGNED_SHORT, (IntPtr)offset);
} }
} }
else else
@ -863,7 +872,7 @@ namespace Blarg.GameFramework.Graphics
if ((_boundVertexBuffer.NumElements - startVertex) < numPoints) if ((_boundVertexBuffer.NumElements - startVertex) < numPoints)
throw new InvalidOperationException("Bound vertex buffer does not contain enough vertices."); throw new InvalidOperationException("Bound vertex buffer does not contain enough vertices.");
Platform.GL.glDrawArrays(GL20.GL_POINTS, startVertex, numPoints); GL.glDrawArrays(GL20.GL_POINTS, startVertex, numPoints);
} }
} }

View file

@ -49,7 +49,7 @@ namespace Blarg.GameFramework.Graphics.Helpers
public void Render() public void Render()
{ {
RenderState.Default.Apply(); RenderState.Default.Apply(GraphicsDevice);
GraphicsDevice.BindVertexBuffer(_horizontalPoints); GraphicsDevice.BindVertexBuffer(_horizontalPoints);
GraphicsDevice.RenderLines(0, _horizontalPoints.NumElements / 2); GraphicsDevice.RenderLines(0, _horizontalPoints.NumElements / 2);

View file

@ -50,11 +50,14 @@ namespace Blarg.GameFramework.Graphics
Init(); Init();
} }
public void Apply() public void Apply(GraphicsDevice graphicsDevice)
{ {
if (graphicsDevice == null)
throw new ArgumentNullException("graphicsDevice");
if (DepthTesting) if (DepthTesting)
{ {
Platform.GL.glEnable(GL20.GL_DEPTH_TEST); graphicsDevice.GL.glEnable(GL20.GL_DEPTH_TEST);
int depthFunc = GL20.GL_LESS; int depthFunc = GL20.GL_LESS;
switch (DepthFunc) switch (DepthFunc)
@ -68,25 +71,25 @@ namespace Blarg.GameFramework.Graphics
case DepthFunc.GreaterOrEqual: depthFunc = GL20.GL_GEQUAL; break; case DepthFunc.GreaterOrEqual: depthFunc = GL20.GL_GEQUAL; break;
case DepthFunc.Always: depthFunc = GL20.GL_ALWAYS; break; case DepthFunc.Always: depthFunc = GL20.GL_ALWAYS; break;
} }
Platform.GL.glDepthFunc(depthFunc); graphicsDevice.GL.glDepthFunc(depthFunc);
} }
else else
Platform.GL.glDisable(GL20.GL_DEPTH_TEST); graphicsDevice.GL.glDisable(GL20.GL_DEPTH_TEST);
if (FaceCulling) if (FaceCulling)
{ {
Platform.GL.glEnable(GL20.GL_CULL_FACE); graphicsDevice.GL.glEnable(GL20.GL_CULL_FACE);
if (FaceCullingMode == CullMode.FrontAndBack) if (FaceCullingMode == CullMode.FrontAndBack)
Platform.GL.glCullFace(GL20.GL_FRONT_AND_BACK); graphicsDevice.GL.glCullFace(GL20.GL_FRONT_AND_BACK);
else if (FaceCullingMode == CullMode.Front) else if (FaceCullingMode == CullMode.Front)
Platform.GL.glCullFace(GL20.GL_FRONT); graphicsDevice.GL.glCullFace(GL20.GL_FRONT);
else else
Platform.GL.glCullFace(GL20.GL_BACK); graphicsDevice.GL.glCullFace(GL20.GL_BACK);
} }
else else
Platform.GL.glDisable(GL20.GL_CULL_FACE); graphicsDevice.GL.glDisable(GL20.GL_CULL_FACE);
Platform.GL.glLineWidth(LineWidth); graphicsDevice.GL.glLineWidth(LineWidth);
} }
private void Init() private void Init()

View file

@ -64,14 +64,14 @@ namespace Blarg.GameFramework.Graphics
if (glFormat == 0) if (glFormat == 0)
throw new InvalidOperationException(); throw new InvalidOperationException();
ID = Platform.GL.glGenRenderbuffers(); ID = GraphicsDevice.GL.glGenRenderbuffers();
Width = width; Width = width;
Height = height; Height = height;
Format = format; Format = format;
GraphicsDevice.BindRenderbuffer(this); GraphicsDevice.BindRenderbuffer(this);
Platform.GL.glRenderbufferStorage(GL20.GL_RENDERBUFFER, glFormat, Width, Height); GraphicsDevice.GL.glRenderbufferStorage(GL20.GL_RENDERBUFFER, glFormat, Width, Height);
GraphicsDevice.UnbindRenderbuffer(this); GraphicsDevice.UnbindRenderbuffer(this);
Platform.Logger.Info(GraphicsContextResource.LOG_TAG, "Created renderbuffer. ID = {0}, format = {1}, size = {2}x{3}.", ID, Format.ToString(), Width, Height); Platform.Logger.Info(GraphicsContextResource.LOG_TAG, "Created renderbuffer. ID = {0}, format = {1}, size = {2}x{3}.", ID, Format.ToString(), Width, Height);
@ -95,7 +95,7 @@ namespace Blarg.GameFramework.Graphics
{ {
GraphicsDevice.UnbindRenderbuffer(this); GraphicsDevice.UnbindRenderbuffer(this);
Platform.GL.glDeleteRenderbuffers(ID); GraphicsDevice.GL.glDeleteRenderbuffers(ID);
Platform.Logger.Info(GraphicsContextResource.LOG_TAG, "Deleted Renderbuffer ID = {0}.", ID); Platform.Logger.Info(GraphicsContextResource.LOG_TAG, "Deleted Renderbuffer ID = {0}.", ID);

View file

@ -160,7 +160,7 @@ namespace Blarg.GameFramework.Graphics
// first load and compile the vertex shader // first load and compile the vertex shader
int vertexShaderId = Platform.GL.glCreateShader(GL20.GL_VERTEX_SHADER); int vertexShaderId = GraphicsDevice.GL.glCreateShader(GL20.GL_VERTEX_SHADER);
if (vertexShaderId == 0) if (vertexShaderId == 0)
throw new Exception("Failed to create OpenGL Vertex Shader object."); throw new Exception("Failed to create OpenGL Vertex Shader object.");
@ -169,10 +169,10 @@ namespace Blarg.GameFramework.Graphics
string[] vertexSources = { "#define VERTEX\n", vertexShaderSource }; string[] vertexSources = { "#define VERTEX\n", vertexShaderSource };
int[] vertexSourcesLength = { vertexSources[0].Length, vertexSources[1].Length }; int[] vertexSourcesLength = { vertexSources[0].Length, vertexSources[1].Length };
Platform.GL.glShaderSource(vertexShaderId, 2, vertexSources, vertexSourcesLength); GraphicsDevice.GL.glShaderSource(vertexShaderId, 2, vertexSources, vertexSourcesLength);
Platform.GL.glCompileShader(vertexShaderId); GraphicsDevice.GL.glCompileShader(vertexShaderId);
int vertexShaderCompileStatus = Platform.GL.glGetShaderiv(vertexShaderId, GL20.GL_COMPILE_STATUS); int vertexShaderCompileStatus = GraphicsDevice.GL.glGetShaderiv(vertexShaderId, GL20.GL_COMPILE_STATUS);
// log compiler error // log compiler error
if (vertexShaderCompileStatus == 0) if (vertexShaderCompileStatus == 0)
@ -183,7 +183,7 @@ namespace Blarg.GameFramework.Graphics
// and now the fragment shader // and now the fragment shader
int fragmentShaderId = Platform.GL.glCreateShader(GL20.GL_FRAGMENT_SHADER); int fragmentShaderId = GraphicsDevice.GL.glCreateShader(GL20.GL_FRAGMENT_SHADER);
if (fragmentShaderId == 0) if (fragmentShaderId == 0)
throw new Exception("Failed to create OpenGL Fragment Shader object."); throw new Exception("Failed to create OpenGL Fragment Shader object.");
@ -192,10 +192,10 @@ namespace Blarg.GameFramework.Graphics
string[] fragmentSources = { "#define FRAGMENT\n", fragmentShaderSource }; string[] fragmentSources = { "#define FRAGMENT\n", fragmentShaderSource };
int[] fragmentSourcesLength = { fragmentSources[0].Length, fragmentSources[1].Length }; int[] fragmentSourcesLength = { fragmentSources[0].Length, fragmentSources[1].Length };
Platform.GL.glShaderSource(fragmentShaderId, 2, fragmentSources, fragmentSourcesLength); GraphicsDevice.GL.glShaderSource(fragmentShaderId, 2, fragmentSources, fragmentSourcesLength);
Platform.GL.glCompileShader(fragmentShaderId); GraphicsDevice.GL.glCompileShader(fragmentShaderId);
int fragmentShaderCompileStatus = Platform.GL.glGetShaderiv(fragmentShaderId, GL20.GL_COMPILE_STATUS); int fragmentShaderCompileStatus = GraphicsDevice.GL.glGetShaderiv(fragmentShaderId, GL20.GL_COMPILE_STATUS);
// log compiler error // log compiler error
if (fragmentShaderCompileStatus == 0) if (fragmentShaderCompileStatus == 0)
@ -218,7 +218,7 @@ namespace Blarg.GameFramework.Graphics
private string GetShaderLog(int shaderId) private string GetShaderLog(int shaderId)
{ {
return Platform.GL.glGetShaderInfoLog(shaderId); return GraphicsDevice.GL.glGetShaderInfoLog(shaderId);
} }
private void Link() private void Link()
@ -228,20 +228,20 @@ namespace Blarg.GameFramework.Graphics
if (VertexShaderID == -1 || FragmentShaderID == -1) if (VertexShaderID == -1 || FragmentShaderID == -1)
throw new InvalidOperationException(); throw new InvalidOperationException();
int programId = Platform.GL.glCreateProgram(); int programId = GraphicsDevice.GL.glCreateProgram();
if (programId == 0) if (programId == 0)
throw new Exception("Failed to create OpenGL Shader Program object."); throw new Exception("Failed to create OpenGL Shader Program object.");
Platform.GL.glAttachShader(programId, VertexShaderID); GraphicsDevice.GL.glAttachShader(programId, VertexShaderID);
Platform.GL.glAttachShader(programId, FragmentShaderID); GraphicsDevice.GL.glAttachShader(programId, FragmentShaderID);
Platform.GL.glLinkProgram(programId); GraphicsDevice.GL.glLinkProgram(programId);
int programLinkStatus = Platform.GL.glGetProgramiv(programId, GL20.GL_LINK_STATUS); int programLinkStatus = GraphicsDevice.GL.glGetProgramiv(programId, GL20.GL_LINK_STATUS);
// log linker error // log linker error
if (programLinkStatus == 0) if (programLinkStatus == 0)
{ {
string log = Platform.GL.glGetProgramInfoLog(programId); string log = GraphicsDevice.GL.glGetProgramInfoLog(programId);
Platform.Logger.Error("OPENGL", "Error linking program:\n{0}", log); Platform.Logger.Error("OPENGL", "Error linking program:\n{0}", log);
} }
@ -332,7 +332,7 @@ namespace Blarg.GameFramework.Graphics
if (ProgramID == -1) if (ProgramID == -1)
throw new InvalidOperationException(); throw new InvalidOperationException();
int numUniforms = Platform.GL.glGetProgramiv(ProgramID, GL20.GL_ACTIVE_UNIFORMS); int numUniforms = GraphicsDevice.GL.glGetProgramiv(ProgramID, GL20.GL_ACTIVE_UNIFORMS);
NumUniforms = numUniforms; NumUniforms = numUniforms;
if (NumUniforms == 0) if (NumUniforms == 0)
@ -347,8 +347,8 @@ namespace Blarg.GameFramework.Graphics
var uniform = new ShaderUniform(); var uniform = new ShaderUniform();
int uniformType; int uniformType;
uniform.Name = Platform.GL.glGetActiveUniform(ProgramID, i, out uniform.Size, out uniformType); uniform.Name = GraphicsDevice.GL.glGetActiveUniform(ProgramID, i, out uniform.Size, out uniformType);
uniform.Location = Platform.GL.glGetUniformLocation(ProgramID, uniform.Name); uniform.Location = GraphicsDevice.GL.glGetUniformLocation(ProgramID, uniform.Name);
uniform.Type = (int)uniformType; uniform.Type = (int)uniformType;
// it seems Windows/Mac (possibly Linux too) have differing opinions on // it seems Windows/Mac (possibly Linux too) have differing opinions on
@ -373,7 +373,7 @@ namespace Blarg.GameFramework.Graphics
if (ProgramID == -1) if (ProgramID == -1)
throw new InvalidOperationException(); throw new InvalidOperationException();
int numAttributes = Platform.GL.glGetProgramiv(ProgramID, GL20.GL_ACTIVE_ATTRIBUTES); int numAttributes = GraphicsDevice.GL.glGetProgramiv(ProgramID, GL20.GL_ACTIVE_ATTRIBUTES);
// sanity checking, which only matters for shader reloading (e.g. when a context is lost) // sanity checking, which only matters for shader reloading (e.g. when a context is lost)
if (_attributeMapping != null) if (_attributeMapping != null)
@ -403,8 +403,8 @@ namespace Blarg.GameFramework.Graphics
var attribute = new ShaderAttribute(); var attribute = new ShaderAttribute();
int attributeType; int attributeType;
attribute.Name = Platform.GL.glGetActiveAttrib(ProgramID, i, out attribute.Size, out attributeType); attribute.Name = GraphicsDevice.GL.glGetActiveAttrib(ProgramID, i, out attribute.Size, out attributeType);
attribute.Location = Platform.GL.glGetAttribLocation(ProgramID, attribute.Name); attribute.Location = GraphicsDevice.GL.glGetAttribLocation(ProgramID, attribute.Name);
attribute.Type = (int)attributeType; attribute.Type = (int)attributeType;
_attributes[i] = attribute; _attributes[i] = attribute;
@ -608,7 +608,7 @@ namespace Blarg.GameFramework.Graphics
throw new ArgumentException("Invalid uniform."); throw new ArgumentException("Invalid uniform.");
if (uniform.Size != 1) if (uniform.Size != 1)
throw new InvalidOperationException(); throw new InvalidOperationException();
Platform.GL.glUniform1f(uniform.Location, x); GraphicsDevice.GL.glUniform1f(uniform.Location, x);
} }
else else
{ {
@ -629,7 +629,7 @@ namespace Blarg.GameFramework.Graphics
throw new ArgumentException("Invalid uniform."); throw new ArgumentException("Invalid uniform.");
if (uniform.Size != 1) if (uniform.Size != 1)
throw new InvalidOperationException(); throw new InvalidOperationException();
Platform.GL.glUniform1i(uniform.Location, x); GraphicsDevice.GL.glUniform1i(uniform.Location, x);
} }
else else
{ {
@ -650,7 +650,7 @@ namespace Blarg.GameFramework.Graphics
throw new ArgumentException("Invalid uniform."); throw new ArgumentException("Invalid uniform.");
if (uniform.Size != 1) if (uniform.Size != 1)
throw new InvalidOperationException(); throw new InvalidOperationException();
Platform.GL.glUniform2f(uniform.Location, x, y); GraphicsDevice.GL.glUniform2f(uniform.Location, x, y);
} }
else else
{ {
@ -672,7 +672,7 @@ namespace Blarg.GameFramework.Graphics
throw new ArgumentException("Invalid uniform."); throw new ArgumentException("Invalid uniform.");
if (uniform.Size != 1) if (uniform.Size != 1)
throw new InvalidOperationException(); throw new InvalidOperationException();
Platform.GL.glUniform2i(uniform.Location, x, y); GraphicsDevice.GL.glUniform2i(uniform.Location, x, y);
} }
else else
{ {
@ -699,7 +699,7 @@ namespace Blarg.GameFramework.Graphics
throw new ArgumentException("Invalid uniform."); throw new ArgumentException("Invalid uniform.");
if (uniform.Size != 1) if (uniform.Size != 1)
throw new InvalidOperationException(); throw new InvalidOperationException();
Platform.GL.glUniform2f(uniform.Location, v.X, v.Y); GraphicsDevice.GL.glUniform2f(uniform.Location, v.X, v.Y);
} }
else else
{ {
@ -726,7 +726,7 @@ namespace Blarg.GameFramework.Graphics
throw new ArgumentException("Invalid uniform."); throw new ArgumentException("Invalid uniform.");
if (uniform.Size != 1) if (uniform.Size != 1)
throw new InvalidOperationException(); throw new InvalidOperationException();
Platform.GL.glUniform2i(uniform.Location, p.X, p.Y); GraphicsDevice.GL.glUniform2i(uniform.Location, p.X, p.Y);
} }
else else
{ {
@ -748,7 +748,7 @@ namespace Blarg.GameFramework.Graphics
throw new ArgumentException("Invalid uniform."); throw new ArgumentException("Invalid uniform.");
if (uniform.Size != 1) if (uniform.Size != 1)
throw new InvalidOperationException(); throw new InvalidOperationException();
Platform.GL.glUniform3f(uniform.Location, x, y, z); GraphicsDevice.GL.glUniform3f(uniform.Location, x, y, z);
} }
else else
{ {
@ -771,7 +771,7 @@ namespace Blarg.GameFramework.Graphics
throw new ArgumentException("Invalid uniform."); throw new ArgumentException("Invalid uniform.");
if (uniform.Size != 1) if (uniform.Size != 1)
throw new InvalidOperationException(); throw new InvalidOperationException();
Platform.GL.glUniform3i(uniform.Location, x, y, z); GraphicsDevice.GL.glUniform3i(uniform.Location, x, y, z);
} }
else else
{ {
@ -799,7 +799,7 @@ namespace Blarg.GameFramework.Graphics
throw new ArgumentException("Invalid uniform."); throw new ArgumentException("Invalid uniform.");
if (uniform.Size != 1) if (uniform.Size != 1)
throw new InvalidOperationException(); throw new InvalidOperationException();
Platform.GL.glUniform3f(uniform.Location, v.X, v.Y, v.Z); GraphicsDevice.GL.glUniform3f(uniform.Location, v.X, v.Y, v.Z);
} }
else else
{ {
@ -827,7 +827,7 @@ namespace Blarg.GameFramework.Graphics
throw new ArgumentException("Invalid uniform."); throw new ArgumentException("Invalid uniform.");
if (uniform.Size != 1) if (uniform.Size != 1)
throw new InvalidOperationException(); throw new InvalidOperationException();
Platform.GL.glUniform3i(uniform.Location, p.X, p.Y, p.Z); GraphicsDevice.GL.glUniform3i(uniform.Location, p.X, p.Y, p.Z);
} }
else else
{ {
@ -850,7 +850,7 @@ namespace Blarg.GameFramework.Graphics
throw new ArgumentException("Invalid uniform."); throw new ArgumentException("Invalid uniform.");
if (uniform.Size != 1) if (uniform.Size != 1)
throw new InvalidOperationException(); throw new InvalidOperationException();
Platform.GL.glUniform4f(uniform.Location, x, y, z, w); GraphicsDevice.GL.glUniform4f(uniform.Location, x, y, z, w);
} }
else else
{ {
@ -874,7 +874,7 @@ namespace Blarg.GameFramework.Graphics
throw new ArgumentException("Invalid uniform."); throw new ArgumentException("Invalid uniform.");
if (uniform.Size != 1) if (uniform.Size != 1)
throw new InvalidOperationException(); throw new InvalidOperationException();
Platform.GL.glUniform4i(uniform.Location, x, y, z, w); GraphicsDevice.GL.glUniform4i(uniform.Location, x, y, z, w);
} }
else else
{ {
@ -903,7 +903,7 @@ namespace Blarg.GameFramework.Graphics
throw new ArgumentException("Invalid uniform."); throw new ArgumentException("Invalid uniform.");
if (uniform.Size != 1) if (uniform.Size != 1)
throw new InvalidOperationException(); throw new InvalidOperationException();
Platform.GL.glUniform4f(uniform.Location, v.X, v.Y, v.Z, v.W); GraphicsDevice.GL.glUniform4f(uniform.Location, v.X, v.Y, v.Z, v.W);
} }
else else
{ {
@ -932,7 +932,7 @@ namespace Blarg.GameFramework.Graphics
throw new ArgumentException("Invalid uniform."); throw new ArgumentException("Invalid uniform.");
if (uniform.Size != 1) if (uniform.Size != 1)
throw new InvalidOperationException(); throw new InvalidOperationException();
Platform.GL.glUniform4f(uniform.Location, q.X, q.Y, q.Z, q.W); GraphicsDevice.GL.glUniform4f(uniform.Location, q.X, q.Y, q.Z, q.W);
} }
else else
{ {
@ -961,7 +961,7 @@ namespace Blarg.GameFramework.Graphics
throw new ArgumentException("Invalid uniform."); throw new ArgumentException("Invalid uniform.");
if (uniform.Size != 1) if (uniform.Size != 1)
throw new InvalidOperationException(); throw new InvalidOperationException();
Platform.GL.glUniform4f(uniform.Location, c.R, c.G, c.B, c.A); GraphicsDevice.GL.glUniform4f(uniform.Location, c.R, c.G, c.B, c.A);
} }
else else
{ {
@ -990,7 +990,7 @@ namespace Blarg.GameFramework.Graphics
throw new ArgumentException("Invalid uniform."); throw new ArgumentException("Invalid uniform.");
if (uniform.Size != 1) if (uniform.Size != 1)
throw new InvalidOperationException(); throw new InvalidOperationException();
Platform.GL.glUniformMatrix3fv(uniform.Location, 1, false, ref m.M11); GraphicsDevice.GL.glUniformMatrix3fv(uniform.Location, 1, false, ref m.M11);
} }
else else
{ {
@ -1016,7 +1016,7 @@ namespace Blarg.GameFramework.Graphics
throw new ArgumentException("Invalid uniform."); throw new ArgumentException("Invalid uniform.");
if (uniform.Size != 1) if (uniform.Size != 1)
throw new InvalidOperationException(); throw new InvalidOperationException();
Platform.GL.glUniformMatrix4fv(uniform.Location, 1, false, ref m.M11); GraphicsDevice.GL.glUniformMatrix4fv(uniform.Location, 1, false, ref m.M11);
} }
else else
{ {
@ -1037,7 +1037,7 @@ namespace Blarg.GameFramework.Graphics
throw new ArgumentException("Invalid uniform."); throw new ArgumentException("Invalid uniform.");
if (uniform.Size <= 1) if (uniform.Size <= 1)
throw new InvalidOperationException(); throw new InvalidOperationException();
Platform.GL.glUniform1fv(uniform.Location, x.Length, x); GraphicsDevice.GL.glUniform1fv(uniform.Location, x.Length, x);
} }
else else
{ {
@ -1059,7 +1059,7 @@ namespace Blarg.GameFramework.Graphics
{ {
fixed (int *p = x) fixed (int *p = x)
{ {
Platform.GL.glUniform1fv(uniform.Location, x.Length, new IntPtr((long)p)); GraphicsDevice.GL.glUniform1fv(uniform.Location, x.Length, new IntPtr((long)p));
} }
} }
} }
@ -1079,7 +1079,7 @@ namespace Blarg.GameFramework.Graphics
if (uniform.Size <= 1) if (uniform.Size <= 1)
throw new InvalidOperationException(); throw new InvalidOperationException();
Platform.GL.glUniform2fv(uniform.Location, v.Length, ref v[0].X); GraphicsDevice.GL.glUniform2fv(uniform.Location, v.Length, ref v[0].X);
} }
else else
{ {
@ -1097,7 +1097,7 @@ namespace Blarg.GameFramework.Graphics
if (uniform.Size <= 1) if (uniform.Size <= 1)
throw new InvalidOperationException(); throw new InvalidOperationException();
Platform.GL.glUniform3fv(uniform.Location, v.Length, ref v[0].X); GraphicsDevice.GL.glUniform3fv(uniform.Location, v.Length, ref v[0].X);
} }
else else
{ {
@ -1115,7 +1115,7 @@ namespace Blarg.GameFramework.Graphics
if (uniform.Size <= 1) if (uniform.Size <= 1)
throw new InvalidOperationException(); throw new InvalidOperationException();
Platform.GL.glUniform4fv(uniform.Location, v.Length, ref v[0].X); GraphicsDevice.GL.glUniform4fv(uniform.Location, v.Length, ref v[0].X);
} }
else else
{ {
@ -1133,7 +1133,7 @@ namespace Blarg.GameFramework.Graphics
if (uniform.Size <= 1) if (uniform.Size <= 1)
throw new InvalidOperationException(); throw new InvalidOperationException();
Platform.GL.glUniform4fv(uniform.Location, q.Length, ref q[0].X); GraphicsDevice.GL.glUniform4fv(uniform.Location, q.Length, ref q[0].X);
} }
else else
{ {
@ -1151,7 +1151,7 @@ namespace Blarg.GameFramework.Graphics
if (uniform.Size <= 1) if (uniform.Size <= 1)
throw new InvalidOperationException(); throw new InvalidOperationException();
Platform.GL.glUniform4fv(uniform.Location, c.Length, ref c[0].R); GraphicsDevice.GL.glUniform4fv(uniform.Location, c.Length, ref c[0].R);
} }
else else
{ {
@ -1169,7 +1169,7 @@ namespace Blarg.GameFramework.Graphics
if (uniform.Size <= 1) if (uniform.Size <= 1)
throw new InvalidOperationException(); throw new InvalidOperationException();
Platform.GL.glUniformMatrix3fv(uniform.Location, m.Length, false, ref m[0].M11); GraphicsDevice.GL.glUniformMatrix3fv(uniform.Location, m.Length, false, ref m[0].M11);
} }
else else
{ {
@ -1187,7 +1187,7 @@ namespace Blarg.GameFramework.Graphics
if (uniform.Size <= 1) if (uniform.Size <= 1)
throw new InvalidOperationException(); throw new InvalidOperationException();
Platform.GL.glUniformMatrix4fv(uniform.Location, m.Length, false, ref m[0].M11); GraphicsDevice.GL.glUniformMatrix4fv(uniform.Location, m.Length, false, ref m[0].M11);
} }
else else
{ {
@ -1224,17 +1224,17 @@ namespace Blarg.GameFramework.Graphics
if (VertexShaderID != -1) if (VertexShaderID != -1)
{ {
Platform.GL.glDeleteShader(VertexShaderID); GraphicsDevice.GL.glDeleteShader(VertexShaderID);
VertexShaderID = -1; VertexShaderID = -1;
} }
if (FragmentShaderID != -1) if (FragmentShaderID != -1)
{ {
Platform.GL.glDeleteShader(FragmentShaderID); GraphicsDevice.GL.glDeleteShader(FragmentShaderID);
FragmentShaderID = -1; FragmentShaderID = -1;
} }
if (ProgramID != -1) if (ProgramID != -1)
{ {
Platform.GL.glDeleteProgram(ProgramID); GraphicsDevice.GL.glDeleteProgram(ProgramID);
ProgramID = -1; ProgramID = -1;
} }

View file

@ -93,14 +93,14 @@ namespace Blarg.GameFramework.Graphics
} }
if (_providedRenderState != null) if (_providedRenderState != null)
_providedRenderState.Apply(); _providedRenderState.Apply(GraphicsDevice);
else else
_defaultRenderState.Apply(); _defaultRenderState.Apply(GraphicsDevice);
if (_providedBlendState != null) if (_providedBlendState != null)
_providedBlendState.Apply(); _providedBlendState.Apply(GraphicsDevice);
else else
_defaultBlendState.Apply(); _defaultBlendState.Apply(GraphicsDevice);
GraphicsDevice.BindShader(_shader); GraphicsDevice.BindShader(_shader);
_shader.SetModelViewMatrix(Matrix4x4.Identity); _shader.SetModelViewMatrix(Matrix4x4.Identity);

View file

@ -97,15 +97,15 @@ namespace Blarg.GameFramework.Graphics
Height = image.Height; Height = image.Height;
Format = textureFormat; Format = textureFormat;
ID = Platform.GL.glGenTextures(); ID = GraphicsDevice.GL.glGenTextures();
GraphicsDevice.BindTexture(this, 0); GraphicsDevice.BindTexture(this, 0);
if (_textureParams == null) if (_textureParams == null)
_textureParams = GraphicsDevice.GetCopyOfTextureParameters(); _textureParams = GraphicsDevice.GetCopyOfTextureParameters();
_textureParams.Apply(); _textureParams.Apply(GraphicsDevice);
Platform.GL.glTexImage2D(GL20.GL_TEXTURE_2D, 0, internalFormat, Width, Height, 0, pixelFormat, pixelType, image.Pixels); GraphicsDevice.GL.glTexImage2D(GL20.GL_TEXTURE_2D, 0, internalFormat, Width, Height, 0, pixelFormat, pixelType, image.Pixels);
Platform.Logger.Info(GraphicsContextResource.LOG_TAG, "Created texture from image. ID = {0}, bpp = {1}, size = {2}x{3}.", ID, image.BitsPerPixel, Width, Height); Platform.Logger.Info(GraphicsContextResource.LOG_TAG, "Created texture from image. ID = {0}, bpp = {1}, size = {2}x{3}.", ID, image.BitsPerPixel, Width, Height);
} }
@ -131,15 +131,15 @@ namespace Blarg.GameFramework.Graphics
Height = height; Height = height;
Format = format; Format = format;
ID = Platform.GL.glGenTextures(); ID = GraphicsDevice.GL.glGenTextures();
GraphicsDevice.BindTexture(this, 0); GraphicsDevice.BindTexture(this, 0);
if (!useExistingTextureParams || _textureParams == null) if (!useExistingTextureParams || _textureParams == null)
_textureParams = GraphicsDevice.GetCopyOfTextureParameters(); _textureParams = GraphicsDevice.GetCopyOfTextureParameters();
_textureParams.Apply(); _textureParams.Apply(GraphicsDevice);
Platform.GL.glTexImage2D(GL20.GL_TEXTURE_2D, 0, internalFormat, Width, Height, 0, pixelFormat, pixelType, IntPtr.Zero); GraphicsDevice.GL.glTexImage2D(GL20.GL_TEXTURE_2D, 0, internalFormat, Width, Height, 0, pixelFormat, pixelType, IntPtr.Zero);
if (Format == TextureFormat.Depth) if (Format == TextureFormat.Depth)
Platform.Logger.Info(GraphicsContextResource.LOG_TAG, "Created uninitialized texture. ID = {0}, depth component only, size = {1}x{2}", ID, Width, Height); Platform.Logger.Info(GraphicsContextResource.LOG_TAG, "Created uninitialized texture. ID = {0}, depth component only, size = {1}x{2}", ID, Width, Height);
@ -192,7 +192,7 @@ namespace Blarg.GameFramework.Graphics
} }
GraphicsDevice.BindTexture(this, 0); GraphicsDevice.BindTexture(this, 0);
Platform.GL.glTexSubImage2D(GL20.GL_TEXTURE_2D, 0, destX, destY, image.Width, image.Height, pixelFormat, pixelType, image.Pixels); GraphicsDevice.GL.glTexSubImage2D(GL20.GL_TEXTURE_2D, 0, destX, destY, image.Width, image.Height, pixelFormat, pixelType, image.Pixels);
} }
private void GetTextureSpecsFromFormat(TextureFormat textureFormat, out int bpp, out int internalFormat, out int pixelFormat, out int type) private void GetTextureSpecsFromFormat(TextureFormat textureFormat, out int bpp, out int internalFormat, out int pixelFormat, out int type)
@ -271,7 +271,7 @@ namespace Blarg.GameFramework.Graphics
if (GraphicsDevice != null) if (GraphicsDevice != null)
GraphicsDevice.UnbindTexture(this); GraphicsDevice.UnbindTexture(this);
Platform.GL.glDeleteTextures(ID); GraphicsDevice.GL.glDeleteTextures(ID);
Platform.Logger.Info(GraphicsContextResource.LOG_TAG, "Deleted Texture ID = {0}.", ID); Platform.Logger.Info(GraphicsContextResource.LOG_TAG, "Deleted Texture ID = {0}.", ID);

View file

@ -53,8 +53,11 @@ namespace Blarg.GameFramework.Graphics
MagFilter = magFilter; MagFilter = magFilter;
} }
public void Apply() public void Apply(GraphicsDevice graphicsDevice)
{ {
if (graphicsDevice == null)
throw new ArgumentNullException("graphicsDevice");
int minFilter = GL20.GL_NEAREST; int minFilter = GL20.GL_NEAREST;
int magFilter = GL20.GL_LINEAR; int magFilter = GL20.GL_LINEAR;
int wrapS = GL20.GL_REPEAT; int wrapS = GL20.GL_REPEAT;
@ -88,10 +91,10 @@ namespace Blarg.GameFramework.Graphics
case WrapMode.Repeat: wrapT = GL20.GL_REPEAT; break; case WrapMode.Repeat: wrapT = GL20.GL_REPEAT; break;
} }
Platform.GL.glTexParameteri(GL20.GL_TEXTURE_2D, GL20.GL_TEXTURE_MIN_FILTER, (int)minFilter); graphicsDevice.GL.glTexParameteri(GL20.GL_TEXTURE_2D, GL20.GL_TEXTURE_MIN_FILTER, (int)minFilter);
Platform.GL.glTexParameteri(GL20.GL_TEXTURE_2D, GL20.GL_TEXTURE_MAG_FILTER, (int)magFilter); graphicsDevice.GL.glTexParameteri(GL20.GL_TEXTURE_2D, GL20.GL_TEXTURE_MAG_FILTER, (int)magFilter);
Platform.GL.glTexParameteri(GL20.GL_TEXTURE_2D, GL20.GL_TEXTURE_WRAP_S, (int)wrapS); graphicsDevice.GL.glTexParameteri(GL20.GL_TEXTURE_2D, GL20.GL_TEXTURE_WRAP_S, (int)wrapS);
Platform.GL.glTexParameteri(GL20.GL_TEXTURE_2D, GL20.GL_TEXTURE_WRAP_T, (int)wrapT); graphicsDevice.GL.glTexParameteri(GL20.GL_TEXTURE_2D, GL20.GL_TEXTURE_WRAP_T, (int)wrapT);
} }
private void Init() private void Init()

View file

@ -216,7 +216,7 @@ namespace Blarg.GameFramework.Graphics
} }
// we **do** obviously want this to be rotated (if there is a rotation) // we **do** obviously want this to be rotated (if there is a rotation)
Platform.GL.glViewport(viewport.Left, viewport.Top, viewport.Width, viewport.Height); _graphicsDevice.GL.glViewport(viewport.Left, viewport.Top, viewport.Width, viewport.Height);
// we also **don't** want the camera to work with a rotated viewport // we also **don't** want the camera to work with a rotated viewport
if (_camera != null) if (_camera != null)

View file

@ -20,7 +20,6 @@ namespace Blarg.GameFramework
ITouchScreen TouchScreen { get; } ITouchScreen TouchScreen { get; }
IPlatformWindow Window { get; } IPlatformWindow Window { get; }
GraphicsDevice GraphicsDevice { get; } GraphicsDevice GraphicsDevice { get; }
GL20 GL { get; }
int FPS { get; } int FPS { get; }
float FrameTime { get; } float FrameTime { get; }

View file

@ -1,5 +1,4 @@
using System; using System;
using PortableGL;
using Blarg.GameFramework.Graphics; using Blarg.GameFramework.Graphics;
using Blarg.GameFramework.Input; using Blarg.GameFramework.Input;
using Blarg.GameFramework.IO; using Blarg.GameFramework.IO;
@ -70,11 +69,6 @@ namespace Blarg.GameFramework
get { return Application.GraphicsDevice; } get { return Application.GraphicsDevice; }
} }
public static GL20 GL
{
get { return Application.GL; }
}
public static void Set(IApplication application) public static void Set(IApplication application)
{ {
if (Application != null) if (Application != null)