I have an interresting thing. I want to get the rendered objects window coordinates. When i use this in OpenGLDraw event:
var modelview = new double[16];
gl.GetDouble(OpenGL.GL_MODELVIEW_MATRIX, modelview);
Drawing doenes't work. Environment: VS 2019 community edition, SharpGL.WinForms 3.1.1., c# winform project, framework 4.6.1
OpenGLControl events: Init, I need only 2D space.
private void RenderPanel_OpenGLInitialized(object sender, EventArgs e)
{
gl = RenderPanel.OpenGL;
gl.Disable(OpenGL.GL_DEPTH_TEST);
gl.Enable(OpenGL.GL_BLEND);
gl.BlendFunc(OpenGL.GL_SRC_ALPHA, OpenGL.GL_ONE_MINUS_SRC_ALPHA);
gl.LoadIdentity();
gl.MatrixMode(OpenGL.GL_PROJECTION);
gl.LoadIdentity();
gl.Viewport(0, 0, RenderPanel.Width, RenderPanel.Height);
gl.Ortho(0, RenderPanel.Width, RenderPanel.Height, 0, 1, -1);
gl.MatrixMode(OpenGL.GL_MODELVIEW);
gl.LoadIdentity();
}
Draw: It's works fine, drawing objects
private void RenderPanel_OpenGLDraw(object sender, RenderEventArgs args)
{
gl.ClearColor(1, 1, 1, 1);
gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
gl.LoadIdentity();
glColor(Color.White);
gl.Enable(OpenGL.GL_TEXTURE_2D);
foreach (ImageItem img in ImageItems.Items)
{
img.Draw();
}
}
I want use this in foreach loop, after the img.Draw() (part of code)
var modelview = new double[16];
var projection = new double[16];
var viewport = new int[4];
var winx = new double[1];
var winy = new double[1];
var winz = new double[1];
gl.GetDouble(OpenGL.GL_MODELVIEW_MATRIX, modelview);
gl.GetDouble(OpenGL.GL_PROJECTION_MATRIX, projection);
gl.GetInteger(OpenGL.GL_VIEWPORT, viewport);
gl.Project(0, 0, 0, modelview, projection, viewport, winx, winy, winz);
try to debug, comment row by row. I see when use gl.GetDouble() drawing gone. I get a correct window coordinates just last object disappear. .Draw() is simple
gl.BindTexture(OpenGL.GL_TEXTURE_2D, TextureID);
gl.LoadIdentity();
gl.Color(1f, 1f, 1f, pos.a);
gl.Translate(pos.x, pos.y, 0);
gl.Rotate(pos.r, 0, 0);
OpenGLDraw.DrawQuad(pos.w, pos.h);
It's a bug. I planted this 2 rows to some sample projects and drawing method borken(some objects disappear). I try to lots of thing. Finally changed renderContextType and the last object appear. I think so not a good solution but works.