我正在尝试创建一个工具,该工具将在 openGL 中绘制一个形状,然后在 windows 窗体中修改该形状的属性值。因此,如果我的形状是矩形,我将创建一个允许用户控制矩形大小、颜色等的表单。我用托管 c++ 编写了 openGL 代码,用 c# 编写了表单,随着其中一些形状变得更加复杂,我决定为它们制作显示列表(出于性能和可预测性目的)。
我在形状的构造函数中定义了显示列表,并在渲染方法中调用了显示列表。
我的问题是我的显示列表根本不会运行。我在显示列表之外渲染的部分将被渲染,但显示列表内的部分不会被渲染。
这是我的过程的一些示例代码:
//c# side
GLRectangle rect
public CSharpRectangle() {
rect = new GLRectangle();
}
//managed c++ side
public GLRectangle() {
width = 50;
height = 50;
//initialize more values
rectDL = glGenLists(1);
glNewList(rectDL, GL_COMPILE);
renderRect();
glEndList();
}
public render() {
//Draw border
glBegin(GL_LINE_LOOP);
glVertex2f(0, 0);
glVertex2f(width, 0);
glVertex2f(width, height);
glVertex2f(0, height);
glEnd();
//Draw interior
glCallList(rectDL);
}
private renderRect() {
glRectf(0,0,width,height);
}
在这个例子中,矩形的边框将被渲染,但矩形本身不会被渲染......如果我用简单的方法调用替换显示列表,矩形被渲染得很好。有谁知道为什么会发生这种情况?