The function is triggered only when the form window is resized.
public partial class MainForm : Form { Timer timer; bool flag; public MainForm() { InitializeComponent(); simpleOpenGlControl1.InitializeContexts(); } private void timerFunc(object sender, EventArgs e) { uint texture_text = 0; Gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); Gl.glClear(Gl.GL_COLOR_BUFFER_BIT); // ! Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ var text_bmp = new Bitmap(simpleOpenGlControl1.Width, simpleOpenGlControl1.Height); // ! Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ GDI+ ΠΈΠ· ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Graphics gfx = Graphics.FromImage(text_bmp); // ! ΠΡΠΈΡΠ°Π΅ΠΌ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ²Π΅ΡΠΎΠΌ gfx.Clear(Color.Beige); // ! Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΡΠΈΡΡ var font = new Font(FontFamily.GenericSerif, 14.0f); // ! ΠΡΡΠΈΡΠΎΠ²ΡΠ²Π°Π΅ΠΌ ΡΡΡΠΎΠΊΡ Π² ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ (Π² ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ) if(flag) { gfx.DrawString("ΠΡΠΈΠ²Π΅Ρ, ΠΠΈΡ!", font, Brushes.Black, new PointF(30, 30)); flag = false; } else { gfx.DrawString("ΠΡΠΎΡΠ°ΠΉ, ΠΠΈΡ!", font, Brushes.Black, new PointF(30, 30)); flag = true; } // ! ΠΡΡΡΠ³ΠΈΠ²Π°Π΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ BitmapData data = text_bmp.LockBits(new Rectangle(0, 0, text_bmp.Width, text_bmp.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); // ! ΠΠΊΠ»ΡΡΠ°Π΅ΠΌ ΡΠ΅ΠΊΡΡΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Gl.glEnable(Gl.GL_TEXTURE_2D); // ! ΠΠ΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡΡΠ½ΡΠΉ ID Gl.glGenTextures(1, out texture_text); // ! ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ΅ΠΊΡΡΡΡΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Gl.glBindTexture(Gl.GL_TEXTURE_2D, texture_text); // ! ΠΠ°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΠ΅ΠΊΡΡΡΡΡ Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR); Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR); Gl.glTexEnvf(Gl.GL_TEXTURE_ENV, Gl.GL_TEXTURE_ENV_MODE, Gl.GL_REPLACE); // ! ΠΠΎΠ΄Π³ΡΡΠΆΠ°Π΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Π² ΡΠ΅ΠΊΡΡΡΡΡ Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGBA, text_bmp.Width, text_bmp.Height, 0, Gl.GL_BGRA, Gl.GL_UNSIGNED_BYTE, data.Scan0); text_bmp.UnlockBits(data); // ! ΠΠΊΠ»ΡΡΠ°Π΅ΠΌ ΡΠΌΠ΅ΡΠΈΠ²Π°Π½ΠΈΠ΅ Gl.glEnable(Gl.GL_BLEND); Gl.glBlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE_MINUS_SRC_ALPHA); // ! ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ΅ΠΊΡΡΡΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Gl.glBindTexture(Gl.GL_TEXTURE_2D, texture_text); // ! Π ΠΈΡΡΠ΅ΠΌ ΠΏΡΡΠΌΠΎΠ³ΡΠ»ΡΠ½ΠΈΠΊ Ρ Π½Π°ΡΠ΅ΠΉ ΡΠ΅ΠΊΡΡΡΠΎΠΉ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ΅ΠΊΡΡ Gl.glBegin(Gl.GL_QUADS); Gl.glTexCoord2f(0f, 1f); Gl.glVertex2f(-1.0f, -1.0f); Gl.glTexCoord2f(1f, 1f); Gl.glVertex2f(1f, -1.0f); Gl.glTexCoord2f(1f, 0f); Gl.glVertex2f(1f, 1f); Gl.glTexCoord2f(0f, 0f); Gl.glVertex2f(-1.0f, 1f); Gl.glEnd(); Gl.glFlush(); Invalidate(); } void MainForm_FormClosed(object sender, FormClosedEventArgs e) { Application.Exit(); this.Dispose(); } void MainForm_Load(object sender, EventArgs e) { timer = new Timer(); timer.Interval = 100; timer.Tick += timerFunc; timer.Start(); } }