2011-12-30 1 views
2

У меня ошибка неправильного формата изображения, которая возникает из opengl. Я не уверен, что это потому, что я использую предварительно скомпилированные заголовки, или если я просто не инициализирую OpenGL правильно. Насколько я знаю, я не использую C++/CLI (я решил создать пустой проект в VC++ Express 2010). Я запускаю Windows7 (x64), а мой код ошибки - 0xc000007b.OpenGL дает неверный формат изображения

Это обычное явление с 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.

Вопрос

Мой основной вопрос, чтобы точно знать, что я делаю неправильно, если это возможно.

Update

Я попытался двигаться glew32.dll к SysWOW64, и, к сожалению, это не сработало. Я также попробовал предложение, которое включало перемещение моей функции draw_window в начало main, и это тоже не сработало.

+1

Что именно вы получаете от этой ошибки? OpenGL * сам * не имеет понятия «неверная ошибка формата». –

+1

Возможно, это означает, что вы пытаетесь загрузить 32-разрядную DLL в 64-битном приложении или наоборот. –

+0

Это может быть очень хорошо, только у меня есть 32-разрядная dll, загруженная в мою систему32 (фактически glew32). Я попробую переместить его на SysWOW64 и посмотреть, что произойдет. – zeboidlund

ответ

0

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

+0

Я пробовал это, а также переместил функцию на самую верхнюю часть main, чтобы увидеть, будет ли это работать, и я все равно получаю ту же ошибку. Я расскажу о том, работает ли предложение Джонатана Рейнхарта. – zeboidlund

0

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

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

2

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^