Мне нужна помощь с кодом OpenGL, который я пытаюсь создать.По сути, я пытаюсь создать треугольник зеленого цвета.
Ниже приведена среда, ошибка и код.Может кто-нибудь, пожалуйста, помогите?
Конвертер: Mac OS: High Sierra Видео: Intel HD Graphics 4000 1536 МБ графика
Сообщение об ошибке:
2018-11-14 20: 25: 46.416648-0800 GLFW opengl [41517: 6223602] MessageTracer: load_domain_whitelist_search_tree: 73: Номер версии формата файла дерева поиска (0) не поддерживается
2018-11-14 20: 25: 46.416773-0800 GLFW opengl [41517: 6223602] MessageTracer: Откат к белому списку по умолчанию
ИНФОРМАЦИЯ: OpenGL Версия: 2.1 INTEL-10.36.19 / n
ОШИБКА: 0: 1: '': Неверная директива: версия440
ОШИБКА: 0: 2: '(': синтаксическая ошибка: синтаксическая ошибка
код:
#include <stdio.h>
#include <string>
#include <vector>
#include <fstream>
#include <algorithm>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <sstream>
#include <iostream>
#include "glew.h"
#include "freeglut.h" // Include the freeGLUT header file
using namespace std;
#define WINDOW_TITLE "Modern OpenGL"
#ifndef GLSL
#define GLSL(Version, source) "#version" #Version "\n" #source
#endif
int WindowWidth = 800, WindowHeight = 600;
void UInitialize(int,char*[]);
void UInitWindow(int,char*[]);
void UResizeWindow(int,int);
void URenderGraphics(void);
void UCreateVBO(void);
void UCreateShaders(void);
const GLchar * VertexShader = GLSL(440,
in layout(location=0) vec4 vertex_Postion;
void main(){
gl_Postion = vertex_Postion;
}
);
const GLchar * FragmentShader = GLSL(440,
void main(){
gl_FragColor = vec4(0.0f,1.0f,0.0f,1.0f);
}
);
int main(int argc, char* argv[]){
UInitialize(argc, argv);
glutMainLoop();
exit(EXIT_SUCCESS);
}
void UInitialize(int argc, char* argv[]){
GLenum GlewInitResult;
UInitWindow(argc, argv);
GlewInitResult = glewInit();
if (GLEW_OK != GlewInitResult) {
fprintf(stderr,"ERROR:%s/n",glewGetErrorString(GlewInitResult));
}
fprintf(stdout, "INFO: OpenGL Version: %s/n",glGetString(GL_VERSION));
UCreateVBO();
UCreateShaders();
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
}
void UInitWindow(int argc, char* argv[]){
glutInit(&argc,argv);
glutInitWindowSize(WindowWidth, WindowHeight);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutCreateWindow(WINDOW_TITLE);
glutReshapeFunc(UResizeWindow);
glutDisplayFunc(URenderGraphics);
}
void UResizeWindow(int width, int height){
glViewport(0, 0, width, height);
}
void URenderGraphics(void){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
GLuint totalVertices = 3;
//creates tirangle
glDrawArrays(GL_TRIANGLES, 0, totalVertices);
glutSwapBuffers();
}
void UCreateVBO(void){
GLfloat verts[]={
0.0f,1.0f,
-1.0f,-1.0f,
1.0f,-1.0f
};
float numVertices = sizeof(verts);
GLuint myBufferID;
glGenBuffers(1,&myBufferID);
glBindBuffer(GL_ARRAY_BUFFER,myBufferID);
glBufferData(GL_ARRAY_BUFFER,numVertices,verts,GL_STATIC_DRAW);
GLuint floatsPerVertex = 2;
glEnableVertexAttribArray(0);
glVertexAttribPointer(0,floatsPerVertex,GL_FLOAT,GL_FALSE,0,0);
}
void UCreateShaders(void){
GLuint ProgramId = glCreateProgram();
GLuint vertexShaderId = glCreateShader(GL_VERTEX_SHADER);
GLuint fragmentShaderId = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(vertexShaderId,1,&VertexShader,NULL);
glShaderSource(fragmentShaderId,1,&FragmentShader,NULL);
glCompileShader(vertexShaderId);
glCompileShader(fragmentShaderId);
GLint isCompiled = 0;
glGetShaderiv(fragmentShaderId, GL_COMPILE_STATUS, &isCompiled);
char *infoLog;
int infologLength = 0;
int charsWritten = 0;
if(isCompiled == GL_FALSE)
{
glGetShaderiv(vertexShaderId, GL_INFO_LOG_LENGTH, &infologLength);
if (infologLength > 0)
{
infoLog = (char *)malloc(infologLength);
glGetShaderInfoLog(vertexShaderId, infologLength, &charsWritten, infoLog);
printf("\n%s\n",infoLog);
free(infoLog);
}
// Provide the infolog in whatever manor you deem best.
// Exit with failure.
glDeleteShader(vertexShaderId); // Don't leak the shader.
return;
}
fprintf(stdout, "OK!!!!!!!!!");
glAttachShader(ProgramId,vertexShaderId);
glAttachShader(ProgramId,fragmentShaderId);
glLinkProgram(ProgramId);
glUseProgram(ProgramId);
}