aboutsummaryrefslogtreecommitdiffstatsci
path: root/src/OpenTKGameWindow.cs
diff options
context:
space:
mode:
authorjpbruyere <jp.bruyere@hotmail.com>2015-05-20 14:02:49 +0200
committerjpbruyere <jp.bruyere@hotmail.com>2015-05-20 14:02:49 +0200
commitb98f9cd63ae78c88988391c251c38338e9c76384 (patch)
tree6a055ce2c45a249ab435a83f23eafb9c17c0a957 /src/OpenTKGameWindow.cs
parentfd19c1fd6960faf9b7131a4dfade4bba95abcf81 (diff)
* GOLIBTest_fps.cs: divers
* Rectangles.cs: to string overload * OpenTKGameWindow.cs: - correct resizing bug due to missing Viewport setup
Diffstat (limited to 'src/OpenTKGameWindow.cs')
-rwxr-xr-xsrc/OpenTKGameWindow.cs43
1 files changed, 21 insertions, 22 deletions
diff --git a/src/OpenTKGameWindow.cs b/src/OpenTKGameWindow.cs
index 86d8d312..3ee7e647 100755
--- a/src/OpenTKGameWindow.cs
+++ b/src/OpenTKGameWindow.cs
@@ -135,8 +135,6 @@ namespace go
#endregion
#region graphic contexte
- bool recreateContext = true;
-
Context ctx;
Surface surf;
byte[] bmp;
@@ -146,20 +144,19 @@ namespace go
go.GLBackend.Shader shader;
Matrix4 projectionMatrix,
modelviewMatrix;
+ int[] viewport = new int[4];
Rectangle dirtyZone = Rectangle.Empty;
-
void createContext()
- {
+ {
createOpenGLSurface ();
if (uiQuad != null)
uiQuad.Dispose ();
- uiQuad = new QuadVAO (0, 0, ClientRectangle.Width, ClientRectangle.Height,0,1,1,-1);
+ uiQuad = new QuadVAO (0, 0, ClientRectangle.Width, ClientRectangle.Height, 0, 1, 1, -1);
projectionMatrix = Matrix4.CreateOrthographicOffCenter
(0, ClientRectangle.Width, ClientRectangle.Height, 0, 0, 1);
modelviewMatrix = Matrix4.Identity;
redrawClip.AddRectangle (ClientRectangle);
- recreateContext = false;
}
void createOpenGLSurface()
{
@@ -170,7 +167,7 @@ namespace go
bmp = new byte[bmpSize];
//create texture
- if (texID > 0)
+ if (GL.IsTexture(texID))
GL.DeleteTexture (texID);
GL.GenTextures(1, out texID);
GL.ActiveTexture (TextureUnit.Texture0);
@@ -187,6 +184,8 @@ namespace go
}
void OpenGLDraw()
{
+ GL.GetInteger (GetPName.Viewport, viewport);
+ GL.Viewport (0, 0, ClientRectangle.Width, ClientRectangle.Height);
shader.Enable ();
shader.ProjectionMatrix = projectionMatrix;
shader.ModelViewMatrix = modelviewMatrix;
@@ -203,6 +202,7 @@ namespace go
GL.BindTexture(TextureTarget.Texture2D, 0);
shader.Disable ();
+ GL.Viewport (viewport [0], viewport [1], viewport [2], viewport [3]);
}
#endregion
@@ -226,15 +226,7 @@ namespace go
GraphicObject[] invGOList = new GraphicObject[GraphicObjects.Count];
GraphicObjects.CopyTo (invGOList,0);
invGOList = invGOList.Reverse ().ToArray ();
-//
-// foreach (GraphicObject p in invGOList) {
-// if (p.Visible) {
-// layoutTime.Start ();
-// while(!p.LayoutIsValid)
-// p.UpdateLayout ();
-// layoutTime.Stop ();
-// }
-// }
+
while (Interface.LayoutingQueue.Count > 0) {
LayoutingQueueItem lqi = Interface.LayoutingQueue.Dequeue ();
lqi.ProcessLayouting ();
@@ -252,11 +244,12 @@ namespace go
lock (redrawClip) {
- if (redrawClip.count > 0) {
+ if (redrawClip.count > 0) {
// #if DEBUG_CLIP_RECTANGLE
// redrawClip.stroke (ctx, new Color(1.0,0,0,0.3));
// #endif
- redrawClip.clearAndClip (ctx);//rajouté après, tester si utile
+ redrawClip.clearAndClip (ctx);//rajouté après, tester si utile
+
//Link.draw (ctx);
foreach (GraphicObject p in invGOList) {
if (p.Visible) {
@@ -282,6 +275,7 @@ namespace go
redrawClip.Reset ();
}
}
+ //surf.WriteToPng (@"/mnt/data/test.png");
ctx.Dispose ();
surf.Dispose ();
// if (ToolTip.isVisible) {
@@ -326,8 +320,8 @@ namespace go
protected override void OnRenderFrame(FrameEventArgs e)
{
base.OnRenderFrame(e);
- if (recreateContext)
- createContext ();
+// if (recreateContext)
+// createContext ();
OpenGLDraw ();
}
protected override void OnLoad(EventArgs e)
@@ -350,6 +344,7 @@ namespace go
int matl = GL.GetInteger (GetPName.MaxArrayTextureLayers);
int mts = GL.GetInteger (GetPName.MaxTextureSize);
+
shader = new go.GLBackend.TexturedShader ();
}
protected override void OnUnload(EventArgs e)
@@ -363,7 +358,11 @@ namespace go
protected override void OnResize(EventArgs e)
{
base.OnResize (e);
- recreateContext = true;
+ createContext ();
+ foreach (GraphicObject g in GraphicObjects) {
+ g.RegisterForLayouting ((int)LayoutingType.All);
+ //g.registerForGraphicUpdate();
+ }
}
#endregion
@@ -454,7 +453,7 @@ namespace go
#region keyboard Handling
void Keyboard_KeyDown(object sender, KeyboardKeyEventArgs e)
- {
+ {
if (_focusedWidget == null)
return;
_focusedWidget.onKeyDown (sender, e);