2012-06-04 3 views
1

Я использую Eclipse, MinGW, и я скомпилировал freeglut и glew и скопировал их библиотеки, библиотеки DLL и файлы заголовков в нужные места (MinGW/include/GL, MinGW/lib , Windows/SysWOW64). Я также связал библиотеки (freeglut64, opengl32, glew32, glu32) в Eclipse под MinGW C++ Linker. Вот мой код ...Тип 'GLchar' не может быть разрешен

--CharGame.cpp-- 
#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
#include <GL/glew.h> 
#include <GL/freeglut.h> 
#include "CharGame.h" 
#define WINDOW_TITLE "CharGame" 

int CurrentWidth = 800, 
    CurrentHeight = 600, 
    WindowHandle = 0; 
unsigned FrameCount = 0; 
GLuint VertexShaderId, 
    FragmentShaderId, 
    ProgramId, 
    VaoId, 
    VboId, 
    ColorBufferId; 

int main(int argc, char* argv[]) { 
    Initialize(argc, argv); 
    glutMainLoop(); 
    exit(EXIT_SUCCESS); 
} 
const GLchar* VertexShader = 
{ 
    "#version 400\n"\ 

    "layout(location=0) in vec4 in_Position;\n"\ 
    "layout(location=1) in vec4 in_Color;\n"\ 
    "out vec4 ex_Color;\n"\ 

    "void main(void)\n"\ 
    "{\n"\ 
    " gl_Position = in_Position;\n"\ 
    " ex_Color = in_Color;\n"\ 
    "}\n" 
}; 
const GLchar* FragmentShader = 
{ 
    "#version 400\n"\ 

    "in vec4 ex_Color;\n"\ 
    "out vec4 out_Color;\n"\ 

    "void main(void)\n"\ 
    "{\n"\ 
    " out_Color = ex_Color;\n"\ 
    "}\n" 
}; 

void Initialize(int argc, char* argv[]) { 
    glutInit(&argc, argv); 
    glutInitContextVersion(4, 0); 
    glutInitContextFlags(GLUT_FORWARD_COMPATIBLE); 
    glutInitContextProfile(GLUT_CORE_PROFILE); 
    glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS); 
    glutInitWindowSize(CurrentWidth, CurrentHeight); 
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); 
    WindowHandle = glutCreateWindow(WINDOW_TITLE); 
    if (WindowHandle < 1) { 
     fprintf(stderr, "Error: Could not create a render window.\n"); 
     exit(EXIT_FAILURE); 
    } 
    glutReshapeFunc(Resize); 
    glutDisplayFunc(Render); 
    glutIdleFunc(Idle); 
    glutTimerFunc(0, Timer, 0); 

    fprintf(stdout, "Info: OpenGL Version: %s\n", glGetString(GL_VERSION)); 
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 

} 

void Resize(int width, int height) { 
    CurrentHeight = height; 
    CurrentWidth = width; 
    glViewport(0, 0, CurrentWidth, CurrentHeight); 
} 

void Render(void) { 
    ++FrameCount; 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glDrawArrays(GL_TRIANGLES, 0, 3); 

    glutSwapBuffers(); 
    glutPostRedisplay(); 
} 

void Idle(void) { 
    glutPostRedisplay(); 
} 

void Timer(int value) { 
    if (0 != value) { 
     char* TempString = (char*) malloc(512 + strlen(WINDOW_TITLE)); 
     sprintf(TempString, "%s: %d Frames Per Second @ %d x %d", WINDOW_TITLE, FrameCount*4, CurrentWidth, CurrentHeight); 
     glutSetWindowTitle(TempString); 
     free(TempString); 
    } 
    FrameCount = 0; 
    glutTimerFunc(250, Timer, 1); 
} 
--End CharGame.cpp-- 

--CharGame.h-- 
#ifndef CHARGAME_H_ 
#define CHARGAME_H_ 

void Initialize(int, char*[]); 
void InitWindow(int, char*[]); 
void Resize(int,int); 
void Render(void); 
void Timer(int); 
void Idle(void); 

#endif 
--End CharGame.h-- 

Я считаю, что я сделал все правильно, однако, Eclipse бросает ошибку «Тип„GLchar“не может быть решен» на VertexShader и FragmentShader. Я сделал ошибку в своем коде или пропустил необходимый шаг?

+1

вы пробовали в том числе '' ? –

+0

Да, у меня есть. Я попытался включить это вместе со всем остальным в GL/папку, и он по-прежнему бросает ошибку. – CharDev

ответ

2

Вы не объявляете строковые константы правильным способом. Вам не нужны фигурные скобки. И следите за пустыми линиями, чтобы выделить строки - либо удалить их (см. Ниже), либо добавить там «\».

Включите файл «GL/GL.h» перед «glew.h», это также может помочь.

Используйте это с помощью обычных символов:

const char* VertexShader = 
"#version 400\n"\ 
"layout(location=0) in vec4 in_Position;\n"\ 
"layout(location=1) in vec4 in_Color;\n"\ 
"out vec4 ex_Color;\n"\ 
"void main(void)\n"\ 
"{\n"\ 
" gl_Position = in_Position;\n"\ 
" ex_Color = in_Color;\n"\ 
"}\n"; 

const char* FragmentShader = 
"#version 400\n"\ 
"in vec4 ex_Color;\n"\ 
"out vec4 out_Color;\n"\ 
"void main(void)\n"\ 
"{\n"\ 
" out_Color = ex_Color;\n"\ 
"}\n"; 
+0

Пробовал это раньше, и я просто попробовал это сейчас. Он по-прежнему вызывает ошибку. :/ – CharDev

+0

Попробуйте просто «const char *» (см. Редактирование). –

+0

«const char *» работает. Тем не менее, я считаю, что для работы с OpenGL/Freeglut/GLEW должен быть GLchar *. – CharDev

1

Это просто расширение на мой комментарий на другой ответ:

const char* VertexShader = 
R"(#version 400 
layout(location=0) in vec4 in_Position; 
layout(location=1) in vec4 in_Color; 
out vec4 ex_Color; 
void main(void) 
{ 
    gl_Position = in_Position; 
    ex_Color = in_Color; 
} 
)"; 
+2

Я исправил его. Я должен был щелкнуть правой кнопкой мыши по проекту в Project Explorer, перейти к индексу, затем перестроить и обновить все файлы. Он работает сейчас. – CharDev

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