【问题标题】:OpenGL gives Invalid Image FormatOpenGL给出无效的图像格式
【发布时间】:2011-12-30 20:41:44
【问题描述】:

我有一个来自 opengl 的无效图像格式错误。我不确定是因为我使用了预编译的头文件,还是我没有正确初始化 OpenGL。据我所知,我没有使用 C++/CLI(我选择在 VC++ Express 2010 中创建一个空项目)。我正在运行 Windows7 (x64),我的错误代码是 0xc000007b

这在 OpenGL 中很常见吗?我也在使用 Glew,与 Freeglut 一起使用。

奇怪的是我根本没有尝试渲染图像或任何东西;我只是想让一个窗口出现。

守则

#include "stdafx.h"
#include "triangle.h"
#include "matrix3f.h"

static GLfloat move;
static GLfloat spin;

void init() {
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);

}

void display() {
    glClear(GL_COLOR_BUFFER_BIT);
    glPushMatrix();
    glShadeModel(GL_FLAT);
    glPopMatrix();
    glutSwapBuffers();
}

void draw_window() {
    int height = 500;
    double width = 1.9 * (double)height;
    glutInitWindowSize((int)width, height);
    glutInitWindowPosition(0, 0);
    glutCreateWindow("opengl_03");
}

void spin_display() {
    spin += 2.0;
    if (spin > 360.0)
        spin -= 360.0;
    glutPostRedisplay();
}

void move_display() {
    move += 1.0;
    if (move > 10) 
        move -= 10;
    glutPostRedisplay();
}

void keyboard(unsigned char button, int state, int x) {

}

int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitContextVersion(3, 1);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    init();
    draw_window();

    //system("pause");

    return 0;
}

还有一点很有趣,那就是我是如何从中得到一个糟糕的图像格式的。我已经检查以确保我的版本也在 IDE 中进行调试。

问题

如果可能的话,我的主要问题是确切地知道我做错了什么。

更新

我尝试将glew32.dll 移动到SysWOW64,但不幸的是这没有奏效。我还尝试了将我的 draw_window 函数移动到 main 顶部的建议,但这也不起作用。

【问题讨论】:

  • 你到底是从什么地方得到这个错误的? OpenGL 本身没有“无效格式错误”的概念。
  • 这可能意味着您正在尝试在 64 位应用程序中加载 32 位 DLL,反之亦然。
  • 很可能是这种情况,只有我在我的 system32 中加载了 32 位 dll(实际上是 glew32)。我会尝试将其移至 SysWOW64 看看会发生什么。

标签: c++ visual-c++ opengl freeglut


【解决方案1】:

问题解决了。

不要将freeglut.dll 放入您的SysWOW64 文件夹中;而是将其添加到您的 System32 文件夹中。

至少,先试试System32 文件夹。

【讨论】:

    【解决方案2】:

    在您调用glutCreateWindow 以创建OpenGL 窗口之前之后您不能调用任何OpenGL 函数。所以在调用init之前把draw_window的内容放到main中。

    【讨论】:

    • 我试过了,同时将函数移动到 main 的最顶部,看看它是否可以工作,但我仍然收到同样的错误。我会报告 JonathonReinhart 的建议是否有效。
    【解决方案3】:

    您可以尝试使用GLee 而不是 GLEW。两者执行相同的功能(为 OpenGL 扩展函数查找函数指针),但 GLee 侧重于易用性,而 GLEW 更强大。

    使用 Glee,您应该从 subversion 获取最新版本,因为最后发布的版本已经过时了。但是您需要做的就是在您的项目中包含glee.h 并添加glee.c。不需要 DLL。而且 GLee 还可以根据需要加载扩展,它不会像 GLEW 那样尝试加载数千个扩展而使您的启动代码陷入困境。

    【讨论】:

      猜你喜欢
      • 2019-02-14
      • 2011-02-06
      • 2021-05-09
      • 2018-03-31
      • 1970-01-01
      • 2020-09-29
      • 2014-05-20
      相关资源
      最近更新 更多