私は単純な動作を拒否する単純なopenGLとSDLプログラムを構築しようとしています。SDLとOpenGLプログラムのコンパイルに失敗しました
私は、最新のNVIDIAドライバ(私が覚えていれば285.something)を使用していると私はコンパイルするためにmingwのを使用しています。私が使用するマシンはWindows7を実行します。 mingwについての私の知識は幾分限られているので、これは非常に単純なリンクエラーかもしれません。
使用してSDLイムのバージョンは1.2です(私は1.3にアップグレードする必要がありますか?)
まず、すべてがうまく働いたが、私は単にSDLを通じてOpenGLのウィンドウを開きました。すべてがうまく働いていた、そのコードで
#include "SDL/SDL.h"
#include "SDL/SDL_image.h"
#include "SDL/SDL_opengl.h"
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
: ここで、元のmakefile
all:
g++ -o sdlGL.exe esg.cpp tiletest.cpp -lmingw32 -lSDLmain -lSDL -lopengl32 -lglu32
ためのコードだとこれらは、介在物のための今すぐ
void init_sdl(int width, int height) {
//Start SDL
if(SDL_Init(SDL_INIT_EVERYTHING) != 0) {
fDebug << "Failed to init SDL" << std::endl;
quit(1);
}
//Set SDL attrib.
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
//Set SDL video mode
if(SDL_SetVideoMode(width, height, 0, SDL_OPENGL) == 0) {
fDebug << "Failed to set SDL video mode" << std::endl;
quit(1);
}
}
//Initializes OpenGL
void init_opengl(int width, int height, bool alpha) {
// Set the OpenGL state after creating the context with SDL_SetVideoMode
glClearColor(0, 0, 0, 0);
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_TEXTURE_2D); // Need this to display a texture
if(alpha) {
glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, width, height, 0, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
と呼ばれた2つの機能です。 はその後、私はシェーダとシェーダプログラム今
void CreateShader(GLenum eShaderType, const std::string &strShaderFile, std::vector<GLuint> &shaderList) {
GLuint shader = glCreateShader(eShaderType);
const char *strFileData = strShaderFile.c_str();
glShaderSource(shader, 1, &strFileData, NULL);
glCompileShader(shader);
GLint status;
glGetShaderiv(shader, GL_COMPILE_STATUS, &status);
shaderList.push_back(shader);
}
void ClearShader(std::vector<GLuint> &shaderList) {
std::for_each(shaderList.begin(), shaderList.end(), glDeleteShader);
}
GLuint CreateProgram(const std::vector<GLuint> &shaderList) {
GLuint program = glCreateProgram();
for(size_t iLoop = 0; iLoop < shaderList.size(); iLoop++)
glAttachShader(program, shaderList[iLoop]);
glLinkProgram(program);
GLint status;
glGetProgramiv (program, GL_LINK_STATUS, &status);
for(size_t iLoop = 0; iLoop < shaderList.size(); iLoop++)
glDetachShader(program, shaderList[iLoop]);
return program;
}
の世話をするためにいくつかの機能を追加し、コンパイラはそのglCreateShader、glShaderSource、glCompileShader、glGetShaderiv、glDeleteShader、glCreateProgram、glAttachShader、glLinkProgram、glGetProgramiv不平を言うとglDetachShaderがで宣言されていませんでしたこの範囲。
私はgleeかglew(右か?)を含める必要があると思ったので、私はglewと行きました。 私は、今、コンパイラはglew.hため、エラーのトンを示しています、私のメイクに-glew32を追加しましたし、私の介在物に
#include "GL/glew.h"
をglew.h追加などの----タイプに名前を付けていません - - この範囲では宣言されなかった。
これを解決するために何をすべきかわかりません。 私はOpenGLであまり経験がないことを付け加えておきます。
エラーはなんですか? – Dikei
私は少し要約する必要がありますね!私がmakefileに-lglew32を追加して "glew.h"をインクルードすると、glewでエラーが発生します。これを言ったり、これがこのスコープなどで宣言されていなかったりしました。 – SamHLec
'#include'がファイルの最上部にあることを確認してください - 正常に動作するためには標準のOpenGLヘッダファイルの前にインクルードする必要があります。 –