OpenGL VBO程序给出了空白屏幕

OpenGL VBO程序给出了空白屏幕,opengl,opengl-3,Opengl,Opengl 3,我一直在尝试将我的一些代码转换成现代OpenGL。我已经得到了一个点,我没有得到任何OpenGL错误,但没有显示当我试图绘制一个对象。以下是我的代码(减去上下文创建和错误检查): 不完全是SSCE,但我认为这是所有可能导致问题的代码,而且它非常独立。在调用glGetAttriblation()/glEnableVertexAttribArray()之前尝试glUseProgram()。您的问题很可能在于cg程序和modelview空间 添加cgGLSetStateMatrixParameter(

我一直在尝试将我的一些代码转换成现代OpenGL。我已经得到了一个点,我没有得到任何OpenGL错误,但没有显示当我试图绘制一个对象。以下是我的代码(减去上下文创建和错误检查):


不完全是SSCE,但我认为这是所有可能导致问题的代码,而且它非常独立。

在调用
glGetAttriblation()/glEnableVertexAttribArray()
之前尝试
glUseProgram()

您的问题很可能在于cg程序和modelview空间

添加
cgGLSetStateMatrixParameter(modelViewMatrix、CG\U GL\U MODELVIEW\U PROJECTION\U MATRIX、CG\U GL\U MATRIX\U IDENTITY)添加到程序中,并在cg文件中添加
OUT.HPos=mul(ModelViewProj,in.position)

还可以在initcg部分中添加
modelViewMatrix
作为cg参数


我从cgtoolkit中的基本opengl示例中得出了这个结论,我的渲染功能与您的非常相似,在遇到同样的问题后,现在可以正常工作。

我找到了它。在一些重构过程中,我忘记了正确设置宽度和高度变量,创建了一个0乘0的视口。哦…

您是否尝试过先使用VBOs绘制它?如果这样做有效,那么您可能需要确保您的GPU支持VBO。你可以用GLGetInfo函数来检查这一点(我记不清它到底叫什么了…)我的代码在使用固定函数管道时工作正常,但我已经去掉了其中的大部分,并用shader/VBO代码替换了它。我使用的是OpenGL 3.3,所以我不得不使用VBOs。我确信我的GPU支持它们,因为它的驱动程序升级到OpenGL 4.2,而VBOs早在那之前就成为了核心。3.3不会强迫你使用着色器。兼容性配置文件允许您使用FFP。我刚刚提供了代码,在尝试从您的翻译中猜测时,有太多的潜在误解或细微错误。看看真正的代码,你所做的并不是模棱两可的。如果你需要帮助,你需要发布代码。不要含糊其辞地描述你的代码是什么样的,不是2行或3行,而是足够的代码来重现问题。如果没有它,我们只是在猜测中浪费时间。实际上,我在GlenableVertexAttributeArray()之前(我必须重构一些代码以使示例简洁)就有了它,但在GlGetAttributeLocation()之前没有。我怀疑这会影响后者,但我会尽力的。顺便问一下,GLGetAttriblLocation()调用是否适合用于GLSL的新输入/输出变量?我已经尝试了OpenGL调试器,看起来所有VBO的东西都在进行中。我会四处看看,看看是否能找到其他可能导致问题的原因。
//Compile shaders and create/link program
//I very highly doubt the problem's here (all my tests say it worked fine),
//so I'm leaving this out for now,  but I'll dig it out of my classes if
//there's no obvious problem with the VBO code.

//Create VAO, VBO

unsigned vaoId, vboId;
int positionAttributeLocation;
float vertices[] = {...vertex data here...};
unsigned indices[] = {...index data here...};

positionAttributeLocation = glGetAttribLocation(programId, "position");

glGenVertexArrays(1, &vaoId);
glGenBuffers(1, &vboId);

glBindVertexArray(vaoId);
glBindBuffer(GL_ARRAY_BUFFER, vboId);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glVertexAttribPointer(positionAttributeLocation, 3, GL_FLOAT, GL_FALSE, 0, null);
glEnableVertexAttribArray(positionAttributeLocation);

//Create index buffer
unsigned indexId;
glGenBuffers(1, &indexId);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexId);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);

glUseProgram(programId);
glDrawElements(GL_TRIANGLES, sizeof(indices)/sizeof(unsigned int), GL_UNSIGNED_INT, null);