OpenGL предоставляет неверный формат изображения - PullRequest
2 голосов
/ 31 декабря 2011

У меня ошибка Invalid Image Format, которая возникает из 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 в верхнюю часть основного, и это тоже не сработало.

Ответы [ 3 ]

2 голосов
/ 31 декабря 2011

Проблема решена.

Не помещайте freeglut.dll в папку SysWOW64; скорее добавьте его в папку System32.

По крайней мере, сначала попробуйте папку System32.

0 голосов
/ 31 декабря 2011

Вы можете попробовать использовать GLee вместо GLEW.Оба выполняют одну и ту же функцию (поиск указателей на функции для расширений OpenGL), но GLee фокусируется на простоте использования, в то время как GLEW более мощный.

С GLee вы должны получить самую последнюю версию из Subversion в качестве последней выпущеннойверсия довольно устарела.Но все, что вам нужно сделать, это включить glee.h и добавить glee.c в ваш проект.DLL не нужны.Кроме того, GLee также загружает расширения по мере необходимости, не загружая код запуска, пытаясь загрузить тысячи расширений, как это делает GLEW.

0 голосов
/ 31 декабря 2011

Вы не можете вызывать какие-либо функции OpenGL до тех пор, пока после вы не вызовете glutCreateWindow, чтобы создать окно OpenGL.Поэтому возьмите содержимое draw_window и поместите его в main перед вызовом init.

...