hi there
im completely new to opengl and i have no clue at all xD
im trying to get it to work on ubuntu linux with c# and tao.
finally it works but when i move the window around or cover it with another window the drawings disappear.
i read that this can be solved via the reshape function callback but it seems not to do anything.
i guess its just a minor flaw of mine but as i have no experience i cant find it.
this is my complete code:
using System;
using System.Collections.Generic;
using Tao.FreeGlut;
using Tao.OpenGl;
namespace FreeGlutExample
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
// initialise glut library
Glut.glutInit();
// initialise the window settings
Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_SINGLE);
Glut.glutInitWindowSize(400, 400);
Glut.glutInitWindowPosition(400, 200);
Glut.glutCreateWindow("GdgDV Uebung 2");
Glu.gluOrtho2D(0,400,400,0); /* how object is mapped to window */
// do our own initialisation
Init();
// set the callback functions
Glut.glutDisplayFunc(new Glut.DisplayCallback(Display));
Glut.glutReshapeFunc(new Glut.ReshapeCallback(Reshape));
// enter the main loop. Glut will be here permanently from now on
// until we quit the program
Glut.glutMainLoop();
}
/// <summary>
/// initialises the openGL settings
/// </summary>
private static void Init()
{
Gl.glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
}
/// <summary>
/// called when the window changes size
/// </summary>
/// <param name="w">new width of the window</param>
/// <param name="h">ne height of the window</param>
private static void Reshape(int w, int h)
{
if (h == 0) h = 1;
Glut.glutPostRedisplay();
}
/// <summary>
/// the display callback function
/// </summary>
private static void Display()
{
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
// 2 kreis in orange
Gl.glColor3f(1, 0.5f, 0);
circle(200, 200, 200, 360, 0);
// 1 fünfeck in gelb
Gl.glColor3f(1, 1, 0);
circle(200, 200, 200, 5, -1f);
// 3 kreis in blau
Gl.glColor3f(0, 1, 1);
circle(200, 200, 162, 360, 0);
// 4 fünfeck in gelb
Gl.glColor3f(1, 1, 0);
circle(200, 200, 162, 5, -1f);
}
public static void circle(float center_x, float center_y, float radius, float steps, float rotation) {
double PI2 = Math.PI*2;
float x = 0.0f;
float y = 0.0f;
Gl.glBegin(Gl.GL_POLYGON);
for( double theta = rotation; theta < PI2; theta += PI2 / steps ) {
x = (float) (center_x + ( Math.Cos( theta ) * radius));
y = (float) (center_y + ( Math.Sin( theta ) * radius));
Gl.glVertex2f(x, y);
}
Gl.glEnd();
}
}
}
it would be great if you could help a lost beginner
thanks in advance